VB中使用多个串口进行通信应该怎么办?最好举例说明,谢谢了。

kuaidi.ping-jia.net  作者:佚名   更新日期:2024-06-29
VB利用串口与单片机通信

Option Explicit
Dim strData As String
Dim sjSEnd() As Byte

'输入处理为16进制字符串
Public Sub InputManage(bytInput() As Byte, intInputLenth As Integer)
Dim n As Integer
ReDim bytReceiveByte(intInputLenth)
For n = 0 To intInputLenth - 1 Step 1
strData = strData & Hex(bytInput(n))
Next n
Text2 = strData
End Sub

Private Sub Command1_Click()
Timer1.Enabled = True
End Sub

Private Sub Form_Load()
MSComm1.Settings = "19200,N,8,1"
MSComm1.RThreshold = 1
MSComm1.PortOpen = True
Text1 = "" '在Text1中写16进制指令
Timer1.Interval = 200
Timer1.Enabled = False
End Sub

Private Sub MSComm1_OnComm()
Dim bytInput() As Byte
Dim intInputLen As Integer
If (MSComm1.CommEvent = comEvReceive) Then
MSComm1.InputMode = comInputModeBinary
intInputLen = MSComm1.InBufferCount
If intInputLen > 0 Then
Timer1.Enabled = False
End If
ReDim bytInput(intInputLen)
bytInput = MSComm1.Input
Call InputManage(bytInput, intInputLen)
'数据处理
'Dim l As Integer
'Dim ml As Byte
'l = Val("&H" & Mid(strData, 1, 2))
'ml = Val("&H" & Mid(strData, 3, 2))
'If Len(strData) = 2 * l + 2 Then
' strReceive(ml) = Mid(strData, 5, 2 * (l - 2))
'随后进行你想的数据处理
' strData = "" '清除接收数据
'End If
End If
End Sub

Private Sub Timer1_Timer()
Dim l As Integer
Dim i As Integer
l = Len(Text1) '可用于多字节指令
ReDim sjSEnd(l / 2 + 1)
sjSEnd(0) = &HBB
sjSEnd(l / 2 + 1) = &HEE
For i = 1 To Len(Text1) Step 2
sjSEnd((i + 1) / 2) = Val("&H" & Mid(Text1, i, 2))
Next
MSComm1.Output = sjSEnd
End Sub

9600是波特率 N是奇偶校验位,8是数据位,1是停止位。它设定的是串口通讯的方式。
通讯协议可以理解为暗号,以特定的格式发出,才会有应答!至于是什么格式,就要看你的串口设备的情况了,有的是自定的协议,也有用公共协议的,比如MODBUS协议,就是8为数据位的,例如发送01 03 00 00 00 02 C4 0B,那么它的意思就是读一号地址串口设备起始地址为零的两个寄存器的数据,01 是串口设备地址码,03是功能码,读保持寄存器。02是寄存器的数量,C4和0B是由前六位数据经过标准CRC16计算程序计算出的校验码,目的是防止出错。只要知道了你的串口设备的通讯协议,然后根据协议发出相应的字符串命令,就可以得到回应了,不过你用下面这句发送好像是不行MSComm1.Output = Trim(Text2.Text),
给你个写个例子试下:
DIM DATA(7) AS STRING
DIM I AS INTEGER
MSCOMM1.INBUFFERCOUNT = 0
FOR I = 0 TO 7
DATA(I)=TEXT1(I).TEXT
NEXT
MSCOMM1.OUTPUT = DATA
应该差不多吧!

5个串口同时接收数据进行处理,没有办法。如果不是同时处理,可以添加一个选择并设置串口的按钮(当然要添加一个text框以便输入设置参数)

先用一个控件,将你的控件的index属性首先设置为0,之后如果需要的话,用load语句来加控件。

  • VB编程串口通信
    答:做根线,232 to 232 ,做的时候要注意2脚接3脚,(如两个头是A和B)也就是A的2接B头的3,A的3脚接B的2脚,5接5.然后用添加两个MSCOMM控件(Microsoft Communications Control(以下简称MSComm)是Microsoft公司提供的简化Windows下串行通信编程的ActiveX控件,它为应用程序提供了通过串行接口收发数据的简便...
  • vb 串口通讯
    答:使用两个mscomm控件不能同时打开一个串口。
  • VB 串口通信
    答:按图添加控件,可以加一个按扭!加按扭了就把From_Load()的代码放在按钮的代码下。可以修改波特率等.Private Sub Form_Load()MSComm1.Settings = "9600,N,8,1" '波特率9600bit/s,无校验,8位数据,1位停止位 MSComm1.CommPort = 1 '设定串口,为1为comm1 MSComm1.InBufferSize = 8 '设置返回...
  • 高手来帮帮忙啊!vb的串口通信
    答:然后上位机VB程序接受到以下数据:68 12 12 68 0 2 8 32 3 0 0 0 0 0 2 0 1 0 0 5 1 FF 47 16 这是PLC正确接收并写入信息的返回数据。4、串口接收程序:在数据接收程序中,利用VB中MSComm控件,一次接收缓冲区中的全部数据,存放到数组形式的暂存单元中,然后分析每个元素的值,得到读...
  • VB串口通信
    答:以前做工程用的,你修改一下,可能对你有用,你看看吧 '===串口初始化=== Private Sub Comm_initial(Port As Byte, BaudRate As String, ParityBit As String, DataBit As Integer, StopBit As Integer)On Error GoTo ErrorTrap If MSComm1.PortOpen = True Then MSComm1.PortOpen = False ...
  • vb串口通信怎么调试? 用哪个部件?
    答:每个使用的 MSComm 控件对应着一个串行端口。如果应用程序需要访问多个串行端口,必须使用多个 MSComm 控件。可以在 Windows“控制面板”中改变端口地址和中断地址。尽管 MSComm 控件有很多重要的属性,但首先必须熟悉几个属性。属性 描述 CommPort 设置并返回通讯端口号。Settings 以字符串的形式设置并返回...
  • vb 串口通讯问题
    答:你这段代码是使用API函数操作串口通信的一部分,仅有这些代码而无API声明,是无法进行通信的。以下是使用API声明的串口通信代码,根据枕善居提供代码改写:Option Explicit Private ComNum As Long Private bRead(255) As Byte Private Type COMSTAT fCtsHold As Long fDsrHold As Long fRlsdHold As Long fXoffHold...
  • 用VBA可以进行串口通讯吗?如果可以的话,该怎么实现,多谢大侠赐教!!_百...
    答:一.将两台PC机串行口的连接(如图)二.建立VB工程1.在VB窗体添加控件(如图)2.VB编程:'PC机串行口用命令按钮启动接收/发送VB程序 Private Sub Form_Load() MSComm1.PortOpen = True '开启通信控件的端口End Sub '点击“发送”命令按钮发送数据Private Sub Command1_Click() MSComm1.Output ...
  • VB6.0中的串口通讯
    答:Dim Buffer As Variant Dim Arr() As Byte ' 设定并开启连接埠MSComm1.CommPort = 1 ' 连线速度 9600 baud、无同位检查、资料位元 8、停止位元 1 MSComm1.Settings = "9600,N,8,1" 告诉控制项当使用 Input 时,读取整个暂存区 MSComm1.InputLen = 0 MSComm1.PortOpen = True ' 设定 ...
  • 求助VB大神关于串口通信!!!
    答:MSComm 控件示例下面这个简单的例子演示了用调制解调器进行基本的串行通讯:Private Sub Form_Load ()' 保存输入子串的缓冲区 Dim Instring As String ' 使用 COM1。MSComm1.CommPort = 1 ' 9600 波特,无奇偶校验,8 位数据,一个停止位。MSComm1.Settings = "9600,N,8,1" ' 当输入...