求助:VB串口通讯 发送命令接受数据
我需要在上位机发送命令然后下位机返回数据,在界面上显示其中的三相温度数据。如何编写VB代码?1)上位机下传数据格式:发送次序说明内容备注1温控器地址01H~ffH2功能代...
我需要在上位机发送命令然后下位机返回数据,在界面上显示其中的三相温度数据。如何编写VB代码?
1) 上位机下传数据格式:
发送次序 说明 内容 备注
1 温控器地址 01H~ffH
2 功能代码 03H 仅支持03H读数据功能
3 起始地址字 高8位 00H 要读出的数据字在下位机存储的起始地址
4 起始地址字 低8位 00H
5 读取数据个数字 高8位 00H 固定读取6个字的内容
6 读取数据个数字 低8位 06H
7 CRC校验 低8位 xxH
8 CRC校验 高8位 xxH
2) 下位机返回的数据格式:
发送次序 说明 内容 备注
1 温控器地址 01H~ffH
2 功能代码 03H 仅支持03H读数据功能
3 返回数据的字节数 0CH 返回数据的字数*2
4 温控器状态字 高8位 00H 状态字定义见表三
5 温控器状态字 低8位 xxH
6 A相温度数据 高8位 00H 数据为16进制数,单位为1摄氏度,所得数据减23H即为实测温度
7 A相温度数据 低8位 xxH
8 B相温度数据 高8位 00H
9 B相温度数据 低8位 xxH
10 C相温度数据 高8位 00H
11 C相温度数据 低8位 xxH
12 定时开风机时间 高8位 00H 数据为零表示温控器已取消定时开风机功能
13 定时开风机时间 低8位 xxH
14 D相温度数据 高8位 00H 数据为16进制数,单位为1摄氏度,所得数据减23H即为实测温度(温控器无D相温度检测功能时,此参数无效)
15 D相温度数据 低8位 xxH
16 CRC校验 低8位 xxH
17 CRC校验 高8位 xxH
3) 举例说明:
当前有一台下位机,所设地址为“2”,A相温度为31度,B相温度为22度,C相温度为24度,定时开风机时间为24,D相温度为25度,传感器无故障,风机为开启,温控器没有输出超温和跳闸信号。
上位机想要读取该仪表的所有信息,发送数据为:
02H―03H―00H―00H―00H―06H―C5H―FBH
此时下位机返回数据为:
02H-03H-0CH-00H-00H-00H-42H-00H-39H-00H-3BH-00H-18H-00H-3CH-46H-A9H
现在已经接受到返回的数据,但是是在一直往后写。我想知道如何只显示最新接受到的数据 展开
1) 上位机下传数据格式:
发送次序 说明 内容 备注
1 温控器地址 01H~ffH
2 功能代码 03H 仅支持03H读数据功能
3 起始地址字 高8位 00H 要读出的数据字在下位机存储的起始地址
4 起始地址字 低8位 00H
5 读取数据个数字 高8位 00H 固定读取6个字的内容
6 读取数据个数字 低8位 06H
7 CRC校验 低8位 xxH
8 CRC校验 高8位 xxH
2) 下位机返回的数据格式:
发送次序 说明 内容 备注
1 温控器地址 01H~ffH
2 功能代码 03H 仅支持03H读数据功能
3 返回数据的字节数 0CH 返回数据的字数*2
4 温控器状态字 高8位 00H 状态字定义见表三
5 温控器状态字 低8位 xxH
6 A相温度数据 高8位 00H 数据为16进制数,单位为1摄氏度,所得数据减23H即为实测温度
7 A相温度数据 低8位 xxH
8 B相温度数据 高8位 00H
9 B相温度数据 低8位 xxH
10 C相温度数据 高8位 00H
11 C相温度数据 低8位 xxH
12 定时开风机时间 高8位 00H 数据为零表示温控器已取消定时开风机功能
13 定时开风机时间 低8位 xxH
14 D相温度数据 高8位 00H 数据为16进制数,单位为1摄氏度,所得数据减23H即为实测温度(温控器无D相温度检测功能时,此参数无效)
15 D相温度数据 低8位 xxH
16 CRC校验 低8位 xxH
17 CRC校验 高8位 xxH
3) 举例说明:
当前有一台下位机,所设地址为“2”,A相温度为31度,B相温度为22度,C相温度为24度,定时开风机时间为24,D相温度为25度,传感器无故障,风机为开启,温控器没有输出超温和跳闸信号。
上位机想要读取该仪表的所有信息,发送数据为:
02H―03H―00H―00H―00H―06H―C5H―FBH
此时下位机返回数据为:
02H-03H-0CH-00H-00H-00H-42H-00H-39H-00H-3BH-00H-18H-00H-3CH-46H-A9H
现在已经接受到返回的数据,但是是在一直往后写。我想知道如何只显示最新接受到的数据 展开
3个回答
推荐于2016-04-22 · 知道合伙人软件行家
关注
展开全部
VB codeOption Explicit
Dim sjByt() As Byte
Private Sub Command1_Click() '2进制发送
ReDim sjByt(1 To 8) '设置为8个元素
sjByt(1) = &H2
sjByt(2) = &H3
sjByt(3) = &H0
sjByt(4) = &H0
sjByt(5) = &H0
sjByt(6) = &H6
sjByt(7) = &HC5
sjByt(8) = &HFB
MSComm1.Output = sjByt '此命令执行一次发送8字节
End Sub
Private Sub Form_Load()
MSComm1.Settings = "9600,n,8,1"
MSComm1.InputMode = comInputModeBinary '采用二进制传输
MSComm1.InBufferCount = 0 '清空接受缓冲区
MSComm1.OutBufferCount = 0 '清空传输缓冲区
MSComm1.RThreshold = 1 '产生MSComm事件
MSComm1.PortOpen = True
End Sub
接收由MSComm控件的OnComm完成
相关的代码见:
http://www.vbgood.com/viewthread.php?tid=83694&page=1#pid441972
3楼的回复.
Dim sjByt() As Byte
Private Sub Command1_Click() '2进制发送
ReDim sjByt(1 To 8) '设置为8个元素
sjByt(1) = &H2
sjByt(2) = &H3
sjByt(3) = &H0
sjByt(4) = &H0
sjByt(5) = &H0
sjByt(6) = &H6
sjByt(7) = &HC5
sjByt(8) = &HFB
MSComm1.Output = sjByt '此命令执行一次发送8字节
End Sub
Private Sub Form_Load()
MSComm1.Settings = "9600,n,8,1"
MSComm1.InputMode = comInputModeBinary '采用二进制传输
MSComm1.InBufferCount = 0 '清空接受缓冲区
MSComm1.OutBufferCount = 0 '清空传输缓冲区
MSComm1.RThreshold = 1 '产生MSComm事件
MSComm1.PortOpen = True
End Sub
接收由MSComm控件的OnComm完成
相关的代码见:
http://www.vbgood.com/viewthread.php?tid=83694&page=1#pid441972
3楼的回复.
展开全部
推荐 看 经典 入门 书籍
Visual_Basic与_RS-232_串行通信控制
有 pdf 电子文档的
找不到 可以 联系
Visual_Basic与_RS-232_串行通信控制
有 pdf 电子文档的
找不到 可以 联系
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
hauihddhauhwduaidhauw
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询