技术论坛

 【讨论】关于数据类型对指令的影响

返回主题列表
作者 主题
WWCWWC
至圣

经验值:51671
发帖数:5836
精华帖:119
楼主    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
至圣

经验值:51671
发帖数:5836
精华帖:119
1楼    2021-01-20 13:17:04
精编帖  主题:回复:【讨论】关于数据类型对指令的影响

修改指令变量数据类型后,指令管脚处是有区别的,图示:



威师爷
至圣

经验值:35602
发帖数:5021
精华帖:45
2楼    2021-01-20 13:25:21
精编帖  主题:回复:【讨论】关于数据类型对指令的影响

数据类型不对,程序写的不严谨。

1楼说明了数据类型不对时在TIA平台表现出来的区别。

工业起重机防摇摆 QQ:404136820 AntiSwayControl
WWCWWC
至圣

经验值:51671
发帖数:5836
精华帖:119
3楼    2021-01-20 13:56:29
精编帖  主题:回复:【讨论】关于数据类型对指令的影响

由于编程时的一时大意,我还遇到其它“匪夷所思”的问题,就是类型不同而已。

找到根本原因后再发一贴,现在只是想办法还原当时我在现场的那种模拟情况。

WWCWWC
至圣

经验值:51671
发帖数:5836
精华帖:119
4楼    2021-01-20 14:00:39
精编帖  主题:回复:【讨论】关于数据类型对指令的影响

是的。

  我在举例时,为了说明问题方便还举例了简单明确的数据类型变化,而那些存在于转换指令之间的数据变量,数据类型非常不明确,那些才是需要真正关注到的问题交点。

WWCWWC
至圣

经验值:51671
发帖数:5836
精华帖:119
6楼    2021-01-20 14:15:49
精编帖  主题:回复:【讨论】关于数据类型对指令的影响

就事论事的说,让软件如何判断?

我在开始讲这个问题前,有描述另一种比较典型的容易出错的应用,实际上就是用同一个变量地址,重复多次应用在数据转换的程序中,这样的应用所存在的安全隐患问题相对比较隐蔽了一些。


yming
至圣

经验值:91149
发帖数:18651
精华帖:665
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
至圣

经验值:51671
发帖数:5836
精华帖:119
8楼    2021-01-20 15:09:34
精编帖  主题:回复:【讨论】关于数据类型对指令的影响

是的,是的。

  写这个是我前一些天遇到自己前几年编辑不够严谨的程序,在一些数据转换过程中出现错误,使后面的指令无法正常执行,最后的结果是程序没有相应的输出。

  那为什么需要到现在才发现呢?正是因为程序的运算结果与数据类型转换后双重问题累加的结果,这个也需要概率问题。

  说到温度控制,还真的估计在前一段时间,我们南方相对比较少有的严寒天气,造就了一些设备在特定温度环境下(摄氏10度,设备制造商自定义的温度),在今年罕见零下温度时的启动问题,修改程序当然是一件简单的工作,但是,还是在前期的调查和深入思考、咨询问题上需要下足“功夫”,对设备启动后油、液温度过于低时可能对设备造成的伤害的评估及分析。

Zane
版主

经验值:56244
发帖数:16551
精华帖:319
9楼    2021-01-20 19:21:10
精编帖  主题:回复:【讨论】关于数据类型对指令的影响

还是编程习惯的问题,使用隐式变量转换,给自己挖坑。

Zane 注册自动化系统工程师 Always save before download
holdkcsxyz
奇侠

经验值:8237
发帖数:1102
精华帖:13
10楼    2021-01-21 09:34:23
精编帖  主题:回复:【讨论】关于数据类型对指令的影响

《REAL -> REAL 不管放大还是缩小,精度都会丢失》至理名言。可以想办法让各种类型反馈计算函数的各个输入输出引脚是有符号双整数或长整数。

yming
至圣

经验值:91149
发帖数:18651
精华帖:665
11楼    2021-01-21 15:59:33
精编帖  主题:回复:【讨论】关于数据类型对指令的影响

对于实数的浮点运算,是另一回事儿。

有些时候,实数运算不可避免的需要使用它。这时,应该将其转成更高的精度格式LReal去运算,然后输出成 Real结果。(反正现在绝大多数CPU都是64位的。)

在这里,就是ZANE版主说的,使用显式转换功能块!


我说的是,有些功能性的函数,就是为模拟量端口设计的,ADC它本身没有负值,只有偏置后出现负值。

对于这类函数,如果在一般情况下使用,就要小心了。有的编程版本,它的输入接口处理不了负值!

(这就是为啥有那么多 SP1、2、3 ...,都是 Debug )


学而时习之,不亦说乎?温故而知新,不亦乐乎?
WWCWWC
至圣

经验值:51671
发帖数:5836
精华帖:119
13楼    2021-01-21 16:44:18
精编帖  主题:回复:【讨论】关于数据类型对指令的影响

正如Z版说的那样,使用隐式变量转换时,必须确认过数据转换后数据类型的变化。

我前一段时间所遇到过的问题,真是类似的情况。程序应用很长一段时间没有“暴露”出问题,那天是查温度异常问题时,发现了这个。

您收到0封站内信:
×
×
信息提示
很抱歉!您所访问的页面不存在,或网址发生了变化,请稍后再试。