Modbus通信协议的FPGA实现_第1页
Modbus通信协议的FPGA实现_第2页
Modbus通信协议的FPGA实现_第3页
Modbus通信协议的FPGA实现_第4页
Modbus通信协议的FPGA实现_第5页
已阅读5页,还剩6页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、modbus通信协议的fpga实现2010-08-31 15:18:17來源:现代电子技术关键字:modbus fpga现场总线引言现场总线是一种应用于生产现场,在现场设备z间,现场设备与控制装置z间实现双向、 串行、多节点数字通信的技术。modbus协议其节点安装数量非常多,安装的地区遍及世界 各地。今天的fpga可包含内嵌乘法器、专用计算例程和片上ram等,加上fpga的并行性, 其结果比最快的dsp芯片述要快上500倍乃至更多。随着fpga价格不断卜降,甚至最小 的器件都足以实现一个集成可选定制i/o功能的软处理器核。可见,fpga对恢入控制应 用越来越具有吸引力。目前modbus协议实

2、现方式多为单片机和plc,随着fpga的广泛应用,研究modbus 现场总线的fpga解决方案有很人的实用价值。1 modbus协议简介modbus串行链路系统可以使用不同的物理接口(rs485, rs 232),最常用的是rs485 两线制接口。为了提高通信模块在工业应用中的抗干扰性和稳定性,接口芯片和fpga核心 模块z间应加入高速光耦进行隔离,总线两端处放置线路终端电阻,采用屏蔽双绞线作为通 信线等。在串行链路1二,modbus rtu(remote terminal unit)模式报文中每8个位字节含冇两个 4位十六进制字符,这种模式的主要优点是较肓的数据密度,在相同的波特率下比asc

3、ii模 式有更高的吞叶率。rtu模式每个字节(11位)的格式如图1所示,支持奇、偶和无校验, 使用无校验时要求2个停止位。modbus rtu帧最大为256b,由发送设备将modbus报文 构造为带有已知起始和结束标记的帧,报文帧由时长至少为3. 5个字符时间的空闲间隔区 分,整个报文帧必须以连续的字符流发送,如果两个字符z间的空闲间隔大于1. 5个字符t :e心冲w1.5个字符trtu模式位序列和报文帧吋间,则报文帧被认为不完整被接收节点丢弃,如图1所示。起始1(lsb)|234678 (msb)停止或校验停止帧i巴2帧3起始地址功能代码数据crc校验结東m3 5字符8位8位n*8位16位鼻

4、3 5字符5 1 rmodbus 报文clkrii elbaud(i 0) set pantyl 0ce modbur tnld tbncerebufnl»id(z 0)trbuf data(7.otrbuf_fldd(7.o)trtwf wrenmbffi 2 modbus接口示意图crcs存 寄txdtr fin»shtrbufjce在应用层上,modbus是一个请求/应答协议,并且提供功能码规定的服务。有三类modbus功能码:公共码、用户定义码和保留码,大多数情况下只用公共码,其主要包括比 特(线圈)访问、16 b(寄存器)访问、文件记录访问、诊断和其他信息访问。2

5、 modbus rtu通信协议接口设计2. 1接口功能及模块划分modbus rtu接口框图及输入、输出引脚示意图如图2所示。perebuf cnd7. 0) re finishrcbuq7 .0在某一确定的主时钟频率、通信波特率和奇偶校验方式下,通过设置ce_modbus和r_tn的状态,可以控制该接口模块处于接收modbus协议帧模式、发送modbus协议帧模式或输入/输岀寄存器操作模式,如表1所示。表1操作模式控制ce_m(xibusr_tn操作模式11接收modbus协议帧10发送modbus协议幀0x綸入/输出奇存器操作典型的波特率和奇偶校验位设置如表2、表3所示。这两组控制信号可以

6、从端口引出接到拨码开关,然后可以通过调节拨码开关来灵活控制该设备奇偶性与波特率,也可以通过寄 存器配置方式控制。表2波特率控制sel baud20波特 /(b/s)009 6000119 2001038 40011115 200表3奇偶校验控制selparity 2. 0校验方式00偶01奇10 或 11无2. 2接收过程(1) 系统处于接收modbus协议帧模式下z后,清零标志位和定时器,然后启动定时器, 如果检测到冇串口输入数据,则清零定时器,如果没冇检测到串口输入数据r建时器第一次 计时到3. 5个字符时间,置帧起始标志;(2) 把接收到的第一个字符放入接收缓冲寄存器的0x00地址(i办

7、议帧最长为256 b,故 接收缓冲大小为256 b,地址为8 b),置已开始接收标志;(3) 将接收到的正确字符依次放入接收缓冲寄存器中,即地址侮次加1,每接收完一个 字符z后清零定时器;如果在接收字符时检杳到起始错误(起始位没有持续波特率所对应bit 时i'可的一半),奇偶校验错谋,或者帧错误(停止位为0),则丢弃该字符,吏新同步起始位;(4) 如果检测到两个字符吋间间隔大于1. 5个字符吋间,则重置帧起始标志,把下一个 接收到的字符放入接收缓冲寄存器的0x00地址,再继续步骤(3);(5) 当检测到没有字符输入且定吋器第二次检测到3. 5个字符吋间,置协议帧接收完全 标志;(6)

8、把接收缓冲区接收的数据作crc校验,如果校验不正确,置帧起始标志,转到步骤(3) ,继续等待接收;如果是基于该接口的主modbus协议设备,一般应设置超时时间,以 避免无限等待;如果校验正确,则re_finish发出一个脉冲,认为接收了一个在数据链路层 上正确的modtus协议帧。对于帧错谋(停止位为0)标志fe,奇偶校验错谋标志pe,最后一个接收到的数据所在 接收缓冲区中的位置rebuf_end7. . 0,对外并不必须,可以留出这些端口备用,所以用 虚线表示。2. 3输入/输出寄存器操作接收缓冲数据寄存器和发送缓冲数据寄存器都采用双口 ram实现,这比寄存器实现要 节省很多资源。为了保证对

9、它们的操作是原子的,即为了避免同吋对和同地址执行写操作, 故耍求当ce_modbus置低吋,外部才可以对输入输出寄存器执行写操作,此吋接口内部不 会对接收/输出寄存器执行任何读写操作。2. 4发送过程(1) 在发送模式使能之前,应先处于输入/输出寄存器模式,通过trbuf_data7. . 0, trbuf_add7. . 0, trbuf_wren把待发送的不包括两位crc校验的modbus协议帧从地址 0x00依次写入发送缓冲寄存器中,然后使能ld_tbnce信号(一个时钟周期),同时存入发 送缓存寄存器所装最后一个数据的地址,然后把该接口置于发送modbus协议帧模式。(2) 发送模块先

10、对发送数据缓冲寄存器中的所有-数做crc-16校验,然后把计算所得结 果按低位在前高位在后的顺序依次放到用ld.tbnce信号锁存的地址的下两个地址位置处。(3) 发送模块从发送数据缓冲寄存器0x00开始,依次读出数据并按所给的波特率发送 出去,如果要求奇偶校验,则发送完数据z后加上计算所得的奇偶校验位发送出去。(4) 当发送完最后一个数据即crc-16的高8位数据z后,tr_finish发出一个脉冲表示 发送完毕。3接口模块实现3. 1波特率发生器波特率发生器就是一个分频器,根据系统时钟分别发出位时锹tx_clk)和1 / 16位时钟 (rx_clkl6)o由于系统的时钟周期可能不同,为了模

11、块的通用性,该模块用一个类属(generic) 语句产生各种分频系数。为了保证同步设计,产生的位时钟和1/16位时钟作为控制信号 在主时钟的驱动下控制其他模块。3. 2接收模块接收模块组包括同步滤波模块、接收机模块、接收控制模块、接收状态寄存器模块、吋 间标志产生模块等。modbus网络中设备是运行在不相关吋钟上的,为了避免亚稳态现彖,耍求通信信号进 入fpga吋通过两个级联的寄存器。界步输入信号必须在足够的吋|'可内保持数据有效,从而 保证被目标时钟域检测到,在接收端则认为最少是人于儿个脉冲宽度的信号才是应该被检测 到的信号,于是在接收端加入滤波模块,具体算法如下:连续3次检测到为高

12、(或低)电平时, 才往接收寄存器写入髙(或低)电平,否则保持原来检测到的电平,不到3个脉冲宽度的信号 被过滤。显然,同步滤波模块引入了 5个吋钟的延迟,但这样的延吋对丁 modbus协议来说 可以忽略。接收机模块是一个改进的uart接收模块,其工作流程如f:(1) 当检测到起始位时,继续读取其他位并通过移位把它们移人接收移位寄存器rsr屮;(2) 当所有的数据位和停止位都接收完毕后,置rdr寄存器满标志rdrf位为1;(3) 检测停止位和奇偶校验位,如果发现错误置相关错误标志位;(4) 如果所接收数据正确,rsr屮数据载入到接收数据寄存器rdr屮,清除错误标志。从rxd.syn上进入的比特流与

13、本地的位时钟不是同步的,为了避免可能在错谋的时间 读取一些位,在每个比特时间采样16次,在时钟rx_-clkl6的每个上升沿采样,为了保证 最大可行度,在理想情况下将在每比特时间屮间进行采样。首先判断起始位,当检测rxd.syn 至少连续半个位时钟为低电平时,即从第一次检测到低电平之后,再连续9次检测,如果 rxd_syn为低电平的次数大于等于8次,则认为起始位到来,此时应该在起始位屮间后两个 rx_clkl6处。之后每隔16个rx_clkl6时钟周期在14, 15, 16个上升沿到来时分别采样, 然后对3次采样结果取至少两次相等的数据作为所接收到的值,以保证接收数据的准确性。 8个数据位采集

14、完毕之后,根据sel_parityl. . 0信号判断是否奇偶校验,如果有校验需 求,则对第9个数据位的数据同样做3次采样取两次相同值作为接收到的奇偶校验位,同 时计算奇偶校验结果。在停止位(不包括起始位,无校验时为第9位,冇校验时为第10位) 到来时,同样经过3次采样,但是只要检测到1位为高就认为停止位正确,为了减少状态 机数最,可以在停止位到来时比较计算所得奇偶校验位和接收到的奇偶校验位从而判定接收 数据是否奇偶校验错谋。由于接收控制器一定会读取前一个数据字节并清零rdrf,所以常 见的uart里的超限(overrun)错谋这里并没有出现。图3为用quartusii软件白带仿真器仿真结來。

15、3. 3发送模块发送模块包括发送控制模块,发送机模块,发送状态寄存器模块等。发送机模块是基于普通uart发送原理设计,其发送过程如下:(1) 等待tdre二t,即等待发送数据寄存器(tdr)为空,随后tdr中载入一个字节数据, 并把tdre清零。(2) 根据波特率设置sel_baudl. . 0对tdr里的数据进行奇偶校验计算。(3) 把tdr里的数据放入发送移位寄存器tsr的18位,tsr第0位放起始位c。'), tsr第9位放入奇偶校验位或者停止位('1')。(4) 通过对tsr右移,一位一位地发送出9位数据比特,最后发送停止位(t)。3. 4crc模块crc模块包

16、括接收crc控制模块,发送crc控制模块,crc产牛模块三部分。-图4 发送仿艮时序图生成crc的过程为:(1) 将一个16位寄存器装入十六进制ffff(全1),将z称作crc寄存器。(2) 将报文的第一个8位字节与16位crc寄存器的低字节异或,结果置于crc寄存器。将crc寄存器右移1位(向lsb方向),msb充零,提取并检测lsb。(4) 如果lsb为0:重复步骤(3)(另一次移位);如果lsb为1:对crc寄存器界或多项 式值 0xa00l(1010000000000001)o(5) 重复步骤(3)和(4),直到完成8次移位。当做完此操作后,将完成对8位字节的完整 操作。(6) 对报文

17、中的下一个字节重复步骤(2)(5),继续此操作肓至所侑报文被处理完毕。(7兀rc寄存器中的最终内容为crc值。这种方式计算crc值的时间比其他方式计算crc(比如查表法等)的吋间稍微要长,但 是它节省了资源,比如查表法计算crc需要一个数组来存放所有可能的crc结果值。图5 为对数据串、'010300000001(十六进制兀rc-16运算的仿真吋序图,吋钟周期为50 mhz, 由图可见,整个计算吋间在2. 5ps内,估算一个含有240个字符的消息,crc校验总时 间约为2. 5|jsx(240 / 6)=100ps,这样长的校验计算吋间对于modbus协议来说是完全可 以接受的。图5

18、crc-16校脸4基于该接口的modbus从站协处理器实现协处理器框图如图6所示。图6 协处理器框图从站协处理器控制模块程序控制过程如f:置ce_modbus为t,把max485芯j1re/de信号输出置低,即控制rs 485接口芯片处于接收状态。(2) 等待一段延迟时间(rs 485接11芯片稳定时间),使能modbus协议接口模块即置 ce_modbus为t,并置接收modbus协议帧模式。(3) 如果接收到一个完整的帧(消息),则转到步骤(4),如果没接收到一个完整的消息, 一直处于等待状态。(4) 先置ce_modbus为'o',再解释接收缓冲寄存器里消息,等待消息处理

19、完毕,如果 消息不是发往该从站或者为广播消息,则转到步骤;否则把信号re/de输出置高,转 到步骤(5) °(5) 等待一段延迟时间,使能modbus协议接口模块即h ce.modbus为t,并置发送 modbus协议帧模式。(6) 等待发送完成,转到步骤(1)。解释模块主要由解释控制模块、分析模块、各功能码解释模块、错误功能码处理模块组 成。分析模块首先分析接收消息起始两个字节,即地址码和功能码。如果地址为广播消息地 址(地址为0)或者地址码和本从站地址不相等,则不处理本消息,解禅控制模块发出解禅完 毕并置不响应信号为、'1,顶层控制模块继续处丁等待接收消息状态。如果功能码

20、为非支持 功能码,则选择错误功能代码处理模块;如果为某-支持的功能码,则选择相应的功能模块 解释接收消息,按照功能码要求解码(例如读/写某一指泄寄存器或者线圈)。处理完z后把 相应的界常码响应消息或者正常响应消息写入modbus协议接口模块里的发送缓冲寄存器 里,完毕之后通过ld.tbnce信号把发送缓冲寄存器锁存消息的末地址(不带crc校验 位)trbuf_add7. . 0(保证在ld_tbnce有效时它为末地址)存入modbus协议接口模块, 发出解释完毕信号,不响应信号置、'0,z后由顶层控制模块控制接口模块发送响应消息。 对于某些功能码,比如01码和02码,03码和04码,由于对它们的解释差别很小,对以 共用一个模块,达到节省资源的冃的。对于特定的系统,完全门j以选择某一些功能码甚至某 一个功能码,而达到需求,故这里采用这种模块化方式,可以很容易在不改变其他功能模块 的惜况下删除不需要的功能码模块或者增加新需要的功能码模块。该协处理器少从设备其他部分接口仅仅为双口 ram,从设备完全被映射为寄存器组的 抽象,这比川用寄存器直接实现要节省逻辑资源。由丁这些双口 ram是完全透明的,用户 可以根据整个modbus系统需要口定义各个寄存器的实际含义。modbus主设备可以在任何 时候随机地访问这些寄存器组。

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论