| 作者 | 主题 |
|---|---|
|
WWCWWC 至圣
经验值:79698 发帖数:9212 精华帖:158 |
楼主
主题:关于编辑plc控制程序“位”操作的记录 关于编辑plc控制程序“位”操作的记录 今天,在“找答案”栏目中看到有这么一个帖子,问题主要是提问如何编辑“位”操作后的记忆,并判断输入状态的先后顺序关系。提问问题的链接: http://www.ad.siemens.com.cn/service/answer/solution.aspx?Q_ID=199688&cid=1029 刚刚,这段时间着手准备为我司涂装线改造准备一些编程思路。是将原2条没有关联是流水线,通过ABB机器人分别将2条线上的工件转移到一条加工线上。其中,需要考虑的问题是流水线取件先后顺序的判断,结果给机器人执行线上工件优先取件的判断,看了提问的内容,感觉这个思路刚刚与提问的雷同,现写一下思路分享一下或许可以参考。 编程思路: 1) 将2条流水线的位置到达信号,关联到一个连续的字中;其实,也是可以关联到需要的存储容量中(字节、双字),只是准备调用添加到表格指令FC84,而该指令的DATA管脚的数据类型是word类型匹配;另外,因为需要判断输入信号的进来判断,300cpu的比较指令也没有字节数据类型。 2) 调用添加到表格指令FC84,该指令的说明: A) 该指令仅仅只有除了使能EN和ENO 2个管脚外,DATA数据源的输入,TABLE是表格地址的起始。 B) TABLE起始地址的第一个字指定表格的长度,这个需要编程者大致估算本表格的预计长度,假设计划放入数据9个;第二个字是描述表格已经存放的数量;第三个字才是表格存放的第一个数据值。 如果连续存放数据,那么,不需要很长时间,表格就会马上存放满了,这显然不是我们想要看到的局面。清空表格的方法应该会有几种方式,方法自己想,很方便的,这里先买一个关子,程序在下面。 程序: 1) 创建一个空项目,315-2pn/dp(步骤不具体描述)。 2) 创建一个数据块DB1,并创建需要的数据地址、数据类型与指令一致。因为FC84指令第一个word是指定表格长度,创建时直接赋值部分长度: 3) 编辑将输入IW0的一个字信息输入表格程序: 4) 启动模拟仿真,验证程序运行:将I0.0信息存放到第一条信息DB1.DBW4中,将输入I0.0 = 1,这时,DB1.DBW2 = 1(表格有一个数据输入) ,DB1.DBW4 = 256(高位低字方式排序) 5) 再将I1.0 = 1输入到表格,运行结果: 6) 如果,在一个周期中有2个输入的状态,结果:因为在沿指令下一个周期需要有2个输入地址,创建一个变量表,试着将I0.1/I1.1同时写入。一时手抖变量表鼠标点击了2次,存放数据变为第5个数据了。 数据能够“记录”。 7) 清空表格的方式: 8) 如何区分2个及以上的输入在同一个周期中的先后顺序?虽然这个概率在实际应用中并不多见。图示是仿真的周期时间,实际运行应用程序时会有差异: 这个问题需要一定的空间讨论了,因为,plc的扫描周期是自左到右,自上而下进行的,在同一个周期内还需要看具体程序段落中IW0的调用程序位置情况,我想只能用外部中断事件来单独处理该模式下的状态记录了,但300、400plc没有现成的外部沿输入中断组织块,可以考虑在循环中断组织块中定义?假设定义循环中断组织块OB35为1mS,那么,把上述程序放到OB35组织块中编写,即每1mS时间内扑捉一次外部输入状态,一旦有状态改变就记录,程序就不列举、仿真了。 |