張國(guó)良
級(jí)別: 探索解密
精華主題: 0
發(fā)帖數(shù)量: 76 個(gè)
工控威望: 147 點(diǎn)
下載積分: 726 分
在線時(shí)間: 66(小時(shí))
注冊(cè)時(shí)間: 2020-02-06
最后登錄: 2025-01-09
查看張國(guó)良的 主題 / 回貼
樓主  發(fā)表于: 2024-03-24 12:05
有ABCD三個(gè)風(fēng)機(jī),觸摸屏上可以任意排序,比如A可以是一號(hào)可以是二號(hào)也可以是三號(hào)也可以是四號(hào),BCD同理,現(xiàn)在要求一號(hào)風(fēng)機(jī)開(kāi)10秒停5秒,然后二三四號(hào)依次運(yùn)行,如果是A是一號(hào)B是二號(hào),C是三號(hào),D是四號(hào)這樣固定好了可以寫(xiě)出來(lái),但是ABCD是任意排序的,如果下一次ABCD排序成2341,這樣應(yīng)該怎么寫(xiě),plc是三菱的
沖出槍林彈雨
沖出槍林彈雨
級(jí)別: 家園?
精華主題: 0
發(fā)帖數(shù)量: 145 個(gè)
工控威望: 625 點(diǎn)
下載積分: 356 分
在線時(shí)間: 87(小時(shí))
注冊(cè)時(shí)間: 2020-09-05
最后登錄: 2025-01-03
查看沖出槍林彈雨的 主題 / 回貼
1樓  發(fā)表于: 2024-03-25 23:02
可以參考,能監(jiān)控當(dāng)前運(yùn)行風(fēng)機(jī)編號(hào),狀態(tài),以及加了停止動(dòng)作
VAR  
    TimerRun : TON;         // 運(yùn)行計(jì)時(shí)器  
    TimerStop : TON;        // 停止計(jì)時(shí)器  
    FanState : ARRAY[1..4] OF BOOL; // 風(fēng)機(jī)狀態(tài)數(shù)組(TRUE-運(yùn)行,F(xiàn)ALSE-停止)  
    CurrentFan : INT;       // 當(dāng)前運(yùn)行的風(fēng)機(jī)編號(hào)(1-A,2-B,3-C,4-D)  
    FanOrder : ARRAY[1..4] OF INT := [1, 2, 3, 4]; // 風(fēng)機(jī)排序數(shù)組,可以修改排序  
    EmergencyStop : BOOL;   // 緊急停止按鈕狀態(tài)  
    SafetyInterlock : BOOL; // 安全聯(lián)鎖狀態(tài)  
END_VAR  
  
//初始化  
IF NOT TimerRun.Q AND NOT TimerStop.Q AND NOT EmergencyStop AND SafetyInterlock THEN  
    FOR i := 1 TO 4 DO  
        FanState := FALSE; // 所有風(fēng)機(jī)初始狀態(tài)為停止  
    END_FOR;  
    CurrentFan := FanOrder[1]; // 根據(jù)風(fēng)機(jī)排序數(shù)組確定起始風(fēng)機(jī)  
    TimerRun(IN:=TRUE, PT:=T#10s); // 設(shè)置運(yùn)行計(jì)時(shí)器為10秒  
END_IF  
  
// 風(fēng)機(jī)運(yùn)行邏輯  
IF NOT EmergencyStop AND SafetyInterlock THEN  
    IF TimerRun.Q THEN  
        // 當(dāng)前風(fēng)機(jī)正在運(yùn)行或即將運(yùn)行  
        IF NOT FanState[CurrentFan] THEN  
            // 啟動(dòng)當(dāng)前風(fēng)機(jī)  
            FanState[CurrentFan] := TRUE;  
            // 這里加入控制當(dāng)前風(fēng)機(jī)啟動(dòng)的代碼  
        END_IF  
    ELSE  
        // 運(yùn)行時(shí)間到,停止當(dāng)前風(fēng)機(jī)  
        FanState[CurrentFan] := FALSE;  
        // 這里加入控制當(dāng)前風(fēng)機(jī)停止的代碼  
        TimerStop(IN:=TRUE, PT:=T#5s); // 設(shè)置停止計(jì)時(shí)器為5秒  
    END_IF  
      
    IF TimerStop.Q THEN  
        // 停止時(shí)間到,切換到下一個(gè)風(fēng)機(jī)  
        CurrentFan := FanOrder[(CurrentFan MOD 4) + 1]; // 根據(jù)風(fēng)機(jī)排序數(shù)組循環(huán)風(fēng)機(jī)編號(hào)  
        TimerRun(IN:=TRUE, PT:=T#10s); // 重置運(yùn)行計(jì)時(shí)器為10秒  
    END_IF  
ELSE  
    // 緊急停止或安全聯(lián)鎖斷開(kāi),停止所有風(fēng)機(jī)  
    FOR i := 1 TO 4 DO  
        FanState := FALSE;  
    END_FOR;  
    TimerRun(IN:=FALSE); // 停止運(yùn)行計(jì)時(shí)器  
    TimerStop(IN:=FALSE); // 停止停止計(jì)時(shí)器  
END_IF
技術(shù)交流vx: Electric973