注:没有注册的用户只能写入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,"000A0102"),由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;
参数:
CHex: 待转换字符串,取值为(0000~FFFF);
使用举例:
CHexToInt("03E8"),则返回整数1000;
注:在参数不正确等出错情况下返回值为“-1”。
4、抽取(0~65535)所示整数中(0~15)某个位的值
Function CinBin(CHex,Start:longint):longint;stdcall;
参数:
CHex: 待转换整数,取值为0~65535(0000~FFFF);
Start: 抽取的位,取值为(0~15);
使用举例:
CinBin(15,3),则返回值1;
CinBin(15,4),则返回值0;
CinBin(1000,6),则返回值1;
读取MB0组合成的字节值为“FC”(252)时,要读取M0.1的值时,则调用CinBin(252,1)返回值0表示M0.1的值为0。
注:在参数不正确等出错情况下返回值为“-1”。
5、返回字符串Text左边的Count个字符 (为VC等非RAD开发环境所增设)
Function CLeftStr(Text:Pchar;Count:longint):Pchar;stdcall;
参数:
Text: 字符串原型;
Count: 指定返回左侧字符串个数;
在参数错误等非法的情况下返回“Error@”
使用举例:
CleftStr("123456", 3) = "123@";
"@"为字符串数据的终止符。
6、返回字符串Text右边的Count个字符 (为VC等非RAD开发环境所增设)
Function CRightStr(Text:Pchar;Count:longint):Pchar;stdcall;
参数:
Text: 字符串原型;
Count: 指定返回右侧字符串个数
在参数错误等非法的情况下返回“Error@”
使用举例:
CRightStr("123456", 3) = "456@";
"@"为字符串数据的终止符。
7、返回字符串Text从Start开始的Count个字符 (为VC等非RAD开发环境所增设)
Function CMidStr(Text:Pchar;Start,Count:longint):Pchar;stdcall;
参数:
Text: 字符串原型;
Start: 指定返回字符串的起始位置;
Count: 指定返回字符串个数;
上一页 [1] [2] [3] [4] [5] [6] [7] 下一页
本文关键字:暂无联系方式PLC维护,plc技术 - PLC维护