手自动转换问题 点击:235 | 回复:9



刘川

    
  • 精华:0帖
  • 求助:3帖
  • 帖子:3帖 | 15回
  • 年度积分:684
  • 历史总积分:841
  • 注册:2019年11月22日
发表于:2025-06-11 14:38:40
楼主
求助帖30分-未结帖

用的三挡开关,左右两边是手动和自动,中间是停止,要做一个手自动无扰转换,之前用的是延时,总感觉不好,有没有更好的程序,谢谢.



卢不会PLC

  • 精华:0帖
  • 求助:1帖
  • 帖子:8帖 | 15回
  • 年度积分:72
  • 历史总积分:92
  • 注册:2021年1月12日
发表于:2025-06-11 16:08:09
1楼

试一下输出用SET RES?

回复本条

    

小肥猪123

  • 精华:0帖
  • 求助:0帖
  • 帖子:0帖 | 47回
  • 年度积分:162
  • 历史总积分:862
  • 注册:2025年2月13日
发表于:2025-06-12 07:34:50
2楼

状态监控 - 实时检测开关位置变化,而非仅依靠延时

平滑过渡 - 在状态切换时执行渐变过程,而非直接切换

记忆功能 - 记录切换前的参数状态,确保切换后延续相同工作模式

缓冲机制 - 增加切换缓冲区,在缓冲期内允许参数微调

自适应调整 - 根据系统当前负载自动调整切换速率

安全回退 - 当检测到异常时自动返回稳定状态

可视化反馈 - 通过指示灯显示当前状态和切换进度

这种设计可以避免延时方案的生硬切换问题,实现真正的平滑过渡。程序应在检测到开关位置变化后,先冻结当前控制参数,然后在 0.5-1 秒内逐渐过渡到新状态,同时保持输出平稳。


回复本条

    

glenxu

  • 精华:0帖
  • 求助:2帖
  • 帖子:30帖 | 608回
  • 年度积分:0
  • 历史总积分:1862
  • 注册:2004年1月13日
发表于:2025-06-12 10:16:44
3楼

无论是那个方向的切换,都需要在切换前做好状态“跟踪”,

这样无论怎么切换都没有扰动。

但我不理解,既然中间有“停止”,那又何谈无扰切换!

停止将是最大的扰动!

回复本条

    
  • 刘川楼主

    客户要求的,我也不理解。。。

    2025-06-12 15:11:58回复

JSdanzi

  • 精华:0帖
  • 求助:0帖
  • 帖子:13帖 | 742回
  • 年度积分:8
  • 历史总积分:14607
  • 注册:2012年9月22日
发表于:2025-06-12 13:01:11
4楼

这个思路

自动状态=手动状态串联自动上升沿串联停止停留时间标志(停留时间自己根据情况改)

手动状态=自动状态串联手动上升沿串联停止停留时间标志(停留时间自己根据情况改)



回复本条

    

关育谋

  • [版主]
  • 精华:5帖
  • 求助:23帖
  • 帖子:823帖 | 5819回
  • 年度积分:45
  • 历史总积分:100087
  • 注册:2004年5月28日
发表于:2025-06-18 10:52:33
5楼

做好跟踪就行,自动到手动的跟踪、手动到自动的跟踪

比如调PID,有时就需要这样。

回复本条

    

丁真

  • 精华:0帖
  • 求助:0帖
  • 帖子:0帖 | 6回
  • 年度积分:56
  • 历史总积分:56
  • 注册:2025年6月18日
发表于:2025-06-19 16:04:11
6楼

我想问下停止为什么要放中间,为啥不改线或者改点

回复本条

    

Smile-lyc

  • [管理员]
  • 精华:136帖
  • 求助:54帖
  • 帖子:3669帖 | 23398回
  • 年度积分:1202
  • 历史总积分:171724
  • 注册:2006年8月04日
发表于:2025-07-03 19:56:42
7楼

感谢求助者和答疑者对求助答疑板块的厚爱,赠人玫瑰,手留余香。

对于求助者要求:

1、请在一个月内自行结贴,把悬赏积分(如果设置积分悬赏求助)发放给答疑者;

2、如果在求助答疑过程中,自己已经有效解决问题,建议大家把解决问题方法在自己求助帖分享,有效分享可以获得50积分奖励。

3、求助答疑板块版主结贴时间一般滞后30~45天,以方便大家对求助问题答疑足够时间,也为了每一个优秀答疑人员都可以获取到自己的积分和MP奖励。

4、2025年加油!


回复本条

    

关育谋

  • [版主]
  • 精华:5帖
  • 求助:23帖
  • 帖子:823帖 | 5821回
  • 年度积分:10
  • 历史总积分:100652
  • 注册:2004年5月28日
发表于:2025-07-03 21:02:45
8楼

ST代码示例:

 

PROGRAM ManualAutoSwitch

VAR

    // 状态标志

    ManualMode : BOOL;              // 手动模式标志

    AutoMode : BOOL;                // 自动模式标志

    StopMode : BOOL;                // 停止模式标志

    

    // 手动/自动给定值

    ManualValue : REAL;             // 手动输出值

    AutoSetpoint : REAL;            // 自动设定值

    CurrentOutput : REAL;           // 当前输出值

    

    // 切换缓冲变量

    SwitchBuffer : REAL;            // 切换缓冲值

    SwitchEnable : BOOL;            // 切换使能

END_VAR


// 模式状态检测

ManualMode := (SwitchPosition = 1);    // 假设1为手动档

AutoMode := (SwitchPosition = 3);      // 假设3为自动档

StopMode := (SwitchPosition = 2);      // 假设2为停止档


// 无扰转换核心逻辑

IF SwitchEnable THEN                  // 切换使能时执行缓冲

    SwitchBuffer := CurrentOutput;     // 记录当前输出作为缓冲值

    SwitchEnable := FALSE;

END_IF;


// 手动→自动切换(保持当前输出)

IF ManualMode AND NOT AutoMode AND NOT StopMode THEN

    CurrentOutput := ManualValue;     // 手动模式输出手动值

END_IF;


IF AutoMode AND NOT ManualMode AND NOT StopMode THEN

    // 自动模式时,先使用切换前的缓冲值,再过渡到自动设定值

    CurrentOutput := SwitchBuffer;    // 无扰切换基础

    SwitchBuffer := AutoSetpoint;     // 缓冲自动设定值,为下次切换准备

END_IF;


// 自动→手动切换(同步当前自动输出)

IF NOT AutoMode AND ManualMode AND NOT StopMode THEN

    ManualValue := CurrentOutput;     // 手动值同步当前自动输出

    CurrentOutput := ManualValue;     // 输出手动值

END_IF;


// 停止模式处理

IF StopMode THEN

    SwitchEnable := TRUE;             // 停止时重置切换缓冲

    CurrentOutput := 0.0;             // 停止时输出0(可按需修改)

END_IF;


回复本条

    

热门招聘
相关主题

官方公众号

智造工程师