yangguang4122
请问各位高手:比如vb100中有几个1,我想显示几怎样处理?如有3个1,10010100,就显示3。
如01000010,就显示2。
银光人生—华
你这个可以分别对每个位,进行判断处理的;
然后用计数器进行计数;
非标----王者之师
图中I0.0是开始
对VB100进行循环移位 一次读取V100.0 判断V100.0的状态进行计数。当VB100数据改变还想继续读取的话 记得把VW202清零。(看不清图片可以另存为。本地打开放大即可)
小小付
如果是200的话,好像专门有个指令,编码还是译码啥的
非常感谢楼上的各位大师,但是我有140个位,分别进行判断,用计数器太复杂,比较麻烦,而且我这100多个位的数值是由外部设备信号决定的,我只想判断我信号的状态,有几个1,几个0.有没有简单点的方法?
阿水--王者之师
好像是有这么 个 编码的指令,将你程序中的 二进制转换 10 进制输出
谢谢!我要的数字是里面有几个1,几个0,转换成十进制不行啊。
一个一个点对呗,如果为1,就把一个整数+1
虽然方法有点笨,但能解决问题,就是啰嗦点而已,反正一般而言空间足够用
反正老板不管你怎么做,机器能用就好,而且程序优化了也不加钱的
s7-300里有这个指令库的,好像是bitsum名字
能解决问题的方法就是好方法
这可是很有名的论调哦
沈阳博思科技
能解决,如果需要可联系我,QQ:121808645
谢谢各位!但是我用的是200plc。
sbkkan
可以用移位指令,然后用溢出标志去进行加1运算。
如果需要多字节检测,可以写个子程序,子程序的输入参数用指针和字节数,输出运算结果
子程序结构,用for,next进行循环,每检测一个字节后指针数加1,检测后面的字节直到完成所有字节的检测,循环体内嵌套一个for-next循环,进行八次移位,八次溢出检测
这个子程序其实和CRC校验程序如出一辙,只是内部算法不一样,程序结构完全一样
邵-王者之师
在日系PLC有这样的指令直接调用。西门子的要花一番功夫。
原理是通过循环移位。程序如图:
VB20就是你的开光量计数
SM1.1的功能可以参照绑住-循环移位参照