(中国邮政集团公司 上海研究院,上海 200062)
多设备系统中的状态显示和数据传输设计
余飞
(中国邮政集团公司 上海研究院,上海 200062)
为了满足越来越多的工业设备需要进行数据传输、状态显示的需求,设计了一种工业设备状态显示和数据传输系统。利用CAN总线将设备的实时数据传送到数据传输显示板并进行状态显示,再通过Modbus RTU协议传送到西门子S7-1200 PLC上,从而完成数据的传输。该系统实现了在应用中编程,具有可连接设备多、成本低、可靠性高等特点。
CAN总线;Modbus RTU;IAP;S7-1200
随着工业4.0和中国制造2025战略的不断深入推进,工业企业的自动化、智能化水平不断提高,有越来越多的工业设备开始具备数据通信和可视化的功能,以方便现场监视和集中监控、提高操作安全性,这就要求在设计产品和系统时充分考虑到这些需求。
工业设备之间的数据通信往往具有节点多、数据量小、实时性和突发性强的特点,这就要求整个系统有较好的负载处理能力[1]。当前很多工业设备都具备通信功能,但受限于各种实际情况,大多闲置而得不到使用。本文设计了一种数据显示传输系统,能够采集工业设备运行状态并实现相应的控制。
系统的总体结构图如图1所示。各底层的设备通过CAN总线和数据传输显示板交换信息。采用CAN通信接口有如下好处:很多工业设备特别是运动控制设备都支持CAN总线,可以节约投资;CAN总线支持多主、多从工作方式,网络上的任意节点在任意时刻都可以主动地向其他节点发送信息,满足高突发性要求;采用非破坏性的总线仲裁技术,多点同时发送信息时,按优先级顺序通信,避免网络瘫痪。
数据传输显示板通过Modbus总线和PLC或HMI相连。Modbus总线是当前较为通用的现场总线,可靠性高,易于扩展,支持厂家多,程序开发也十分方便。本文中可编程逻辑器(PLC)选择西门子公司S7-1200系列作为通信机,可扩展最多3个通信模块,支持Profinet总线,并可通过交换机接入以太网。
图1 系统总体结构图
数据传输显示板结构框图如图2所示。该电路板采用意法半导体的STM32F103芯片作为主控芯片,通过SPI接口和液晶模块相连,通过CAN接口和各设备相连,通过RS485接口和PLC相连,另外保留一个RS422接口用于外部调试。
图2 数据传输显示板结构框图
2.1 CAN总线通信接口设计
CAN总线通信接口如图3所示。CAN收发器采用ADI公司的ADM3053,这款器件将双通道隔离器、CAN收发器和隔离DC/DC转换器集成于单个芯片中,采用5 V单电源供电,在CAN协议控制器与物理层总线之间创建一个完全隔离的接口,能以最高1 Mbps的速率工作。考虑到工厂相对恶劣的生产环境和设备的安装距离,本文将通信速率定在50 kbps。
CAN总线基于ISO开放系统互联模型,定义了物理层和数据链路层,一次通信能发送或接收8个字节的数据,完全能够满足设备通信的需求。应用层的功能则由用户程序来完成,主要包括初始化程序、发送程序和接收程序[2]。
图3 CAN总线接口电路图
发送程序首先将数据打包成完整的CAN报文格式,利用函数Can_Send_Msg()来实现。本函数使用的结构体变量TxMessage由CanTxMsg定义。同样在接收报文时,使用CanRxMsg类型,它们都是由库文件定义的结构体类型。对于TxMessage结构体,有如下成员:① StdID:保存的是报文的标准ID,由于文中使用的是扩展ID,故不需要对它赋值。② ExtID:保存的是报文的扩展ID,为32位无符号数,一般可以在其中放3个字节。③ IDE:用于设置报文的IDE位,即使用标准ID还是扩展ID,本文使用扩展ID。④ RTP:用于设置报文的RTP位,即确定是数据帧还是控制帧,本文发送的是数据帧。⑤ DLC:用于设置数据段的字节长度,可取的范围是0~8。⑥ Data[0]~Data[8]:这些Data数组即为CAN报文中数据段的内容,Data的数量要与DLC段设置的一致。设置好之后,调用CAN_Transmit()函数即可将数据发出。
接收程序主要放在中断函数中实现。首先在初始化函数中将FIFO0消息挂号中断使能位置1,即允许该中断。其次在中断服务函数USB_LP_CAN1_RX0_IRQHandler()中调用库函数CAN_Receive(),把FIFO0中接收到的报文读到CanRxMsg类型的全局变量RxMessage中,其接收报文结构体与发送结构体类似。
2.2 人机界面(HMI)接口设计
图4 LCD 接口电路图
本文选用的液晶模块是HS12864-20中文图形液晶模块,其控制器为台湾矽创电子的ST7920。该模块内建中文字库,支持8字符×4行中文字符显示,西文字符半宽显示,支持并行和串行接口,内部自建振荡源,具有自动电源启动复位功能。其接口图如图4所示,MCU端为主机,LCD采用串行接口控制模式,和MCU通过SPI接口相连接。由于MCU只发不收,只需要连接片选信号线PB12、时钟信号线PB13、主设备输出线PB15。PC4为液晶背光控制,PC5为复位控制[3]。
首先对液晶模块进行初始化,用于功能设定、清屏、设置游标等操作。初始化完成之后,通过SPI总线将需要显示的内容写入显示RAM(DDRAM)中。先写入地址计数器的地址,再写入需要显示的字符。MCU定时向液晶模块发送机器的状态信息,这样液晶屏幕上可以滚动显示机器的状态。
LCD模块的串口时序图如图5所示,CS是片选输入,高有效,SCLK为串行时钟输入,SID为串行数据线。当时钟SCLK上升沿到达时,传输一个数据位。无论是发送数据还是命令,一开始先传输起始字节,包括发送5个连续的“1”,此时传输计数器重置并且被同步,跟随的2位分别为读写标志位R/W及命令/数据标志位RS,最后一位是0。起始字节发送完成后,接下来的8位命令/数据被分成两个字节发送,每个字节的高4位为有效数据位,低4位则为0。
图5 LCD模块的串口时序图
2.3 IAP设计
当数据传输显示板在现场安装并使用后,根据实际需求的变化,可能需要对该电路板的固件进行更新。这时采用传统编程工具下载的方式,就会显得耗时费力。这时可以利用STM32系列芯片的在应用中编程(In Application Programming,IAP)功能,通过通信接口实现对固件的更新升级。实现IAP功能的固件包含两个部分:BootLoader和UserApp。其中BootLoader部分通过编程工具进行烧录,UserApp部分可以在烧录BootLoader后通过通信接口进行下载,用户程序放置在UserAPP中[4-5]。
STM32F103芯片的程序存储器、数据存储器、寄存器和输入/输出端口被组织在同一个4 GB的线性地址空间内,内部Flash地址起始于0x8000 0000。本文将BootLoader放在内部Flash的0x8000 0000~0x8000 4000区域,大小为16 KB,UserAPP放在0x8000 4000以后的区域。USART1为通信接口,系统上电复位后执行BootLoader程序,先检测拨码开关的电平,如为低,则等待更新UserAPP程序,否则立即执行原有的UserAPP程序,BootLoader工作流程图如图6所示。
图6 BootLoader 工作流程图
在BootLoader程序中需要执行Flash的擦除与烧写工作。STM32F103 的片内Flash 以页为单位组织,大小为1 KB。复位后Flash存储器默认为写保护状态,可以通过软件设置FLASH_CR 寄存器中的LOCK 位进行写保护。在写保护状态下只能按序在FLASH_KEYR 寄存器中写入控制字CW1=0x45670123和CW2=0xCDEF89AB,才能开启对Flash的访问权限。Flash需要擦除后再编程,最小擦除单位为页,也可以整体擦除,编程后应将Flash进行上锁保护以防止意外写入。Flash编程每次可以写入16位,FLASH_CR寄存器的PG位必须置1。闪存编程和擦除控制器(FPEC)先读出指定地址的内容并检查是否被擦除,如未被擦除则不执行编程并在FLASH_SR寄存器的PGERR位提出警告(唯一的例外是当要烧写的数值是0x0000时, 0x0000可被正确烧入且PGERR位不被置位)。FLASH_SR寄存器的EOP为1时表示编程结束。
运行代码从 BootLoader 区跳转到应用程序区时,用下面的代码设定跳转地址:
//定义UserAPP烧录初始地址
#define IAPSTART0x8004000
//关中断
_ _disable_irq();
//主堆栈指针指向复位指令地址
Jump_To_Application=(pFunction)(*(vu32*) (IAPSTART+4));
_ _set_MSP(*(vu32*) IAPSTART);
Jump_To_Application();
从BootLoader跳转到UserAPP后,在初始化阶段需要将中断向量表根据烧录地址进行偏移,系统时钟和外设中断等也必须重新初始化,因为它们是完全独立的两个程序[6]。
2.4 Modbus RTU从站设计
本文中PLC和数据传输显示板之间的通信采用Modbus RTU协议。Modbus RTU是一个基于串行总线的通信协议,对应用层、串行数据链路层以及物理层制定了标准。该协议物理层一般采用RS485半双工电路,数据链路层定义了数据帧的组成及收发,应用层定义了具体的报文传输协议,特别是功能码的定义。Modbus通信由主设备先发出消息,包括设备地址、功能代码、数据地址和CRC校验。从设备收到消息后,根据通信地址决定是否回复,回复消息包含确认的功能代码、返回数据和CRC校验。如果主设备发出的通信地址为零,则为广播消息,从设备均不回复。
上位机通过轮询各个数据传输显示板,将设备的数据收集上来,并将设置、控制命令发送下去。数据传输显示板支持0x03、0x06、0x10三种功能码,分别可以实现读保持寄存器、写单个寄存器、写多个寄存器。
建立Modbus通信表是软件设计的重要环节,由于每个参数都涉及到多台机器,将各个参数以结构体数组的方式组织起来,包含32个成员,对应于电路板所连接的32台机器。从站接收到主站发出的读写命令并进行解析,根据功能码的不同进行回复,对于写寄存器的命令则通过CAN总线下发到相应的机器中去。如果数据传输显示板从PLC接收到了无法处理的请求(比如该请求是读取一个不存在的寄存器),那么它会返回一个异常响应,通知PLC出现了何种错误[7]。
3.1 Modbus RTU 主站设计
本文中Modbus RTU主站为西门子公司的PLC S7-1200,通过在CPU上扩展一个串口模块实现。利用PLC中集成的Modbus RTU协议,应用程序直接调用相关的指令即可进行通信。
Modbus_Comm_Load指令用于接口的初始化,用来设置相关的硬件端口号、波特率、奇偶校验等参数。Modbus_Master指令用于Modbus主站利用Modbus_Comm_Load指令组态的端口进行通信,该指令对发送和接收的操作是分开的,故在程序设计中需要调用两次该指令,用户程序通过轮询Modbus_Master 指令了解传送和接收的完成情况,其指令格式如下:
“Modbus_Master_DB_Send”(REQ := “Modbus”.Send.Enable,
MB_ADDR := 1,
MODE := 2,
DATA_ADDR := 40129,
DATA_LEN := 32,
DONE => “Modbus”.Send.Done,
BUSY => “Modbus”.Send.Busy,
ERROR => “Modbus”.Send.Error,
STATUS => “Modbus”.Send.Status,
DATA_PTR := “Modbus”.Send.TX);
其中,REQ用于使能发送/接收操作,MB_ADDR用于设置Modbus从站地址,0为广播地址。DATA_ADDR和MODE参数用于共同确定Modbus消息中使用的功能代码,可以从PLC数据手册中查询。如要实现0x03功能码,则MODE为0,DATA_ADDR为Modbus寄存器地址加上40 001。DATA_LEN用于表示此请求中要访问的位数或字节数。DONE、BUSY、ERROR、STATUS均为通信过程的状态量。DATA_PTR用于指向要写入或读取的数据地址。
3.2 Profinet通信设计
图7 连接参数配置图
S7-1200系列PLC可以通过Profinet接入以太网,从而实现更广泛的网络连接。同样应用程序可以调用相应的指令完成,其发送、接收操作分别由TSEND_C、TRCV_C这两个函数完成,同时还必须完成组态中的TCP/IP连接参数配置,如图7所示。其中,端点为本机项目的名称,接口为分配给接口的名称,子网为分配给Profinet子网的名称,地址为本机的IP地址,连接类型为TCP,连接ID由系统生成,用于和背景数据块相连接,连接数据指向要发送和接收的数据结构。由于这里本机是服务器端,不需要选择主动建立连接。端口号为程序所分配的本地端口号。同样,在客户机端也要做相应的配置。
[1] 韩灵山,姜帅,江豪,等.基于Modbus的设备能耗信息化系统设计及应用[J].自动化与仪表,2016,31(11):47-49.
[2] 王庆双,蔡冬生.基于ARM的CAN通信系统的设计与实现[J].航空电子技术,2011(1):9-13.
[3] 常玉臣,郭其一.基于Modbus协议的液晶显示控制模块设计[J].工业仪表与自动化装置,2010(1):48-51.
[4] 汪晶晶,苏建徽,孙佩石.基于串口通信的 DSP 应用程序在线升级方法[J].微型机与应用,2013,32(14):15-17,24.
[5] 杨晶,何鹏举,朱升林,等.具有远程升级功能的网络化智能温控器[J].测控技术,2012,31(11):6-10.
[6] 吴瑞娜,张建奇,梁喜军.基于STM32的GPRS远程在线升级系统设计与实现[J].自动化技术与应用,2015,34(12):34-37.
[7] 刘生辉,王克英,廖颜深.智能开关柜操控装置Modbus-RTU通讯协议的设计[J].电测与仪表,2010,47(7):77-80.
余飞(工程师),主要从事物流自动化设备的研究与开发。
DesignofStatusDisplayandDataTransmissionSystemforMulti-device
YuFei
(Shanghai Research Institute,China Post Group,Shanghai 200062,China)
As more and more industrial equipments need data transmission and status display,a status display and data transmission system is designed in the paper.The CAN bus is used to transmit real-time data from equipment to the data transmission and status display board for status display,then the data is transmitted to the SIEMENS S7-1200 PLC through the Modbus RTU protocol.The system can be programmed in application,and has the ability to connect more equipment with low cost and high reliability.
CAN bus;Modbus RTU;IAP;S7-1200
TP2
A
2017-08-25)