发表于:2014/1/15 14:13:16
#0楼
在命令库中,用于数据转换的功能块有很多,比如LREAL_VALUE_TO_WORD等,这些转换块如果使用不当,很容易造成FPU异常停机。
在CPU停机时,也可以在其诊断缓冲区中读取到这些错误信息,比如:
Floating-point exception in the user program
Error 11330 BackgroundTask, ST_1, line 66 (@ 'testToruqeLimiting'): FPU exception
Call stack:
st_1:66 (@ 'testToruqeLimiting')
:6 (@ 'BackgroundTask')
Incoming event
在缓冲区中也能很容易得找到故障点。
举个例子,程序中使用了这个功能块:LREAL_VALUE_TO_WORD,那么在执行时可能出错,造成CPU停机。原因如下:当LREAL数据为负数时,其最高位为1,共64位。该数值超出WORD或DWORD数据上限,造成转换失败。
从LREAL到WORD的转换,可以按以下步骤进行:
先使用Lreal_to_int,再使用INT_to_WORD
使用其他转换功能时,同样要保证源数据数值未超出目标数据类型的上下限