吴晓亮420922
级别: 略有小成
精华主题: 0
发帖数量: 91 个
工控威望: 219 点
下载积分: 1115 分
在线时间: 59(小时)
注册时间: 2015-11-19
最后登录: 2026-05-09
查看吴晓亮420922的 主题 / 回贴
楼主  发表于: 4天前
有一台1200PLC,需要做以下算法:
300 kW 的功率分解为:1 + 2 + 2 + 5 + 10 + 10 + 20 + 50 + 100 + 100 kW。
共10个功率档位。
例如,我任意在触摸屏输入168KW,PLC需要拆解计算,确认是哪几个Bit得电(以上共10个bit),再输出到Q点。
请假如何实现以上算法?我能想到的就是整除余数法,分别拆解个位、十位、百位数。
cvlsam
富士低压,POD(觸摸屏),PLC专卖
级别: VIP会员

精华主题: 3 篇
发帖数量: 6677 个
工控威望: 38489 点
下载积分: 21041 分
在线时间: 9932(小时)
注册时间: 2006-09-13
最后登录: 2026-05-12
查看cvlsam的 主题 / 回贴
1楼  发表于: 4天前
直接减法
例如  168-100=68   Bit9=1
68- 100= -68   Bit8=0
68-50 =18     Bit7=1
18-20 = -2    Bit6=0
18-10=8     Bit5=1
8-10= -2   Bit4=0
8-5=3      Bit3=1
3-2=1      Bit2=1
1-2=-1    Bit1=0
1-1=0     Bit0=1

Good Luck~
本帖最近评分记录:
  • 下载积分:+3(guochunyi) 好贴好贴!
    皮五
    级别: 工控侠客
    精华主题: 0
    发帖数量: 907 个
    工控威望: 3465 点
    下载积分: 4737 分
    在线时间: 479(小时)
    注册时间: 2007-07-14
    最后登录: 2026-05-12
    查看皮五的 主题 / 回贴
    2楼  发表于: 4天前
    豆包回答:
    PLC 实现 300kW 10 档功率任意输出计算方案
    你给的固定功率档位:1、2、2、5、10、10、20、50、100、100 kW(合计 300kW),PLC 计算任意目标功率输出的核心逻辑是:贪心算法(从大到小匹配档位),这是 PLC 最稳定、运算最快、无死区的方案。
    一、核心原理
    目标功率:PLC 内部设定值(0~300kW 整数)
    匹配规则:从最大档位往最小档位依次扣减,能扣减就开启该档位,直到剩余功率 = 0
    输出:10 个布尔量(对应 10 个功率点 ON/OFF)
    二、PLC 标准实现代码(梯形图 / ST 语言通用逻辑)
    我用结构化文本(ST) 编写,所有主流 PLC(西门子、三菱、欧姆龙、倍福)都兼容,直接复制可用。
    1. 变量定义
    st
    // 输入变量
    VAR_TARGET_POWER: INT := 0;  // 目标功率 0~300kW
    // 剩余功率计算变量
    VAR_REMAIN: INT;            
    // 10个输出档位(1=开启 0=关闭)
    OUT1, OUT2, OUT3, OUT4, OUT5, OUT6, OUT7, OUT8, OUT9, OUT10: BOOL;
    2. 主计算程序
    st
    // 初始化:剩余功率 = 目标功率
    VAR_REMAIN := VAR_TARGET_POWER;

    // ====================== 从大到小依次匹配 ======================
    // 档位10:100kW
    IF VAR_REMAIN >= 100 THEN
        OUT10 := TRUE;
        VAR_REMAIN := VAR_REMAIN - 100;
    ELSE
        OUT10 := FALSE;
    END_IF;

    // 档位9:100kW
    IF VAR_REMAIN >= 100 THEN
        OUT9 := TRUE;
        VAR_REMAIN := VAR_REMAIN - 100;
    ELSE
        OUT9 := FALSE;
    END_IF;

    // 档位8:50kW
    IF VAR_REMAIN >= 50 THEN
        OUT8 := TRUE;
        VAR_REMAIN := VAR_REMAIN - 50;
    ELSE
        OUT8 := FALSE;
    END_IF;

    // 档位7:20kW
    IF VAR_REMAIN >= 20 THEN
        OUT7 := TRUE;
        VAR_REMAIN := VAR_REMAIN - 20;
    ELSE
        OUT7 := FALSE;
    END_IF;

    // 档位6:10kW
    IF VAR_REMAIN >= 10 THEN
        OUT6 := TRUE;
        VAR_REMAIN := VAR_REMAIN - 10;
    ELSE
        OUT6 := FALSE;
    END_IF;

    // 档位5:10kW
    IF VAR_REMAIN >= 10 THEN
        OUT5 := TRUE;
        VAR_REMAIN := VAR_REMAIN - 10;
    ELSE
        OUT5 := FALSE;
    END_IF;

    // 档位4:5kW
    IF VAR_REMAIN >= 5 THEN
        OUT4 := TRUE;
        VAR_REMAIN := VAR_REMAIN - 5;
    ELSE
        OUT4 := FALSE;
    END_IF;

    // 档位3:2kW
    IF VAR_REMAIN >= 2 THEN
        OUT3 := TRUE;
        VAR_REMAIN := VAR_REMAIN - 2;
    ELSE
        OUT3 := FALSE;
    END_IF;

    // 档位2:2kW
    IF VAR_REMAIN >= 2 THEN
        OUT2 := TRUE;
        VAR_REMAIN := VAR_REMAIN - 2;
    ELSE
        OUT2 := FALSE;
    END_IF;

    // 档位1:1kW
    IF VAR_REMAIN >= 1 THEN
        OUT1 := TRUE;
        VAR_REMAIN := VAR_REMAIN - 1;
    ELSE
        OUT1 := FALSE;
    END_IF;
    三、输出对应关系(10 个功率点)
    表格
    PLC 输出    对应功率    序号
    OUT1    1 kW    1
    OUT2    2 kW    2
    OUT3    2 kW    3
    OUT4    5 kW    4
    OUT5    10 kW    5
    OUT6    10 kW    6
    OUT7    20 kW    7
    OUT8    50 kW    8
    OUT9    100 kW    9
    OUT10    100 kW    10
    四、运行示例(验证正确性)
    示例 1:目标功率 = 123kW
    计算过程:
    100 → 开启,剩 23
    100 → 不开启
    50 → 不开启
    20 → 开启,剩 3
    10 → 不开启
    10 → 不开启
    5 → 不开启
    2 → 开启,剩 1
    2 → 不开启
    1 → 开启,剩 0
    输出:OUT10、OUT7、OUT3、OUT1 = ON
    总功率:100+20+2+1=123kW ✔️
    示例 2:目标功率 = 255kW
    100+100+50+5 = 255kW
    输出:OUT10、OUT9、OUT8、OUT4 = ON ✔️
    示例 3:目标功率 = 7kW
    5+2 =7kW
    输出:OUT4、OUT3 = ON ✔️
    五、PLC 实用优化建议
    限制目标功率范围
    增加一行代码防止超量程:
    st
    IF VAR_TARGET_POWER > 300 THEN
        VAR_TARGET_POWER := 300;
    END_IF;
    IF VAR_TARGET_POWER < 0 THEN
        VAR_TARGET_POWER := 0;
    END_IF;
    整数运算
    全程用整数(INT) 运算,PLC 无浮点误差,最稳定。
    无无法匹配的功率
    你的档位包含 1kW,0~300 所有整数功率都能精准输出,没有盲区。
    总结
    逻辑:从大到小贪心匹配,PLC 运算效率最高
    代码:10 个简单 IF 判断,通用所有品牌 PLC
    精度:支持 0~300kW任意整数功率精准输出
    稳定:纯逻辑运算,无抖动、无误差
    本帖最近评分记录:
  • 下载积分:+3(guochunyi) 热心助人!
    honggun
    级别: 网络英雄
    精华主题: 0
    发帖数量: 1740 个
    工控威望: 7223 点
    下载积分: 50552 分
    在线时间: 980(小时)
    注册时间: 2009-11-16
    最后登录: 2026-05-12
    查看honggun的 主题 / 回贴
    3楼  发表于: 4天前
    引用
    引用第1楼cvlsam于2026-05-09 12:19发表的  :
    直接减法
    例如  168-100=68   Bit9=1
    68- 100= -68   Bit8=0
    68-50 =18     Bit7=1
    18-20 = -2    Bit6=0
    .......

    谢谢,通透。
    yumi2000
    级别: 正式会员
    精华主题: 0
    发帖数量: 7 个
    工控威望: 64 点
    下载积分: 1392 分
    在线时间: 5(小时)
    注册时间: 2025-12-29
    最后登录: 2026-05-12
    查看yumi2000的 主题 / 回贴
    4楼  发表于: 昨天
    引用
    引用第1楼cvlsam于2026-05-09 12:19发表的  :
    直接减法
    例如  168-100=68   Bit9=1
    68- 100= -68   Bit8=0
    68-50 =18     Bit7=1
    18-20 = -2    Bit6=0
    .......


    这个方法好
    不小心遇见你
    自动项目、PLC、视觉、通讯等工控软件开发QQ3515716
    级别: 工控侠客

    精华主题: 3 篇
    发帖数量: 2118 个
    工控威望: 3112 点
    下载积分: 25743 分
    在线时间: 1584(小时)
    注册时间: 2014-01-05
    最后登录: 2026-05-11
    查看不小心遇见你的 主题 / 回贴
    5楼  发表于: 昨天
    这个是电力上的 我朋友专业做电力的 也是用的西门子PLC
    这个他一开始觉得也困难,后来我给他写了方法,分分钟给他搞定
    那种减法是最原始的
    写上位机的搞成数学模型 分分钟给你搞出来
    项目、视觉、通讯QQ3515716
    hgz284631157
    非标机PLC触摸屏编程、电控柜改造维修QQ284631157
    级别: 家园常客
    精华主题: 0
    发帖数量: 624 个
    工控威望: 730 点
    下载积分: 2452 分
    在线时间: 238(小时)
    注册时间: 2009-04-07
    最后登录: 2026-05-12
    查看hgz284631157的 主题 / 回贴
    6楼  发表于: 4小时前
    学习了