请教个问题:S7-200程序中,我用一个sm0.5(1秒时钟脉冲)的脉冲上升沿对VD1000进行浮点数加1.0循环累积,然后再对VD1000除以3600.0,即可得出设备运行的小时数时间。现在的问题是当设备运行时间累积到9321时就不再累积了,程序中发现VD1000的数据不再增加了。3600*9321=33555600,浮点数范围为+1.175495E-38至+3.402823E+38,说明没有超过此范围,这是什么原因呢? 当对VD1000加100.0循环累积时,VD1000的数据又会增加了! 答:这个问题可以给出**的数学解释。 浮点数的精度与它的尾数有关,其尾数为二进制小数1.m,m为23位的小数。所以浮点数的精度为24位二进制有效位数。2的24次方为16777216。 楼主用浮点数能计的*大的数是3600*9321=33555600,该数除以2为16777800,与2的24次方16777216非常接近。在33555600附近加1.0加不上去,不是因为浮点数不能表示更大的数,而是在做加法的时候,两个数的指数应该相同,1.0和33555600.0相比太小了,比33555600.0的尾数*低位(也是浮点数的*低位)的值的一半还小,所以相加的时候1.0的值被四舍五入忽略掉了,以后的累加值都不会增大。 解决的方法: 改为双整数的加法,双整数的有效位数为32位,计小时数够用了。 |
内部 就是自己将外部的模拟量等信号转换成实际物理量后,直接传送到PV_IN 里面,PID功能块再将PV_IN 传送给PV作为PID功能块计算的过程值。 具体 可以参见PID 功能块图 |
*近项目上用的plc是s7-200,本来一直不打算用西家产品的,虽然我知道西家产品质量过关,但是西家的软件我却是不太喜欢的…… 因为娇贵,所以娇气。 它的软件对计算机系统要求太严格了,也许有一点不满足,对于眼前的产品你只能干瞪眼,基于这一点我是不太喜欢它的,这算是迫不得已才去用它的。 我知道光装软件就得一番折腾,不过这次装软件中间只是有点小插曲,头一天晚上装了,但是没成功,或许是因为我同时在装四份软件,或许是我没有关掉杀毒软件、防毒软件…… 不过隔了一夜,第二天早上关掉杀毒、防毒软件,一装就装好了。 满心欢喜地去联机调试的时候,才发现通讯的时候可以正常通讯,在 选好串口, 中可以扫出来PLC的型号,可是下载的时候,就是提示“找不到指定的模块“ 和一个领导我们两个人折腾了半天,也没弄好,总以为是数据线的驱动有问题,因为在另外的台式机上装的同样的软件,只不过是XP系统,完全没问题,*后没办法又找了一个232转485模块,发现还是不行,*后我们只好怀疑是我的系统有问题了,可是网上很多资料显示,sp9版本的软件在win7上没问题的。 直到过了几天,又另找了一条数据线,去****下载了官方提供的驱动,驱动装的很成功,可是去厂里联机的时候,下载时仍然提示“找不到指定的模块”,和另外领导一起研究,也查阅了百度里的各种回复,甚至于本站关于此类问题提供的解决办法,可是一一试过,却并未解决问题。 *后,领导想到了一个办法,问我的软件安装包在哪里,他打算再装一下软件包中comm文件夹中的文件
打开文件夹,双击setup,安装完之后,再去下载,问题迎刃而解! 看到网上提供的办法都不能解决实际问题,甚至于西门子官网提供的解决办法也不可行!
作为一家专业的公司,自己都不能对产品了如指掌,谈何服务呢?在所谓的“**回答”中,用了“可能”和“建议”,以及“**”这样的词,我觉得不太应该的! |