zui近看到有些工程师在讨论一个问题,就我们在写程序的过程中,会不会使用io映射,或者是直接使用分配的物理i点和q点。
我个人而言,我是一直在使用的,至于我为什么会使用,我认为它的优点是什么?请看下文!
何为io映射?
即说的是,plc的主程序中不要直接使用物理的i和o地址,而是在程序的一个批量映射,i信号批量复制到中间寄存器或者全局db中,把输出的全局db的数据或寄存器区域的数据批量拷贝到o地址区。
在网上,大多数人都说io映射有这么一个优点,那就是可以保证程序中所有的i/o物理地址只使用1次,如果某个点坏了,可以直接把映射表改一下,既可以更换到另一个备用通道,而主程序逻辑可以丝毫不需要改动。
我个人认为这个观点是仅适用某些情况。
例如:
但是
当我们项目中io量很多是,大多数都会用peek/poke指令,做了个循环,批量式地实现了io映射
或者用blkmov块移动指令
或者variantget/variantput指令
或者用指针(ar)
如果我们是用上述方法做的io映射,假设某个点坏了,那我们该如何替换这个坏的点呢???会不会很麻烦???所以说,“在网上,大多数人都说io映射有这么一个优点,那就是可以保证程序中所有的i/o物理地址只使用1次,如果某个点坏了,可以直接把映射表改一下,既可以更换到另一个备用通道,而主程序逻辑可以丝毫不需要改动”这个优点我认为在这种情况下是不存在的,反而变得更复杂。
而目前,我一直用io映射的主要两个有两个原因。
1.在我入行刚没多就的时候,领导安排我负责某主机厂4条线plc程序编写,做过汽车行业的工程师都知道,主机厂线体程序的各种设备,他的命名,网络地址和io信号等都是有着严格的要求,在项目前期,甲方的相关部门会提供该工厂的所有的设备,他的命名,网络地址和io信号等相关规范给机械电气工程师等。当时的情况是这样子的,我拿到线体的io分配表后,就着手开始编写程序,由于缺乏经验,在编写程序的时候,有使用到io变量的地方,我都是直接有实际的物理变量,当我程序完成到百分之80的时候,甲方突然说,原来规划的地址有问题,需要变更一下,听到这个消息,我当时那个头大啊。后面只能自己加班加点,先通过映射到db变量,再一个一个变量的替换。如果一开始,我就先将io变量映射到db变量,不管他的地址规划如何编号,都可以很快的修改。
2.做过汽车行业的工程师都知道,不管是主机厂的线体,还是零部件厂的工作站,基本都是柔性生产线,可生产多种车型,这种产线的夹具(载具)一般分为两种,一种是通用的(要求比较高,需要满足适用多种车型产品,一般是伺服夹具)一种就是专用夹具,即不同车型产品,对应不对的夹具(需要切换,有手动切换,也有自动切换,比通用夹具浪费节拍)。我这种情况针对于专用夹具。在一些可生产多种车型的工作站中,不同车型对应专用的夹具,一般的电气设计方案都是这样的,不同的夹具上的远程io模块的ip地址(节点)应该是设置成一样的,所有夹具的物理地址也是一样的。这样只需要在第一次导入的时候设置网络即可,后面新增夹具不需要修改和增加网络。但这样子会有这样的一种情况出现,不同夹具的同一路气,它所带的气缸不一样,导致到位开关信号的数量不一样,这时候,如果直接用io变量,可读性就会很差。例如有两套夹具的io信号是这样的
如果我们不做io映射,这些信号的注释就会很乱,程序可读性会很差。
如果我们做了io映射,就可以避免这个问题了。
注释是写在db信号里,程序需要用到的点也是用db信号,这样子程序可读性会比较好
以上仅个人观点,是小潘在项目中用到情景
io映射还有另外许多的优点,等待小潘和各位工程师发掘。
西门子一级总代理商,西门子总代理商,西门子变频器,西门子PLC触摸屏,西门子伺服电机电缆