APP下载

基于ModBus RTU协议的卷烟厂配电参数监视系统

2021-09-09许连阁

昆明冶金高等专科学校学报 2021年3期
关键词:监视系统卷烟厂数码管

许连阁

(辽宁机电职业技术学院自动控制工程系,辽宁 丹东 118009)

0 引 言

随着工业自动化水平的不断提高,电网的智能化也在不断提高。供电系统的可靠运行关乎卷烟厂的经济效益,所以监控卷烟厂电力系统的供电参数是否正常尤为重要。1979年,Modicon公司为使用PLC通信发表了一种通信协议ModBus,此协议分为ASCⅡ、TCP和RTU 3种形式,其中ModBus RTU因其简单、在单片机中容易实现等特点最为常用。在卷烟厂配电参数监视系统中采用ModBus RTU协议实现PLC[1]与单片机的数据通信[2],PLC采集到的配电参数通过RS485接口ModBus RTU协议[3]发送给单片机,并通过多位数码管显示。监视室里的工作人员可以通过数码管显示的配电参数的数值来判断是否存在问题并及时预警。

1 变配电系统智能化系统拓扑

变配电系统所有设备均提供标准的RS-485通讯接口ModBus RTU协议,配置若干个数据采集主站,使用通讯和直接控制的方式完成系统内所有数据和状态的采集以及设备的远程控制功能。配电系统拓扑如图1所示。

图1 配电系统拓扑Fig.1 Distribution system topology

系统采取冗余结构的数据采集与监控服务器SCADA,各配电分系统通过配电用数据交换机进行数据链接,每个配电分系统由1套Siemens S7-300PLC作为其主站,每个主站通过CP343-1以太网模块与上位机通讯;通过ProFiBus-DP网络链接远程的分布式I/O,负责对低压断路器进行状态采集和远程控制,包括:断路器本地/远控控制方式、断路器状态(分/合/储能/故障)、故障状态(短路跳闸、过载跳闸)、分/合闸控制(具备远程控制的回路)等;通过配置的若干个ModBus RTU主站通讯节点模块(CP341),负责所有回路电量仪表、变压器温控器及功率补偿控制器等设备的数据采集,以及模拟屏配电参数数据显示。

本文重点关注其中模拟屏配电参数数据显示部分,这部分的上位机是总变电所高压系统中的PLC,通过CP341模块将ModBus RTU通讯数据传输给模拟屏中各个显示仪表,每个显示仪表通过接收不同ModBus指令显示不同的电量参数。下面将详细介绍具有RS-485通讯接口ModBus RTU协议通讯功能的电量显示仪表。

2 电量显示仪表硬件电路

基于ModBus RTU协议的卷烟厂配电参数监视系统是由多个相同的单片机应用系统组成,下面以其中一个为例,对硬件进行说明:以STC15W4K32S4单片机为控制核心[4],具有数码管显示电路、通讯电路、稳压电路、DS1302时钟电路和按键等模块,可通过ModBus RTU协议实现PLC上位机与单片机之间的数据通信,最终数码管显示配电参数。显示电路采用 2.3 英寸共阳型数码管作为显示器件,选用74LS373和ULN2803驱动数码管且锁存允许端提供共阳型数码管位选,显示内容包括显示值、小数点位置、正数或负数、是否闪烁,以及亮度调节等信息。DS1302时钟电路的作用是系统运行天数和系统时间,按键实现的功能是设置本机地址和波特率。

基于ModBus RTU协议的卷烟厂配电参数监视系统需要监视的参数较多,PLC与多个单片机进行通信,需要在差分信号和TTL电平之间进行电平转换。因为使用RS-485端口,半双工通信模式,所以选择MAX487芯片。作为RS-485通信的收发器,MAX487芯片在1条总线上最多可允许挂接128个收发器,采用差分传输方式通信,当接收器使能端为低电平时,驱动器输入A和B两端电压差>200 mV 时,RO为高电平;驱动器输入A和B两端电压差<200 mV 时,RO为低电平。DE为MAX487发送器使能端,为高电平时向外发送数据。驱动器输入A和B两端采用共模抗干扰,利用瞬态抑制二极管D1、D2、D3抑制A、B两端干扰电压。单片机应用系统硬件电路如图2所示。

3 ModBus协议在程序中的应用

3.1 ModBus协议简介

在工业自动控制领域中,ModBus串行通信协议因无版权要求、易于部署和维护、字节限制少等优点,应用非常广泛。它最初是由Modicon(现在的Schneider Electric)公司于1979年为使用可编程逻辑控制器通信而发布,并且已经成为工业领域通信协议的业界标准。ModBus通信协议分为ASCⅡ和RTU 2种传输模式,ASCⅡ模式是美国标准信息交换代码模式通信,RTU模式是远程终端单元模式通信[5],后者的优点是表示相同信息需要较少位数,相同波特率下数据流量更大。在本系统中,数字显示终端的上位机是Siemens的S7-300,其通信接口完全可以作为1个ModBus通信的master节点,可以驱动大约240个作为数字显示终端的slave节点,所以卷烟厂配电参数监视系统选择ModBus RTU协议进行通讯。

3.2 ModBus RTU的传输格式

电量显示仪表所显示的参数均来自于上位机的PLC发出的指令和数据,显示仪表与主机PLC之间制定了符合ModBus RTU协议的通信数据传输格式,如表1所示。

表1 配电参数的报传输格式Tab.1 Transmission format of distribution parameters

4 系统软件设计

4.1 ModBus通讯结构及通讯程序设计

模拟屏是一种应用于配电室、变电所和变电站中的显示装置,主要功能是用于模拟显示实际线路的运行状态。模拟屏上有电气主结线图,有能进行操作前预演的手柄(俗称钮子开关)和能指示设备状态的指示灯、各种配电参数实时显示等。

在模拟屏上,电量显示仪表有200余块,其信息均由上位机PLC的ModBus节点模块通过RS-485网络传输下发。结构如图3所示。

图3 模拟屏通讯链路结构Fig.3 Structure of analog screen communication link

以STC15F32S4单片机为例(后续程序均如此),串口通讯初始化子程序如下:

void UartInit(void)

{

SADDR=Eeprom_Read(2,0);//读取本机地址

SCON=0x50;//设置为8位数据可变波特率

AUXR |=0x01;//设置T2作为波特率发生器

AUXR |=0x04;//设置T2为1T模式

P_SW1=0x40;//串口1 切换到 P3.6 P3.7

T2L=0xE0;//波特率为9 600 bps时的常数

T2H =0xFE;

ModBus_time_set=4;//设置报文空闲间隔常数[7]

AUXR |=0x10;//启动定时器2

ES=1;//打开串口中断

}

4.2 通信数据的校验

在数据通信中难免因工作环境干扰造成数据错误,在传输数据中增加校验是有效感知错误发生的必要手段。笔者在ModBus RTU通信协议中采用了检出错误能力更强的循环冗余校验码,即CRC校验码的方法,就是对每一帧数据的后面附加一个 2 B 的数据,生成一个新帧发送给接收端。这个添加的 2 B 数据是经过CRC算法得到的校验码,可以通过如下程序生成,CRC校验码生成的算法这里不再赘述。

unsigned int CRC16 (unsigned char *puchMsgg,unsigned int usDataLen )

{

//*puchMsgg :用于计算 CRC 的报文的指针

//usDataLen :报文中的字节数

unsigned char uchCRCHi =0xFF ;/* CRC 的高字节初始化 */

unsigned char uchCRCLo =0xFF ;/* CRC 的低字节初始化 */

unsigned uIndex;/* CRC 查询表索引号 */

while (usDataLen--)/* 要完成整个报文缓冲区 */

{

uIndex =uchCRCLo ^ *puchMsgg++ ;/* 计算 CRC 表索引号*/

uchCRCLo =uchCRCHi ^ auchCRCHi[uIndex] ;/*auchCRCHi[] 高字节的CRC表*/

uchCRCHi =auchCRCLo[uIndex] ;/*auchCRCLo[] 低字节的CRC表*/

}

return (uchCRCLo <<8 |uchCRCHi);/* 函数以 unsigned short 类型返回 CRC码 */

}

4.3 串口中断程序设计

电量显示仪表在工作中,持续地接收来自PLC主机的指令和数据,并且这些都是随机发生的,因此本研究设置了串口中断服务程序,以完成指令和数据接收与应答发送任务。在程序中设置了串行数据接收数组uart_ren[]、串行数据发送数组uart_sent[],需要对接收数据进行处理时,访问接收数组uart_ren[],需要发送应答信息时,将数据事先填充到发送数组uart_sent[]即可。以下是串行通讯中断服务程序:

void Uart()interrupt 4

{

if (RI)//数据接收中断

{

RI=0;

ModBus_over=0;ModBus_time=0;//通信超时标志复位

uart_ren[uart_ren_no]=SBUF;//保存接收数据到数组

if(++uart_ren_no>7)uart_ren_ok=1;//接收数据帧结束,置位接收结束标志位

}

if(TI)//数据发送中断

{

TI =0;

if(sent_busy)//正在发送标志位

{

SBUF=uart_sent[++uart_sent_no];//添加下一个数据到串口缓冲器

if(uart_sent_no>=7)//发送一帧数据结束判断

{

uart_sent_ok=1;sent_busy=0;//数据帧发送结束标志置位

}

}

}

}

4.4 ModBus通信命令解析程序设计

在电量显示仪表运行中,监视串口数据帧接收结束标志位的状态,当接收到一帧数据后,要执行ModBus通讯命令解析程序。

在命令解析程序中,依次判断循环校验码CRC是否合格、接收数据帧中地址是否与本机符合、接收的命令判断,以及执行显示命令。ModBus通信命令解析程序如下:

void ModBus_cmd()

{

//------CRC校验 ---------

temp=uart_ren[6]<<8;//取接收到的CRC校验码

temp=temp+uart_ren[7];//组合收到的CRC校验码

if(temp!=CRC16(uart_ren,6))return;//校验,若不合格则直接退出

//---CRC合格,地址解析 ------

if(uart_ren[0]==SADDR)//接收地址与本机地址比较

{

//---命令解析与执行 -----

switch(uart_ren[1])

{

case 10://电压电流功率显示,此处程序略

case 20://安全天数显示

case 30://当前日期显示

case 31://当前时间显示

case 40://亮度与闪烁设置

default:

}

//----应答主机-------

for(i=0;i<8;i++)uart_sent[i]=uart_ren[i];//将接收数据返回给主机,作为应答信息

TI=0;uart_sent_no=0;

SBUF=uart_sent[uart_sent_no];//发送第一个数据

sent_busy=1;//置位正在发送状态的标志位

}

else if(uart_ren[0]==0 ||uart_ren[0]==254)//广播状态

{

//显示FFFF,并闪烁,此处程序略

}

}

5 系统测试

以上设计实现了基于ModBus RTU协议的卷烟厂模拟屏配电参数监视系统:首先测试数码管能正常显示,其次测试系统能正常通信,最后整体测试。通过测试,基于ModBus RTU协议的卷烟厂配电参数监视系统能够准确显示卷烟厂的配电参数,并且该监视系统运行稳定,验证了该监视系统的可行性。

6 结 语

本研究基于ModBus RTU协议的卷烟厂配电参数监视系统完成了硬件和软件的设计,实现了对该卷烟厂配电参数的实时监控,通过ModBus RTU协议实现各参数的通信传输,并通过显示电路进行监视,系统通过对显示电路的硬件和软件的改变可以实现对多位数据进行监视,可移植性强,具有一定的推广价值。

猜你喜欢

监视系统卷烟厂数码管
物理项目教学设计,用单片机控制四位数码管显示
高中作文选粹
基于51单片机的分数计数器设计
Arduino编程
MC9S08FL16单片机数码管静态显示分析
美国天基空间监视系统概述与分析
基于 PLC—MCGS 技术的电梯监控系统
本特利3500系统仪在化工生产中的应用
双冷源温湿度独立控制系统在卷烟厂的节能应用分析
一种高温高湿废气的除尘方法及其在卷烟厂的应用