简介:《JK-2020消防主机协议列表》是一份面向消防主机运维、系统集成与平台对接人员的协议速查手册,用于解决多品牌主机串口接入时参数不明、故障判定与地址映射混乱的问题。内容按品牌分栏整理蓝天、松江、海湾、北大青鸟、西门子等主流机型的通信协议,逐条给出波特率、数据位、停止位、校验位等串口参数,并标注通讯故障判定方法(method 0/1/2/3)与部件地址映射说明,便于现场调试时快速比对。压缩包仅含1个PDF文件,约260KB,版式紧凑、检索方便,适合打印或随工携带。已有2802人学习下载。读者可据此快速确认既有主机的接入参数,减少反复试错,也能为消防监控平台、CRT图形显示与第三方采集程序的协议适配提供参照,是一份偏实操、可直接查用的技术资料。
1. 消防主机协议列表到底是什么:一份让两套系统对上话的参数字典
火灾报警控制器屏幕上跳出一条火警,值班室的电脑要同步亮起来,中间隔的远不止一根线。消防主机协议列表,本质是一张"对方怎么说话"的登记表:哪一类主机、数据从哪个口出来、串口参数是多少、地址怎么排、收到帧要不要回一个确认字节,全部压在一行里。它不解决业务逻辑,只解决"听得懂"这一件事。
打个比方,它像一本老式交换机的接线手册。手册不会告诉你电话里该聊什么,但它会告诉你线插第几个孔、用几伏电压、响几声算接通。没有手册,老师傅靠经验也能试出来;有了手册,新手照着抄就不会把 8 位数据位抄成 7 位,然后对着满屏乱码怀疑人生。这份列表真正值钱的地方,是它把大量"试出来的参数"固定成了可查、可比对的一行行记录。
2. 为什么一台消防主机需要"协议列表":主机只会说方言,采集端得先学会听
消防主机不是通用设备。它出厂时的定位是"报警+联动",数据往外送只是顺带功能,所以每家厂商、每一代产品往外送数据的方式都不一样。有的规规矩矩按标准串口帧来,有的把打印机口当成唯一出口,有的必须插一块专用通讯卡才肯开口。采集端面对的不是"一个协议",而是几十种方言。
协议列表存在的意义,就是把这些方言逐条登记下来,让写采集程序的人不必每接一个项目就从头试一遍。下面用字母代指具体厂商,只谈结构——因为这张表的结构比品牌名重要得多。
2.1 消防主机往外送数据的三个出口
翻这类表会发现,同一台主机往往能从三个不同的物理口取到数据,而这三个口对应的协议基本不通用。
第一个是显示盘(CRT)口。这是最"正规"的出口,主机设计时就留了给图形显示装置用的通道,送出来的通常是带回路号、部件号、事件类型的结构化帧。表里大量条目属于这一类,特征是参数规整、带地址映射说明。它的好处是信息全,坏处是很多老机型这个口被原厂 CRT 占着,你要接就得考虑会不会打架。
第二个是打印机口。这是个很好用但很容易被误解的口。主机往打印机送的是给人看的明码文本,一行一行像小票,接上去抓包直接能读。很多现场没有 CRT 口或者 CRT 口被占用,就从打印口取。麻烦在于打印机口通常是并口,或者电平不匹配,需要额外的转接模块;而且不同机型打印出来的格式差别很大,有的带机号,有的不带机号,同一品牌的两个型号可能一个是"带机号"版本一个是"无机号"版本,选错条目解析出来的部件地址会整体偏移。
第三个是通讯卡。主机上插一块接口卡,卡再对外输出,常见的有 Modbus 卡、火灾显示盘接口卡、CAN 转 232/485 转换器这几类。这类出口的特点是"卡本身决定了协议",同一台主机插不同的卡,表里就是两条完全不同的记录。有些卡还分版本,同一个卡号下面挂着 V1 和 V2 两条,帧结构不一样。
提示:判断该走哪个口,顺序应该是"现场有什么口 → 这个口有没有被占用 → 这个口需不需要额外模块",而不是"哪个协议我最熟"。反过来选,十有八九要返工。
2.2 同一品牌为什么会有好几条协议
初学者最容易在这里犯迷糊:明明是一个牌子的主机,表里怎么排了七八条?原因大致有四类,理解了这四类,查表就不会查错。
第一类是代际差异。主机产品线通常有第一代、第二代、第三代,每一代的通讯协议都可能重写。表里会出现"某品牌第 1 代""第 2 代""第 3 代"这样的分组,帧头、地址编码方式完全不同。老项目上碰到的是十年前的机器,你照着新机器的条目去对,帧长都对不上。
第二类是同一型号的不同波特率版本。这个特别坑:同一个型号,表里可能出现两条,一条 9600,一条 19200,其余参数一模一样。为什么会有两条?因为现场主机的波特率是可配置的,出厂默认和实际设置可能不一致。这时候两条都得留着,现场用哪个速率试哪个。同理还有 2400、4800 的版本。
第三类是出口不同。同一台主机,CRT 口一条协议、打印口一条协议、通讯卡再一条协议。表里经常能看到"某某主机"和"某某主机打印口"成对出现,名字很像,内容完全不同。打印口那条通常没有回路地址,只有文本,解析思路要换。
第四类是固件版本差异。表里会写"某版本""新版""旧版",还可能出现"卡 V1.5""卡 V1.8""卡 V2.5"这种按接口卡固件版本分的条目。同一块卡刷了不同固件,帧里的字段位置可能挪了,这种事只能靠版本号区分,猜不出来。
把这四类想清楚,再看表就顺了:每条记录其实是一个"品牌 + 代数 + 出口 + 速率 + 版本"的五元组,缺一项都可能对不上。
2.3 没有这张表,现场会变成什么样
说几个真实会发生的场景,都是踩坑踩出来的。
最常见的是参数照抄错一位。串口四件套是波特率、校验位、数据位、停止位,表里写成 4800,even,7,2,意思是波特率 4800、偶校验、7 位数据、2 位停止位。这个组合在进口小点数主机上确实存在。但很多人习惯性地按 9600,none,8,1 去配,结果就是能收到字节,但每个字节都错位,解析出来全是乱码,然后开始怀疑是不是线接反了——线其实没问题,是 7 位和 8 位的差别让最高位被吃掉了。
第二常见的是漏了应答。有些协议在收到事件帧之后,采集端必须回一个 0x06(ACK),主机才认为这一帧送达,否则会重发,重发几次之后干脆停发。表里对这类条目会专门标注"收到事件帧后发送 ACK",不标的那条往往就是不需要应答的版本。这两条长得几乎一样,接错了表现是"刚开始有数据,几秒后没了"。
第三种是地址映射没看。表里有些条目带后缀,比如"地址字节排列顺序颠倒""取 9 位设备编码的低 8 位""含报警设备通道号"。这些后缀不是备注,是解析规则的一部分。忽略了,数据是收到了,但部件地址全部错位,火警定位到隔壁楼去,这种错误比收不到数据更难排查。
3. 表里每一列在说什么:波特率、校验位、采集方法与地址映射逐项拆解
把这张表横过来看,每一列其实对应一个决策点。这一章逐列拆开,目的是让人拿到任意一行记录,都知道每个字段该往代码的哪里填。
3.1 串口四件套:9600,none,8,1到底规定了什么
串口通信本质是两根线上一高一低地打拍子,收发双方必须对同一个节拍。四个参数就是在约定这个节拍。
波特率是每秒打多少拍。9600 表示每秒 9600 个电平变化,收发双方差一点都收不准。校验位是给每个字节配一个"验算位",none 就是不验算,even 是偶校验,odd 是奇校验。数据位是一个字节里真正装数据的位数,常见 8 位,少数设备用 7 位。停止位是字节之间的间隔长度,多数是 1 位,少数是 2 位。
这四项必须与主机侧完全一致,任何一项不同,表现都是"数据在来,但解不出东西"。
| 参数组合 | 常见场合 | 容易踩的坑 |
|---|---|---|
| 9600,none,8,1 | 绝大多数国产主机的 CRT 口与通讯卡 | 出现频率最高,容易形成思维定式 |
| 19200,none,8,1 | 同型号高速版、部分第三方输出口 | 与 9600 版只差一个数字,选错就静默无数据 |
| 4800,none,8,1 | 老机型、部分打印口 | 老项目上最常见 |
| 2400,none,8,1 | 更早的主机、部分模块输出 | 速率低,帧间隔大,超时要放宽 |
| 1200,none,8,1 | 少量旧主机 | 同上,且容易被误判成"没数据" |
| 600,none,8,1 | 少数进口小点数机型 | 极慢,读超时设小了会一直读空 |
| 38400,none,8,1 | 部分国产主机的高速口 | 与 9600 版并存,别默认取低速率 |
| 57600,none,8,1 | 个别打印口 | 常配合转接模块使用 |
| 115200,none,8,1 | 打印口、CRT 卡高速输出 | 线材质量差时容易丢字节 |
| 28800,none,8,1 | 极个别的信息输出模块 | 少见,别当成笔误 |
| 4800,even,7,2 | 少数进口主机 | 7 数据位 + 2 停止位,照抄成 8,1 必乱码 |
| 9600,even,8,1 | 少数进口主机 | 校验位漏配,收到的是错位数据 |
| 9600,odd,8,1 | 少数进口主机 | 同上,奇偶搞反一样不通 |
看这张表能得出一个实用结论:不要试图用"通用默认值"去碰运气。默认值在九成场合有效,剩下那一成会让你花掉一整天。
3.2 采集方法编号:那些"方法 0/1/2/3"在区分什么
表里有一列写着方法 0、方法 1、方法 2、方法 3,一直到方法 10。这一列是最容易被跳过、也最容易在联调时卡住的地方。
这些编号本身是表格作者给不同取数套路起的序号,不是行业标准术语。但从表里能观察到的差异,主要集中在三件事上:
第一件,要不要主动发巡检命令。有些主机的协议是被动式的,采集端必须定时发一条巡检帧过去,主机才把当前状态回过来;不发,就永远收不到东西。表里对不需要发的那条会专门标注"不发送巡检命令",说明它的默认行为是要发的。
第二件,收到事件之后要不要回确认。有的条目明确写了收到事件帧后回 0x06,有的没写。这两种不能混用,因为回多了主机会认为串口上有第二个接收方,回少了主机会重发甚至停发。
第三件,地址怎么编。有的方法输出的是完整编码,有的是取低位,有的会附带通道号。这一项直接决定解析层怎么写。
所以实用的做法不是去背编号含义,而是把编号当成"同一台主机的不同接入姿势",然后看每条记录后面的文字说明,说明里通常就写清了差异点。选条目时,先按品牌分组找到那一组,再在组内比较哪一条的说明与现场情况吻合。
3.3 地址映射与那些不起眼的后缀
表里有很多短后缀,看着像备注,其实每一条都是解析规则。
"不监控主机通讯故障",常见缩写是 NL。带这个后缀的条目,采集端不会去判断主机本身是否掉线。什么时候需要它?当现场已经有原厂 CRT 或另一套系统占着这个口,你只是旁听,主动发探测帧会干扰对面,这时候就用 NL 版本,只听不问。代价是主机断线了你不知道。
"地址字节排列顺序颠倒",指同一台主机输出的地址字节高低位顺序与常规相反。这类条目通常和常规条目成对出现,比如 9600 一条、115200 一条,各自再有反地址版本。选错的后果是地址整体错位。
"取 9 位设备编码的低 8 位",出现在某些打印口协议里。主机内部用 9 位编址,打印出来只保留低 8 位,高位丢失。这种情况要在解析层补一个映射规则,否则超过 255 号的部件会回绕。
"含报警设备通道号",指帧里额外带一个通道字段,用于区分同一部件下的不同通道。带通道和不带通道是两条独立条目,别指望同一套解析代码通吃。
"需配合并转串模块"这类说明也在表里出现过。它提醒的不是协议问题,而是物理层问题——打印机口是并口,采集端是串口,中间必须有个转换器件,没有它协议再对也接不上。
4. 常见误区与易混概念:协议、接口、型号、版本不是一回事
这一章专门处理初学者最容易混的五组概念。混了不会立刻报错,但会在联调的最后一步突然卡住。
4.1 协议和接口:能插上不等于能读懂
易混点:把 RS-232、RS-485、Modbus 这些词和"某品牌主机协议"当成同一层级的东西。
为什么混:三者都跟"通信"有关,日常说话时经常混着用。
怎么区分:接口说的是电线和电平,RS-232 是单端电平,RS-485 是差分电平,决定线怎么接、能拉多远。链路规则说的是字节怎么排队、怎么校验。主机协议说的是这一帧里第几个字节是回路号、第几个是部件号。三层是叠加关系,不是替代关系。表里记录的是最上面那一层,底下两层要自己按现场补齐。
4.2 品牌、型号、代数:同一个牌子可能有三套完全不同的说法
易混点:看到表里同一个品牌有七八条,以为随便挑一条就行。
为什么混:型号名字往往只差后缀,比如同一个系列里加个字母,外观几乎一样。
怎么区分:以表里的分组编号为准,一个分组对应一套协议族。同一分组内再看是第几代:不同代的帧头、帧长、地址编码都可能重写。判断代数最可靠的办法不是看铭牌,而是看主机软件版本或接口卡版本,这些信息表里通常写在说明列里。
4.3 打印口协议不等于主机协议
易混点:觉得都是从主机出来的数据,格式应该差不多。
为什么混:名字里都带主机型号,条目名只多了"打印口"三个字。
怎么区分:打印口输出的是给人看的文本,一行一条事件,通常没有回路地址、没有校验字段,只能拿到时间和描述。CRT 口和通讯卡输出的是结构化帧,带完整地址。要用打印口,解析层得改成文本匹配;要用 CRT 口,解析层得按二进制帧走。两者代码不通用。
4.4 波特率对了不等于能通
易混点:改了波特率收到数据,就以为配好了。
为什么混:波特率是最显眼的参数,改完立刻见效,容易让人停下来。
怎么区分:收到数据只是第一关。校验位错、数据位错、停止位错,都可能表现为"有数据但内容怪"。判断方法是看帧头:如果每条帧的开头几个字节稳定不变,说明参数基本对了;如果帧头每次都变,大概率是数据位或校验位不匹配。再往后还要确认应答、地址顺序、通道号。
4.5 有数据不等于数据对
易混点:程序能打印出一堆数字,就认为对接完成了。
为什么混:串口调试工具上一直在刷,视觉上很有成效感。
怎么区分:拿一次真实报警去比对。主机屏幕上显示的是哪个回路哪个部件,程序解析出来的是不是同一个。对不上就回头查地址映射和反地址条目。这一关不过,前面所有工作等于零。
5. 把列表用起来:一次虚构的主机对接会走哪几步
假设接到一个模拟项目,现场是一台某品牌的壁挂式主机,业主要求把报警事件送到监控中心。手里有这张表,流程会清晰很多。
5.1 先定出口,再定参数
第一步不是打开代码,而是去现场看有什么口。看主机背面有几个 DB9、有没有并口、有没有插着接口卡。假设查到有 CRT 口,且没被原厂图形装置占用,那就走 CRT 口。
第二步回表里按品牌分组找条目,组内按型号和代数筛,最后按波特率筛。假设筛出两条,一条 9600,一条 19200,参数其余相同。这时候不要猜,去主机设置菜单里看当前波特率,或者两条都试,能稳定收到完整帧的那条就是对的。
第三步确认两件事:这条记录有没有"不监控通讯故障"的后缀,有没有"需要发巡检命令"的说明。这两项决定了代码里要不要写心跳逻辑。
5.2 参数填对却没数据,按这个顺序查
- 先看线。232 要看收发是否交叉,485 要看 A/B 是否接反,转换模块的供电有没有漏接。
- 再看四件套。逐项对照表里的那一行,包括校验位和数据位,不要凭印象。
- 再看握手。这条协议要不要主动发巡检帧,发的内容和周期是否与说明一致。
- 再看应答。收到事件后要不要回 0x06,回了会不会被主机当成第二个接收方。
- 最后看解析。地址字节顺序、是否取低位、是否带通道号,逐条核对后缀说明。
这个顺序的逻辑是"从物理层往应用层推",越靠前的越容易错,也越容易被忽略。
5.3 把一行记录落成配置
import serial # 表里的一行记录,落到代码里通常长这样 profile = { "port": "/dev/ttyUSB0", # 采集端串口设备,Windows 下形如 COM3 "baudrate": 9600, # 波特率,必须与主机侧设置一致 "bytesize": 8, # 数据位,表里第四项 "parity": serial.PARITY_NONE, # 校验位:none/even/odd 对应 N/E/O "stopbits": serial.STOPBITS_ONE, # 停止位,1 或 2 "timeout": 2, # 读超时,低速协议要适当放宽 } ser = serial.Serial(**profile) # 带"需发巡检"说明的协议,必须先发一帧问询,主机才会回数据 POLL = bytes([0x01, 0x03, 0x00, 0x00, 0x00, 0x01]) # 示例帧,实际按条目说明构造 ser.write(POLL) frame = ser.read(64) # 读一帧;帧长按协议说明确定,不要固定用 64这段代码里真正需要解释的是三个地方。baudrate和bytesize直接对应表里的第一项和第三项,抄错就收不到完整字节。parity对应第二项,none 是PARITY_NONE,even 是PARITY_EVEN,odd 是PARITY_ODD,这一项最容易因为"反正默认是 none"而被跳过。timeout不是协议参数,是采集端的容错设置,低速协议(例如 600、1200)如果不放宽,会出现"偶尔丢一帧"的错觉。
POLL那一行只是示意帧结构,真实内容必须按条目的说明构造。表里标注"不发送巡检命令"的条目,这一行要删掉,只保留读。
6. 什么时候该翻这份列表,什么时候别指望它
这份列表的定位很明确:它是一本"接入前的对照手册",不是万能钥匙。用得对,能省掉大半天试参数的时间;用错地方,会把排查方向带偏。
适合翻它的场景:新项目进场,先判断眼前这台主机能不能接、从哪个口接、需要备什么转接模块;现场换了一台同品牌但不同代的主机,需要快速确认旧代码还能不能复用;联调时收到数据但解析不对,需要核对后缀说明里有没有反地址、取低位、带通道号这类规则;给一份采集方案写参数表,需要一个可查的依据。
不适合指望它的场景也要说清楚:
| 场景 | 这份列表的作用 |
|---|---|
| 现场主机是表里没收录的新型号 | 帮不上,只能抓包逆向 |
| 主机固件升级后帧结构变了 | 只能当参照,需要重新对帧 |
| 需要向主机下发控制指令(复位、联动) | 多数条目只描述"读",写入方式未覆盖 |
| 同一台主机同时接了两套采集系统 | 列表不管资源冲突,要自己协调端口占用 |
| 打印机口取数但没备转接模块 | 协议再对也接不上,先解决物理层 |
还有一个容易被忽略的边界:表里对"不监控主机通讯故障"这类变体的说明,本质上是在描述取舍。选了 NL 版本,主机掉线你不会知道,监控中心看到的是"一直正常"。如果这套系统承担的是真实值守职责,这个取舍要提前跟业主讲清楚,而不是等出了事再解释。我吃过这个亏——早些年接一个模拟项目,为了省事选了不监控通讯故障的那条,结果主机断电两天,采集端一直安安静静,直到巡查才发现。
从那以后我每接一台新主机,第一件事不是接线,而是先把表里对应的那一行抄在便签上贴在机柜门内侧,把四件套、要不要发巡检、要不要回 ACK、地址有没有特殊规则这四行写清楚,接完线逐项打勾。这套习惯没让我变聪明,只是让我少熬了几个通宵。这份列表连同采集方法编号的说明都在资料里按品牌分好了组,需要的时候按组往下翻,找到那一行照着填就行。希望帮到你。
本文还有配套的精品资源,点击获取