一种软PLC编译执行方法.pdf
第 9期 2 0 1 1年 9月 组 合 机 床 与 自 动 化 加 工 技 术 M o d ul a r M a c h i ne To o l Aut o mat i c M a nu f a c t u r i n g Te c hn i qu e NO . 9 S e p.2 0 1 1 文章编号 1 0 0 1 2 2 6 5 2 0 1 1 1 1 0 0 8 5 0 4 一 种软 P L C编译执行方法 高 丽 , 李 忠琪 , 陈 雪 1 . 中国科学院沈阳计算技术研究所, 沈 阳 1 1 0 1 6 8 ; 2 . 中国科学院研 究生院, 北京 1 0 0 0 4 9 摘要 文章提 出了一种软 P L C编译技术。通过分析翻译型和解释型编译方法的不足, 提 出了一种将 指令表程序转变为具有可移植性强的标准 c程序作为 目标语言, 最终将其转换为运行 系统可执行的 目标逻 辑 组件 的编 译技 术 。此编译 技 术利 用 了功 能 强 大的开 源工具 F l e x和 B i s o n进行 词 法和语 法分 析 , 并定 义 了抽 象语 法树 的数 据结 构 , 提 高 了系统的 开放 性和执 行效 率 。 关键 词 软 P L C; 编译 技 术 ; 指令 表 ; C程序 中图分 类号 T H1 6 ; T G 6 5 文 献标识 码 A A Co m p i l a t i o n a nd I m p l e me n t a t i o n M e t ho ds o f S of t PLC GAO L i ,L1 Zh o ng q i ,CHEN Xu e , I . S h e n y a n g I n s t i t u t e o f C o m p u t i n g T e c h n o l o g y ,C h i n e s e A c a d e m y o f S c i e n c e , S h e n y a n g I 1 0 1 6 8 , C h i n a ; 2 . G r a d u a t e U n i v e r s i t y o f C h i n e s e A c a d e my o f S c i e n c e s ,B e i j i n g 1 0 0 0 4 9 , C h i n a Abs t r a c t Th i s pa pe r p r e s e n t s a c o mp i l e r t e c h n o l o g y f o r s o f t PLC. By a n a l y z i n g t h e s ho r t a ge o f t he t r a n s l a t i o n a nd i nt e r p r e t a t i on ba s e d c o mpi l a t i o n me t h o d,t h i s p a p e r p r o p o s e s a n e w c o mpi l e r t e c hn o l o g y t h a t t r a n s l a t e s i ns t r u c t i o n l i s t i nt o t he s t a n d a r d C pr o g r a m a s t h e t a r g e t l a ng ua ge wi t h b e t t e r po r t a bi l i t y, a n d u l t i ma t e l y c o n v e r t s t h e C p r o g r a m t o t h e e x e c u t a b l e o b j e c t i v e l o g i c c o m p o n e n t s f o r o p e r a t i n g s y s t e m c o mp i l e r t e c h n ol og y.Th i s t e c h n o l o g y us e s t h e o p e n s o u r c e t o o l s Fl e x a n d Bi s o n wi t h p o we r f u l f e a t u r e s f o r l e x i c a l a n a l ys i s a n d s y n t a x a n a l ys i s ,a n d d e f i ne s t h e a bs t r a c t s y n t a x t r e e da t a s t r u c t u r e,wh i c h i m p r ov e s t h e s ys t e m g o p e n ne s s a nd i mpl e me nt a t i o n e ffi c i e n c y. Ke y wo r dss o f t PLC ;c o mp i l e r t e c h n ol og y;i n s t r u c t i o n l i s t ;C p r o g r a m 0 引言 软 P L C技术是实现传统硬件 P L C功能软件化的 一 种技术, 它既具有硬件 P L C完成的程序运行、 计算 及数据处理等功能, 又解决 了硬件 P L C中兼容性差 , 资源受 限等各种缺点。在数控系统 中, 对软 P L C技 术 的设计 和 研 究 越来 越重 要 , 软 P L C的 编译 技 术 是 指将 P L C的逻辑 程 序转 换 为计 算机 系 统可 执行 的 目 标代码 。开发 出一个高速、 便利 的软 P L C编译 系统 有利于推动数 控 系统 向高速、 高效、 高精 度方 向发 展 。 目前 已提 出 的软 P L C执 行 方 法 已有 多 种 , 主 要 分为解释执行和编译执行 。编译型是将源代码程序 翻译为 目标机器可识别 的语 言 , 此种执行方 法的缺 点为 目标代码一旦生成 , 就只能在某一单一 的 目标 机器硬件上运行 , 可移植 性差, 但执行速度较快 ; 解 释型执行方法是将源代码程序在 目标机器上直接逐 条解释执行 , 不需要先将其翻译 为 目标机器代码 , 此 种执行方法的不足在于用户程序的运行过程中每一 步都要对其进行解释 , 使得程序运行效率相对低下, 占用资源高 , 不能满足工业 控制过程 中要求的高效 性 高实 时性 ⋯ 。本 文提 出 的方法 以 I E C 6 1 1 3 1 3国际 标准 。 规定的指令表 I L 作 为源语 言, 转换为 可 移植 性 强 的标 准 c语 言 作 为 目标 语 言 , 最 终 将 其 转 换为运 行 系统 可执 行 的 目标 逻 辑 组件 。此编 译 方 法方便用户易于理解 , 且通用性强 , 执行效率高。 1 概 述软 P L C编译技术 编译程序相 当于一个语言翻译程序 , 目的是将 源程序转换为 目标程序 , 即将一种源语言程序翻译 收稿 日期 2 0 1 1 0 32 2 基金项 目 “ 高档数控机床与基础制 造装备 ” 国家科技重大专项、 一开放式数控系统支撑技 术创新平 台建设 2 O 1 1 z x O 4 O 1 60 7 1 作者简介 高丽 1 9 8 4 一 , 女 , 四川广安人 , 中国科 学院沈阳计算技术研究所 , 研究方 向为软 P L C技术 , Em a i l z m t g 1 2 3 1 6 3 . e o m 8 6 组合机床与 自动化加工技术 第 9期 成用另一种语言书写的等价程序。这是一个高度复 杂的整体过程 , 其 内部结构和组织方式具有多种形 式 。 整个 编译 工 作 分 为 前 端 和 后 端 两 个 阶段 完 成 , 每个阶段都 用一段相 对独立 的程序完 成一部分 功 能。 。 , 且各个阶段进行的操作在逻辑上是紧密相连 的。前端完成分析功能 , 其工作基本 与所属机器无 关 , 包括词法分析 、 语法 分析、 语义分析。后端 完成 综合功能 , 与 目标 机器密 切相关 , 包括 中间代码 生 成 、 代码 优 化和 目标代 码生 成 。 若手动编写词法分析程序和语 法分析程序 , 不 仅工作量大 , 而且容易造成人为错误。为了获得 可 靠 、 方便维护的词法和语法分析程序 , 本系统在设计 过 程 中 , 借 助 于 L i n u x环 境 下 功 能 强 大 的 开 源 工 具 F l e x和 B i s o n , 自动生成词法和语法分析程序 。 本文提出的编译 方法 以指令表 为源语言 , 词法 分析程序根据指令表语言定义的词法规则识别出代 表每个单词的记号 , 并将结果返 回给语法分析程序。 语法分析程序根据指令表语言 的语法程序 , 分析其 语 法结构 , 生 成 一 棵 抽 象 语 法 树 。使 用 抽 象 语 法 树 能 够抽象 的描 述 指 令 表 的语 法 结 构 , 包 含指 令 表 中 所有的描述信息 , 语法树 的每个节点都 有一个 v i s i t 函数 , 作为外界 的访问接 口。通过访问抽象语法 树 , 并借助辅助功能函数 , 将语法树 中的语法信息转 化 为 C语 言程 序 。利 用 集 成 到 数 控 系 统 中 的 G C C 编译器 , 通过系统 自动调用脚本 , 能够将生成的 c语 言程序在线编译成 目标代码 。软 P L C编译技术流程 图如 图 1 所示 。 图 1 软 P LC 编 译 技 术 流 程 图 2 I L转换 C程序 2 . 1词法分 析 指令表又称为指令表或布尔助记符 , 是一种用 助记符表示用户逻辑程序的文本化语言 。在词法分 析中将标 准指令表 中的符号划 分 为几 种类型 的单 词 关键字 指令表中的固定指令 , 可归纳为基本指 令 如 L D, R E T U R N, S T等 、 算 术 运 算 指 令 如 A D D, S U B等 、 逻辑运算 指令 如 A N D, O R等 、 其 他指令如 J U M P, C A L L等 。 数值 指令表中用户编写程序中出现的数值 , 主 要有时间类型数 值 , 特殊进 制数值 , 十进 制正负数 值 。 符号变量 用户 自定 义的变量 , 以字母 、 数字 和 允许 出现的特殊符号组成。 其它符 号 指 各种特 殊符号 , 如括 号、 分号 、 冒 号、 问号等。 指令表属 于字符型单词 , 对 于此类单 词 的扫描 与分类采用 F l e x编译工具 , 此工具能够快速识别语 法分析 中已经定义 好 的单词 或匹配类 似 的单 词类 型 , 并有简单的报错处理功能。 2 . 2 语法 分析 语法分析是使用语法分析器将词法扫描器返 回 的各 种记 号进行 语 法检 查 。语 法 检查 的标 准就 是 对 源语 言语 法 的正确分 析 。 在实际应用 中, 指令表程序可 能包 含多个程序 段 , 本文规定每个程序段 以关键字 P R O G R A M开始 , 后面 为程 序段 名、 变量 定义 段、 指令 列 表, 最后 以 END P R O G R A M结束 , 其构成形式如图2所示。 程序段定义 . // ~ . I2 P R O G R A M 开始程序段名变量定义段指令列表以E N D _ P R O G R A M 结束 . . 简 单语 句 带括 号语句 跳转 语句调用 语句 带标号 语句返回 语句 图 2 指令表程序段 的构成形式 对于标准指令表 , 语法规则可以归纳为 程序段 独立 的逻辑程 序段 , 也包括子 程序段。 以 P R O G R A M 开 始 以 E N D P R O G R A M结 束 。 变量定义 程序编写人员对本程序段 中将要使 用到的变量 的预先定 义。以 V A R开 始和 以 E N D V A R结束 的一段程序 , 在某些程序中可以没有变量 定义 段 。 简单语句 操作符 操作码 的形式 , 操作 符可以 是基本指令、 算术运算指令 和逻辑运算指令 , 操作码 可 以是符 号变 量 、 数 值等 。 括号语句形式为 括号外操作符 左括符 操 作数 括号内指令列表 右括符。括号 内指令列表 可以是简单语句 , 也可 以是括号语句, 若是括号语句 则构 成 多层括 号 。多层 括 号 语句 可 以看成 是 多 个 简 单语句的组合 , 在括号语句中的运算有优先级 , 最里 层的运算优先级最高 , 因此在语法分析 中每一 层的 括号表达式都是 自身的循环 即括号语句 的语法结 构的循环 。 跳 转语 句 跳 转指令 跳 转标 号 。 调用语 句 调 用 指 令 功 能 块/ 功 能/ 子 程 序 名 称 。 问 一 堡 蓦 薰 2 0 1 1年 9月 高 丽, 等一种软 P L C编译执行方法 8 7 带标号语句 标号名称 冒号 操 作符。子程 序调用和功能调用会使用带标号语句 。 返 回语 句 R E T数值/ N U L L 。 此阶段主要完成规约句子和生成抽象语法树两 部分工作。采用工具 B i s o n声明语法规则 , 并完成句 子的规约功能。前 面已介绍过指令表 每个程序段 的 构成形式 , 此 阶段 也将 按照指令表程序段 的构成形 式 进行 规约 , 下 面介绍 规约 的实 现过 程 。 s t a r t i l p r o g r a m } 1 ; } / / 非终结符 s t a r t 代表开始符号 ; i l p r o g r a m{ i f t r e e ~ r o o t N U L L t r ee ~r o o t n e w p r o l i s t ; 1 i s t C t r e e r o o t ; } / / 生成语法树 的根节点 I i l p r o g r a m pr o g r a m de c l { 1 ; 一 a d d e l e m e n t 2 ; i n t c o u n t 一 n p r i n t f ” p r o l i s t c o u n t %d \ n ” , c o u n t ; } ; 上面的程序是语法 规则的开始部分 , 目的是生 成一个抽象语 法树的根节点对象 , 并 且将此程序段 的所有终结符和非终结符填充到此语法树 中 , 该过 程能显示出 目前分析的程序段是整个逻辑程序中的 第几 段程 序段 。 对 于每个 程序 段 的规约 规则 如下 p r o g r a md e c l PROGRAM p r o n a me v a r d e c l s t a t e me ntl i s t END PROGRAM { n e w p r o d e c l 2 , 3 , 4, N U L L ; } 先规约程序段 p r o g r a m d e c l , 它由表示开始的终 结符 P R O G R A M, 表示程序名 的非终结符 p r o n a me , 表示 变量 定 义 的非 终 结 符 v a r d e c l , 表 示 指 令 列 表 的 非终结符 s t a t e m e n t l i s t , 表示 终止 的终 结符 E N D P R O G R A M规约而成。而对 于非终结符又有新 的规 约规则 , 可依次按照语法规则规 约, 直到出现终结符 为止 , 即完成了整个语法分析阶段。 2 . 3 C程 序 的生成 2 . 3 . 1 语 法树结 构 语法 树是 语 法 分 析 产 生 的 结 果 , 也 将 用 于 目标 程序生成。其数据结构相 当于一棵树形 结构 , 节点 间的联系表示了语法关联 , 每个 节点都包含 了该节 点的信息 , 在语法分析过 程中不断地将需要用到 的 节点信息填充到各个节点 中, 以便 于编译后端 目标 代码生成 阶段使用。语 法树 的叶子节 点都是 t o k e n 节点 , 即只能以语法分析 中不可再分的 t o k e n结束。 建立一个结构清晰且易于访 问的语法树结构是 至关重要的 , 既能将源语 言中语法 规则 清晰有条理 地表示出来 , 又方便于编译后端 的工作。本文设计 的语法树结构如图 3所示。 图 3语 法树 结构 2 . 3 . 2 目标语 言 的生成 目标语 言生成 的过程 即是对语 法树 遍历 的过 程 , 将每个节点的关系和节点 中的信息 以目标语言 , 即 C程序表示出来 。编译执行的结果将每个指令表 程序翻译成一个 函数 , 每个指令构成的句子翻译成 C 语句 , 这其 中包括 了函数的调用 , 变量 的传递, 选择 语句 , 跳转语句等。表 1为指令表对应 的目标程序。 表 1编译前后的对应 关系 指令表 目标程序 L D 读取一个变量值 S T 给一个变量赋值 算术运算 C语言 中的算术运算十一 / 逻辑运算 C语言 中的逻辑运算 & 1一 调用语句 C a l l 语句 跳转语句 G o t o 语句 返 回 返 回语句 访 问语 法树的过程 中, 为 了能够实现将指令表 程序翻译为特定 的函数形式 , 遍历 时需要使用辅 助 功能函数。例如 , 语 法树的每个节点都有一个 v i s i t 函数, 作为外界 的访问接 口。每个节点中还包 含 一 个 a c c e p t 函数 , 用于存储 v i s i t 函数 中传递来 的值 , 从而能够访问到语法树中的所有的节点。 通过访 问抽象语法树 , 并借助辅助功能函数 , 实 现将语法树中的语法信息转化为 目标语言 c程序。 2 . 4功能 和功 能块 的编 译 为了进一步简化 编译过程 , 提高编译执行 的效 率 , 本 文研 究 的 软 P L C编译 技 术 在 功 能 和 功 能块 的 编译方面采用了将其单独编译的处理方法。该方法 预先将功能和功能块编写成 C语言函数 , 功能和功 能块中需要用 到的函数变量 皆以形参代替 , 在实 际 调用过程 中传递实参进行计算。由于功能和功能块 是由固定的结构构成 , 使得这种方法简便可行。 如上升沿检测功能块的函数可表示为 t y p e d e f s t r u c t{ u n s i g n e d c h a r I N; u n s i g n e d c h a r M ; 8 8 组合 机床 与 自动化加 工技 术 第 9期 u n s i g n e d c h a r Q; } D I F U; / 上升沿检测功能块 的数据结构的定义 / i n t DI FU _ f DI F U DI F US { i f D I F U S一I N D I F U S一M { D I F U S一Q 1 } e l s e { DI F US一Q 0 DI FUS 一 M DI FUS 一 I N r e t u r n 0; } 在 逻辑 程序 最终 生成 目标 逻辑 组 件 时 只需 调 用 函数传递实参 即可 , 这种 函数调 用的方式 省略了编 译 过程 中每 次遇 到 功能 块 和功 能都 要 执行 一次 编 译 步 骤 , 在多个 功 能块 和 功 能存 在 的 指令 表程 序 中 大 大 节约 了编 译 过 程 中所 花 销 的时 间 , 提 高 了 编译 的 效 率 。 3 目标逻辑组件 软 P L C运行系统需要运行 目标代码 , 才能完成 对外部设备的控制, 因此 , 目标代码作为编程系统和 运 行系 统 的桥梁 , 是软 P L C中必不 可少 的一 部分 。 为 了实现系统的通用性, 将源程序转换为标 准 的 C程 序 , 从而 能够 在不 同 的操作 系 统 上进 行 移植 。 目标代 码 与 P L C所 用 的 C P U 指 令 系 统 类 型 相 关 。 目前 , C N C中使用的通用型 C P U是 X 8 6系统 , 因此 , 本系统 的 目标代 码基 于 X 8 6的指令 系 统 而设 计 。在 本系统 中 , 利用 集成 到数控 系统 中 的 G C C编译 器 , 通 过系 统 自动调 用 脚 本 , 将 已经 生成 的 目标语 言 c语 言程序在线编译生成 目标逻辑组件 , 即目标代码 , 以 供运 行环 境 调 用 执 行 。运 行 系 统 不 需 重 新 编 译 内 核 , 只需 动态加 载并 执 行新 的逻 辑组 件 即 可 , 从 而 提 高 了操作 的灵 活性 和系统 的执行 效率 。 4 结束语 本文 提 出的软 P L C编译技 术通 过对 标 准指 令 表 词法归类和语法规则 的分析 , 借助于成熟的编译前 端工 具 , 并 设 计 出 一 个 简 单 的 且 逻 辑 清 晰 的 抽 象语 法树 结构 , 实现 了从标 准指 令 表到 C语 言 的转 换 , 而 功能块和功能等辅助函数的设计简化了整个编译过 程。由于标准 c程序 的通用性使得该编译技术具有 较 强的可 移植性 , 通 过 l i n u x系 统环 境 中 的 编译 器 直 接生 成可 执行 内核 模 块 , 提 高 了编译 速 度 和 执 行 效 率 。 [ 参考文献] [ 1 ]高进 , 秦付军.解 释型软 P L C编译系统设计 [ J ] .机 电工 程技术 , 2 0 1 0, 3 9 6 9 6 9 9 , [ 2 ]K a r l - H e i n z J o h n m,Mi c h a e l T i e g e l k a mp .I E C 6 1 1 3 13 . P r o g r - a m mi n g I n d u s t r i a l A u t o ma t i o n S y s t e ms[ M] .G e r m a n yS p r i n g e r Ve r l a g Co mp a ny,2 0 0 1. [ 3 ]罗伯特 杉布 , 王蔚庭 .I E C 6 1 1 3 1 3国 际标 准简介 [ J ] . 国 内外机电一体化技术 , 2 0 0 1 1 81 4 . [ 4 ]K a r l H e i n z J o Hn , Mi c h a e l T i e g e l K a mp .I E C 6 1 1 3 1 3_T业 自 动化系统的程序编制.中国机电一体化技术应 用协会秘 书处翻译 , 2 0 0 2 . [ 5 ]E d o u a r d T i s s e r a n t ,L a u r e n t B e s s a r d ,Ma r i o d e S o u s a .A n Op e n S o ur c e I EC61 1 31 3 I nt e g r a t e d De v e l o pme n t En v i r o n - me r i t 『 A] .I nI EE E I n t e r n a t i o n a l C o n f e r e n c e o n I n I n d u s t r i a l I n f o r m a t i c s [ C] , 2 0 0 7 . [ 6 ]蒋立源 ,康慕 宁.编译原理 [ M] .西安 西北工业大 学出 版社 , 2 0 0 8 . [ 7 ]J o h n R,L e v i n e ,T o n y Ma s o n ,D o u g B r o w n .L e x与 Y a c c [ M] .北京 机械工业出版社, 2 0 0 3 . 编辑赵蓉 上 接 第 8 4页 \ 图 4 卡爪双导程结构示意图 5 结束语 大孔径气动卡盘 的生产在 国内是空 白, 是石油 套管生产 加工企业 的大型数 控车床 必备 的附属设 备, 有广大的应用前景。卡盘的密封性能要求较高, 因为所有功 能性结构均密封在卡盘体 内, 卡盘体尺 寸结 构较大 , 所 以对 卡盘 关 键部 位 的材料 及 热 处理 、 加工精度和表面质量较一般气动卡盘的要求高。 [ 参考 文献 ] [ 1 ]沈建.斜齿滑块式手动卡盘的结构特点和性能分析 [ J ] . 组 合机 床与 自动化加工技术 , 2 0 0 3 1 1 7 3 7 4 . [ 2 ]沈建.气 动动力卡盘 的结构 、 性能 和应 用 [ J ] .组合机床 与 自动化加工技术 , 2 0 0 4 1 1 8 28 3 . [ 3 ]许福玲 , 陈晓明.液压与气压 传动 [ M] .北京 机械工业 出版社 . 2 0 0 4 . [ 4 ]张玉莲.一种 气动 卡盘夹 紧机构 的设计 [ J ] .机械研 究 与应用, 2 0 0 7 4 9 0 9 1 . 编辑李秀敏