1
MODBUS规约简介
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所示。
VDPURS232/RS485设备1RS232/RS485设备2„„设备n设备1设备2„„设备nTCP连接设备TCP连接设备图3-1 设备连接示意图
本驱动程序支持不仅支持串行口上MODBUS规约,同时支持TCP和UDP上MODBUS规约。此通讯驱动程序可以运行在DPU下也可运行虚拟DPU下。
2 接口硬件连接方式
如采用串口方式进行通讯,XDPS系统通常采用标准的RS232口即Com1或Com2……ComN,通讯距离一般为15米,如需增长通讯距离,可采用R232/485转换器,通讯距离为1200米。接线方式,如图3-2所示。
XDPS DPU 信号名称 RXD TXD GND
图3-2 接线图
COM口 信号引脚 2 3 5 ------------------ ------------------ ------------------ 串口Modbus设备 信号名称 TXD RXD GND 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 中定义。
5 Modiplc.ini配置文件说明
5.1通讯参数配置
无论是在串口通讯方式,还是在TCP或者是UDP通讯方式,都要保证本驱动程序的通讯参数与对方的通讯参数是匹配的,那么有哪些参数需要配置、怎样配置这些参数呢?
I、如果外部设备通过串口连接到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下一共有多少通讯通道(最多可支持个通道)和各个通讯通道下的通讯参数,后面的参数依次为:
①串口号:如“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”,表示这个通讯口上的通讯协议是MODBUS ASCII协议;如果没有配置这个参数,则这个通讯口上的协议是MODBUS RTU协议。这个参数与上面的“是否需要调试窗口”参数可以配置,也可以不配置,这两个参数的位置可以对调。
II、串口设备可以通过串口转TCP/IP网络的设备(如MOXA NPORT)连接到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下一共有多少通讯通道(最多可支持个通道)和各个通讯通道下的通讯参数,后面的参数依次为:
①协议类型:如配置“TCP”表示的是这个通讯口下的设备是通过串口转
TCP/IP网络的设备连接到DPU上的。后面的其他参数表示的是这个通讯口下的设备连接在哪个串口转TCP/IP网络设备上,以及这个设备的哪个串口上。应该说明的是,这时通讯通道上协议仍然是串行口上的MODBUS协议。
如配置“MODICON_TCP”表示的是这个通讯口下的设备是通过TCP/IP网络的设备直接连接到DPU上的,后面的其他参数表示的是设备的网络地址信息。通过TCP/IP网络直接连接的设备所用的通讯协议是MODBUS ON TCP协议。
如配置“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端口号,这个端口对应着连接设备的串行口(MOXA NPORT的COM1~COM4的端口缺省配置为4001~4004);如果协议类型配置为
“MODBUS_TCP”,那么这个端口号为设备的TCP端口号,MODBUS OVER TCP协议中定义了这个端口号为502;如果协议类型配置为“UDP”,那么这个端口号为设备的UDP端口号,用户可自行选择这个端口号,只要与对方一致,并且不要与系统其它应用端口冲突就可以。
④设备数量:配置通讯口下连接的Modbus设备数量,最多可连接32个设备。只有在协议类型配置为“TCP”时,这个参数才会大于1,协议类型配置为“MODBUS_TCP”或“UDP”时,设备数量为1。
⑤是否需要调试窗口:如果配置了“debug”,表示DPU运行时,需弹出窗口,显示这个通讯口的报文,如果没有,则不弹出窗口显示这个通讯口的报文。
⑥串口MODBUS协议的类型:只有在协议类型配置为“TCP”时,才可以配置此参数,因为只有在这个情况下用的是串口MODBUS协议。如果配置了
“ASCII”,表示这个通讯口上的通讯协议是MODBUS ASCII协议;如果没有配置这个参数,则这个通讯口上的协议是MODBUS RTU协议。这个参数与上面的“是否需要调试窗口”参数可以配置,也可以不配置,这两个参数的位置可以对调。
III、通讯驱动程序,不管在哪种连接方式下,都支持通讯通到的冗余,那么冗余通道应如何配置呢?
如果外部设备通过串口连接到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
IV、不管是串行口MODBUS协议还是TCP上MODBUS协议,报文中都定义了数据的长度,这个数据的长度在报文中是用一个字节表示的,因此一次传送的数据不可能太多,模拟量(16寄存器)为约255/2=127个,开关量(位寄存器)为255*8=2040个。在用户自定义的“UDP”协议中,增加了一个选项,报文中表示数据长度的字节数可以配置,可以配置成1字节或2个字节,这样可以在一次通讯中传送大量数据。这个配置也是在[CONFIG]段中完成的,如:
[CONFIG]
communication_port2_databyte=2
V、在进行通讯调试时,可以为每一个通讯通道配置报文收集文件,用来记录整个通讯过程的报文收发情况,调试人员通过这个文件可以分析通讯运行情况。如:
[CONFIG]
communication_port1_record_file=d:\\mod1.txt
上面的配置表示的是将第一个通讯通道的报文记录在文件“d:\\mod1.txt”里,注意在正常通讯状态下,不应配置这个文件,否则会增加DPU的CPU的负荷。
VI、此外,[CONFIG]段里还有两个时间参数,一个是TimeOut,另外一个是Request_Intv,它们所代表意义是:
TimeOut表示Modbus协议每一次访问的超时时间,单位为毫秒,缺省值为2000毫秒。通讯驱动程序访问MODBUS设备数据时,如果命令发送后,在
TimeOut时间范围内,设备没有应答,那么通讯驱动程序就不再等待回答,继续下面的通讯内容。
Request_Intv表示Modbus协议连续两次访问之间的间隔,单位为毫秒,缺省值为0毫秒。有些MODBUS设备由于CPU处理能力的,不允许MODBUS主站连续访问其数据,这个时候要配置这个参数。
5.2数据映射关系配置
配置了通道的通讯参数后,还需要通讯程序如何将设备的通讯数据映射到DPU的逻辑I/O地址“站号-卡号-通道号”上。
I、MODBUS设备有哪些寄存器呢?一个典型MODBUS设备有4种线圈状态寄存器、线圈输入状态寄存器、保持寄存器、输入寄存器。前两种为开关量寄存器,后两种为模拟量寄存器。在访问这些寄存器时,须指明寄存器的类型,及功能码,下面是功能码与寄存器地址的对照表: 功能码 起始地址 描述 1 00001 线圈状态寄存器,是可以读写的开关量寄存器。写此单个寄存器的
功能码为5;写此多个寄存器的功能码为15。
2 00002 线圈输入状态寄存器,只读开关量寄存器。 3 40001 保持寄存器,是可以读写的模拟量寄存器。写此单个寄存器的功能
码为6;写此多个寄存器的功能码为16。
4 30001 输入寄存器,只读模拟量寄存器。
本驱动程序的配置文件里,每一组数据的前面都有功能码,配置的寄存器起始地址都是从0开始计数的,这个0地址对应着每个功能码代表寄存器起始地址。
II、 一个典型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:表示西安润辉设备(通讯数据的高低字节反了)
III、通讯驱动程序输出数据给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数据。
IV、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)、……是不用的。
V、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,,2 表示卡件Plate1为模拟量输入卡件,通道0至通道63与该PLC的保持寄存器40001至400共个寄存器对应;扫描周期为200ms。 Plate2_AI=4,,,2 表示卡件Plate2为模拟量输入卡件,通道0至通道63与该PLC的输入寄存器30065至30108共个寄存器对应;扫描周期为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,,2 表示卡件Plate1为模拟量输入卡件,起始通道为0的个通道与该PLC的输入寄存器40001至400共个寄存器对应;扫描周期为200ms。 Plate2_AI=4,,,2 表示卡件Plate2为模拟量输入卡件,起始通道为0的个通道与该PLC的输入寄存器30065至30108共个寄存器对应;扫描周期为200ms。 Plate3_DO=0,8 表示卡件Plate3的开关量输出通道与该PLC的00001至00008号线圈状态相对应 Plate4_AO=0,2 表示卡件Plate4的模拟量输出通道与该PLC的00001至00008号线圈状态相对应
7 通讯驱动程序的调试
将通讯驱动程序MODIPLC.DLL或MODIPLC_CE.DLL、配置文件
MODIPLC.INI、VDPU.CFG文件下装到DPU中,或拷贝到VDPU目录下,重新启动DPU程序,就可以调试通讯程序了。注意,VDPU.CFG配置文件如何修改,在前面的章节里,已经详细描述过,只要将这里就不再重复说明了。 通讯驱动程序提供了两种调试手段,一是通过报文调试窗口来分析通讯过程,另一个是通过记录的报文文件来分析通讯过程。如何显示报文调试窗口和记录通讯报文前面已经介绍过,这里主要介绍的是怎样使用这两种手段来调试。
7.1报文调试窗口
报文调试窗口的标题栏显示了通讯通道的参数如串口号和串口参数或IP地址和端口号,用户根据此标题栏的内容判断配置的参数是否正确。 如果DPU与设备间的通讯是通过TCP连接实现的,那么标题栏上还显示了DPU与设备的连接的状态,如果已经连接上设备或串口转TCP网络的设备,那么
标题栏显示已经建立的状态“Connected”,反之则显示“Connecting”,表示未连接成功。 报文调试窗口里显示了通讯通道收发报文的情况,发送的报文用灰底黑字表示,接收的报文用蓝底黄字表示。通讯过程中,通讯内容向窗口上方滚动,最新的通讯内容显示在窗口的下方。用户可以按“Ctrl_C”暂定窗口的滚动,再按“Ctrl_C”继续窗口滚动。
串口连接时的报文调试窗口
TCP连接未成功时的报文调试窗口
TCP连接成功时的报文调试窗口
7.2报文记录文件
下面是一个DPU与MODICON TCP设备的通讯的报文记录文件,文件中记录了通道连接的建立过程和报文交换情况:
create link fail closesocket
create link success
2006-09-24 09:08:18.120 Send Request:
00 0D 00 00 00 06 01 03 00 00 00 20 Receive Data:
00 0D 00 00 00 43 01 03 40 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 2006-09-24 09:08:18.1 Send Request:
00 0E 00 00 00 06 01 03 00 00 00 20 Receive Data:
00 0E 00 00 00 43 01 03 40 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
8 自定义的UDP MODBUS规约
MODBUS主站和MODBUS从站约定在规定的UDP端口上进行数据传输,主站和从站的UDP端口可以自行定义,目前本规约只支持模拟量和开关量输入数据,它们的报文格式定义如下
I、主站请求模拟数据的报文: 从站地址(1字节) 功能码(1字节,3或4) 起始寄存器(2字节) 寄存器数量(2字节)
II、从站回答的模拟数据报文: 从站地址(1字节) 功能码(1字节,3或4)
数据区所占的字节数(1字节或2字节,可配置,值为寄存器数量的2倍) 被请求的第1寄存器数据(2字节) 被请求的第2寄存器数据(2字节) 被请求的第3寄存器数据(2字节) ......
III、主站请求开关数据的报文: 从站地址(1字节) 功能码(1字节,1或2) 起始寄存器(2字节) 寄存器数量(2字节)
IV、从站回答的开关量数据报文: 从站地址(1字节) 功能码(1字节,3或4)
数据区所占的字节数(1字节或2字节,可配置。当寄存器数量为8的倍数时 ,值为寄存器数量除以8,否则为值为寄存器数量除以8再加上1)
数据(每个开关量寄存器占一个字节的一位)
因篇幅问题不能全部显示,请点此查看更多更全内容
Copyright © 2019- igat.cn 版权所有 赣ICP备2024042791号-1
违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com
本站由北京市万商天勤律师事务所王兴未律师提供法律服务