銆怌ODESYS绯诲垪PLC瀹氭椂鍣ㄤ娇鐢ㄨ瑙c-CODESYS璧勬簮涓嬭浇鍖-閰峰痉缃 - CoDeSys杞欢鏁欑▼涓嬭浇,CoDeSys宸ユ帶璧勮闂ㄦ埛
HSC6490-cn涓浗鍒堕狅紝涓浗鑺瘇
鏌ョ湅: 321|鍥炲: 0

銆怌ODESYS绯诲垪PLC瀹氭椂鍣ㄤ娇鐢ㄨ瑙c

[澶嶅埗閾炬帴]

璇ョ敤鎴蜂粠鏈鍒

鍙戣〃浜 2026-3-18 10:37:23 | 鏄剧ず鍏ㄩ儴妤煎眰 |闃呰妯″紡
CODESYS绯诲垪PLC瀹氭椂鍣ㄤ娇鐢ㄨ瑙

    1. IEC鏍囧噯瀹氭椂鍣
      1.1 鎺ラ氬欢杩熷畾鏃跺櫒TON1.2 鍏虫柇寤惰繜瀹氭椂鍣═OF1.3 瀹氭椂鑴夊啿瀹氭椂鍣═P1.4 瀹氭椂鍣ㄥ姛鑳藉潡鐨勮皟鐢
    2. 鑷畾涔夊畾鏃跺櫒
      2.1 鍛ㄦ湡鑴夊啿淇″彿2.2 涓嶅悓鍗犵┖姣旇剦鍐蹭俊鍙2.3 寤舵椂鎺ラ氬拰鏂紑瀹氭椂鍣


1. IEC鏍囧噯瀹氭椂鍣

鍦↖EC61131-3鏍囧噯涓紝鍒跺畾浜嗘帴閫氬欢杩熷畾鏃跺櫒(TON)銆佸叧鏂欢杩熷畾鏃跺櫒(TOF)鍜岃剦鍐插畾鏃跺櫒(TP)3绉嶆爣鍑嗗畾鏃跺櫒銆傚叾涓紝浣跨敤鏈澶氱殑鏄帴閫氬欢杩熷畾鏃跺櫒銆
1.1 鎺ラ氬欢杩熷畾鏃跺櫒TON

鎺ラ氬欢杩熷畾鏃跺櫒鏄寚褰撹緭鍏ュ彉閲廔N涓篢RUE鏃讹紝瀹氭椂鍣ㄥ紑濮嬭鏃讹紝ET涓哄綋鍓嶈鏃跺煎苟浣滀负鍔熻兘鍧楃殑杈撳嚭銆傚綋ET绛変簬杈撳叆鍙橀噺PT璁剧疆鐨勮鏃跺兼椂锛屽畾鏃跺櫒杈撳嚭鍙橀噺Q绛変簬TRUE锛孍T淇濇寔涓篜T璁剧疆鐨勮鏃跺笺傚鏋滆緭鍏N鍙樹负FALSE锛屽畾鏃跺櫒灏嗚澶嶄綅锛岃緭鍑篞涓篎ALSE锛孍T澶嶄綅涓0锛屼篃灏辨槸璇磋瀹氭椂鍣ㄥ浣嶇殑鍞竴鏂规硶灏辨槸灏嗚緭鍏N鍙樹负FALSE銆俆ON瀹氭椂鍣ㄧ殑姊舰鍥捐〃鐜板舰寮忓強鏃跺簭鍥惧涓嬶細

銆怌ODESYS绯诲垪PLC瀹氭椂鍣ㄤ娇鐢ㄨ瑙c-1.png

銆怌ODESYS绯诲垪PLC瀹氭椂鍣ㄤ娇鐢ㄨ瑙c-2.png


1.2 鍏虫柇寤惰繜瀹氭椂鍣═OF

瀹氭椂鍣ㄧ殑杈撳叆 IN 涓篢RUE鏃讹紝瀹氭椂鍣ㄧ殑 Q 杈撳嚭淇″彿绔嬪嵆涓篢RUE锛屽畾鏃跺櫒鐨勮緭鍏ヤ负FALSE鏃讹紝瀹氭椂鍣ㄥ紑濮嬭鏃讹紝鍙褰撳畾鏃跺櫒鍦ㄨ繍琛岋紝鍏惰緭鍑 Q 涓鐩翠负TRUE锛屽綋鍒拌揪瀹氭椂鏃堕棿鏃讹紝杈撳嚭绔 Q 澶嶄綅锛屽湪鍒拌揪瀹氭椂鏃堕棿涔嬪墠锛屽鏋滃畾鏃跺櫒鐨勮緭鍏ョ閲嶆柊涓篢RUE锛屽垯瀹氭椂鍣ㄥ浣嶏紝杈撳嚭Q 淇濇寔涓篢RUE銆
杈撳嚭ET鎻愪緵瀹氭椂鏃堕棿锛屽欢鏃朵粠 T#0s 寮濮嬪埌璁剧疆鐨勫畾鏃舵椂闂 PT 缁撴潫銆傚綋 PT 鏃堕棿鍒版椂锛孍T灏嗕繚鎸佸畾鏃舵椂闂寸洿鍒拌緭鍏 IN 杩斿洖TRUE涓烘銆傚鏋滃湪杈惧埌 PT 瀹氭椂鏃堕棿涔嬪墠锛岃緭鍏 IN 鍙樹负TRUE锛岃緭鍑 ET 绔嬪嵆鍙樹负 T#0s銆備负浜嗗浣嶅畾鏃跺櫒锛屽彲浠ヨ缃皢 PT=T#0s銆

銆怌ODESYS绯诲垪PLC瀹氭椂鍣ㄤ娇鐢ㄨ瑙c-3.png


1.3 瀹氭椂鑴夊啿瀹氭椂鍣═P

瀹氭椂鍣ㄧ殑杈撳叆 IN 涓 TRUE 鏃讹紝瀹氭椂鍣ㄥ惎鍔紝鏃犺瀹氭椂鍣ㄨ緭鍏 IN 濡備綍鍙樺寲锛屽畾鏃跺櫒鐨勫疄闄呰繍琛屾椂闂撮兘鏄敤鎴锋墍瀹氫箟鐨 PT 鏃堕棿锛屽湪瀹氭椂鍣ㄨ繍琛屾椂锛屽叾杈撳嚭 Q 绛変簬 TRUE 銆傝緭鍑虹 ET涓鸿緭鍑虹 Q 鎻愪緵瀹氭椂鏃堕棿銆傚畾鏃朵粠 T#0s 寮濮嬶紝鍒拌缃殑 PT 鏃堕棿缁撴潫銆傚綋 PT 鏃堕棿鍒版椂锛孍T 浼氫繚鎸佸畾鏃舵椂闂寸洿鍒 IN 鍙樹负 FALSE 鏃躲備篃灏辨槸璇达紝璁℃椂杩囩▼涓緭鍏N鍙樹负FALSE锛屾垨杈撳叆IN鍙堝彉涓篢RUE锛屼笉褰卞搷璁℃椂杩囩▼鐨勮繘琛岋紝璁℃椂浠嶇户缁紝鐩村埌璁℃椂鏃堕棿鍒帮紝杈撳嚭Q鎵嶅彉涓篎ALSE銆

銆怌ODESYS绯诲垪PLC瀹氭椂鍣ㄤ娇鐢ㄨ瑙c-4.png


1.4 瀹氭椂鍣ㄥ姛鑳藉潡鐨勮皟鐢

鍔熻兘鍧楄皟鐢ㄦ槸涓鸿緭鍏ヨ緭鍑哄紩鑴氳祴鍊肩殑杩囩▼锛屽湪ST璇█涓紝杈撳叆鐢 := 琛ㄧず锛岃緭鍑虹敤 => 琛ㄧず銆傝皟鐢ㄥ姛鑳藉潡鍚庯紝鍙互浣跨敤 鈥.鈥 鎿嶄綔绗﹁闂緭鍏ヨ緭鍑哄彉閲忚繘琛岃祴鍊兼搷浣溿傚畾鏃舵椂闂碢T鏄疶ime鏁版嵁绫诲瀷锛孴#鍚庨潰璺熼渶瑕佸畾鏃剁殑鏃堕棿锛屽彲浠ユ槸T#1s銆乀#100ms銆乀#1m鎴栬匱#1h銆傛牴鎹~鍏ョ殑鏃堕棿鍗曚綅纭畾銆傛墍浠ュ姛鑳藉潡鐨勮皟鐢ㄦ槸闈炲父鐏垫椿鐨勶紝濡備笅锛
  1. PROGRAM MAIN
  2. VAR
  3.         TON_100ms:TON;
  4.         IN,Q:BOOL;
  5.         PT,ET:TIME;
  6. END_VAR
  7. TON_100ms(IN:=, PT:=, Q=>, ET=>);
  8. TON_100ms.IN:=IN;
  9. TON_100ms.PT:=T#100MS;
  10. ET:=TON_100ms.ET;
  11. Q:=TON_100ms.Q;
澶嶅埗浠g爜
鍔熻兘鍧楄皟鐢ㄦ椂鍙互鐪佺暐閮ㄥ垎鎴栬呭叏閮ㄥ紩鑴氾紝浣跨敤"瀹炰緥鍚.杈撳叆/杈撳嚭寮曡剼"鐨勬柟寮忚繘琛岃闂備篃鍙互鍦ㄥ姛鑳藉潡鍐呴儴鐩存帴濉啓闇瑕佺殑鍙傛暟锛屽涓嬭嚜鍔ㄨЕ鍙戝畾鏃跺櫒锛岃繖涔熸槸鏈甯哥敤鐨勪竴绉嶅啓娉曪紝鍦ㄧ▼搴忎腑浼氶潪甯稿鐨勭敤鍒般傚涓嬶細
  1. TON_100ms(IN:=NOT TON_100ms.Q, PT:=T#100MS, Q=>, ET=>);
  2. IF ActTime<100 THEN                //ActTime涓哄姩浣滆鏃跺硷紝杩欓噷100琛ㄧず100涓100ms=10s
  3.         IF TON_100ms.Q THEN ActTime:=ActTime+1;END_IF        //姣忛殧100ms鍔1
  4. ELSE
  5.         Timeout:=TRUE;//璁℃椂鏃堕棿鍒帮紝Timeout鍙互涓哄姩浣滆秴鏃讹紝涔熷彲浠ヤ负鏌愪簺鎶ヨ
  6. END_IF
  7. //鍦ㄧ▼搴忛昏緫鐨勭浉鍏冲湴鏂癸紝涓嶈蹇樿灏咥ctTime杩涜澶嶄綅
澶嶅埗浠g爜
2. 鑷畾涔夊畾鏃跺櫒

2.1 鍛ㄦ湡鑴夊啿淇″彿

鍦ㄥ疄闄呯紪绋嬩腑锛岀粡甯搁渶瑕佺敤鍒板懆鏈熻剦鍐蹭俊鍙凤紝姣斿鍦ㄤ笁鑹茬伅鏌变腑锛屽嚭鐜版煇涓姤璀︽椂锛岄渶瑕佺孩鐏棿闅1s鎴栬0.5s鍛ㄦ湡闂儊锛屽張鎴栬匬LC涓嶩MI閫氳鏃剁殑蹇冭烦淇″彿锛岄兘闇瑕佺敤鍒拌繖绉嶆柟娉俊鍙枫傛煇浜汸LC浼氭彁渚涘浐瀹氬嚑绉嶅父鐢ㄧ殑涓嶅悓鍛ㄦ湡鐨勬椂閽熷瓨鍌ㄥ櫒锛屼絾鏄綋閬囧埌鏈夌殑PLC娌℃湁杩欑瀛樺偍鍣ㄦ椂锛屽氨闇瑕佽嚜宸辨潵鍐欎簡銆傝屼笖鑷繁鍐欏彲浠ユ洿鏂逛究鐨勮缃悇绉嶄笉鍚屽懆鏈燂紝PLC绋嬪簭绉绘鏃朵篃浼氭洿鍔犳柟渚匡紝涓嬮潰鎻愪緵浜嗗嚑绉嶄笉鍚岀殑鍐欐硶锛
1.鍙屽畾鏃跺櫒浜ゆ浛宸ヤ綔
  1. PROGRAM MAIN
  2. VAR
  3.         TON_1 : TON;           
  4.         TON_2 : TON;         
  5.         OUT   : BOOL;// 杈撳嚭鍙橀噺
  6. END_VAR
  7. //鏂规硶1锛氬弻瀹氭椂鍣ㄤ氦鏇垮伐浣淭ON_1(IN:=NOT TON_2.Q, PT:=T#1S, Q=>, ET=>);TON_2(IN:=TON_1.Q, PT:=T#1S, Q=>, ET=>);
  8. OUT:=TON_1.Q;
澶嶅埗浠g爜
2.鍗曚釜瀹氭椂鍣ㄨ繘琛岀姸鎬佸垏鎹
  1. PROGRAM MAIN
  2. VAR
  3.         TON_1 : TON;                     
  4.         OUT   : BOOL;// 杈撳嚭鍙橀噺
  5. END_VAR
  6. // 鏂规硶2锛氬崟涓畾鏃跺櫒杩涜鐘舵佸垏鎹ON_1(IN := TRUE, PT := T#1S);// 瀹氭椂鍣ㄦ寔缁繍琛
  7. IF TON_1.Q THEN
  8.     OUT := NOT OUT;// 姣忔瀹氭椂鍒板垏鎹㈢姸鎬乀ON_1(IN := FALSE);// 澶嶄綅瀹氭椂鍣
  9. END_IF;
澶嶅埗浠g爜
3.浣跨敤鍥哄畾鎵弿鍛ㄦ湡杩涜璁℃暟锛堝亣璁20ms鍛ㄦ湡锛
  1. PROGRAM MAIN
  2. VAR
  3.         Counter : INT;            
  4.         OUT     : BOOL;// 杈撳嚭鍙橀噺
  5. END_VAR
  6. // 鏂规硶3锛氫娇鐢ㄥ浐瀹氭壂鎻忓懆鏈熻繘琛岃鏁帮紙鍋囪20ms鍛ㄦ湡锛
  7. Counter := Counter +1;
  8. IF Counter >=50 THEN   
  9.     Counter :=0;
  10.     OUT := NOT OUT;// 姣1绉掑垏鎹㈣緭鍑虹姸鎬
  11. END_IF;
澶嶅埗浠g爜
4.浣跨敤瀹氭椂鍣ㄨ繘琛岃鏁
  1. PROGRAM MAIN
  2. VAR
  3.         TON_1 : TON;           
  4.         Counter : INT;         
  5.         OUT    : BOOL;// 杈撳嚭鍙橀噺
  6. END_VAR
  7. // 鏂规硶4锛氫娇鐢ㄥ畾鏃跺櫒杩涜璁℃暟   TON_1(IN:=NOT TON_1.Q, PT:=T#100MS, Q=>, ET=>);
  8. IF Counter<20 THEN
  9.         IF TON_1.Q THEN Counter:=Counter+1;END_IF
  10. ELSE
  11.         Counter:=0;
  12. END_IF
  13. OUT:=Counter>0 AND Counter<11;
澶嶅埗浠g爜
2.2 涓嶅悓鍗犵┖姣旇剦鍐蹭俊鍙

涓婅堪2.1鑺傚疄鐜扮殑鏄50%鍗犵┖姣旂殑鍛ㄦ湡鑴夊啿淇″彿锛屽畠鐨勭壒鐐规槸鎺ラ氬拰鏂紑鐨勬椂闂寸浉绛夛紝姣斿璇存帴閫1s閭d箞鏂紑涔熸槸1s銆傚鏋滈渶瑕佹帴閫1s鏂紑2s锛屾垨鑰呰嚜瀹氫箟鎺ラ氬拰鏂紑鐨勬椂闂达紝绋嬪簭浠g爜搴旇濡備綍鍐欏憿锛熸樉鐒讹紝鍙互寤剁敤涓婅堪鐨勫嚑绉嶆柟娉曪紝鍙渶瑕佺◢鍔犱慨鏀瑰嵆鍙備緥濡傛柟娉1鍙屽畾鏃跺櫒浜ゆ浛宸ヤ綔锛屼慨鏀筎ON_1鐨勫畾鏃舵椂闂村氨鏄柇寮鐨勬椂闂达紝TON_2鐨勫畾鏃舵椂闂村氨鏄帴閫氱殑鏃堕棿銆傜▼搴忎唬鐮佸涓嬶細
  1. TON_1(IN:= NOT TON_2.Q, PT:= T#2S, Q=>, ET=>);// 鏂紑2sTON_2(IN:= TON_1.Q, PT:= T#1S, Q=>, ET=>);// 鎺ラ1s
  2. OUT:=TON_1.Q;
澶嶅埗浠g爜
褰撶劧锛屼篃鍙互灏哖T瀹氭椂鏃堕棿鐢═IME鍨嬪彉閲忔浛浠o紝杩欐牱灏辫兘闅忔椂淇敼鎺ラ氬拰鏂紑鐨勬椂闂达紝瀹炵幇涓嶅悓鍗犵┖姣旂殑鍛ㄦ湡鑴夊啿淇″彿銆備笅闈㈣繕灏嗛拡瀵规柟娉4锛氫娇鐢ㄥ畾鏃跺櫒杩涜璁℃暟杩涜鏇村姞璇︾粏鐨勮鏄庯紱鍏跺畠鏂规硶鐨勫叿浣撲慨鏀硅繖閲屼笉鍐嶄竴涓灞曠幇锛屽彲浠ヨ嚜宸辩紪鍐欎唬鐮佽繘琛屾祴璇曘備娇鐢ㄦ柟娉4鍙渶瑕佷慨鏀规渶鍚庝竴琛屼唬鐮佸拰璁℃暟鍊硷紝浠g爜濡備笅锛
  1. //鎺ラ1s 鏂紑2sTON_1(IN:=NOT TON_1.Q, PT:=T#60MS, Q=>, ET=>);
  2. IF Counter<30 THEN                //淇敼璁℃暟鍊间负30  30涓100ms=1涓懆鏈3s
  3.         IF TON_1.Q THEN Counter:=Counter+1;END_IF
  4. ELSE
  5.         Counter:=0;
  6. END_IF
  7. OUT:=Counter>0 AND Counter<11;//璁℃暟鍊间负1~10琛ㄧず鎺ラ1s 涓11~30琛ㄧず鏂紑2s
澶嶅埗浠g爜
涔熷彲浠ュ皢涓婅堪浠g爜鍐欐垚鍔熻兘鍧楋紝閫氳繃杈撳叆鍙橀噺鏇村姞鑷敱鐨勯夋嫨鎺ラ氬拰鏂紑鐨勬椂闂达紱鎴戠殑缂栫▼涔犳儻鏄鏋滆繖涓姛鑳界敤鐨勫皯锛岃屼笖浠g爜涔熺畝鍗曪紝灏变笉浼氬崟鐙皝瑁呮垚FB锛岃屾槸鍦ㄧ▼搴忛渶瑕佺殑鍦版柟鐩存帴鍐欍侳B鐨勪唬鐮佸疄鐜板涓嬶細
  1. FUNCTION_BLOCK Cyclic
  2. VAR_INPUT
  3.         IN:BOOL;// 100ms瀹氭椂鍣ㄧ殑瑙﹀彂淇″彿
  4.         TimeON:TIME;// 鎺ラ氭椂闂
  5.         TimeOFF:TIME;// 鏂紑鏃堕棿
  6. END_VAR
  7. VAR_OUTPUT
  8.         OUT:BOOL;// 鑴夊啿杈撳嚭淇″彿
  9. END_VAR
  10. VAR(*0: 璁℃暟鍊,1: 鎺ラ氬懆鏈熸暟,2: 鏂紑鍛ㄦ湡鏁*)
  11.         State_1:ARRAY[0..3] OF UINT;       
  12. END_VAR
  13. // 绋嬪簭涓讳綋//杈撳叆鐨凾imeON銆乀imeOFF鍙橀噺涓篢IME绫诲瀷锛岄渶灏嗗叾杞寲涓篣INT绫诲瀷锛岃褰曠殑鏄灏戞绉掓暟銆//SEL鏄竴涓夋嫨鍑芥暟锛孫UT:=SEL(G,IN0,IN1)涓紝G涓篢RUE鏃讹紝SEL鍑芥暟杩斿洖IN1鐨勫硷紝鍚﹀垯杩斿洖IN0鐨勫//杈撳叆鐨凾imeON銆乀imeOFF鎺ラ氭柇寮鏃堕棿鏈灏忓崟浣嶄负100ms锛岃緭鍏ュ皬浜100ms鏃跺皢榛樿涓100ms銆//杈撳叆鐨凾imeON銆乀imeOFF鍙兘鍙100ms鐨勬暣鏁板嶏紝濡傝緭鍏ヤ负123ms锛屽皢榛樿涓100ms銆
  14. State_1[1]:=SEL((TIME_TO_UINT(TimeON)/100)>1,1,TIME_TO_UINT(TimeON)/100);
  15. State_1[2]:=SEL((TIME_TO_UINT(TimeOFF)/100)>1,1,TIME_TO_UINT(TimeOFF)/100);
  16. IF State_1[0]<(State_1[1]+State_1[2]) THEN
  17.         IF IN THEN
  18.                 State_1[0]:=State_1[0]+1;
  19.         END_IF
  20. ELSE
  21.         State_1[0]:=0;
  22. END_IF
  23. OUT:=State_1[0]>0 AND State_1[0]<=State_1[1];
澶嶅埗浠g爜
璋冪敤鍔熻兘鍧楀涓嬶細
  1. PROGRAM MAIN
  2. VAR
  3.         TON_100ms : TON;               
  4.         OUT : BOOL;// 鑴夊啿杈撳嚭鍙橀噺
  5.         Cyclic_1 : Cyclic;
  6. END_VAR
  7. TON_100ms(IN:=NOT TON_100ms.Q, PT:=T#60MS, Q=>, ET=>);Cyclic_1(IN:=TON_100ms.Q , TimeON:=T#1S , TimeOFF:= T#2S, OUT=>);
  8. OUT:=Cyclic_1.OUT;
澶嶅埗浠g爜
杩欑灏佽FB鐨勪竴涓ソ澶勬槸鍔熻兘鍧楀唴閮ㄦ病鏈夎皟鐢ㄧ郴缁熷畾鏃跺櫒锛屽綋闇瑕佸畾涔夊涓狥B鍙橀噺鏃讹紝姣忎釜FB瀹炰緥鐨勮皟鐢ㄥ彧浼氬崰鐢ㄥ皯閲忕殑鍐呭瓨銆傚鏋滄寜鐓ф柟娉1浣跨敤鍙屽畾鏃跺櫒灏佽FB鍧楋紝姣忎釜FB鐨勫疄渚嬭皟鐢ㄩ兘鍗犵敤浜2涓猅ON瀹氭椂鍣ㄧ殑璧勬簮锛岃屼竴涓猅ON瀹氭椂鍣ㄥ崰鐢32瀛楄妭鐨勫唴瀛樸傚鏋滀笉鎯宠嚜宸辫繘琛屽皝瑁咃紝寰堝PLC涓兘鎻愪緵浜嗙被浼肩殑鍔熻兘鍧楋紝渚嬪CODESYS涓彁渚涗簡BLINK鍔熻兘鍧椼傚姛鑳藉潡鐨勮鏄庡拰璋冪敤褰㈠紡濡備笅锛
棣栧厛闇瑕佹坊鍔燯til搴擄紝鐐瑰嚮鈥滄坊鍔犲簱鈥濓紝鍦ㄦ悳绱㈡涓緭鍏til锛岀偣纭畾杩涜娣诲姞銆
銆怌ODESYS绯诲垪PLC瀹氭椂鍣ㄤ娇鐢ㄨ瑙c-5.png

銆怌ODESYS绯诲垪PLC瀹氭椂鍣ㄤ娇鐢ㄨ瑙c-6.png

銆怌ODESYS绯诲垪PLC瀹氭椂鍣ㄤ娇鐢ㄨ瑙c-7.png

杈撳叆ENABLE涓篢RUE鏃惰緭鍑篛UT寮濮嬮棯鐑侊紝涓篎ALSE鏃跺仠姝㈤棯鐑佸苟淇濇寔褰撳墠鍊硷紝TIMELOW涓篛UT鏂紑鏃堕棿锛孴IMEHIGH涓篛UT鎺ラ氭椂闂淬
2.3 寤舵椂鎺ラ氬拰鏂紑瀹氭椂鍣

鍦ㄥ疄闄呯殑椤圭洰寮鍙戣繃绋嬩腑锛屽緢澶氱殑淇″彿閮介渶瑕佸仛寤舵椂澶勭悊锛屼緥濡傚閮ㄧ殑鏁板瓧閲忚緭鍏ヤ俊鍙峰浼犳劅鍣ㄥ彲鑳藉瓨鍦ㄨ瑙﹀彂鐨勬儏鍐碉紝杩欐椂灏遍渶瑕佸浼犳劅鍣ㄧ殑杈撳叆淇″彿寤舵椂鍑犲崄鍒颁竴鐧炬绉掞紝绋嬪簭涓殑鍚勭閫昏緫澶勭悊锛屾姤璀︽潯浠跺鐞嗙瓑绛夐兘鍙兘闇瑕佸欢鏃讹紝褰撲竴浜涙姤璀︿俊鍙烽渶瑕佸湪PC鎴栬匟MI涓婅繘琛屾樉绀烘垨鑰呰褰曟椂锛屾湁浜涙姤璀︿俊鍙峰彲鑳藉彧浼氳Е鍙戜竴鐬棿鎴栬呰Е鍙戞椂闂村緢鐭紝鑰孭LC鍜孭C鐨勯氳寰寰鍙堟湁寤惰繜锛岃繖浜涗俊鍙峰氨寰堥毦琚褰曚笅鏉ワ紝杩欐椂灏遍渶瑕佸仛寤舵椂鏂紑澶勭悊浜嗐
鍒拌繖閲岋紝鎴戜滑鐨勯渶姹傚氨寰堟槑鏄句簡锛屾渶濂芥湁涓涓狥B鍧楋紝鍔熻兘鏄鏌愪釜杈撳叆淇″彿鍚屾椂鍋氬欢鏃舵帴閫氬拰鏂紑澶勭悊銆備笉闅炬兂鍒帮紝鍙互鐢ㄧ郴缁熷畾鏃跺櫒TON缂栧啓閫昏緫灏佽涓涓姛鑳藉潡锛屽姛鑳借櫧鐒惰兘瀹炵幇锛屼絾鏄紝涓涓櫘閫氬皬鍨嬬殑椤圭洰灏遍渶瑕佸仛鍑犲崄鍒颁竴鐧惧涓欢鏃跺鐞嗭紝濡傛灉鏄腑澶у瀷鐨勯」鐩紝鎴栬呬竴浜涙姤璀︿俊鎭紝鐘舵佹樉绀猴紝鏁版嵁璁板綍淇℃伅鑰冭檻闈炲父鍏ㄩ潰鐨勭▼搴忥紝杩欑淇″彿寤舵椂澶勭悊寰寰閮芥槸鍑犵櫨涓婂崈涓傚墠闈篃璇磋繃锛屼竴涓猅ON瀹氭椂鍣ㄥ崰鐢32瀛楄妭鐨勫唴瀛橈紝蹇界暐瀹氫箟鐨勫叾瀹冨彉閲忥紝瀹炰緥鍖100娆″氨鏄3200byte=3.2kb锛屽疄渚嬪寲1000娆″氨鏄32000byte=32kb锛岃繖瀵筆LC鐨勫唴瀛樻槸涓涓瘮杈冨ぇ鐨勬秷鑰楋紙灏界鐜颁唬PLC鐨勫唴瀛樺凡缁忚冻澶熷ぇ锛夛紝鎵浠ワ紝褰撲綘闇瑕佸鐞嗗ぇ閲忕殑淇″彿寤舵椂鏃讹紝鍙互灏濊瘯鍐欎竴涓嚜宸辩殑鍔熻兘鍧椼備互CODESYS涓轰緥锛屼娇鐢ㄥ惊鐜壂鎻忓懆鏈20ms锛屼笅闈㈢洿鎺ラ氳繃浠g爜鏉ュ垎鏋愬姛鑳藉潡鐨勮璁℃濊矾锛

銆怌ODESYS绯诲垪PLC瀹氭椂鍣ㄤ娇鐢ㄨ瑙c-8.png

  1. FUNCTION_BLOCK DualDelay
  2. VAR_INPUT
  3.         IN:BYTE;// 0-7:瀹氭椂鍣1-8杈撳叆
  4.         DlyON:ARRAY[0..7] OF BYTE;// 0-7:瀹氭椂鍣1-8寤舵椂鎺ラ氬懆鏈熸暟杈撳叆
  5.         DlyOFF:ARRAY[0..7] OF BYTE;// 0-7:瀹氭椂鍣1-8寤舵椂鏂紑鍛ㄦ湡鏁拌緭鍏
  6. END_VAR
  7. VAR_OUTPUT
  8.         OUT:BYTE;// 0-7:瀹氭椂鍣1-8杈撳嚭
  9. END_VAR
  10. VAR
  11.         Clo:ARRAY[0..7] OF BYTE;// 8涓畾鏃跺櫒鐨勬壂鎻忓懆鏈熷掕鏃惰鏁// 0~7: .0-璁板綍姣忎釜瀹氭椂鍣ㄥ湪涓婁竴涓壂鎻忓懆鏈熺殑杈撳叆鐘舵, .1-鐩爣杈撳嚭鐘舵, .2-瀹為檯杈撳嚭鐘舵
  12.         Res:ARRAY[0..7] OF BYTE;
  13.         i:BYTE;// 浣嶅惊鐜
  14.         inBit:BOOL;// 璁板綍褰撳墠瀹氭椂鍣ㄧ殑杈撳叆淇″彿
  15. END_VAR
  16. //********************绋嬪簭浠g爜閮ㄥ垎*****************************
  17. OUT:=0;// 鍒濆鍖栬緭鍑哄瓧鑺
  18. FOR i:=0 TO 7 DO
  19.         inBit:=(IN AND SHL(1,i))<>0;// 鑾峰彇褰撳墠杈撳叆浣嶇殑鐘舵
  20.         IF inBit<>Res[i].0 THEN                        // 瀹氭椂鍣ㄨ緭鍏ヤ俊鍙峰彂鐢熷彉鍖
  21.                 Res[i].0:=inBit;// 鏇存柊涓婁竴娆℃壂鎻忓懆鏈熺殑鐘舵
  22.                 IF inBit THEN                                // 涓婂崌娌垮欢鏃
  23.                         Res[i].1:=TRUE;
  24.                         Clo[i]:=DlyON[i];
  25.                 ELSE                                                // 涓嬮檷娌垮欢鏃
  26.                         Res[i].1:=FALSE;
  27.                         Clo[i]:=DlyOFF[i];
  28.                 END_IF
  29.         END_IF
  30.         IF Clo[i]>0 THEN
  31.                 Clo[i]:=Clo[i]-1;// 寤舵椂璁℃椂鍛ㄦ湡鏁伴掑噺
  32.         ELSE
  33.                 Res[i].2:=Res[i].1;// 杈撳嚭鏇存柊锛岃鏃剁粨鏉熸垨寤舵椂鍛ㄦ湡鏁颁负0鏃剁珛鍗崇敓鏁
  34.         END_IF
  35.         IF Res[i].2 THEN
  36.                 OUT:=OUT OR SHL(1,i);// 濡傛灉褰撳墠杈撳嚭鐘舵佷负TRUE锛岃缃緭鍑哄瓧鑺傜殑瀵瑰簲浣
  37.         END_IF
  38. END_FOR
澶嶅埗浠g爜
杈撳叆淇″彿IN瀹氫箟涓築YTE绫诲瀷锛屽瓧鑺傜殑姣忎釜浣嶉兘鍗曠嫭浣滀负涓涓畾鏃跺櫒锛岃繖鏍凤紝涓涓狥B灏辨湁8涓畾鏃跺櫒鍙互鍗曠嫭浣跨敤锛屽綋浣犲湪绋嬪簭鐨勬煇涓昏緫澶勯渶瑕佸鐞嗗ソ鍑犱釜淇″彿寤舵椂鏃讹紝鍙瀹炰緥鍖栦竴娆¤繖涓狥B灏辨嫢鏈変簡8涓畾鏃跺櫒锛屽綋浣犻渶瑕佸鐞10涓垨鑰呮洿澶氫俊鍙峰欢鏃讹紝杩樺彲浠ョ敤鏁扮粍鐨勫舰寮忚繘琛屽0鏄庯紝渚嬪锛
  1. Delay:ARRAY[0..3] OF DualDelay;//浠ユ暟缁勭殑褰㈠紡澹版槑淇″彿寤舵椂鍔熻兘鍧
澶嶅埗浠g爜
鐜板湪锛屾暟缁勭殑姣忎釜鍏冪礌閮芥湁8涓畾鏃跺櫒鍙互浣跨敤锛岃繖鍦ㄤ功鍐欎笉鍚岀殑閫昏緫浠g爜澶勫皢浼氭柟渚垮緢澶氾紝鑰屼笖锛岃繖涓8瀹氭椂鍣ㄧ殑鍔熻兘鍧楀彧鍗犵敤48byte鍐呭瓨锛岀浉褰撲簬姣忎釜瀹氭椂鍣ㄥ彧鍗犵敤6涓瓧鑺傘
涓婅堪浠g爜鏄氳繃FOR寰幆鍚屾椂澶勭悊8涓畾鏃跺櫒锛屽鏋滀綘鐞嗚В杩欐浠g爜鏈変换浣曠殑鍥伴毦锛屽彲浠ュ幓鎺塅OR寰幆锛屽彧鐪嬪叾涓竴涓畾鏃跺櫒鐨勪唬鐮佹墽琛岄昏緫锛屼篃灏辨槸灏 i 鍥哄畾涓1鎴栬呭叾瀹冨煎啀鍘婚槄璇伙紝杩欓噷鍋囪i=1锛屼篃灏辨槸绗2涓畾鏃跺櫒IN.1锛屽湪绗竴涓壂鎻忓懆鏈熷唴锛屽紑濮嬬敱绗竴琛岀▼搴忎粠涓婂埌涓嬶紝浠庡乏鍒板彸鎵ц锛
鎵ц绗竴琛岋紝瀹氭椂鍣ㄧ殑杈撳嚭鍒濆鍖栦负0锛屽寘鎷琌UT.1=0
  1. OUT:=0;// 鍒濆鍖栬緭鍑哄瓧鑺
澶嶅埗浠g爜
i=1鏃,SHL(1,i)灏1宸︾Щ涓浣嶏紝涔熷氨鏄2#0000 0001宸︾Щ涓浣嶅緱鍒2#0000 0010锛屽啀涓嶪N杩涜涓庤繍绠楋紝0璺1鎴栬0涓庤繍绠楃殑缁撴灉閮芥槸0锛岀浉褰撲簬鎶婅浣嶅睆钄戒簡锛1璺1鎴栬0涓庤繍绠楋紝缁撴灉鏄鏂瑰師鏈殑鍊硷紝鐩稿綋浜庢嬁鍒板鏂圭殑鍊笺2#0000 0010 AND IN鐩稿綋浜庢嬁鍒癐N.1杩欎竴浣嶇殑鍊硷紝鍏跺畠浣嶅叏閮ㄤ负0銆傚緱鍒扮殑缁撴灉鍜0杩涜姣旇緝锛屽鏋=0锛岃鏄嶪N.1涓0锛屽鏋<>0锛岃鏄嶪N.1涓1锛岃繖鏍穒nBit灏辨嬁鍒颁簡IN.1鐨勫笺
  1. inBit:=(IN AND SHL(1,i))<>0;// 鑾峰彇褰撳墠杈撳叆浣嶇殑鐘舵
澶嶅埗浠g爜
鍔熻兘鍧楄皟鐢ㄥ涓嬶紝鍙互鏍规嵁瀹為檯闇瑕佷娇鐢ㄥ涓畾鏃跺櫒锛

銆怌ODESYS绯诲垪PLC瀹氭椂鍣ㄤ娇鐢ㄨ瑙c-9.png

trace璺熻釜缁撴灉濡備笅锛岀鍚堥鏈熴

銆怌ODESYS绯诲垪PLC瀹氭椂鍣ㄤ娇鐢ㄨ瑙c-10.png

娉ㄦ剰浜嬮」锛
1.杈撳叆Delay寤舵椂璁℃暟鏁版嵁绫诲瀷涓篵yte锛屾渶澶у彇鍊255锛屾寜鐓ф壂鎻忓懆鏈20ms璁$畻锛屾渶澶у欢鏃朵负5.1s銆
2.杩欎釜鍔熻兘鍧楀疄鐜扮殑鍩烘湰鍘熺悊鏄緷闈犲惊鐜壂鎻忓懆鏈燂紝杩欓噷璁剧疆鐨勬槸鍥哄畾20ms锛屽鏋滀綘鐨勭▼搴忎笉鏄噰鐢ㄥ浐瀹氭壂鎻忓懆鏈燂紝閭h繖绉嶆柟娉曞氨涓嶉傚悎浣犮
3.杩欎釜鍔熻兘鍧楃殑浠g爜瀹炵幇鏂规硶鏄绉嶅鏍风殑锛岃繖閲屽彧鏄彁渚涗簡涓绉嶅啓娉曪紝浣嗘湰璐ㄩ兘鏄埄鐢ㄥ惊鐜壂鎻忓懆鏈熻繘琛岃鏁般
4.涓嶈蹇樿绋嬪簭鐨勭涓琛岋紝OUT:=0;鍒濆鍖栬緭鍑轰俊鍙枫
+10
涓嶈禐涓涓紵
鎵撹祻榧撳姳涓涓嬶紒
鍥炲

浣跨敤閬撳叿 涓炬姤

鎮ㄩ渶瑕佺櫥褰曞悗鎵嶅彲浠ュ洖甯 鐧诲綍 | 绔嬪嵆娉ㄥ唽 鏂版氮寰崥鐧婚檰

鏈増绉垎瑙勫垯

椤堕儴qrcode搴曢儴
鍏虫敞閰峰痉缃戣闃呭彿锛岃幏鍙栨洿澶氳祫璁紒

QQ|Archiver|鎵嬫満鐗|灏忛粦灞|閰峰痉璁哄潧 ( 鑻廔CP澶16065247鍙-1 )|缃戠珯鍦板浘

GMT+8, 2026-5-21 04:42 , Processed in 0.259226 second(s), 61 queries .

閰峰痉缃

© 2001-2013 Hicodesys. 鎶鏈敮鎸 by 閰峰痉缃

蹇熷洖澶 杩斿洖椤堕儴 杩斿洖鍒楄〃