您当前的位置:五五电子网电子知识plc技术PLC维护PC(上位机)与PLC串行通讯协议与串口DLL之 正文
PC(上位机)与PLC串行通讯协议与串口DLL之

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

点击数:7957 次   录入时间:03-04 12:02:40   整理:http://www.55dianzi.com   PLC维护

参数:

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

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

address: 元件地址,取值范围从30001~3XXXX地址区(输入寄存器数据)值(你要读标准modbus的30001地址这个值为0000,依次类推)

Count:   读取的位元件个数,一次最多读取60个但不能超出寻址范围;

返回值: 16进制字符串数据,字符串数据的终止符为"@";

使用举例:

FCN04(1,17,8,1),由COM1读取modbus 17号从站30009(标准modbus地址)的字状态值,返回值为“000A@”

则表示30009:000A;

在读取错误或不能读取的情况下返回“Error@”

注:没有注册的用户只能读取30001~30003范围的状态值;

4、modbus相应功能码所对应的写入功能函数

1)、05功能码线圈的置复位功能函数

    1、线圈置位 
            
       Function FCN05S(nport,node,address:longint):longint;stdcall;

参数:

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

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

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

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

使用举例:

FCN05S(1,12,15),由COM1将modbus 12号从站00013(标准modbus地址)的位状态值置1,返回值为1表示成功

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

       2、线圈复位 
            
       Function FCN05R(nport,node,address:longint):longint;stdcall;

参数:

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

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

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

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

使用举例:

FCN05R(1,12,15),由COM1将modbus 12号从站00013(标准modbus地址)的位状态值置0,返回值为1表示成功

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

2)、06功能码预置单保持寄存器数据功能函数

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

参数:

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

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

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

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

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

当要写入字值时依次排列即可。如给40001写值1000,先将1000转成16进制字符串03E8,则sendstr=03E8;

使用举例:

FCN06(1,2,2,"03E8"),由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,"CD01"),由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         |
            -----------------------------------------

上一页  [1] [2] [3] [4] [5] [6] [7]  下一页


本文关键字:暂无联系方式PLC维护plc技术 - PLC维护