对于vb和串口通讯本人是第一次接触。所以有很多细节问题都不知道,还请各位多多指教。
基于RS232串行通讯。通讯协议如下:
发送部分,1位起始符"!",2位地址,1位命令码,变长度的参数(如12300),2位校验码,1位命令结束符"*"
接收部分,1位回答起始符"&",1位命令执行结果代码,变长度回答内容如(12300),2位回答校验码和1位回答结束符"*"
其中,命令码和命令执行结果代码的意思是一个字符如A,B,C等。地址为通道号:01至99。
通讯部分全部以ASCII码进行,即发送和接收。
请哪位大哥给我能够实现这样一个通讯的程序,小弟当感激不已!
关于MSComm的参数设置小弟都已有了,只是发送和接收程序这部分不是很清楚。
我的窗体界面是这样的:Form窗体里有四个文本框,其中两个为设定电压和设定电流(用于发送数据),另外两个分别为显示电压和显示电流(用于接收数据)。通过一个Command控件发送。
基于RS232串行通讯。通讯协议如下:
发送部分,1位起始符"!",2位地址,1位命令码,变长度的参数(如12300),2位校验码,1位命令结束符"*"
接收部分,1位回答起始符"&",1位命令执行结果代码,变长度回答内容如(12300),2位回答校验码和1位回答结束符"*"
其中,命令码和命令执行结果代码的意思是一个字符如A,B,C等。地址为通道号:01至99。
通讯部分全部以ASCII码进行,即发送和接收。
请哪位大哥给我能够实现这样一个通讯的程序,小弟当感激不已!
关于MSComm的参数设置小弟都已有了,只是发送和接收程序这部分不是很清楚。
我的窗体界面是这样的:Form窗体里有四个文本框,其中两个为设定电压和设定电流(用于发送数据),另外两个分别为显示电压和显示电流(用于接收数据)。通过一个Command控件发送。
Dim Buffer as Variant
' 设置并打开窗口
MSComm1.CommPort = 1
MSComm1.PortOpen = True Buffer = Chr$(KeyAscii)
MSComm1.Output = Buffer
End Sub
'---------来自vb帮助
Private Sub Form_KeyPress (KeyAscii As Integer)好像只能对一个文本框里的内容起作用
Dim ST As StringST = MSComm1.Input'将接收到的字符付给变量ST,同时清空接收缓冲区
Select Case MSComm1.CommEvent
Case comEvReceive
'在这里处理你收到的字符
end select
'发送就直接调下面的句子
MSComm1.Output="你的字符"
我将4个文本框内的内容通过串口发送给另外4个文本框内并对应显示出来,可是运行下面这个程序时,不能显示,请问为什么呀?如果这个程序不行,有什么办法可以实现以上功能阿?
Private Sub cmdSend_Click()'声明两个字节类型的变量数组
'一个用于存储输出数据
'一个用于存储输入数据
''''''''''''''''''''''''''''''''''''''Dim OutByte() As Byte
Dim InByte() As Byte
If MSComm1.PortOpen = True Then
MSComm1.PortOpen = False '关闭串口
End If
MSComm1.CommPort = 1
MSComm1.InputLen = 0 '每次从接收缓冲区中读一个数据
MSComm1.InputMode = comInputModeBinary '以二进制形式读取字符
MSComm1.RThreshold = 1 '接收缓冲区收到一个字符以便产生一次OnComm事件
MSComm1.Settings = "19200,n,8,1"
MSComm1.PortOpen = True '打开串口,准备通信
Dim Inbuffer() As Byte
Dim Buf() As String
Dim Strsend() As String * 10
ReDim Strsend(3)
Strsend(0) = Trim(txtsdVoltage.Text)
Strsend(1) = Trim(txtsdCarrent.Text)
Strsend(2) = Trim(txtsdFrequence.Text)
Strsend(3) = Trim(txtsdDuty.Text)
ReDim Buf(3)
Buf(0) = StrConv(Strsend(0), vbFromUnicode)
Buf(1) = StrConv(Strsend(1), vbFromUnicode)
Buf(2) = StrConv(Strsend(2), vbFromUnicode)
Buf(3) = StrConv(Strsend(3), vbFromUnicode)
Inbuffer = Buf(0) & Buf(1) & Buf(2) & Buf(3)
MSComm1.Output = InbufferEnd SubPrivate Sub MSComm1_OnComm()
On Error Resume Next
Select Case MSComm1.CommEvent
Case comEvReceive '添加代码
Dim InByte() As String
Dim bufferTemp As Variant
Dim Buf() As Byte
bufferTemp = MSComm1.Input
Buf = bufferTemp
ReDim InByte(3)
InByte(0) = Mid(Buf, 1, 10)
InByte(1) = Mid(Buf, 11, 10)
InByte(2) = Mid(Buf, 21, 10)
InByte(3) = Mid(Buf, 31, 10)
txtxsVoltage.Text = InByte(0)
txtxsCarrent.Text = InByte(1)
txtxsFrequence.Text = InByte(2)
txtxsDuty.Text = InByte(3)
可是还不行,这是怎么回事呀?
多谢指教!!!