软件PLC梯形图开发系统的研究与实现.pdf
2 0 1 0 年第5 期 控制与检 测 文章编号 1 0 0 1 2 2 6 5 2 0 1 0 0 5 0 0 4 7 0 5 软件 P L C梯形图开发系统的研究与实现 术 郭 书杰 一, 马跃 , 王品 , 丁万夫 ’ 1 . 中国科学院沈阳计算技术研究所 , 沈阳 1 1 0 1 7 1 ; 2 . 中国科学院研 究生院, 北京 1 0 0 0 4 9 摘 要 软 件 P L C技 术是 工 业 自动化领 域 兴起 的一 项基 于 P C的控 制 技 术 。 结合 数控 系统 用 户 实际 需求 , 同时 为 了减 少 用户在 使 用 产 品 上 的 差 异 , 在 Wi n d o w s平 台上 设 计 实现 了基 于 I E C 6 1 1 3 1 . 3标 准 的软 件 P L C梯 形 图开发 系统 。 首先介 绍 了系统 整体 结构 设 计 , 主 要 模 块 包括 梯 形 图 编辑 、 语 法检 查 、 梯 形 图 向 文本 化指 令表 语 言的转 换 、 指令 表程 序 的 编译 , 接 着详 细 介 绍 了各 个 模 块 的 实现 方 法 , 并 用 实例 验 证 了 开发 系统 的正 确性 , 从 而保证 梯 形 图程序 经过 转换 和编 译过 程后 得到 预期 的 目标代 码 。 关键 词 软 件 P L C; 梯 形 图 ; 指令 表 ; 编译 ; I E C 6 1 l 3 1 . 3 ; 数控 系统 中 图分类 号 T G 6 5 ; T P 2 7 3 文献标 识码 A The Re s e ar c h a nd I m pl e m e nt a t i o n o f S o f t PLC La dd e r Di a g r am De v e l opme n t Sy s t e m GUO S h u j i e 一,MA Yu e ,WANG P i n 一,D I NG Wa n - f u , 1 . S h e n y a n g I n s t i t u t e o f C o mp u t i n g T e c h n o l o g y,t h e C h i n e s e Ac a d e my o f S c i e n c e s ,S h e n y a n g 1 1 0 1 7 1, Ch i n a ; 2 . G r a d u a t e S c h o o l o f t h e C h i n e s e A c a d e m y 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 S o f t PLC t e c h n ol o g y i s a ne w c o n t r o l t e c h n o l o gy ba s e d o n PC i n i n d u s t r i a l a u t o ma t i o n. I n c o n s i d e r - a t i o n o f t h e r e q ui r e me n t o f t h e us e r s o f c o mpu t e r i z e d nu me r i c a l c o nt r ol s ys t e m , a n d t o r e d uc e ma r g i ns i n pr od - u c t u s a g e ,t h e s o ft PLC l a d d e r d i a g r a m d e v e l o pme nt s ys t e m b a s e d o n I EC61 1 31 - 3 s t a n d a r d i s de s i g n e d a n d i m p l e m e n t e d o n Wi n d o ws o p e r a t i n g s y s t e m. F i r s t l y , t h e gi o b a l l o g i c a l s t r u c t u r e o f t h e s y s t e m i s d e v i s e d , i n c l u - d i ng l a d d e r d i a gra m e d i t t i n g ,s yn t a x c h e c k i ng ,c o n v e r s i o n f r o m l a dd e r d i a gra m pr o gra m t o i ns t ru c t i o n l i s t l a n- g u a g e pr o g r a m a n d c o mpi l a t i o n o f t h e i n s t ruc t i o n l i s t l a n g u a g e pr o gra m.S e c o n d l y,t h e c o n c r e t e me t h o d t o i m- pl e me n t e v e r y mo d u l e i s pr e s e n t e d. Fi n a l l y, t h e c o r r e c t n e s s of t h e s ys t e m i s t e s t e d a n d va l i d a t e d by e x a mpl e s . As a r e s u l t 。 t h e c o r r e c t n e s s e n s u r e s t h a t t h e e x p e c t e d o b j e c t c o d e i S o b t a i n e d a ft e r c o n v e r s i o n a n d c o m p i l a t i o n o f t he l a dd e r d i a gra m pr o gra m. K e y w o r d s s o ft p r o gra mma b e l o gi c c o n t r o l l e r ;l a d d e r d i a g r a m;i n s t ruc t i o n l i s t ;c o m p i l a t i o n ;I E C 6 1 1 3 1 - 3 s t a nd a r d;c o mpu t e r i z e d n u me r i c a l c o n t r o l s ys t e m 0 引 言 开 放式 数 控 系 统 是 目前 数 控 技 术 的重 点 发 展 方 向 。以 P C为 硬 件 平 台 , 用 软件 来 实 现 P L C功 能 的 软 件 P L C技术 已经成 为 开 放 式 数 控 系 统 中 P L C 的发 展 趋势 。与传统 P L C的软件结构相同, 软件 P L C也由 开 发系 统和运 行 系统两 部 分组 成 。开 发 系统 用 于 开发 各种 P L C应用 程 序 , 运 行 系统 运 行 P L C应 用 程 序 , 通 过 I / 0板卡 或现 场总线 等 配合 完成 逻 辑控 制 。鉴 于 用户 在数 控 系统工 业 P C面 板 上 操 作 梯形 图 程序 极 不 方便 的事 实 , 本 文 在 Wi n d o w s 平 台下 设 计 实 现 了软 件 P L C梯 形 图开 发 系 统 。对 于 同样 的梯 形 图程 序 , 可 以 生 成与 实时 数控 系统 平 台下 完 全 一致 的 目标 代 码 , 通 过拷 贝 目标 代 码 就 可 实 现 与 软 件 P L C运 行 系 统 的衔 接 。 l 梯形 图开发 系统整体结构 软件 P L C开 发 系统 的 主要 功 能 包 括 P L C应 用 程 序 的编辑 、 编译 功 能 。本开 发 系统从 整体 上共 划分 为 4 个功 能模 块 , 分 别 是 梯 形 图 的 编 辑 、 语 法 检 查 、 向指 令 表语 言程 序 的转换 、 指 令表 程序 的编 译 , 如 图 1所示 。 每个 模 块 负 责 实 现 各 自的功 能 , 并 且各 个 模 块 以 时间顺 序依 次被 调 用 。各模 块 的具 体功 能如 下 梯 形 图编辑 模 块 触 点 、 线 圈 、 功 能 块 等 图 元 以组 收稿 日期 2 0 0 91 1 2 7 基金项 目 “ 高档数控机床与基础制造装备” 科技 重大专项课题 “ 总线式全数字高档数控装置 2 0 0 7 Z X 0 4 0 0 9 0 1 3 ” 作者简介 郭书杰 1 9 8 3 一 , 女 , 山东肥城人 , 中国科 学院 沈 阳计 算技 术研究所 硕士 研究生 , 研究 方 向为数控 系统 中软件 P L C技 术 , Ema i l g u o s h u j i e s i c t . a c . c n 47 控 制与检测 组合机床与自 动化加工技术 厂 一一一一 一一] f ‘ JI f } f 足; I ; 开 发 W in d o w s V “台 i i旦 i 图 1 P L C梯 形图开发 系统整体架构 件 的方 式 给 出 , 本 模 块 可 以插 入 、 删 除 梯 形 图 图元 和 行, 还可实现梯形图程序文件的保存、 打开等操作。 梯 形 图语 法检查 模块 通过 扫 描梯 形 图程序 , 检 查 图 中是 否存在 上 并 联 、 水平 线 有 断 开 、 短 路 、 输 出线 圈 与左轨线直接连接等错误。 梯 形 图向指令表 转换模 块 语 言转换 功 能可 用 时 , 将无语法错误的梯形图程序转换成等价的指令表语言 表 示 的程序 。 指 令 表程 序 编译 模 块 实 现 指令 表 语 言程 序 的编 译 , 生成 预定格 式 的 目标代 码 。 梯形 图开发 系统 的主界 面如 图 2所示 。 剪切 、复制、粘贴 删除网元 、垂直线 查找行、地址 转换、编译 插 图 2 P LC 梯 形 圈开 发 系统 主 界 面 2梯形图编辑模块 梯形 图 编辑 模 块 使 用 了 M F C文 档/ 视 图结 构 , 在 该模 型 中 , M F C文档 对 象负 责将 数 据 读人 或 写 入永 久 存储 区 , 视 图对象从 文档 对象 中获 取数 据 , 管理 数据 的 显示 , 并将任 何数 据更改 传递 回文档 。这种 文 档/ 视 图 的分 离带来 的主 要 优 点是 , 该结 构 能 够 很 好 地 支持 同 一 文档 的多个 视 图 , 梯 形 图 编辑 功 能 的 实 现正 是 利 用 了这一优点。具体地说 , 本模块使用 了单文档 多视 图 结构 , 即使用一 个 文 档 对 象 , 快 、 慢 逻 辑 和 子 程序 分 别 以不 同的视 图对 象 显示 , 对 任 何 一 个 窗 口中梯 形 图 的 更 改 , 都 能在文 档 中得 到更 新 。 梯 形图程 序 以图形输 入方 式建 立 。触 点 、 线 圈 、 功 能块等 图元 以组 件 的方 式 给 出 , 通 过选 择不 同 的组 件 即可绘 制相应 的 图元 ; 还 可 通 过 工具 栏 或 菜 单 删 除 图 元 ; 添加 图元 的 同 时 , 对其 相 关 信 息 的 正确 性 做 检 查 , 如检 查触 点 、 线 圈 、 功能 块 的地 址 格式 是 否 符 合 规 则 , 图元 的各 个输 入域是 否缺 少等 。 2 . 1 图元的存储 和显 示 本模 块 分 离 了图元 的 存储 和显 示 功 能 , 即 图元 的 存储 和显 示采 用 不 同 的数 据 结 构 和实 现 方 法 , 从 而 降 低了二者之间的耦合度, 修改其一不会影 响另一者, 增 强了灵活性。负责显示 图元 的子类 都 以 C c o mp o n e n t 为父 类 , 类 C c o m p o n e n t 的定 义如下 c l a s s CCo mpo n e n t { p ub l i c C S t r i n g Ad d r e s s ; / / 对 应 的地 址 v i r t u a l v o i d D r a w C C l i e n t D C p D C ; / / 负责绘制 相应 的 图元 C P o i n t p o i n t ; / / 绘制图元的起 始坐标 v i r t u a l~C C o m p o n e n t ; } ; 因为各 个 图 元 以 不 同 的 图形 显 示 , 所 以 将 父 类 C c o m p o n e n t 的 D r a w成 员 函数 定义 为虚 函数 , 图元 子类 需要 以各 自的方式 实现 D r a w成员 函数 。 不同图元 的数据存储结构是一致 的, 降低了处理 不同图元时的复杂度。图元的数据存储结构如下 t y p e d e f s t r uc t Gr a p h { UI NT Gr a p h T y p e ; / /图元 的类 型 CS t r i n g Ad d r e s s ; / /图元 对 应 的地 址 C P o i n t p o i n t ; / / 图元 坐标 U I N T F u n l n s T y p e ; / / 如果 G r a p h T y p e 是功 能块类 型 , 该 成 员指 明具体功能块号 C S t r i n g fi r s t i n ; / / n 果 G r a p h T y p e是功 能块类 型 , 最 多 有 5个 输 入 域 CSt r i ng s e c o n di n; CSt r i ng t hi r d i n; CSt r i ng f o r t h i n; CSt r i ng a d d i t i o n a l ; G r a p h P r e G r a p h ; / / 指向前一个 图元 G r a p h N e x t G r a p h ; / / 指 向下一个图元 } G r a p h, L i n e L i s t ; / / Gr a p h表 示一 个 图元 2 . 2 梯 形图 的存储 结构 梯形 图的一行共有 9个图元 , 所 以每行对应的存 储 结构是 一个 由 9个 图元 结 点 组 成 的 双 向链 表 , 在 某 个 结点处 既可 向前扫 描也 可 向后 扫描 , 增强 了插 人 、 删 除图元 时的灵 活性 。 同 时 , 为 了建 立 各 行 之 间 的逻 辑 关 系 , 在每 行对 应 的双 向链 表最 前 面增 加一 个头 结 点 ; 这些 行头 结点 之 间也 以双 向链 表 的方 式 链 接 起 来 , 在 某 行处既 可 向上 扫描 又 可 向下 扫描 进 行 行 的查 找 , 增 强 了插入 、 删 除行时 的灵活 性 。行 头结 点的结 构如下 2 0 1 0 年第5 期 控 制与检测 t y p e de f s t r u c t Li ne He a d No d e { L i n e H e a d N o d e u p ; / / 指 向上一行 L i n e H e a d N o d e d o w n ; / / 指 向下一行 G r a p h r i g h t ; / / 指 向第 一个图元结点 C P o i n t p o i n t ; / / 行所在的位置 , 即行坐标 } L i n e H e a d N o d e ,L i n e H e a d L i s t ; / / L j n e H e a d N o d e表示行双 向链表的头结点 2 . 3梯形 图程 序 的保 存 功 能 通过 从 上 到 下 、 从 左 到 右 的 顺 序 扫 描梯 形 图存 储 结构 , 本模块使用文档序列化来保存 梯形 图程序 ; 当需 要打 开梯 形 图程 序 时 , 根 据 读 入 的数 据 重 新 建 立 梯 形 图存储 结 构 , 然 后 显示 在 窗 口中 即 可 。文 档 序 列 化 使 用 了 MF C提供 的 C A r c h i v e 类 , 它 提供 了一种 极 其 方便 的读 写文件 的方 式 , 重载 了提 取 和 插 入 操 作 符 , 不 仅 支 持基 本 数 据类 型 , 也支 持 C O b j e c t 类 的派 生 类 , 为用户提供了一种方便的对象存档编程接 口。 3 梯 形图语法检查模块 梯 形 图语 法 检 查 模 块 的工 作 是 , 检 查 梯 形 图程 序 中是否 存在 上并 联 、 断路 、 短路 、 桥 路 、 输 出线 圈与 左 轨 线 直接 连接 、 功 能 块前 缺少 输 入 触 点 等 违 反 梯 形 图 编 程 规范 的错误 , 并 针对 出现错 误 的情 况 , 提 示用 户 错 误 的类 型 和位 置 , 帮 助 用 户 纠 正 错 误 。可 能 出 现 的 错 误 类 型举例 如下 上并联 并联分支 出现在主支路的上方 , 如 图 3所示 。 x o o o o o l X O 0 0 0 2 X O 0 0 0 . 3 . . 【 卜 卜 上 图 3上 并联 示例 断路 水 平方 向上 的相 邻 图元 之 间 没有 连 接在 一 起 , 如 图 4所 示 。 _ 1卜 - 一 卜 一 图 4断 路 示 例 短路 图元 并 联 时 至 少 有 一 个 分 支 出现 短 接 的情 况 , 如 图 5所 示 。 三 图 5短 路 示 例 功 能块 前 缺 少 输 入 触 点 一 些 功 能 块 需 要 触 点 作 为输 入 条件 , 如定 时 器 功 能块 T R MB, 当它 前 面 的触 点 值为 1时启动定 时器, 值为 0时关 闭定时器 。错误的 情况 如 图 6所 示 。 图 6功能块前缺 少输入触 点示例 快 、 慢逻辑和子程序 以不 同的窗 口显示 , 针对这种 特 点 , 采 取 的策 略是 对快 、 慢 逻 辑 和子 程 序分 别进 行 语 法 检查 , 即依次 对 每个 窗 口的 梯 形 图 程 序 做 检 查 。此 模块通过从上至下 , 从左到右 的顺序扫描梯形图程序 , 检 查梯 形 图程序 中是否存 在 上 述各 种 错 误 。梯形 图语 法 检查 流程 图如 图 7所示 。 图 7梯 形 图 语 法 检 查 流 程 图 4梯 形图到指令表转换模块 本模块实现梯形图快、 慢逻辑和各子程序对应 的 梯形 图程序 到等 价 的指 令 表语 言 表 示 程 序 的转 换 , 并 通过 新 视 图对象 将转 换结 果 显 示在 新 窗 口上 。具 体 采 用边 遍 历梯 形 图边实 现转 换 的方法 。因 为梯形 图 由若 干个 梯 级组 成 , 遍 历梯 形 图 时就 以梯 级 为单 位 , 采 用 深 度优 先 扫描 的方 法 , 按 照从 上 至 下 , 从 左 到 右 的顺 序 进 行 。扫 描时 , 遇 到并联 支路 就 转 到下 一 行进 行 扫 描 , 由 于 每行 的位 置都 是 不 同 的 , 所 以 在 转 入 并 联 支 路 进 行 扫描 前 , 可先 将 主支路 所 在行 的位 置保 存起 来 , 等 并 联 支路 扫描 结束 后 , 再 从 原 来 的位 置 开始 继 续 扫 描 。 下 面是 扫描 一个 梯级 时 的扫 描顺 序 和转 换 成 的指 令 表语 言程 序段 L D X0 0 0 0 0 AND X0 0 0 0. 1 O R X O 0 0 0 . 2 OR X0 0 0 0 . 3 AND X0 0 0 0 5 图 8梯 形图梯级扫描顺序及转换举例 4 9 控制与检测 组合机床与自动化加工技术 5指令表编译模块 遵 循 编译 程 序 的一般 构 造 方 法 , 本 编译 器 的编 译 过程由词法分析、 语法分析、 语义分析及 目标代码生成 等 几个 阶段组 成 , 每 个 阶 段 完成 整 个 编 译 过 程 的 一部 分 功 能。其 逻辑结 构如 图 9所 示 。 图 9 I L语 言 编 译 器 的 逻 辑 结 构 5 . 1 词 法分析 词法 分析 程序 按 I L语 言 的构 词 规 则 识 别 出一 个 个 单词符 号 , 形 成记 号流 , 所 输 出的单词 符 号 以对偶 的 形 式表示 , 其 中单词 类 别 是 语法分析需要 的信息 , 单词 自身 的值是其他阶段需要 的信息 。 一 个 I L程序 由若 干条 指 令组 成 。按 照 I E C 6 1 1 3 1 . 3国际标准 , 每条指 令 开始 新 的一 行 , 每行 指令 的格 式 如 下所示 标号 操作 符/ 功 能 操 作数 注释 词法 分析 程序是 使用 功能强 大 的 F l e x词法分 析器 生 成工具来 生成 的 。它根据 正则 表 达式 规则 对 源文 件 进 行识别 , 输 出一个 C语 言源程 序 , 为下一 步 的语 法 分 析提供记号和记号的值 。词法分析程序扫描分析用 户 程序文 件 的处 理方 式如下 1 对 于 I L操 作 符 、 F U N C T I O N B L O C K 、 F U N C T I ON、 PROGRAM CONF I GURATI ON、VAR END VAR 等关键字和普通标识符 的处理方法如图 1 0所示 。其 中, 普通标识符可以是系统功能/ 功能块 的名称, 也可 以是用户定义的变量名称。词法分析程序先在变量名 称表 和功 能/ 功 能 块 名 称 表 中查 找 , 如 果 找 到 该 标 识 符 , 则 返 回内部符 号 i d e n t i f i e r t o k e n ; 否 则 , 返 回 内部 符 号 t o k e n i d , 表示该标识符为普通标识符。 50 图 1 0 关键字和标识符的处理方法 2 遇 到换行 符时 , 返 回 E O L标记 。 3 对 于直接 物理 地 址 , 返 回标记 d i r e c t v a r i a b l e t o k e n , 并 将表 示地址 的 文本保 存 。 4 以“ ” 开始 、 “ ” 结束的注释信息、 空格、 制表符 , 不 返 回任 何信 息给语 法 分析 程 序 , 实 现 了注 释 信息 、 空格 的过滤 。 5 对 于 单 个 字 符 的 标 记 , 如 “ ” 、“ ” 、 “ ” 、 “ ” 、“ ” 等原样 返 回给语法 分析 程序 。 作为例子 , 如下的程序段 Fu n1 L D% I X1 0 0 0 . 0注 释 AND % I X1 0 0 0 . 2 S T%Q X 2 0 0 0 . 2 返 回给语法分析程序的是如下内容 i d e n t i f i e r t o k e nEOL LD .OP d i r e c tv a r i a bl e t o k e n EOL AND OP d i r e c tv a r i a bl e.t o k e n EOL S T .OP d i r e c tv a r i a b l et o k e n EOL 其中 L D O P 、 A N D O P 、 S T O P分别表示 I L操作符 L D、 A N D、 S T的 内部 码 。 5 . 2语 法分析 语 法 分析 程 序从 词法 分 析 程 序 中取 得记 号 , 依 据 I L语 言 的语 法规 则 , 将 源程序 的记 号进行 分组 , 产 生用 于生 成 目标 代 码 的 语 法 分 析 树 。本 编 译 器 依 据 I E C 6 1 1 3 1 . 3标 准 中规 定 的语 法规 则来 创建 语法 分 析程 序中的语法结构, 由此可以验证用户编写的 I L语言程 序 的语法 是否 符合 I E C 6 1 1 3 1 . 3国际标准 。 语法 分析 程序 采用功 能 强大 的 G N U B i s o n工具 来 实 现 , 要 做 的工 作 是 用 B i s o n语 法 编 写 描述 I L语 言 的 L A L R 1 上下文 无关 文法 的文件 , 再 使用 B i s o n工具 将 该描述文件转换成分析该文法的 c程序。 描述 文件 中 , 根 据需要 , 为 文法 的终 结符 和 非终 结 符定义了不同的语义值数据类型, 使用%u n i o n声明指 明了全部 可能 的数据 类型 集 。文件 中的每 一个 语法 规 则 , 描述了当这个规则被识别时相应 的执行动作 , 动作 由 C语句序列描述 】 。通过 自底向上地逐步建立语法 分析树, 即从词法分析输出的单词串本身出发, 逐步规 约为文法的开始符号 s t a r t 。当用户逻辑程序 以及相关 的头文件被扫描分析结束 时, 以 t r e e r o o t 作 为人 口的 语法分析树也就建立起来 了, 它将作为代码生成阶段 的输入来被使用。 5 . 3语 义分 析 I L语言程序编译过程中, 语 义分析利用语法分析 阶段确定的层次结构识别表达式和语句中的操作符和 操作数 , 检测 I L程序 的语义错误, 并收集代码生成阶 2 0 1 0 年第5 期 控 制与检测 段用 到 的类 型 信息 。其 中标 识 符 的作 用 域是 语 义 分 析 的核 心 。 在标 识 符 作 用 域 分 析期 间 , 编 译 器 创 建一 张 符号 表 , 用 来记 录标 识符 的名 字 和 属性 。当定 义 标识 符 时 , 就向表中填入它 的名字 和属性 。当使用标识符时 , 就 从表 中读 出有关 的信息 做进 一步 的 分析 。 为 了 实 现 I E C 6 1 1 3 卜3标 准 I L语 言 中 的 F U N C T I O N嵌套 的功能 , 本 编译 器使用 了 cS T L S t a n d . a r d T e m p l a t e L i b r a r y 中 Ma p关 联 容 器 。 分 析 源 程 序 时 , 每 进入新 的 F U N C T I O N范 围层 次 , 就 为这 个 新层 里 的符号 建立 一个 独 立 的 M a p容 器 , 如 图 1 1所 示 , 在 这 个 独立 的 Ma p容 器 中 , 仅 保 存 当 前 F U N C T I O N层 次 的 符 号信 息 。当进 行 查 找 操 作 时 , 只 需 对 该 层 次 独 立 的 Ma p容器 进行 一次 查询 。 匝 亚受 囱至 ● ■ 0 国匾困 图 1 l 符 号 表 的 结构 5 . 4目标 代码 生成 编译 的最后阶段是生成 目标代码 , 其任务是扫描 语法 分析 树 , 生 成 软件 P L C运 行 系 统 所 需 预 定 格 式 的 目标 代码 。 为保 持 目标 结 构 的 一 致性 , 用 户 程 序 中 的 每个 指 令行对应的 目标代码的结构都是相 同的, 即只有一个 操作符和一个对应 的操作数, 如 图 l 2所示 , 其 中, 叩. C o d e和 o p e r a n d分 别 表示 操 作 符 和操 作 数对 应 的数据 结 构 名称 。 图 l 2 目标代码 中指 令行的结构 在 I L用户程序中调用 F U N C T I O N时 , 其参数可 以 有 多个 。为 了实 现 多个参 数 的传 递 , 解 决 的办 法 是 , 将 一 行带 有 多个 参数 的指令 转换 成 目标代 码 中 的多行 等 价 的指 令 。 如果 F U N C T I O N 与 某 些 I L运 算 符 相 同 , 如 , 名 为 A N D的标 准 F U N C T I O N。调 用 这 类 F U N C T I O N 时 , 参 数可 能 是 一 个 也 可 能 是 多 个 , 多 个 的 情 况 是 出 现 了 F U N C T I O N 的重载 。如 果 操 作 数 是 多 个 , 就 将 这 个 指 令行转换 成与参数个 数相 同的多个等 价的指令 行结 构 , 这多个 指 令 的操作 符都 是相 同的 。如指 令行 AND Va r l,Va r 2,Va r 3 的 目标 代 码会 被转 换成 AND Va r l AND Va r 2 AND Va r 3 的 目标 代码 结 构 。 另外, I L语言 中允许用“ ” 和“ ” 来表示指令行的 嵌 套 , 对 这 种嵌 套 采 用 压 入 、 弹 出栈 的方 式 进 行 处 理 。 当检测 到修 饰符 “ ” 时 , 将操 作符 类 型和 当前 C R C u r - r e n t R e s u l t 的值 及 其 数 据 类 型压 入 栈 中保存 , 同时 将 新 的数值 和类型 装 载到 C R 中 , 进 行 “ ” 和 “ ” 内部 的 运算 , 运算结果再保 存到 C R中, 覆盖 C R中原来 的数 据。当检测到修饰符 “ ” 时, 弹 出栈顶保存 的数值及 其数据类型 , 并用操作符和当前 C R值进行运算 , 运算 结果 再次 存储 在 C R中 。 5 . 5 符号 表管 理 和错误 管 理 在编译过程中 , 标识符 的储存 位置、 类型、 作 用域 等信息都被保存到符号表里 , 编译 各阶段的工作 都涉 及 到构 造 、 查找 或更 新 有关 的符 号表 。同 时 , 每 个 阶 段 都 有可 能 遇到错 误 , 各 阶段 检 测 到错 误 后 , 将 以适 当 的 方 式进 行错 误处 理 。 6 结束语 软 件 P L C梯 形 图开 发 系统 充分 利用 了 Wi n d o w s 平 台下的软硬件资源 , 实现了梯形 图程序的编辑、 语法检 查 、 向指 令 表语 言程 序 的转 换及 指 令 表程 序 的 编译 , 解 决 了用 户在 数控 系 统 工 业 P C面 板 上 操 作 梯形 图 程序 极 不方 便 的问 题 。 经 过 大 量 实 例 的 验 证 , 该 开 发 系统 能够 产 生实 时数 控 系统 中 P L C运 行 系统 所需 预定 格式 的目标代码 , 并且 , 同一梯形图程序 , 经该开发 系统处 理生成的 目标代码 , 与实时数控系统平 台下产生 的 目 标代 码 完全 一致 , 从 而 保 证 了软 件 P L C梯形 图开 发 系 统 的正 确性 。 [ 参 考文献] [ 1 ]李爽.基于开放式数控系统 的软 P L C开发 系统 的研究 与实 现 [ D] .哈尔滨 哈尔滨工业 大学机电工程学 院, 2 0 0 6 . [ 2 ]张思 祥.基 于 开放 式 数 控 系 统 的软 P L C 的 研 究 与 开发 [ D] .北京 北京工业大学 , 2 0 0 5 . [ 3 ]周哲.数控系统 中 P L C程序 开发软件研 究与 实现 [ D] .武 汉 武汉 理工大学 , 2 0 0 6 . [ 4 ]K a r l He i n z J o h n ,Mi c h a e l T i e g e l k a m p .中国机 电一体化技术 应用协会秘 书处 翻译 .I E C 6 1 1 3 1 3 工 业 自动 化 系统 的程 序编制 [ S ] . 2 0 0 2 . [ 5 ]C h i n a U n i x Wi k i . F l e x中 文手 册 [ E B / O L ] .h t t p / / w i k i . c h i - n a u ni x .n e t /i n de x. p hp /GNU, 2 00 80305. [ 6]X i a o Wa n g . B i s o n中 文 手 册 [ E B / O L] .h t t p / / g r o . c l i n u x . o r g /f r s / g r o up i d81 3r e l e a s e i d1 0 3 9, 20 0 6 一O12 2. [ 7 ]d e S o u s a M,A C a r v a l h o .A n I E C 6 1 1 3 1 - 3 C o m p i l e r f o r t h e Ma t P L C [ A] . I n I E E E C o n f e r e n c e E m e r g i n g T e c h n o l o g i e s a n d F a c t o r y A u t o m a t i o n [ C] , 2 0 0 3 . [ 8 ]刘霖 , 琚长江 .基于 I E C 6 1 1 3 1 - 3标 准 的 I L编译 器[ J ] .低 压电器 , 2 0 0 7 2 0 5 6 5 9 . 编辑李秀敏 . 5l