技术论坛

 回复:SCL := 和Move指令还有区别?

返回主题列表
作者 主题
ZXC2011
侠圣

经验值:3891
发帖数:627
精华帖:11
楼主    2023-05-24 10:13:28
主题:SCL := 和Move指令还有区别?

通讯从仪表读取上来多个浮点数,MB_Master是用一串DWORD字符串去装载的.

然后转换成浮点的时候,先使用数据(REAL):=数组[0](Dword),结果是错的,看上去就是字节序号是乱的,然而使用MOVE去替换的话,又是对的.

疑惑,这两者表述还有区别?针对这个情况,Move会交换高低字?

补充模拟结果



xiatianyun
奇侠

经验值:5423
发帖数:850
精华帖:10
9楼    2023-05-24 19:35:13
精华帖  主题:回复:SCL := 和Move指令还有区别?

我猜想楼主关闭了IEC检查,如果打开,你连Move都通不过。

SCL的赋值运算符确实和LAD的Move有区别,MOVE更倾向于底层位串的复制,而 := 和算术复制相当,需要考虑数据类型,如果类型不一致,除了隐式转换的情况外需要手工转换数据类型,匹配了才能:=。

:= 是值赋值,位串表示的Dword的数值显然不等于需要的Real值,如果强行:=,则只会把整数简单转换为浮点数,就像21转换为21.0一样。

如果打开IEC检查,MOVE也和:=一样需要类型匹配才能Move。

我一般都打开IEC检查,遇到类似问题反而麻烦,不能像200Smart一样简单Move就把通讯传过来的DWord复制给一个Real。


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