基于AVR ATmega128的工业网关的实现
扫描二维码
随时随地手机看文章
摘要:介绍一种桥接不同现场总线网络的解决方案。该方案采用高性能AVR ATmega128为其控制核心。AVR ATmega128采用ModBus/RTU协议与计算机通信,通过多处理器通信模式与其他分控设备通信。本方案经过在实际中运行,证明其设计是可行的。
关键词:AVR ATmega128、Modbus/RTU、AVR多处理器通信模式、CRC16
1 引言
如今,电子技术发展迅猛,尤其是单片机已广泛地应用于通信、交通、家用电器、便携式智能仪表、机器人制作等领域,产品功能、精度和质量大幅度提高,且电路简单,故障率低,可靠性高,成本低廉。在单片机某些应用方面,对网络灵活性和多样性需求的不断增加,网络之间的互联显得越来越重要。工业网关为桥接不同现场总线网络提供了一种解决方案。
2 网络拓扑结构
网络连接的拓扑结构如图1所示。
(图1)
RS-232C是广泛应用的串口通信标准,但因其推出较早,在现代网络通信中已暴露出数据传输速度慢、传输距离短、接口处各信号间容易产生干扰等明显的缺点。RS-485是一种多发送器的电路标准,它扩展了RS-422A的性能,允许双绞线上一个发送器驱动32个负载设备,负载设备可以是被动发送器、接收器或收发器,RS-485最大传输距离为1200m,最大传送速率可达10Mb/s。因此,RS-485在远程通信和多机总线系统中具有很大的吸引力。
如图1所示,将AVR ATmega128的标准的通用异步接收/发送通信接口0(UART0)转换成半双工485串口。同样,PC机的RS-232C串口也转换成485串口。它们之间采用Modbus/RTU协议进行通信,AVR ATmega128作为从设备。AVR ATmega128与其下行的AVR分控设备通过485串行总线并在一起。它们之间采用AVR单片机特有的多机通信方式进行通信。其中AVR ATmega128是主控设备,其他的AVR分控设备是从控设备。
3 AVR ATmega128单片机
ATmega128单片机为基于AVR RISC结构的8位低功耗CMOS微处理器。由于其先进的指令集以及单周期指令执行时间,ATmega128单片机的数据吞吐率高达1MIPS/MHz,故可以缓减系统的功耗和处理速度之间的矛盾。AVR单片机内核具有丰富的指令集和32个通用工作寄存器。所有的寄存器都直接与算术逻辑单元(ALU)相连接,使得一条指令可以在一个时钟周期内同时访问两个独立的寄存器。这种结构大大提高了代码效率,并且具有比普通的复杂指令集微处理器高10倍的数据吞吐量。ATmega128单片机内部带有128KB的系统内可编程Flash程序存储器,具有在写的过程中还可以读的能力,即同时读写(RWW); 4KB的EEPROM;4KB的SRAM;53个通用I/O端口线;32个通用工作寄存器;实时时钟(RTC);4个灵活的具有比较模式和PWM功能的定时器/记数器(T/C);2个USART;面向字节的两线接口(TWI);8通道10位ADC;可选的可编程增益;片内振荡器的可编程看门狗定时器;串行外围设备接口(SPI);与IEEE 1149.1规范兼容的JTAG测试接口,此接口同时还可以用于片上调试;6种可以通过软件选择的省电模式。
4 Modbus通信协议
Modbus协议是应用于电子控制器上的一种通用语言。通过此协议,控制器相互之间、控制器经由网络(例如以太网)和其他设备之间可以通信。它已经成为一通用工业标准。有了它,不同厂商生产的控制设备可以连成工业网络,进行集中监控。此协议定义了一个控制器能认识使用的消息结构,而不管它们是经过何种网络进行通信的。它描述了一控制器请求访问其它设备的过程,如果回应来自其它设备的请求,以及怎样侦测错误并记录。它制定了消息域格局和内容的公共格式。当在一Modbus网络上通信时,此协议决定了每个控制器须要知道它们的设备地址,识别按地址发来的消息,决定要产生何种行动。如果需要回应,控制器将生成反馈信息并用Modbus协议发出。在其它网络上,包含了Modbus协议的消息转换为在此网络上使用的帧或包结构。这种转换也扩展了根据具体的网络解决节地址、路由路径及错误检测的方法。
Modbus网络能设置为两种传输模式(ASCII或RTU)中的任何一种进行通信。用户选择想要的模式,包括串口通信参数(波特率、校验方式等),在配置每个控制器的时候,在一个Modbus网络上的所有设备都必须选择相同的传输模式和串口参数。
当控制器设为在Modbus网络上以RTU(远程终端单元)模式通信,在消息中的每个8Bit字节包含两个4Bit的十六进制字符。这种方式的主要优点是:在同样的波特率下,可比ASCII方式传送更多的数据。
代码系统:
ü 8位二进制,十六进制数0...9,A...F
ü 消息中的每个8位域都是一个两个十六进制字符组成
每个字节的位:
ü 1个起始位
ü 8个数据位,最小的有效位先发送
ü 1个奇偶校验位,无校验则无
ü 1个停止位(有校验时),2个Bit(无校验时)
错误检测域
ü CRC(循环冗长检测)
使用RTU模式,消息发送至少要以3.5个字符时间的停顿间隔开始。在网络下多样的字符时间,这是最容易实现的(如下图2所示)。传输的第一个域是设备地址。可以使用的传输字符是十六进制的0…9,A…F。网络设备不断侦测网络总线,包括停顿间隔时间内。当第一域(地址域)接收到,每个设备都进行解码以判断是否发往自己的。在最后一个传输字符之后,一个至少3.5个字符时间的停顿标定了消息的结束。一个新的消息可在停顿后开始。
整个消息帧必须作为一连续的流传输。如果在帧完成之前有超过 3.5个字符时间的停顿时间,接收设备将刷新不完整的消息并假定下一字节是一个新消息的地址域。同样地,如果一个新消息在小于3.5个字符时间内接着前个消息开始,接收的设备将认为它是前一消息的延续。这将导致一个错误,因为在最后的CRC域的值不可能是正确的。一典型的RTU消息帧如下所示:
起始位 |
设备地址 |
功能代码 |
数据 |
CRC校验 |
结束符 |
T1-T2-T3-T4 |
8Bit |
8Bit |
N个8Bit |
16Bit |
T1-T2-T3-T4 |
当消息在标准的Modbus系列网络传输时,每个字符或字节以如下方式发送(从左到右):最低有效位...最高有效位。
使用RTU字符帧时,位的序列是:
有奇偶校验
启始位 |
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
奇偶位 |
停止位 |
无奇偶校验
启始位 |
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
停止位 |
停止位 |
5 CRC16检测
循环冗余码CRC检验技术广泛应用于测控及通信领域。CRC计算可以靠专用的硬件来实现,但是对于低成本的微控制器系统,在没有硬件支持下实现CRC检验,关键的问题就是如何通过软件来完成CRC计算,也就是CRC算法的问题。计算CRC16有三种算法:按位计算CRC、字节计算CRC、半字节计算CRC。这三种算法它们稍有不同,按位求法速度较慢,但占用最小的内存空间;按字节查表求CRC的方法速度较快,但占用较大的内存;按半字节查表求CRC的方法是前两者的均衡,即不会占用太多的内存,同时速度又不至于太慢,比较适合8位小内存的单片机的应用场合。
6 AVR单片机多处理器通信模式
置位UCSRA 的多处理器通信模式位(MPCM) 可以对USART 接收器接收到的数据帧进行过滤。那些没有地址信息的帧将被忽略,也不会存入接收缓冲器。在一个多处理器系统中,处理器通过同样的串行总线进行通信,这种过滤有效的减少了需要CPU 处理的数据帧的数量。MPCM位的设置不影响发送器的工作,但在使用多处理器通信模式的系统中,它的使用方法会有所不同。如果接收器所接收的数据帧长度为5 到8 位,那么第一个停止位表示这一帧包含的是数据还是地址信息。如果接收器所接收的数据帧长度为9 位,那么由第9 位(RXB8) 来确定是数据还是地址信息。如果确定帧类型的位( 第一个停止位或第9 个数据位) 为1,那么这是地址帧,否则为数据帧。在多处理器通信模式下,多个从处理器可以从一个主处理器接收数据。首先要通过解码地址帧来确定所寻址的是哪一个处理器。如果寻址到某一个处理器,它将正常接收后续的数据,而其他的从处理器会忽略这些帧直到接收到另一个地址帧。
对于一个作为主机的处理器来说,它可以使用9 位数据帧格式(UCSZ = 7)。如果传输的是一个地址帧(TXB8 = 1) 就将第9 位(TXB8) 置1,如果是一个数据帧(TXB = 0) 就将它清零。在这种帧格式下,从处理器必须工作于9 位数据帧格式。
下面即为在多处理器通信模式下进行数据交换的步骤:
5.1 所有从处理器都工作在多处理器通信模式(UCSRA 寄存器的MPCM 置位)。
5.2 主处理器发送地址帧后,所有从处理器都会接收并读取此帧。从处理器UCSRA寄存器的RXC 正常置位。
5.3 每一个从处理器都会读取UDR 寄存器的内容已确定自己是否被选中。如果选中,就清零UCSRA 的MPCM 位,否则它将等待下一个地址字节的到来,并保持MPCM 为1。
5.4 被寻址的从处理器将接收所有的数据帧,直到收到一个新的地址帧。而那些保持MPCM 位为1 的从处理器将忽略这些数据。
5.5被寻址的处理器接收到最后一个数据帧后,它将置位MPCM,并等待主处理器发送下一个地址帧。然后第2 步之后的步骤重复进行。
使用5 至8 比特的帧格式是可以的,但是不实际,因为接收器必须在使用n 和n+1 帧格式之间进行切换。由于接收器和发送器使用相同的字符长度设置,这种设置使得全双工操作变得很困难。如果使用5 至8 比特的帧格式,发送器应该设置两个停止位(USBS = 1),其中的第一个停止位被用于判断帧类型。不要使用读- 修改- 写指令(SBI 和CBI) 来操作MPCM 位。MPCM 和TXC 标志使用相同的I/O 单元,使用SBI 或CBI 指令可能会不小心将它清零。在本设计方案中,AVR ATmega128作为多处理器通信模式中的主处理器,其他的AVR分控设备做为从处理器。
7结束语
采用本方案所介绍的网络拓扑结构,由于AVR ATmega128与上位机之间通信是基于Modbus标准协议,而与其他的AVR分控设备之间采用AVR单片机所特有的多处理器通信。因此,在保证系统开放性的同时,又能保证数据处理效率的提高。在交通控制、智能化停车场管理系统等方面,本设计方案有一定的参考价值。
参考文献
[1] 陈冬云,杜敬仓,任柯燕. ATmega 128单片机原理与开发指导.机械工业出版社,2006.
[2] Richard Barnett,Larry O’Cull,Sarah Cox. 嵌入式C编程与Atmel AVR.北京:清华大学出版社,2003.
[3] Modicon.Modbus Protocol Reference Guide.1996
[4] 朱懿,蒋念平.ModBus协议在工业控制系统中的应用.微计算机信息,2006,4-1:118-120.