项目编程中,用到标准转换指令“DTI(双精度整数到整数)”,
结果出现了不满足预期的情况。
一、情况说明:
1. 实际,需要的输出数据--整数为无符号整数、数值范围为0-65535.
2. 项目使用的编程软件、PLC(ST20)均为 V2.8版本 ;
3. SMART 的编程手册(V2.8版本)中,对于16位整数的范围为:
无符号整数、数值范围为0-65535,有符号整数、数值范围为-32768到+32767.

二、遇到的问题:
原数数值范围为0-65535,使用转换指令“DTI(双精度整数到整数)”,当原数为0到+32767时,输出结果正常;当原数>32767时,不能正常输出、输出的结果保持上次的值。
三、实测验证
//测试程序如下
LD Always_On:SM0.0
A 测试1:V0.1
DTI VD200, VW210
//验证结果:
//注: 1. -32768≤ VD200 ≤32767时,正常 -- VW210=VD200
//注: 2. VD200>32767 或 VD200<-32768 时,无输出-- VW210 保持上次的值。
//注: 3. 特例: VD200=4294967295 (16#FFFF FFFF )时,VW210 发生变化:VW210=65535 。
详细测试记录如下图
(测试顺序依次按照图中所示的“测试①-测试⑨”)

总结测试结果:
(注:测试①-测试⑥验证结果为下面序号1-3;测试⑦-测试⑨验证结果为下面序号4)
1. 当(双整数的值范围对应在16位有符号整数、-32768到+32767)-32768≤ VD200 ≤32767时,输出正常 : (整数) VW210= VD200 ;
2. 当VD200<-32768 时,无输出-- VW210 保持上次的值。
3. 当VD200>32767 时,无输出-- VW210 保持上次的值。
(注:16位无符号整数、数值范围为0-65535。)
这意味着,实际要求输出数据--为无符号整数、数值范围为0-65535,使用此指令将会造成数据缺失:数值范围32768到65535的整数无法正常输出。
这是否算是此指令的不足之处?!
4. 特例: VD200=4294967295 (16#FFFF FFFF )时,VW210 发生变化:VW210=65535 。
(注:无符号双整数的数值范围为:0-4294967295)
尽管,项目中基本不可能出现这个极值——4294967295 (16#FFFF FFFF ),
但是,此情况,是否也说明此指令的不足之处?!甚至说是bug?
以上,实测结果仅为个人测试验证结果,
且编程软件、PLC(ST20)均为 V2.8版本,
欢迎有条件、感兴趣的朋友实测验证,
欢迎朋友们分享--其他版本的PLC软硬件实测结果。
不知道,高版本的编程软件、PLC 是否同样存在上述的情况。