Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Общие вопросы по .NET и C# > MSComm и Com-порт


Автор: polundra 15.5.2008, 13:18
VS-2005. Делаю ввод данных с Com-порта, используя MSComm:

        Dim MSComm1 As MSComm
        Dim Buffer As String
        Dim Today
        MSComm1 = New MSComm
        MSComm1.CommPort = 1  
        MSComm1.Settings = "38400,N,8,1"
        MSComm1.InputLen = 0
        ' Открытие последовательного порта.
        MSComm1.PortOpen = True
        Buffer = ""
        Do
            Do
                S = S & MSComm1.Input
            Loop Until InStr(S, vbCrLf)
            Console.WriteLine(S)  
' Вывод данных 
        Loop Until False
        MSComm1.PortOpen = False
 
Как  сделать, чтобы по нажатию клавиши ввод из порта  можно было остановить? 

Автор: polundra 22.5.2008, 14:32
Продолжаю вопросы по теме:
1) Как осуществить чтение данных из  Com-порта, пока определенный символ на придет (MS-Comm или еще как) ?
2) Как организовать "вечный" цикл, выход из которого по нажатию Buttona будет происходить?

Автор: kosten_spb 23.5.2008, 22:52
Цитата(polundra @  22.5.2008,  12:32 Найти цитируемый пост)
2) Как организовать "вечный" цикл, выход из которого по нажатию Buttona будет происходить? 

сделать цикл в отдельном потоке
Цитата(polundra @  22.5.2008,  12:32 Найти цитируемый пост)
1) Как осуществить чтение данных из  Com-порта, пока определенный символ на придет (MS-Comm или еще как) ?

посмотри http://kosten-spb.blogspot.com/2008/05/serialport.html, может найдешь чего полезного

Автор: polundra 28.5.2008, 14:45
Сделал примерно желаемое. По нажатию Button1 начинает читать из порта, по нажатию Button2 - перестает

Imports System
Imports System.IO.Ports
Imports System.Threading

Public Class Form1
    Dim _continue As Boolean
    Dim _serialPort As SerialPort
    Dim message As String
    Const Wrap = Chr(13) & Chr(10)
    Private readThread As Thread

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        System.Windows.Forms.Control.CheckForIllegalCrossThreadCalls = False
    End Sub

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        _continue = True
        readThread = New Thread(AddressOf Read)
        readThread.IsBackground = True
        readThread.Start()
      End Sub

    Public Sub Read()
        _serialPort = New SerialPort()
        _serialPort.BaudRate = 38400
        _serialPort.ReadTimeout = 50000
        _serialPort.Open()
        FileOpen(2, "test", OpenMode.Output)
        While (_continue)
            Try
                message = _serialPort.ReadLine()
                Console.WriteLine(message)
                Print(2, message + Wrap)
            Catch ex As ObjectDisposedException
            End Try
            Thread.Sleep(100)
        End While
        _serialPort.Close()
    End Sub

    Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
        _continue = False
    End Sub
End Class

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)