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

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


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

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

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

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

вернее работает, но я же не вижу вывода :(
...
Рейтинг: 0 / 0
19.07.2010, 12:56
    #36747975
Konst_One
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
VB 2005 и вывод с ком порта, совсем запутался
Код: 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
19.07.2010, 14:24
    #36748222
MotoCV
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
VB 2005 и вывод с ком порта, совсем запутался
Код: 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
19.07.2010, 14:27
    #36748232
Konst_One
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
VB 2005 и вывод с ком порта, совсем запутался
static надо переменную объявить и на событие OnComm, или как оно там называется у твоего компонента, повесить прибавление данных к этой переменной или лучше через stringbuilder
...
Рейтинг: 0 / 0
19.07.2010, 15:00
    #36748318
MotoCV
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
VB 2005 и вывод с ком порта, совсем запутался
Спасибо за совет, да по событию datareceived у компоненты SerialPort я собираю строку с данными. Но вопрос остается открытым как это выводить в textbox???

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

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

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

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


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

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

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

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

А про сериализацию можно поподробнее, как это синхронизировать потоки???
...
Рейтинг: 0 / 0
19.07.2010, 15:24
    #36748408
Konst_One
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
VB 2005 и вывод с ком порта, совсем запутался
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
19.07.2010, 15:25
    #36748414
Konst_One
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
VB 2005 и вывод с ком порта, совсем запутался
ошибся
Код: plaintext
1.
2.
3.
Private Sub Com_datareceived(ByVal Value as String...)...
...
SetText(Value)
End Sub
...
Рейтинг: 0 / 0
19.07.2010, 15:31
    #36748429
MotoCV
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
VB 2005 и вывод с ком порта, совсем запутался
ну вот посмотрите:

Код: 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
19.07.2010, 15:36
    #36748448
Konst_One
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
VB 2005 и вывод с ком порта, совсем запутался
Код: 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
19.07.2010, 15:38
    #36748454
MotoCV
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
VB 2005 и вывод с ком порта, совсем запутался
ругается также и на ту же строку
...
Рейтинг: 0 / 0
19.07.2010, 15:40
    #36748461
Konst_One
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
VB 2005 и вывод с ком порта, совсем запутался
MotoCVругается также и на ту же строку

на какую?
...
Рейтинг: 0 / 0
19.07.2010, 15:45
    #36748476
Konst_One
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
VB 2005 и вывод с ком порта, совсем запутался
Код: 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
19.07.2010, 15:51
    #36748495
MotoCV
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
VB 2005 и вывод с ком порта, совсем запутался
MotoCV

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

на строке

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


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

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

на строке

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


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

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


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