memberExclusive

贝克斯消防控制板 Modbus RTU 通讯Protocol V1.0.10

贝克斯消防控制板 Modbus RTU Protocol V1.0.10:RS-485/9600/8N1、单路控制(0x06写register0)和群控(0x10写130byte)两种写法、控制值=百min比+100(查询值直接是百min比)、含现场实测Command与Complete messageexample。member解锁后看All内容与PDF。

ProtocolRTU 版本V1.0 更新2026-07-26

Resources说明

🌐 This page is not yet available in English. Showing the Chinese version. Back to Chinese page.

这是贝克斯消防控制板的开窗器 Modbus communication protocol,版本 V1.0.10。一块主板能带最多 128 个开窗器,主板当slave,你的 PLC 或上位机当主机去轮询和控制。

这个Protocol本身不复杂,但手册写得比较绕——查询返回的numerical value和控制的numerical value是两套体系,而且 PDF 只写了最复杂的”群控”写法(0x10 写 130 byte),现场实际更常用的是”单路开出”写法(0x06 写 1 Registers)。下面我按”你怎么用”的顺序来讲,两种写法都给出,你按需选简单的。

先搞清楚:这是个什么system

一个消防控制主板,下面挂最多 128 个电动开窗器。主板通过 RS-485 总线跟你的上位机Communication。你可以做三件事:

① 查:问主板”你现在什么status?下面 128 个窗都什么位置?”——一次全读回来。

② 控:让主板自己开合,或者让下面某个窗开合。可以一次只控一个,也可以一次控一片。

③ 配:改主板的slave address或Baud rate——偶尔用一次。

就这三件事。下面一个一个说。

接线和对parameter

RS-485 两根线,A 接 A、B 接 B,首尾各并一个 120Ω 电阻。Open the serial port软件填:

parameter Value
Baud rate 9600(默认,也支持 2400)
data bit 8
check digit
stop bit 1
slave address 1(默认,可改 1~200)

填错Baud rate或check digit一个都连不上,这是最基本的。

No.一步:先查一下,Confirm通不通

拿 1 No.主板试,发这条:

01 03 00 00 00 45 84 39

拆开看:01(slave address 1) 03(function code=读) 00 00(从register 0 开始) 00 45(读 69 Registers) 84 39(CRC verification)。

如果主板正常,它会回一长串data,143 个byte。别慌,拆开看就清楚了:

位置 What is it 怎么读
No. 1 byte slave address 应该跟你问的一致,比如 01
No. 2 bytes function code 03
No. 3~4 bytes 主板address currentslave address
No. 5~6 byte Baud rate 0 = 2400,1 = 9600
No. 7~8 bytes 主板工作status 0=正常,1=消防触发,2=雨感触发,3=device故障
No. 9~10 byte 主板Motorstatus 0=初始,1=Open中,2=Close中
No. 11~12 bytes 主板Motor位置 0~100,直接就是百min比(0 Close all,100 fully open)
No. 13~140 byte 1~128 No.窗户status 每窗 1 byte,见下面
最后 2 bytes CRC verification

这里有个绕的地方要先说清楚:你读的是 69 Registers,标准 Modbus 每Registers 2 bytes,所以data area一共 138 bytes。前 5 Registers(10 byte)是主板自己的信息,后面 64 Registers(128 bytes)对应 128 个窗户——每窗占 1 byte,不是 2 bytes。这是这个Protocol最容易搞混的地方,记住就好。

窗户那 128 个byte,每个byte的值含义:

Value 意思
0 Close all(0%)
1~99 开了 1%~99%
100 fully open(100%)
200 这个窗离线了(没接或者线断了)
201 这个窗故障

所以你拿to返回帧后,No. 13 个byte就是 1 No.窗的位置,No. 14 个byte是 2 No.窗,依此类推。读to 200 说明那一路没接窗,读to 201 说明窗有问题。

No.二步:控制窗户开合

控制有两种写法。现场实际most common的是单路控制,只发 8 个byte;PDF 上写的是群控,要发 137 个byte。先讲简单的。

写法 A:单路控制(推荐,most common)

用 0x06 function code写register 0,write value就是目标开度。这种方式一次只控制主板自己接的那个输出,或者控制默认的No.一路输出。

帧format:

[address] 06 00 00 [开度high byte] [开度低byte] [CRC低] [CRC高]

控制值:

你填的值(decimal) hexadecimal 意思
3 0x0003 Stop
100 0x0064 Close all(0%)
130 0x0082 开 30%
150 0x0096 开 50%
200 0x00C8 fully open(100%)

规律:控制值 = 目标百min比 + 100。想开 50% 就填 150(0x0096),想fully open就填 200(0x00C8)。

现场验证过的例子(从用户群聊截图中提取)

slave address 17(0x11),控制开to 50%:

11 06 00 00 00 96 0B 34

byte Value 含义
11 0x11 slave address 17
06 0x06 write single register
00 00 0x0000 register 0
00 96 0x0096 = 150 50%(150 – 100 = 50)
0B 34 CRC verification(已验证correct)

同样address,其他常用值:

动作 complete帧(address 17)
fully open 11 06 00 00 00 C8 8A CC
Close all 11 06 00 00 00 64 8A B1
Stop 11 06 00 00 00 03 CB 5B
开 50% 11 06 00 00 00 96 0B 34

如果你的slave address不是 17,把No.一个byte换成你的address,重新算 CRC 就行。

写法 B:群控(PDF 官方写法)

如果你要一次控制主板 + 下面 128 个窗,用 0x10 function code,写 130 byte count据。帧长这样:

[address] 10 00 00 00 41 82 [D0] [D1] [D2] ... [D128] [00] [CRC低] [CRC高]

前面 7 个byte是帧头(address + function code + registerstart + quantity + byte count),中间 130 个byte是你要下发的控制指令,最后 D129 + CRC 收尾。

130 byte里,D0 控制主板自己,D1~D128 控制对应的 1~128 No.窗,每个byte填什么值:

你填的值(decimal) hexadecimal 意思
3 0x03 Stop(让正在动的窗立刻停)
100 0x64 Close all(0%)
130 0x82 开 30%
150 0x96 开 50%
200 0xC8 fully open(100%)
255 0xFF 不动作(保持现在的status不动)

不想动的窗填 255(0xFF),表示”这扇窗我不管,保持原样”。注意 255 跟 3(Stop)不是一回事:255 是”不动作”,3 是”停下来”,区别在于 3 会中断正在进行的动作,255 完全不理它。

手册里的群控example

2 No.主板自身开 100%,1 No.窗开 30%,2 No.窗开 50%,其余不动:

02 10 00 00 00 41 82 C8 82 96 FF FF ... FF FF 00 1A 88

byte Value 意思
02 0x02 2 No.主板
10 0x10 write multiple registers
00 00 registerstarting address = 0
00 41 写 65 Registers
82 0x82 = 130 databyte count = 130
D0 = C8 0xC8 = 200 主板 100%(200-100=100%)
D1 = 82 0x82 = 130 1 No.窗 30%(130-100=30%)
D2 = 96 0x96 = 150 2 No.窗 50%(150-100=50%)
D3~D128 0xFF = 255 3~128 No.窗不动作
D129 0x00 保留
1A 88 CRC verification

手册在这条example下面有个笔误:注释写”D1: 0x1E”,但message行写的是 0x82。按Rules 30% = 130 = 0x82,message行是对的,0x1E 是写错了。

常用控制帧速查表

单路控制(0x06,most common)

假设你的slave address是 17(0x11),改address就换No.一个byte:

动作 complete帧(含 CRC)
fully open 11 06 00 00 00 C8 8A CC
Close all 11 06 00 00 00 64 8A B1
Stop 11 06 00 00 00 03 CB 5B
开 50% 11 06 00 00 00 96 0B 34

群控(0x10,控主板+128 窗)

... 表示中间没提to的byte全填 0xFF,最后 D129 填 0x00,再补 CRC:

想干啥 帧头 + 前 5 byte count据
1 No.主板自己fully open 01 10 00 00 00 41 82 C8 FF ...
1 No.主板自己Close all 01 10 00 00 00 41 82 64 FF ...
1 No.主板自己Stop 01 10 00 00 00 41 82 03 FF ...
1 No.主板自己开 50% 01 10 00 00 00 41 82 96 FF ...
1 No.All窗户fully open 01 10 00 00 00 41 82 C8 C8 ...
1 No.All窗户Close all 01 10 00 00 00 41 82 64 64 ...
1 No.AllStop 01 10 00 00 00 41 82 03 03 ...

broadcast(address 0)

address 0 是broadcast,总线上所有主板都会执行但不回应。消防联动的时候很有用:

想干啥 帧头 + 前 5 byte count据
Allfully open 00 10 00 00 00 41 82 C8 C8 ...
AllClose all 00 10 00 00 00 41 82 64 64 ...
AllStop 00 10 00 00 00 41 82 03 03 ...

No.三步:改address和Baud rate(偶尔用)

用 0x06 function code,一次写一Registers。改完立即生效,之后你得用新parameter跟它Communication,别改完发现连不上了。

想干啥 complete帧 说明
1 No. → 改address为 8 01 06 01 2C 00 08 48 39 register 300(0x012C) 写 8
1 No. → 改address为 200 01 06 01 2C 00 C8 48 69
2 No. → 改address为 5 02 06 01 2C 00 05 89 CF
1 No. → 改 2400 01 06 01 2D 00 00 18 3F register 301(0x012D) 写 0
1 No. → 改回 9600 01 06 01 2D 00 01 D9 FF 写 1

查询其他主板

把帧首byte换成对应address就行:

主板 查询帧
1 No. 01 03 00 00 00 45 84 39
2 No. 02 03 00 00 00 45 84 0A
3 No. 03 03 00 00 00 45 85 DB
200 No. C8 03 00 00 00 45 95 A0

register地图(complete对照)

整个Protocol就三组registerOperation:

Operation register address function code 说明
查询Allstatus 0(0x0000) 0x03 读 69 Registers,返回主板+128 窗status
配置主板address 300(0x012C) 0x06 写 1~200
配置Baud rate 301(0x012D) 0x06 0=2400,1=9600
单路/群控控制 0(0x0000) 0x06 或 0x10 0x06 控单路,0x10 控主板+128 窗

两套numerical value对照表(贴在屏幕上)

Scenarios numerical value范围 含义 换算
查询返回(窗户status) 0~100 0=Close all,100=fully open 直接就是百min比,不用换算
控制写入(开窗指令) 100~200 100=Close all,200=fully open 控制值 = 目标百min比 + 100

特殊值:控制帧里 3 = Stop,255 = 不动作(只用于群控);查询返回里 200 = 离线,201 = 故障。

debug检查清单

  • Baud rate 9600、8N1——出厂默认,改过的话用新值。
  • slave address默认 1,范围 1~200,0 是broadcast。
  • 控制一扇窗最简单的办法是 0x06 写register 0,不是 0x10 群控。
  • 控制值要加 100:开 30% 填 130,开 100% 填 200。查询值不加,30 就是 30%。
  • 查询返回 143 byte,serial port缓冲区要开够,别截断了。
  • 128 个窗每窗 1 byte,不是 2 bytes。Parse返回帧时No. 13 byte开始就是窗户data。
  • 改address/Baud rate后立即生效,马上用新parameterCommunication。
  • 主板工作status 4 种:正常 / 消防触发 / 雨感触发 / device故障——消防和雨感是自动触发,不是你控的。

Document勘误

PDF No. 5 节example 3,message行写 D1 = 0x82(= 130 → 30%),但下面注释写 D1: 0x1E(= 30)。按指令定义 100~200 = 0%~100%,30% 应该是 130(0x82)。message行correct,注释的 0x1E 是笔误。

点位表 / register表

按address、function code、data type和倍率整理,适合debug、归档和项目交付。

预览模式
后台还没有录入点位表。可以在Edit页粘贴 CSV 后自动生成表格。

交付文件

complete PDF 手册 适合项目归档、客户交付、打印使用
待上传
点位 Excel 台账 适合批valueImport、debug记录、二次整理
待上传
PLC / examplesource code包 配套read、写入、Parseexample
待上传