powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / VB 2005 и вывод с ком порта, совсем запутался
23 сообщений из 23, страница 1 из 1
VB 2005 и вывод с ком порта, совсем запутался
    #36747783
MotoCV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Здравствуйте, подскажите пожалуйста. Есть железяка, зацеплена на COM1, по гипертерминалу я к ней цепляюсь и вижу, что она мне присылает. Как это же сделать из VB 2005?
После дня поисков в нете, нашел, что надо использовать MScomm, но он для VB6.0, для VB 8.0 я такой компоненты не нашел.
Мненеобходимо сделать приложение, которое бы слушало COM1 и выводило в файлик все что на этот порт приходит.
...
Рейтинг: 0 / 0
VB 2005 и вывод с ком порта, совсем запутался
    #36747811
MotoCV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
http://support.microsoft.com/kb/904795

этот способ почему-то тоже не работает :(


блин чегож так сложно то здесь все :(
...
Рейтинг: 0 / 0
VB 2005 и вывод с ком порта, совсем запутался
    #36747828
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MotoCVблин чегож так сложно то здесь все :(
и даже ветка форума отдельная
...
Рейтинг: 0 / 0
VB 2005 и вывод с ком порта, совсем запутался
    #36747850
MotoCV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
http://msdn.microsoft.com/ru-ru/library/system.io.ports.serialport.aspx
вот нашел еще описание SerialPort, пошел пробовать...
...
Рейтинг: 0 / 0
VB 2005 и вывод с ком порта, совсем запутался
    #36747892
MotoCV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.ProMotoCVблин чегож так сложно то здесь все :(
и даже ветка форума отдельная

там у меня нет прав сообщения постить :(
...
Рейтинг: 0 / 0
VB 2005 и вывод с ком порта, совсем запутался
    #36747953
MotoCV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо microsoft, действительно SeriaPort дает возможность подключиться к порту. Теперь вот какой вопрос остался.

На форме есть RichTextBox, как организовать вывод в него, вот такая конструкция не работает:

Код: plaintext
1.
2.
3.
4.
5.
 
cont = True
 While cont
   name = comSP.ReadLine()
   outRTB.AppendText(name)
 End While

вернее работает, но я же не вижу вывода :(
...
Рейтинг: 0 / 0
VB 2005 и вывод с ком порта, совсем запутался
    #36747975
Фотография Konst_One
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
'для обычного TextBox

    Delegate Sub SetTextCallback(ByVal Value As String)


    Private Sub SetText(ByVal Value As String)
        Dim s As String = Me.txtOUT.Text

        ' InvokeRequired required compares the thread ID of the
        ' calling thread to the thread ID of the creating thread.
        ' If these threads are different, it returns true.
        If Me.txtOUT.InvokeRequired Then
            Dim d As New SetTextCallback(AddressOf SetText)
            Me.Invoke(d, New Object() {Value})
        Else
            Me.txtOUT.Text = s & Value & vbCrLf
            Me.txtOUT.SelectionStart = Me.txtOUT.TextLength
        End If
    End Sub
...
Рейтинг: 0 / 0
VB 2005 и вывод с ком порта, совсем запутался
    #36748222
MotoCV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
    Delegate Sub SetTextCallback(ByVal Value As String)
    Private Sub SetText(ByVal Value As String)
        Dim s As String = Me.outRTB.Text
        ' InvokeRequired required compares the thread ID of the
        ' calling thread to the thread ID of the creating thread.
        ' If these threads are different, it returns true.
        If Me.outRTB.InvokeRequired Then
            Dim d As New SetTextCallback(AddressOf SetText)
            Me.Invoke(d, New Object() {Value})
        Else
            Me.outRTB.Text = s & Value & vbCrLf
            Me.outRTB.SelectionStart = Me.outRTB.TextLength()
        End If
    End Sub

вызов:

Код: plaintext
1.
        SetText(comSP.ReadLine)

но так выводится только одна строка, а там с com порта постоянно идут данные, как можно организовать потоковый вывод?
...
Рейтинг: 0 / 0
VB 2005 и вывод с ком порта, совсем запутался
    #36748232
Фотография Konst_One
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
static надо переменную объявить и на событие OnComm, или как оно там называется у твоего компонента, повесить прибавление данных к этой переменной или лучше через stringbuilder
...
Рейтинг: 0 / 0
VB 2005 и вывод с ком порта, совсем запутался
    #36748318
MotoCV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо за совет, да по событию datareceived у компоненты SerialPort я собираю строку с данными. Но вопрос остается открытым как это выводить в textbox???

Строка собираться то собирается, но ее же надо постоянно подствалять в текст бокс как? По тому же событию где компонента получает доступ не работает - "Недопустимая операция в нескольких потоках: попытка доступа к элементу управления "outRTB" не из того потока, в котором он был создан." outRTB - это text box.

Еслия вывод строковой переменной вешаю на нажатие кнопки - все работает по нажатию, может быть стоит организовать цикл бесконечный с задержкой, чтоб выводил данные в textbox???
...
Рейтинг: 0 / 0
VB 2005 и вывод с ком порта, совсем запутался
    #36748337
Фотография Konst_One
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MotoCVСпасибо за совет, да по событию datareceived у компоненты SerialPort я собираю строку с данными. Но вопрос остается открытым как это выводить в textbox???

Строка собираться то собирается, но ее же надо постоянно подствалять в текст бокс как? По тому же событию где компонента получает доступ не работает - "Недопустимая операция в нескольких потоках: попытка доступа к элементу управления "outRTB" не из того потока, в котором он был создан." outRTB - это text box.

Еслия вывод строковой переменной вешаю на нажатие кнопки - все работает по нажатию, может быть стоит организовать цикл бесконечный с задержкой, чтоб выводил данные в textbox???


я же вам делегат написал, эту ф-ю и вызывайте в событии получения данных
...
Рейтинг: 0 / 0
VB 2005 и вывод с ком порта, совсем запутался
    #36748345
Фотография Игорь Горбонос
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
> Автор: MotoCV
> "Недопустимая операция в нескольких потоках: попытка доступа к элементу управления "outRTB" не из того потока, в
> котором он был создан." outRTB - это text box.

А что сериализацию уже отменили??? Синхронизируй потоки и будет тебе счастье :)

Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
VB 2005 и вывод с ком порта, совсем запутался
    #36748382
MotoCV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Konst_One
я же вам делегат написал, эту ф-ю и вызывайте в событии получения данных

при попытке SetTextCallback(outp) - выдает "SetTextCallback' is a type and cannot be used as an expression."

А про сериализацию можно поподробнее, как это синхронизировать потоки???
...
Рейтинг: 0 / 0
VB 2005 и вывод с ком порта, совсем запутался
    #36748408
Фотография Konst_One
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MotoCVKonst_One
я же вам делегат написал, эту ф-ю и вызывайте в событии получения данных

при попытке SetTextCallback(outp) - выдает "SetTextCallback' is a type and cannot be used as an expression."

А про сериализацию можно поподробнее, как это синхронизировать потоки???


вы что-то не так делаете.
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
'Form class with TextBox (txtOUT)
Imports System.Threading
Public Class MyClass

    ' This delegate enables asynchronous calls for setting
    ' the text property on a TextBox control.
    Delegate Sub SetTextCallback(ByVal Value As String)

    Private Sub SetText(ByVal Value As String)
        Dim s As String = Me.txtOUT.Text

        ' InvokeRequired required compares the thread ID of the
        ' calling thread to the thread ID of the creating thread.
        ' If these threads are different, it returns true.
        If Me.txtOUT.InvokeRequired Then
            Dim d As New SetTextCallback(AddressOf SetText)
            Me.Invoke(d, New Object() {Value})
        Else
            Me.txtOUT.Text = s & Value & vbCrLf
            Me.txtOUT.SelectionStart = Me.txtOUT.TextLength
        End If
    End Sub

'event
Private Sub Com_datareceived(ByVal Value as String...)...
...
SetTextCallback(Value)
End Sub
...
Рейтинг: 0 / 0
VB 2005 и вывод с ком порта, совсем запутался
    #36748414
Фотография Konst_One
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ошибся
Код: plaintext
1.
2.
3.
Private Sub Com_datareceived(ByVal Value as String...)...
...
SetText(Value)
End Sub
...
Рейтинг: 0 / 0
VB 2005 и вывод с ком порта, совсем запутался
    #36748429
MotoCV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ну вот посмотрите:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
    Private Sub SetText(ByVal Value As String)
        Dim s As String = Me.outRTB.Text
        ' InvokeRequired required compares the thread ID of the
        ' calling thread to the thread ID of the creating thread.
        ' If these threads are different, it returns true.
        If Me.outRTB.InvokeRequired Then
            Dim d As New SetTextCallback(AddressOf SetText)
            Me.Invoke(d, New Object() {Value})
        Else
            Me.outRTB.Text = s & Value & vbCrLf
            Me.outRTB.SelectionStart = Me.outRTB.TextLength()
        End If
    End Sub

Код: plaintext
1.
2.
3.
4.
    Private Sub comSP_DataReceived(ByVal sender As System.Object, ByVal e As System.IO.Ports.SerialDataReceivedEventArgs) Handles comSP.DataReceived
        outp = outp + comSP.ReadLine
        SetText(outp)
    End Sub

при попытке запустить выдает
"Недопустимая операция в нескольких потоках: попытка доступа к элементу управления "outRTB" не из того потока, в котором он был создан."

на строке

Код: plaintext
        Dim s As String = Me.outRTB.Text
...
Рейтинг: 0 / 0
VB 2005 и вывод с ком порта, совсем запутался
    #36748448
Фотография Konst_One
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
    Private Sub SetText(ByVal Value As String)
        Dim s As String
        ' InvokeRequired required compares the thread ID of the
        ' calling thread to the thread ID of the creating thread.
        ' If these threads are different, it returns true.
        If Me.outRTB.InvokeRequired Then
            Dim d As New SetTextCallback(AddressOf SetText)
            Me.Invoke(d, New Object() {Value})
        Else
            Me.outRTB.Text = Me.outRTB.Text & Value & vbCrLf
            Me.outRTB.SelectionStart = Me.outRTB.TextLength()
        End If
    End Sub

так попробуйте
...
Рейтинг: 0 / 0
VB 2005 и вывод с ком порта, совсем запутался
    #36748454
MotoCV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ругается также и на ту же строку
...
Рейтинг: 0 / 0
VB 2005 и вывод с ком порта, совсем запутался
    #36748461
Фотография Konst_One
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MotoCVругается также и на ту же строку

на какую?
...
Рейтинг: 0 / 0
VB 2005 и вывод с ком порта, совсем запутался
    #36748476
Фотография Konst_One
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
Private outp as String = ""

...
    Private Sub comSP_DataReceived(ByVal sender As System.Object, ByVal e As System.IO.Ports.SerialDataReceivedEventArgs) Handles comSP.DataReceived
Dim s as String = ""
        s = comSP.ReadLine
        outp += s
        SetText(s)
    End Sub
...
Рейтинг: 0 / 0
VB 2005 и вывод с ком порта, совсем запутался
    #36748495
MotoCV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MotoCV

при попытке запустить выдает
"Недопустимая операция в нескольких потоках: попытка доступа к элементу управления "outRTB" не из того потока, в котором он был создан."

на строке

Код: plaintext
        Dim s As String = Me.outRTB.Text


вот на эту строку ругается в SetText
...
Рейтинг: 0 / 0
VB 2005 и вывод с ком порта, совсем запутался
    #36748498
Фотография Konst_One
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MotoCVMotoCV

при попытке запустить выдает
"Недопустимая операция в нескольких потоках: попытка доступа к элементу управления "outRTB" не из того потока, в котором он был создан."

на строке

Код: plaintext
        Dim s As String = Me.outRTB.Text


вот на эту строку ругается в SetText

вы невнимательны, см выше ,я вам дал исправленный вариант
...
Рейтинг: 0 / 0
VB 2005 и вывод с ком порта, совсем запутался
    #36748513
MotoCV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
И вправду, работает, простите за невнимательность и спасибо за помощь!!!! УРА!!!
...
Рейтинг: 0 / 0
23 сообщений из 23, страница 1 из 1
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / VB 2005 и вывод с ком порта, совсем запутался
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]