TSX08ED12R8 所选的ASCII或RTU方式仅适用于标准的Modbus网络,它定义了在这些网络上连续传输的消息段的每一位,以及决定
怎样将信息打包成消息域和如何解码。在其它网络上(象MAP和Modbus Plus)Modbus消息被转成与串行传输无关的帧。
因ASCII模式通讯效率较低一多采用RTU模式,这里只对RTU模式进行详细介绍。
4、Modbus RTU模式
当控制器设为在Modbus网络上以RTU(远程终端单元)模式通信,在消息中的每个8Bit字节包含两个4Bit的十六进制
字符。这种方式的主要优点是:在同样的波特率下,可比ASCII方式传送更多的数据。
代码系统
8位二进制,十六进制数0...9,A...F
消息中的每个8位域都是一个两个十六进制字符组成每个字节的位1个起始位8个数据位,**小的有效位先发送1个奇偶校验位,无校验则无
1个停止位(有校验时),2个Bit(无校验时)
错误检测域 CRC(循环冗长检测)
地址域
消息帧的地址域包含8Bit(RTU)。可能的从设备地址是0...247(十进制)。单个设备的地址范围是1...247。主设备通过将要联络的从设备的地址放入消息中的地址域来选通从设备。当从设备发送回应消息时,它把自己的地址放入回应的地址域中,以便主设备知道是哪一个设备作出回应。地址0是用作广播地址,以使所有的从设备都能认识。当Modbus协议用于更高水准的网络,广播可能不允许或以其它方式代替。
如何处理功能域
数据域是由两个十六进制数集合构成的,范围00...FF。根据网络传输模式,这可以是由一RTU字符组成。从主设备发给从设备消息的数据域包含附加的信息:从设备必须用于进行执行由功能代码所定义的所为。这包括了象不连续的寄存器地址,
要处理项的数目,域中实际数据字节数。例如,如果主设备需要从设备读取一组保持寄存器(功能代码03),数据域指定了起始寄存器以及要读的寄存器数量。如果主设备写一组从设备的寄存器(功能代码10十六进制),数据域则指明了要写的起始寄存器以及要写的寄存器数量,数据域的数据字节数,要写入寄存器的数据。如果没有错误发生,从从设备返回的数据域包含请求的数据。如果有错误发生,此域包含一异议代码,主设备应用程序可以用来判断采取下一步行动。在某种消息中数据域可以是不存在的(0长度)。例如,主设备要求从设备回应通信事件记录(功能代码0B十六进制),从设备不需任何附加的信息。
三、DLL函数说明
modbus.DLL是王俊于2007年**开发的基于施耐得modbus rtu 通讯协议的串口通讯链接库。modbus.DLL专业版实现了对保持寄存器40001~4XXXX区数据读写(FCN03:读、FCN16:写,FCN06写单个数据);对逻辑线圈00001~0XXX的 读写(FCN01:读取一组线圈,FCN05:强置单线圈,FCN15强置多线圈);对输入状态10001~1XXXX的读(FCN02);对输入寄存器30001~3XXXX的读(FCN04)。
DLL中的主要函数:
ComOpen:打开串口
ComClose:关闭串口
FCN01:读取一组线圈(00001~0XXX)
FCN02:取得一组开关输入状态数据(10001~1XXXX)
FCN03:读多个保持寄存器数据(40001~4XXXX)
FCN04:读多个输入寄存器数据(30001~3XXXX)
FCN05S:置位单线圈(00001~0XXX)
FCN05R:复位单线圈(00001~0XXX)
FCN06: 预置单保持寄存器数据(40001~4XXXX)
FCN15: 强置多线圈的通断数据(00001~0XXX)
FCN16: 写多个保持寄存器数据(40001~4XXXX)
FCN16_xSet:单保持寄存器的0~15相应位的置位(40001.0-40001.15~4XXXX.0-4XXXX.15)
FCN16_xReset:单保持寄存器的0~15相应位的复位(40001.0-40001.15~4XXXX.0-4XXXX.15)
FCN16_xSetReset:单保持寄存器的0~15相应位的置复位(40001.0-40001.15~4XXXX.0-4XXXX.15),指使相应的位短时间通断一次(约通60ms)
ComTrue:读取DLL中的串口是否备有效打开
CinBin: 字中相应的位的状态抽取
1、打开串口
Function ComOpen(nport,BaudRate,DataBits,Parity,StopBits:longint;User:Pchar):longint;stdcall;
参数:nport: 打开串口号,取值为1~8,代表COM1~COM8;
BaudRate:波特率,取值为:1200、2400、4800、9600、19200、38400;
DataBits:数据位,取值为5、6、7、8;
Parity: 校验位,取值1(代表Even)、取值2(代表Odd)、取值3(代表Mark)、取值4(代表Space)、取值5(代表None);
StopBits:停止位,取值1(代表1位停止位)、取值2(代表2位停止位)、取值3(代表1.5位停止位);
User:DLL授权用户名;
返回值:长整型,操作成功返回“1”或“2”;1表示注册授权用户,2表示用户未注册;
操作不成功返回为“0”时的原因:1)、串口不存在或被占用; 2)、DLL注册授权不正确。
注:本DLL用户不注册除了下面说明的功能限制外没有其他限制,未注册用户请使用特定用户名:wangjun。注册用户功能上无任何限制,且将得到**的软件使用和更新升级服务;
使用举例:
Delphi:ComOpen(1,9600,8,1,1,Pcha('wangjun')) , 打开COM1口。
VB:ComOpen(1,9600,8,1,1,"wangjun") , 打开COM1口。(注:下面的示例都以VB调用形式给出)
2、关闭串口
Function ComClose(nport:longint):longint;stdcall;
参数:nport: 串口号,取值为1~8,代表COM1~COM8;
返回值:长整型,操作成功返回“1”,否则返回“0”;
使用举例:
ComClose(1) ,关闭打开的COM1口。
3、modbus相应功能码所对应的读取功能函数。
1)、01功能码位元件的读取(读取一组线圈)
Function FCN01(nport,node,address,Count:longint):Pchar;stdcall;
参数:
nport: 串口号,取值为1~8,代表COM1~COM8;
node: modbus从站号,取值1~255;
address: 元件地址,取值范围从00001~0XXX地址区(逻辑线圈)值(你要读标准modbus的00001地址这个值为0000,依次类推)
Count: 读取的位元件个数,一次**多读取1000个但不能超出寻址范围;
返回值: 16进制字符串数据,字符串数据的终止符为"@";
使用举例:
FCN01(1,1,19,37),由COM1读取modbus 1号从站00020~00056(标准modbus地址)的位状态值,返回值为“CD6BB20E1B@”
则表示27~20:CD, 35~28:6B, 43~36:B2, 51~44:0E, 56~52:1B;
字节值与实际的位状态值对应参考(其他位功能函数的说明不再重复本内容): Invensys 122-12 Fluid/Gas Pressure Regulator
Fischer & Porter MagX 50PZ1211B11226X /w Mounting Bracket PLC Mag-Flow X and
Transmation 650T-65 R/I Transmitter Moore E/P transducer 77-16 Flow Control
Foxboro E83F-08S1KSIR-A?J Vortex Flowmeter Transmitter E83F08S1KSIRAJ Flow Meter
Vickers NEW F3-DG5S-8-2A-M-?FTWL-B6-40 Directional Control Valve 02-360291 NIB
Micro Motion D100S-SS Mass Flow Sensor Stainless Steel D100SSS 2250 PSI D100SSS
Foxboro 136 Computing Relay 136-2 Supply 20-22 PSI Input 3-15 PSI Output 3-15PSI
Foxboro IDP10-DF1B01F-S?ORJ1 Transmitter 20-108 in H2O IDP10DF1B01FSOR?J1
NLB Corp 1535 Seal for Spin Jet Cleaner 10K NLB1535 NEW
Fisher Controls 1151LLT4E22A0M1 Transmitter 275 PSI 45 VDC 1151-LLT4E22A0M?1
General Eastern MMR101-C6R48 Dewpro MMR101 150 PSI 12-30 VDC MMR101C6R48
Foxboro 83F-D02S1SSRJA-?D Vortex Flowmeter Flow Meter Transmitter 83FD02S1SSRJAD
Rosemount 3051 CA1A22A1AS1B4 Smart Pressure Transmitter 3051CA1A22A1AS1?B4 HART
SSP Alfa Laval NEW Rotary Lobe Pump 3" 1KDRS75HACZX SR5-1422-07 Tri-Clover Alpha
Honeywell STG94L-E1G Pressure Transmitter 125 PSI ST3000 750 PSI STG94LCE1G20I6
Magnetrol 341 Ultrasonic Transmitter 341-2442-100 4X 3412442100
Foxboro 821GM-IS1SH1 Electronic Transmitter w/ Sensor 821GM-IS1SH1 Flow meter
Foxboro IDP10-D22A01F-M?1LI Flow Control Meter Transmitter IDP10D22A01FM1L?1
Foxboro 2808-SABA-TSA-G Magnetic 8" Flow Tube 2800 Series 2808SABA-TSA-G 8in
Dulcometer ProMinent Model PHP/RHP pH Redox Controller
Foxboro 841AX-BI1 Electronic Transmitter with Sensor 841AXBI1 Flow Meter
Micro Motion D100S-SS-A150 Mass Flow Sensor MicroMotion D100SSSA150
Transmation 752T RTD Transmitter Moore transducer 77-16 Flow Control
Foxboro IDP10-T22A21F-M?1 Flow Control 3626 PSI IDP10T22A21FM1 12.5 - 42.0 VDC
Endress Hauser NEW Promass M 63MT15 SWAOOAX5XXX Flow Transmitter NIB
Moore Industries X1HFGCX2L Flow Control RIY/PRG/4-20MA/?12-42DC XIHFGCX 2L
Micro Motion DL200S227SU Mass Flow Sensor MicroMotion DL200S-227SU SS Stainless
Transmation 452T RTD Transmitter Moore E/P Transducer 77-16 Flow Control
REBUILT Byron Jackson 4X11-10STG Typ HDB 375000 lbs/hr Boiler Feed Water Pump BJ
REBUILT BJ 4X11-10STG Typ HDB 375000 lbs/hr Boiler Feed Water Pump Byron Jackson
Vickers NEW PVB29 RSFW 20 C 11 Variable Displacement Piston Pump PVB 29 GPM NIB
Transmation 452T RB Transmitter Moore E/P transducer 77-16 Flow Control
Rosemount 1151LT6SA0A12DW?5 Liquid Level Transmitter 1151 LT6SA0A12DW5