资源描述:
与开发 D OI 1 0 . 3 9 6 9/ j . i s s n . 1 0 0 9 - 9 4 9 2 . 2 0 1 4 . 1 2 . 0 5 4 编译型P L C Mo d b u s 协议的研究与实现 令狐钊 1 ,2 ,杨旭 东 ,陈伦 军 1 . 贵9 Il 大学机械工程学院,责9 I,l 贵阳 5 5 0 0 2 5 ;2 . 贵阳永青仪电科技有限公司,贵州贵阳 5 5 0 0 2 5 摘要在编译型P L C的研发过程中,为使P L C的通信具有通用性和开放性 ,采用了M o d b u s 协议。针对中断数据收发会占用大 量 C P U的问题 ,以及 几种常用 P L C通信方式的优缺点 ,通过对 Mo d b u s 协议 的研究 ,在AR M技术 和操作 系统的支持下 ,结合编 译型P L C 的特点,提出了一种中断组合D M A的数据收发新方法和一种多任务通信方法,实现了一种实时性较好、C P U占用量 较少的适合于编译型P L C串行链路上的M o d b u s 服务器通信。测试结果表明了程序的正确性。 关键词 Mo d b u s ;编译型P L C ;D M A;操作系统 中图分类号 T P 2 7 4 文献标识码A 文章编号1 0 0 9 9 4 9 2 2 0 1 4 1 2 0 2 1 0 0 5 Re s e a r c h a n d I mp l e me n t a t i o n 0 f M o d b u s Pr o t o c o l f o r Co mp l i e d PLC L I N G HU Z h a o ,Y A N G X u d o n g ,C H E N L u n - j u n 1 . S c h o o l o f Me c h a n i c a l E n g i n e e r i n g ,G u i z h o u U n i v e r s i t y ,G u i y a n g 5 5 0 0 2 5 ,C h i n a ;2 . G u i y a n g Y o n g Q i n g Y i D i a n K e J i C o . 。 L t d . ,G u i y a n g 5 5 0 0 2 5 ,C h i n a Ab s t r a c t I n o r d e r t o ma k e t h e c o mmu ni c a t i o n o f c o mp l i e d PL C wh i c h i s r e s e a r c h e d a n d i mp l e me n t e d t o b e c o mpa t i bl e a n d o p e n, Mo d b u s p r o t o c o l i s a d o p t e d .Ai mi n g a t d a t a t r a n s mi s s i o n t h r o u g h i n t e r r u p t wi l l t a k e u p a l o t o f C PU t i me, a n d t h e a d v a n t a g e s a n d d i s a d v a n t a g e s o f s e v e r a l k i n d s o f PL C c o mmu n i c a t i o n mo d e,t h r o u g h t h e s t u d y o f Mo d b u s p r o t o c o l ,wi t h t h e s u p p o r t o f ARM t e c h n o l o g y a n d RTOS, a n d a c c o r d i n g t o t h e c hara c t e r i s t i c s o f c o mp i l e d P LC, a n e w c o mb i n a t i o n a l wa y o f DMA a n d i n t e r r u p t , a n d a e f f e c t i v e mu h i t a s k wa y i s p r o p o s e d . Fi n a l l y , a k i n d o f s e ria l l i n k Mo d b u s c o mmu n i c a t i o n t h a t i s h i g he r r e alt i me, l e s s e r CP U o c c u p a t i o n, a n d s uit a b l e t o c o mp l i e d P LC i s i mp l e me n t e d . T h e t e s t r e s u l t s t u rne d o u t t h a t t h e c o r r e c t n e s s o f t h e p r o a m. Ke y wo r d s M o d b u s ; c o mp l i e d PL C; DMA ; o p e r a t i n g s y s t e m 目前 国内外 的主流 P L C为解 释型 P L C ,原 因 在于其跨平 台性好 ,在线编程能力强 ,但 是执行 效率低Ⅲ ,资源占有量大,实时I生 低,而且P L C 新 兴之处并未形成标准 ,造成 了各 品牌 P L C自成 系 统。随着I E C 6 1 1 3 1 标准和工业场合对实时I生 要求 苛刻等原 因 ,基于 I E C标准 的编译 型P L C逐渐成 为国内外研究课题。在通信方面,各品牌P L C 基 于 自身利益的考虑,基本上都开发有专有通信协 议 ,而面对各种新协议的不断产生,用户往往无 所适从 ,担心会被某些 P L C厂商钳制。Mo d b u s 通 信协议是 M o d i c o n 公司推出的一种公开的工业通 信协议 ,该协议得到了施耐德 、西门子、三菱、 松下等大型P L C 厂商支持 ,同时为各种仪器仪表 广泛支持。基于以上考虑,为使 自主研发的编译 型P L C的通信具有通用性和开放性 ,提供了对 M o d b u s 的支持。本文采用 S T M3 2 F 1 0 7 V C芯片 , 在实现了R S 一 4 8 5 等硬件电路的基础上 ,结合编译 型 P L C的特点 ,综合多任务处理技术 ,对协议的 研究和实现提出了看法和实现方法。 1 编译型 P L C及Mo d b u s 协议简介 编译型P L C不同于解释型P L C ,编写符合编 译型P L C 的M o d b u s 通信 ,首先应熟悉编译型P L C 的特点和Mo d b u s 协议 。 1 . 1 编译型 P L C 编译型P L C ,从编译原理的角度充分体现了 与传统解释型P L C的不同之处。用户编写的程序 在上位机上直接编译 ,一步到位 ,不需要下位机 再进行解 释。正 因其 “ 一次编译 ,多次执行 ”的 收稿 日期 2 0 1 40 71 7 圜薹 蒌 薹 圜 固冒 令狐钊 等编译型P L C M o d b u s 协议的研 究与实现 研究与开 特点 ,一方面减轻了P L C 本体需要装载解释系统 的负担 ,提高了效率,降低了资源占有量;另一 方面增加了P L C 软硬件组合的灵活性。图 1 为编 译型 P L C梯形 图程序编译 流程 。第一次编译 ,把 用户梯形 图程序逻辑编译 成标准 C文件 ,以方便 与库文件一起进行G C C 调用编译 ;第二次编译 , 即G C C 编译以生成可执行文件,编译后便可下载 到P L C 本体中以运行。其中库文件一般包括两部 分,一部分是驱动程序,用于读写I / O ,初始化I / O 等;另一部分是功能库函数,例如移位、P I D 等 功能函数 。若 为带操作系统的 P L C,则库文件 中 还包括操作系统。本文M o d b u s 协议程序即放置于 库文件中,用户编写程序时 ,调用 即可 。 图 1 梯形图程序编译流程图 1 . 2 Mo d b u s 协议 M o d b u s 是一种单主站、多从站的请求/ 应答协 议口 。如 图 2 为 通用 Mo d b u s 帧 。P D U为数 据单 元 ,包括功能码和数据两部分 。功能码 用于指示 所 要执行 的操作 。数据域包含完成指定操作所需 要的附加信息。P D U 上加上地址域和差错校验构 成了A D U ,即应用数据单元。地址域用于标识服 务器 ,服务器用于确定数据帧是否是发送给 自己 的。差错校验码用于确认收发数据的正确性 。 AD U r 。 。 。 。 。 。 。 。 1 r 1 r 。 - - - - - - - - - - 1 r - - - - - - - ’ l地址 域 I l功能 码 l l 数 据 l I差 错校 验 l ■ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 一‘ _ _ _ _ __ - - _ _ - - . - _ 一‘ _ _ _ _ _ _ _ _ - - _ _ - _ _ - - _ - _ - _ _ _ _ - _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 一‘ _ _ _ _ _ _ _ _ _ _ _ _ __ _ _ _ _ _ 一 P D U 图 2 通用 Mo d b u s 帧 2软件实现 M o d b u s 通信过程是主站发送数据给从站,从 站在接收数据后 ,对接收帧进行处理,处理后若 非广播 帧 ,则进行 回复 帧构建 ,并 回复 给主站 。 如图3 为M o d b u s 服务器通信流程。服务器通信的 实现包括 数 据接收和发送 、帧前处理后处理 、 P D U 处理。为使程序各部分耦合性降低,以模块 化的方式来实现 ,模块之间提供相应接 口。R T U 模 式和 A S C I I 模式 因数据流格式不一样 ,在数据 的接收和发送 ,以及前后处理都 不一样 。但是 , 它们可 以有一样 的P D U处理 函数 ,只需把前处理 后 的数据统一为 R T U的八位二进制格式即可 。下 文先 阐述 R T U模式和 A S C I I 模式数 据接收和前后 处 理 ,然 后 阐述 P D U处理 ,最后 探讨多 线程下 Mo d b u s 通信的实现 。 数据接收 一一 一一 前处理 P D U 处 理 后 处理 ⋯ 一一一 数据发送 图3通信流程图 2 . 1 R T U模式 数 据 以报 文 帧方 式发 送 和接 收 ,如 图 4为 R T U数据流格式 。一 帧数据 以非空 闲帧作为帧头 的标记 ,3 . 5 个字符作为帧尾标记 。 图4 R T U数据流 2 . 1 . 1 数据收发 数据的收发 ,通常采用 中断方式来实现 。该 方式优点是配置简单 ,缺点是 占用 C P U过多。 A R M最新 C o t e x 系列芯片支持 D MA 直接存储器 访 问 。根据 R T U传输模式的特点 ,最终采用 D M A组合空闲帧 中断、接收中断的方式 ,而发送 则完全采用 D MA发送 ,具有 C P U占用小 ,速度快 的优点 。图5 为 R T U数据接收程序框图。 R T U模式以3 . 5 个字符作为帧的结束,作为帧 与帧之间标识。其实现算法为 r 1 1 j 3 m s M B b a u d ≤ 1 9 2 0 0 【 一 5 1 . 7 5 m s M B b a u d 1 9 2 0 0 1 匪蟹圜 圈 与开发 启动接收中断 厂接收中断、 启动 D 接收和空 闲帧中断 空闲帧中 ‘ 荧闭空闲帧中断 启动定时器和接收中断 定时器中断 、 丫 一 一 上 Y N 关闭定时器和 D 姒 一帧数据接收完成 启动空闲帧中断 数据帧末收全 图5 R T U数据接收程序框图 其中M B b a u d为串口波特率。因高速传输 时 隐含 着大量 中断 管理 ,从而 导致 C P U负担 加 重 ,所 以在 当波特率 大于 1 9 2 0 0 b i ff s 时 ,定时器 值设为 1 . 7 5 m s 。 2 . 1 . 2 前后处理 前处理 的工作是确定数据是 否发送给本机 , 以及进行C R C 校验确认传输数据的正确性。确定 数据是否发送 给本机 ,通过地址 的判断来确定 。 后处理的工作是确认是否广播帧 ,如果不是则给 回复帧加上 C R C校验码 ,并把数据移交给 D MA。 前后处理分别提供两个函数头,如下 U 8 S MB R T U P r e P r 0 c e s s U8 f r a me ,U 1 6 l e n ; U 8 S MB R T U P 0 s t P mc e s s U 8 f r a me ,U1 6 l e n 。 2 . 2 A S CI I 模式 A S C I I 模式通信 流程和 R T U模式类似 ,不 同 之处在于报文帧数据流格式。图6 为A S C I I 数据流 格式。 l 塑 塑 j l 垫 l 熊 塑 l 熟 量 I 堕 I I 缝 塞 . I I t 1 字符 l l 2 字符 l 2 字 符 l O - 2 x 2 5 2 字符l 2 字符I I c R , L R字 符l 图6 A S C I I 数据流 2 . 2 . 1 数据收发 A S C I I 模式 以 “ ”字符标识数据帧的起始 , C R 回车符 “ \ r ”和 L F 换行符 “ \ n ”作为 帧尾标识 。如果采用 D MA方式来接收 ,则必须通 过查询标识字符来识别帧头和帧尾,所以,采用 接收中断的方式比较合理。其实现可采用状态机 的方式 ,如图 7 所示 。而对 于数据 的发送 ,采 用 D M A方式发送即可。该模式对定时器要求并不 高,协议规定容许有1 S 的延时,但为了适应各种 场合对实时陛的要求 ,该延时值容许用户配置。 图 7 A S C I I 接收状态机 2 . 2 . 2 前后处理 为方便 P D U数据处理 ,在发送前后把数据转 换为八位二进制格式 。前处理程序逻辑为 接收 之后先对把地址转换 以确认地址是否正确 ,如果 正确则全部转换 ,并进行 L R C校验 。后处理给要 回复帧加上 字符 ,然后依次把处理好 的数据转 换为字符形式 ,并添加到 回复帧上 ,然后给 回复 帧 加上 转换 后 的 L R C校验 码 ,最 后加 上 “ \ r ” 、 “ \ I l ”字符。前后处理分别提供两个 函数头 ,如 下 U 8 S MB A S C I I P r e P r o c e s s U 8 f r a m e ,U 1 6 l e n ; U8 S MB AS C I I P o s t P r 】 c e s s f U8 f r a me, U1 6 l e n ; 2 . 3 P DU处 理 P D U处理是通信 的 目的内容 。归纳协议 ,得 图 8 ,可知其处理过程是根据数据帧 的功能码 和 数据域的地址信息对数据进行读写操作 。基于 此 ,P D U处理要实现三部分 内容 数据 的读写操 匦受圈 l 到字串 收个“符 接 一 令狐钊 等编译型P L C M o d b u s 协议的研究与实现 研究与 作 ;相应功能码 的功能函数 ;提供给数据处理 阶 段主程序 的接 口函数 。三者 的程 序逻辑关 系是 接口函数根据功能码查找调用哪个功能函数 ,功 能函数先检查P D U的读写地址和读写数量信息 , 在信息正确的情况下进行读写操作,该过程若有 错误则返 回相应异常。 图 8 P D U处理 流程 离散输入点 和输人寄存 器只可读 ,线 圈和保 持寄存器可读且可写。所以,分别实现四个读写 函数 读取离散输入 、读取输入寄存器 、读写线 圈、读写保持寄存器 ,而其返回参数是枚举类型 的异常码。 MB E x c e p t i o n S MB D i s c r e t e I n p u t R e a d U 8 L a me ,U1 6 a d d r e s s ,U 1 6 N ; / / f r a me 指 向数 据 帧 , a d d r e s s 为读写地址,N为读写数量 ,m o d e 为读写 模式 MB E x c e p t i o n S MBI n p u Re g Re a d f U8 f r a me , U1 6 a d d r e s s ,U1 6 N ; MB E x c e p t i o n MB Co i l s Re a d Wr i t e f U8 La me , U1 6 a d d r e s s ,U 1 6 N,S MB Mo d e m o d e ; MB E x c e p t i o n S MB Ho l d i n g s Re g Re a d Wr i t e U8 f lr a me ,U1 6 a d d r e s s ,U 1 6 N,S MB Mo d e m o d e ; 各功能函数根据P D U 信息调用一次或两次其 中的一个读写函数 ,返回参数异常码。以功能 0 x 1 7 读写多个寄存器功能为例,定义该功能 码功能函数的函数头如下 ,其它功能码的功能函 数头与其相似,仅函数名不同,如下 MB E x c e p t i o n S MB F u n c o 【 1 7 R WHo l d i n g s U 8 L a m e ,U 1 6 L e n ;/ / O x 1 7 功能函数 采用用数组和函数指针的方式来查找并调用 功能函数 ,接 口函数和数组定义如下 MB Ex c e p t i o n S MBP DUP r o c e s s U8 p a me , U1 6 *p L e n / / 接 口函数 T y p e d e f MB E x c e p t i o n p s MB f u n t i o n u 8 p s mb a me ,u 1 6 一t * p l e n ; / / 函数指针 t y p e d e f s t r u c t { u 8 f u n e C o d e ; / / 功能码 p s MB f u n t i o n f u n c ; / / “I 写 函数 S MB _ F u ri c Ha n d l e r s _ T y p e ; s t a t i c S MB Fu n c Ha n d l e r s _Ty pe s mb Fu n- c H a n d l e r s [ S MB F u n c H a n d l e r s Ma x _ N u m ] f F u n c C o d e R e a d C o i l s , S MB F u n c 0 x 0 1 R e a d - C o i l s } , { F u n c C o d e _ Re a d Di s c r e t e, S MB F u n c 0 x 0 2 Re a d D i s c r e t e ,⋯ ; 本文实现 了实现 了十一种功能码 ,满足 P L C 需求 。在 P D U处理实现的基础上 ,组合前后 出 理 ,对 R T U模式和 A S C I I 模式 ,将分别构成下面 两个 函数 。 v o i d S MB R T U P r 0 c e s s 0 ; v o i d S M B A S C I I P r o c e s s 0 ; 2 . 4多线程下的 Mo d b u s 通信 传统P L C 是一个大循环扫描,其通信方式有 两种 以中断的方式执行 ;非 中断方式执行 。中 断的方式是通信数据到达 ,程序立刻跳转到 中断 中执行 ,适合于较高速度的通信场合,缺点是占 用较多C P U 。非中断方式是把通信逻辑放到扫描 程序中,当扫描到了后即执行通信,这种通信方 式适合于低速度通信场合,但是在用户程序量比 较大时 ,延时明显 。本文将提 出采用多任务操作 系统情况下的第三种方法把通信单独做为一个 任务来处理 ,P L C程序采用多任务方式工作 ,设 置通信任务的优先级可以适应对通信任务 的中低 高速要求。 以R T U 模式为例 ,若采用中断方式,只需将 S M B R T u P r 0 c e s s f 组织到定时器中断中即可; 若采 用非中断方式执行 ,只需将S M B R T U P r o c e s s 0 放到 大循环 中即可 。本文也提 出的第 三种方式的实现 隧疑盟 二 二 匡 l
展开阅读全文