CODESYS璁℃椂鍣ㄧ粓鏋佹寚鍗楋細浠嶳TC鏃堕挓鍒癟ON寤舵椂鍣ㄧ殑瀹屾暣閰嶇疆娴佺▼-CODESYS璧勬簮涓嬭浇鍖-閰峰痉缃 - CoDeSys杞欢鏁欑▼涓嬭浇,CoDeSys宸ユ帶璧勮闂ㄦ埛
HSC6490-cn涓浗鍒堕狅紝涓浗鑺瘇
鏌ョ湅: 115|鍥炲: 0

CODESYS璁℃椂鍣ㄧ粓鏋佹寚鍗楋細浠嶳TC鏃堕挓鍒癟ON寤舵椂鍣ㄧ殑瀹屾暣閰嶇疆娴佺▼

[澶嶅埗閾炬帴]
  • TA鐨勬瘡鏃ュ績鎯
    寮蹇
    2017-11-20 22:07
  • 绛惧埌澶╂暟: 2 澶

    [LV.1]鍒濇潵涔嶅埌

    鍙戣〃浜 2026-3-18 10:19:51 | 鏄剧ず鍏ㄩ儴妤煎眰 |闃呰妯″紡
    CODESYS璁℃椂鍣ㄧ粓鏋佹寚鍗楋細浠嶳TC鏃堕挓鍒癟ON寤舵椂鍣ㄧ殑瀹屾暣閰嶇疆娴佺▼

    鍦ㄥ伐涓氳嚜鍔ㄥ寲棰嗗煙锛岀簿纭殑鏃堕棿鎺у埗寰寰鏄疄鐜拌澶囪仈閿併佺敓浜ц妭鎷嶇鐞嗗拰瀹夊叏淇濇姢鐨勬牳蹇冭绱犮備綔涓篒EC 61131-3鏍囧噯鐨勯噸瑕佸疄鐜板钩鍙帮紝CODESYS V3.5鎻愪緵浜嗕赴瀵岀殑鏃堕棿鎺у埗鍔熻兘鍧楋紝鑳藉婊¤冻浠庣畝鍗曞欢鏃跺埌澶嶆潅鏃堕棿搴忓垪鐨勫悇绉嶉渶姹傘傛湰鏂囧皢娣卞叆瑙f瀽鍥涚鍏抽敭璁℃椂鍣ㄧ殑搴旂敤鍦烘櫙銆侀厤缃粏鑺傚拰杩涢樁鎶宸э紝甯姪宸ョ▼甯堟瀯寤烘洿鍙潬鐨勮嚜鍔ㄥ寲绯荤粺銆
    1. 璁℃椂鍣ㄥ熀纭涓庨夊瀷绛栫暐

    宸ヤ笟鎺у埗绯荤粺涓殑璁℃椂鍣ㄨ繙涓嶆绠鍗曠殑"寮濮-绛夊緟-缁撴潫"閫昏緫銆備笉鍚岀被鍨嬬殑璁℃椂鍣ㄥ湪瑙﹀彂鏂瑰紡銆佽緭鍑虹壒鎬у拰搴旂敤鍦烘櫙涓婂瓨鍦ㄦ樉钁楀樊寮傦紝閫夋嫨涓嶅綋鍙兘瀵艰嚧鎺у埗閫昏緫澶辨晥鐢氳嚦瀹夊叏闅愭偅銆
    1.1 鍥涘ぇ鏍稿績璁℃椂鍣ㄥ姣

    璁℃椂鍣ㄧ被鍨瑙﹀彂鏉′欢杈撳嚭鐗规鍏稿瀷搴旂敤鍦烘櫙
    RTC涓婂崌娌胯Е鍙鎸佺画杈撳嚭鏃堕棿鏁版嵁绯荤粺鏃ュ織銆佺敓浜ф壒娆¤褰
    TON涓婂崌娌胯Е鍙寤舵椂鍚庣疆浣璁惧鍚姩寤舵椂銆佸畨鍏ㄨ仈閿
    TOF涓嬮檷娌胯Е鍙寤舵椂鍚庡浣鍐峰嵈绯荤粺鍋滄満寤舵椂
    TP涓婂崌娌胯Е鍙鑴夊啿杈撳嚭淇″彿閲囨牱銆佺煭鏃跺姩浣滄帶鍒
    RTC(Real Time Clock) 鏄敮涓鎻愪緵瀹屾暣鏃ユ湡鏃堕棿淇℃伅鐨勫姛鑳藉潡锛屽叾杈撳嚭鏍煎紡涓篋ATE_AND_TIME鏁版嵁绫诲瀷銆備笌鍏跺畠璁℃椂鍣ㄤ笉鍚岋紝RTC鐨勮鏃跺熀鍑嗘潵鑷郴缁熸椂閽熻岄潪绋嬪簭寰幆鍛ㄦ湡锛屽洜姝ゆ洿閫傚悎闇瑕佷笌瀹為檯鏃堕棿鍚屾鐨勫満鏅
    1. // RTC鍩烘湰浣跨敤绀轰緥
    2. VAR
    3.     sysClock : RTC;
    4.     startTime : DATE_AND_TIME := DT#2023-07-15-08:00:00;
    5.     currentTime : DATE_AND_TIME;
    6.     isRunning : BOOL;
    7. END_VAR
    8. sysClock(EN:=TRUE, PDT:=startTime);
    9. currentTime := sysClock.CDT;
    10. isRunning := sysClock.Q;
    澶嶅埗浠g爜
    1.2 璁℃椂绮惧害涓庢暟鎹被鍨

    CODESYS V3.5鏀寔浠庢绉掑埌骞寸殑鍚勭鏃堕棿鍗曚綅琛ㄧず锛
      TIME锛氭绉掔骇绮惧害锛岃寖鍥绰106751澶DATE锛氫粎鏃ユ湡閮ㄥ垎TIME_OF_DAY锛24灏忔椂鍒舵椂闂DATE_AND_TIME锛氬畬鏁存椂闂存埑
    鎻愮ず锛氬湪闇瑕侀珮绮惧害鎺у埗鐨勫満鍚堬紝寤鸿浣跨敤TON鑰岄潪TOF锛屽洜涓篢ON鐨勮鏃朵粠瑙﹀彂鐬棿寮濮嬶紝鑰孴OF闇瑕佺瓑寰呬笅涓涓壂鎻忓懆鏈熸墠浼氳鏃躲
    2. RTC鏃堕挓鐨勬繁搴﹀簲鐢

    瀹炴椂鏃堕挓(RTC)鍦ㄥ伐涓氳嚜鍔ㄥ寲涓壆婕旂潃绯荤粺鏃堕棿鍩哄噯鐨勮鑹诧紝鍏跺簲鐢ㄨ繙涓嶆绠鍗曠殑鏃堕棿鏄剧ず銆傚悎鐞嗗埄鐢≧TC鍙互瀹炵幇鐢熶骇鏁版嵁鐨勬椂闂存埑璁板綍銆佺彮娆¤嚜鍔ㄥ垏鎹㈠拰璁惧瀹氭湡缁存姢鎻愰啋绛夐珮绾у姛鑳姐
    2.1 鏃堕棿鏍煎紡杞崲鎶宸

    宸ヤ笟鐜板満缁忓父闇瑕佸湪涓嶅悓鏃堕棿鏍煎紡闂磋浆鎹€備互涓嬫槸甯歌杞崲鍦烘櫙鐨勮В鍐虫柟妗堬細
    1. // 灏員IME杞崲涓虹鏁
    2. FUNCTION TIME_TO_SECONDS : REAL
    3. VAR_INPUT
    4.     t : TIME;
    5. END_VAR
    6. TIME_TO_SECONDS := TIME_TO_REAL(t) / 1000.0;
    7. // 鏃ユ湡鏃堕棿瀛楃涓茬敓鎴
    8. FUNCTION DT_TO_STRING : STRING
    9. VAR_INPUT
    10.     dt : DATE_AND_TIME;
    11. END_VAR
    12. VAR
    13.     year : UINT;
    14.     month : UINT;
    15.     day : UINT;
    16.     hour : UINT;
    17.     minute : UINT;
    18.     second : UINT;
    19. END_VAR
    20. year := DATE_TO_YEAR(dt);
    21. month := DATE_TO_MONTH(dt);
    22. day := DATE_TO_DAY(dt);
    23. hour := TIME_OF_DAY_TO_HOUR(dt);
    24. minute := TIME_OF_DAY_TO_MINUTE(dt);
    25. second := TIME_OF_DAY_TO_SECOND(dt);
    26. DT_TO_STRING := CONCAT(
    27.     UINT_TO_STRING(year), '-',
    28.     UINT_TO_STRING(month), '-',
    29.     UINT_TO_STRING(day), ' ',
    30.     UINT_TO_STRING(hour), ':',
    31.     UINT_TO_STRING(minute), ':',
    32.     UINT_TO_STRING(second)
    33. );
    澶嶅埗浠g爜
    2.2 鐢熶骇鎵规璁板綍瀹炵幇

    缁撳悎RTC鍜屾枃浠舵搷浣滃姛鑳斤紝鍙互鏋勫缓瀹屾暣鐨勭敓浜ф暟鎹褰曠郴缁燂細
      鍒涘缓鍏ㄥ眬鍙橀噺瀛樺偍褰撳墠鎵规淇℃伅姣忎釜鎵规寮濮嬫椂璁板綍RTC鏃堕棿灏嗗叧閿弬鏁颁笌鏃堕棿鎴充竴璧蜂繚瀛樺埌CSV鏂囦欢瀹炵幇鎸夋椂闂存煡璇㈠巻鍙叉暟鎹殑鍔熻兘
    1. // 鎵规璁板綍缁撴瀯浣
    2. TYPE BatchRecord :
    3. STRUCT
    4.     startTime : DATE_AND_TIME;
    5.     endTime : DATE_AND_TIME;
    6.     productID : STRING(20);
    7.     quantity : UINT;
    8.     operator : STRING(30);
    9. END_STRUCT
    10. END_TYPE
    澶嶅埗浠g爜
    3. TON寤舵椂鍣ㄧ殑杩涢樁鎺у埗

    TON(Timer ON Delay)鏄伐涓氭帶鍒朵腑鏈甯哥敤鐨勮鏃跺櫒涔嬩竴锛屽叾绮剧‘閰嶇疆鐩存帴鍏崇郴鍒拌澶囩殑瀹夊叏杩愯銆傛湰鑺傚皢鎺㈣姣绾х簿搴︾殑瀹炵幇鏂规硶鍜屽父瑙侀棶棰樿В鍐虫柟妗堛
    3.1 楂樼簿搴﹀畾鏃跺疄鐜

    鍦–ODESYS涓疄鐜版绉掔骇鎺у埗闇瑕佹敞鎰忥細
      璁剧疆姝g‘鐨勪换鍔″懆鏈燂紙寤鸿鈮10ms锛変娇鐢═IME绫诲瀷鑰岄潪绠鍗曟暣鏁伴伩鍏嶅湪闀垮懆鏈熶换鍔′腑浣跨敤鐭欢鏃
    1. // 绮剧‘鐨100ms鑴夊啿鐢熸垚
    2. VAR
    3.     preciseTimer : TON;
    4.     trigger : BOOL := FALSE;
    5.     pulseOut : BOOL;
    6. END_VAR
    7. preciseTimer(IN:=trigger, PT:=T#100ms);
    8. pulseOut := preciseTimer.Q;
    9. IF pulseOut THEN
    10.     trigger := FALSE;
    11.     // 鎵ц绮剧‘鍔ㄤ綔
    12. END_IF
    澶嶅埗浠g爜
    3.2 澶氳鏃跺櫒鑱斿姩鎺у埗

    澶嶆潅璁惧閫氬父闇瑕佸涓鏃跺櫒鍗忓悓宸ヤ綔銆備互涓嬫槸涓夌鍏稿瀷鑱斿姩妯″紡锛

    • 绾ц仈妯″紡锛氬墠涓涓鏃跺櫒瑙﹀彂涓嬩竴涓
      1. timer1(IN:=startSignal, PT:=T#5s);
      2. timer2(IN:=timer1.Q, PT:=T#3s);
      澶嶅埗浠g爜
    • 骞惰妯″紡锛氬悓鏃跺惎鍔ㄥ涓嫭绔嬭鏃
      1. timerA(IN:=startAll, PT:=T#10s);
      2. timerB(IN:=startAll, PT:=T#15s);
      澶嶅埗浠g爜
    • 澶嶄綅妯″紡锛氫富璁℃椂鍣ㄦ帶鍒朵粠璁℃椂鍣ㄥ浣
      1. IF masterTimer.Q THEN
      2.     slaveTimer(IN:=FALSE, PT:=T#0s);
      3. END_IF
      澶嶅埗浠g爜
    4. TOF涓嶵P鐨勭壒娈婂簲鐢

    TOF(Timer OFF Delay)鍜孴P(Timer Pulse)铏界劧浣跨敤棰戠巼杈冧綆锛屼絾鍦ㄧ壒瀹氬満鏅笅鑳芥彁渚涗笉鍙浛浠g殑鍔熻兘銆
    4.1 瀹夊叏鍋滄満寤舵椂璁捐

    TOF闈炲父閫傚悎鐢ㄤ簬璁惧瀹夊叏鍋滄満杩囩▼锛
      涓荤數鏈哄仠姝㈠悗鍐峰嵈椋庢墖缁х画杩愯娑插帇绯荤粺淇濆帇寤舵椂瀹夊叏闂ㄩ攣瀹氶噴鏀惧欢鏃
    1. // 瀹夊叏鍋滄満閫昏緫绀轰緥
    2. VAR
    3.     mainMotor : BOOL;
    4.     coolingFan : TOF;
    5.     emergencyStop : BOOL;
    6. END_VAR
    7. coolingFan(IN:=mainMotor AND NOT emergencyStop, PT:=T#30s);
    8. // 涓荤數鏈哄仠姝㈠悗椋庢墖缁х画杩愯30绉
    澶嶅埗浠g爜
    4.2 绮剧‘鑴夊啿鎺у埗

    TP璁℃椂鍣ㄥ彲浠ヤ骇鐢熺簿纭搴︾殑鑴夊啿淇″彿锛岄傜敤浜庯細
      姘斿姩鍏冧欢鐭椂鍔ㄤ綔淇″彿閲囨牱绐楀彛闃叉姈婊ゆ尝澶勭悊
    1. // 50ms鑴夊啿鐢熸垚
    2. VAR
    3.     inputSensor : BOOL;
    4.     pulseGenerator : TP;
    5.     outputValve : BOOL;
    6. END_VAR
    7. pulseGenerator(IN:=inputSensor, PT:=T#50ms);
    8. outputValve := pulseGenerator.Q;
    澶嶅埗浠g爜
    5. 璁℃椂鍣ㄧ郴缁熼泦鎴愬疄璺

    灏嗚鏃跺櫒鍔熻兘鏈夋晥鏁村悎鍒板疄闄呴」鐩腑闇瑕佽冭檻宸ョ▼瑙勮寖銆佽皟璇曟妧宸у拰鎬ц兘浼樺寲绛夊涓柟闈€
    5.1 缁撴瀯鍖栨枃鏈渶浣冲疄璺

      浣跨敤鍔熻兘鍧楀疄渚嬭岄潪鐩存帴璋冪敤涓烘瘡涓鏃跺櫒娣诲姞璇︾粏娉ㄩ噴瀹炵幇缁熶竴鐨勯敊璇鐞嗘満鍒
    1. // 甯︾姸鎬佹鏌ョ殑璁℃椂鍣ㄥ皝瑁
    2. FUNCTION_BLOCK SafeTimer
    3. VAR_INPUT
    4.     enable : BOOL;
    5.     preset : TIME;
    6.     reset : BOOL;
    7. END_VAR
    8. VAR_OUTPUT
    9.     done : BOOL;
    10.     elapsed : TIME;
    11.     error : BOOL;
    12. END_VAR
    13. VAR
    14.     internalTimer : TON;
    15.     maxDuration : TIME := T#1h;
    16. END_VAR
    17. IF reset THEN
    18.     internalTimer(IN:=FALSE, PT:=preset);
    19. ELSIF preset > maxDuration THEN
    20.     error := TRUE;
    21. ELSE
    22.     internalTimer(IN:=enable, PT:=preset);
    23.     done := internalTimer.Q;
    24.     elapsed := internalTimer.ET;
    25.     error := FALSE;
    26. END_IF
    澶嶅埗浠g爜
    5.2 璋冭瘯涓庢晠闅滄帓鏌

    璁℃椂鍣ㄧ浉鍏抽棶棰樼殑甯歌鎺掓煡姝ラ锛
      纭璁℃椂鍣ㄧ被鍨嬮夋嫨姝g‘妫鏌T鍙傛暟鍗曚綅鏄惁姝g‘锛堢/姣锛夌洃鎺T鍊艰瀵熻鏃惰繘搴﹂獙璇佽Е鍙戜俊鍙锋槸鍚︾ǔ瀹氭鏌ヤ换鍔″懆鏈熸槸鍚﹀尮閰嶈鏃堕渶姹
    鍦–ODESYS寮鍙戠幆澧冧腑锛屽彲浠ラ氳繃浠ヤ笅鏂规硶澧炲己璋冭瘯鑳藉姏锛
      浣跨敤Watch琛ㄥ疄鏃剁洃鎺T鍊煎湪Visualization涓坊鍔犺鏃跺櫒鐘舵佹樉绀哄疄鐜拌鏃跺畬鎴愪簨浠舵姤璀﹁褰曡鏃跺櫒鍘嗗彶鏁版嵁鍒版枃浠
    宸ヤ笟鐜板満鐨勭粡楠岃〃鏄庯紝绾30%鐨勮鏃跺櫒闂婧愪簬鏃堕棿鍗曚綅娣锋穯锛20%鐢变簬瑙﹀彂淇″彿涓嶇ǔ瀹氾紝鍙︽湁15%涓庝换鍔″懆鏈熼厤缃笉褰撴湁鍏炽傚缓绔嬫爣鍑嗙殑璁℃椂鍣ㄨ皟璇曟祦绋嬪彲浠ユ樉钁楁彁楂樻帓鏌ユ晥鐜囥
    +10
    涓嶈禐涓涓紵
    鎵撹祻榧撳姳涓涓嬶紒
    鍥炲

    浣跨敤閬撳叿 涓炬姤

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

    鏈増绉垎瑙勫垯

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

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

    GMT+8, 2026-4-7 18:10 , Processed in 0.171515 second(s), 53 queries .

    閰峰痉缃

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

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