模拟量处理程序 点击:991 | 回复:13



飞鸿2008

    
  • 精华:0帖
  • 求助:0帖
  • 帖子:13帖 | 23回
  • 年度积分:0
  • 历史总积分:80
  • 注册:2005年10月07日
发表于:2007-12-06 16:57:00
楼主
模拟量在程序中做加,减,乘除运算时,是转换成带符号的BCD码进行的吗?因为刚采样来的是二进制数,那么在运算过程中有小数出现时又如何办呢?我看资料BCD码最大是9999,那对数据处理又有了限制,不知道兄弟们是怎么做的,可能我理解的有问题。我觉得模拟量处理上,西门子PLC就好使多了,很好理解。



西玛仪表 028-66505957 13808018567

  • 精华:0帖
  • 求助:2帖
  • 帖子:54帖 | 1652回
  • 年度积分:0
  • 历史总积分:2355
  • 注册:2006年4月18日
发表于:2007-12-06 17:25:00
1楼
我做模拟量的输入时大部分是采用工程量进行加减乘除计算的~要不就采用转换数值计算,如27468,65535等。所以不存在小数问题。

蓝天月亮

  • 精华:0帖
  • 求助:0帖
  • 帖子:37帖 | 1447回
  • 年度积分:0
  • 历史总积分:3594
  • 注册:2007年10月22日
发表于:2007-12-06 19:20:00
2楼
不需要吧,现在欧姆龙CP1H就有很多功能了

haha_gao

  • 精华:0帖
  • 求助:0帖
  • 帖子:0帖 | 635回
  • 年度积分:0
  • 历史总积分:848
  • 注册:2004年9月29日
发表于:2007-12-07 14:24:00
3楼
用指令转化一下数据类型呀

Legoooooooooooooo

  • 精华:0帖
  • 求助:0帖
  • 帖子:9帖 | 135回
  • 年度积分:0
  • 历史总积分:922
  • 注册:2006年7月08日
发表于:2007-12-08 00:16:00
4楼
把所有相关浮点数放大10倍或100倍再进行运算,最后在电脑上显示结果别忘了缩小。
建议全部用二进制进行运算,不要用BCD。

飞鸿2008

  • 精华:0帖
  • 求助:0帖
  • 帖子:13帖 | 23回
  • 年度积分:0
  • 历史总积分:80
  • 注册:2005年10月07日
发表于:2007-12-10 09:26:00
5楼
Legoooooooooooooo兄弟:对于二进制运算,进位怎么用呢?运算中采用进位运算吗?

origin

  • 精华:0帖
  • 求助:0帖
  • 帖子:4帖 | 10回
  • 年度积分:0
  • 历史总积分:55
  • 注册:2002年9月14日
发表于:2007-12-10 16:21:00
6楼
用高级一点的PLC吧,低端的omronPLC不适合处理浮点数。

pqsh

  • 精华:0帖
  • 求助:0帖
  • 帖子:0帖 | 291回
  • 年度积分:0
  • 历史总积分:432
  • 注册:2006年9月20日
发表于:2007-12-10 17:09:00
7楼
建议不做小数处理,并时刻注意精度要求.
要处理的话,如楼上所说,选浮点处理的plc.

Legoooooooooooooo

  • 精华:0帖
  • 求助:0帖
  • 帖子:9帖 | 135回
  • 年度积分:0
  • 历史总积分:922
  • 注册:2006年7月08日
发表于:2007-12-11 15:50:00
8楼
飞鸿2008兄弟:
数据类型:
Int:-32767 +32768
UIint:0-65535
还不够用啊?
不够用可以用双整型。
这下足够了吧?
只要长度足够,根本不需要考虑进位的问题!

李超X

  • 精华:0帖
  • 求助:0帖
  • 帖子:1帖 | 84回
  • 年度积分:0
  • 历史总积分:101
  • 注册:2006年4月21日
发表于:2007-12-11 17:05:00
9楼
下面引用由Legoooooooooooooo在 2007-12-8 0:16:00 发表的内容:
  把所有相关浮点数放大10倍或100倍再进行运算,最后在电脑上显示结果别忘了缩小。<br>建议全部用二进制进行…
--------------------------------------------------------------------------------------------

飞鸿2008

  • 精华:0帖
  • 求助:0帖
  • 帖子:13帖 | 23回
  • 年度积分:0
  • 历史总积分:80
  • 注册:2005年10月07日
发表于:2007-12-13 10:33:00
10楼
Legoooooooooooooo兄弟:
     我做例子用,我MOV #0FA0 D0
                   * D0 #01F4 D1
     我运行后,在*指令中怎么出现了D0是&3904,应该是&4000才对吧,不知道怎么回事,说来听听啊。 

飞鸿2008

  • 精华:0帖
  • 求助:0帖
  • 帖子:13帖 | 23回
  • 年度积分:0
  • 历史总积分:80
  • 注册:2005年10月07日
发表于:2007-12-13 10:40:00
11楼
 Legoooooooooooooo兄弟:
     我做例子用。MOV #0FA0 D0
                 * D0 #01F4 D1
     很简单啊,可是在*指令中出现了D0是&3904,可是应该是&4000才对啊。这样再往下运算,结果就有一定的误差,不知道这么回事。

飞鸿2008

  • 精华:0帖
  • 求助:0帖
  • 帖子:13帖 | 23回
  • 年度积分:0
  • 历史总积分:80
  • 注册:2005年10月07日
发表于:2007-12-13 11:46:00
12楼
不好意思,问题解决了。

MEBO

  • 精华:0帖
  • 求助:0帖
  • 帖子:12帖 | 236回
  • 年度积分:0
  • 历史总积分:0
  • 注册:1900年1月01日
发表于:2008-01-31 22:23:00
13楼
haha

热门招聘
相关主题

官方公众号

智造工程师