好困啊啊啊730 2024-05-26 17:31 采纳率: 0%
浏览 654

西门子杯HMI编译为什么会报错无效内部数据类型为什么

img


西门子杯进行HMI编程为什么会报错无效内部数据类型,无法连接到数据块中,数据块正常,

  • 写回答

3条回答 默认 最新

  • 专家-赤兔[在线] 优质创作者: 编程框架技术领域 2024-05-26 17:31
    关注

    引自免费微信小程序:皆我百晓生

    在西门子HMI(Human Machine Interface)编程过程中,遇到“无效的内部数据类型”错误,通常是因为您尝试将一个不兼容的数据类型与变量或控件关联。根据您提供的信息,这个错误可能出现在试图将一个LReal类型的变量(双精度浮点数)与一个只接受整数或特定格式的控件关联时。

    为了解决这个问题,您可以按照以下步骤操作:

    1. 确认数据类型:首先,检查您的数据块中的变量数据块_1大圆盘点动速度的数据类型是否确实是LReal。在TIA Portal(博途)的Step 7 Professional或博途软件中,打开项目,找到包含此变量的数据块,确认其数据类型。

    2. 调整控件设置:如果数据类型正确,确保控件的属性设置与该变量的数据类型匹配。例如,如果控件期望的是整数或特定格式的小数,您需要调整控件的显示格式和数据类型接受范围。对于上述的点动速度控件,可能需要将其格式更改为能接受小数的格式,并且允许足够大的数值范围以适应LReal类型的值。

    3. 格式化处理:如果控件只能接收特定格式的数值,比如整数或固定小数位数,您可以在PLC程序中对LReal类型的值进行格式化处理。例如,使用数学函数将浮点数转换为整数或四舍五入到指定小数位数。

    以下是示例PLC程序片段,使用SINUMERIK指令进行四舍五入:

    OB1:
    VAR
        v_DBL_Flt: LREAL := 0.0; // 假设这是您的LReal变量
        v_Int_Val: INT;
    END_VAR
    
    // 四舍五入到最接近的整数
    v_Int_Val := ROUND(v_DBL_Flt);
    
    // 如果需要特定小数位数,可以使用下面的公式(例如保留两位小数)
    // v_Int_Val := TRUNC(v_DBL_Flt * 100) / 100;
    
    WRITE(data_block_1, "大圆盘点动速度", v_Int_Val);
    
    1. 数据类型转换:如果控件确实只接受特定的数据类型,如INT,那么在将数据写入控件之前,你需要在PLC程序中将LReal转换为INT。上面给出的代码已经包含了如何将LReal转换为INT的例子。

    2. 检查地址和域长度:确保在控件属性中指定的地址和域长度与数据块中的变量一致。例如,如果您的变量占用两个字节(LReal占8个字节),而控件配置成了一字节,这也会导致错误。

    3. 重新编译:完成所有更改后,保存并重新编译整个工程。如果以上步骤都正确执行,错误应该会消失,控件应能正常显示数据。

    如果您还有其他疑问或者需要进一步的帮助,请随时告诉我,我会尽力提供支持。

    评论 编辑记录

报告相同问题?

问题事件

  • 创建了问题 5月26日