MODBUS协议主站驱动程序.docx
- 文档编号:17668654
- 上传时间:2023-07-27
- 格式:DOCX
- 页数:19
- 大小:74.81KB
MODBUS协议主站驱动程序.docx
《MODBUS协议主站驱动程序.docx》由会员分享,可在线阅读,更多相关《MODBUS协议主站驱动程序.docx(19页珍藏版)》请在冰点文库上搜索。
MODBUS协议主站驱动程序
MODBUS协议主站驱动程序
1MODBUS规约简介
Modbus通讯协议广泛应用于工业控制领域的通用通讯协议,几乎所有的主流工控系统都支持这种协议。
Modbus通讯协议最初是由Modicon公司提出的,基于RS232的通讯协议的,后来Modicon公司又将这种协议推广到了以太网上,形成了基于TCP的Modbus协议。
有些厂家还在UDP上定义了modbus协议,Modbus通讯协议是主从方式的规约。
通讯都是由主站发起的,主站发出通讯请求,从站收到请求后,回答所请求的数据。
基于TCP的Modbus协议的主站是TCP的客户端,从站是TCP的服务器端。
本主站通讯驱动同时支持基于RS232的Modbus规约和基于TCP的Modbus规约。
同时支持多串行连接,每个串行口下允许有32个设备;支持多个TCP连接的Modbus规约,每个TCP连接下允许有32个设备。
连接方式,如图3-1所示。
图3-1设备连接示意图
本驱动程序支持不仅支持串行口上MODBUS规约,同时支持TCP和UDP上MODBUS规约。
此通讯驱动程序可以运行在DPU下也可运行虚拟DPU下。
2接口硬件连接方式
如采用串口方式进行通讯,XDPS系统通常采用标准的RS232口即Com1或Com2……ComN,通讯距离一般为15米,如需增长通讯距离,可采用R232/485转换器,通讯距离为1200米。
接线方式,如图3-2所示。
XDPSDPU
COM口
串口Modbus设备
信号名称
信号引脚
信号名称
RXD
2
------------------
TXD
TXD
3
------------------
RXD
GND
5
------------------
GND
图3-2接线图
3驱动程序组成
本程序由动态链接文件modiplc.dll、配置文件modiplc.ini两个文件组成,如果是WINCE环境的DPU,动态链接文件的名称为modiplc_CE.dll。
如果采用虚拟DPU,这两个文件都要拷入VDPU目录下运行;如果采用DPU,则应该以文件下装的形式,把以上两个文件安装到VDPU目录下。
4寄存器数据与DPU逻辑I/O地址的对应关系
DPU的每个站最多可带16块逻辑卡件,每对DPU最多可带16个站。
在配置文件中,定义了寄存器数据与XDPS系统VDPU逻辑卡件的数据通道的对应关系。
XDPS系统的IO逻辑内测点地址由以下几个因素确定:
通道类型、站号、卡件地址、通道号;MODBUS设备的数据地址信息由从站地址号、寄存器地址决定,这种映射关系在Modiplc.ini中定义。
5Modiplc.ini配置文件说明
5.1通讯参数配置
无论是在串口通讯方式,还是在TCP或者是UDP通讯方式,都要保证本驱动程序的通讯参数与对方的通讯参数是匹配的,那么有哪些参数需要配置、怎样配置这些参数呢?
、如果外部设备通过串口连接到DPU上,需要这样配置通讯参数:
[CONFIG]
communication_port1=Com1,9600,8,n,0,1,debug,ASCII
communication_port2=Com2,9600,8,n,0,1,debug
。
。
。
。
。
。
communication_portN=ComN,9600,8,n,0,1,debug
“communication_port1”、“communication_port2”、。
。
。
。
。
。
、“communication_portN”配置的是DPU下一共有多少通讯通道(最多可支持64个通道)和各个通讯通道下的通讯参数,后面的参数依次为:
串口号:
如“COM1”表示的是串口1,“COM2”表示的是串口2,。
。
。
。
。
。
波特率:
可选项57600、38400、19200、9600、4800、2400、1200、600等
数据位:
可选项8、7、6。
奇偶校验位:
可选项e、o、n,分别表示偶校验、奇校验、无校验。
停止位:
可选项0、1、2,分别表示1位停止位、1.5位停止位、2位停止位。
设备数量:
配置通讯口下连接的Modbus设备数量,最多可连接32个设备。
是否需要调试窗口:
如果配置了“debug”,表示DPU运行时,需弹出窗口,显示这个通讯口的报文,如果没有,则不弹出窗口显示这个通讯口的报文。
串口MODBUS协议的类型:
如果配置了“ASCII”,表示这个通讯口上的通讯协议是MODBUSASCII协议;如果没有配置这个参数,则这个通讯口上的协议是MODBUSRTU协议。
这个参数与上面的“是否需要调试窗口”参数可以配置,也可以不配置,这两个参数的位置可以对调。
、串口设备可以通过串口转TCP/IP网络的设备(如MOXANPORT)连接到DPU上,或者设备本身就是支持TCP/IP网络连接,它们通过网络直接连接到DPU上,这时需要这样来配置通讯参数:
[CONFIG]
communication_port1=TCP,222.222.223.46,4001,1,debug,ASCII
communication_port2=MODICON_TCP,222.222.223.47,502,1,debug
communication_port3=UDP,222.222.223.48,3308,1,debug
communication_port4=UDP_RS232PACK,222.222.221.1,5001,1,debug
。
。
。
。
。
communication_portN=TCP,222.222.223.49,3308,1,debug
“communication_port1”、“communication_port2”、。
。
。
。
。
。
、“communication_portN”仍然表示DPU下一共有多少通讯通道(最多可支持64个通道)和各个通讯通道下的通讯参数,后面的参数依次为:
协议类型:
如配置“TCP”表示的是这个通讯口下的设备是通过串口转TCP/IP网络的设备连接到DPU上的。
后面的其他参数表示的是这个通讯口下的设备连接在哪个串口转TCP/IP网络设备上,以及这个设备的哪个串口上。
应该说明的是,这时通讯通道上协议仍然是串行口上的MODBUS协议。
如配置“MODICON_TCP”表示的是这个通讯口下的设备是通过TCP/IP网络的设备直接连接到DPU上的,后面的其他参数表示的是设备的网络地址信息。
通过TCP/IP网络直接连接的设备所用的通讯协议是MODBUSONTCP协议。
如配置“UDP”表示的是这个通讯口下的设备是通过网络的设备直接连接到DPU上的,所用的通讯协议是自定义基于UDP的MODBUS协议。
后面的其他参数表示的是设备的网络地址信息。
如果配置了“UDP”选项,则需要配置下列行来表示DPU与这个设备通讯的本地所用的IP地址和UDP端口号。
communication_port3_LocalAddress=222.222.223.1,3308
如配置“UDP_RS232PACK”表示的是这个通讯口下的设备是通过网络的设备直接连接到DPU上的,所用的应用层协议是RS232上的MODBUS协议。
后面的其他参数表示的是设备的网络地址信息。
如果配置了“UDP_RS232PACK”选项,也需要配置下列行来表示DPU与这个设备通讯的本地所用的IP地址和UDP端口号。
communication_port3_LocalAddress=222.222.223.1,3308
无论是串行口还是TCP上的MODBUS协议,本驱动程序都是按国际通用实现的,因此这里不对协议的具体内容作详细描述了。
自定义基于UDP的MODBUS协议将在后面详细描述。
IP地址:
如果协议类型配置为“TCP”,那么这个IP地址为串口转TCP/IP网络设备的IP地址;如果协议类型配置为“MODBUS_TCP”或“UDP”,那么这个IP地址为设备的IP地址。
端口号:
如果协议类型配置为“TCP”,那么这个端口号为串口转TCP/IP网络设备的TCP端口号,这个端口对应着连接设备的串行口(MOXANPORT的COM1~COM4的端口缺省配置为4001~4004);如果协议类型配置为“MODBUS_TCP”,那么这个端口号为设备的TCP端口号,MODBUSOVERTCP协议中定义了这个端口号为502;如果协议类型配置为“UDP”,那么这个端口号为设备的UDP端口号,用户可自行选择这个端口号,只要与对方一致,并且不要与系统其它应用端口冲突就可以。
设备数量:
配置通讯口下连接的Modbus设备数量,最多可连接32个设备。
只有在协议类型配置为“TCP”时,这个参数才会大于1,协议类型配置为“MODBUS_TCP”或“UDP”时,设备数量为1。
是否需要调试窗口:
如果配置了“debug”,表示DPU运行时,需弹出窗口,显示这个通讯口的报文,如果没有,则不弹出窗口显示这个通讯口的报文。
串口MODBUS协议的类型:
只有在协议类型配置为“TCP”时,才可以配置此参数,因为只有在这个情况下用的是串口MODBUS协议。
如果配置了“ASCII”,表示这个通讯口上的通讯协议是MODBUSASCII协议;如果没有配置这个参数,则这个通讯口上的协议是MODBUSRTU协议。
这个参数与上面的“是否需要调试窗口”参数可以配置,也可以不配置,这两个参数的位置可以对调。
、通讯驱动程序,不管在哪种连接方式下,都支持通讯通到的冗余,那么冗余通道应如何配置呢?
如果外部设备通过串口连接到DPU上,如:
[CONFIG]
communication_port1=Com1,9600,8,n,0,1,debug,ASCII
其冗余通道可配置为:
communication_port1_dup=com2
表示的是在COM1通讯不正常时,DPU会通过COM2与设备通讯
如果通过网络连接到DPU上,如:
[CONFIG]
communication_port2=TCP,222.222.223.46,3308,1,debug
communication_port2=MODICON_TCP,222.222.223.46,502,1,debug
communication_port2=UDP,222.222.223.46,3308,1,debug
这些通讯的冗余通道可配置为:
communication_port2_dup=222.222.224.46,3308
“communication_port2_dup”后面的两个参数表示的是冗余通道上设备或串口转网络设备的IP地址和端口号。
协议时“UDP”时,配置了冗余通道的对方设备的地址,还需要配置冗余通道的本地网络IP地址和端口号,如:
communication_port2_localaddress_dup=222.222.224.1,3308
、不管是串行口MODBUS协议还是TCP上MODBUS协议,报文中都定义了数据的长度,这个数据的长度在报文中是用一个字节表示的,因此一次传送的数据不可能太多,模拟量(16寄存器)为约255/2=127个,开关量(位寄存器)为255*8=2040个。
在用户自定义的“UDP”协议中,增加了一个选项,报文中表示数据长度的字节数可以配置,可以配置成1字节或2个字节,这样可以在一次通讯中传送大量数据。
这个配置也是在[CONFIG]段中完成的,如:
[CONFIG]
communication_port2_databyte=2
、在进行通讯调试时,可以为每一个通讯通道配置报文收集文件,用来记录整个通讯过程的报文收发情况,调试人员通过这个文件可以分析通讯运行情况。
如:
[CONFIG]
communication_port1_record_file=d:
\mod1.txt
上面的配置表示的是将第一个通讯通道的报文记录在文件“d:
\mod1.txt”里,注意在正常通讯状态下,不应配置这个文件,否则会增加DPU的CPU的负荷。
、此外,[CONFIG]段里还有两个时间参数,一个是TimeOut,另外一个是Request_Intv,它们所代表意义是:
TimeOut表示Modbus协议每一次访问的超时时间,单位为毫秒,缺省值为2000毫秒。
通讯驱动程序访问MODBUS设备数据时,如果命令发送后,在TimeOut时间范围内,设备没有应答,那么通讯驱动程序就不再等待回答,继续下面的通讯内容。
Request_Intv表示Modbus协议连续两次访问之间的间隔,单位为毫秒,缺省值为0毫秒。
有些MODBUS设备由于CPU处理能力的限制,不允许MODBUS主站连续访问其数据,这个时候要配置这个参数。
5.2数据映射关系配置
配置了通道的通讯参数后,还需要通讯程序如何将设备的通讯数据映射到DPU的逻辑I/O地址“站号-卡号-通道号”上。
、MODBUS设备有哪些寄存器呢?
一个典型MODBUS设备有4种线圈状态寄存器、线圈输入状态寄存器、保持寄存器、输入寄存器。
前两种为开关量寄存器,后两种为模拟量寄存器。
在访问这些寄存器时,须指明寄存器的类型,及功能码,下面是功能码与寄存器地址的对照表:
功能码
起始地址
描述
1
00001
线圈状态寄存器,是可以读写的开关量寄存器。
写此单个寄存器的
功能码为5;写此多个寄存器的功能码为15。
2
00002
线圈输入状态寄存器,只读开关量寄存器。
3
40001
保持寄存器,是可以读写的模拟量寄存器。
写此单个寄存器的功能
码为6;写此多个寄存器的功能码为16。
4
30001
输入寄存器,只读模拟量寄存器。
本驱动程序的配置文件里,每一组数据的前面都有功能码,配置的寄存器起始地址都是从0开始计数的,这个0地址对应着每个功能码代表寄存器起始地址。
、一个典型MODBUS设备的通讯数据与DPU的逻辑I/O地址的映射关系可以配置如下:
[Port1_PLC1]
Slave_No=1
Type=0
Station_No=1
PlateNum=2
Plate1_No=0
Plate2_No=1
Plate1_DI=1,0,32,20
Plate1_AI=3,0,32,20
Plate2_DO=32,32,20
Plate2_AO=32,32,20
下面对所配置的内容进行说明:
“[Port1_PLC1]”表示的是第一个通讯通道的第一个设备。
“Slave_No”配置的是这个设备的MODBUS地址。
“Station_No”配置的是这个设备对应的逻辑I/O站的站号。
“PlateNum”配置的是这个设备对应I/O站下的逻辑卡件的数量。
“Plate1_No”、“Plate2_No”表示的是每一块逻辑卡件的卡号。
“Plate1_DI”、“Plate1_AI”配置的是Plate1上输入数据通道对应的寄存器的类型(功能码)、起始寄存器地址、连续寄存器的数量(通道数量)、输入数据的扫描周期(单位为100毫秒)。
“Plate2_AO”、“Plate2_DO”配置的是Plate2上对应的输出数据通道对应的起始寄存器地址、寄存器的数量(通道数量)。
这里没有配置功能码,开关量输出卡用的是功能码15,模拟量输出卡用的是功能码16;可以按配置的周期输出。
每一块逻辑卡件上,可以同时有开关量输入/输出、模拟量输入/输出数据,但每一种数据只能配置一组。
比如说不能配两个“Plate1_AI”或“Plate1_DI”或“Plate1_AO”或“Plate1_DO”。
每一块逻辑卡件上,开关量通道的数量最多是256个,即连续寄存器的数量最多是256;受MODBUS协议中数据长度的限制,模拟量最多是125个通道,即连续寄存器的数量最多是127。
有一种情况是例外的,即配置的协议是“UDP”时,不管是开关量还是模拟量,连续寄存器的数量最多可以是2560,这时一块逻辑卡件上容纳不了这么多数据,通讯驱动程序会按每块逻辑卡200个模拟量通道,256个开关量通道,将这些数据依次安排在后续逻辑卡件上。
注意在种情况下,自检程序里只能看到配置的卡件号,后续卡件是看不到的,但DPUCFG里是可以进行组态的。
注意:
在[PortM_PlcN]的配置增加了“Type”配置项,它表示当前通讯设备的特殊性。
Type=0:
表示普通MODBUS设备,此为缺省值。
Type=1:
表示南瑞励磁设备SAVR2000(需要初始化通讯连接)
Type=2:
表示西安润辉设备(通讯数据的高低字节反了)
、通讯驱动程序输出数据给MODBUS设备时,除了能进行上述周期型输出操作外,还能进行变化输出,即当输出的数据发生变化时,才将这些数据输出给MODBUS设备。
请看下面的配置:
[Port1_PLC1]
Slave_No=1
Station_No=1
PlateNum=3
Plate1_No=0
Plate2_No=1
Plate3_No=2
Plate1_Oper_1=10,24
Plate2_Oper_2=10,24
Plate3_AO_Oper=10,24
其中“PlateN_Oper_1=”后面的参数分别是起始寄存器号、连续的寄存器数,表示的是一种开关量操作逻辑卡,每个寄存器对应一个开关量输出通道XDO,只有当XDO的输出值发生变化时,才将数据送数据给MODBUS设备,不变化不传送。
采用5号MODBUS功能码,一次只传送一个通道的数据。
注意:
配置了此操作点的卡件上不可同时配置DO、Oper_2、AO_Oper。
“PlateN_Oper_2=”后面的参数分别是起始寄存器号、连续的寄存器数,表示的是另外一种开关量操作类型,每个要控制的通道(寄存器),对应两个连续的XDO,第一XDO有上升沿时,驱动程序会给要控制的寄存器发送0值,第二XDO有上升沿时,驱动程序会给要控制的寄存器发送1值。
在进行组态时,要注意,控制对方设备的一个寄存器是用相邻两个XDO来实现的,给这两个XDO发脉冲指令可以控制寄存器(或开关)的不同状态,XDO的脉冲宽度取决于通讯驱动能不能响应到此脉冲的上升沿,一般应大于2秒,可根据实际情况决定。
通讯时驱动程序采用5号MODBUS功能码来发送数据,一次只传送一个通道的数据。
每块卡上最大的通道数为128,因为每个通道对应2个XDO,一块卡上配置128个通道时,这块卡上就有256个XDO。
注意:
配置了此操作点的卡件上不可同时配置DO、Oper_1、AO_Oper。
“PlateN_AO_Oper=”后面的参数分别是起始寄存器号、连续的寄存器数,表示的是一种模拟量操作点,每个要控制的寄存器,对应一个XAO和XDO,同一地址编号的XAO和XDO管理一个寄存器,只有XAO的值发生变化或XDO有上上升沿时,才会将XAO的数传送给下面的设备。
注意:
配置了此种操作点的卡件上不可同时配置AO、DO、Oper_1、Oper_2数据。
、MODBUS协议不直接支持浮点数传输,很多设备都是用两个连续的模拟量寄存器来表示一个4字节浮点数的工程值,这种情况下,Modiplc.ini文件中读这种数据通道的配置与读一般的模拟量通道的配置相比,并没有特殊的地方。
仍然这样配置:
PlateN_AI=功能码,寄存器起始地址,寄存器数量,扫描间隔
寄存器数量应该是所要读取的浮点数个数的两倍。
在做逻辑组态时,应将XAI的通道转换类型设置成“Float间接浮点数转换(L16+H16)”,这样DPU计算程序会将两个连续的XAI通道对应成一个浮点数工程值,如将XAI(1-0-0)和XAI(1-0-1)对应成第一个浮点数工程值、
XAI(1-0-2)和XAI(1-0-3)对应成第二个浮点数工程值、……。
注意,此时,逻辑组态里只需要用偶数通道XAI(1-0-0)、XAI(1-0-2)、……,而奇数通道XAI(1-0-1)、XAI(1-0-3)、……是不用的。
、MODBUS协议不直接支持4字节长整数通道的配置,很多设备都是用两个连续的模拟量寄存器来表示一个4字节长整数,这种情况下,Modiplc.ini文件中读这种数据通道的配置与读一般的模拟量通道的配置相比,并没有特殊的地方。
仍然这样配置:
PlateN_AI=功能码,寄存器起始地址,寄存器数量,扫描间隔
寄存器数量应该是所要读取的长整数个数的两倍。
在做逻辑组态时,应将XAI的通道转换参数进行正确设置,如量程范围设成0~65535,AD值范围也设成0~65535,再做这样的算法,如:
XAI(1-0-0)+65536*XAI(1-0-1),计算结果就是第一个长整数通道的值。
6配置文件举例分析
6.1采用串口进行通讯配置文件举例
[CONFIG]
communication_port1=Com1,9600,8,n,0,1,debug
\\采用串口1进行通讯,通讯波特率为9600bps,数据位为8位,无奇偶校验,1.5位校验位,有报文监视窗口
[Port1_PLC1]
Slave_No=1
表示PLC的地址为1
Station_No=1
表示该PLC对应DPU的1号站
PlateNum=4
PlateNum表示该PLC对应4块卡件
Plate1_No=0
表示卡件Plate1的地址为0
Plate2_No=1
表示卡件Plate2的地址为1
Plate3_No=2
表示卡件Plate3的地址为2
Plate4_No=3
表示卡件Plate4的地址为3
Plate1_AI=3,0,64,2
表示卡件Plate1为模拟量输入卡件,通道0至通道63与该PLC的保持寄存器40001至40064共64个寄存器对应;扫描周期为200ms。
Plate2_AI=4,64,64,2
表示卡件Plate2为模拟量输入卡件,通道0至通道63与该PLC的输入寄存器30065至30108共64个寄存器对应;扫描周期为200ms。
Plate3_DO=0,8,200
表示卡件Plate3的开关量输出通道与该PLC的00001至00008号线圈状态相对应
Plate4_AO=0,2
表示卡件Plate4的模拟量输出通道与该PLC的40001至40002号保持寄存器相对应
6.2采用TCP/IP方式配置文件应用举例
[CONFIG]
communication_port1=Com1,9600,8,n,0,1,debug
\\采用串口1进行通讯,通讯波特率为9600bps,数据位为8位,无奇偶校验,1.5位校验位,有报文监视窗口
[Port1_PLC1]
Slave_No=1
表示PLC的地址为1
Station_No=1
表示该PLC对应的DPU#1站
PlateNum=4
PlateNum表示该PLC对应4块卡件
Plate1_No=0
表示卡件Plate1的地址为0
Plate2_No=1
表示卡件Plate2的地址为1
Plate3_No=2
表示卡件Plate3的地址为2
Plate4_No=3
表示卡件Plate4的地址为3
Plate1_AI=3,0,64,2
表示卡件Plate1为模拟量输入卡件,起始通道为0的64个通道与该PLC的输入寄存器40001至40064共64个寄存器对应;扫描周期为200ms。
Plate2_AI=4,64,64,2
表示卡件Plate2为模拟量输入卡
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- MODBUS 协议 驱动程序