
版本:V1.1
一、产品简介
W816是一款超小型智能可编程控制器,专为智能家居、商业照明、农业自动化设计。无需网关,支持8路大功率继电器(每路16A),兼容手机APP、语音控制、定时任务,是家庭和商业场景的“全能管家”。
二、核心功能与特点
1. 硬件优势
- 超小体积:仅占4个空开位,轻松装入家庭电箱。
- 大功率负载:每路支持16A阻性负载(如灯具、插座),8A感性负载(如电机)。
- 工业级设计:-20℃~80℃宽温工作,适应复杂环境。
2. 灵活扩展
- 免线拼接:同层导轨安装,多个模块直接拼接扩展。
- 全协议兼容:支持Modbus、TCP/IP、MQTT等协议,对接智能家居平台无压力。
- 无线转有线:支持WiFi/433M/315M转485总线,老旧设备秒变智能。
3. 小白友好
- 拨码设地址:无需软件,拨动开关即可设置设备ID(1~32)。
- 一键恢复:误操作可恢复出厂设置,操作零门槛。
本模块上有4位侧拨开关,出厂地址默认为0,可设置地址为0-15,设置如下图

三、技术参数
项目 | 规格 |
---|---|
工作电压 | DC 12V(可定制12-24V) |
负载能力 | 阻性负载≤16A,感性负载≤8A |
通讯方式 | 485总线(标配)、RJ45网口、WiFi、433M、GPRS |
输入路数 | 8路光电隔离输入(兼容干接点) |
环境温度 | -20℃~80℃ |
尺寸 | 92.5mm × 76.2mm × 60.5mm |
四、快速上手指南
1. 安装与接线
- 固定模块:卡入标准DN35导轨,确保电源关闭。
- 连接负载:将灯具、窗帘电机等接入继电器输出端子(OUT1~OUT8)。
- 接入电源:使用12V适配器供电(正负极勿接反)。
- 联网配置:
- 有线:
Run指示灯状态:上电绿灯闪烁后常亮,与服务器连接成功后冰蓝色。
Rj45指示灯状态:与网络连接成功后绿灯常亮,橙色灯闪烁。

接线拓扑图

接口说明:
1、V=12V正极输入
2、G=12V负极输入
3、A B=485接口
4、① ② ③ ④ ⑤ ⑥ ⑦ ⑧=8组继电器输出
5、RJ45/SMA=网络通讯
6、G 1 2 3 4 5 6 7 8=干接点输入(例如G与1连接触发第一路继电器)
7、RUN=运行指示灯(未连接tcp为绿色 连接tcp为冰蓝色)
五、协议指令详解
私有协议
通讯协议说明
协议基本信息
- 波特率:9600
- 默认地址:
1A CA 27 87 00
(出厂测试默认地址) - 通用地址:
AA AA AA AA AA
(用于特殊操作)
协议格式
协议数据帧由以下部分组成:
- 地址:5 个字节,标识模块地址。
- 指令区:根据操作不同,长度和内容各异。
- 校验和:固定为
0F
功能操作说明
1. 查询模块地址
- 指令格式:
5个字节地址 + 56 56 56 0F
- 功能:查询模块的当前地址。
- 示例:
1A CA 27 87 00 56 56 56 0F
2. 修改地址
- 说明:前 4 个字节固定,第 5 个字节通过拨码开关更改。
- 示例:
1A CA 27 87 XX (XX 为拨码设置的新地址)
3. 查询模块状态
- 指令格式:
5个字节地址 + 86 86 86 0F
- 返回格式:
5个字节地址 + 00 00 00 00 00 00 00 00 0F
(8 个开关状态,00 表示关闭,01 表示打开) - 示例:
查询指令:1A CA 27 87 00 86 86 86 0F
返回示例:1A CA 27 87 00 00 01 00 01 00 01 00 0F (假设开关状态为:关-开-关-开-关-开-关-开)
4. 恢复出厂设置
- 指令格式:
5个字节地址 + 96 96 96 0F
- 功能:擦除 K1-K8 存储区,恢复默认设置。
- 示例:
1A CA 27 87 00 96 96 96 0F
5. 强制设置 K1-K8 为点动模式
- 指令格式:
5个字节地址 + A6 A6 A6 0F
- 说明:
- 默认为长按 5 秒自动切换为翻转模式。
- 设置前需先恢复出厂设置。
- 示例:
1A CA 27 87 00 A6 A6 A6 0F
6. 开启/关闭 K1-K8 输入数据存储功能
- 开启:
- 指令格式:
5个字节地址 + 56 56 56 0F
- LED 表示:闪烁 1 次后保持常亮。
- 关闭:
- 指令格式:
5个字节地址 + 46 46 46 0F
- LED 表示:闪烁 2 次后保持熄灭。
- 示例:
开启:1A CA 27 87 00 56 56 56 0F
关闭:1A CA 27 87 00 46 46 46 0F
7. K1-K8 开/关存储指令
- 指令格式:
- 开启某路:
地址 + XX XX XX XX XX ... XX
(XX 为特定值) - 关闭某路:
地址 + XX XX XX XX XX ... XX
(XX 为特定值) - 具体指令: 操作 开启指令值 关闭指令值 K1 开/关
00
10
K2 开/关20
30
K3 开/关40
50
K4 开/关60
70
K5 开/关80
90
K6 开/关A0
B0
K7 开/关C0
D0
K8 开/关E0
F0
- 示例:
K1 开启:1A CA 27 87 00 00 XX XX XX XX XX 0F
K1 关闭:1A CA 27 87 00 10 XX XX XX XX XX 0F
8. 单路控制
- 指令格式:
- 翻转:
地址 + 00 00 XX 02 0F
(XX 为路数 - 1) - 只开:
地址 + 00 00 XX 01 0F
(XX 为路数 - 1) - 只关:
地址 + 00 00 XX 00 0F
(XX 为路数 - 1) - 示例:
第一路翻转:1A CA 27 87 00 00 00 02 0F
第一路只开:1A CA 27 87 00 00 00 01 0F
第一路只关:1A CA 27 87 00 00 00 00 0F
第二路翻转:1A CA 27 87 00 00 01 02 0F
第二路只开:1A CA 27 87 00 00 01 01 0F
第二路只关:1A CA 27 87 00 00 01 00 0F
第三路翻转:1A CA 27 87 00 00 02 02 0F
第三路只开:1A CA 27 87 00 00 02 01 0F
第三路只关:1A CA 27 87 00 00 02 00 0F
第四路翻转:1A CA 27 87 00 00 03 02 0F
第四路只开:1A CA 27 87 00 00 03 01 0F
第四路只关:1A CA 27 87 00 00 03 00 0F
第五路翻转:1A CA 27 87 00 00 04 02 0F
第五路只开:1A CA 27 87 00 00 04 01 0F
第五路只关:1A CA 27 87 00 00 04 00 0F
第六路翻转:1A CA 27 87 00 00 05 02 0F
第六路只开:1A CA 27 87 00 00 05 01 0F
第六路只关:1A CA 27 87 00 00 05 00 0F
第七路翻转:1A CA 27 87 00 00 06 02 0F
第七路只开:1A CA 27 87 00 00 06 01 0F
第七路只关:1A CA 27 87 00 00 06 00 0F
第八路翻转:1A CA 27 87 00 00 07 02 0F
第八路只开:1A CA 27 87 00 00 07 01 0F
第八路只关:1A CA 27 87 00 00 07 00 0F
9. 全路控制
- 指令格式:
- 1-8 路全开:
地址 + 01 01 77 88 0F
- 1-8 路全关:
地址 + 01 02 77 88 0F
- 示例:
1-8 路全开:1A CA 27 87 00 01 01 77 88 0F
1-8 路全关:1A CA 27 87 00 01 02 77 88 0F
10. 通用全开/全关
- 指令格式:
- 通用全开:
通用地址 + 30 77 88 0F
- 通用全关:
通用地址 + 30 77 88 0F
- 示例:
通用全开:AA AA AA AA AA 30 77 88 0F
通用全关:AA AA AA AA AA 30 77 88 0F
内部协议
1. 指令格式
所有指令均为8字节,格式如下:
[0x55][地址][功能码][数据1][数据2][数据3][数据4][校验和]
- 校验和 = 前7字节相加,取最后两位(如
55+01+32+00+00+00+01=89
)。
波特率 9600,8 个数据位,1 个停止位,无校验位。
上位机发送数据帧格式:
数据头 | 地址 | 功能码 | 数据区 | 校验和 | |||
1 字节0x55 | 1 字节 | 1 字节 | 第 1 字节 | 第 2 字节 | 第 3 字节 | 第 4 字节 | 1 字节,将前面的 7 个字节相加,取后 8 位得到 |
上位机发送数据帧说明:
功能码 | 说明 | 数据区内容(4 个字节) |
0x10 | 读取状态 | 0x00,0x00,0x00,0x00 |
0x11 | 断开某路 | 第 4 个字节代表断开第几路继电器,前 3 个字节为 0。 |
0x12 | 吸合某路 | 第 4 个字节代表吸合第几路继电器,其他为 0。 |
0x13 | 命令执行 | 数据区域共 4 个字节,每个字节 8 位,共 32 位。最多可代表 32 路开关量的状态。最后一个字节的第 0 位代表第 1 路,第 1 个字节的最高位代表最后一路。 |
0x14 | 组断开 | 数据区域共 4 个字节,每个字节 8 位,共 32 位。最多代表对 32路的操作,1 代表断开 0 代表保持原来状态。最后 1 个字节的第0 位(BIT0)代表第 1 路,依次类推。 |
0x15 | 组吸合 | 数据区域共 4 个字节,每个字节 8 位,共 32 位。最多代表对 32路的操作,1 代表吸合 0 代表保持原来状态。最后 1 个字节的第0 位(BIT0)代表第 1 路,依次类推。 |
0x16 | 组翻转 | 数据区域共 4 个字节,每个字节 8 位,共 32 位。最多代表对 32路的操作,1 代表翻转 0 代表保持原来状态。最后 1 个字节的第0 位(BIT0)代表第 1 路,依次类推。 |
0x20 | 翻转某路 | 数据中的第 4 个字节代表翻转第几路继电器,其他为 0。 |
0x21 | 点动闭合 | 数据的第 1、2、3 字节代表时间(高位字节在前,单位 ms), 第 4 字节代表第几路 |
0x22 | 点动断开 | 数据的第 1、2、3 字节代表时间(高位字节在前,单位 ms),第 4 字节代表第几路 |
0x30 | 翻转某路 | 参考功能码 0x20,但是下位机不返回数据,指令可以连续发送。 |
0x31 | 断开某路 | 参考功能码 0x11,但是下位机不返回数据,指令可以连续发送。 |
0x32 | 吸合某路 | 参考功能码 0x12,但是下位机不返回数据,指令可以连续发送。 |
0x33 | 命令执行 | 参考功能码 0x13,但是下位机不返回数据,指令可以连续发送。 |
0x34 | 组断开 | 参考功能码 0x14,但是下位机不返回数据,指令可以连续发送。 |
0x35 | 组吸合 | 参考功能码 0x15,但是下位机不返回数据,指令可以连续发送。 |
0x36 | 组翻转 | 参考功能码 0x16,但是下位机不返回数据,指令可以连续发送。 |
0x37 | 点动闭合 | 参考功能码 0x21,但是下位机不返回数据,指令可以连续发送。 |
0x38 | 点动断开 | 参考功能码 0x22,但是下位机不返回数据,指令可以连续发送。 |
0x40 | 读地址 | 0x00,0x00,0x00,0x00注意事项,使用广播地址 245 来读取模块地址。 |
0x41 | 写地址 | 数据中的第 4 个字节代表模块的新地址。注意事项:上电 10 秒钟之内允许写地址,如果有拨码开关,需要将拨码开关拨到 0 的位置。 |
0x70 | 读变量 | 前 3 个字节为 0x00 0x00 0x00。第 4 个字节代表变量的序号 |
0x71 | 写变量 | 前 3 个字节代表变量的值,高位字节在前。第 4 个字节代表变量的序号 |
下位机返回数据帧格式:
数据头 | 地址 | 功能码 | 数据区 | 校验和 | |||
1 字节0x22 | 1 字节 | 1 字节 | 第 1 字节 | 第 2 字节 | 第 3 字节 | 第 4 字节 | 1 字节,将前面的7 个字节相加 |
下位机返回数据帧说明:
功能码 | 功能码说明 | 数据区内容(4 个字节) |
0x10 | 读取状态 | 继电器输出板或者输入检测板:数据区域 4 个字节,每个字节 8 位,共 32 位。代表 32 路的状态。最后 1 个字节的第 0 位代表第 1 路,依次类推。 输入输出板:第 1、2 个字节代表输入的状态,第 3、4个字节代表输出的状态。 |
0x11 | 断开某一路 | |
0x12 | 吸合某一路 | |
0x13 | 命令执行 | |
0x14 | 组断开 | |
0x15 | 组吸合 | |
0x16 | 组翻转 | |
0x40 | 返回模块地址 | |
0x70 | 读内部变量 | 前 3 个字节代表内部变量的值,高位字节在前。第 4 个字节代表内部变量是序号注意事项:此功能码只适用于支持内核可编程的模块 |
0x71 | 写内部变量 |
广播地址说明:
个别情况下,需要快速的打开或者关闭总线上所有继电器,这个时候使用广播地址, 广播地址的值为 245,也就是说,向地址 245 发送的指令,总线上的每一个地址都会执行,关闭广播地址 245 的继电器,也就是关闭总线上的所有继电器,同样的道
理,打开广播地址 245 的继电器,也就是打开总线上所有的继电器。
0x30-0x38 功能码为指令连发功能码,因为这些功能码没有回码,所以可以连续发送,因此可以更快速的发送指令。为了让指令更快速的发送,引入了数据连发指令。
很多情况下,用户不需要查询或知道继电器板的当前状态,只需要按照自己的要求来打开或者关闭某几路,这个时候使用无回码指令就会很方便。
无回码指令表(以地址 1 为例,指令可连续发送):
吸合第 1 路 55 01 32 00 00 00 01 89 | 断开第 1 路 55 01 31 00 00 00 01 88 |
吸合第 2 路 55 01 32 00 00 00 02 8A | 断开第 2 路 55 01 31 00 00 00 02 89 |
吸合第 3 路 55 01 32 00 00 00 03 8B | 断开第 3 路 55 01 31 00 00 00 03 8A |
吸合第 4 路 55 01 32 00 00 00 04 8C | 断开第 4 路 55 01 31 00 00 00 04 8B |
吸合第 5 路 55 01 32 00 00 00 05 8D | 断开第 5 路 55 01 31 00 00 00 05 8C |
吸合第 6 路 55 01 32 00 00 00 06 8E | 断开第 6 路 55 01 31 00 00 00 06 8D |
吸合第 7 路 55 01 32 00 00 00 07 8F | 断开第 7 路 55 01 31 00 00 00 07 8E |
吸合第 8 路 55 01 32 00 00 00 08 90 | 断开第 8 路 55 01 31 00 00 00 08 8F |
吸合第 9 路 55 01 32 00 00 00 09 91 | 断开第 9 路 55 01 31 00 00 00 09 90 |
吸合第 10 路 55 01 32 00 00 00 0A 92 | 断开第 10 路 55 01 31 00 00 00 0A 91 |
吸合第 11 路 55 01 32 00 00 00 0B 93 | 断开第 11 路 55 01 31 00 00 00 0B 92 |
吸合第 12 路 55 01 32 00 00 00 0C 94 | 断开第 12 路 55 01 31 00 00 00 0C 93 |
吸合第 13 路 55 01 32 00 00 00 0D 95 | 断开第 13 路 55 01 31 00 00 00 0D 94 |
吸合第 14 路 55 01 32 00 00 00 0E 96 | 断开第 14 路 55 01 31 00 00 00 0E 95 |
吸合第 15 路 55 01 32 00 00 00 0F 97 | 断开第 15 路 55 01 31 00 00 00 0F 96 |
吸合第 16 路 55 01 32 00 00 00 10 98 | 断开第 16 路 55 01 31 00 00 00 10 97 |
吸合第 17 路 55 01 32 00 00 00 11 99 | 断开第 17 路 55 01 31 00 00 00 11 98 |
吸合第 18 路 55 01 32 00 00 00 12 9A | 断开第 18 路 55 01 31 00 00 00 12 99 |
吸合第 19 路 55 01 32 00 00 00 13 9B | 断开第 19 路 55 01 31 00 00 00 13 9A |
吸合第 20 路 55 01 32 00 00 00 14 9C | 断开第 20 路 55 01 31 00 00 00 14 9B |
吸合第 21 路 55 01 32 00 00 00 15 9D | 断开第 21 路 55 01 31 00 00 00 15 9C |
吸合第 22 路 55 01 32 00 00 00 16 9E | 断开第 22 路 55 01 31 00 00 00 16 9D |
吸合第 23 路 55 01 32 00 00 00 17 9F | 断开第 23 路 55 01 31 00 00 00 17 9E |
吸合第 24 路 55 01 32 00 00 00 18 A0 | 断开第 24 路 55 01 31 00 00 00 18 9F |
吸合第 25 路 55 01 32 00 00 00 19 A1 | 断开第 25 路 55 01 31 00 00 00 19 A0 |
吸合第 26 路 55 01 32 00 00 00 1A A2 | 断开第 26 路 55 01 31 00 00 00 1A A1 |
吸合第 27 路 55 01 32 00 00 00 1B A3 | 断开第 27 路 55 01 31 00 00 00 1B A2 |
吸合第 28 路 55 01 32 00 00 00 1C A4 | 断开第 28 路 55 01 31 00 00 00 1C A3 |
吸合第 29 路 55 01 32 00 00 00 1D A5 | 断开第 29 路 55 01 31 00 00 00 1D A4 |
吸合第 30 路 55 01 32 00 00 00 1E A6 | 断开第 30 路 55 01 31 00 00 00 1E A5 |
吸合第 31 路 55 01 32 00 00 00 1F A7 | 断开第 31 路 55 01 31 00 00 00 1F A6 |
吸合第 32 路 55 01 32 00 00 00 20 A8 | 断开第 32 路 55 01 31 00 00 00 20 A7 |
吸合全部 55 01 33 FF FF FF FF 85 | 断开全部 55 01 33 00 00 00 00 89 |
好的,我将为每个功能码提供一个具体的示例数据帧,以帮助更好地理解协议的使用。以下是详细的功能码示例:
上位机功能码示例
0x10 - 读取状态
- 功能描述:读取继电器的状态。
- 数据区:
0x00, 0x00, 0x00, 0x00
- 示例数据帧:
数据头:0x55
地址:0x01
功能码:0x10
数据区:0x00, 0x00, 0x00, 0x00
校验和:0x55 + 0x01 + 0x10 + 0x00 + 0x00 + 0x00 + 0x00 = 0x66
完整数据帧:55 01 10 00 00 00 00 66
0x11 - 断开某路
- 功能描述:断开指定的继电器路。
- 数据区:前 3 字节为
0x00
,第 4 字节为断开的继电器路数(例如,断开第 3 路)。 - 示例数据帧:
数据头:0x55
地址:0x01
功能码:0x11
数据区:0x00, 0x00, 0x00, 0x03
校验和:0x55 + 0x01 + 0x11 + 0x00 + 0x00 + 0x00 + 0x03 = 0x6A
完整数据帧:55 01 11 00 00 00 03 6A
0x12 - 吸合某路
- 功能描述:吸合指定的继电器路。
- 数据区:前 3 字节为
0x00
,第 4 字节为吸合的继电器路数(例如,吸合第 5 路)。 - 示例数据帧:
数据头:0x55
地址:0x01
功能码:0x12
数据区:0x00, 0x00, 0x00, 0x05
校验和:0x55 + 0x01 + 0x12 + 0x00 + 0x00 + 0x00 + 0x05 = 0x6D
完整数据帧:55 01 12 00 00 00 05 6D
0x13 - 命令执行
- 功能描述:控制多路继电器的状态。
- 数据区:4 字节,每字节 8 位,共 32 位,代表 32 路继电器的状态(1 表示吸合,0 表示断开)。
- 示例数据帧:
数据头:0x55
地址:0x01
功能码:0x13
数据区:0x00, 0x00, 0x00, 0x0F (吸合第 1-4 路)
校验和:0x55 + 0x01 + 0x13 + 0x00 + 0x00 + 0x00 + 0x0F = 0x73
完整数据帧:55 01 13 00 00 00 0F 73
0x14 - 组断开
- 功能描述:断开指定的多路继电器。
- 数据区:4 字节,每字节 8 位,共 32 位,1 表示断开,0 表示保持原状态。
- 示例数据帧:
数据头:0x55
地址:0x01
功能码:0x14
数据区:0x00, 0x00, 0x00, 0x01 (断开第 1 路)
校验和:0x55 + 0x01 + 0x14 + 0x00 + 0x00 + 0x00 + 0x01 = 0x6B
完整数据帧:55 01 14 00 00 00 01 6B
0x15 - 组吸合
- 功能描述:吸合指定的多路继电器。
- 数据区:4 字节,每字节 8 位,共 32 位,1 表示吸合,0 表示保持原状态。
- 示例数据帧:
数据头:0x55
地址:0x01
功能码:0x15
数据区:0x00, 0x00, 0x00, 0x02 (吸合第 2 路)
校验和:0x55 + 0x01 + 0x15 + 0x00 + 0x00 + 0x00 + 0x02 = 0x6C
完整数据帧:55 01 15 00 00 00 02 6C
0x16 - 组翻转
- 功能描述:翻转指定的多路继电器。
- 数据区:4 字节,每字节 8 位,共 32 位,1 表示翻转,0 表示保持原状态。
- 示例数据帧:
数据头:0x55
地址:0x01
功能码:0x16
数据区:0x00, 0x00, 0x00, 0x04 (翻转第 3 路)
校验和:0x55 + 0x01 + 0x16 + 0x00 + 0x00 + 0x00 + 0x04 = 0x6E
完整数据帧:55 01 16 00 00 00 04 6E
0x20 - 翻转某路
- 功能描述:翻转指定的继电器路。
- 数据区:前 3 字节为
0x00
,第 4 字节为翻转的继电器路数(例如,翻转第 7 路)。 - 示例数据帧:
数据头:0x55
地址:0x01
功能码:0x20
数据区:0x00, 0x00, 0x00, 0x07
校验和:0x55 + 0x01 + 0x20 + 0x00 + 0x00 + 0x00 + 0x07 = 0x7D
完整数据帧:55 01 20 00 00 00 07 7D
0x21 - 点动闭合
- 功能描述:点动闭合指定的继电器路。
- 数据区:前 3 字节为时间(单位 ms,高位在前),第 4 字节为继电器路数(例如,闭合第 6 路,时间 1000ms)。
- 示例数据帧:
数据头:0x55
地址:0x01
功能码:0x21
数据区:0x00, 0x03, 0xE8, 0x06 (1000ms,第 6 路)
校验和:0x55 + 0x01 + 0x21 + 0x00 + 0x03 + 0xE8 + 0x06 = 0x88
完整数据帧:55 01 21 00 03 E8 06 88
0x22 - 点动断开
- 功能描述:点动断开指定的继电器路。
- 数据区:前 3 字节为时间(单位 ms,高位在前),第 4 字节为继电器路数(例如,断开第 9 路,时间 500ms)。
- 示例数据帧:
数据头:0x55
地址:0x01
功能码:0x22
数据区:0x00, 0x01, 0xF4, 0x09 (500ms,第 9 路)
校验和:0x55 + 0x01 + 0x22 + 0x00 + 0x01 + 0xF4 + 0x09 = 0x7B
完整数据帧:55 01 22 00 01 F4 09 7B
0x30 - 翻转某路(连发)
- 功能描述:翻转指定的继电器路,无返回数据。
- 数据区:前 3 字节为
0x00
,第 4 字节为翻转的继电器路数(例如,翻转第 12 路)。 - 示例数据帧:
数据头:0x55
地址:0x01
功能码:0x30
数据区:0x00, 0x00, 0x00, 0x0C
校验和:0x55 + 0x01 + 0x30 + 0x00 + 0x00 + 0x00 + 0x0C = 0x8E
完整数据帧:55 01 30 00 00 00 0C 8E
0x31 - 断开某路(连发)
- 功能描述:断开指定的继电器路,无返回数据。
- 数据区:前 3 字节为
0x00
,第 4 字节为断开的继电器路数(例如,断开第 15 路)。 - 示例数据帧:
数据头:0x55
地址:0x01
功能码:0x31
数据区:0x00, 0x00, 0x00, 0x0F
校验和:0x55 + 0x01 + 0x31 + 0x00 + 0x00 + 0x00 + 0x0F = 0x91
完整数据帧:55 01 31 00 00 00 0F 91
0x32 - 吸合某路(连发)
- 功能描述:吸合指定的继电器路,无返回数据。
- 数据区:前 3 字节为
0x00
,第 4 字节为吸合的继电器路数(例如,吸合第 20 路)。 - 示例数据帧:
数据头:0x55
地址:0x01
功能码:0x32
数据区:0x00, 0x00, 0x00, 0x14
校验和:0x55 + 0x01 + 0x32 + 0x00 + 0x00 + 0x00 + 0x14 = 0x9C
完整数据帧:55 01 32 00 00 00 14 9C
0x33 - 命令执行(连发)
- 功能描述:控制多路继电器的状态,无返回数据。
- 数据区:4 字节,每字节 8 位,共 32 位,代表 32 路继电器的状态(1 表示吸合,0 表示断开)。
- 示例数据帧:
数据头:0x55
地址:0x01
功能码:0x33
数据区:0x00, 0x00, 0x00, 0x1F (吸合第 1-5 路)
校验和:0x55 + 0x01 + 0x33 + 0x00 + 0x00 + 0x00 + 0x1F = 0xA3
完整数据帧:55 01 33 00 00 00 1F A3
0x34 - 组断开(连发)
- 功能描述:断开指定的多路继电器,无返回数据。
- 数据区:4 字节,每字节 8 位,共 32 位,1 表示断开,0 表示保持原状态。
- 示例数据帧:
数据头:0x55
地址:0x01
功能码:0x34
数据区:0x00, 0x00, 0x00, 0x08 (断开第 4 路)
校验和:0x55 + 0x01 + 0x34 + 0x00 + 0x00 + 0x00 + 0x08 = 0x98
完整数据帧:55 01 34 00 00 00 08 98
0x35 - 组吸合(连发)
- 功能描述:吸合指定的多路继电器,无返回数据。
- 数据区:4 字节,每字节 8 位,共 32 位,1 表示吸合,0 表示保持原状态。
- 示例数据帧:
数据头:0x55
地址:0x01
功能码:0x35
数据区:0x00, 0x00, 0x00, 0x10 (吸合第 5 路)
校验和:0x55 + 0x01 + 0x35 + 0x00 + 0x00 + 0x00 + 0x10 = 0x9B
完整数据帧:55 01 35 00 00 00 10 9B
0x36 - 组翻转(连发)
- 功能描述:翻转指定的多路继电器,无返回数据。
- 数据区:4 字节,每字节 8 位,共 32 位,1 表示翻转,0 表示保持原状态。
- 示例数据帧:
数据头:0x55
地址:0x01
功能码:0x36
数据区:0x00, 0x00, 0x00, 0x20 (翻转第 6 路)
校验和:0x55 + 0x01 + 0x36 + 0x00 + 0x0 +0 0x00 + 0x20 = 0xA2
完整数据帧:55 01 36 00 00 00 20 A2
0x37 - 点动闭合(连发)
- 功能描述:点动闭合指定的继电器路,无返回数据。
- 数据区:前 3 字节为时间(单位 ms,高位在前),第 4 字节为继电器路数(例如,闭合第 8 路,时间 2000ms)。
- 示例数据帧:
数据头:0x55
地址:0x01
功能码:0x37
数据区:0x00, 0x07, 0xD0, 0x08 (2000ms,第 8 路)
校验和:0x55 + 0x01 + 0x37 + 0x00 + 0x07 + 0xD0 + 0x08 = 0xA8
完整数据帧:55 01 37 00 07 D0 08 A8
0x38 - 点动断开(连发)
- 功能描述:点动断开指定的继电器路,无返回数据。
- 数据区:前 3 字节为时间(单位 ms,高位在前),第 4 字节为继电器路数(例如,断开第 16 路,时间 1500ms)。
- 示例数据帧:
数据头:0x55
地址:0x01
功能码:0x38
数据区:0x00, 0x05, 0xDC, 0x10 (1500ms,第 16 路)
校验和:0x55 + 0x01 + 0x38 + 0x00 + 0x05 + 0xDC + 0x10 = 0xB5
完整数据帧:55 01 38 00 05 DC 10 B5
0x40 - 读地址
- 功能描述:读取模块地址。
- 数据区:
0x00, 0x00, 0x00, 0x00
- 示例数据帧:
数据头:0x55
地址:0xF5 (广播地址 245)
功能码:0x40
数据区:0x00, 0x00, 0x00, 0x00
校验和:0x55 + 0xF5 + 0x40 + 0x00 + 0x00 + 0x00 + 0x00 = 0x8F
完整数据帧:55 F5 40 00 00 00 00 8F
0x41 - 写地址
- 功能描述:写入模块的新地址。
- 数据区:前 3 字节为
0x00
,第 4 字节为新地址(例如,新地址为 0x02)。 - 示例数据帧:
数据头:0x55
地址:0x01
功能码:0x41
数据区:0x00, 0x00, 0x00, 0x02
校验和:0x55 + 0x01 + 0x41 + 0x00 + 0x00 + 0x00 + 0x02 = 0x9A
完整数据帧:55 01 41 00 00 00 02 9A
0x70 - 读变量
- 功能描述:读取内部变量。
- 数据区:前 3 字节为
0x00
,第 4 字节为变量序号(例如,读取序号为 1 的变量)。 - 示例数据帧:
数据头:0x55
地址:0x01
功能码:0x70
数据区:0x00, 0x00, 0x00, 0x01
校验和:0x55 + 0x01 + 0x70 + 0x00 + 0x00 + 0x00 + 0x01 = 0xC7
完整数据帧:55 01 70 00 00 00 01 C7
0x71 - 写变量
- 功能描述:写入内部变量。
- 数据区:前 3 字节为变量值(高位在前),第 4 字节为变量序号(例如,写入序号为 2 的变量,值为 0x123456)。
- 示例数据帧:
数据头:0x55
地址:0x01
功能码:0x71
数据区:0x12, 0x34, 0x56, 0x02
校验和:0x55 + 0x01 + 0x71 + 0x12 + 0x34 + 0x56 + 0x02 = 0xA1
完整数据帧:55 01 71 12 34 56 02 A1
下位机返回功能码示例
0x10 - 读取状态
- 功能描述:返回继电器的状态。
- 数据区:4 字节,每字节 8 位,共 32 位,代表 32 路继电器的状态(1 表示吸合,0 表示断开)。
- 示例数据帧:
数据头:0x22
地址:0x01
功能码:0x10
数据区:0x00, 0x00, 0x00, 0x0F (第 1-4 路吸合,其余断开)
校验和:0x22 + 0x01 + 0x10 + 0x00 + 0x00 + 0x00 + 0x0F = 0x42
完整数据帧:22 01 10 00 00 00 0F 42
0x40 - 返回模块地址
- 功能描述:返回模块的当前地址。
- 数据区:4 字节,返回模块地址(例如,地址为 0x03)。
- 示例数据帧:
数据头:0x22
地址:0x03
功能码:0x40
数据区:0x00, 0x00, 0x00, 0x03
校验和:0x22 + 0x03 + 0x40 + 0x00 + 0x00 + 0x00 + 0x03 = 0x68
完整数据帧:22 03 40 00 00 00 03 68
0x70 - 读内部变量
- 功能描述:返回内部变量的值。
- 数据区:前 3 字节为变量值(高位在前),第 4 字节为变量序号(例如,序号为 1 的变量值为 0x123456)。
- 示例数据帧:
数据头:0x22
地址:0x01
功能码:0x70
数据区:0x12, 0x34, 0x56, 0x01
校验和:0x22 + 0x01 + 0x70 + 0x12 + 0x34 + 0x56 + 0x01 = 0x8C
完整数据帧:22 01 70 12 34 56 01 8C
总结
以上是每个功能码的示例数据帧,涵盖了上位机发送和下位机返回的所有场景。每个示例都包含了完整的数据帧结构和校验和计算,确保协议的正确性和完整性。如果需要进一步的解释或修改,请随时告诉我!
进阶玩法
内核与功能模块使用说明
一、内核简介
内核是用户操作模块的核心工具,用于实现以下功能:
- 输入与输出的映射关系。
- 收发字符串或其他数据。
- 使用定时器进行延迟或其他定时处理。
- 内部变量的格式转换。
- 其他高级功能。
二、外部输入
外部输入功能允许模块检测外部事件,支持以下触发方式:
- 上升沿触发(断开到闭合)。
- 下降沿触发(闭合到断开)。
- 状态触发(持续条件满足)。
- 单击或双击触发(需设置时间常数,默认500ms)。
三、输出状态变化
输出状态变化涉及以下内容:
- 指令操作面板:输出LED指示灯状态。
- 继电器模块:控制继电器的开/关状态。
- MOS输出模块:控制MOS管的开关状态。
- 用户可以控制单路或多路的打开、关闭、翻转,或点动操作。
四、中间继电器
中间继电器是虚拟的继电器,用于:
- 程序控制其开/关状态。
- 检测其上升沿或下降沿。
- 将外部连续事件转化为内部状态变化事件。
五、内部变量
内部变量是有符号变量,用于记录中间数据,支持以下操作:
- 作为输入:与数字比较(大于、小于、等于),用于条件判断。
- 作为输出:存储定时器、时间、日期、继电器状态等信息。
- 运算功能:支持加法运算,可作为计数器使用。
六、定时器
- 简介:定时器值为正整数,默认为非0减1定时器。
- 用法:
- 设置定时器初值(如100)。
- 使用定时器值触发其他操作(如定时器等于80时触发)。
- 示例:每隔100ms,第一路输出翻转一次,并通过数据口1发送字符串“123”。
七、函数使用说明
- 功能:模块包含100个函数,用于增强程序易读性、节省空间、实现多级判断。
- 调用方法:
- 在输出选项中选择“函数调用”。
- 参数1选择“函数调用”,参数2选择具体函数。
- 意义:
- 提高主程序的易读性。
- 避免重复代码,节省空间。
八、函数使用方法
- 编辑:通过菜单-设置-函数列表启动函数编辑器。
- 存储:函数可单独存储为
.hanshu
文件,支持导入到主程序或函数界面。 - 调用示例:
- 输入断开到闭合时,函数执行一次。
- 函数每隔一秒钟执行一次。
九、系统简单设置
- 操作联机继电器数据口:默认数据口1。
- 操作联机继电器返回码:可选择带返回码或不带返回码。
- 擦除存储区:擦除内部变量存储区或数组存储区的ROM。
十、系统特殊设置
- 点动操作时间设置:设置点动继电器的时间(单位:ms)。
- 临时数据接收时间间隔:默认10ms,用于区分数据包。
- 输入连击和长按时间常数:默认500ms,用于判断双击或连击。
- 程序运行间隔:默认10ms,可调整。
十一、临时数据包处理
- 功能:接收的临时数据包存储在缓冲区,可进行处理。
- 应用:兼容市面上的485、串口或TTL通讯协议,实现协议转发。
十二、数组简单处理
- 操作:
- 加上其他数组:将一个数组添加到另一个数组尾部。
- 赋值为其他数组:替换数组内容。
- 删除字节:删除指定序号的字节。
- 添加变量字节:在数组最前面添加字节。
十三、内部变量的使用方法
- 功能:
- 将系统变量赋值给内部变量。
- 将内部变量值赋值给其他变量。
- 支持位操作,读写某一位的值。
- 存储:支持将内部变量保存到RAM或非易失性存储区(需硬件支持)。
十四、定时处理
- 功能:通过时钟芯片实现定时任务。
- 示例:
- 每天早上和下午定时打开第一路继电器。
- 每天8点到12点之间保持第一路闭合。
十五、格式转换
- 内部变量与数组转换:
- 十进制字符串与内部变量相互转换。
- 数组与内部变量相互转换(高位在前,低位在后)。
- 示例:
- 内部变量123转换为数组
0x31 0x32 0x33
。 - 数组
0x01 0x02
转换为内部变量值33。
十六、实际应用 - 提取临时数据中的变量
- 功能:接收临时数据后,提取特定字节并转换为内部变量。
- 示例:
- 判断数据包字节数和前两个字节值。
- 提取第3到第6字节的值并转换为内部变量1。
十七、实际应用 - 变量按固定格式发送
- 功能:将内部变量转换为数组,并添加头尾字节后发送。
- 示例:
- 将内部变量1转换为数组,添加
22 01 10
头字节和校验字节后发送。
十八、实际应用 - 协议转换器
- 功能:将不同厂家的协议对接,实现设备间的通信。
- 前提:厂家通讯协议开放。
十九、实际应用 - 电子协议举例
- 功能:接收数据后,判断字节和校验成功后执行相应操作。
- 示例:
- 判断前两个字节和校验成功后,执行函数1。
- 函数1内部继续判断其他字节,执行相应操作。
六、注意事项
- 安全警告:
- 严禁带电接线!
- 感性负载(如电机)需额外加装保护电路。
- 网络问题:
- 若指示灯不亮,检查电源和网线。
- 勿修改默认网络配置,否则需联系技术支持复位。
- 协议调试:
- 推荐工具:USB转485模块 + 串口调试助手。
- 指令无效?检查地址和校验和是否正确!
七、技术支持
- 客服电话:18801054468