基于Modbus与ZigBee的通信冗余过程控制系统开发
qiyuwang 2024-11-22 19:50 9 浏览 0 评论
摘 要:针对传统的工业现场过程控制系统布线量大、成本高和维护困难等问题,提出了一种采用Modbus总线技术、ZigBee无线技术和STM32技术的通信冗余监控系统。该系统可实现两种形式的通信:Modbus总线通信和作为通信冗余的ZigBee无线通信,提高了系统的稳定性。下位机将工业现场仪器仪表采集的数据信息集中传输给上位机,便于对现场进行监测。系统具有一定的隔离、抗干扰和防雷击保护措施,适用于工业现场。
0 引言
在传统的过程控制系统中,对系统的实时监测和控制是最重要的两个环节,但是现场设备的分布式布局造成了布线量大、设备维护困难以及可靠性低等缺点,特别是数据的传输存在很大的安全隐患。根据上述现状,笔者以STM32F103RCT6芯片和CC2530芯片作为系统控制器,设计了一套基于Modbus和ZigBee的通信冗余过程监控系统替代传统的过程控制系统。
1 通信冗余过程控制系统架构
基于Modbus和ZigBee的通信冗余过程控制系统主要分为现场设备、STM32处理器模块、ZigBee无线通信模块和上位机四个部分,系统整体架构如图1所示。通过图1可以看出,现场电气设备通过I/O口连接到现场的终端模块,由终端模块负责采集现场设备的数据以及对现场设备输出控制指令。终端模块通过基于Modbus协议的RS-485总线或ZigBee无线的方式与网关模块进行通信,实现了通信冗余的功能。网关模块通过RS-485总线与上位机通信。上位机监控系统是由Microsoft Visual Studio 2010编写的界面监控软件,数据传输以RS-485总线通信为核心,实现了采集数据信息的显示、人机交互以及溢出报警等功能。
2 下位机硬件电路设计
下位机硬件电路主控芯片采用基于ARM内核Cortex-M3的STM32F10x系列F103RCT6芯片。该芯片拥有256 KB的Flash存储器和48 KB RAM,具有多路定时器以及输入输出端口,并且具有功耗低、多线程等优点,满足工业现场设备的数据采集性能要求。ZigBee无线通信模块采用的主控芯片是TI公司生产的CC2530芯片。CC2530内部搭载了增强型8051CPU,内置德州仪器的ZigBee协议栈(Z-Stack-TM),并且具有优良的RF性能,适用于ZigBee无线通信的解决方案[1]。
下位机硬件电路示意图如图2所示,整个系统的正常工作都由STM32芯片控制。在下位机硬件电路中,要保证系统的正常运行,除去STM32和CC2530芯片基本的外围电路,还需要其他电路模块,如电源模块、RS485收发模块、数据采集模块等。
电池冗余备用电路如图3所示。为保证系统在工业现场的连续稳定工作,设计了电池冗余的备用电路,即外部掉电时使用电池供电,外部未掉电时电路给电池充电。电池采用可反复充电的AAA锂电池,其中TP4075为电源充电芯片,A3401为P沟道MOS管,当外部未掉电时处于截断状态;当外部掉电时,MOS管处于导通状态,电池开始工作。
电源防雷击保护电路如图4所示。外部24 V电源经过电源防雷击保护电路后才可以进入系统电路,这一部分有效防止了因雷击产生的高浪涌、快速脉冲以及静电对系统电路的损坏。
光耦隔离电路如图5所示。应对工业现场恶劣的环境,信号的输入和输出需要经过隔离,否则会产生很大的干扰,影响系统数据采集和控制的准确性。数字信号的隔离采用光耦隔离器PS2801进行信号的隔离。电路中的下拉电阻R43确保在没有信号输入时过滤由引脚自身引起的信号干扰。
3 下位机通信软件设计
3.1 Modbus通信软件设计
下位机终端模块与网关模块之间的通信优先使用基于Modbus协议的RS-485总线进行传输。RS-485收发器收发数据的方式为平衡发送和差分接收,因此具有较好的抗共模干扰能力,即有较好的抗噪声干扰能力,并且其灵敏度极高,所以RS-485总线在中长距离的通信中备受欢迎。
Modbus协议是一种通用的标准协议,它使得控制器与控制器之间的通信成为可能,并且使不同设备生产商的控制设备之间进行通信、互相连接成网络、实现集中监控成为了现实[2]。Modbus协议定义了其工作方式为主从模式,在整个通信网络中,只允许有一个主设备,其余则为从设备,该系统中网关模块为主设备,终端模块为从设备。
该系统采用的通信方式是广播方式,即网关模块以广播的方式对所有终端模块发送查询指令。在Modbus网络中,每一个设备都有一个唯一的地址,终端模块通过对比查询指令中的设备地址和自己的地址是否相同来确定指令是否发送给自己[3]。
系统信息传输方式采用Modbus RTU方式,在该模式中每8 bit字节被定义为两个4 bit的十六进制字符[4],其通信的格式帧如图6所示。
系统中Modbus协议是由移植的FreeModbus协议栈来实现,FreeModbus协议栈实现了Modbus协议函数的封装,开发时只需要调用相应的API函数,其所支持的协议功能码完全满足本系统的设计需求,该系统应用到的功能码有0x01(读线圈)、0x02(读开关量)、0x03(读写保持寄存器)、0x04(读输入寄存器)。协议功能码通过对应的处理函数和回调函数实现数据的读或写。图7所示为RS-485总线运用Modbus协议栈进行串口采集任务的流程图。
3.2 ZigBee通信软件设计
作为系统冗余的通信方式,当Modbus总线通信失效时,ZigBee无线通信会被激活(空闲时进入休眠),用来完成终端模块与网关模块之前的数据通信,网络通信的切换由网关模块控制。
ZigBee是一种基于IEEE802.15.4标准的低功耗局域网协议,其具有低成本、低功耗以及组网灵活等优点,在无线数据传输方案中应用广泛。
在ZigBee组网网络中,设备根据其功能可以分为三种不同的角色:协调器节点、终端节点和路由器节点。协调器节点是ZigBee网络不可缺少的一环,在ZigBee网络中有且仅有一个,主要功能是网络的建立和维护。终端节点主要负责接收协调器节点命令,并响应相应的数据信息。路由器节点主要负责选取网络通信信道以及转发数据。ZigBee网络的拓扑结构主要有星型、网状型和树状型三种[5]。
该系统中,网关模块作为协调器,终端模块作为终端节点,因为网络结构比较简单,所以网络拓扑结构为星型结构。协调器组网方式为广播,终端节点组网方式为点播。
无论是协调器还是终端节点,通信软件的开发都是基于Z-Stack协议栈,协议栈已经实现了ZigBee的通信协议,用户可以使用其提供的API函数进行应用程序开发。图8为Z-Stack协议栈的运行流程图。
协议栈设计了一个管理任务处理函数的数组taskArr,开发者需要将任务处理函数加入数组序列。该数组简化后定义如下:
const pTaskEventHandlerFn tasksArr = {
macEventLoop,
nwk_event_loop,
Hal_ProcessEvent,
ZigBeeApp_ProcessEvent };
其中ZigBeeApp_ProcessEvent为该系统设计的通信处理函数。
4 上位机软件设计
上位机软件的设计是在Microsoft Visual Studio 2010开发平台下使用C#语言进行的,VS是目前最流行的Windows平台应用程序的集成开发环境。C#语言集成了VB语言的可视化操作和C++的高运行效率,成为了当前.NET开发的首选语言[6]。
上位机软件主要实现数据的可视化和更好的人机交互,下位机发送的数据很难直观地表达出当前系统的工作状态,利用VS2010软件编写上位机监控界面,使用Chart控件实现数据的图表化显示,同时设置报警溢出阈值,及时发现系统异常进而进行维护。上位机监控界面功能框图如图9所示。
5 结束语
本文采用Modbus总线技术和ZigBee无线技术设计了一种通信冗余过程控制系统,下位机实现数据的采集和通信的冗余,上位机实现数据的监测和设备控制。硬件电路具有一定的抗干扰、防雷击能力,以应对复杂的工业现场环境,该系统有一定的推广价值,为解决传统过程控制系统中的诸多难题提供了解决方案。
参考文献
[1] 李俊斌,胡永忠.基于CC2530的ZigBee通信网络的应用设计[J].电子设计工程,2011,19(16):108-111.
[2] 朱懿,蒋念平.Modbus协议在工业控制系统中的应用[J].微计算机信息,2006(22):118-120.
[3] 卢文俊,冷杉,杨建军.基于Modbus协议的控制器远程监控系统[J].电力自动化设备,2003,23(6):54-56.
[4] 薛海涛,和卫星,陈晓平.数据采集系统中Modbus协议的实现[J].微计算机信息,2007,23(10-1):68-69.
[5] 章伟聪,俞新武,李忠成.基于CC2530及ZigBee协议栈设计无线网络传感器节点[J].计算机系统应用,2011,20(7):184-187.
[6] 刘奇,林岗.基于Visual Studio 2010的UG二次开发研究[J].计算机应用,2015,34(1):40-41.
相关推荐
- # 安装打开 ubuntu-22.04.3-LTS 报错 解决方案
-
#安装打开ubuntu-22.04.3-LTS报错解决方案WslRegisterDistributionfailedwitherror:0x800701bcError:0x80070...
- 利用阿里云镜像在ubuntu上安装Docker
-
简介:...
- 如何将Ubuntu Kylin(优麒麟)19.10系统升级到20.04版本
-
UbuntuKylin系统使用一段时间后,有新的版本发布,如何将现有的UbuntuKylin系统升级到最新版本?可以通过下面的方法进行升级。1.先查看相关的UbuntuKylin系统版本情况。使...
- Ubuntu 16.10内部代号确认为Yakkety Yak
-
在正式宣布Ubuntu16.04LTS(XenialXerus)的当天,Canonical创始人MarkShuttleworth还非常开心的在个人微博上宣布Ubuntu下个版本16.10的内...
- 如何在win11的wsl上装ubuntu(怎么在windows上安装ubuntu)
-
在Windows11的WSL(WindowsSubsystemforLinux)上安装Ubuntu非常简单。以下是详细的步骤:---...
- Win11学院:如何在Windows 11上使用WSL安装Ubuntu
-
IT之家2月18日消息,科技媒体pureinfotech昨日(2月17日)发布博文,介绍了3中简便的方法,让你轻松在Windows11系统中,使用WindowsSubs...
- 如何查看Linux的IP地址(如何查看Linux的ip地址)
-
本头条号每天坚持更新原创干货技术文章,欢迎关注本头条号"Linux学习教程",公众号名称“Linux入门学习教程"。...
- 怎么看电脑系统?(怎么看电脑系统配置)
-
要查看电脑的操作系统信息,可以按照以下步骤操作,根据不同的操作系统选择对应的方法:一、Windows系统通过系统属性查看右键点击桌面上的“此电脑”(或“我的电脑”)图标,选择“属性”。在打开的...
- 如何查询 Linux 内核版本?这些命令一定要会!
-
Linux内核是操作系统的核心,负责管理硬件资源、调度进程、处理系统调用等关键任务。不同的内核版本可能支持不同的硬件特性、提供新的功能,或者修复了已知的安全漏洞。以下是查询内核版本的几个常见场景:...
- 深度剖析:Linux下查看系统版本与CPU架构
-
在Linux系统管理、维护以及软件部署的过程中,精准掌握系统版本和CPU架构是极为关键的基础操作。这些信息不仅有助于我们深入了解系统特性、判断软件兼容性,还能为后续的软件安装、性能优化提供重要依据。接...
- 504 错误代码解析与应对策略(504错误咋解决)
-
在互联网的使用过程中,用户偶尔会遭遇各种错误提示,其中504错误代码是较为常见的一种。504错误并非意味着网站被屏蔽,它实际上是指服务器在规定时间内未能从上游服务器获取响应,专业术语称为“Ga...
- 猎聘APP和官网崩了?回应:正对部分职位整改,临时域名可登录
-
10月12日,有网友反映猎聘网无法打开,猎聘APP无法登录。截至10月14日,仍有网友不断向猎聘官方微博下反映该情况,而猎聘官方微博未发布相关情况说明,只是在微博内对反映该情况的用户进行回复,“抱歉,...
- 域名解析的原理是什么?域名解析的流程是怎样的?
-
域名解析是网站正常运行的关键因素,因此网站管理者了解域名解析的原理和流程对于做好域名管理、解决常见解析问题,保障网站的正常运转十分必要。那么域名解析的原理是什么?域名解析的流程是怎样的?接下来,中科三...
- Linux无法解析域名的解决办法(linux 不能解析域名)
-
如果由于误操作,删除了系统原有的dhcp相关设置就无法正常解析域名。 此时,需要手动修改配置文件: /etc/resolv.conf 将域名解析服务器手动添加到配置文件中 该文件是DNS域名解...
- 域名劫持是什么?(域名劫持是什么)
-
域名劫持是互联网攻击的一种方式,通过攻击域名解析服务器(DNS),或伪造域名解析服务器(DNS)的方法,把目标网站域名解析到错误的地址从而实现用户无法访问目标网站的目的。说的直白些,域名劫持,就是把互...
你 发表评论:
欢迎- 一周热门
- 最近发表
-
- # 安装打开 ubuntu-22.04.3-LTS 报错 解决方案
- 利用阿里云镜像在ubuntu上安装Docker
- 如何将Ubuntu Kylin(优麒麟)19.10系统升级到20.04版本
- Ubuntu 16.10内部代号确认为Yakkety Yak
- 如何在win11的wsl上装ubuntu(怎么在windows上安装ubuntu)
- Win11学院:如何在Windows 11上使用WSL安装Ubuntu
- 如何查看Linux的IP地址(如何查看Linux的ip地址)
- 怎么看电脑系统?(怎么看电脑系统配置)
- 如何查询 Linux 内核版本?这些命令一定要会!
- 深度剖析:Linux下查看系统版本与CPU架构
- 标签列表
-
- navicat无法连接mysql服务器 (65)
- 下横线怎么打 (71)
- flash插件怎么安装 (60)
- lol体验服怎么进 (66)
- ae插件怎么安装 (62)
- yum卸载 (75)
- .key文件 (63)
- cad一打开就致命错误是怎么回事 (61)
- rpm文件怎么安装 (66)
- linux取消挂载 (81)
- ie代理配置错误 (61)
- ajax error (67)
- centos7 重启网络 (67)
- centos6下载 (58)
- mysql 外网访问权限 (69)
- centos查看内核版本 (61)
- ps错误16 (66)
- nodejs读取json文件 (64)
- centos7 1810 (59)
- 加载com加载项时运行错误 (67)
- php打乱数组顺序 (68)
- cad安装失败怎么解决 (58)
- 因文件头错误而不能打开怎么解决 (68)
- js判断字符串为空 (62)
- centos查看端口 (64)