PC(上位机)与PLC串行通讯协议与串口DLL之 modbus rtu 协议(3)

2019-08-26 18:02

使用举例:

FCN06(1,2,2,\由COM1给modbus 2号从站40003(标准modbus地址)的字单元写入1000(16进制03E8),返回值为1表示成功

注:没有注册的用户只能写入40001~40003范围的状态值;

(00001~0XXXX)

3)、15功能码强置多线圈的通断数据功能函数

Function FCN15(nport,node,address,Count:longint;Sendstr:pchar):longint;stdcall;

参数:

nport: 串口号,取值为1~8,代表COM1~COM8;

node: modbus从站号,取值1~255;

address: 元件地址,取值范围从00001~0XXXX地址区(逻辑线圈)值(你要写标准modbus的00001地址这个值为0000,依次类推)

Count: 写入位元件个数,一次最多1000个但不能超出寻址范围;

Sendstr: 给位元件写入的值按8个为一组和成字节值在写入,该值为2个一组的16进制字符串组其取值为00~FF(整数值为0~255);

返回值: 长整数,操作成功返回1,不能写入或操作错误返回0;

---------- - ~ - ------ 写字符串序列如: | 00 | FF | 10 | 64 | ~ | 08 | 04 | ---------- - ~ - ------

实际字符串与位地址的数值应如下表:

位地址: | 40 | 39 | 38 | 36 | 35 | 34 | 33 | 32 | 48 | 47 | 46 | 45 | 44 | 43 | 42 | 41 |

-----------------------------------------

各位赋值: | 0 | 1 | 1 | 0 | 0 | 1 | 0 | 0 | 0 | 1 | 0 | 1 | 0 | 0 | 0 | 0 |

-----------------------------------------

16进制串: | 6 | 4 | 5 | 0 |

------------------------------------

-----

使用举例:

FCN06(1,2,19,10,\由COM1给modbus 2号从站00020~00029(标准modbus地址)10个位单元写如相应值,返回值为1表示成功

写入值的参考 27~20:CD; 29~28:01;

位地址: | 27 | 26 | 25 | 24 | 23 | 22 | 21 | 20 | -- | -- | -- | -- | -- | -- | 29 | 28 |

-----------------------------------------

各位赋值: | 1 | 1 | 0 | 0 | 1 | 1 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 |

-----------------------------------------

16进制串: | C | D | 0 | 1 |

-----------------------------------------

注:没有注册的用户只能写入00001~00006范围的状态值;

4)、16功能码写多个保持寄存器数据功能函数

Function FCN16(nport,node,address,Count:longint;Sendstr:pchar):longint;stdcall;

参数:

nport: 串口号,取值为1~8,代表COM1~COM8;

node: modbus从站号,取值1~255;

address: 元件地址,取值范围从40001~4XXXX地址区(保持寄存器)值(你要写标准modbus的40001地址这个值为0000,依次类推)

Count: 写入字元件个数,一次最多60个但不能超出寻址范围;

Sendstr: 给字写入的值,该值为4个一组的16进制字符串组其取值为0000~FFFF(整数值为0~65535);

返回值: 长整数,操作成功返回1,不能写入或操作错误返回0;

当要写入多个字值时依次排列即可。如给40001与40002写值100和1000,先将100转成16进制字符串0064、1000转成16进制字符串03E8,

则sendstr=006403E8;一次最多写64个字即字符串长应小于等于256;

---------- ---- ~ --------- 写字符串序列如: | 0064 | 03E8 | 0010 | 6004 | ~ | 0008 | 0400 | ---------- ---- ~ ---------

使用举例:

FCN16(1,2,1,\由COM1给modbus 2号从站40002(标准modbus地址)的字单元写入给10(16进制000A)、40003(标准modbus地址)

的字单元写入给258(16进制0102)返回值为1表示成功;

注:没有注册的用户只能写入40001~40003范围的状态值;

5)、modbus功能码16的扩展功能函数

1、单保持寄存器的0~15相应位的置位 (40001.0-40001.15~4XXXX.0-4XXXX.15)

Function FCN16_xSet(nport,node,address,Bit:longint):longint;stdcall;

参数:

nport: 串口号,取值为1~8,代表COM1~COM8;

node: modbus从站号,取值1~255;

address: 元件地址,取值范围从40001~4XXXX地址区(保持寄存器)值(你要写标准modbus的40001地址这个值为4000,依次类推)

Bit: 保持寄存器的位,取值0~15;

返回值: 长整数,操作成功返回1,不能写入或操作错误返回0;

使用举例:

FCN16_xSet(1,12,2,0),由COM1将modbus 12号从站40003(标准modbus地址)的第0个位状态值置1,返回值为1表示成功

注:没有注册的用户不能使用本功能;

2、单保持寄存器的0~15相应位的复位 (40001.0-40001.15~4XXXX.0-4XXXX.15)

Function FCN16_xReset(nport,node,address,Bit:longint):longint;stdcall;

参数:

nport: 串口号,取值为1~8,代表COM1~COM8;

node: modbus从站号,取值1~255;

address: 元件地址,取值范围从40001~4XXXX地址区(保持寄存器)值(你要写标准modbus的40001地址这个值为4000,依次类推)

Bit: 保持寄存器的位,取值0~15;

返回值: 长整数,操作成功返回1,不能写入或操作错误返回0;

使用举例:

FCN16_xReset(1,10,3,12),由COM1将modbus 10号从站40004(标准modbus地址)的第12个位状态值置0,返回值为1表示成功

注:没有注册的用户不能使用本功能;

3、单保持寄存器的0~15相应位的置复位 (40001.0-40001.15~4XXXX.0-4XXXX.15)指使相应的位短时间通断一次(接通约60ms)

Function FCN16_xSetReset(nport,node,address,Bit:longint):longint;stdcall;

参数:

nport: 串口号,取值为1~8,代表COM1~COM8;

node: modbus从站号,取值1~255;

address: 元件地址,取值范围从40001~4XXXX地址区(保持寄存器)值(你要写标准modbus的40001地址这个值为4000,依次类推)

Bit: 保持寄存器的位,取值0~15;

返回值: 长整数,操作成功返回1,不能写入或操作错误返回0;

使用举例:

FCN16_xSetReset(1,10,9,10),由COM1将modbus 10号从站40010(标准modbus地址)的第10个位状态值置1后约60ms再置0,返回值为1表示成功

注:没有注册的用户不能使用本功能;

四、DLL附加函数说明 (本段函数对未注册用户没有限制,完全可以使用。)

1、串口打开状态的读取

Function ComTrue(nport:longint):longint;stdcall;

参数:

noprt: 串口号,取值为1~8,代表COM1~COM8;

返回值:长整型,串口成功打开返回“1”,否则返回“0”;

这里读取是DLL有效取得了串口的控制权,如果其他程序占用(串口不存在)等原因仍返回“0”。

2、整数转换成16进制字符串 (为VC等非RAD开发环境所增设)

Function CIntToHex(Dcint,Digits:Longint):Pchar;stdcall;

参数:

Cint: 待转换整数,取值为(0~65535);

Digits: 转换的字符串位数,指定位数小于实际位数时按实际输出;

在参数错误等非法的情况下返回“Error@”

使用举例:

CIntToHex(200,2),则返回字符串“C8@”; CIntToHex(200,4),则返回字符串“00C8@”;

CIntToHex(200,8),则返回字符串“000000C8@”; CIntToHex(4500,4),则返回字符串“1194@”;

CIntToHex(4500,3),则返回字符串“1194@”,因为“194”不足以表示4500这个数所以按实际输出字符串“1194@”;

\为字符串数据的终止符。

3、16进制字符串转换成整数 (为VC等非RAD开发环境所增设)

Function CHexToInt(CHex:Pchar):Longint;stdcall;


PC(上位机)与PLC串行通讯协议与串口DLL之 modbus rtu 协议(3).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:强制清算中应注意的问题

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: