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

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

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

FCN04:读多个输入寄存器数据(30001~3XXXX)

FCN05S:置位单线圈(00001~0XXXX)

FCN05R:复位单线圈(00001~0XXXX)

FCN06: 预置单保持寄存器数据(40001~4XXXX)

FCN15: 强置多线圈的通断数据(00001~0XXXX)

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,Pchar(’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~0XXXX地址区(逻辑线圈)值(你要读标准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;

字节值与实际的位状态值对应参考(其他位功能函数的说明不再重复本内容):
            
位地址:    | 27 | 26 | 25 | 24 | 23 | 22 | 21 | 20 | 35 | 34 | 33 | 32 | 31 | 30 | 29 | 28 | 
            -----------------------------------------
各位赋值:   | 1  | 1  | 0  | 0  | 1  | 1  | 0  | 1  | 0  | 1  | 1  | 0  | 1  | 0  | 1  | 1  |
            -----------------------------------------
16进制串:  |         C         |         D         |         6         |         B         |
            -----------------------------------------

不足8位的位组的状态值参考:

位地址:    | 56 | 55 | 54 | 53 | 52 | 
            -------------
各位赋值:   | 0  | 1  | 0  | 1  | 1  |
            -------------
16进制串:  | 1  |         B         |
            -------------

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

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

2)、02功能码位元件的读取(取得一组开关输入状态数据)

Function FCN02(nport,node,address,Count:longint):Pchar;stdcall;

参数:

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

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

address: 元件地址,取值范围从10001~1XXXX地址区(开关输入状态)值(你要读标准modbus的10001地址这个值为0000,依次类推)

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

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

使用举例:

FCN02(1,1,196,22),由COM1读取modbus 1号从站10197~10218(标准modbus地址)的位状态值,返回值为“ACDB35@”

则表示10204~10197:AC, 10212~10205:DB, 10218~10213:35;

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

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

3)、03功能码字元件的读取(读多个保持寄存器数据)

Function FCN03(nport,node,address,Count:longint):Pchar;stdcall;

参数:

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

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

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

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

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

使用举例:

FCN03(1,1,107,3),由COM1读取modbus 1号从站40108~40110(标准modbus地址)的字状态值,返回值为“022B00000064@”

则表示40108:022B, 40109:0000, 40110:0064;

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

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

4)、04功能码字元件的读取(读多个输入寄存器数据)

Function FCN04(nport,node,address,Count:longint):Pchar;stdcall;

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


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