新闻
SIEMENS西门子北海授权代理商
2023-03-17 13:16  浏览:34
SIEMENS西门子北海授权代理商

SIEMENS西门子北海授权代理商

 SIMATIC 网络浏览器 SOFTNET-PG /2008 软件,用于 PG/OP-通讯 单一授权,安装 R-SW,软件+电子手册 在 CD 上,授权密钥USB闪存,等级 A,2 种语言(德语和英语);用于 32 位: WIN XP PROFESSI6DD1607-0AA2ONAL;WIN V 名称 类型 描述
TEMP OB122EVCLASS BYTE 错误级别/错误ID29xx
TEMP OB122SWFLT BYTE
错误代码:
16#42, 16#43, 16#44 1), 16#45 1)
TEMP OB122PRIORITY BYTE 优先级=错误出现的OB的优先级
TEMP OB122OBNUMBR BYTE 122 = OB122
TEMP OB6DD1607-0AA2122BLKTYPE BYTE 错误出现的块的类型
TEMP OB122MEMAREA BYTE 存储区域和访问类型
TEMP OB122MEMADDR WORD 出错的存储器地址
TEMP OB122BLKNUM WORD 出错的块的号码
TEMP OB122PRGADDR WORD 出错指令的相对地址
TEMP OB122DATETIME DATEANDTIME 启动OB的日期和时间
TEMP 错误 INT 存储SFC44的错误代码
1)不适用于S7-300
STL 说明
L B#16#2942 为应答读I/O时出现的时间错误,将OB122的事件码与事件码
L #OB122SWFLT (B#16#2942)比较, 如果一样跳到“Aerr”。
==I 为寻址错误6DD1607-0AA2(向一个不存在的模板作写操作)将OB122的事件代
JC Aerr 码与事件代码(B#16#2943)作比较。如果一样跳到“STOP”。
L B#16#2943 标号“Aerr”:将DW#16#2912(二进制10010)传送到SFC44
<> I (REPL_VAL)。SFC 44将该值装载到累加器1(替代由OB122
JC Stop 调用而触发的数值)。SFC的错误代码存储在#Error。
Aerr: CALL ”REPL_ISTA *版/商用;WIN 2003/2008 服务器;用于 CP16 
6GK1704-1VW01-0AA0  SIMATIC NET 工业 以太网 SOFTNET 安全客户端 2005 版 用于从编程器/PC 建立安全基于 IP 的 VPN 连接,网段由 SCAL6DD1607-0AA2ANCE S 保证安全; 单一授权,一次安装, 运行版软件(德语/英语),软件和电子手册光盘 
6GK1704-1VW02-0AA0  SIMATIC NET 工业 以太网 SOFTNET 安全客户端 2008 版软件,用于配置 基于 IP 的 VPN 的安全 VPN 连接,从 PC/PG 到网络段,其由 SCALA常闭触头E 进行保护,单一授权,安装 R-SW,软件+|电子手册在 6DD1607-0AA2CD 上,5 种语言 
6GK1704-5CW00-3AE0  SIMATIC NET PB SSOFTNET-S7 升级包,针对 2006 版,用于 S7 通讯,包括 FDL OPC-Server 和 NCM PC;单一授权,单一安装,运行版软件,软件和电子手册光盘,授权密钥 USB-STICK,A 类,德文和英文,用于 32 位 WIN XP PRO, WIN 2003 Server 操作系统
6DD1607-0AA2 SIMATIC NET PB SSOFTNET-S7 升级包,用于 V6.0,V6.1,V6.2 和 2005 版的更新,用于 S7 通讯

网友ktissot在用下面3条指令将浮点数转换为双整数时,发现了一个神秘的现象。

L  MD0
RND     //浮点数四舍五入
T   MD4
我们知道,大的正的双整数是2147483647,大于这个数,RND指令转换会出错。
但是他的帖子说实际上能转换的大的浮点数不是2147483647.0,而是2147483583.0。
这一段本应正常转换的区间转换会出错,为什么转换出错的分界点是2147483583.0,这里面隐藏了什么秘密?
这件事引起我极大的兴趣,为此我用仿真做了大量的实验,下面是我做实验发现的更多的现象:
1.转换出错的情况
RND指令的帮助中说:“如果超出允许范围,则状态位OV和OS被置位为1。结果存在累加器1中”。“出现错误(使用了不能表示为32位整数的NaN或浮点数)时不执行转换并显示溢出。”。
下图用程序状态监控状态字STATUS WORD。
大于2147483647.0时转换出错。
大于2147483584.0到2147483647.0这一段照理说在应该在能转换的范围里,但是转换也会出错,状态字的OV和OS位(第4、5位)被置位为1(见下图)。MD4中是没有转换的浮点数,而不是双整数。转换出错的分界点是2147483584.0。

2.转换成功的情况

小于16777215.0左右转换结果完全正确。转换成功时OV和OS为0。

小于2147483584.0到16777215.0这一段可以转换,但是转换有误差。

接近2147483584.0时,大误差为64。

大于2147483456.0 ~ 2147483584.0时(区间范围为128.0),转换后得到的双整数均为2147483520(16#7FFF FF80,见下图)。转换结果2147483520是区间中点的值,(2147483456 + 2147483584)/2= 2147483520。

大于2147483328.0 ~ 2147483456.0时,转换后得到的双整数均为2147483392(16#7FFF FF00)。

大于2147483200.0 ~ 2147483328.0时,转换后得到的双整数均为2147483264(16#7FFF FE80)。

经过分析,我已经找到了上述现象的原因,结果暂不公布,希望有兴趣的网友一起来分析一下,共享解决问题的快乐。

3.转换结果分析

大于2147483456.0 ~ 2147483584.0时转换后得到2147483520(16#7FFF FF80)。

大于2147483328.0 ~ 2147483456.0时转换后得到2147483392(16#7FFF FF00)。

大于2147483200.0 ~ 2147483328.0时转换后得到2147483264(16#7FFF FE80)。

上述3个区间内部的间隔为128.0,转换结果为区间的中点(2147483456 + 2147483584)/2= 2147483520。

所以这种转换并不**,大误差为128/2=64。


浮点数转换为双整数的转换误差的根本原因是32位浮点数和32位双整数的有效位数的差异造成的。

浮点数由一位符号位、8位指数和尾数的小数部分(23位)组成。尾数的位数决定了浮点数的精度。尾数的整数部分为1,小数部分为23位,所以尾数的有效数字为24位。

双整数除去一位符号位,其有效位数为31位,因此浮点数的有效位数比双整数少7位。

2147483456.0 ~ 2147483584.0相差128.0,它们对应的整数为31位有效数字,这些浮点数输入plc后,因为浮点数的有效位数只有24位,它们的尾数相同,对应的十六进制表示的浮点数均为16#4EFF FFFF,或2.17484e+009(注意有效尾数为十进制7位,而不是对应的整数的10位)。所以转换为双整数后均为2147483520。

ktissot网友说:“这就像看一片湖水一样,你可以看到水和浪花,但是看不到水分子。”由于有效位数较小,浮点数不能分辨“水分子”2147483457.0 ~ 2147483584.0,我们只能看到“浪花”2147483520(16#7FFF FF80)。

如果浮点数较小,例如小于16777215(16#FF FFFF),整数部分只有24位,转换后就没有上述的误差了。在此基础上增大,整数部分的位数越大,误差越大。

因为有效位数相差7位,在接近双整数大值的区段,浮点数的尾数相差一个数时,转换为双整数后,相差128。2的7次方等于128。


4.高端转换出错的原因分析

为什么高端大于2147483584.0的数不能正确地转换呢?请注意小于2147483648.0到大于2147483584.0这段范围刚好是64.0(128.0的一半)。RND指令在转换时将这段范围的尾数四舍五入后,尾数的低位加1,相当于转换后的整数加128(16#80),由上述的16#7FFF FF80(2147483520)加16#80后变为16#8000 0000,超出了双整数整数的允许范围,产生了溢出,所以转换出错


相关新闻
联系方式
公司:浔之漫智控技术-西门子PLC代理商
姓名:聂航(先生)
电话:15221406036
手机:15221406036
地区:直辖市-上海
地址:上海市松江区广富林路4855弄88号3楼
QQ:3064686604
微信:15221406036
15221406036 请卖家联系我
拨打电话
微信咨询
请卖家联系我