用vb编程序 串口通信 怎样发送一个通讯协议 一串数据
解决方案 »
- VB串口通讯如何一次发送11个字节的帧
- 一个关于 零部件 数据库设计的问题
- 初学者的泣血一问
- 【急求高手帮忙】用Internet Transfer控件做FTP文件上传
- 请Tiger_Zhao(VB老鸟)过来接分,希望各位继续关注我的问题,还有400分哦!
- DAO和远程访问!急啊!
- 关于access升级的问题
- 我也想请问在VB中使用WebBrowser控件的时候,如何能让WebBrowser不出现滚动条?以前的贴子看不了,可否有人愿意指点?
- 新手求助:VB与单片机连接
- 关于在线程序代码的升级问题(SORRY,我只有22分,倾囊而出,见笑!)
- 求助access2003中的某一窗体上的控件和子窗体如何在屏幕分辨率改变的情况下始终居中?
- 微软通讯录
通 讯 协 议
(磁效应液位仪)一﹑接口标准
RS-485(二线制)
上位机推荐使用研华PCL-745B通讯数据采集卡二﹑协议
MODBUS通讯协议03功能三﹑通讯控制方式
采用主从控制方式,上位机为主站,仪表为从站。主站对从站采用ASCII码进行异步半双工数据通信。四﹑数据寄存器地址
40007——液面值
40009——界面值
40010——温度值五﹑寄存器数据格式
寄存器单元 单位 数值范围 字节数 符号 符号占用位数(二进制) 数值占用位数(二进制)
液面值 mm 0-65535 2 无 0 16位
界面值 mm 0-65535 2 无 0 16位
温度值 0.5℃ -55~+125℃ 2 有 最高4位
0:正 1:负 低12位
六﹑通讯数据格式
通讯参数:2400波特率,无奇偶校验,7位数据位,2位停止位
03功能数据格式:
上位机发送报文格式
幀首 站号 固定值 数据寄存器号高位 数据寄存器号低位 固定值 固定值 错误校验 幀尾
3A 03H 00H 01H 0D 0A 下位机应答报文格式
幀首 站号 固定值 固定值 数据寄存器值高位 数据寄存器值低位 错误校验 幀尾
3A 03H 02H 0D 0A
(1) 幀首:3A(ASCII码)
幀尾:0D,0A(ASCII码)
(2) 站号:仪表的地址号(见仪表标牌上的仪表编号)
(3) 数据寄存器号:数据寄存器号=数据寄存器地址 - 40001
例如:寄存器地址为40006,则40006-40001=0005
高位为高8位字节:00H,低位为低8位字节:05H。
(4) 数据寄存器值:高位为寄存器数据值的高8位字节,
低位为寄存器数据值的低8位字节。
(5) 错误校验:将除了幀首幀尾外的所有16进制字节相加后取反
加1。错误校验值为1个字节(16进制)
(6) 发送报文和应答报文都要将16进制码转换成ASCII码进行传
送。
例如:十六进制的1个字节03H变成2个字节的ASCII码30,
33。
七﹑通讯范例
以读取1号站仪表40007寄存器值为例
发送格式
幀首 站号 固定值 数据寄存器号高位 数据寄存器号低位 固定值 固定值 错误校验 幀尾
3A 01H 03H 00H 06H 00H 01H F5H 0D 0A说明:(1)站号:01
(2)数据寄存器号=40007-40001=0006 高位:00H
低位:06H
(3)错误校验值:01H+03H+06H+01H=0BH 取反加1后为F5H
发送报文(ASCII码):3A,30,31,30,33,30,30,30,36,30,30,30,31,46,35,0D,0A 回文格式
幀首 站号 固定值 固定值 数据寄存器值高位 数据寄存器值低位 错误校验 幀尾
3A 01H 03H 02H 55H 55H 50H 0D 0A
说明:(1)站号:01
(2)数据寄存器值=5555H=21845mm
(3)错误校验值:01H+03H+02H+55H+55H=B0H 取反加1
后为50H
应答报文(ASCII码):3A,30,31,30,33,30,32,35,35,35,35,35,30,0D,0A八﹑编程说明
为了得到真实的液位,需将从一次表读取的液面值和界面值进行零点调整。具体步骤方法如下:
1.求零点值
将油罐中的液面固定在某一点A,利用量油尺或其它测量手段得到该点的真实液位YA,读取一次表该点的液面值YDA,根据YA和YDA求YC(零点值),计算公式如下:
YC=YA-YDA。
YC是带符号值,若YA>YDA则YC为正, 若YA<YDA YC为负。
2.零点调整
根据零点调整公式将从一次表读取的液面值和界面值转换成实际值。该过程需编程者通过软件实现。
零点调整公式:YZ=YD+YC
YZ:实际值
YD:从一次表读取的液面值或界面值
YC:零点值
举例说明:
将油罐中的液面固定在某一点,利用量油尺或其它测量手段得到该点的真实液位YA=1000mm,读取一次表该点的液面值YDA=1543mm,YC=YA-YDA=1000-1543=-543mm(零点值)
YZ=YD-543
九﹑通讯接口连接
仪表 通讯卡
S- —— DATE-
S+ —— DATE+
http://download.csdn.net/source/1498637
http://download.csdn.net/source/1498644
为什么呢?因为转下,如果数据发送接收过快,容易丢失,以致你的VB程序死掉,都是有可能的,吾的亲身体会!
至于怎么发送,给你个例子(这是发送AA AA FF 06 31 0 0 0 FF,
格式:
标志字节(帧首) + 命令字节 + 数据参数字节 + 帧尾字节
2字节 2字节 4字节 1字节Private Sub Form_Load()
MSComm1.CommPort = port
MSComm1.Settings = setting
End Sub
Private Sub Command1_Click()
Dim lngP As String
Dim buff_out10() As Byte
ReDim buff_out10(8)
MSComm1.Settings = "9600,N,8,1" ' 9600 波特,无奇偶校验,8 位数据,一个停止位。
MSComm1.InputLen = 0
If MSComm1.PortOpen = False Then
MSComm1.PortOpen = True
End If
buff_out10(0) = &HAA
buff_out10(1) = &HAA
buff_out10(2) = &HFF
buff_out10(3) = &H6
buff_out10(4) = &H31
buff_out10(5) = &H0
buff_out10(6) = &H0
buff_out10(7) = &H0
buff_out10(8) = &HFF
MSComm1.Output = buff_out10
lngP = GetTickCount 'API函数
Do
DoEvents
Loop Until GetTickCount - lngP > 100 Or MSComm1.InBufferCount > 10 '当等待时间超过100毫秒或串口接受缓冲区的数据达到10个字节时退出等待循环,这就是一个通信等待的过程。
DoEvents
End Sub
显示汉字,参考这个:http://download.csdn.net/source/1785343