关于step7库指令FC92的应用及认识
今天闲来无事,回想起前一些天帮公司同事改造一涂装线设备(2条流水线通过机器人合并到一条线上,机器人转运并线的控制程序)。当改造时看到设备制造商那个让我脑子暂时短路的控制程序,至今心还有余悸。我一直认为看别人的控制程序会让我非常纠结的事情,一来需要理解那些平时自己比较生疏的指令及功能应用,二来还必须顺着原编程者的思路进行“摧残心灵”思维进行工作,在现场时间紧迫的状况下,那些程序跳转、信号源的取舍总是让我一时半会摸到点。说实在我自己编程让人家看估计也是同样的境况,做此项工作非常折磨人。
今天晚上,突然想起那个比较熟悉的200指令(循环移位指令SHRB),应用在流水线对产品移动的判断(数据传递方式)比较合适,而设备制造商自己的编辑的控制程序,很容易让我每时每刻掉到他设计的“坑”中,理顺逻辑关系着实消耗了一些时间。当时因为对一些300库某一些指令的生疏,一时没有想起是否300的库指令中也有类似的功能调用。于是打开西门子提供的常用库指令找了找,居然也有类似的库指令可以应用,由于第一次调用该FC92对各管脚没有理解到位,晚上就着手准备通过模拟仿真、学习一下。
仿真过程:
1) 打开step7,打开库找的这个FC92拖拽到程序编辑区,按F1帮助看各管脚的参数及使用说明。
FC92管脚的数据类型:
熟悉FC92的参数及数据类型有助于正确应用,该指令最大移动有效位(Bit)为一个“字”(65535)个位,实际应用中估计不需要这么多个位了。
2) 按FC92参数填入符合数据类型的实参,并启动仿真,创建好需要监控的数据窗口:
FC92管脚含义:
EN:使能管脚(沿触发方式)
DATA:源数据输入,即源数据状态,该功能就是将DATA“位”状态写入到S_BIT指定的数据区中并保存,在下一个有效触发时移动到高位
RESET:复位功能,使能时复位所有数据区为0
S_BIT:存放DATA数据存储区的首地址(指针地址)
N:定义存放数据存储区的范围(2~65535)位
3) 仿真一个MW100的数据,二进制为1010 1010 0000 0010,当I0.0 = 1后,使能I0.2 = 1,结果:
继续输入既定的数据状态值。并输入相应的位状态,监控结果:
4) 继续将I0.0 = 0的状态连续输入,并使能FC92,MW100的值状态原数据已经被移出:
当然,I0.1 = 1复位,再激活FC92后,MW100数据将全部清空。
对于那些流水线控制,需要将检测到的状态值转移到若干的工位后再处理的控制程序,是可以借鉴和参考的。
编程中想到的问题:
当采用指针定义的应用数据区域,用交叉引用方式查询实际应用的地址区,step7是无法实现的,所以,规避地址重复使用指针的查询需要具体看程序中的指定地址范围尤其重要。
编程是一件既快乐而又痛苦的工作,之所以快乐是通过自己的工作,让不可能的事情成为可能;之所以痛苦是遇到问题或困难时的纠结,非常磨砺人的意志。但是,做人必须在痛苦中成长,在痛苦中学习,作为我是一件本质的工作,需要直接面对问题而开展工作,直到把问题迎刃而解。仅以此文给可以参考、借鉴的同行。