嵌入式软PLC编程系统的设计.pdf
电 气自 动 化 2 o l 0 年 第3 2 卷第2 期 嵌 入 式 系统 ..E.. .m. . .. .b. . . .e...d. . .d. 。 . .e.. .d. . . .S. .. .y. . .s. . .t. .e. m 嵌入式软 P L C编程系统的设计六 De s i g n o f Emb e d d e d So f t PL C Pr o g r a mmi n g Sy s t e m 广东松 山职业技术学院 电气工程系 广东韶关 5 1 2 1 2 6 安静 G u a n g d o n g S o n g s h a n C o l l e g e o f V o c a t i o n a l a n d T e c h n i c a l , S h a o g u a n G u a n g d o n g l 2 l 鱼 n a 2 A n 堡 摘要 完成了一种在 Wi n d o w s 操作环境下采用 v c开发工具设计的嵌入式软 P L C编程系统。采用面向对象的设计思想, 提出了描述软 P L C梯形图元件的数据结构 ,以及对梯形图元件集合存储和交互的方案。该系统针对 V C 的 D o c u m e n t / V i e w的结构 , 设计了软 P L C编程系统的软件结构, 分为编辑、 编译和仿真等功能模块, 且结合相应的算法实现, 并重点介绍了梯形图程序的编辑和编译扫描 原理。为低成本高效率实现嵌入式软 P L C编程系统提出了新方案 , 也为软件开发人员提供一种软件设计的新思维。 关键词 软 P L C 梯形 图编辑编译仿真 Ab s t r a c t T h i s p a p e r a c c o mp l i s h e d a s o r t o f e mb e d d e d s o ft P L C p r o g r a mmi n g s y s t e m u s i n g VC d e v e l o p me n t t o o l s i n W i n d o ws o p e r a ti n g e n - v i ron me n t . T h i s s y s t e m b r i n g s a s o r t o f d a t a s t r u c t u r e t o d e s c r i b e s o f t P L C l a d d e r d i a g r a m c o mp o n e n t s a n d a p r o p o s a l o f s t o r a g i n g l a d d e r - d i a g r a m c o l l e c t i o n s a n d i n t e r f a c i n g w i t h t h e m , w h i c h a d o p t s o b j e c t o r i e n t e d d e s i g n i d e a .T h e r e b y , a c c o r d i n g t o V CD o c u me n t / Vi e w s t r uc t u r e ,d e s i g ns t h e s o f t wa r e a r c h i t e .c t u r e o f s o f t P L C p r o g r a mmi n g s y s t e m,wh i c h i s d i v i d e d i n t o e d i t i n g ,c o mp i l e r a n d s i mu l a t i o n m o d u l e s ,a n d c o mb i n e s wi t h t h e c o r r e s p o n d i n g a l g o r i t h m t o r e a l i z e t h e m,w h i c h e mp h a s i s t h e p r i n c i p l e o f e d i t i n g a n d c o mp l i e r s c a n n i n g . T h i s r e ali z a t i o n f o r l o w c o s t a n d e f f i c i e n t e mb e d d e d s o f t P L C p r o gra mmi n g s y s t e m s o l u t i o n s p u t for w a r d a n e w t h i n k i n g o f t h e s o f t wa r e d e s i g n f o r s o f t wa r e d e v e l o p e r s . ‘ Ke y wo r d s s o f t P L C l a d d e r d i a g r a m e d i t i n g c o mp i l e r s i mu l a t e [ 中图分类号】 T P 2 9 【 文献标识码 ] B[ 文章编号] 1 0 0 0 . 3 8 8 6 2 0 1 0 0 2 0 0 3 2 . 0 4 1 引言 随着计算机科学 的发展 和工业 控制的 I E C 6 1 1 3 1国际标准 的 制定, 出现了用软件方式实现传统 P L C控制功能的软 P L C技术。 软 P L C具有符合现代工业控制技术 的优 点 ,体系结构开放 , 支持多种硬件环境 , 解决 了传统硬 P L C互 不兼容 的问题。软 P L C 把控制运算的功能封装在软件中,具有传统 P L C的功能,可在计 算机操作系统中实现程序的编辑、 运算、 编译、 存储等功能, 具有编 程语言标准化 、 控制功能模块化 、 硬件配置灵活等特点 [2 1 。 本 文介绍的嵌入式 软 P L C编程系统软件在 Wi n d o w s 环境下 引入 V C 开发工具 , 利用 V C强大的软件功能 , 使人机交互 界面更友好, 由于 V C固有的面向对象机制 , 可方便地设计梯 形图数据结构, 并结合相应的算法, 完成软 P L C编程系统设计。 本 文主要给出编辑、 编译和仿真模块。 2 嵌入式软 P L C系统的总体框架 嵌入式软 P L C主要 由编程 系统和运行 系统组成 。 编程系统进 行梯形图的编辑、 指令的解析以及生成目标代码; 运行系统执行目 标代码, 实现控制目的 。其总体架构如图 1 所示。 软 P L C编程 系统 的编 程语 言基 于国际 电工 委员会 发 布的 I E C 6 1 1 3 1 ~3国际标准, 是一个通用的开发环境, 主要是由编辑、 编译、 仿真和通信四大模块组成 。 其中编辑模块提供用户程序开 ★基金项 目 广 东省科技攻 关重点项 目 2 0 0 9 Z 2 1 1 3 2 l E le c t r i c a I A u t o ma t io n 发环境 ;编 译 模 块 实 现 对 用 户 程 序 的 扫 描 和 编译 ; 仿 真 模 块 通J 信l 望旦 堡 垡 蓍 J 通 信 接 口 用 以 离 线 图 1 嵌入式软 P L C系统总体框图 模拟、 调试用户程序; 通信模块负责把编译后的用户程序 目标代码 下载到运行系统。 3 软 P L C编程 系统的界面设计 I E C 6 1 1 3 1 3国际标准 I n t e r n a t i o n a l E l e c t r o t e c h n i c al C o m m i s - s i o n 定义了 5种 P L C编程语言 的规范 梯形图 L D 、 顺序功能图 S F C 、 功能模块 F B D 、 结构化文本 S T 和指令表 I L 1 。由于梯 形图简单、 直观, 所以本编程系统主要采用梯形图作为用户程序的 开发语言。 本软件采用 V C开发工具 ,并基于多文档 的 D o c u me n t / V i e w结构设计 ,以支持梯形 图和指令表对应的格式 ★. 1 a d和 ★ .t x t 。其 界面 由梯形图编辑区、 指令表区和信息输出区三部分组 成 , 如图 2所示 。 1 梯形图编辑区用 于梯形图驻 留和相关参数 的设置 ; 2 指令表区用于显示梯形图对应的逻辑指令 ; 一 璺 一 一 嵌 入 式 系统 E mb e d d e d S y s t e m ■文件 ■■∞t■ 怍 元件曹口q 助m 一 x ⋯ 一。u D 醇 q 母t 瑶 r 个 D RID CIR 1 ; 一I; 卜 ’ c 锢 坷 梯 形 匝 爵旬 囊 转 丧 一 卜 _ 卜 卜 _ . _ _ 地 结 叠 i碗i- ⋯帮 掌 r 一 图 2 软 P LC编程 系统主界面 3 信息输出区显示梯形图可能的语法错误信息以及正确执行 后的输 出信息 。 4 梯 形图数据结构设计 4 . 1 梯形图元件类的继承关系设计 梯形图元件 包括 常开触点 、常闭触点和输出线圈等简单元件 和定时器、 计数器 、 数据运算 包括加减运算 、 比较运算等 等复杂 元 件。 由面向对 象的继承特性 ,可 以抽象出一个类作为梯形图元 件 的总体接 口, 再 以这个类为基础 , 派生 出具体 的元件子类 。梯形 图元件的抽 象类定义如下 c l a s s C P L C E l e m e n t p u b l i c C O b j e c t { p riv a t e i n t m _n R o w ; ∥所在行 i n t m _n C o l ; ∥所在列 B O O L e l e m e n t S t a t e ; / / 是否本元件导通 B O O L i n p u t F i o w; / /是否有 能流流入 B O O L o u t p u t F l o w ; ∥是否有能流流出 p u b l i c v i r t u a l v o i d D r a w C D C p D C / / 绘制 v o i d S e r i a l i z e 【 C A r c h i v e a r ; / / 存储 ∥⋯⋯其它属性和方法 j ; 由此抽象类 派生出简单元件类 和复杂元件类 ,并扩充相应的 属性和方法操作 ; 再 由这两个类派生 出具体元件类 , 如 常开触点或 定 时器等 。图 3给出了各元件类 型的继 承树示意 图。 4 . 2 梯形图容器的数据结构设计 整个存储梯形图的容器选择用双向链表结构表示。其原因基 于以下两点 1 对梯形图的添加、 修改 、 删除等操作, 能够方便地运用链表 的存储结构完成 。 2 梯形 图的编辑过程是动态的 , 梯形 图的行数 、 列数 和元件 类 型都是未知的 , 这种动态存储过程 , 用链表结构 比其他 的数据结 图 3 梯形 图元件类型的继承关系 构表达得更 为 清楚 、 有效 。 存储梯形 图的双向链表 在文档类 中定 义为C O b L i s t m L A D L i s t , 存 电气 自动化} 2 0 1 0年第 3 2卷 第 1期 储梯形 图的容器。由此 , 添加梯形图元件 , 实质就是在内存中建立相 应的对象 , 并调用链表的 A d d H e a d或 A d d T a i 函数加入该对象的指 针 ;而删 除梯形图元件 ,实质就是调用链 表的 R e m o t e He a d或 R e m o v e T a i l 函数移除链表中对应对象的指针 。下列代码表示生成一个 常开元件对象 , 并把该对象的指针加入到链表 中 ∥通过简单工厂生成常开元 件对象 p L A D E l eC P L C F a e t o r y G e t I n s t a n c e T Y P E P O S I T I V E p L A D E l e -- - S e t l s S e l e c t e d F A L S E ; ∥将常开元件对象的指针加到链表中 ∥这里 , p l c L i s t 是指向 m _ L AD L i s t 的指针 p l e L i s t - - * A d d H e a d p L AD E l e ; 4 . 3 用户对梯形图元件的控制 用户通过与编程界面的交互 , 达到对梯形 图元件 的控制。 为 了 缩 小 显 示 、 控 制 和梯 形 图元 件 三 者 间 的耦 合 性 , 可 引 入 MV C Mo d e l V i e w - C o n t r o 1 模式解决 。 其中 , 由 V C中的 C V i e w类 充当 显示部分 , 并设计 C P L C E l e C o n t r o l l e r 类用 以控制梯形图元件。 C P L C E l e C o n t r o l l e r 类依赖于工厂类 C P L C E l e F a c t o r y类, 通过简单工厂模 式 以创建梯形图元件实体 , 并且针对编辑 、 编译和仿真的操作封装 了相应方法。 其定义如下 c l a s s C PL CE l e c o n t r o l l e r { ∥插入元件操作 v o i d I n s e r t C O b L i s t p l e L i s t ,C P o i n t p o i n t ; ∥删除元件操作 v o i d D e l e t e C O b L i s t -k p l c L i s t .C P o i n t p o i n t ; ∥扫描操作 v o i d S c a n C O b L i s t p l c L i s t ; ∥⋯其它属性和方法 ; 5 梯形 图的编辑 梯形图的编辑部分封装 于视图类 , 能实现存储 与显示分离 , 以 有效降低代码的耦 合性 。 梯形图的编辑大体 可分为以下步骤 1 选择所要加载 的梯形 图元件类型 ; 2 用户在编辑 区单击 鼠标 , 扫描程序获取单击点对应位置的 笛卡儿坐标值 ; 3 添加该梯形 图元件到存储链表 中; 4 在窗 口中显示该梯形 图; 5 设置梯形 图元件 的其它参数 。 5 . 1 梯 形 图 的绘制 矢量图是计算机通过数学表达式解析 的图形 ,具有 内存 消耗 小 , 操 作灵 活的特点 。 因此 , 本软件按 矢量绘制梯形 图。 在 V C中 ,MF C类库 中的 C D C类封装 了矢量图的相关操 作, 由此, 对梯形图的绘制可以通过遍历链表 , 并调用 C D C类对象 指针 的函数来完成 。并基于面 向对象的多态性 调用各元件实际的 绘制操作 w h i l e p o s NU L L f p L AD E l e f C L A D E l e ★ p D o c “ - -* m _L A D O b L i s t . G e t At p o s ; ∥调用特定元件 的实际绘制 函数 p L AD E le - D r a w p D C ; E le c t r ic a l Au t oma t io n I 3 3 电 气自 动 化 2 0 1 0 年 第3 2 卷第2 期 嵌 入 式 系统 . .E.. .m.....b. .e....d...d...e. . ..d. . . ..S. . . .y. . s ...t..e . . .m p D o c - - m L A D L i s t . G e t N e x t p o s ; l 梯形 图被绘制后 , 其类 型 、 行号 、 列 号信息均被确定 。而其它 的参数 , 如元件编号 、 定时器的时基 , 由用户输入确定 , 具体可 以通 过添加消息映射函数 ,扫描 鼠标操作实现 。当用户双击某梯形图 元件时, 弹出参数设置对话框, 输入数据后, 相关的参数就被绑定 在该元件对象 中。下面的代码片段表示对定时器设置参数 if d i g . D o Mo d a l I D O K { th i s - U p d a t e D a t a T R U E ; ∥设置定时器 的基时和预设值 p T i m e r S e t B a s e T i me d i g . m_ b a s e T i m e ; p T i m e r S e t P r e s e t d i g . m..p r e s e n t ; } ⋯ } 5 . 2 梯形图的序列化 要实现梯形图的多次编辑 , 就要对梯形图实现序列化 , 将其保 存为文件 ; 而 当再 次调用时 , 需要把程序加载到内存 。 ’ 对于 D o c u m e n t / V i e w结构 , 数据都存放于 C D o c u m e n t 类里 , 将 其 中的变量写入文件 , 即实现 了梯形图的序列化; 打开文件 时, 通过 动态创建机制, 把其中变量导人 内存 , 即实现 了梯形图的反序列化 。 由于梯形图元件类继承 了C O b j e c t 类 , 因此, 运行时其 自身具有 类型识别和动态创建的功能, 在 C A r c h i v e 类中调用重载的读写运算 符“ ” 和“ ” , 就能执行相应文件缓冲区建立和数据读写。 6 梯形图的编译 梯形图的编译是 编程系统的关键部分 ,因为编译的实质是把 用户编辑的梯形图程序 , 经过语 法分析和逻辑分析 , 循环扫描 , 最 终生成运行系统可识别 的 目标程序 。 按照梯形图编程语言规范 , 编译程序扫描梯形 图, 经过语法分 析和逻辑分析后 , 若 发现梯形图有错误 , 便 生成相应的错误提示信 息 , 并复制到用户界面。 6 . 1 梯形图的扫描 梯形图扫描和编译 以梯级为单位 ,且梯级是 由相互影 响的行 组成的最小单元 , 图 4 所示 即为一个梯级 。 对梯形 图的扫描采用深 度扫描算法 ,即以竖线元素作为逻辑 区分 ,对梯形图网络 自左向 右 , 从上至下, 逐个元素进行。 以图 4为例 , 一个梯形图梯级的深度扫描过程 为 ①首先读取 串联关 系的元件 x1 和 X 2 ; ②遇到并联结点 A , 从而转至下一行扫 描, 读取元件 X 4 ; ③遇到并联结点 B, 转至下一行, 读取元件 X 6 ; ④回到并联结点 B, 读取元件 X 5 ;⑤回到并联结点A,读取元件 X 3 ; ⑥读取输 出元件 Y 1 , 则完成该梯级 的扫描和编译 。 图 4 梯形 图扫描过程 图 实践证明 ,该扫描算法容易实现 ,能深入解析梯形图逻辑关 系 , 占用存储空间较少 , 扫描效率较高。 6 . 2 梯 形 图数 据信 息的记 录 为 了提高移植性 ,降低运行系统程序与 V C程序的耦合 度 , 本软件引入 了生成相应的配置文件技术 , 以记 录梯形图的数据 信息 , 供仿 真模块或运行系统读取。 梯形 图被扫描过程 ,程序 自动生成梯形 图相关的逻辑关系数 据对应 的配置文件 ,用 四组数字分别代表梯形 图的类型、连接关 系,包括复杂元件 中定 时器的时基等数据信息 ,以备在运行系统 加载 。其梯形 图数据信息存储结构示例如表 1 所示。 表 1 存储了~个梯形图的梯级信息,~个梯形图元件对应表 中的一格 . 表中 “ X X . X X ” 的格式为简单元件信息 , 分别表示 “ 元 件类型 一 连接关系 一 存储类型 一 对应存储类型数组的偏移量” 。如 表中第 1 行第 l 列的“ 1 0 - 0 2 5 ” 数据 , 代表梯级中位于第 1 行第 1 列 , 无并联关系的常开触点 , 它在简单元件类型输入数组中的存储 偏移虽为 2 5 。 表 1 梯形图数据存储格式 Ru n g 10一O一2 5 90 0 0 9.0 . 0 . 0 5 0000 2 1一O一2 5 9100 2 0 1一O l OOO一0 .Ti me r s . .B a s e Pr e s e n t O 2 1 8 5 7 梯形 图的仿真 为 了判定被编译程序执行 的正确性 ,本编程系统设计了仿真 模块 , 以模拟现场梯 图程序运行。 仿真需要将梯形图程序转化为 C 程序 , 以实现逻辑控制 。 仿真模块主要分为逻辑运算模块 、算术运算模块和梯形图更 新显示模块 ,其中 , 逻辑运算模块是仿真模块的核心 , 负责对梯形 图数据信息的识别, 以及逻辑状态的转移 。 仿真程序通过读取存储梯形图逻辑信息的配置文件,并还原 对应每个梯形 图元件及相应 的逻辑关系。以下的代码片段通过运 行是类型识别,反映了当前读取的元件是常开/ 常闭触点或输出 线圈时的逻辑运算 ∥常闭触 点, 右连接左连接取反 ∥常开触点 , 右连接 左连接 , 不需改动 ∥输 出能流为左连接状态 和本元件状态相与 i f p L AD E l e - - I s Kin d O f R U N T I ME.C l a s s C N a g e t i v e t r u e e l e me n t S t a te e l e me n t S t a t e ; o u t p u t F l o wL e S t a t e m _ n R o w ,n um o 1 i n p u t F l o w ∥输出线 圈, 导通性取决于左连接状态 I f p I A D E l e I s K i n d O f R U N T I ME _ C l a s s C o u t t r u e i n p u t F l o wL e f t S t a t e m _ n R o w . m _ n e o 1 ; 动态仿真过程在梯形图编辑 区实时显示,方便用户进行错误 定位 、 追踪 。具体表现为梯形图元件 能流导通时的变色反显 , 可通 过重绘触发的方式实现。 下转第 镐 页 电 气自 动 化 2 0 1 0 年 第3 2 卷第2 期 新能源发电控 制技术 Th e Ne w En e r g y P o we r C on t r ol T e c h n o to g y S C O p e 2 图 6 整个 系统的仿真 电路 鞣 o i8t 0 .1 0 并网电流 2 0 j8 1 0 0 .10 -2 0 电网电压 2 0 0 0 .2 0 0 0 4 0 4 0 5 0 9 图 7 交流侧 电压 、 指令 电流、 并 网电流和电网电压仿真波形 如图 7所示。 4结论 如何提高太 阳能光伏并网逆变系统转换效率是个很关键的问 题 , 在 目前太阳能光伏电池转换效率还不能有质 的提高的情况下 , 就只能通过改进并网逆 变系统的变换 电路的拓 扑结 构 来 提 高转 换 效 率。显然,单级式的变 换拓扑结构有着明显 的 优势。本文通过对单级 式单相太阳能光伏并网 逆变系统的分析研究 , 在 Ma t l a b R 2 O O 6 a / S i m u l i n k仿 真环境下搭 建了系统的仿真电路进 行仿真实验。仿真结果 表明 系统能很好地跟 踪最 大功率并实现并 网 ,并 网 电流 的 波形 T H D只有 1 . 7 2 %。 本仿 真系统对实际系统实验 有很好的指导作用。 参考文献 f 1 】吴理博 , 赵争鸣 , 刘建 政 , 王健 , 刘树 . 单级式 光 伏并网逆变系统 中的最大 功率点跟踪算法 稳定性研 究 [ J 】 . 中 国 电 机 工程 学 报 , 2 0 0 6 , 3 6 7 37 6 【 2 ]C h e n Y , S m e d l e y K .A c o s t - e f f e c t i v e s i n g l e s t a g e i n v e r t e r wit h ma x i mu m p o w e r p o i n t t r a c k i n g [ J 】. I E EE T r a n s a c t i o n 0 1 1 P o we r E l e c t r o n i c s , 2 0 0 4, 1 9 5 1 2 8 9 ~l 2 9 4 f 3]L i a n g T J , K o u Y C , C h e n J R . S i n g l e - s ta g e p h 0 一 t o v o l t a i c e n e r g y c o n v e r s i o n s y s t e m[ J 】. P r o c . I n s t . E l e c t .E n g . , 2 0 0 1 , 4 1 4 8 3 3 93 4 4 [ 4 ] 王飞. 单相光伏并网系 统 的分 析 与研 究 [ D】 . 合 肥 合 肥工业 大学 博士学 位论文 , 2 0 0 5 , 1 1 3 8~4 3 , 6 87 2 【 5] 余运 江. 单相光 伏并 网逆变器 的研究 【 D ] . 浙 江大学 硕士学 位论文 , 2 00 8 . 7 1 7 ~2 5 . 31~3 8 上接第 3 4页 8结语 本嵌入式软 P L C编程系统实现 了梯形图的编辑 、 编译和仿真 功能。 并基于 V C 开发平 台面向对象的封装 、 继承和多态性 . 通 过编辑过程 引入存储梯形 图信息的配置文件 ,实现 了编译 与仿真 的桥接, 有效地降低了与 V C开发环境的耦合度, 移植性强。 参考文献 [ 1 】 高金刚, 陈建春, 刘雄伟. 数控系统的软 P L C系统开发f J 】 . 计算机测量 48 I E le c t r ic a I A u t o ma t io n 与控制. 2 0 0 4 . 1 2 3 2 5 4~2 5 6 [ 2 ] 肖世广, 李彦, 吉华. L i n u x环境下基于 Q l 库的软件 P L C编程系统【 J 】 . 计算机工程与设计,2 0 0 7 4 1 6 6 3~1 6 6 6 [ 3] 黄延延 , 林 跃, 于海 彬软 P L C技术研 究及 实现 【 J ] .计算 机工 程, 2 0 0 4. 3 0f l 1 1 6 5~ 1 6 7 [ 41 江连海. 嵌入式控制 系统开发平 台上软 P L C的实现【 D 】 . 华中科技学, 2 0 0 5 1 4 1 7 【 作者简介 ] 安静 1 9 7 6一 , 女 , 讲师 , 硕 士研 究生 , 教师 。 研 究方向为控 制工程 , 神经网络, P L C技 术。