西门子plc数值处理 点击:770 | 回复:14



yangguang4122

    
  • 精华:1帖
  • 求助:18帖
  • 帖子:20帖 | 42回
  • 年度积分:3
  • 历史总积分:3667
  • 注册:2012年5月23日
发表于:2013-10-16 15:09:35
楼主

请问各位高手:比如vb100中有几个1,我想显示几怎样处理?如有3个1,10010100,就显示3。

    如01000010,就显示2。




银光人生—华

  • 精华:0帖
  • 求助:0帖
  • 帖子:5帖 | 13597回
  • 年度积分:0
  • 历史总积分:52877
  • 注册:2007年11月23日
发表于:2013-10-16 15:48:34
1楼

你这个可以分别对每个位,进行判断处理的;

然后用计数器进行计数;

非标----王者之师

  • 精华:0帖
  • 求助:3帖
  • 帖子:32帖 | 1147回
  • 年度积分:0
  • 历史总积分:3881
  • 注册:2011年10月26日
发表于:2013-10-16 16:48:33
2楼

图中I0.0是开始

对VB100进行循环移位 一次读取V100.0 判断V100.0的状态进行计数。当VB100数据改变还想继续读取的话 记得把VW202清零。(看不清图片可以另存为。本地打开放大即可)

小小付

  • 精华:1帖
  • 求助:3帖
  • 帖子:14帖 | 1802回
  • 年度积分:0
  • 历史总积分:2312
  • 注册:2012年1月09日
发表于:2013-10-16 20:27:50
3楼

如果是200的话,好像专门有个指令,编码还是译码啥的

yangguang4122

  • 精华:1帖
  • 求助:18帖
  • 帖子:20帖 | 42回
  • 年度积分:3
  • 历史总积分:3667
  • 注册:2012年5月23日
发表于:2013-10-17 08:53:42
4楼

非常感谢楼上的各位大师,但是我有140个位,分别进行判断,用计数器太复杂,比较麻烦,而且我这100多个位的数值是由外部设备信号决定的,我只想判断我信号的状态,有几个1,几个0.有没有简单点的方法?

阿水--王者之师

  • 精华:25帖
  • 求助:348帖
  • 帖子:1617帖 | 22281回
  • 年度积分:37
  • 历史总积分:98482
  • 注册:2007年3月22日
发表于:2013-10-17 09:40:57
5楼

   好像是有这么 个 编码的指令,将你程序中的 二进制转换  10 进制输出

yangguang4122

  • 精华:1帖
  • 求助:18帖
  • 帖子:20帖 | 42回
  • 年度积分:3
  • 历史总积分:3667
  • 注册:2012年5月23日
发表于:2013-10-17 09:43:19
6楼

谢谢!我要的数字是里面有几个1,几个0,转换成十进制不行啊。

  • 精华:0帖
  • 求助:0帖
  • 帖子:0帖 | 455回
  • 年度积分:0
  • 历史总积分:1000
  • 注册:2008年1月09日
发表于:2013-10-18 00:14:38
7楼

一个一个点对呗,如果为1,就把一个整数+1

虽然方法有点笨,但能解决问题,就是啰嗦点而已,反正一般而言空间足够用

反正老板不管你怎么做,机器能用就好,而且程序优化了也不加钱的

  • 精华:0帖
  • 求助:0帖
  • 帖子:0帖 | 455回
  • 年度积分:0
  • 历史总积分:1000
  • 注册:2008年1月09日
发表于:2013-10-18 00:15:40
8楼

s7-300里有这个指令库的,好像是bitsum名字

  • 精华:0帖
  • 求助:0帖
  • 帖子:0帖 | 455回
  • 年度积分:0
  • 历史总积分:1000
  • 注册:2008年1月09日
发表于:2013-10-18 00:18:07
9楼

能解决问题的方法就是好方法

这可是很有名的论调哦

沈阳博思科技

  • 精华:0帖
  • 求助:0帖
  • 帖子:6帖 | 162回
  • 年度积分:0
  • 历史总积分:869
  • 注册:2001年5月14日
发表于:2013-10-18 01:08:44
10楼

能解决,如果需要可联系我,QQ:121808645

yangguang4122

  • 精华:1帖
  • 求助:18帖
  • 帖子:20帖 | 42回
  • 年度积分:3
  • 历史总积分:3667
  • 注册:2012年5月23日
发表于:2013-10-18 14:31:23
11楼

谢谢各位!但是我用的是200plc。

sbkkan

  • 精华:0帖
  • 求助:1帖
  • 帖子:5帖 | 112回
  • 年度积分:0
  • 历史总积分:857
  • 注册:2011年8月20日
发表于:2013-11-29 11:58:53
12楼

可以用移位指令,然后用溢出标志去进行加1运算。

如果需要多字节检测,可以写个子程序,子程序的输入参数用指针和字节数,输出运算结果

 

子程序结构,用for,next进行循环,每检测一个字节后指针数加1,检测后面的字节直到完成所有字节的检测,循环体内嵌套一个for-next循环,进行八次移位,八次溢出检测

 

这个子程序其实和CRC校验程序如出一辙,只是内部算法不一样,程序结构完全一样

邵-王者之师

  • 精华:1帖
  • 求助:39帖
  • 帖子:81帖 | 861回
  • 年度积分:0
  • 历史总积分:2844
  • 注册:2011年3月24日
发表于:2013-11-29 21:27:38
13楼

 在日系PLC有这样的指令直接调用。西门子的要花一番功夫。

原理是通过循环移位。程序如图:

 

VB20就是你的开光量计数

邵-王者之师

  • 精华:1帖
  • 求助:39帖
  • 帖子:81帖 | 861回
  • 年度积分:0
  • 历史总积分:2844
  • 注册:2011年3月24日
发表于:2013-11-29 21:30:04
14楼

SM1.1的功能可以参照绑住-循环移位参照

 


热门招聘
相关主题

官方公众号

智造工程师