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

Codesys中Union数据传输至梯形图及C0230报错问题咨询

CODESYS提取Word变量Bool位触发C0230报错的解决方法

报错规避:正确使用Union实现位映射

触发C0230报错的核心原因是Union的定义、变量声明或调用不符合CODESYS的IEC61131-3语法规范,按以下步骤写即可规避:

  1. 先在DUT类型定义区新建自定义Union类型,标准写法如下:
TYPE WORD_BIT_MAP :
UNION
    // 原始字变量映射
    wordVal : WORD;
    // 位段映射
    bitField : STRUCT
        b0 : BOOL;
        b1 : BOOL;
        b2 : BOOL;
        b3 : BOOL;
        b4 : BOOL;
        b5 : BOOL;
        b6 : BOOL;
        b7 : BOOL;
        b8 : BOOL;
        b9 : BOOL;
        b10 : BOOL;
        b11 : BOOL;
        b12 : BOOL;
        b13 : BOOL;
        b14 : BOOL;
        b15 : BOOL;
    END_STRUCT;
END_UNION
END_TYPE
  1. 在程序变量区声明对应类型的实例变量,禁止直接把Union类型名当变量调用:
VAR
    // 你原本需要解析的Word类型变量
    targetWord : WORD;
    // Union类型实例
    wordBitParse : WORD_BIT_MAP;
END_VAR
  1. 逻辑中先给Union的字成员赋值:wordBitParse.wordVal := targetWord;,后续梯形图里直接调用wordBitParse.bitField.b0~wordBitParse.bitField.b15即可拿到对应位的BOOL值,不会触发报错。
    注意:CODESYS采用小端位序,b0对应Word的最低位(2^0位),和通用PLC硬件IO的位定义完全对齐,无需额外转换位序。

更简便的替代实现方案

如果不想自定义DUT类型,可以直接用CODESYS原生支持的两种位提取方式,梯形图和结构化文本都能直接调用:

  • 直接位访问语法:CODESYS原生支持字变量名.位序号的写法,比如要取ctrlWord的第0位,直接写ctrlWord.0即可,取第5位写ctrlWord.5,不需要额外做任何变量定义和赋值,是最轻量化的实现方式。
  • 标准库位操作函数:调用系统自带的BIT_TST函数,写法为BIT_TST(目标字变量, 位序号),返回值即为对应位的BOOL状态,适合需要循环批量处理多个位的场景。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 11:09:28