用串口通信编程与使用modbus协议的设备进行通信.docx
- 文档编号:27209938
- 上传时间:2023-06-28
- 格式:DOCX
- 页数:14
- 大小:18.17KB
用串口通信编程与使用modbus协议的设备进行通信.docx
《用串口通信编程与使用modbus协议的设备进行通信.docx》由会员分享,可在线阅读,更多相关《用串口通信编程与使用modbus协议的设备进行通信.docx(14页珍藏版)》请在冰豆网上搜索。
用串口通信编程与使用modbus协议的设备进行通信
用串口通信编程与使用modbus协议的设备进行通信
ModbusSimulator是本文档开发示例DemoModbus使用的一个仿真程序,它模拟一个标准的MODBUS设备。
ModbusSimulator采用标准MODBUS通信协议。
Modbus网络是一个工业通讯系统,由带智能终端的可编程序控制器和计算机通过共用线路或局部专用线路连接而成。
系统构成既包括硬件,亦包括软件。
可应用于各种数据采集和过程监控。
表B-1是Modbus的功能码定义。
表B-1Modbus功能码
功能码
名称
作用
01
读取线圈状态
取得一组逻辑线圈的当前状态(ON/OFF)。
02
读取输入状态
取得一组开关输入的当前状态(ON/OFF)。
03
读取保持寄存器
在一个或多个保持寄存器中取得当前的二进制值。
04
读取输入寄存器
在一个或多个输入寄存器中取得当前的二进制值。
05
强置单线圈
强置一个逻辑线圈的通断状态。
表B-1Modbus功能码(续)
06
预置单寄存器
把具体二进制值装入一个保持寄存器。
07
读取异常状态
取得8个内部线圈的通断状态,这8个线圈的地址由控制器决定,用户逻辑可将这些线圈定义,以说明从机状态,短报文适宜于迅速读取状态。
08
回送诊断校验
把诊断校验报文送从机,以对通讯处理进行评鉴。
09
编程(只用于484)
使主机模拟编程器作用,修改PC从机逻辑。
10
控询(只用于484)
可使主机与一台正在执行长程序任务从机通讯,定其探询该从机是否已完成其操作任务,仅在含有功能码9的报文发送后,本功能码才得发送。
11
读取事件计数
可使主机发出单询问,并随即判定操作是否成功,尤其是在该命令或其应答产生通讯错误时。
12
读取通讯事件记录
可使主机检索每台从机的Modbus事务处理通讯事件记录。
如果某项事务处理未完成,记录会给出有关错误。
13
编程(184/384484584)
可使主机模拟编程器功能,修改PC从机逻辑。
14
探询(184/384484584)
可使主机与正在执行长程序任务的从机通讯,定期控询该从机是束已完成其程序操作,仅在含有功能13的报文发送后,本功能码才得发送。
15
强置多线圈
强置一串连续逻辑线圈的通断。
16
预置多寄存器
把具体的二进制值装入一串连续的保持寄存器。
17
报告从机标识
可使主机判断编址从机的类型及该从机运行指示灯的状态。
18
编程(884和Micro84)
可使主机模拟编程功能,修改PC状态逻辑。
19
重置通讯链路
发生非可修正错误后,使从机复位于已知状态。
可重置顺序字节。
20
读取通用参数(584L)
显示扩展存储器文件中的数据信息。
21
写入通用参数(584L)
把通用参数写入扩展存储器文件,或修改之。
22-64
保留作扩展功能备用
65-72
保留以备用户功能所用
留作用户功能的扩展编码。
73-119
非法功能
120-127
保留
留作内部作用。
128-255
保留
用于异常应答。
Modbus网络只有一个主机,所有通讯都由它发出。
网络可支持247个之多的远程从属控制器,但实际所支持的从机数要由所用通讯设备决定。
采用这个系统,各PC可以和中心主机交换信息而不影响各PC执行本身的控制任务。
表B-2是Modbus各功能码对应的数据;类型。
表B-2Modbus功能码与数据类型对应表
代码
功能
数据类型
01
读
位
02
读
位
03
读
整型,字符型,状态字,浮点型
04
读
整型,状态字,浮点型
05
写
位
06
写
整型,字符型,状态字,浮点型
08
N/A
重复“回路反馈”信息
15
写
位
16
写
整型,字符型,状态字,浮点型
17
读
字符型
Modbus的传输方式
在Modbus系统中有两种传输模式可选择。
这两种模式与从机PC通讯的能力是同等的。
选择时应视所用Modbus主机而定。
每个Modbus系统只能使用一种模式,不允许两种模式混用。
一种模式是ASCII(美国信息交换码),另一种模式是RTU(远程终端设备)。
这两种模式的定义见表B-3。
表B-3ASCII和RTU传输模式的特性
特性
ASCII(7位)
RTU(8位)
编码系统
十六进制(使用ASCII可打印字符:
0——9,A——F)
二进制
每个字符的位数
开始位
1位
1位
数据位(最低有效位第一位)
7位
8位
奇偶校验(任选)
1位(此位用于奇偶校验,无校验则无该位)
1位(此位用于奇偶校验,无校验,无校验则无该位)
停止位
1或2位
1或2位
错误校验
LRC(即纵向冗余校验)
CRC(即循环冗余校验
ASCII可打印字符便于故障检测,而且对于用高级语言(如FORTRAN)编程的主计算机及主PC很适宜。
RTU则适用于机器语言编程的计算机和PC主机。
用RTU模式传输的数据是8位二进制字符。
如欲转换为ASCII模式,则每个RTU字符首先应分成高位和低位两部分,这两部分各含4位。
然后转换成十六进制等量值。
用以构成报文的ASCII字符都是十六进制字符。
ASCII模式使用的字符虽是RTU模式的两倍,但ASCII数据的译码和处理更为容易一些,此外,用RTU模式时报文字符必须以连续数据流的形式传送,用ASCII模式,字符之间可产生长达1秒的间隔,以适应速度较慢的机器。
表B-4给出了以RTU方式读取整数数据的例子。
表B-4以RTU方式读取整数数据的例子
主机请求
地址
功能码
第一个寄存器的高位地址
第一个寄存器的高位地址
寄存器数量的高位
寄存器数量的高位
错误较验
01
03
00
38
00
01
XX注1
从机应答
地址
功能码
第一个寄存器的高位地址
字节数
数据高字节
数据低字节
错误较验
01
03
00
2
41
24
XX注1
十六进制数4124表示的十进制整数为16676,错误校验值要根据传输方式而定。
Modbus的数据校验方式
CRC-16(循环冗余错误校验)
CRC-16错误校验程序如下:
报文(此处只涉及数据位,不指起始位、停止位和任选的奇偶校验位)被看作是一个连续的二进制数,其最高有效位(MSB)首先发送。
报文先与X↑16相乘(左移16位),然后被X↑16+X↑15+X↑2+1除X↑16+X↑15+X↑2+1可以表示为二进制数11000000000000101。
整数商位忽略不计,16位余数加入该报文(MSB先发送),成为2个CRC校验字节。
余数中的1合部初始化,以免所有的零成为一条报文被接收。
经上述处理而含有CRC字节的报文,若无错误,到接收设备后再被同一多项式(X↑16+X↑15+X↑2+1)除,会得到一个零余数。
(接收设备核验这个CRC字节,并将其与被传送的CRC比较)。
全部运算以2为模(无进位)。
生成CRC-16校验字节的步骤如下:
装入一个16位寄存器,所有数位均为1。
该16位寄存器的高位字节与开始8位字节进行“异或”运算。
运算结果放入这个16位寄存器。
把这个16位寄存器向右移1位。
4a若向右(标记位)移出的数位是1,则生成多项式1010000000000001和这个寄存器进行异或运算。
4b若向右移出的数位是0,则返回(3)。
重复(3)和(4),直至移出8位。
另外8位与该16位寄存器进行“异或”运算。
重复(3)棧?
/FONT>6),直至该报文所有字节均与16位寄存器进行“异或”运算,并移位8次。
这个16位寄存器的内容即2字节CRC错误校验,被加到报文的最高有效位。
另外,在某些非Modbus通讯协议中也经常使用CRC16作为校验手段,而且产生了一些CRC16的变种,他们是:
使用CRC16多项式X↑16+X↑15+X↑2+1,但首次装入的16位寄存器值为0000;使用CRC16的反序X↑16+X↑14+X↑1+1,首次装入寄存器值为0000或FFFFH。
LRC(纵向冗余错误校验)
LRC错误校验用于ASCII模式。
这个错误校验是一个8位二进制数,可作为2个ASCII十六进制(hex)字符传送。
把十六进制字符转换为二进制,加上无循环进位的二进制字符和二进制补码结果生成LRC错误校验(参见图)。
这个LRC在接收设备进行核验,并与被传送的LRC进行比较,冒号(:
)、回车符号(CR)、换行字符(LF)和置入的其他任何非ASCII十六进制字符在运算时忽略不计。
表B-5LRC生成范例棗读取02号从机的前8个线圈
十六进制二进制
地址
0
2
0000
0010
功能码
0
1
0000
0001
起始地址高位
0
0
0000
0000
超始地址低位
0
0
0000
0000
单元数量
0
0
0000
0000
0
8
+0000
1000
--------------------------------------------------------------------------------
0000
1011
变成补码1111
0101
错误较验
F
5
F
5
接收PC把所有收到的数据字节(包括最后的LRC)加在一起,8位应全部为0(注意:
和可能超过8位,应略去最低位)
0000
0010
0000
0001
0000
0000
0000
0000
0000
0000
0000
1000
--------------------------------------------------------------------------------
错误校验1111
0101
和0000
0000
举例:
1、读取线圈状态发送命令":
010100000001FD[0DH][0AH]"
收到信息":
01010100FD[0DH][0AH]"
2、读取保持寄存器发送命令":
010300000001FB[0DH][0AH]"
收到信息":
0103020000FA[0DH][0AH]"
3、读取输入寄存器发送命令":
010400000001FA[0DH][0AH]"
收到信息":
0104020000F9[0DH][0AH]"
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 串口 通信 编程 使用 modbus 协议 设备 进行