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

在Connected Components Workbench V12与Micro850 PLC中整数转8位二进制异常问题

问题分析与修正方案

核心问题

你的代码存在两个关键错误:

  1. 数组使用逻辑错误:你用Ba[X]数组元素存储迭代值,但仅初始化了Ba[8],其他索引的Ba元素默认是0。循环中除了X=8时能拿到正确的初始输入值,其他X对应的Ba[X]都是0,导致只有第8位输出正确。
  2. 迭代顺序不匹配需求:你的循环从X=1到8,每次取余数得到的是二进制数的最低位,但你期望的输出顺序是从最高位到最低位(输入21对应0,0,0,1,0,1,0,1),两者顺序不匹配。

修正后的代码

out_Complete := in_Enable;
IF in_Enable THEN
    // 用单个变量存储待处理的数值,避免数组误用
    tempValue := ANY_TO_DINT(in_Integer_Input);
    
    // 从X=8到X=1循环,对应8位二进制的最低位到最高位赋值
    FOR X := 8 DOWNTO 1 BY 1 DO
        // 取当前值除以2的余数,得到当前二进制位
        remainder := MOD(tempValue, 2);
        // 将余数转为布尔量赋值给对应输出位
        OutputBit[X] := ANY_TO_BOOL(remainder);
        // 将数值除以2,准备处理下一位
        tempValue := tempValue / 2;
    END_FOR;
END_IF;

修正说明

  • 改用单个变量tempValue存储迭代过程中的数值,确保每次循环都基于上一次除以2后的结果计算,避免数组元素未初始化的问题。
  • 调整循环方向为X := 8 DOWNTO 1,这样每次计算的最低位会赋值给OutputBit[8],依次往上赋值,最终得到你期望的从最高位到最低位的8位布尔值序列。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 14:10:28