基于32位MCU的XLPE生产线中Modbus的实现

2020-11-13 02:02胡科幻石景龙王向超齐文斌
吉林大学学报(信息科学版) 2020年2期
关键词:调速器报文通讯

胡科幻, 石景龙, 苗 政, 徐 信, 王向超, 齐文斌, 张 军

(1. 吉林大学 电子科学与工程学院, 长春 130012; 2. 白城福佳科技有限公司 工程技术部, 吉林 白城 137000;3. 吉林电子信息职业技术学院 信息中心, 吉林 吉林 132001)

0 引 言

目前我国正处于工业自动化控制的高速发展时期。自动化控制主要是通过中央处理器发出控制指令, 生产线上的设备根据中央处理器的指令完成相应动作。其中交联电缆生产线的自动化控制是工业自动化控制成功与成熟的重大体现。在交联电缆生产线等自动控制系统中, 主要是针对生产线速度以及温度的控制。其中对生产线速度控制依赖于对电机的控制, 这是生产线运作的基础和前提, 同时也是生产线能否高效生产的重要保障, 而电机的驱动则是由专门的直流调速器实现的, 因此一个可靠稳定交联电缆生产线控制系统对速度的控制是通过中央处理器与直流调速器的通讯实现的。

32位MCU是一种高性能、 低功耗、 低成本的嵌入式应用芯片, 被广泛的作为中央控制器应用于自动控制系统, 工业控制等领域[1-2]。直流调速器是交联电缆生产线自动化控制系统中必不可少的电机驱动设备, 是连接中央处理器与各电机模块之间的桥梁, 并为电机控制提供支持[3-4]。32位MCU与直流调速器之间的通讯有直接的模拟量控制方式, 但由于模拟量控制抗干扰能力以及传输距离的限制, 并不能满足工业自动化控制系统的工作环境。因此笔者就32位MCU与直流调速器通讯问题给出解决方案, 其硬件电路基于RS485硬件结构, 软件设计基于Modbus总线协议, 并设计出单个MCU控制多个直流调速器的一主多从通讯协议。

1 系统整体结构

笔者阐述一种基于RS485串行口的物理硬件接口电路实现的Modbus总线协议[5-7]。RS485电平需要电平转换芯片才可以被STM32驱动, 笔者使用SP3485芯片作为485电平转换。RS485的电平转换芯片电路如图1所示, 其中TX, RX分别为发送端和接收端, RE为使能端, AB两线为数据传输线。RS485通信原理如图2所示, 将TTL电平信号转化成差分信号A/B线进行传输, 根据A/B线的电压差标定数据信息(A线电压>B线电压标定输出为1, A线电压

图1 RS485电平转换芯片 图2 RS485通信原理图 Fig.1 RS485 level shifting chip Fig.2 RS485 communication schematic

通讯系统框架如图3所示, 其中STM32、 ETD790P分别为系统的主机和从机, 物理层基于RS485总线, 应用层基于Modbus应用协议实现整个通讯系统的设计。主机通过Modbus应用协议将命令发送到从机, 从机解析协议并做出响应回传到主机, 主机根据应用协议解析从机回应的数据, 即是整个通讯系统的实现过程。

图3 通讯系统框架图Fig.3 Communication system framework

2 Modbus总线协议

2.1 Modbus简介

在我国, Modbus总线协议[3-4,8-14]已经是国家标准, 也是工业史上首个用于工业现场的总线协议, 一般应用于各种数据采集和过程监控。笔者将其用于32位MCU与直流调速器的数据通讯方向。

根据7层OSI通信模型, Modbus标准模型包括应用层、 数据链路层和物理层, 其中应用层是Modbus应用协议; 数据链路层是主-从协议; 而物理层支持不同的物理接口如RS485(笔者选用)、 RS232等。其中主-从协议是笔者设计的关键, 具体表现为在同一时刻, 只有一个主节点连接于总线, 一个或多个子节点(最多247个)连接于同一个串行总线, 主节点在同一时刻只会发起一个Modbus事务处理, 从节点在没有收到主节点的请求时并不主动发送数据, 也不与其他子节点通信。

2.2 Modbus帧描述

图4 Modbus通讯协议数据单元Fig.4 Modbus communication protocol data unit

Modbus通讯协议数据单元如图4所示, Modbus应用协议所定义的最基本的数据单元(PDU: Protocol Data Unit)包括功能码段和数据段, 笔者使用到的数据单元包括地址码、 功能码、 数据段以及错误校验码。Modbus合法的地址码为0~247, 主节点通过将子节点的地址放到报文的地址码处对子节点寻址, 子节点返回应答时, 将自己的地址放在应答报文的地址码以让主节点知道哪个子节点在回答; 功能码指明服务器要执行的命令; 数据在功能码后面表示功能码含有请求和响应参数; 错误检验码是对报文进行冗余校验的结果。

Modbus有RTU(Remote Terminal Unit)和ASCII(American Standard Code for Information Interchange)两种模式进行串行传输, 这两种模式均定义了信息如何打包为报文以及如何进行解码。笔者选用RTU模式传输, 此模式下传输数据密度大, 在相同的波特率下吞吐率比ASCII模式高。RTU报文帧格式如图5所示, 其中报文构造由发送设备将帧定义为带有起始和结束标记的帧, 这使设备可以准确地检测报文的起始与结束, 一帧报文必须以连续的字符流发送, 如果一帧数据中的两个字符之间的空闲间隔大于1.5个字符时间, 则报文帧被认为不完整应该被丢弃, 而两个报文帧之间至少3.5个空闲字符以间隔区分两帧报文。

图5 RTU报文帧格式Fig.5 RTU message frame format

3 通讯协议设计

RTU模式传输状态如图6所示, 其中从初始态到空闲态转换需要3.5个字符时间定时超时, 这可以保证两个报文帧之间的时间满足大于传送3.5个字符时间, 空闲态是没有发送接收任务的状态(当无字符传输时间超过3.5个字符时, 通信链路被认为在空闲态); 此时在链路上检测到的任何传输的字符被定义为帧起始, 有字符传输时链路变为活动态; 当链路再次无字符传输时间超过3.5个字符的时间时, 被定义为帧结束; 帧结束后, 传输的数据在1.5个字符时间完成CRC(Cydic Redundancy Check)计算和检验; 然后, 分析地址域以确定帧是否发往此设备, 如果不是, 则丢弃此帧。通讯协议的设计是根据RTU模式的报文帧格式以及传输状态设计的, 这种设计方法标准化程度高, 可移植性强。

图6 RTU模式传输状态图Fig.6 RTU mode transmission status diagram

图7 程序流程图Fig.7 Program flow chart

笔者设计32位MCU与直流调速器通讯的Modbus实现方法是将32位MCU作为主机设备, 直流调速器作为从机设备, 从机的Modbus应用协议已集成, 因此只需设计主机的通讯协议即可。笔者设计的通讯协议整体程序流程图如图7所示, 首先由STM32作为主机系统对软硬件初始化, 这里主要包括串口通讯、 中断服务、 定时器和I/O端口等初始化; 然后由主机向从机发送操作指令, 笔者涉及的操作指令主要包括从机寄存器的读、 写操作(具体涉及到电机转速、 电流、 转矩等参数寄存器); 检测是否发送超时, 若发送超时重新发送, 发送正常则等待从机应答; 主机接收从机的应答数据; 因为主机并不知道从机数据何时发送完毕, 根据RTU模式数据传输规则, 判断接收字符时间间隔是否超过3.5个字符时间, 未超过则继续接收, 超过则判定本次应答数据接收完毕; 然后对接收到的字符校验是否正确。这里笔者设计采用两级校验, 首先是对接收到字符个数的校验, 个数校验成功再进行CRC校验; 应答数据接收正确后进行通讯的应用层协议分析执行。

4 实验数据分析

笔者设计的通讯协议旨在解决MCU与直流调速器的通讯问题。实验是基于STM32作为主机与PC端Modbus从机模拟器通讯证实笔者实现的可行性以及可靠性, 这里选取一组数据(主机发送0x 01 01 00 01 00 04 6C 09)进行详细说明。

图8 示波器监测主机发送报文Fig.8 The oscilloscope monitors thehost to send messages

该实验示波器监测主机发送报文如图8所示。主机发送报文的波形, 一个报文帧是8个字符, 1个字符是10位, 包括1位起始位、 8位数据位、 1位停止位, 起始位总是低电平, 结束位是高电平, 8位数据低位在前。如图8标出的第1个字符, 起始位是低电平, 之后是1个高电平和7个低电平, 最后一位是结束位高电平, 因此中间数据位是1000 0000, 由于低位在前, 所以传输数据是0000 0001, 也就是0x01; 再如图8第7个字符, 起始位低电平, 之后高低电平对应数据为0011 0110, 最后一位是结束位高电平, 因此传输的数据是0110 1100, 即0x6C。同理可以分析出示波器上监测的数据是0x 01 01 00 01 00 04 6C 09。

PC端Modbus Slave从机模拟器监测数据如图9所示。其中Modbus Slave接收到的数据为0x 01 01 00 01 00 04 6C 09, 响应功能码后发送给主机的数据为0x 01 01 01 03 11 89, 并且接收到主机发送的报文含义为01H地址的从机执行01H功能码。具体执行的命令为从起始地址0001H取0004H个线圈寄存器的当前状态, 如图9所示, 4个线圈寄存器的状态分别为1100。因此Modbus Slave给主机回传报文为01H地址从机执行01H功能码, 为主机返回01H字节数据, 具体数据为03H(03H对应二进制00000011, 即4个线圈寄存器状态)。主机串口监测数据如图10所示。从图10中可以看出, 主机发送数据为0x 01 01 00 01 00 04 6C 09, 收到的从机回传数据为0x 01 01 01 03 11 89, 这表明主机完成报文的发送并且从机接收到报文作出回应, 并且主机成功接收到从机数据。

为验证所设计的通讯方式的可靠性, 笔者进行了针对不同功能码的多次重复实验, 发送与接收可靠性实验数据如表1所示。从表1中可看出, 在不同功能码下, 主机可以成功的将发送报文帧发送给从机, 而从机可准确地接到主机发送的数据, 并根据功能码做出相应的数据处理, 将处理后的数据发送给主机, 最后主机也可以准确的接收到从机发送的报文帧。这表明笔者设计的通讯方式可准确、 稳定地实现数据传输, 因此可以实现32位MCU与电机驱动器的通讯进而实现精确的控制电机的目的。

图9 PC端Modbus Slave从机模拟器监测数据 图10 串口监测数据Fig.9 PC-side Modbus Slave slave simulator monitors data Fig.10 Serial port monitoring data

表1 发送与接收可靠性实验数据

5 结 语

笔者所涉及到的通讯系统采用STM32作为主机、 ETD790P直流调速器作为从机, 利用Modbus总线协议实现直流调速器与32位MCU的通讯, 从而实现32位MCU对交联电缆生产线中电机的精确控制。采用笔者方法进行通讯具有数据传输可靠稳定、 可移植性高、 协议标准化程度高、 易于实现等特点, 可广泛应用于交联电缆生产线中32位MCU对电机的精准控制。

猜你喜欢
调速器报文通讯
《茶叶通讯》简介
《茶叶通讯》简介
基于J1939 协议多包报文的时序研究及应用
通讯报道
CTCS-2级报文数据管理需求分析和实现
浅析反驳类报文要点
电力系统水机调速器改造情况及特点研究
水电站冲击式水轮机调速器技术发展回顾
通讯简史
ATS与列车通信报文分析