作者 | 主题 |
---|---|
WWCWWC 至圣 经验值:72003 发帖数:8041 精华帖:145 |
楼主 2021-01-20 10:03:41
主题:【讨论】关于数据类型对指令的影响 关于数据类型对指令的影响 前一段时间,遇到一件“匪夷所思”的问题,一套315-2DP系统,有一段简单温度控制程序(非PID控制),自改造后运行几个月后突然似乎失控了。因为是在现场“抢修”,很多可能的问题被我人为“干预”掉了,一些疑问在我回来后,也进行了一些仿真的验证,还未真正意义上找到问题的根源。 今天,在“找答案”栏目中,又看到一则类似的情况,于是,再次“触景生情”想起前段时间那个“类似”的问题。 问题贴链接:http://www.ad.siemens.com.cn/service/answer/solve_247524_1072.html 提问者大致描述一个模拟量转换指令的应用,只是这个模拟量输出“没有”按提问者的要求显示需要的“数据”而已,声明:NORM_X 、SCALE_X就是portal软件环境下的比例缩放指令,该指令没有问题能够正常转换的。 图示:为验证方便,我在填写NORM_X指令的VALUE定义MW0变量地址并定义INT数据类型数据。 打开所有变量表看MD10/MD14及MW0的数据类型,图示: 再次声明,这些自定义的变量地址中的数据类型是系统“自动”生成的,为验证这些,我重新定义MD18/MD22,分别再次填写到各自管脚中,图示:模拟量输入不变。 系统仍然“自动”生成2个Real数据类型的数据。这里所谓的“自动”是与指令的数据类型选项有关的,图示: 正是因为我前一段时间遇到的类似问题,我在变量表中人为修改数据类型,看仿真结果,图示:假设改为Dword 同样方式,把2个变量的数据类型变更为DINT类型,图示: 由此,不按“常理”出牌后的结果就是提问者描述的那样“匪夷所思”了。 |
WWCWWC 至圣 经验值:72003 发帖数:8041 精华帖:145 |
1楼 2021-01-20 13:17:04
主题:回复:【讨论】关于数据类型对指令的影响 |
威师爷 至圣 经验值:37430 发帖数:5126 精华帖:47 |
2楼 2021-01-20 13:25:21
主题:回复:【讨论】关于数据类型对指令的影响 数据类型不对,程序写的不严谨。 1楼说明了数据类型不对时在TIA平台表现出来的区别。
工业起重机防摇摆 QQ:404136820 AntiSwayControl
|
WWCWWC 至圣 经验值:72003 发帖数:8041 精华帖:145 |
3楼 2021-01-20 13:56:29
主题:回复:【讨论】关于数据类型对指令的影响 由于编程时的一时大意,我还遇到其它“匪夷所思”的问题,就是类型不同而已。 找到根本原因后再发一贴,现在只是想办法还原当时我在现场的那种模拟情况。 |
WWCWWC 至圣 经验值:72003 发帖数:8041 精华帖:145 |
4楼 2021-01-20 14:00:39
主题:回复:【讨论】关于数据类型对指令的影响 是的。 我在举例时,为了说明问题方便还举例了简单明确的数据类型变化,而那些存在于转换指令之间的数据变量,数据类型非常不明确,那些才是需要真正关注到的问题交点。 |
WWCWWC 至圣 经验值:72003 发帖数:8041 精华帖:145 |
6楼 2021-01-20 14:15:49
主题:回复:【讨论】关于数据类型对指令的影响 就事论事的说,让软件如何判断? 我在开始讲这个问题前,有描述另一种比较典型的容易出错的应用,实际上就是用同一个变量地址,重复多次应用在数据转换的程序中,这样的应用所存在的安全隐患问题相对比较隐蔽了一些。 |
yming 至圣 经验值:127286 发帖数:21992 精华帖:824 |
7楼 2021-01-20 14:28:52
主题:回复:【讨论】关于数据类型对指令的影响 实际上,这两个函数应该完全对应。 INT -> REAL : REAL -> INT。就是将PZD状态的INT实际值转成实数,继而而用于实数计算,实数计算的结果转成INT成为某个设定值,发送。这是它原本的功能。 REAL -> REAL 不管放大还是缩小,精度都会丢失。 实在不建议用转换成实数显示。HMI尽量用百分比显示。真需要时,在HMI上转换成X100整数(设置小数位) 数据类型一定要注意!就像通讯中PZD转速是一个字,它实际表达的是-32768 - 32767=-200% - 200%。有人用WORD,正常看不出看,一旦反转(负的转速,频率。),问题就出来了。 这在通讯中也是一样会遇到的!LOGO!中,模拟量的值,如果传送的是INT,而处理它的功能块只接受传感器模拟量值(0-10V没有负值)也会出问题的。 包括,南方天冷气温降到零下时,问题就出来了。
学而时习之,不亦说乎?温故而知新,不亦乐乎?
|
WWCWWC 至圣 经验值:72003 发帖数:8041 精华帖:145 |
8楼 2021-01-20 15:09:34
主题:回复:【讨论】关于数据类型对指令的影响 是的,是的。 写这个是我前一些天遇到自己前几年编辑不够严谨的程序,在一些数据转换过程中出现错误,使后面的指令无法正常执行,最后的结果是程序没有相应的输出。 那为什么需要到现在才发现呢?正是因为程序的运算结果与数据类型转换后双重问题累加的结果,这个也需要概率问题。 说到温度控制,还真的估计在前一段时间,我们南方相对比较少有的严寒天气,造就了一些设备在特定温度环境下(摄氏10度,设备制造商自定义的温度),在今年罕见零下温度时的启动问题,修改程序当然是一件简单的工作,但是,还是在前期的调查和深入思考、咨询问题上需要下足“功夫”,对设备启动后油、液温度过于低时可能对设备造成的伤害的评估及分析。 |
Zane 版主 经验值:76112 发帖数:19121 精华帖:378 |
9楼 2021-01-20 19:21:10
主题:回复:【讨论】关于数据类型对指令的影响 还是编程习惯的问题,使用隐式变量转换,给自己挖坑。
Zane
注册自动化系统工程师
Always save before download
|
holdkcsxyz 至圣 经验值:13012 发帖数:1814 精华帖:22 |
10楼 2021-01-21 09:34:23
主题:回复:【讨论】关于数据类型对指令的影响 《REAL -> REAL 不管放大还是缩小,精度都会丢失》至理名言。可以想办法让各种类型反馈计算函数的各个输入输出引脚是有符号双整数或长整数。 |
yming 至圣 经验值:127286 发帖数:21992 精华帖:824 |
11楼 2021-01-21 15:59:33
主题:回复:【讨论】关于数据类型对指令的影响 对于实数的浮点运算,是另一回事儿。 有些时候,实数运算不可避免的需要使用它。这时,应该将其转成更高的精度格式LReal去运算,然后输出成 Real结果。(反正现在绝大多数CPU都是64位的。) 在这里,就是ZANE版主说的,使用显式转换功能块! 我说的是,有些功能性的函数,就是为模拟量端口设计的,ADC它本身没有负值,只有偏置后出现负值。 对于这类函数,如果在一般情况下使用,就要小心了。有的编程版本,它的输入接口处理不了负值! (这就是为啥有那么多 SP1、2、3 ...,都是 Debug )
学而时习之,不亦说乎?温故而知新,不亦乐乎?
|
WWCWWC 至圣 经验值:72003 发帖数:8041 精华帖:145 |
13楼 2021-01-21 16:44:18
主题:回复:【讨论】关于数据类型对指令的影响 正如Z版说的那样,使用隐式变量转换时,必须确认过数据转换后数据类型的变化。 我前一段时间所遇到过的问题,真是类似的情况。程序应用很长一段时间没有“暴露”出问题,那天是查温度异常问题时,发现了这个。 |