举个例子,DB1中我开发了100个WORD类型数据,初始值为0。当我I0.0按下时我想在DB1.DBW0里赋值1,I0.1按下时在DB1.DBW2里赋值2,I0.2按下时在DB1.DBW4里赋值3……以此类推,I0.0、I0.1、I0.2……是点动按钮要求只能保持一个扫描周期(要用到上升沿指令),如果按了I0.0两次就要求DB1.DBW0和DB1.DBW2都为1,以此类推。输入点有100个,请问这样的程序该怎么写?输入点按下的次数是小于等于100,因为DB区只开发了100个字,谢谢!
最佳答案
楼主可以做一个LOOP,检查100个bit的位状态:
当检测到位1的时候执行,根据检测到的位算出应该赋值为几,赋值前先检查该地址了是否已经存放了该数据,如果存放了就地址偏移1个字,计数加1,这个程序应该挺简单的,哈哈~~~~
1.比如现在是I3.5,应该输入3*8+5+1=30,偏移的地址应该是(3*8+5)*2 WORD
2.怎么检查是第1次还是第N次输入,可以给每个点的上升沿都计数都不难。建一个int的数组,还是变址寻址。根据每个点记录的次数,可以算出要偏移多少个word重复写。
楼主没说清楚是否可以覆盖数据:比如I0.0输入了两下,那么I0.1输入的时候数据是否存在DB1.DBW2.
提问者对于答案的评价:
谢谢宁超,但是我还是不知道怎么写,数据不覆盖,输入2下的情况是向下偏移一个字,你可以帮我写个程序发到我邮箱里吗?谢谢。我邮箱是Vicky199086@hotmail.com
专家置评
已阅,最佳答案正确。
原创文章,作者:more0621,如若转载,请注明出处:https://www.zhaoplc.com/plc234649.html