Modbus通信协议的FPGA实现.pdf
《Modbus通信协议的FPGA实现.pdf》由会员分享,可在线阅读,更多相关《Modbus通信协议的FPGA实现.pdf(7页珍藏版)》请在三一文库上搜索。
1、M o d b u s 通信协议的F P G A 实现 于正林,张龙,黄勇 ( 长春理工大学,吉林长春1 3 0 0 2 2 ) 摘要:M o d b u s 协议是一个应用广泛的工业现场总线协议,鉴于其简单、开放、帧格式紧凑等优点,于2 0 0 8 年正式成为 我国国家标准。介绍一种通过C y c l o n e 系列F P G A 实现M o d b u sR T U 模式的方法,首先给出一个可以通用于M o d b u s 主设 备和从设备的协议接口单元,然后基于该接口设计了一个通用的M o d b u s 从设备协处理器。实践证明该方法能够满足工业 环境的通讯要求,此外,该方法在其他F
2、 P G A 上也具有一定通用性和推广价值。 关键词:M o d b u s ;R T U ;F P G A ;V H D L 中图分类号:T P 3 1 6 文献标识码:A 文章编号:1 0 0 4 3 7 3 X ( 2 0 1 0 ) 1 l - 0 2 0 3 0 5 M o d b u sC o m m u n i c a t i o nP r o t o c o lB a s e do nF P G A Y UZ h e n g - l i n Z H A N GL o n g 。H U A N GY o n g ( C h a n g c h u nU n i v e r s i
3、 t yo fS c i e n c ea n dT e c h n o l o g y ,C h a n g c h u n1 3 0 0 2 2 。C h i n a ) A b s t r a c t :M o d b u sp r o t o c o li sap o p u l a rf i e l d b u s ,a n dh a sb e c o m eoneo fn a t i o n a ls t a n d a r d si nC h i n aw i t he a s yp e r f o r o m a n c e ,w i d e l yo p e n i n ga
4、 n dc o m p a c tf r a m e f o r m a t Am e t h o do fi m p l e m e n t i n gM o d b u sR T Up r o t o c o lb a s e do nC y c l o n eF P G A i si n t r o d u c e d Ai n t e r f a c ec a nb eu s e db o t hi nM o d b u ss e r v e ra n dc l i e n t ,aM o d b u ss l a v ec o p r o c e s s o rw a sd e s
5、i g n e db a s e do ni t T h et e s tr e s u l t ss h o wt h a tt h ed e s i g nm e e t st h ec o m m u n i c a t i o nr e q u i r e m e n to fi n d u s t r ye n v i r o n m e n t ,a n dh a sc e r t a i nv a l u ei n o t h e r k i n d so fF P G A K e y w o r d s :M o d b u s ,R T U F P G A ;V H D L
6、0 引言 现场总线是一种应用于生产现场,在现场设备之 间,现场设备与控制装置之间实现双向、串行、多节点数 字通信的技术 1 。M o d b u s 协议其节点安装数量非常 多,安装的地区遍及世界各地。 今天的F P G A 可包含内嵌乘法器、专用计算例程 和片上R A M 等,加上F P G A 的并行性,其结果比最快 的D S P 芯片还要快上5 0 0 倍乃至更多。随着F P G A 价 格不断下降,甚至最小的器件都足以实现一个集成可选 定制I 0 功能的软处理器核。可见,F P G A 对嵌入控 制应用越来越具有吸引力比 。 目前M o d b u s 协议实现方式多为单片机和P L
7、C ,随 着F P G A 的广泛应用,研究M o d b u s 现场总线的F P G A 解决方案有很大的实用价值。 1 M o d b u s 协议简介 3 4 1 M o d b u s 串行链路系统可以使用不同的物理接口 ( R S4 8 5 ,R S2 3 2 ) ,最常用的是R S4 8 5 两线制接口。 为了提高通信模块在工业应用中的抗干扰性和稳定性, 接口芯片和F P G A 核心模块之间应加入高速光耦进行 隔离,总线两端处放置线路终端电阻,采用屏蔽双绞线 收甍日期:2 0 1 0 - 0 1 2 2 作为通信线等。 在串行链路上,M o d b u sR T U ( R e
8、 m o t eT e r m i n a l U n i t ) 模式报文中每8 个位字节含有两个4 位十六进制 字符,这种模式的主要优点是较高的数据密度,在相同 的波特率下比A S C I I 模式有更高的吞吐率。R T U 模 式每个字节( 1 1 位) 的格式如图1 所示,支持奇、偶和无 校验,使用无校验时要求2 个停止位。M o d b u sR T U 帧最大为2 5 6B ,由发送设备将M o d b u s 报文构造为带 有已知起始和结束标记的帧,报文帧由时长至少为 3 5 个字符时间的空闲间隔区分,整个报文帧必须以连 续的字符流发送,如果两个字符之间的空闲间隔大于 1 5 个
9、字符时间,则报文帧被认为不完整被接收节点丢 弃,如图1 所示。 帧I帧2帧3 ,。、,。、, - 、 口口口口 口口口口口口口口, 。 35 个7 蕊曲惜报文 1 :个字符 起始地址功能代码教据C R C 投验结束 I 35 7 符8 位8 位 N8 位1 6 位 35 字符 图1R T U 模式位序列和报文帧 在应用层上,M o d b u s 是一个请求应答协议,并且 提供功能码规定的服务。有三类M o d b u s 功能码:公共 2 0 3 万方数据 码、用户定义码和保留码,大多数情况下只用公共码,其 主要包括比特( 线圈) 访问、1 6b ( 寄存器) 访问、文件记 录访问、诊断和其
10、他信息访问。 2M o d b u sR T U 通信协议接口设计 2 1 接口功能及模块3 t , 】分 M o d b u sR T U 接口框图及输入、输出引脚示意图 如图2 所示。 图2M o d b u s 接口示意图 在某一确定的主时钟频率、通信波特率和奇偶校验 方式下,通过设置C E M o d b u s 和R T n 的状态,可以 控制该接口模块处于接收M o d b u s 协议帧模式、发送 M o d b u s 协议帧模式或输入输出寄存器操作模式,如 表l 所示。 表1 操作模式控制 典型的波特率和奇偶校验位设置如表2 、表3 所 示。这两组控制信号可以从端口引出接到拨
11、码开关,然 后可以通过调节拨码开关来灵活控制该设备奇偶性与 波特率,也可以通过寄存器配置方式控制。 裹2 波特搴控制 s e L b a u d 2 0 3波特率( b s ) 0 0 0 1 1 0 1 1 裹3 奇偶校验控制 S e l p a r i t y 2 o 校验方式 偶 奇 无 2 2 接收过程 ( 1 ) 系统处于接收M o d b u s 协议帧模式下之后,清 2 0 4 零标志位和定时器,然后启动定时器,如果检测到有串 口输入数据,则清零定时器,如果没有检测到串口输人 数据且定时器第一次计时到3 5 个字符时间,置帧起始 标志; ( 2 ) 把接收到的第一个字符放人接收缓
12、冲寄存器 的0 x 0 0 地址( 协议帧最长为2 5 6B ,故接收缓冲大小为 2 5 6B ,地址为8b ) ,置已开始接收标志; ( 3 ) 将接收到的正确字符依次放入接收缓冲寄存 器中,即地址每次加1 ,每接收完一个字符之后清零定 时器;如果在接收字符时检查到起始错误( 起始位没有 持续波特率所对应b i t 时间的一半) ,奇偶校验错误,或 者帧错误( 停止位为0 ) ,则丢弃该字符,重新同步起 始位; ( 4 ) 如果检测到两个字符时间间隔大于1 5 个字 符时间,则重置帧起始标志,把下一个接收到的字符放 入接收缓冲寄存器的0 x 0 0 地址,再继续步骤( 3 ) ; ( 5 )
13、 当检测到没有字符输入且定时器第二次检测 到3 5 个字符时间,置协议帧接收完全标志; ( 6 ) 把接收缓冲区接收的数据作C R C 校验,如果 校验不正确,置帧起始标志,转到步骤( 3 ) ,继续等待接 收;如果是基于该接口的主M o d b u s 协议设备,一般应 设置超时时间,以避免无限等待;如果校验正确,则R e f i n i s h 发出一个脉冲,认为接收了一个在数据链路层上 正确的M o d b u s 协议帧。 对于帧错误( 停止位为0 ) 标志F E ,奇偶校验错误 标志P E ,最后一个接收到的数据所在接收缓冲区中的 位置R e b u f _ e n d 7 o ,对
14、外并不必须,可以留出这些 端口备用,所以用虚线表示。 2 3 输入输出寄存器操作 接收缓冲数据寄存器和发送缓冲数据寄存器都采 用双口R A M 实现,这比寄存器实现要节省很多资源。 为了保证对它们的操作是原子的,即为了避免同时对相 同地址执行写操作,故要求当C E M o d b u s 置低时,外 部才可以对输入输出寄存器执行写操作,此时接口内部 不会对接收输出寄存器执行任何读写操作。 2 4 发送过程 ( 1 ) 在发送模式使能之前,应先处于输入输出寄 存器模式,通过T r b u f _ d a t a 7 o ,T r b u f a d d 7 0 3 , T r b u f _ w
15、 r e n 把待发送的不包括两位C R C 校验的M o d b u s 协议帧从地址0 x 0 0 依次写入发送缓冲寄存器中, 然后使能L d T b N C E 信号( 一个时钟周期) ,同时存入 发送缓存寄存器所装最后一个数据的地址,然后把该接 口置于发送M o d b u s 协议帧模式。 ( 2 ) 发送模块先对发送数据缓冲寄存器中的所有 数做C R C - 1 6 校验,然后把计算所得结果按低位在前高 谶淼 ll 或 0 万方数据 位在后的顺序依次放到用L d T b N C E 信号锁存的地址 的下两个地址位置处。 ( 3 ) 发送模块从发送数据缓冲寄存器0 x 0 0 开始,
16、 依次读出数据并按所给的波特率发送出去,如果要求奇 偶校验,则发送完数据之后加上计算所得的奇偶校验位 发送出去。 ( 4 ) 当发送完最后一个数据即C R c - 1 6 的高8 位数 据之后,T r _ f i n i s h 发出一个脉冲表示发送完毕。 3 接口模块实现 3 1 波特率发生器 波特率发生器就是一个分频器,根据系统时钟分别 发出位时钟( T x _ c l k ) 和1 1 6 位时钟( R x _ c l k l 6 ) 。由于 系统的时钟周期可能不同;为了模块的通用性,该模块 用一个类属( G e n e r i c ) 语句产生各种分频系数。为了保 证同步设计,产生的位
17、时钟和1 1 6 位时钟作为控制信 号在主时钟的驱动下控制其他模块。 3 2 接收模块 接收模块组包括同步滤波模块、接收机模块、接收 控制模块、接收状态寄存器模块、时间标志产生模块等。 M o d b u s 网络中设备是运行在不相关时钟上的,为 了避免亚稳态现象,要求通信信号进入F P G A 时通过 两个级联的寄存器 5 - 6 3 。异步输入信号必须在足够的时 间内保持数据有效,从而保证被目标时钟域检测到,在 接收端则认为最少是大于几个脉冲宽度的信号才是应 该被检测到的信号U - s ,于是在接收端加入滤波模块,具 体算法如下:连续3 次检测到为高( 或低) 电平时,才往 接收寄存器写入
18、高( 或低) 电平,否则保持原来检测到的 电平,不到3 个脉冲宽度的信号被过滤。显然,同步滤 波模块引入了5 个时钟的延迟,但这样的延时对于 M o d b u s 协议来说可以忽略。 接收机模块是一个改进的U A R T 接收模块,其工 作流程如下睁1 0 : ( 1 ) 当检测到起始位时,继续读取其他位并通过移 位把它们移入接收移位寄存器R S R 中; ( 2 ) 当所有的数据位和停止位都接收完毕后,置 R D R 寄存器满标志R D R F 位为1 ; ( 3 ) 检测停止位和奇偶校验位,如果发现错误置相 关错误标志位; ( 4 ) 如果所接收数据正确,R S R 中数据载人到接收 数
19、据寄存器R D R 中,清除错误标志。 从R x d s y n 上进入的比特流与本地的位时钟不是 同步的,为了避免可能在错误的时间读取一些位,在每 个比特时间采样1 6 次,在时钟R x _ c l k l 6 的每个上升沿 采样,为了保证最大可行度,在理想情况下将在每比特 时间中间进行采样。首先判断起始位,当检测R x d s y n 至少连续半个位时钟为低电平时,即从第一次检测到低 电平之后,再连续9 次检测,如果R x d s y n 为低电平的 次数大于等于8 次,则认为起始位到来,此时应该在起 始位中间后两个R x c l k l 6 处。之后每隔1 6 个R x c l k l
20、6 时钟周期在1 4 ,1 5 ,1 6 个上升沿到来时分别采样, 然后对3 次采样结果取至少两次相等的数据作为所接 收到的值,以保证接收数据的准确性。8 个数据位采集 完毕之后,根据S e l p a r i t y - 1 o 信号判断是否奇偶校 验,如果有校验需求,则对第9 个数据位的数据同样傲 3 次采样取两次相同值作为接收到的奇偶校验位,同时 计算奇偶校验结果。在停止位( 不包括起始位,无校验 时为第9 位,有校验时为第1 0 位) 到来时,同样经过 3 次采样,但是只要检测到1 位为高就认为停止位正 确,为了减少状态机数量,可以在停止位到来时比较计 算所得奇偶校验位和接收到的奇偶校
21、验位从而判定接 收数据是否奇偶校验错误。由于接收控制器一定会读 取前一个数据字节并清零R D R F ,所以常见的U A R T 里的超限( o v e r r u n ) 错误这里并没有出现。图3 为用 Q u a r t u s 软件自带仿真器仿真结果。 图3 接收仿真时序图 3 3 发送模块 发送模块包括发送控制模块,发送机模块,发送状 态寄存器模块等。 发送机模块是基于普通U A R T 发送原理设计,其 发送过程如下睁1 0 : ( 1 ) 等待T D R E = 1 ,即等待发送数据寄存器 ( T D R ) 为空,随后T D R 中载入一个字节数据,并把 T D R E 清零。
22、( 2 ) 根据波特率设置S e l b a u d 1 o 对T D R 里的 数据进行奇偶校验计算。 ( 3 ) 把T D R 里的数据放人发送移位寄存器T S R 的1 8 位,T S R 第0 位放起始位( 0 ) ,T S R 第9 位放 入奇偶校验位或者停止位( 1 ) 。 ( 4 ) 通过对T S R 右移,一位一位地发送出9 位数 据比特,最后发送停止位( 1 ) 。 3 4C R C 模块 C R C 模块包括接收C R C 控制模块,发送C R C 控 2 0 5 万方数据 制模块,C R C 产生模块三部分。 图4 发送仿真时序图 生成C R C 的过程为 3 : ( 1
23、 ) 将一个1 6 位寄存器装人十六进制F F F F ( 全 1 ) ,将之称作C R C 寄存器。 ( 2 ) 将报文的第一个8 位字节与1 6 位C R C 寄存 器的低字节异或,结果置于C R C 寄存器。 ( 3 ) 将C R C 寄存器右移1 位( 向L S B 方向) ,M S B 充零,提取并检测I 。S B 。 ( 4 ) 如果L S B 为0 :重复步骤( 3 ) ( 另一次移位) ;如 果L S B 为1 :对C R C 寄存器异或多项式值0 x A 0 0 1 ( 1 0 l O 0 0 0 0 0 0 0 0 0 0 0 1 ) 。 ( 5 ) 重复步骤( 3 ) 和
24、( 4 ) ,直到完成8 次移位。当做 完此操作后,将完成对8 位字节的完整操作。 ( 6 ) 对报文中的下一个字节重复步骤( 2 ) ( 5 ) ,继 续此操作直至所有报文被处理完毕。 ( 7 ) C R C 寄存器中的最终内容为C R C 值。 这种方式计算C R C 值的时间比其他方式计算 C R C ( 比如查表法等) 的时间稍微要长,但是它节省了资 源,比如查表法计算C R C 需要一个数组来存放所有可 能的C R C 结果值。图5 为对数据串“0 1 0 3 0 0 0 0 0 0 0 1 ” ( 十六进制) C R C _ 1 6 运算的仿真时序图,时钟周期为 5 0M H z
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Modbus 通信协议 FPGA 实现
链接地址:https://www.31doc.com/p-5529818.html