基于Picoblaze软核的Modbus通信协议设计
目前,从各大FPGA厂商公布的销售数据来看,Xilinx的FPGA市场份额占到了近50%。Spartan-3E系列的器件密度范围为10万到160万系统门,其单位逻辑单元的成本是FPGA行业中最低的,能够以标准产品价格实现微处理器、微控制器和数字信号处理器的功能,并可支持18种通用I/O标准,还可通过ISE来操作PicoBlaze软核。Spartan-3E同时结合了强大的平台FPGA功能和超低价位。因而可使更多的设计人员享受可编程能力所带来的益处。
1 Picoblaze核结构
本文采用Xilinx公司的Spartan-3E*估板及其PicoBlaze IP核来进行基于Modbus通信协议的系统设计。该系统的整体结构是以PC做为上位机,并在*估板上嵌入Picoblaze软核作为下位机,从而实现Modbus通信协议。PicoBlaze是Xilinx公司的一款8bit微控制器软核,它非常之小。可以嵌入到Cool RunnerⅡ,Virtex-E,Virtex-II(Pro)和Spartan-3E的CPLD以及FPGA中。对于整个指令集,PicoBlaze执行一条指令需要2个时钟周期。
在对PicoBlaze进行开发时,首先需要将PicoBlaze认识并执行的程序经过Assembler转换成相应的HDL文件并存放在FPGA内部的Block Memory中(因此,PicoBlaze执行一条指令所需的时钟周期是固定的)。然后,微控制器核心KCPSM3再从Block Memory里面读取程序并按顺序执行。PicoBlaze的存储空间为1024x18bit,也就是说,它能够存放1024条位长为18的指令。而PicoBlaze支持的指令集也很精简(只有57条),其中包含程序控制类(跳转,调用,返回)、算数类(加,减,比较)、逻辑类(与,或,异或)、中断类(中断开启/关闭),移位/旋转类(左移/右移,左旋/右旋)和输入/输出类(输入,输出)。PicoBlaze核的结构框架如图1所示。
图1 PicoBlaze核的结构框架图
图2是微控制器核心KCPSM3的结构框架图。KCPSM3中一共有16个长度为8位的通用寄存器,每个寄存器都可以在汇编代码中分别命名。其中,Scratch Pad Memory的大小为64 Bytes,作用相当于一块临时存储区。KCPSM3只支持1个中断信号,但实际上可以将多个中断信号用逻辑组合的方式变成一个来使用(会降低单中断通道的性能)。
图2 微控制器核心KCPSM3的结构框架图
2 Modbus协议
2.1 Modbus协议简介
Modbus协议是应用于电子控制器上的一种通用语言。通过此协议,控制器相互之间、控制器经由网络(例如以太网)和其它设备之间可以实现通信。标准的Modbus接口使用RS-232C兼容串行接口,控制器通信使用主从技术,它仅有一个设备(主设备)能初始化传输(查询)。其他设备(从设备)则根据主设备查询提供的数据作出相应反应。
2.2 串行传输模式
在标准Modbus上,控制器可使用ASCII或RTU通讯模式来进行通讯。在本设计采用的是RTU模式。当控制器以RTU模式在Modbus总线上进行通讯时,信息中的每8位字节可分成2个4位16进制的字符,该模式的主要优点是在相同波特率下,其传输的字符密度高于ASCII模式,但每个信息必须连续传输。其RTU模式的数据传输格式如表1所列。
表1 RTU模式的数据传输格式
在RTU模式中,每个字节格式的编码系统可以为8位二进制、十六进制0~9和A~F。其数据位包括1位起始位,8位数据(低位先送)、奇/偶校验时1位/无奇偶校验时0位、带校验时1位停止位/无校验时2位停止位。本系统的错误校验采用循环冗余校验(CRC)。
2.3 Modbus的信息帧
无论是ASCII模式还是RTU模式,Modbus信息都以帧的方式传输,每帧有确定的起始点和结束点。表2所列即为RTU模式时的消息帧格式。
表2 RTU模式时的消息帧格式
使用时,接收设备在信息的起点开始读地址,并确定要寻址的设备(广播时对全部设备)以及信息传输的结束时间。也可以检测部分信息,有错误也可作为一种结果设定。本文使用的是RTU消息帧。
在RTU模式中,信息开始至少需要3.5个字符的静止时间。依据使用的波特率,很容易计算这个静止的时间(如表2中的T1-T2-T3-T4)。之后,第一个区的数据即为设备地址。各个区允许发送的字符均为16进制的0—9,A—F。
网络上的设备可连续监测网络上的信息,包括静止时间等。当接收到第一个地址数据时,每台设备都立即对它解码,以决定是否是自己的地址。发送完最后一个字符号后,也将有一个3.5个字符的静止时间,然后才能发送一个新的信息。
整个信息必须连续发送。如果在发送帧信息期间出现大于1.5个字符的静止时间,则接收设备将刷新不完整的信息,并假设下一个地址数据。
同样,若在一个信