作者 | 主题 |
---|---|
winter938 至圣 经验值: 10673 发帖数: 1561 精华帖: 33 |
楼主 2017-09-06 16:52:11
主题:横向比较s7_200和三菱FX1S-14MT在有符号加减法的表现 最近手头有了FX1S-14MT的实物,对心头一个有了很久的疑问进行了实测。这个疑问就是当加减运算的结果超过了有符号数表达的范围,结果会是怎样的?PLC系统相应的标志位又是怎样的?实验的结果下面以附件图片给出来了,实验是通过触摸屏在线联机后截图所得。可以看出二者有很大的区别,这个区别对我们编程处理高速计数器的数值时有很大影响,我以前的旧贴中提到过,可惜那时没有FX1S-14MT的实物测试一直心存悬疑,看了三菱的手册也是没看太明白(尤其是那个关于标志位的说明)。
工控爱好者
|
芳季 至圣 经验值: 66281 发帖数: 14655 精华帖: 100 |
1楼 2017-09-07 09:09:23
主题:回复:横向比较s7_200和三菱FX1S-14MT在有符号加减法的表现 200呢,是全数轴循环。最大值加1等于最小值,溢出。正负数轴手尾相连,形成一个大圈。 30呢,是半轴循环。最大值加1等于0,溢出。正负数轴两端向中间0值相连,形成正环和负环。 所以200可以理解40000这个值,而30最大只能32767。 最大值加1等于最小值,这方便机械的运算。 最大值加1等于0,比较接近人的感官。 所以,大量的人认为200高速计数器很大值过零的时候会有意外,然后能可每次复位高计为0重新计算。因为感官认识是这样吧。而30的,很大值过零后产生进位标志之后把结果做相应的加或减最大值就可以了。也是感官认识。 殊不知,200的处理方式更加简单,管都不用管。 |
yanxiao 至圣 经验值: 26049 发帖数: 11948 精华帖: 43 |
2楼 2017-09-07 09:36:31
主题:回复:横向比较s7_200和三菱FX1S-14MT在有符号加减法的表现 当采用补码规则进行加减运算时,无符号数和有符号数的运算法则是相同的,直接就是二进制的运算法则。 当需要解释、显示时,才考虑符号位、溢出进位的意义。 我们可以让200做32位、48位、64位等超长的整数运算,利用普通的加减法配合溢出位处理就可以实现。 |
winter938 至圣 经验值: 10673 发帖数: 1561 精华帖: 33 |
3楼 2017-09-07 10:48:29
主题:回复:横向比较s7_200和三菱FX1S-14MT在有符号加减法的表现 就像VD0高位字是VW0而不是VW2一样,三菱的双字D0却是高位字为D1。这些根本的区别给很多人挖过坑,基本而重要的东西,值得大家花时间弄清楚。相信其它品牌的PLC一样会碰到。顺带提一句:高速计数器200和FX1S过了正的最大值再加计数时都是变为负的最大值,即所谓的循环计数以16进制描述就是0000 0000(0)----7FFF FFFF(正极值),8000 0000(负极值),8000 0001-----FFFF FFFE(-2),FFFF FFFF(-1),0000 0000(0)----如此循环,减计数则循环方向相反。
工控爱好者
|
winter938 至圣 经验值: 10673 发帖数: 1561 精华帖: 33 |
7楼 2017-09-14 13:18:56
主题:回复:横向比较s7_200和三菱FX1S-14MT在有符号加减法的表现
工控爱好者
|
winter938 至圣 经验值: 10673 发帖数: 1561 精华帖: 33 |
9楼 2017-09-15 11:01:53
主题:回复:横向比较s7_200和三菱FX1S-14MT在有符号加减法的表现 对7楼的程序实际运行发现非常耗时,串行计算的机制决定了它快不了,只能做一下改善,以下附件程序减少了子程序调用级数,并使用了JMP和LBL指令跳转实现循环代替系统的FOR-NEXT指令,耗时大概缩短三成。翻阅手册发现子程序中使用L存储器虽增加了程序可移植性但程序执行时间比其他存储器会增加很多。等有闲把L换成V试试看。
工控爱好者
|