一、 案例软件分析
一、总体目标
工业互联网是新一代信息技术与制造业深度融合形成的新兴业态和应用模式,其发展前景广阔。工业互联网网关是将各采集监测点的数据通过无线或有线传感网络进行数据汇集,进行统一有效的监管。在工业互联网体系架构中,感知层网络和工业互联网之间需要一个网关设备,实现工业互联网与传感层网络的互联互通。工业互联网网关旨在解决当前感知层网络设备的横向不关联,无法联动控制和统一管理的问题。网关以工业互联网为载体进行信息交换,把分散在各种工业现场的感知网络设备信息进行采集、存储、分析、管理,并能够对多种协议下的数据进行解析。
二、需求分析
如下图所示,网关软件需要实现的功能主要包括:
(1)串口收发:通过串口实现软件与设备的通信,传输相关数据。
(2)本地设置:用于设置串口号、定时周期、感知节点信息、访问权限、网关及网络相关参数等。
(3)本地数据存储:基于 Access 数据库编程技术,实现采集数据本地化存储。
(4)本地数据显示:将存储到数据库中的采集数据以图表形式展现出来。
(5)本地数据导出:采集的数据还可以 Excel 的格式输出。
(6)实时数据通信:通过 WebSocket 技术,实现本地与远端(云服务器) 之间的数据实时传送、显示与双向控制。
(7)远程网络通信: 搭建 TCP 服务器,通过 Socket 编程技术,实现采集数据的 远程传送,方便在本地与远端(云服务器)进行网络存储。
(8)实现多协议转换:采集器可能是支持多种通信协议的不同设备。
三、总体设计
下图中的数据采集器是一种嵌入式设备,用于采集工业现场环境的实时数据,其数据通过 RS485总线或其他总线传输至工控机;各数据采集器(节点)通过 RS485总线进行联网,通信数据封装一般采用 Modbus等工业通信协议;边缘计算设备采用基于工控机的网关软件进行集中处理,具体包括串口数据收发、本地设置、数据本地存储、数据本地显示、网络数据实时传输等功能;工控机和云平台直接通过 WebSocket 和 Socket 协议进行通信,其中,WebSocket 协议可为云平台提供双向实时数据传输,达到远程实时显示和远程控制的目的,Socket 协议则用于传送 RS485 采集过来的工业现场数据,并传送到云平台上去;在云平台上,需要部署 WebSocket 和 TCP 服务器,并提供实时显示、存储、监控及管理等 Web 应用功能。
工业互联网网关中集成通用的短距离通信协议,能覆盖大部分工业领域的感知层设备,为感知网络节点数据提供统一的封装,保证不同的协议能够抽象成统一的数据帧,通过上行通信接口上传至应用服务器端;应用服务器端数据,通过通用的工控协议、互联网协议将数据下发给工业物联网网关,网关通过协议解析,将数据帧拆解并重新组合成感知层网络能识别的数据帧,通过下行通信接口进行下发。
四、详细设计及实现部署
1、实时数据通信
网关软件实时数据通信采用了WebSocket技术。WebSocket 技术是 HTML5 标准下的一种新的应用层协议,实现了服务器和浏览器之间全双工通信。WebSocket 能够像 Socket 一样,在服务器和浏览器之间形成一个真正的“长连接”。 具体实现原理为:
(1)客户端发起连接请求;
(2)服务器根据规则接收客户端请求后,进行握手,握手成功后建立连接;
(3)连接成功建立后,和 Socket 通信类似,可以在客户端和服务器之间以帧序列的方式收发数据,无需发起新的连接请求,其中发送方以帧序列格式发送,接收方需要对帧序列进行解码;
(4)客户端发起断开连接或者网络中断时,连接才会中断。
由此可以看出,WebSocket 技术是一种真正的全双工通信协议,成功建立连接后,客户端和服务器之间的地位是完全对等的,其协议是基于 HTTP 协议,非常适合B/S 架构。因此,通过使用 WebSocket 技术,可以实现对远程服务器端的实时发送与控制。下面介绍具体实现过程。在连接前,需要首先搭建基于PHP的WebSocket服务器端,并通过Apache httpd服务器发布。网关软件端作为客户端,需要设置 WebSocket 服务器的相关信息,包括 IP 地址和端口号等。 其中服务器端连接程序包括:
(1)创建连接:$conn=socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
(2) 绑定 ip 和端口号:socket_bind($conn, $address, $port);
(3) 监听:socket_listen($conn, 5)。
客户端主要程序包括:
(1)static WebSocketClass socketManager; string jsonStr = JsonNewtonsoft.ToJSON(data);// 将多组数 据组成成 json 格式
(2)socketManager.Send(jsonStr); // 发送数据
(3)string str = socketManager.Recv(); // 等待服务器返回数据
在与 WebSocket 服务器建立连接后,客户端不仅能够把 采集到的多组数据以json格式封装发送到服务器,还能接收 到服务器发送回来的数据,进而对温度采集器实施控制、管 理,真正实现网页端大数据实时监测与监控功能。安全性方 面,在 HTTP 握手的时候,需要进行 HTTP 认证,以确保服务器与浏览器之间通信安全。此外,项目实施后,还要防范 XSS 漏洞攻击,在后续版本中,还将对数据进行加密处理, 防止明文传输带来安全漏洞。
2、远程网络通信
网关软件远程存储采用传统 Socket 技术中的 TCP 传输协议,是一种 C/S 架构,在具体实现过程中选用了异步 Socket 插件 SanNiuSignal。SanNiuSignal 是一个 dll 文件,具有简单易用、传输稳定等特点,非常方便建立基于 TCP 和 UDP 的数据传输,简化编程流程。经过测试,能够满足远程 数据传输功能。 具体实现过程包含服务器和客户端(网关软件)两部分。其中,服务器端,需要搭建 TCP 服务器,设置服务器端口,并点击启动监听按钮,监听客户端发起连接。客户端设置服务器 IP 地址和端口号,发起连接请求,服务器接 收请求后,客户端和服务器之间即可实现双向通信。客户端负责将采集到的数据以 json 格式封装,发送到服务器端,还会监听服务器发送过来的数据。服务器端不仅能够接收 数据、解析数据,并将数据存储到 MySQL 网络数据库中,还能够发送数据到客户端,并监测是否存在非法用户,确保数据的安全性。客户端主要代码包括:
(1) private ITxClient client = null; string ip_addr=textBox9.Text;// 读取服务器 IP 地址
(2) string ip_port= textBox10.Text;// 读取服务器端口号
(3) TxClient = TxStart.startClient(ip_addr, int.Parse(ip_port));
if (TxClient!=null)TxClient.sendMessage(jsonStr);// 发 送 json 数据包到服务器端
服务器端主要代码包括:
(1) Data4 data4 = JsonNewtonsoft.FromJSON(str); // 解析 json 内容
(2) int i=DataPackTool_MySQL.InsertData4(data4); // 存储数 据到 MySQL 数据库
3、串口收发及通信协议转换
本网关软件支持一路串口、多路节点的数据收发,在开始采集数据前,需要设置串口号、本机序列号、采样周期、节点地址批量添加等参数。网关软件和数据采集器之间是一种主从模式,网关软件为主,数据采集器为从,只要网关软件发送指令,数据采集器才会返回响应的数据。以Modbus 协议为例,协议分为发送指令和返回数据帧。其中发送指令包括传感器地址、功能码、寄存器起始地址、寄存器数量、CRC 校验,而返回的数据帧内容包括地址码、功能码、数据长度、数据以及 CRC 校验码。而功能码不仅包含读取数据,还包含修改地址、 修改串口通信比特率、设置用户标定零点、设置 scl3300 工 作模式、设置 scl3300 工作采样率等内容。知道这些协议数据包的组成后,我们定义了一种新的通信协议来构建数据包,将底层的modbus协议等解析出来的数据重新封装为一统一格式,再通过websocket、socket、mqtt等已有的通信协议传输至控制台软件或云平台。实现数据通过 MQTT 协议与云平台进行交互。协议参数配置模块负责工业协议数据的接入参数配置,数据解析模块负责对上行和下行的数据进行标准和格式的转换。
五、数据库设计
数据库设计:完整项目包含服务器端的 MySQL 数据库和边缘计算机网关软件端的 Access 数据库。网关软件为本地数据库,只包含两张表,分别是用户表(ID, myname, mypass),数据表(ID,sensorId,sensorName,first,second,third,forth,createtime),其具体表项定义分别如1和表2所示。其中,用户表用于登录验证用,数据表用于存储各节点采集的数据。
二、 再分析
工业互联网网关的主要功能是实现对工业感知层不同的异构设备进行管理监控,交互控制并将其接入互联网,从而实现对设备及工业数据的云监控、云设置,基本功能大致如下:
(1) 将感知层设备接入互联网,需要解决协议转换的问题;
(2) 对感知层设备进行管理控制,需要了解不同设备的控制命令并进行统一;
(3) 与互联网云平台进行通信,需使用MQTT、TCP等;
三、 再设计
暂且将电脑作为网关,使用电脑进行开发。
1、设备数据的帧格式:起始字符、长度、控制域、链路用户数据、校验和、结束字符等。
长度 L 包括协议标识和用户数据长度,由 2 字节组成,如下图所示
控制域 C 表示报文传输方向和所提供的传输服务类型的信息,定义见下图:
传输方向位 DIR:DIR=0:表示此帧报文是由服务提供方发出的报文; DIR=1:表示此帧报文是由服务请求方发 出的报文。
启动标志位 PRM:PRM =1:表示此帧报文来自启动站;PRM =0:表示此帧报文来自从动站。
帧校验和:帧校验和是用户数据区所有字节的八位位组算术和,不考虑溢出位。
应用层(链路用户数据)格式定义见下图 :
帧序列域 SEQ 为 1 字节,用于描述帧之间的传输序列的变化规则,由于受报文长度限制,数据无 法在一帧内传输,需要分成多帧传输(每帧都应有数据单元标识,都可以作为独立的报文处理)。SEQ 定义如下图
2、设备和云平台交互流程:
3、云平台和设备交互流程:
4、在python中,我们可以定义一个数据类来解析该数据包,如下图所示:
将解析出来的数据进行封装后可以通过MQTT传输至云平台,同时我们可以在我们的网关软件中定义许多控制类来对感知层设备进行管理设置。
5、接收数据包校验python编程:
6、接收数据包数据解析python编程: