变频点焊机通讯协议说明
变频点焊机控制器通讯说明
一、功能介绍
本控制器可配置通讯接口与上位机进行通讯,接口电平符合RS485标准。通讯格式为ModBus RTU。通讯速率9600bit/s。一个通讯接口比较多可接32台控制器,通讯距离比较长500米。
端口设置为:RS485两线制,9600bit/s,8位,偶校验,停止位1位
1、在“工作”状态时,上位机能向控制器读取的参数有:
A、规范号;B、焊接电流值;C、焊接次数;D、报警信息;E、“焊接/调整”状态、“工作/设定”状态、“运行/待机”等
2、在“工作”状态时,上位机能向控制器写的参数有:
A、置控制器于“设定”状态()
3、当控制器处于设定状态时,上位机能向控制器读/写的参数有:
一级菜单参数和二级菜单参数等
注意事项:
1、上位机向控制器连续写指令时,需要等控制器执行完上一条指令并给出返回信号后,才能写下一条指令。
2、控制器处于工作状态时禁止写除“状态”以外的其它参数。
3、通讯时请不要随意写入不属于说明书上参数,写入范围请参照使用说明书,随意写入可能造成控制器出错。
4、通讯时如果修改下位机号,则必须再次保证上位机通讯地址和下位机号相同,才可以正常通讯
5、控制器中,二级菜单密码7中参数Eb为下位机号
6、当控制器为“运行”状态时,禁止向控制器写入任何参数,包括更改状态
7、部分触摸屏和设备使用的协议地址为1开始,因此在使用时,需在本设备的起始地址上加1处理,例如按照本协议报警信息地址为22H(十六进制),转换为十进制时34,加1处理后实际填写的地址为35。
二、通讯协议与指令
1、读指令格式
读指令由“地址”、“功能代码”、“起始地址”、“读取字个数”和“校验码CRC16”组成(H高字节,L低字节)。
1.1、上位机发送指令格式为:
地址 + 功能代码 + 起始地址 + 读取字个数 + 校验码CRC16
单字节 单字节 2字节(H+L) 2字节(H+L) 2字节(L+H)
① ② ③ ④ ⑤
① 控制器地址与地址指令(单字节)
工作中,通常一个通讯接口上连有多台控制器,为了方便区分,需将每台控制器进行独立编号,约定称下位机号,设定范围0-99。
如某下位机号Eb=11(16进制为0BH),
该控制器的地址指令为: 0BH
② 功能代码(单字节)
读参数指令代码为:03H
③ 起始地址 2字节(H+L)
读取内容不同,起始地址编号不同,具体见参数代号表,如读取当前控制器的焊接次数,则起始地址为:23H。
④ 读取字个数 2字节(H+L)
读取内容不同,读取字个数不同,具体见参数代号表,如读取当前控制器的焊接次数,则读取字个数为: 01H
⑤ 校验码(CRC16) 2字节(L+H)
根据发送的内容进行CRC16计算,计算的结果作为校验码发送,发送校验码的格式为(L+H)低字节在前,高字节在后。
注:将发送指令中除校验码之外的所有参数进行CRC16计算,得到CRC校验码,放在发送指令比较后面。CRC16算法请用户自行查找资料,一般触摸屏中自带ModbusRTU协议,部分PLC中有CRC指令。
1.2、下位机返回数据格式为:
地址 + 功能代码 + 读取字节个数 + 读取的数据 + 校验码CRC16
单字节 单字节 单字节 2字节(H+L) 2字节(L+H)
① ② ③ ④ ⑤
① 地址(单字节)
下位机机号,与发送指令中的地址相同。
② 功能代码(单字节)
与发送指令中的功能代码相同。
③ 读取字节个数(单字节)
所读取数据的字节个数,是发送指令中读取字个数的两倍,如发送指令中读取字个数为01H,则下位机返回的读取字节个数为02H。
④ 读取的数据
上位机不同的读取内容,下位机返回不同的读取数据。
⑤ 校验码CRC16
下位机根据发送内容经过CRC16计算出的校验码,用于上位机纠错。校验码的格式为(L+H)低字节在前,高字节在后。
2、写指令格式(单字写)
单字写参数指令由“地址”、“功能代码”、“起始地址”、“读取字个数”和“校验码CRC16”组成。
2.1、上位机发送指令格式为:
地址 + 功能代码 + 起始地址 + 要写入的数据 + 校验码CRC16
单字节 单字节 2字节(H+L) 2字节(H+L) 2字节(L+H)
① ② ③ ④ ⑤
① 地址(单字节)
下位机机号。
② 功能代码(单字节)
单字写指令代码为:06H。
③ 起始地址 2字节(H+L)
根据写的参数不同,起始地址代码不同,具体见参数代号表。
④ 要写入的数据 2字节(H+L)
所写参数的具体内容。
⑤ 校验码(CRC16) 2字节(L+H)
根据发送的内容进行CRC16计算,计算的结果作为校验码发送,发送校验码的格式为(L+H)低字节在前,高字节在后。
2.2、下位机返回的数据格式为:
地址 + 功能代码 + 起始地址 + 写入的数据 + 校验码CRC16
单字节 单字节 2字节(H+L) 2字节(H+L) 2字节(L+H)
① ② ③ ④ ⑤
3、规范读/写(多字读/写)
3.1、规范的读指令(多字读)
读指令由“地址”、“功能代码”、“起始地址”、“读取字个数”和“校验码CRC16”组成(H高字节,L低字节)。
3.1.1、上位机发送指令格式为:
地址 + 功能代码 + 起始地址 + 读取字个数 + 校验码CRC16
单字节 单字节 2字节(H+L) 2字节(H+L) 2字节(L+H)
① ② ③ ④ ⑤
① 控制器地址与地址指令(单字节)
下位机机号。
如某下位机号Eb=11(16进制为0BH), 该控制器的地址指令为: 0BH
② 功能代码(单字节)
读参数指令代码为:03H
③ 起始地址 2字节(H+L)
高字节为规范号(01H-20H分别对应32个规范),
低字节为规范参数(00H-10H分别对应17个参数),参见下表
高字节(H) |
低字节(L) |
字数(双字节) |
备注 |
|
01H-20H 分别对应控制器1-32个规范 |
00H |
预压时间 |
01H |
读/写 |
01H |
加压时间 |
01H |
读/写 |
|
02H |
预热电流 |
01H |
读/写 |
|
03H |
预热时间 |
01H |
读/写 |
|
04H |
间隔时间1 |
01H |
读/写 |
|
05H |
缓升时间 |
01H |
读/写 |
|
06H |
焊接电流 |
01H |
读/写 |
|
07H |
焊接时间 |
01H |
读/写 |
|
08H |
间隔时间2 |
01H |
读/写 |
|
09H |
缓降时间 |
01H |
读/写 |
|
0AH |
回火电流 |
01H |
读/写 |
|
0BH |
回火时间 |
01H |
读/写 |
|
0CH |
维持时间 |
01H |
读/写 |
|
0DH |
休止时间 |
01H |
读/写 |
|
0EH |
增压延时 |
01H |
读/写 |
|
0FH |
增压时间 |
01H |
读/写 |
|
10H |
比例阀规范 |
01H |
读/写 |
表一
注:起始地址高字节01H-20H分别对应控制器的1-32个焊接规范;
④ 读取字个数 2字节(H+L)
读取内容不同,读取字个数不同, 如读取某规范的所有参数,则读取字个数为: 11H
⑤ 校验码(CRC16) 2字节(L+H)
比例阀规范参数:
16进制地址 |
参数 |
设定范围 |
字数(双字节) |
|
比 例 阀 规 范 1 |
3000H |
T1 |
0~9999 |
01 |
3001H |
P1 |
|||
3002H |
T2 |
|||
3003H |
P2 |
|||
…… |
||||
300EH |
T8 |
|||
300FH |
P8 |
|||
|
||||
比例阀规范2:3014H~3023H |
||||
比例阀规范3:3028H~3037H |
||||
比例阀规范4:303CH~304BH |
||||
比例阀规范5:3050H~305FH |
表二
根据发送的内容进行CRC16计算,计算的结果作为校验码发送,发送校验码的格式为(L+H)低字节在前,高字节在后。
3.1.2、下位机返回数据格式为:
地址 + 功能代码 + 读取字节个数 + 读取的数据 + 校验码CRC16
单字节 单字节 单字节 (H+L…H+L) 2字节(L+H)
① ② ③ ④ ⑤
① 地址(单字节)
下位机机号,与发送指令中的地址相同。
② 功能代码(单字节)
与发送指令中的功能代码相同。
③ 读取字节个数(单字节)
所读取数据的字节个数,是发送指令中读取字个数的两倍,如发送指令中读取字个数为02H,则下位机返回的读取字节个数为04H。
④ 读取的数据
上位机不同的读取内容,下位机返回不同的读取数据。
⑤ 校验码CRC16
下位机根据发送内容经过CRC16计算出的校验码,用于上位机纠错。校验码的格式为(L+H)低字节在前,高字节在后。
3.2、规范的写指令(多字写)
写规范参数指令由“地址”、“功能代码”、“起始地址”、“写入字个数”和“要写入数据”、“校验码CRC16”组成。
3.2.1、上位机发送指令格式为:
地址 + 功能代码 + 起始地址 + 写入字个数 + 写入字节个数 + 要写入的数据 + 校验码CRC16
单字节 单字节 2字节(H+L) 2字节(H+L) 单字节 N字节(H+L…H+L) 2字节(L+H)
① ② ③ ④ ⑤ ⑥ ⑦
① 地址(单字节)
下位机机号。
② 功能代码(单字节)
多字写指令代码为:10H。
③ 起始地址 2字节(H+L)
根据写的参数不同,起始地址代码不同,具体参见表一。
④ 写入字个数 2字节(H+L)
所写参数内容的字个数。
⑤ 写入字节个数 单字节
所写内容的字节个数,是所写内容字个数的两倍。
⑥ 要写入的数据 N个字(H+L…H+L)
要写入的数据字数与写入的内容有关,如要写某规范的全部参数,要写入的数据总共为12字。
⑦ 校验码(CRC16) 2字节(L+H)
根据发送的内容进行CRC16计算,计算的结果作为校验码发送,发送校验码的格式为(L+H)低字节在前,高字节在后。
3.2.2、下位机返回的数据格式为:
地址 + 功能代码 + 起始地址 + 写入字个数 + 校验码CRC16
单字节 单字节 2字节(H+L) 2字节(H+L) 2字节(L+H)
① ② ③ ④ ⑤
4、参数代号表
功能代码 |
说明 |
03H |
读取数据 |
06H |
写单字数据 |
10H |
写多字数据 |
表三
16进制地址 |
参数 |
设定范围 |
字数(双字节) |
备注 |
1BH |
采样周期PP |
详 |
01H |
密码22 |
21H |
工作状态 |
|
||
22H |
报警信息 |
只读 |
||
23H |
焊接次数 |
只读 |
||
24H |
查看选择规范 |
|
||
29H |
控制方式P |
二级菜单 |
||
2AH |
采样方式A |
|||
2BH |
采样方式B |
|||
2CH |
电流上限AH |
|||
2DH |
电流下限AL |
|||
2EH |
密码位 |
|
||
2FH |
时间单位AA |
密码4 |
||
30H |
辅助气阀输出方式Ab |
|||
31H |
控制方式AC |
|||
32H |
初始导通角Ad |
|||
33H |
电压上限设定值AE |
|||
34H |
电压下限设定值AF |
|||
35H |
焊接脉冲循环次数d |
密码5 |
||
36H |
错误提示T |
|||
37H |
多规范数C |
|||
38H |
CE备用(禁止修改) |
密码10 |
||
3DH |
下位机号Eb |
密码7 |
||
44H |
分配器功能FP |
密码6 |
||
45H |
辅助气阀输出时间Ft |
|||
59H |
通讯口选择TA |
0/1 |
|
|
62H |
小数点值 |
只读 |
||
63H |
电压值 |
只读 |
||
64H-6DH |
电流值(方式一) |
10个电流一次读取,字数0AH |
||
6EH-81H |
电流值(方式二) |
10个电流一次读取,字数14H |
||
C350H-C3B3H |
电流监测(100点) |
比较近一次焊接的100个采样点电流 |
表四
(1)工作状态(21H)
工作状态参数为2字节,仅用到低字节中D0、D1、D2、D3、D4
D7 |
D6 |
D5 |
D4 |
D3 |
D2 |
D1 |
D0 |
X |
X |
X |
运行/待机 |
计数器清零 |
报警清除 |
调整/焊接 |
工作/设定 |
表五
读:D0=0时,为“设定”状态,D0=1时为“工作”状态
D1=0时,为“焊接”状态,D1=1时为“调整”状态
D4=0时,为“待机”状态,D4=1时为“运行”状态
写:D0置0时,为“设定”状态,D0置1时为“工作”状态
D2置1时,清除报警信息,置0时无动作
D3置1时,计数器清零,置0时无动作
注:运行为控制器有输出是的状态,待机为控制器没有输出,此状态为只读。
注意:1、工作状态下,不允许写参数,启动过程中,不允许发送工作/待机指令,否则可能会造成通讯异常;
2、写入下位机号时,请一定注意,写入后立即修改,此时如果不修改上位机通讯机号,则无法正常通讯。(如果有配置显示面板,则可通过显示面板来设置Eb值来修改下位机号使其符合上位机的通讯地址。)
3、通讯口选择:本控制器具有两个通讯口(主板上一个标识为通讯——橙色插座,另一个标识为触摸屏——白色插座),可以同时对两个通讯口进行读数据操作,但是同时只能对其中一个通讯口进行写数据操作,进行写操作的通讯口由参数“通讯口选择TA”确定,当TA=0时,通讯插座可以进行写数据操作;当TA=1时,触摸屏插座可以进行写数据操作。因此在通讯时如果发现只能读数据,不能写数据,可以修改此参数。(此参数不论哪个通讯口,都可以执行写操作)
(2)读报警信息(22H) (对应控制器的错误信息Er01~Er30)
下位机返回的报警信息为2字节,高字节为0,低字节数据代表报警信息
值 |
对应控制器的报警信息 |
00H |
无报警信息 |
01H |
Er01 |
02H |
Er02 |
03H |
Er03 |
04H |
Er04 |
05H |
Er05 |
06H |
Er06 |
07H |
Er07 |
…… |
…… |
1EH |
Er30 |
表六
注:部分报警为备用
(3)小数点(62H)
焊接电流显示值的小数点位置可从地址62H直接读取到:0=无,1=0.1,2=0.01;
焊接规范电流设定值的小数点:当AC=1时没有小数点;AC≠1时,小数点位置与显示值相同;
二级菜单采样方式A值:当二级菜单采样方式b=1时,有一个小数点;b≠1时,A没有小数点;
(4)读焊接电流(64H-81H)
方式一、此方式仅适用于焊接规范小于16和初级焊接电流不大于4000的控制器。控制器留有10个字(20字节)的缓存区采用队列的方式保存比较近3次焊接的电流值,每个焊接电流占1个字 ,其中每个字的高4位代表规范号(0001-1111分别对应1-15个规范,16号规范为0000),其余12位代表电流值;
64H |
D0(高4位) |
第N-2次预热电流 |
D1(低12位) |
||
65H |
D2(高4位) |
第N-2次焊接电流 |
D3(低12位) |
||
66H |
D4(高4位) |
第N-2次回火电流 |
D5(低12位) |
||
67H |
D6(高4位) |
第N-1次预热电流 |
D7(低12位) |
||
68H |
D8(高4位) |
第N-1次焊接电流 |
D9(低12位) |
||
69H |
D10(高4位) |
第N-1次回火电流 |
D11(低12位) |
||
6AH |
D12(高4位) |
第N次预热电流 |
D13(低12位) |
||
6BH |
D14(高4位) |
第N次焊接电流 |
D15(低12位) |
||
6CH |
D16(高4位) |
第N次回火电流 |
D17(低12位) |
||
6DH |
D18(高4位) |
备用 |
D19(低12位) |
表七
注意:1、上位机在连续读取焊接电流时,未存焊接电流值的缓存区数据为0;
2、10个电流缓存区须一次性读取,读单独一个会通讯错误(03H);
3、上位机读取成功一次后,会将缓存区清零。
例:控制器执行完2次焊接过程后,上位机发出信号读取焊接电流值,读到的数据如下:
64H |
D0(高4位) |
第N-1次预热电流 |
D1(低12位) |
||
65H |
D2(高4位) |
第N-1次焊接电流 |
D3(低12位) |
||
66H |
D4(高4位) |
第N-1次回火电流 |
D5(低12位) |
||
67H |
D6(高4位) |
第N次预热电流 |
D7(低12位) |
||
68H |
D8(高4位) |
第N次焊接电流 |
D9(低12位) |
||
69H |
D10(高4位) |
第N次回火电流 |
D11(低12位) |
||
6AH |
D12(高4位) |
0 |
D13(低12位) |
||
6BH |
D14(高4位) |
0 |
D15(低12位) |
||
6CH |
D16(高4位) |
0 |
D17(低12位) |
||
6DH |
D18(高4位) |
0 |
D19(低12位) |
表八
注:N为上位机向控制器读数据时,控制器所执行完的比较后一次焊接。
方式二、控制器留有20个字(40字节)的缓存区采用队列的方式保存比较近3次焊接的电流值,每个焊接电流占用2个字,前一个字代表规范号,后一个字代表焊接电流值;
6EH |
第N-2次焊接规范 |
6FH |
第N-2次预热电流值 |
70H |
第N-2次焊接规范 |
71H |
第N-2次焊接电流值 |
72H |
第N-2次焊接规范 |
73H |
第N-2次回火电流值 |
74H |
第N-1次焊接规范 |
75H |
第N-1次预热电流值 |
76H |
第N-1次焊接规范 |
77H |
第N-1次焊接电流值 |
78H |
第N-1次焊接规范 |
79H |
第N-1次回火电流值 |
7AH |
第N次焊接规范 |
7BH |
第N次预热电流值 |
7CH |
第N次焊接规范 |
7DH |
第N次焊接电流值 |
7EH |
第N次焊接规范 |
7FH |
第N次回火电流值 |
80H |
备用 |
81H |
备用 |
表九
注意:1、上位机在连续读取焊接电流时,未存焊接电流值的缓存区数据为0。
2、20个电流缓存区须一次性读取,读单独一个会通讯错误(03H)
3、上位机读取成功一次后,会将缓存区清零。
例:控制器执行完2次焊接过程后,上位机发出信号读取焊接电流值,读到的数据如下:
6EH |
第N-1次焊接规范 |
6FH |
第N-1次预热电流值 |
70H |
第N-1次焊接规范 |
71H |
第N-1次焊接电流值 |
72H |
第N-1次焊接规范 |
73H |
第N-1次回火电流值 |
74H |
第N次焊接规范 |
75H |
第N次预热电流值 |
76H |
第N次焊接规范 |
77H |
第N次焊接电流值 |
78H |
第N次焊接规范 |
79H |
第N次回火电流值 |
7AH |
0 |
7BH |
0 |
7CH |
0 |
7DH |
0 |
7EH |
0 |
7FH |
0 |
80H |
0 |
81H |
0 |
表十
注:N为上位机向控制器读数据时,控制器所执行完的比较后一次焊接。
(5)电流监测(C350H-C3B3H)
控制器可监测比较后一次焊接的100个采样点的电流,采用100个字的缓存区来存放这100个电流,数据的读取需在控制器没有运行时进行
C350H |
第1个采样点 |
C351H |
第2个采样点 |
C352H |
第3个采样点 |
…… |
…… |
C3B3H |
第100个采样点 |
表十一
5、错误应答
当下位机返回的数据格式如下时,说明通讯不正确。
机号 + (80H+功能代码) + 故障代号××H + 校验码CRC16
单字节 单字节 单字节 2字节(L+H)
故障代号 |
意义 |
01H |
功能代码错误 |
02H |
起始地址错误 |
03H |
字节/字数错误 |
04H |
校验码错误/工作状态写参数 |
表十二
6、通讯举例及说明
注:以下指令均为16进制;字节数为字数的两倍
6.1、读单字
发送指令:01 03 00 2A 00 01 A5 C2
(01:下位机机号;03:读指令;00 2A:起始地址,此处为二级菜单A值;00 01:读取字个数;A5 C2:校验码)
返回数据:01 03 02 00 14 B8 4B
(01:下位机机号;03:读指令;02:读取的字节个数;00 14:数据,16进制,转换为10进制为20;B8 4B:校验码)
以上例子为读取二级菜单中的A值,数值为20
同理:
发送指令:01 03 01 00 00 01 85 F6;
返回数据:01 03 02 00 05 78 47
读取的数据是规范一的参数一,数值为5
6.2、读多字
发送指令:01 03 00 2A 00 03 24 03
(01:下位机机号;03:读指令;00 2A:起始地址;00 03:读取字个数,此处为三个数;24 03:校验码)
返回数据:01 03 06 01 2C 00 00 00 1E 31 6A
(01:下位机机号;03:读指令;06:读取的字节个数;01 2C:300;00 00:0;00 1E:30;31 6A:校验码)
以上例子为读取地址从2A开始的3个数的值,分别为300、0和30
同理:
发送指令:01 03 01 00 00 10 45 FA
返回数据:01 03 20 00 05 00 05 00 96 00 05 00 00 00 00 00 C8 00 05 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 4D 9D
以上例子为读取规范一中的所有参数的数值
6.3、写单字
发送指令:01 06 00 2A 00 10 A9 CE
(01:下位机机号;06:读指令,00 2A:起始地址;00 10:写入的数据;A9 CE:校验码)
返回数据:01 06 00 2A 00 10 A9 CE
(返回的数据与发送的指令一样,用于确认数据是否正确)
以上例子为将二级菜单中的A值修改为16(10进制,16进制为10)
同理
发送指令:01 06 01 00 00 20 89 EE
返回数据: 01 06 01 00 00 20 89 EE
以上例子为将规范一中的第一个参数修改为32
6.4、写多字
发送指令:01 10 01 00 00 03 06 00 10 00 00 00 30 23 AB
(01:下位机机号;10:写多数据指令;01 00:起始地址;00 03:写入字个数;06:写入字节个数;00 10:16;00 00:0;00 30:48;23 AB:校验码)
返回数据:01 10 01 00 00 03 81 F4
(00 03:写入的字个数)
将规范一中的参数1、参数2、参数3分别修改为16、0和48
同理
发送指令:01 10 02 00 00 10 20 00 10 00 10 00 96 00 10 00 10 00 10 00 C8 00 10 00 10 00 10 00 10 00 10 00 10 00 10 00 10 00 10 85 3D
返回数据:01 10 02 00 00 10 C0 7D
以上例子为将规范二中的所有参数除参数3和参数7以外全部设置为16,参数3设为150,参数7设为200
6.5、更改状态
注:更改状态需要写位地址,因此操作方法与上述有所区别,先要读取状态字数值,然后将状态字中的指定位修改后再写下去,具体操作方法如下:
例1、以下以修改工作/设定状态为例:
先发送读状态指令:01 03 00 21 00 01 D4 00
返回数据:01 03 02 00 01 79 84,状态字为00 01,将状态转换为二进制得到
位 |
D7 |
D6 |
D5 |
D4 |
D3 |
D2 |
D1 |
D0 |
状态 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
1 |
说明控制器当前处于工作状态、焊接状态
通过发送指令将其修改为设定状态,也就是保持其他数据不变的情况下将D0位设置为0,即
位 |
D7 |
D6 |
D5 |
D4 |
D3 |
D2 |
D1 |
D0 |
状态 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
也就是将状态字的数值更改为00 00
发送指令:01 06 00 21 00 00 D9 C0
返回指令:01 06 00 21 00 00 D9 C0
此时已经将状态更改为设定状态
例2、依然以修改工作/设定状态为例
发送读状态指令:01 03 00 21 00 01 D4 00
返回数据:01 03 02 00 02 39 85,状态为00 02,即
位 |
D7 |
D6 |
D5 |
D4 |
D3 |
D2 |
D1 |
D0 |
状态 |
0 |
0 |
0 |
0 |
0 |
0 |
1 |
0 |
说明控制器当前处于设定状态、调整状态
通过指令将其修改为工作状态,也就是保持其他数据不变的情况下将D0设为1,如下
位 |
D7 |
D6 |
D5 |
D4 |
D3 |
D2 |
D1 |
D0 |
状态 |
0 |
0 |
0 |
0 |
0 |
0 |
1 |
1 |
也就是00 03,将此数据发送到控制器中
发送指令:01 06 00 21 00 03 99 C1
此时控制器就已经处于工作状态、调整状态
例3、计数器清零
当控制器处于设定状态(D0=0),调整状态(D1=0)时,即状态字数据为 00 00,
需要将计数器清零也就是将D3设为1,那么写入的状态字数据为00 08(二进制为1000),如下
位 |
D7 |
D6 |
D5 |
D4 |
D3 |
D2 |
D1 |
D0 |
状态 |
0 |
0 |
0 |
0 |
1 |
0 |
0 |
0 |
发送指令:01 06 00 21 00 08 D8 06即可
综上所述,要更改哪一个位地址的状态,需要先读取这个字地址的数据,更改指定位地址数据后,再将更改后的数值写入到字地址中。
6.6、读取电流值
方式一、控制器存储的电流值必须一次性读取,读取后缓存区会自动清零,因此发送的指令如下:
发送指令:01 03 00 64 00 0A 84 12
(01:下位机机号;03:读指令;00 64:起始地址;00 0A:读取字数,此处为10个字;84 12:校验码)
返回指令:01 03 14 10 64 10 64 10 64 10 64 10 64 10 64 10 64 10 64 10 64 00 00 34 D1
(14:读取的字节数,此处为20个字节;10 64:读取到的规范号加电流值,详见下文)
读取到的规范与电流值需要转换,先将其转换为二进制如下:
高字节 |
低字节 |
||
0001 |
0000 |
0110 |
0100 |
其中高字节的高4位为0001,转换为规范号就是1(二进制01)
余下的数据为0000 0110 0100,转换为电流值就是100(二进制0110 0100)
也可以采用“与”门的方法,不再详细介绍
方式二、控制器存储的电流值必须一次性读取,读取后缓存区会自动清零,因此发送的指令如下:
发送指令:01 03 00 6E 00 14 24 18
返回指令:01 03 28 00 01 00 64 00 01 00 64 00 01 00 64 00 01 00 64 00 01 00 64 00 01 00 64 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 BD EF
(00 01:规范号;00 64:电流值)
6.7、错误提示
当读取的数据量、地址或其他形式的错误时,返回错误代码:
发送指令:01 03 00 64 00 01(原目的是读取电流值中的一个)
返回指令:01 83 03 01 31(返回错误代码03,字节字数错误)
或者
发送指令:01 03 00 64 00 0A 84 11(正确的校验码应该是 84 12)
返回指令:01 83 04 40 F3(返回错误代码04,校验码错误)