vb中如何用pcomm pro 实现多串口通信

vb中如何用pcomm pro 实现多串口通信,第1张

在VB中有提供一个串口通信控件,为何还需要要用Pcomm pro呢?此控件需要在“工程---组件 ”里面添加。下面给你说说VB中的MSCOMM 控件

MSComm 控件通过串行端口传输和接收数据,为应用程序提供串行通讯功能。

MSComm 控件提供下列两种处理通讯的方式:

事件驱动通讯是处理串行端口交互作用的一种非常有效的方法。在许多情况下,在事件发生时需要得到通知,例如,在 Carrier Detect (CD) 或 Request To Send (RTS) 线上一个字符到达或一个变化发生时。在这些情况下,可以利用 MSComm 控件的 OnComm 事件捕获并处理这些通讯事件。OnComm 事件还可以检查和处理通讯错误。

在程序的每个关键功能之后,可以通过检查 CommEvent 属性的值来查询事件和错误。如果应用程序较小,并且是自保持的,这种方法可能是更可取的。例如,如果写一个简单的电话拨号程序,则没有必要对每接收一个字符都产生事件,因为唯一等待接收的字符是调制解调器的“确定”响应。

每个使用的 MSComm 控件对应着一个串行端口。如果应用程序需要访问多个串行端口,必须使用多个 MSComm 控件。可以在 Windows“控制面板”中改变端口地址和中断地址。

尽管 MSComm 控件有很多重要的属性,但首先必须熟悉几个属性。

属性 描述

CommPort 设置并返回通讯端口号。

Settings 以字符串的形式设置并返回波特率、奇偶校验、数据位、停止位。

PortOpen 设置并返回通讯端口的状态。也可以打开和关闭端口。

Input 从接收缓冲区返回和删除字符。

Output 向传输缓冲区写一个字符串。

下面这个简单的例子演示了用调制解调器进行基本的串行通讯:

Private Sub Form_Load ()

' 保存输入子串的缓冲区

Dim Instring As String

' 使用 COM1。

MSComm1.CommPort = 1

' 9600 波特,无奇偶校验,8 位数据,一个停止位。

MSComm1.Settings = "9600,N,8,1"

' 当输入占用时,

' 告诉控件读入整个缓冲区。

MSComm1.InputLen = 0

' 打开端口。

MSComm1.PortOpen = True

' 将 attention 命令送到调制解调器。

MSComm1.Output = "ATV1Q0" &Chr$(13) ' 确保

' 调制解调器以"OK"响应。

' 等待数据返回到串行端口。

Do

DoEvents

Buffer$ = Buffer$ &MSComm1.Input

Loop Until InStr(Buffer$, "OK" &vbCRLF)

' 从串行端口读 "OK" 响应。

' 关闭串行端口。

MSComm1.PortOpen = False

End Sub

使用 pyserial 就可以处理串口通信,这个包是跨平台的。

http://pyserial.sourceforge.net/

示例程序在这里:

https://pyserial.readthedocs.io/en/latest/examples.html#wxpython-examples

import serial

# 创建serial实例

serialport = serial.Serial()

serialport.port = 'COM1'

serialport.baudrate = 9600

serialport.parity = 'N'

serialport.bytesize = 8

serialport.stopbits = 1

serialport.timeout = 0.6

try:

    serialport.open()

    serialport.setDTR(True)

    serialport.setRTS(True)

except Exception, ex:

    print ex

    

# 发送数据

serialport.write(raw_data)

# 根据项目要求,可以开一个线程扫描接收数据

Spcomm串口通信控件的基本属性、方法和事件说明如下:

CommName属性:计算机串口端口号的名字,COM1、COM2……等,在打开串口前,必须填写好此值。

Parity属性:校验位 None、Odd、Even、Mark、Space等。

BaudRate:设定支持串口通信用的波特率9600,4800等,根据实际需要来定,在串口打开后也可更改波特率,实际波特率随之更改。

ByteSize属性:表示一个字节中,使用多少个数据位收发数据,根据具体情况设定5、6、7、8等。

StopBits属性:表示一个字节中,使用停止位的位数,根据具体情况设定1、1.5、2等。

SendDataEmpty属性:布尔属性,为True时表示发送缓存为空,或者发送队列里没有信息;为False时表示表示发送缓存不为空,或者发送队列里有信息。

StartComm方法:用来打开通信串口,开始通信。如果失败,则会导致串行口错误。错误类型大致分为串行口己处于打开状态,所以不能打开串行口,不能创建读写进程,不能建立串行口缓冲区等。

StopComm方法:用来停止通信串行口的所有进程,关闭串口。

WriteCommData(pDataToWrite:PChardwSizeofDataToWrite:Word)方法是带有布尔型返回值 的函数,其中参量pDataToWrite是要写入串行口的字符串,dwSizeofDataToWrite是要写入的字符串的长度。该函数通过一个写线程向串行口输出缓冲区发送数据。发送 *** 作将在后台默认执行。如果写线程 PostMessage成功,则返回值是True,若写线程失败,返回值是False。

OnReceiveData(Buffer:PointerBufferLength:Word),其中Buffer是指向输入缓冲区的指针。BufferLength是从缓冲区收到的数据长度。当输入缓冲区收到数据时,该事件被触发。当输入缓存有数据时将触发该事件,对从串口收到的数据进行处理。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/8062819.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-13
下一篇 2023-04-13

发表评论

登录后才能评论

评论列表(0条)

保存