故事作者:W.M.J

最近创作

看看TA的故事

那些年我们制作的辅助编程工具(2)-- PLC程序批量生成

已锁定

W.M.J

  • 帖子

    144
  • 精华

    7
  • 被关注

    40

论坛等级:侠圣

注册时间:2016-11-15

白金 白金 如何晋级?

那些年我们制作的辅助编程工具(2)-- PLC程序批量生成

1541

2

2017-01-12 15:36:41

 

前面我发过一篇《那些年我们制作的辅助编程工具(1)-Step7 DB块变量导入》引发了一些网友的关注,在此做一个简单的说明,写这篇帖子包括以下的帖子的目的是想在帖子中提供编程及制作工具的一种思路,而不是介绍这个工具如何使用,也许这种思路可以在很多编程软件及其他工作中用到。通过这种思路大家可以集思广益去制作出更好的工具来提供我们的编程效率。我知道生成DB的方法有很多,就看使用的人的偏好。希望吐槽的、认为没用的童鞋不要以为我是在为编程画蛇添足。

//=============================================================== 

        在不使用任何辅助编程工具的时候我们在Step7中编写程序是什么样的呢?假设我们对10个直接启动马达进行控制,设备位号为M01-M10,在基于结构化模块化的编程方法下,大概是这样一个过程:

1. 编写一个马达控制的基本功能块:在Step7中添加一个FC/FB,修改符号名为MOTOR_GEN;添加一个自定义数据类型,修改符号名为UDT_MOTOR_CTRL,定义数据成员包含:运行状态变量、故障报警变量、上位机操作变量、故障延时设定变量、运行时间等;完善MOTOR_GEN的控制逻辑。

2. 创建控制变量:添加一个DB,修改符号名为DB_MOTRO_GEN;在DB中依次创建10个变量,名称M01到M10,选择数据类型为UDT_MOTOR_GEN,并输入变量描述。

3. 编写M01的控制程序:中添加一个FC/FB,添加符命号名为FC_M01,在FC_M01调用基本控制块MOTOR_CTRL,根据工艺完善M01的启停条件及连锁条件。

4. 编写M02的控制程序:打开FC_M01,Save As..成另一个功能块,并修改功能块符号名,打开查找/替换功能,把“M01”替换成“M02”,根据工艺完善M02的启停条件及连锁条件。

5. 同样的方法编写M03-M10的程序。

6. 在OB中调用编写好的FC_M0X的所有程序。

        通过上面我们可以看到我们编程大部分在做创建DB、创建FC/FB、添加DB/FC/FB的符号名、Save as、查找/替换的工作,我们可不可以把这部分工作变得简单让辅助工具自动完成而我们只需要修改相关设备的启停调节及连锁条件呢?答案是肯定的。

        在Step7中,我们用LAD、STL都可以反编译成Source源文件,SCL就更不用说了。这种文件是可以导出/导入的,并且可以用文本编辑器打开。即我们可以通过文本编辑器修改代码然后导入到Step7中。

我们再打开Step7中的符号表看看,符号表也是可以导入/导出的,导出的文件后缀为.asc,并且也是可以用文本编辑器打开的。



        工具的实现:

1. 我们把上面编写的FC_M01的块导出并作为此种类型的典型控制程序块,文件名重命名为“MOTOR_GEN.AWL”,其中MOTOR_GEN作为后面定义设备的类型关键字,把文件中的M01替换成关键字“DEVICE_TAG”,把文件中FC  TITLE =后面改为关键字DEVICE_DESC。如下:

FUNCTION "FC_ DEVICE_TAG " : VOID

TITLE = DEVICE_DESC

注:此文件为后面生成程序的模板文件,很关键,反编译的FC可以采用STL和LAD混搭都没有问题,编写逻辑的network可以用LAD,调用基本功能块可以用STL。


2.用Excel在名为“Item List”的工作表中制作一个设备清单,包含设备位号,设备描述,设备类型和分配设备控制的FC编号,设备类型为我们上面保存的STL源文件的文件名称,如下图:

 图1:设备定义

 


3. 在名为“Define”的工作表中预定义此种类型的设备需要在程序中创建的DB及在DB中要创建的变量类型

 

例如上面对MOTOR_GEN类型的设备需要在DB1(DB_DIDO)中创建一个类型为UDT_MOTOR_IO的变量,在DB11(DB_MOTOR_GEN)中创建一个类型为UDT_MOTOR_GEN的变量。

 

4.工具首先从“Item List”的第二行开始搜索,如果设备类型不为“空”时,在文件输路径下创建名为FCs.AWL的文件,在保存“典型文件”(例如上面为“MOTOR_GEN.AWL”)的路径下查找是否有“设备类型.AWL”的文件,如果有,读取文件内容,把文件内容的“DEVICE_TAG”替换成当前行中的设备位号,把DEVICE_DESC替换成当前行中的设备描述,然后添加到FCs.AWL文件中,FCs.AWL即为生成的所有FC的源文件。

如果选择了“生成符号表”则在文件输路径下的符号文件Symbol.asc中插入一条定义FC符号名的文本,符号名命名格式为“FC_设备位号”。添加的文本格式为:

126,FC_xxx                FC      8   FC      8 F描述

如果选择了生成数据表(DB LIST),工具根据前面的设备类型在名为“Define”的工作表中的“Device Type”列中搜索包含相关“设备类型”的行,然后搜寻此行中不为空的列,根据此列的第一行定义的DB(定义格式为:DB编号:DB符号名称),在文件输路径下创建创建名为DB符号名称的DB STL源文件并添加以设备位号命名的变量。

预览一下生成的文件:

 图3:文件预览


工具还包含创建WINCC变量和报警清单,生成的清单可以用来创建WINCC变量和报警,需要定义UDT偏移量及在WINCC变量的后缀,WINCC的消息位等。在此就不介绍。

 

 

图4:定义UDT

 

 

图5: 定义报警



 

那些年我们制作的辅助编程工具(2)-- PLC程序批量生成 已锁定
编辑推荐: 关闭

请填写推广理由:

本版热门话题

网友专栏

共有3363条技术帖

相关推荐

热门标签

相关帖子推荐

guzhang

恭喜,你发布的帖子

评为精华帖!

快扫描右侧二维码晒一晒吧!

再发帖或跟帖交流2条,就能晋升VIP啦!开启更多专属权限!

  • 分享

  • 只看
    楼主

top
您收到0封站内信:
×
×
信息提示
很抱歉!您所访问的页面不存在,或网址发生了变化,请稍后再试。