張國良
級別: 探索解密
|
有ABCD三個風機,觸摸屏上可以任意排序,比如A可以是一號可以是二號也可以是三號也可以是四號,BCD同理,現在要求一號風機開10秒停5秒,然后二三四號依次運行,如果是A是一號B是二號,C是三號,D是四號這樣固定好了可以寫出來,但是ABCD是任意排序的,如果下一次ABCD排序成2341,這樣應該怎么寫,plc是三菱的 |
---|---|
|
yha_4611
QQ: 2490453455私信聊天
級別: 家園常客
|
每一個電機在觸摸屏上已編號,程序中需要比較編號,從一到四執行就可以了。 |
|
---|---|---|
|
18857713026
賺點辛苦錢不容易啊 誒~~~~ 努力賺錢
級別: 略有小成
|
程序里就 M0 一號風機 M1 二號風機 M2三號風機 M3四號風機 屏幕上 D0_定義Y0是幾號風機 D1_Y1 D2_Y2 D3_Y3 LD M8000 MOV D0 Z0 LDM0Z0 OUT Y0 LD M8000 MOV D1 Z0 LDM0Z0 OUT Y1 LD M8000 MOV D2 Z0 LDM0Z0 OUT Y2 LD M8000 MOV D3 Z0 LDM0Z0 OUT Y3 |
---|---|
|
fxe2008
級別: 探索解密
|
圖片:
你這程序有問題呀 |
---|---|
|
夢雨天涯
微信hui530527 &
級別: 網絡英雄
|
程序僅供參考 三菱任意序號啟動,停止延時(FX3U)_嗶哩嗶哩_bilibili https://www.bilibili.com/video/BV1nH4y1p7pq/ [ 此帖被夢雨天涯在2024-03-25 10:43重新編輯 ] |
|
---|---|---|
|
18857713026
賺點辛苦錢不容易啊 誒~~~~ 努力賺錢
級別: 略有小成
|
什么問題 ??? ????????????? D0 =0 Y0 = M0 D0 =1 Y1 = M1 D0 =2 Y2 = M2 D0 =3 Y3 = M3 ??????????????????? 不會為什么Y0沒亮吧 你看看對應M亮了嗎 不要問這么******的問題 [ 此帖被18857713026在2024-03-25 11:20重新編輯 ] |
---|---|
|
fxe2008
級別: 探索解密
|
你沒發現我發的圖片上DO=1的時候,Z0數值沒有變嗎。你模擬下看看,可能和PLC有關系,我選的是FX3U的 |
---|---|
|
18857713026
賺點辛苦錢不容易啊 誒~~~~ 努力賺錢
級別: 略有小成
|
????????????? PLC是順序更新啊 你能看到當然是 Z0的最后一次狀態啊 你D1 = 0 D0不管等于多少 Z0永遠是0啊 |
---|---|
|
flyfeky
bilibili 工控貴族
級別: 論壇先鋒
|
按道理, 這里有個數據結構 , 叫做隊列, 也就是先進先出 。 可以自己實現隊列算法,如果有現成的也可以。 簡單的可以如下,不算隊列算法,具體的啟停邏輯,我下面是不對的啊. 把 A/B/C/D 用數字1/2/3/4 分別放到存儲器 D1,D2,D3,D4 中,標識這四個風機。 多的話用數組和循環,比如100個風機。 Y1 Y2 Y3 Y4 表示輸出。 第一步要設置 D0 D1 D2 D3的值。 比如2341; / 1234 / 3412/ step的轉換條件 就是 時間到 step:=step+1; case step of 1 : IF D1=1 THEN Y1:=TRUE; // Y1通10S 停2s ELSE IF D1=2 THEN Y2:=TRUE; // Y2通10S 停2s ELSE IF D1=3 THEN Y3:=TRUE; // Y3通10S 停2s ELSE IF D1=4 THEN Y4:=TRUE; // Y4通10S 停2s END IF; 2 : IF D2=1 THEN Y1:=TRUE; ELSE IF D2=2 THEN Y2:=TRUE; ELSE IF D2=3 THEN Y3:=TRUE; ELSE IF D2=4 THEN Y4:=TRUE; END IF; 3: 4: end case; [ 此帖被flyfeky在2024-03-25 22:00重新編輯 ] |
|
---|---|---|
本帖最近評分記錄:
|
沖出槍林彈雨
沖出槍林彈雨
級別: 家園常客
|
可以參考,能監控當前運行風機編號,狀態,以及加了停止動作 VAR TimerRun : TON; // 運行計時器 TimerStop : TON; // 停止計時器 FanState : ARRAY[1..4] OF BOOL; // 風機狀態數組(TRUE-運行,FALSE-停止) CurrentFan : INT; // 當前運行的風機編號(1-A,2-B,3-C,4-D) FanOrder : ARRAY[1..4] OF INT := [1, 2, 3, 4]; // 風機排序數組,可以修改排序 EmergencyStop : BOOL; // 緊急停止按鈕狀態 SafetyInterlock : BOOL; // 安全聯鎖狀態 END_VAR //初始化 IF NOT TimerRun.Q AND NOT TimerStop.Q AND NOT EmergencyStop AND SafetyInterlock THEN FOR i := 1 TO 4 DO FanState := FALSE; // 所有風機初始狀態為停止 END_FOR; CurrentFan := FanOrder[1]; // 根據風機排序數組確定起始風機 TimerRun(IN:=TRUE, PT:=T#10s); // 設置運行計時器為10秒 END_IF // 風機運行邏輯 IF NOT EmergencyStop AND SafetyInterlock THEN IF TimerRun.Q THEN // 當前風機正在運行或即將運行 IF NOT FanState[CurrentFan] THEN // 啟動當前風機 FanState[CurrentFan] := TRUE; // 這里加入控制當前風機啟動的代碼 END_IF ELSE // 運行時間到,停止當前風機 FanState[CurrentFan] := FALSE; // 這里加入控制當前風機停止的代碼 TimerStop(IN:=TRUE, PT:=T#5s); // 設置停止計時器為5秒 END_IF IF TimerStop.Q THEN // 停止時間到,切換到下一個風機 CurrentFan := FanOrder[(CurrentFan MOD 4) + 1]; // 根據風機排序數組循環風機編號 TimerRun(IN:=TRUE, PT:=T#10s); // 重置運行計時器為10秒 END_IF ELSE // 緊急停止或安全聯鎖斷開,停止所有風機 FOR i := 1 TO 4 DO FanState := FALSE; END_FOR; TimerRun(IN:=FALSE); // 停止運行計時器 TimerStop(IN:=FALSE); // 停止停止計時器 END_IF |
|
---|---|---|
|