| 作者 | 主题 |
|---|---|
|
W.M.J 侠圣
经验值:2255 发帖数:143 精华帖:7 |
楼主
主题:那些年我们制作的辅助编程工具(1)—— Step 7 DB块变量导入
大家编程前是不是都会从工艺P&ID图也好、电气图纸也好知道了有哪些需要控制的设备?答案应该是肯定的!勤劳的我们还会把它用Excel整理成一份设备清单,列出设备位号、设备类型(如开 关阀、调节阀、普通马达……),设备描述。通过这份清单和你的程序结构基本上知道了要编写控制这些设备的程序需要创建那些DB和变量。但是要把这些变量输入到Step7的DB中是一件耗时而痛苦 的工作。“懒惰”的人们总想着有什么轻松而愉快的方法。 记得刚开始学编程的时候,对编程工作没有什么规划,更谈不上编程的前期设计,编程的时候也都是在OB1中用简单的LAD语句实现一些继电器逻辑。在编程的过程中那是天马行空、想到哪儿编到 哪儿。编程中需要一个中间变量过渡一下就去DB或者M区声明一个变量,特别是M区,总是经常去查看交叉参考,担心一不小心变量用重复了。编程和变量声明是同时进行的,没有办法根据前面的设 备清单预先定义编程中需要的变量。 后来知道了模块化编程,让编程开始前预先定义好几乎所需变量成为可能。学会了对程序中重复用的控制逻辑用一个功能块(FB/FC)去编写,然后去调用它。对要控制的设备的功能也考虑得更充 分,例如对一个阀门的控制也不会觉得就是给Q点赋值TRUE或者FALSE那么简单了,至少会考虑集合以下功能:1.能够通过HMI进行手自动切换;2. 能实现根据逻辑自动打开/关闭;3. HMI中能够手 动打开/关闭;4.打开、关闭故障报警及报警延时时间设定;5. HMI中能够显示其状态(打开、关闭、报警……)等等。最开始想到的都是通过输入、输出参数传递,写出来的功能块像一只大大的蜈 蚣,编程时需要在DB中定义一大堆变量!!后来我们知道了有一种很好的Data Type叫“用户自定义类型”,可以把很多变量集合在一起定义成自定义类型,然后在DB块中声明成这种类型的变量作为 功能块的IN_OUT参数传递进功能块。这样我们只需要在DB中对被控设备声明一个变量:设备位号、变量类型(UDT)、设备描述。这个和我们前面整理的设备清单是不是很像啊?是不是只需要把设 备清单中的设备类型改为变量类型然后导入进Step7中就OK啦?赶快打开Step7试一下!瞬间绝望,因为setp 7的DB不支持从Excel导入的功能。还好有一段时间对SCL编程很感兴趣,知道了通过SCL编译后也可以生成DB,SCL中都是类似文本编辑的工作。SCL中创建DB最简单的代码如下: DATA_BLOCK DB编号或者DB符号名 END_STRUCT; 定义变量只需要按格式填写在STRUCT 和END_STRUCT之间就行了。OK,办法来了,通过VB编写一个工具,根据设备清单整理一份PLC变量表格,然后通过工具创建一个文本文件,首先输入数据块前 面的几行固定文本,替换DB的编号或者DB的符号名,然后读取Excel的变量表,以“变量名:数据类型;//设备描述”的格式填写,然后写入后面几行固定文本,把文件存为.scl的格式,最后通过 Step导入外部源程序,编译……搞定!后来因为SCL需要单独安装SCL编程工具,不方便,生成的文件改为了.AWL 的格式。这就是N年前我做的第一个编程辅助工具!虽然后来被我制作的更强大的工 具所代替,但是这种读Excel表格->生成文本文件->导入->编译的思路和方法一直是制作后面工具的基础。
|