
简介这份消防文档面向消防系统集成商、现场工程师与设备维护人员整理了多品牌消防主机的通信协议集合用于解决不同主机与部件之间的地址映射、波特率匹配及协议兼容问题。包内共1个PDF文件约129KB内容以版本更新日志形式记录了各主机协议的增补与修订涵盖部件地址映射方法0至6、波特率设定、地址重映射、ACK应答机制及通讯故障监控等关键规则。文档中可查到杭州清华、营口山鹰、青岛鼎信、西门子FS720、安舍IQ8、NOTIFIER N-CRT等主机的具体协议条目并针对探测器与模块地址重叠、数据包中0xEB字符处理、英文版本仅报火警等场景给出了修正说明。目前已有2652人学习下载适合需要对接多种消防主机、排查通信异常或进行协议适配的读者作为案头速查与集成参考。1. 消防主机协议列表拆解128条协议、6种地址映射这份文档到底怎么用手上拿到一份《消防主机协议列表_V1.0_20171116.pdf》128条协议条目覆盖海湾、松江、西门子、能美、NOTIFIER、赋安、安舍、泰和安等几十个品牌。很多做消防联网、城市远程监控、智慧消防平台对接的工程师第一次翻这份表会有点懵——协议名、串口参数、通讯故障标志、地址映射方法全挤在一张表里看着像通讯录实际是一份对接字典。它解决的核心问题只有一个不同品牌消防主机的报警数据怎么统一成监控中心能识别的格式。前端是各家私有协议后端是平台统一数据模型中间靠这份列表里的串口参数和地址映射规则做翻译。适合消防系统集成商、物联网网关开发者、远程监控平台运维以及需要把老主机接入新平台的现场调试人员。下面按“先看懂表、再动手配、最后避坑”的顺序拆一遍。2. 协议表四列定生死串口参数、通讯故障、地址映射、二次映射2.1 串口通讯参数9600,none,8,1 不是万能默认值表里每条协议都带一串参数格式是“波特率,校验位,数据位,停止位”。翻一遍会发现9600,none,8,1 出现频率最高但绝不是唯一。西门子 PDS(BC80) 跑 115200安舍 IQ8 只有 600松下 EBL8000 是 4800,even,8,2能美 R21 用 odd 校验SIMPLEX 用 even 校验。现场对接时串口参数对不上表现是收不到任何数据或者全是乱码。常见做法是先用 USB 转 485/232 工具接主机通讯口用串口助手按表里参数试收。如果表里写 9600,none,8,1实际收出来是乱码先别怀疑协议解析先确认校验位和停止位有没有抄错。# Linux 下用 stty 配置串口参数以 9600,none,8,1 为例 stty -F /dev/ttyUSB0 9600 cs8 -cstopb -parenb # 参数说明 # 9600 波特率 # cs8 数据位 8 位 # -cstopb 停止位 1 位- 表示 1 位 表示 2 位 # -parenb 无校验-parenb 无校验parenb 偶校验parenb -parodd 奇校验这段命令是把串口设备初始化成表里最常见的 9600,none,8,1。如果协议要求 even 校验把-parenb换成parenb要求 odd 校验换成parenb -parodd要求 2 位停止位把-cstopb换成cstopb。松下 EBL8000 那条就是 4800,even,8,2四个参数全不一样抄错一个就收不到完整帧。2.2 通讯故障监控NL 后缀和“是/空”的区别表里有一列叫“通讯故障”填“是”表示传输装置会监控与消防主机之间的通讯链路链路断了会上报故障留空表示不监控。另外协议名带 NL 后缀的比如“6-3.利达LD128E NL”“8-4.能美_R21 NL”“22-2.营口山鹰转换器NL”也是不监控通讯故障。这个标志直接影响平台告警逻辑。如果现场主机本身不支持通讯故障检测或者用了转换器导致链路状态不可靠强行开启监控会频繁误报“主机离线”。文档更新记录里有一条V1.0_170509 修改营口山鹰转换器协议不再监控与消防主机通讯故障协议名改为“22-2.营口山鹰转换器NL”。这就是典型的现场反馈驱动协议调整。配置时怎么选主机直连、链路稳定选“是”经过转换器、光纤收发器、或者主机本身没有链路检测机制选 NL 版本。不确定就先按 NL 配跑一段时间看平台有没有漏报真实断线再决定要不要开监控。2.3 地址映射六种方法区号、回路号、设备号怎么摆地址映射是这份文档最核心的技术点。传输装置上传的部件地址是 4 个字节用户消防系统的设备地址也是 4 个字节映射方法决定这 4 个字节怎么对应。表 1 列了方法 0 到方法 6实际常用的是 0、1、2、3、4、6。方法 0 最直接BYTE0 区号BYTE1 回路号BYTE2 位号BYTE3 设备号。区号和设备号都是 10 进制万位到个位回路号范围 0~65000。海湾 5000、北大青鸟、利达 LD128E、泰和安 TX3000 都用这个方法。方法 1 多了一个主机号BYTE0 区号BYTE1 回路号BYTE2 位号BYTE3 设备号但区号里嵌了主机号0~64和回路号0~999。松江系列、SIMPLEX 4100、赋安 FS5050、安舍 FAP9800 用这个方法。方法 2 的主机号范围扩到 0~640回路号缩到 0~99NOTIFIER 3030、能美 R23、泛海三江 PRT01 用这个。方法 3 最特殊BYTE0 到 BYTE3 直接对应设备号的 4 个字节不分区位号。海湾 INET01 卡、西门子 FC18/FS720/FC720 系列用这个方法针对的是设备号本身就是 4 字节的系统。方法 4 对应“栋/区/层/设备号”编址赋安 5058 用这个。方法 6 对应“主机号/回路号/设备号”编址MINIMAX 报警主机用这个。# 地址映射方法 0 的解析示例从 4 字节部件地址还原区号、回路号、位号、设备号 def parse_addr_method0(byte0, byte1, byte2, byte3): 方法 0BYTE0 区号BYTE1 回路号BYTE2 位号BYTE3 设备号 每个字段都是 10 进制万位到个位 zone byte0 # 区号范围 0~65000 loop byte1 # 回路号范围 0~65000 position byte2 # 位号 device byte3 # 设备号范围 0~65000 return { zone: zone, loop: loop, position: position, device: device } # 调用示例假设收到 4 字节部件地址 0x01 0x02 0x03 0x04 result parse_addr_method0(0x01, 0x02, 0x03, 0x04) print(result) # {zone: 1, loop: 2, position: 3, device: 4}这段代码演示方法 0 的字段拆分逻辑。实际解析时要注意文档注明“所有数据单元按小端格式传输即低字节在先高字节在后”。如果收到的字节序是反的区号和设备号会完全错位。现场调试时先抓一帧已知设备地址的数据反推字节序再套映射方法。2.4 二次映射模块地址 1000 解决重号NOTIFIER、赋安等主机存在同一个回路内不同类型设备地址重号的问题。探测器地址 23 和模块地址 23 在主机内部可能同时存在上传到监控中心就分不清。解决办法是二次映射模块地址统一加 1000。文档里明确写了模块地址映射方法为“映射地址 模块地址 1000”例如模块地址 23映射地址为 1023。赋安 FS5050 在 V1.0_170510 修改中专门做了这个处理NOTIFIER 3030 在 V1.0_160824 也加了地址重映射。# 模块地址二次映射模块地址 1000 def remap_module_addr(module_addr): 模块地址二次映射解决与探测器地址重号问题 module_addr: 主机内部模块地址范围 0~999 返回上传到监控中心的映射地址 if not (0 module_addr 999): raise ValueError(模块地址超出范围 0~999) return module_addr 1000 # 示例模块地址 23 映射为 1023 print(remap_module_addr(23)) # 1023这段逻辑简单但现场容易漏配。如果平台侧没做二次映射模块报警会显示成探测器地址火警和故障分不清。对接 NOTIFIER 或赋安主机时先确认平台有没有开启“模块地址 1000”的转换开关。3. 从协议表到可运行配置四步完成一条主机对接3.1 第一步按品牌和型号定位协议条目表里协议名格式是“序号-子序号.品牌型号”比如“3-1.海湾5000”“5-4.西门子FS720”“10-1.NOTIFIER_3030”。先按品牌搜再按型号确认。同一品牌可能有多个条目比如西门子有 PDS(BC80)、FC18R-PRT、FC18、FS720、FS720_115K2、CT11打印口、FC720联网型、FC720打印口选错条目参数全错。文档更新记录里有一条值得注意V1.0_170523 修改 SIMPLEX-4100U 协议协议名改为“7-2.SIMPLEX4100_19K2”和“7-3.SIMPLEX4100_9600”按波特率拆成两条。如果现场主机波特率是 19200选 7-2是 9600选 7-3。这种按参数拆分的条目选型时优先看波特率。3.2 第二步抄串口参数并验证物理链路定位到条目后把串口参数抄下来。以“5-4.西门子FS720”为例9600,none,8,1通讯故障“是”地址映射方法 3。物理连接用 RS232 或 RS485 转换器接主机通讯口注意 TX/RX 交叉。# 用 Python pyserial 打开串口并读取原始数据验证链路是否通 import serial ser serial.Serial( port/dev/ttyUSB0, # 串口设备Windows 下为 COM3 等 baudrate9600, # 波特率按协议表填写 bytesize8, # 数据位 parityN, # 校验位N 无校验E 偶校验O 奇校验 stopbits1, # 停止位 timeout2 # 读超时 2 秒 ) # 读取 100 字节原始数据 raw ser.read(100) print(raw.hex()) # 打印十六进制确认是否有数据 ser.close()这段代码用来验证物理链路和串口参数。如果raw为空检查接线、转换器供电、主机通讯口是否启用。如果有数据但全是ff或00检查波特率和校验位。如果数据有规律但解析不出帧头检查协议条目是否选对。3.3 第三步按映射方法配置地址转换串口通了之后按协议条目的地址映射方法配置平台侧转换规则。以方法 1 为例区号字段里嵌了主机号和回路号需要按位拆分。# 地址映射方法 1 的解析区号字段包含主机号和回路号 def parse_addr_method1(byte0, byte1, byte2, byte3): 方法 1BYTE0 区号万位千位百位主机号十位个位回路号高字节 BYTE1 回路号低字节 BYTE2 位号 BYTE3 设备号 主机号范围 0~64回路号范围 0~999 zone_raw byte0 # 区号 10 进制万位到百位是主机号十位个位是回路号高位 host zone_raw // 100 loop_high zone_raw % 100 loop loop_high * 100 byte1 # 回路号 高位 * 100 低位 position byte2 device byte3 return { host: host, loop: loop, position: position, device: device } # 示例假设区号字节为 0x0A10 进制 10回路低字节为 0x05 result parse_addr_method1(10, 5, 3, 23) print(result) # {host: 0, loop: 1005, position: 3, device: 23}方法 1 的拆分逻辑比方法 0 复杂主机号和回路号共享 BYTE0。现场配置时如果平台侧映射规则写错设备地址会整体偏移。常见做法是拿一个已知回路号和设备号的探测器触发报警看平台显示的地址是否和预期一致反推映射规则是否正确。3.4 第四步验证报警、故障、屏蔽三类事件链路和地址都配好后需要验证三类事件能否正确上传火警、故障、屏蔽。文档更新记录里多次提到“增加联动、屏蔽等信息上传类型”比如 V1.0_170516 修改 NOTIFIER6000 协议完善协议内容增加联动、屏蔽等信息上传类型。验证方法让现场人员配合分别触发一个火警、一个故障、一个屏蔽看平台是否收到对应事件类型地址是否和预期一致。如果火警能收到但故障收不到检查协议条目是否支持故障上传如果地址对但事件类型错检查平台侧事件码映射表。提示验证时优先用烟感或手报触发火警用模块断线触发故障用主机屏蔽功能触发屏蔽。不要用真实火警测试避免误报。4. 避坑排查协议对接中最容易翻车的五个点4.1 现象串口有数据但解析全是乱码原因校验位或停止位抄错。表里大部分是 none,8,1但能美用 oddSIMPLEX 用 even松下 EBL8000 用 even,8,2。另外波特率也可能抄错比如西门子 PDS(BC80) 是 115200不是 9600。解决用串口助手按表里参数逐个试先确认能收到稳定帧头。如果表里写 9600,none,8,1 但收不到试 9600,even,8,1 和 9600,odd,8,1。松下 EBL8000 要试 4800,even,8,2。4.2 现象模块报警显示成探测器地址原因二次映射没配。NOTIFIER、赋安等主机同一回路内模块和探测器地址重号需要模块地址 1000。如果平台侧没开这个转换模块地址 23 会显示成探测器地址 23。解决确认协议条目是否属于需要二次映射的品牌在平台侧开启“模块地址 1000”转换。赋安 FS5050 和 NOTIFIER 3030 都要开。4.3 现象平台频繁报“主机离线”原因通讯故障监控配置不当。主机经过转换器、光纤收发器或者主机本身没有链路检测机制但协议条目选了“是”监控通讯故障。解决换用 NL 版本协议或者把通讯故障监控关掉。文档里营口山鹰转换器、利达 LD128E NL、能美 R21 NL 都是为此准备的。4.4 现象数据包中间出现 0xEB 导致解析中断原因某些主机协议数据包中间会出现 0xEB 字符被误判为帧头或帧尾。文档更新记录里 V1.0_170731 专门修改西门子 FS720 协议处理了数据包中间出现 0xEB 字符的问题。解决解析时不要只靠单字节帧头判断结合帧长度和校验字段。如果用的是旧版解析库升级到处理过 0xEB 的版本。4.5 现象收到事件帧后主机不回复确认原因部分协议要求收到事件数据帧后发送 ACK(0x06) 应答比如 NOTIFIER N-CRT_1。如果平台侧没发 ACK主机会重发或者断开连接。解决确认协议条目是否要求 ACK。NOTIFIER N-CRT_1 在 V1.0_170616 更新中明确写了“收到事件数据帧后发送 ACK(0x06) 应答”。在平台侧加上 ACK 发送逻辑。5. 进阶技巧用更新记录反推协议兼容性边界这份文档的更新记录从 20160406 初始版本到 20171116跨度一年半记录了 128 条协议的增删改。很多人只看协议表忽略更新记录其实更新记录里藏着兼容性边界和现场踩坑的后悔药。比如 V1.0_170907 修改“9-2/3.SIMPLEX_4100U”协议部件地址映射用方法 1。如果现场是 SIMPLEX 4100U 主机但平台侧还在用旧版方法 0地址会整体错位。再比如 V1.0_170728 修改“15-1.爱德华EST3”协议兼容英文版本仅报火警。如果现场是英文版 EST3用旧版协议可能收不到火警。我一般会按品牌把更新记录筛一遍看这个品牌在一年半里改了什么。改得频繁的品牌比如西门子、NOTIFIER、能美、安舍说明现场兼容性问题多对接时优先用最新版协议。改得少的品牌比如蓝天、松江早期型号协议稳定按表配就行。另一个技巧是看协议名的后缀变化。带 NL 的是不监控通讯故障带打印口的是打印机接口协议带 CRT 的是 CRT 卡输出协议带 19K2 或 9600 的是按波特率拆分。选型时先看后缀再看品牌型号能少走弯路。# 按品牌筛选协议条目并检查是否有 NL 版本 protocols [ {name: 6-1.利达LD128E, brand: 利达, nl: False}, {name: 6-3.利达LD128E NL, brand: 利达, nl: True}, {name: 8-1.能美_R21, brand: 能美, nl: False}, {name: 8-4.能美_R21 NL, brand: 能美, nl: True}, ] def find_nl_version(brand): 查找指定品牌的 NL 版本协议 return [p for p in protocols if p[brand] brand and p[nl]] # 示例查找能美的 NL 版本 print(find_nl_version(能美)) # [{name: 8-4.能美_R21 NL, brand: 能美, nl: True}]这段代码演示按品牌筛选 NL 版本的逻辑。现场对接时如果主机经过转换器或者链路不稳定优先选 NL 版本。如果平台需要监控主机通讯故障再选非 NL 版本。从那以后我每次对接新主机都强制走一遍“查更新记录 → 确认 NL 版本 → 验证三类事件”的流程不再直接抄协议表参数。希望帮到你。本文还有配套的精品资源点击获取