各位工控的朋友:
提出一个关于循环指令扩展的问题。
西门子自带的ROR或者ROL指令只能针对固定格式的输入,byte,word,dword等。
是否可以通过程序扩展到任意长度呢。
自己用SCL实现了一个简单的逻辑。
#Bittmp := #Pos_Pointer[#BitNo];
FOR #i := #BitNo TO 2 BY -1 DO
#Pos_Pointer[#i] := #Pos_Pointer[#i - 1];
;
END_FOR;
#Pos_Pointer[1] := #Bittmp;
虽然可以解决现场的问题,不过想深度扩展一下发现了问题。
首先输入一定要时array of bool类型的。而且每次是移动1个bit。
现在我的想法有两个:
1:输入引脚类型从array of bool改为any,这样可以指代任意长度的数据。
2:每次循环移位的位数可以通过输入引脚指定。
例如如果移位位数为2,应该是0001,0100,0001,以此类推。
貌似要实现以上功能需要STL语句来实现。
搜索了一下论坛,很早之前有人给过一个FC,输入数据类型是any,但是没有指定每次移动的位数。并且现在原帖已经找不到了。
不知道论坛的高手们有没有好的思路来实现上面的功能。