Обработка данных и преобразование - PullRequest
1 голос
/ 19 января 2012

У меня есть восемь текстовых полей, каждое из которых может иметь любое числовое значение, состоящее только из цифр от 1-8 до восьми цифр в каждом. Нет 0 или 9.

Я использую таймер для циклического просмотра последовательностей текстовых полей с заданной скоростью. Это уже настроено.

Теперь вот самая сложная часть, которая так со мной обнажена.

Мне нужно вывести первое значение текстового поля, подождать некоторое время, затем вывести его счетчик буква (ниже числа на клавиатуре), перейти к следующему текстовому полю и повторить. Пример:

У меня в восьми коробках:

1
34
765
2
56
84
7
12345678

После каждого вывода каждого последовательного текстового поля мне нужно вывести:

Q
ER
UYT
W
TY
IR
U
QWERTYUI

«Выход» будет SerialPort1.Write(*numbers or letters*) разделен таймером между каждым ВКЛ / ВЫКЛ. Числа включают устройство, буквы выключают его. Начиная с SerialPort1.Write(TxtLoop1.Text)

У меня уже установлена ​​связь по RS-232. Информация поступает на 8-канальную плату сбора данных DLP-IO8 USB.

Чтобы лучше понять устройство:

1-8 включает каждый канал (12345678)

Q-I отключает каждый канал (QWERTYUI)

Таблица истинности для устройства:

1 = Ch1 ON | Q = Ch1 OFF
2 = Ch2 ON | W = Ch2 OFF
3 = Ch3 ON | E = Ch3 OFF
--
8 = Ch8 ON | I = Ch8 OFF

При отправке «124» включаются каналы 1, 2 и 4. Отправка «QWR» отключит каналы 1, 2 и 4.

Я кодирую только несколько дней, так что успокойся. Учусь, как я иду. Моя форма для справки

В конечном итоге я пытаюсь обновить свой проект PC Interface , перейдя с параллельного порта на USB. Это будет функция «Custom Loop» для устройства.

Dim loopnum1 As String
        loopnum1 = TxtLoop1.Text
        Dim ListOfloop1 As String() = loopnum1.Split(New Char() {""})
        Dim singlenum1 As String
        Dim offloop1 As String
        offloop1 = "Q"
        For Each singlenum1 In ListOfloop1
            SerialPort1.Write(singlenum1)
            Timer2.Interval = (cmbSPLoop.Value) * 12
            If singlenum1 = "1" Then offloop1 = "Q"
            If singlenum1 = "2" Then offloop1 = "W"
            If singlenum1 = "3" Then offloop1 = "E"
            If singlenum1 = "4" Then offloop1 = "R"
            If singlenum1 = "5" Then offloop1 = "T"
            If singlenum1 = "6" Then offloop1 = "Y"
            If singlenum1 = "7" Then offloop1 = "U"
            If singlenum1 = "8" Then offloop1 = "I"
            SerialPort1.Write(offloop1)
        Next
        Dim loopnum2 As String
        loopnum2 = TxtLoop2.Text
        Dim ListOfloop2 As String() = loopnum2.Split(New Char() {""})
        Dim singlenum2 As String
        Dim offloop2 As String
        offloop2 = "Q"
        For Each singlenum2 In ListOfloop2
            SerialPort1.Write(singlenum2)
            Timer2.Interval = (cmbSPLoop.Value) * 12
            If singlenum2 = "1" Then offloop2 = "Q"
            If singlenum2 = "2" Then offloop2 = "W"
            If singlenum2 = "3" Then offloop2 = "E"
            If singlenum2 = "4" Then offloop2 = "R"
            If singlenum2 = "5" Then offloop2 = "T"
            If singlenum2 = "6" Then offloop2 = "Y"
            If singlenum2 = "7" Then offloop2 = "U"
            If singlenum2 = "8" Then offloop2 = "I"
            SerialPort1.Write(offloop2)
        Next

и т.д.

Полагаю, я делаю это восемь раз подряд с каждым шагом TxtLoop # .text или?

1 Ответ

2 голосов
/ 19 января 2012

I either do this eight times in a row once with each increment of TxtLoop#.text or ?

Я думаю, вы хотите попробовать вложенный цикл, а не 8 циклов, которые выводят каждый символ в 8 текстовых полях.

Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
        OutputToSerialPort()
    End Sub


Private Sub OutputToSerialPort()
    Dim txt = New TextBox
    For index As Integer = 1 To 8
        txt = FindControl(GroupBox1.Controls, "TextBox" & index)
        Dim ListOfloop As Char() = txt.Text.ToCharArray()  '<- edits on this line
        Dim singlenum As String
        Dim offloop As String
        offloop = "Q"
        For Each singlenum In ListOfloop
            'SerialPort1.Write(singlenum)
            'Timer2.Interval = (cmbSPLoop.Value) * 12
            If singlenum = "1" Then offloop = "Q"
            If singlenum = "2" Then offloop = "W"
            If singlenum = "3" Then offloop = "E"
            If singlenum = "4" Then offloop = "R"
            If singlenum = "5" Then offloop = "T"
            If singlenum = "6" Then offloop = "Y"
            If singlenum = "7" Then offloop = "U"
            If singlenum = "8" Then offloop = "I"
            'SerialPort1.Write(offloop)
        Next
    Next index
End Sub

Public Function FindControl(ByVal oControls As Control.ControlCollection,
ByVal strControlName As String) As Control
    Dim MyCtl As Control

    For Each MyCtl In oControls
        If MyCtl.Name = strControlName Then
            Return MyCtl
        Else
            If MyCtl.Controls.Count > 0 Then
                Return FindControl(MyCtl.Controls, strControlName)
            End If
        End If
    Next
    Return Nothing
End Function

ps Я не думаю, что вам нужен loopnum1.Split (или в моем коде .Split (New Char () {""}) он не превращает несколько цифр в массив, поэтому курсив. Мы обсуждали это иВы даете мне знать, что хотите вывести каждую цифру в каждом текстовом поле, и я отредактировал свой ответ.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...