You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在ABB CODESYS的CFC程序中存储负的LREAL型结果

CODESYS CFC 乘法运算LREAL负数显示异常解决方案

前置澄清:关于CODESYS找不到Float类型的说明

CODESYS遵循IEC 61131-3标准,不存在内置命名为Float的独立数据类型:

  • REAL为32位单精度浮点,对应其他编程语言中常说的Float类型
  • LREAL为64位双精度带符号浮点,原生支持负数存储,不需要额外替换类型
    找不到Float属于正常情况,无需额外搜寻该类型。

负数显示为正值的排查修复步骤

按排查优先级从高到低操作:

  • 检查乘法块的类型匹配逻辑
    打开CFC中乘法块的属性面板,确认块的所有引脚数据类型均为LREAL:
    如果之前选用了无符号类型的乘法指令(如面向UDINT/ULINT的无符号乘法块),无符号运算过程不会保留结果的符号位,后续强制转换为LREAL时会直接被解析为正值。此时仅需将乘法块的引脚类型统一调整为LREAL,即可保留运算结果的符号位,无需修改结果变量类型。
  • 检查变量的在线显示格式配置
    打开变量监视窗口,找到对应LREAL变量的「格式」设置项:
    若格式被手动设置为无符号解析规则(如手动输入%u、选中无符号显示选项),系统会忽略浮点的符号位,将数值按无符号规则解析为正值。恢复默认的浮点显示格式(一般为%f或%e)即可正常显示负数。
  • 排查外部访问端的配置错误
    若该变量映射到外部硬件寄存器,需在硬件组态中确认对应寄存器组的访问类型为带符号双精度浮点,无符号访问模式会直接丢弃符号位信息;
    若通过HMI、SCADA读取该变量值,需确认上位机的变量定义为双精度浮点类型,避免将浮点的二进制符号位当作无符号整数的数值位解析,导致显示为正值。
  • 排除内存地址冲突
    打开CODESYS的内存分配视图,核对该LREAL变量的内存地址,确认不存在与其他无符号类型变量(如ULINT)的地址重叠问题。地址被覆盖时,原浮点存储的符号位会被其他变量的赋值改写,出现显示异常。

快速验证方法

直接对该LREAL变量强制赋值-123.45:

  • 若赋值后显示为正值,说明问题出在显示配置或内存冲突环节
  • 若赋值后显示正常,说明问题出在乘法逻辑的块类型或引脚匹配环节

内容的提问来源于stack exchange,提问作者Mar_60

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.27 05:54:07