如何用PLC监听消防系统485总线通讯获取火灾报警数据

本文由艺捷自动化编写,艺捷自动化旗下产品有艺捷自动化网站和易为二维码说明书小程序(微信)

前言,先来说一下为什么会有这么一个奇怪的应用。在一个自动化系统改造升级项目中,甲方要求把消防的画面加到他们的后台上。他们的后台用的亚控的KingSCADA组态软件。但是把消防的数据做到后台电脑上何其难也,因为这是一个跨行业的应用了,人家消防有消防的一套通讯系统,跟你工控自动化是不兼容的。我研究消防系统485总线通讯协议,确定了用西门子200 SMART PLC来监听消防系统485总线的方案。所能获取的数据也很有限,只能获取实时发生的火灾信息。具体来说,当消防主机的485总线上接有火灾显示盘的时候,有火灾报警的时候,消防主机会向火灾显示盘发送火灾报警信息,这时候PLC监听到这一部分数据,提取出来,最后反馈到后台电脑上。要搞懂这些程序要有熟练的西门子200 SMART编程技术。也许您也碰到了这样奇葩的要求,这些资料就有很大的参考价值。下面就具体讲解一下实现的步骤,并提供所有资料和完整的PLC程序。

首先,先讲一下接线吧。首先来看消防主机的485通讯接线:

看到485显示盘A/B端子了吗,这上面的两根线是485通讯线,接到火灾显示盘上。再来看看火灾显示盘的接线:

看到了吗,这就是火灾显示盘,本来这个是要装在走廊上的,我们只用它的通讯功能,所以就放到柜子里了。这个火灾显示盘是要根据消防主机的型号,来配套的,要联系消防厂家,看看配哪个型号的火灾显示盘。看到那两根并排的红线和两根蓝线了吗,就是485通讯线,一端去消防主机,一端去PLC的通讯。再来看看PLC那边的接线吧:

看到PLC上的SB COM01扩展板了吗,那上面接的红线和蓝线,就是从火灾显示盘过来的485通讯线。这样就构建了一个485通讯总线,接线完毕。下面来讲一下消防系统的485总线通讯协议吧。

那么,现在开始讲485总线通讯协议。这份通讯协议是公司花了大价钱从消防厂家买来的,由于人家说是绝密文档,我没法给大家发布出来。但是为了讲清楚后面的程序,则必须要讲这个协议要用的部分内容。我把所有要用到的协议内容,一次性的在这里讲出来,后面看程序的时候,可以返回来仔细看。这个协议是一个消防系统485总线通讯协议,适用于其9000消防系统。我不清楚各个消防厂家的协议是不是一样的,假设你要做类似的监听通讯,则必须要从消防厂家那里获得其通讯协议,没有协议一切白费。下面就是协议的部分内容。

概述,在我做的这个系统里,火灾报警控制器做为主机,火灾显示盘做为从机。而PLC呢,只是一个监听者。

物理链路协议,起始位1位,数据位8位,校验位1位偶校验,停止位1位,波特率9600.

数据包传输协议。在数据包传输协议中,需要使用几个特征字符,用于包的完整传输,具体如下:SYN(0XAA)同步字符,连续两个以上的同步字符,认为是一个数据包开始;EOT(0XAF)结束字符,出现结束字符认为数据包数据结束;DLE(0XA0)转义字符,当数据中出现同步字符,结束字符和转移字符时,为了让这些字符做为普通数据处理,就在前面加一个转义字符。我后面的程序中还真用到了转移字符,是在处理中文的报警地址的时候用到的。

连接层传输协议必须遵循以下通讯机制:

1. 对于发送方的每一个数据包,接收方根据接收的数据必须向发送方发送响应数据包(接收确认或接收非确认)。

2. 对于多包数据传输,其数据发送有效包号从1开始。数据包号为0的ACK将触发实际多包数据的发送传输过程。发送PKG_NO号SOH包数据,接收方响应PKG_NO号ACK,发送方收到PKG_NO号ACK,发送方发送PKG_NO+1号包数据。

3. 当接收方检测到数据出错时,向发送方发送非确认NAK数据包。

4. 发送方发送完一个数据包后,在20ms 后没有收到接收方的确认或非确认信号,重发此数据包,重发次数为3。

5. 为了启动数据发送过程,发送方首先发送ENQ 数据包,等待接收发方发送PGK_NO=0的ACK 确认包,发送方在收到PKG_NO=0的ACK 确认包后,进入SOH数据包发送状态。

下表为连接层所用特征字符以及相应的通讯帧格式。

通讯帧含义

特征字符

通讯帧格式

数据

0xE0 (SOH)

SOH

SRCADDR

DESTADDR

PKG_NO

LEN

TYPE

DATA

广播数据

0xBB (BCSOH)

BCSOH

SRCADDR =0

DESTADDR =0

CMD_NO

DATA

退出

0xE1 (EXT)

EXT

SRCADDR

DESTADDR

接收确认

0xE2 (ACK)

ACK

SRCADDR

DESTADDR

PKG_NO

接收非确认

0xE4 (NAK)

NAK

SRCADDR

DESTADDR

结束

0xE8 (NUL)

NUL

SRCADDR

DESTADDR

结束确认

0xE9 (NULACK)

NULACK

SRCADDR

DESTADDR

查询

0xE7 (ENQ)

ENQ

SRCADDR

DESTADDR

握手

0xD0 (SAK)

SAK

SRCADDR

DESTADDR

握手确认

0xDF (SAKED)

SAKED

SRCADDR

DESTADDR

TYPE

连接

0xF1 (LINK)

LINK

SRCADDR

DESTADDR

连接确认

0xF4 (LINKED)

LINKED

SRCADDR

DESTADDR

终止连接

0xF2 (UNLINK)

UNLINK

SRCADDR

DESTADDR

终止连接确认

0xF8 (UNLINKED)

UNLINKED

SRCADDR

DESTADDR

大家看到了吗,主机和从机之间的通讯要经过一套发送,应答机制。

连接层通讯状态描述,地址:主机地址为00,从机地址为1-99.

握手信号和从机在线检测机制,当主机向从机发送握手数据包后,在规定的时间间隔内没有收到从机的应答信号就认为此次连接失败,不再进行重发,直接对下一个从机发送握手信号。

应用数据的传输,应用数据的传输需要依靠SOH和BCSOH通讯帧来完成。BCSOH用于广播、复位和消声等系统消息。SOH用于传输火警/反馈信息,配置信息等实际数据。

握手和握手确认,报警主机为了判断火灾显示盘和火灾显示盘扩容箱否在线,通讯是否畅通。报警主机会向从机轮询逐个握手,从机收到本地址的握手命令后,在40ms内向主机发送握手确认命令,否则报警主机会报该地址从机通讯故障。后面的程序中,以前用到过这个数据,后来不用了,用处不大。

【实例说明】

主机发送握手命令:AA AA AA AA D0 00 1E AF CE

从机响应握手确认:AA AA AA AA DF 1E 00 TYPE AF C1

握手命令解析

编号

数据

说明

备注

AA AA AA AA

同步字符

D0 握手命令/DF 握手确认

D0

特征字符

00

发送源地址

报警主机地址号00,例子中从机为0x1E 即30。

1E

发送目的地址

AF

结束字符

CE

数据校验

校验和

广播命令,广播命令有三条:复位命令、消音命令和时间同步命令。从机收到广播命令后不用向主机发送应答数据。复位命令:控制器复位时,控制器在485 总线上发送复位命令。消音命令:控制器进入本机消音状态,向485 从机设备发送消音命令。时间同步:控制器每10分钟向从机广播时间数据。后面的程序用到了这部分内容,具体是用到了广播时间同步命令。

【实例说明】

主机发送广播复位命令:AA AA AA AA BB 00 00 00 AF BB

主机发送广播消音命令:AA AA AA AA BB 00 00 01 AF BA

主机发送广播时间同步命令:AA AA AA AA BB 00 00 0E 11 01 25 15 02 13 AF 84

广播命令解析

编号

数据

说明

备注

AA AA AA AA

同步字符

BB

特征字符

广播命令

00

发送源地址

00

发送目的地址

广播命令目的地址为00

00

数据类型

00 复位/01 消音/0E 时间同步

11 01 25 15 02 13

时间数据11 年01 月25 日15 时02 分13 秒

日期和时间数据为BCD 码;复位和消音命令时,位置⑥无时间数据。

AF

结束字符

84

数据校验

火警等信息传输流程,主机向从机下发一条火警信息,需要连续发送7帧数据(配置列别发送最多需要20帧,其它类型信息传递一般小于7帧),从机需要对每帧数据应答,共14帧数据。

火警信息传输实例说明:

步骤1)主—>从(主机向从机发送连接命令):AA AA AA AA F1 00 1E AF EF 。

步骤2)从—>主(从机发给主机发送连接确认命令): AA AA AA AA F4 1E 00 00 AF EA 。

步骤3)主—>从(主机向从机发送查询命令):AA AA AA AA E7 00 1E AF F9 。

步骤4)从—>主(从机发给主机接收确认命令):AA AA AA AA E2 1E 00 00 AF FC

步骤5)主—>从(主机向从机发送第一包火警数据):

AA AA AA AA E0 00 1E 01 23 20 02 01 01 00 39 39 0B 01 01 01 39 30 31 C7 F8 30 31 B2 E3 30 35 37 BA C5 00 00 00 00 00 00 00 00 00 00 00 AF EF 。

第1包火警数据解析(这里是后面程序要用的,只不过实际的数据比这个多,第1包数据扩大到年月日数据处):

编号

数据

说明

备注

AA AA AA AA

同步字符

E0

特征字符

0xE0 发送数据

00

发送源地址

1E

发送目的地址

01

包号

0x01 第一包数据 0x02 第二包数据

23

数据长度

0x23 即35 个字节

20

数据类型

0x20 火警或反馈

0x40 故障

0x24 模块的启动或停止

0x50 主机状态

02

主类型

0x02 火警和反馈数据

0x05 故障数据

0x04 启动或停止

01

从类型

0x01 火警<反馈>发生

0x81 火警<反馈>消失

详细参考《系统SOH 命令号列表》

01

主机号

11

00

接口板和回路号

0x00 表示第一个回路

12

39

设备地址号

回路中0x39 号地址报火警扩展到2 字节

13

39

设备的生产类型

14

0B

设备类型

15

01

区号

16

01

栋号

17

01

层号

18

39

房号

19

位置描述

20

AF

结束字符

21

EF

数据校验

步骤6)从—>主(从机发给主机接收确认命令):AA AA AA AA E2 1E 00 01 AF FD 。

步骤7)主—>从(主机向从机发送第二包火警数据):AA AA AA AA E0 00 1E 02 23 20 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 11 01 25 15 02 00 00 CA D6 B1 A8 00 00 00 00 00 00 AF D8 。

第2包数据解析(这是后面程序要用到的,实际数据比这个少,只有时分秒及后面的数据):

编号

数据

说明

备注

AA AA AA AA

同步字符

E0

特征字符

0xE0 发送数据

00

发送源地址

1E

发送目的地址

02

包号

0x01 第一包数据

0x02 第二包数据

23

数据长度

0x23 即35 个字节

20

数据类型

位置信息描述

11

01

11

25

12

15

13

02

14

00

15

00

隔离标志

16

设备类型描述

17

AF

结束字符

18

D8

数据校验

步骤8)从—>主(从机对第二包数据的应答):AA AA AA AA E2 1E 00 02 AF FE。

步骤9)主—>从(主机发送数据传输结束命令):AA AA AA AA E8 00 1E AF F6。

步骤10)从—>主(从机应答结束确认):AA AA AA AA E9 1E 00 00 AF F7。

步骤11)主—>从(主机发送接收确认):AA AA AA AA E2 00 1E AF FC。

步骤12)从—>主(从机发送退出):AA AA AA AA E1 1E 00 00 AF FF。

步骤13)主—>从(主机发送终止连接):AA AA AA AA F2 00 1E AF EC。

步骤14)从—>主(从机应答终止连接确认):AA AA AA AA F8 1E 00 00 AF E6。

有效数据详细描述,火警或反馈信息有效数据详细描述(把2个火警数据包的数据合起来就能得到这个数据,后面的程序用到了这里的资料)

命令号

字段域

字段含义描述

含义描述

0x20

ucLength

1

长度(71)

火警或反馈

下同

ucStruMasterType

1

主类型(0x02)

下同

ucStruSlaverType

1

从类型(0x01:火警<反馈>发生0x81:火警<反馈>消失)

ucHostNO

1

主机号(从1 开始)

ucIOB_LoopNO

1

接口板和回路号(=(IOBNO-1)*2+LOOPNO)

ucAddrNO

2

设备地址号(高字节为地址的低位,低字节为地址的高位)

ucMakeType

1

生产类型

ucEquipmentType

1

设备类型(用于联动,详细描述见后)

ucZoneNO

1

区号(从0 开始0-19)

ucBuildingNO

1

栋号(从0 开始0-19)

ucFloorNO

1

层号(0-199 为1-200 层)(0xFF-0xF6 为-1 至-10 层)

ucRoomNO

1

房号(0-255)

aucPlaceDesc

41

位置描述,长度为41,以0 结尾的字符串

ucYear

1

年(两位BCD 码)

ucMonth

1

月(两位BCD 码)

cDay

1

日(两位BCD 码)

ucHour

1

时(两位BCD 码)

ucMinute

1

分(两位BCD 码)

ucSecond

1

秒(两位BCD 码)

ucIsolateFlag

1

隔离标志(0:未隔离,1 隔离)

aucEqpDesc

11

设备类型描述,长度为11,以0 结尾的字符串

怎么样,这个协议啰嗦吗。后面还有各种数据详细描述和有关火灾显示盘扩容箱的通讯协议,由于后面的程序没有用到,就不罗列出来了。通讯协议的讲解就到此为止。

看到协议的内容估计大家头都大了吧。没事下面我会结合实际的程序给大家分解开,一步步讲解。要搞懂这个程序大家一定要投入一些时间,踏踏实实把程序看完。程序可能比较多,我没法一一在这里展示出来。我也不可能把每一条指令的作用给大家讲清楚,我只能说说这一段的程序执行的是什么功能。程序的基本逻辑就是监听485通讯线上的通讯帧,分析这些数据,获取对我们有用的数据。我打算按照程序的实际工作流程来讲解,而不是按照程序段的顺序来讲解,这样大家更容易理解。前面的指令我可能讲的仔细点,后面就讲主要的功能和特别需要注意的地方,因为内容实在太多,大家也不希望我长篇大论。

首先,在主程序中调用消防通讯子程序。

消防通讯子程序第1段:

这一段程序的功能是设置自由口通讯参数,连接中断处理程序,数据区清零,打开接收指令。SMB130设置为16#49的意思是,偶校验,每个字符8位,波特率9600,自由端口模式。SMB187设置为16#94的意思是,启用接收消息功能,忽略起始字符,忽略结束字符,使用空闲线,字符间定时器,使用定时器超时,忽略断开条件。SMW190设置为2意思是,空闲线时间2ms。设置SMW192为2意思是,定时器超时值2ms,由于主从机之间帧响应太快,所以减少时间为2ms.虽然设置的这么短,但还是可能会漏掉火警数据的第二个包。SMB194设置接收最大字符数99。将端口1接收消息完成(24)事件连接到中断处理24子程序上。开中断。中断计数为0。这个变量用来检测是否成功进入了中断处理程序。对接收区清零。启动第1次接收指令。

中断处理24子程序第5段和第8段:

首先来讲一个问题,由于消防主机和火灾显示盘之间的数据帧交互太快,火警数据需要由两个数据帧来完成,第2个火警数据帧有时会抓取不到。我这里使用了各种方法来缩短中断处理程序的时间,但效果不明显。即使用了跳转指令,也不能完全抓取第2包,10次里有1-2次抓不到。第5段程序,接收到确认命令后跳转。为什么这里要跳转呢,因为16#E2是接收确认的意思,是火灾显示盘发给消防主机的应答信息,对我们没用。我们只截取消防主机发给火灾显示盘的信息,所以为了减少中断处理时间,我们直接跳转,越过下面的程序段。虽然我采用了这种技巧,但是效果并不明显,还是前面说的有时候第2个火警数据包会抓取不到。后面我采用了,伪造第2个火警数据包的方法,到了那个地方我还会讲。第8段,就是跳转的标签,如果条件成立就跳转到这里,越过第6段和第7段。

如何用PLC监听消防系统485总线通讯获取火灾报警数据_艺捷自动化

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/839332.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

word如何按照原本页面审阅文档

1 视图-阅读视图 2 视图&#xff0c;自己看&#xff0c;懒得打字了哈哈

vulhub——ActiveMQ漏洞

文章目录 一、CVE-2015-5254(反序列化漏洞)二、CVE-2016-3088&#xff08;任意文件写入漏洞&#xff09;2.1 漏洞原理2.2 写入webshell2.3 写入crontab 三、CVE-2022-41678&#xff08;远程代码执行漏洞&#xff09;方法一方法2 四、CVE-2023-46604&#xff08;反序列化命令执行…

升级版网创教程wordpress插件自动采集并发布

主要功能&#xff1a; wordpress 插件主题系列支持自动采集并发布。 主要采集: 福缘&#xff0c;中创&#xff0c;冒泡 自动采集各大项目网进行整合发布到自己个人网站 插件话更新&#xff0c;减少网络请求&#xff0c;提升稳定性 代码完美开源 傻瓜式操作&#xff0c;一…

【MySQL】MySQL的安装和基本概念

MySQL的安装和基本概念 一、环境安装1、环境及配置2、下载安装 二、基本概念1、主流数据库2、mysql和mysqld的区别和概念&#xff08;1&#xff09;概念1&#xff1a;了解CS结构&#xff08;2&#xff09;概念2&#xff1a;数据库指的是什么&#xff08;3&#xff09;概念3&…

【Linux】:进程切换

朋友们、伙计们&#xff0c;我们又见面了&#xff0c;本期来给大家解读一下有关Linux进程切换的知识点&#xff0c;如果看完之后对你有一定的启发&#xff0c;那么请留下你的三连&#xff0c;祝大家心想事成&#xff01; C 语 言 专 栏&#xff1a;C语言&#xff1a;从入门到精…

【AI副业教程】日赚5000+涨粉3000,自媒体新玩法!

​StartAI是一款专为设计师打造的基于Photoshop的AI工具&#xff0c;它提供了一系列强大的AI功能如&#xff1a;文生图、生成相似图、线稿上色、无损放大、局部重绘、扩图、艺术融合、提示词、智能擦除、风格选择等。https://www.istarry.com.cn/?sfromHGtsRq 你们能想象吗&a…

【Android安全】AOSP版本对应编号| AOSP版本适配Pixel或Nexus型号 | 驱动脚本下载地址

AOSP版本对应编号 https://source.android.com/docs/setup/about/build-numbers?hlzh-cn#source-code-tags-and-builds 例如android-8.1.0_r1 对应的编号是OPM1.171019.011 可以适配Pixel 2 XL AOSP驱动脚本下载 编译AOSP时&#xff0c;需要Google的驱动&#xff0c;后面才…

【分享】3种方法取消PPT的“限制保护”

PPT如果设置了有密码的“只读方式”&#xff0c;每次打开PPT&#xff0c;都会出现对话框&#xff0c;提示需要输入密码才能修改文件&#xff0c;否则只能以“只读方式”打开。 以“只读方式”打开的PPT就会被限制&#xff0c;无法进行编辑修改等操作。那如果后续不需要“限制保…

SpringBoot+layuimini实现角色权限菜单增删改查(layui扩展组件 dtree)

角色菜单 相关组件方法效果图代码实现资源菜单树组件实现权限树方法js这里我先主要实现权限树的整体实现方法&#xff0c;如果是直接查看使用的话可以只看这里&#xff01; 后端代码Controlle层代码Service代码及实现类代码Service代码ServiceImpl代码 resourceMapper 代码role…

从零开始傅里叶变换

从零开始傅里叶变换 1 Overview2 傅里叶级数2.1 基向量2.2 三角函数系表示 f ( t ) f(t) f(t)2.2.1 三角函数系的正交性2.2.2 三角函数系的系数 2.3 复指数函数系表示 f ( t ) f(t) f(t)2.3.1 复指数函数系的系数2.3.2 复指数函数系的正交性 2.4 傅里叶级数总结 3 傅里叶变换…

如何将手机中的音乐转移到 SD 卡上?轻松传输音乐

概括 如何将音乐从手机转移到 SD 卡&#xff1f;我们的智能手机可以充当个人点唱机&#xff0c;因此有效管理我们的音乐库变得至关重要。无论您是存储空间不足还是只是想整理您的音乐收藏&#xff0c;将音乐从手机传输到 SD 卡都是一个实用的解决方案。 在本指南中&#xff0…

二叉树的递归实现及例题

目录 遍历方式 示例 原理 前序遍历示例 二叉树的节点个数 原理 层序遍历 原理 这样做的目的是 判断完全二叉树 例题 ​编辑 思路 代码 遍历方式 二叉树的遍历方式可分为&#xff1a; 前序遍历&#xff1a;先访问根&#xff0c;访问左子树&#xff0c;在访问右子…

浏览器的下载行为基本原理

浏览器解析 在使用浏览器访问某些资源时&#xff0c;有些资源是直接下载有些资源是直接打开。例如前端的html&#xff0c;xml&#xff0c;css&#xff0c;图片等资源都是直接打开&#xff0c;而txt&#xff0c;excel等文件是直接下载。那么如何控制访问一个资源时是下载文件还…

App Inventor 2 如何接入ChatGPT:国内访问OpenAI的最佳方式

如何接入OpenAI 由于国内无法访问OpenAI&#xff0c;KX上网可选大陆及香港&#xff08;被屏蔽&#xff09;以外才行。因此对于大多数人来说&#xff0c;想体验或使用ChatGPT就不太便利&#xff0c;不过App Inventor 2 为我们提供了相对便利的一种方式&#xff0c;即“试验性质…

C# run Node.js

C# run nodejs Inter-Process Communication&#xff0c;IPC Process类 启动Node.js进程&#xff0c;通过标准输入输出与其进行通信。 // n.js// 监听来自标准输入的消息 process.stdin.on(data, function (data) {// 收到消息后&#xff0c;在控制台输出并回复消息console.l…

连锁服装门店补货一般怎样的流程

连锁服装门店的补货流程通常包括以下四个关键步骤&#xff1a; 分析销售数据和库存情况 首先&#xff0c;连锁服装门店需要定期分析销售数据和库存情况。通过销售数据可以了解各款商品的销售情况、热销款式和滞销款式等信息。同时&#xff0c;需要检查每个门店的库存情况&…

06Django项目--用户管理系统--新增

对应视频链接点击直达 06Django项目--用户管理系统--新增 对应视频链接点击直达模块构思a&#xff0c;用户信息的构成&#xff08;表结构设计&#xff09;b&#xff0c;models里面的设计 用户新增页面设计a&#xff0c;先在模版里面选一个新增的样式b&#xff0c;然后删除该页面…

win32-鼠标消息、键盘消息、计时器消息、菜单资源

承接前文&#xff1a; win32窗口编程windows 开发基础win32-注册窗口类、创建窗口win32-显示窗口、消息循环、消息队列 本文目录 键盘消息键盘消息的分类WM_CHAR 字符消息 鼠标消息鼠标消息附带信息 定时器消息 WM_TIMER创建销毁定时器 菜单资源资源相关菜单资源使用命令消息的…

网络原理3

运营商路由器&#xff0c;也可以把它当做一个NAT设备它就会对中间经过的数据包&#xff0c;进行网络地址转换当内网设备经过运营商路由器访问外网的时候就会把IP数据包中的源ip&#xff0c;替换成它自己的ip. 我的电脑要发送一个数据给cctalk服务器此时&#xff0c;我的电脑上就…

论文精读--InstructGPT

模型效果取决于数据效果&#xff0c;但在精细度上控制不够&#xff0c;只是大力出奇迹&#xff0c;这样有很大的问题&#xff1a; &#xff08;1&#xff09;数据量太多或者没有这方面的数据&#xff0c;模型学不会怎么办 &#xff08;2&#xff09;安全性问题&#xff0c;模…