CODESYS浠诲姟绫诲瀷鍏ㄨВ鏋愶細浠庡惊鐜换鍔″埌澶栭儴浜嬩欢鐨勫疄鎴樺簲鐢-CODESYS璧勬簮涓嬭浇鍖-閰峰痉缃 - CoDeSys杞欢鏁欑▼涓嬭浇,CoDeSys宸ユ帶璧勮闂ㄦ埛
HSC6490-cn涓浗鍒堕狅紝涓浗鑺瘇
鏌ョ湅: 102|鍥炲: 0

CODESYS浠诲姟绫诲瀷鍏ㄨВ鏋愶細浠庡惊鐜换鍔″埌澶栭儴浜嬩欢鐨勫疄鎴樺簲鐢

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

    [LV.1]鍒濇潵涔嶅埌

    鍙戣〃浜 2026-3-18 10:30:54 | 鏄剧ず鍏ㄩ儴妤煎眰 |闃呰妯″紡
    CODESYS浠诲姟绫诲瀷鍏ㄨВ鏋愶細浠庡惊鐜换鍔″埌澶栭儴浜嬩欢鐨勫疄鎴樺簲鐢

    鍦ㄥ伐涓氳嚜鍔ㄥ寲椤圭洰鐨勫紑鍙戣繃绋嬩腑锛屼换鍔¤皟搴︽槸鍐冲畾绯荤粺瀹炴椂鎬с佺ǔ瀹氭у拰鏁堢巼鐨勬牳蹇冮鏋躲傚緢澶氬伐绋嬪笀鍦ㄥ垵娆℃帴瑙ODESYS鏃讹紝寰寰灏嗘敞鎰忓姏闆嗕腑鍦≒LC缂栫▼璇█鍜屽姛鑳藉潡鐨勪娇鐢ㄤ笂锛屽嵈瀵逛换鍔¢厤缃繖涓搴曞眰鏈哄埗缂轰箯娣卞叆鐞嗚В銆傝繖灏卞儚缁勮涓鍙扮簿瀵嗙殑鏈哄櫒锛屼綘鎴栬鐔熸倝姣忎竴涓娇杞拰杞存壙锛屼絾濡傛灉涓嶆竻妤氬姩鍔涘浣曚紶閫掋佸悇閮ㄤ欢濡備綍鍗忓悓锛屾渶缁堟満鍣ㄧ殑杩愯浆鏁堢巼鍜屽彲闈犳у皢澶ф墦鎶樻墸銆
    CODESYS鎻愪緵浜嗗绉嶄换鍔$被鍨嬶紝姣忎竴绉嶉兘瀵瑰簲鐫涓嶅悓鐨勫簲鐢ㄥ満鏅拰璋冨害閫昏緫銆傜悊瑙e畠浠紝涓嶄粎浠呮槸鐭ラ亾濡備綍鍦ㄤ笅鎷夎彍鍗曢噷閫夋嫨锛屾洿鏄鏄庣櫧鍦ㄤ粈涔堟儏鍐典笅閫夋嫨鈥滃惊鐜换鍔♀濊岄潪鈥滄儻鎬ф粦琛屸濓紝濡備綍璁┾滃閮ㄤ簨浠垛濈簿鍑嗗搷搴斿閮ㄤ腑鏂紝浠ュ強濡備綍閬垮厤澶氫釜浠诲姟鍦ㄨ鍐欏悓涓鍧楀唴瀛樻椂鈥滄墦鏋垛濄傛湰鏂囧皢甯︿綘瓒呰秺绠鍗曠殑閰嶇疆姝ラ锛屾繁鍏ュ埌浠诲姟璋冨害鐨勫師鐞嗐佸疄鎴樹腑鐨勯櫡闃变互鍙婃ц兘浼樺寲鐨勭瓥鐣ワ紝甯姪浣犳瀯寤哄嚭鏃㈤珮鏁堝張绋冲仴鐨勬帶鍒剁郴缁熴傛棤璁轰綘鏄鍦ㄥ鐞嗛珮閫烢therCAT杩愬姩鎺у埗锛岃繕鏄璁″鏉傜殑鍚庡彴鏁版嵁澶勭悊娴佺▼锛屽浠诲姟绫诲瀷鐨勬繁鍒绘礊瀵熼兘灏嗘槸浣犳墜涓殑鍒╁櫒銆
    1. 鐞嗚ВCODESYS浠诲姟璋冨害鐨勫熀鐭

    鍦ㄦ繁鍏ュ悇绫讳换鍔′箣鍓嶏紝鎴戜滑蹇呴』鍏堟惌寤轰竴涓叧浜嶤ODESYS浠诲姟璋冨害鐨勫熀纭璁ょ煡妗嗘灦銆侰ODESYS Runtime浣滀负涓涓蒋PLC杩愯鏃剁郴缁燂紝鍏朵换鍔¤皟搴︽満鍒跺熼壌浜嗗疄鏃舵搷浣滅郴缁熺殑鏍稿績鎬濇兂锛屼絾鍙堝湪鏄撶敤鎬т笂鍋氫簡澶ч噺灏佽锛屼娇鍏跺宸ヤ笟鑷姩鍖栧伐绋嬪笀鏇翠负鍙嬪ソ銆
    浠诲姟锛圱ask锛 鍦–ODESYS涓紝鍙互鐞嗚В涓轰竴涓嫭绔嬫墽琛岀殑绾跨▼锛屽畠鎸夌収棰勮鐨勮鍒欙紙鍛ㄦ湡銆佷簨浠惰Е鍙戠瓑锛夐噸澶嶆墽琛屽叾涓垎閰嶇殑绋嬪簭缁勭粐鍗曞厓锛圥OU锛夈備竴涓簲鐢ㄧ▼搴忥紙Application锛変笅鍙互閰嶇疆澶氫釜浠诲姟锛屽畠浠叡浜簲鐢ㄧ▼搴忕殑鍏ㄥ眬鏁版嵁鍖猴紝杩欐槸澶氫换鍔$紪绋嬩腑闇瑕佺壒鍒敞鎰忕殑涓鐐广
    娉ㄦ剰锛欳ODESYS鐨勪换鍔¤皟搴︽槸鎶㈠崰寮鐨勩傝繖鎰忓懗鐫楂樹紭鍏堢骇浠诲姟涓鏃﹀氨缁紝鍙互绔嬪嵆涓柇姝e湪杩愯鐨勪綆浼樺厛绾т换鍔°傝繖绉嶆満鍒朵繚璇佷簡鍏抽敭浠诲姟鐨勫疄鏃跺搷搴旓紝浣嗕篃寮曞叆浜嗘暟鎹闂悓姝ョ殑鎸戞垬銆
    浠诲姟鐨勫嚑涓牳蹇冨睘鎬у喅瀹氫簡瀹冪殑琛屼负锛
      浼樺厛绾э紙Priority锛锛氭暟鍊艰秺灏忥紝浼樺厛绾ц秺楂樸傝繖鏄皟搴﹀櫒鍐冲畾杩愯椤哄簭鐨勯瑕佷緷鎹绫诲瀷锛圱ype锛锛氬畾涔変簡浠诲姟鐨勮Е鍙戝拰鎵ц鏂瑰紡锛屾槸鏈枃鎺㈣鐨勯噸鐐广闂撮殧锛圛nterval锛锛氬浜庡懆鏈熸т换鍔★紝瀹氫箟浜嗕袱娆℃墽琛屽紑濮嬩箣闂寸殑鏃堕棿闂撮殧銆鐪嬮棬鐙楁椂闂达紙Watchdog锛锛氬彲閫夐厤缃紝鐢ㄤ簬鐩戞帶浠诲姟鏄惁鍦ㄨ瀹氭椂闂村唴瀹屾垚锛岄槻姝㈢▼搴忔閿佸鑷翠换鍔♀滃崱姝烩濄
    涓涓父瑙佺殑璇В鏄涓轰换鍔″懆鏈熻秺鐭紝绯荤粺鎬ц兘瓒婂ソ銆傚疄闄呬笂锛屼笉鍚堢悊鐨勪换鍔¢厤缃槸绯荤粺鎶栧姩銆佸懆鏈熻秴鏃剁敋鑷虫暟鎹笉涓鑷寸殑缃瓉绁搁銆傜悊瑙d笅闈㈣繖涓畝鍗曠殑鎬ц兘鍏崇郴妯″瀷鑷冲叧閲嶈锛
    1. 绯荤粺璐熻浇 鈮 危(姣忎釜浠诲姟鐨勬墽琛屾椂闂 / 浠诲姟鍛ㄦ湡)
    澶嶅埗浠g爜
    褰撶郴缁熻礋杞芥帴杩戞垨瓒呰繃1鏃讹紝鎰忓懗鐫CPU鏃堕棿宸茶瀹屽叏鍗犵敤锛屼换浣曢澶栫殑娉㈠姩閮藉彲鑳藉鑷翠换鍔℃棤娉曟寜鏃跺畬鎴愶紝瀹炴椂鎬т抚澶便
    2. 浜斿ぇ浠诲姟绫诲瀷娣卞害鍓栨瀽涓庡疄鎴橀夊瀷

    CODESYS涓昏鎻愪緵浜嗕簲绉嶄换鍔$被鍨嬶紝姣忕閮芥湁鍏剁嫭鐗圭殑鈥滄ф牸鈥濆拰閫傜敤鍦烘櫙銆傞夋嫨閿欒鐨勪换鍔$被鍨嬶紝灏卞儚缁欑煭璺戣繍鍔ㄥ憳瀹夋帓椹媺鏉捐缁冭鍒掞紝缁撴灉寰寰浜嬪嶅姛鍗娿
    2.1 寰幆浠诲姟锛圕yclic锛夛細瀹炴椂鎺у埗鐨勮剨姊

    寰幆浠诲姟鏄伐涓氭帶鍒朵腑鏈甯哥敤銆佷篃鏈鏍稿績鐨勪换鍔$被鍨嬨傚畠鍍忎竴棰楃簿鍑嗙殑蹇冭剰锛屼互鍥哄畾鐨勯鐜囪烦鍔紝椹卞姩鐫鎺у埗閫昏緫鐨勫懆鏈熸ф墽琛屻
    宸ヤ綔鍘熺悊锛氳皟搴﹀櫒浼氫弗鏍兼寜鐓ц瀹氱殑鈥滈棿闅斺濓紙濡1ms, 4ms锛夋潵瑙﹀彂浠诲姟銆備换鍔℃墽琛屽畬姣曞悗锛屼細绛夊緟鐩村埌涓嬩竴涓懆鏈熻捣鐐瑰啀娆¤Е鍙戙傚鏋滀换鍔℃墽琛屾椂闂磋秴杩囦簡鍛ㄦ湡锛屽氨浼氬彂鐢鍛ㄦ湡瓒呮椂锛圕ycle Overrun锛
    鍏抽敭閰嶇疆鍙傛暟
    鍙傛暟璇存槑鍏稿瀷璁剧疆
    闂撮殧浠诲姟鎵ц鍛ㄦ湡楂橀烮O/杩愬姩鎺у埗锛1-4ms锛 甯歌閫昏緫锛10-100ms锛 鎱㈤熻繃绋嬶細200-1000ms
    浼樺厛绾閫氬父璁句负杈冮珮鎬荤嚎閫氫俊銆佽繍鍔ㄦ帶鍒剁瓑瀹炴椂鎬ц姹傞珮鐨勪换鍔¤涓洪珮浼樺厛绾э紙鏁板煎皬锛
    鐩镐綅鍋忕Щ澶氫釜鍚屽懆鏈熶换鍔$殑鍚姩鏃堕棿鍋忕Щ鐢ㄤ簬閿欏紑澶氫釜浠诲姟鐨勬墽琛屽嘲鍊硷紝鍧囪 CPU璐熻浇
    瀹炴垬鍦烘櫙涓庨厤缃妧宸

    • EtherCAT/CANopen涓荤珯閫氫俊浠诲姟锛氳繖鏄惊鐜换鍔$殑鍏稿瀷楂樼搴旂敤銆侲therCAT鎬荤嚎瑕佹眰涓ユ牸鐨勬椂闂村悓姝ワ紝鍏堕氫俊浠诲姟锛堥氬父鐢辫澶囨弿杩版枃浠惰嚜鍔ㄧ敓鎴愶級蹇呴』璁剧疆涓烘渶楂樹紭鍏堢骇涔嬩竴锛屼笖鍛ㄦ湡闇涓庝粠绔欒澶囷紙濡備己鏈嶉┍鍔ㄥ櫒锛夌殑鍛ㄦ湡鍖归厤銆備緥濡傦紝浼烘湇鍛ㄦ湡涓1ms锛屽垯EtherCAT浠诲姟鍛ㄦ湡涔熷簲璁句负1ms銆
      1. // 鍦‥therCAT涓荤珯閰嶇疆涓紝閫氫俊鍛ㄦ湡鏄‖鎬ц姹
      2. // 閿欒閰嶇疆灏嗙洿鎺ュ鑷存荤嚎鎶ラ敊鎴栨ц兘涓嬮檷
      澶嶅埗浠g爜
      PID鎺у埗鍥炶矾锛歅ID绠楁硶闇瑕佺ǔ瀹氱殑閲囨牱鍛ㄦ湡銆傚皢涓涓狿ID鍔熻兘鍧楁斁鍦ㄤ竴涓嫭绔嬬殑銆佸懆鏈熺ǔ瀹氱殑寰幆浠诲姟涓紝鑳借幏寰楁渶浣崇殑鎺у埗鏁堟灉銆傞伩鍏嶅皢PID鏀惧湪鎵ц鏃堕棿涓嶅浐瀹氱殑浠诲姟涓
      澶氬惊鐜换鍔¤礋杞藉潎琛锛氬亣璁句綘鏈変笁涓换鍔★細1ms鐨勮繍鍔ㄨ鍒掋4ms鐨凱ID璁$畻銆10ms鐨勯昏緫澶勭悊銆備笉瑕侀兘浠庢椂闂撮浂鐐瑰紑濮嬨傚彲浠ヤ负4ms鍜10ms浠诲姟璁剧疆鐩镐綅鍋忕Щ锛岄伩鍏嶅湪鐗瑰畾鏃跺埢鎵鏈変换鍔″悓鏃惰Е鍙戯紝瀵艰嚧CPU浣跨敤鐜囧嚭鐜板皷宄般
      鎻愮ず锛氬湪CODESYS浠诲姟閰嶇疆鐨勨滈檮鍔犺缃濅腑锛屽彲浠ユ壘鍒扳滅浉浣嶅亸绉伙紙Phase shift锛夆濆弬鏁帮紝鍗曚綅涓虹撼绉掓垨寰銆

    2.2 鎯ф粦琛屼换鍔★紙Freewheeling锛夛細鍚庡彴澶勭悊鐨勨滆侀粍鐗涒

    濡傛灉璇村惊鐜换鍔℃槸绾緥涓ユ槑鐨勫+鍏碉紝閭d箞鎯ф粦琛屼换鍔″氨鏄粯榛樿曡樼殑鍚庡嫟浜哄憳銆傚畠涓鏃﹀惎鍔紝渚垮懆鑰屽濮嬪湴鎵ц锛屾墽琛屽畬涓娆″惊鐜悗绔嬪埢寮濮嬩笅涓娆★紝涓棿娌℃湁鍥哄畾鐨勪紤鎭棿闅斻
    鏍稿績鐗圭偣鏃犲浐瀹氬懆鏈銆傚畠鐨勬墽琛岄棿闅斿畬鍏ㄥ彇鍐充簬鍏跺唴閮ㄧ▼搴忚繍琛屼竴娆℃墍闇鐨勬椂闂淬傚洜姝わ紝鍏跺疄闄呮墽琛岄鐜囨槸鍔ㄦ佸彉鍖栫殑銆
    閫傜敤鍦烘櫙
      闈炲疄鏃舵у悗鍙颁綔涓锛氬鍘嗗彶鏁版嵁璁板綍銆佸ぇ鎵归噺鏂囦欢璇诲啓銆佷笌涓婁綅鏈猴紙濡侻ES/SCADA锛夌殑闈炲疄鏃堕氫俊銆佸鏉傛姤琛ㄧ敓鎴愮瓑銆鑰楁椂闀跨殑璁$畻锛氫緥濡傚浘鍍忓鐞嗙粨鏋滅殑浜屾鍒嗘瀽銆佸ぇ鏁版嵁鍖呯殑瑙g爜绛夛紝杩欎簺鎿嶄綔涓嶉傚悎鏀惧湪瀵规椂闂存晱鎰熺殑寰幆浠诲姟涓浣庝紭鍏堢骇鐩戞帶锛氳澶囧仴搴风姸鎬佺洃娴嬨佹棩蹇楄疆杞瓑銆
    閰嶇疆闄烽槺
      缁濆绂佹鐢ㄤ簬鎬荤嚎閫氫俊锛氬EtherCAT銆丳ROFINET绛夊疄鏃舵荤嚎锛屽繀椤荤敱鍥哄畾鍛ㄦ湡鐨勫惊鐜换鍔¢┍鍔ㄣ備娇鐢ㄦ儻鎬ф粦琛屼换鍔′細瀵艰嚧鎬荤嚎閫氫俊鍛ㄦ湡娣蜂贡锛屽繀鐒跺け璐ャ
    • 娉ㄦ剰CPU鍗犵敤鐜锛氬鏋滀竴涓儻鎬ф粦琛屼换鍔′腑鐨勭▼搴忔墽琛屾椂闂村緢鐭紝瀹冧細浠ユ瀬楂樼殑棰戠巼锛堝嚑涔100% CPU锛夎繍琛岋紝鍙兘鈥滈タ姝烩濆叾浠栦綆浼樺厛绾т换鍔°傞氬父闇瑕佸湪鍏跺惊鐜唴涓诲姩娣诲姞寰皬寤舵椂銆
      1. // 鍦ㄦ儻鎬ф粦琛屼换鍔$殑绋嬪簭鏈熬锛屽彲浠ユ坊鍔犱竴涓潪闃诲鐨勫皬寤舵椂
      2. // 杩欒兘涓诲姩璁╁嚭CPU鏃堕棿鐗囷紝閬垮厤鐙崰璧勬簮
      3. // 渚嬪锛氱瓑寰1姣锛堝叿浣撳嚱鏁板彇鍐充簬鎺у埗鍣ㄥ簱锛
      4. SysDelay(T#1ms);
      澶嶅埗浠g爜
      浼樺厛绾ц缃锛氬姟蹇呭皢鍏惰缃负鏈浣庝紭鍏堢骇锛堟暟鍊煎ぇ锛夛紝纭繚瀹冧笉浼氬共鎵板疄鏃朵换鍔°
    2.3 浜嬩欢浠诲姟锛圗vent锛変笌鐘舵佷换鍔★紙Status锛夛細鐢卞彉閲忛┍鍔ㄧ殑鎵ц

    杩欎袱绉嶄换鍔$被鍨嬮兘鏄敱甯冨皵锛圔OOL锛夊彉閲忕殑鍙樺寲鏉ヨЕ鍙戠殑锛屼絾瑙﹀彂閫昏緫鏈夋湰璐ㄥ尯鍒紝娣锋穯瀹冧滑浼氬鑷寸▼搴忚涓鸿寮傘
    浜嬩欢浠诲姟锛圗vent锛
      瑙﹀彂鏉′欢锛氬叧鑱旂殑鍏ㄥ眬BOOL鍙橀噺鍙戠敓涓婂崌娌锛堜粠FALSE鍙樹负TRUE锛夋椂锛屼换鍔鎵ц涓娆琛屼负锛氳竟娌胯Е鍙戯紝鍗曟鎵ц銆傜被浼间簬纭欢涓殑鈥滀笂鍗囨部涓柇鈥濄
    • 搴旂敤锛氬搷搴旈潪鍛ㄦ湡鎬х殑銆佸伓鍙戠殑浣嗛渶瑕佸強鏃跺鐞嗙殑鍔ㄤ綔銆備緥濡傦細
        鍝嶅簲涓涓潵鑷狧MI鐨勨滄墜鍔ㄥ惎鍔ㄢ濇寜閽俊鍙枫傛帴鏀跺埌涓涓潵鑷覆鍙i氫俊鐨勫畬鏁存暟鎹寘鏍囧織銆傚鐞嗕竴涓敱浼犳劅鍣ㄤ骇鐢熺殑鎶ヨ瑙﹀彂淇″彿銆

    鐘舵佷换鍔★紙Status锛
      瑙﹀彂鏉′欢锛氬叧鑱旂殑鍏ㄥ眬BOOL鍙橀噺涓TRUE鏃讹紝浠诲姟寰幆鎵ц锛涘彉閲忓彉涓篎ALSE鏃讹紝浠诲姟鍋滄銆琛屼负锛氱數骞宠Е鍙戯紝杩炵画鎵ц銆傚彧瑕佹潯浠朵负鐪燂紝灏辩被浼间簬涓涓儻鎬ф粦琛屼换鍔″湪杩愯銆
    • 搴旂敤锛氶渶瑕佸湪涓娈垫寔缁姸鎬佷笅杩愯鐨勫悗鍙板鐞嗐備緥濡傦細
        褰撯滄暟鎹褰曚娇鑳解濅俊鍙蜂负鐪熸椂锛屾寔缁皢杩囩▼鍙橀噺鍐欏叆鏁版嵁搴撱傚綋鈥滆皟璇曟ā寮忊濇縺娲绘椂锛屾寔缁悜璋冭瘯绔彛鍙戦佸唴閮ㄥ彉閲忓笺

    瀵规瘮琛ㄦ牸
    鐗规浜嬩欢浠诲姟 (Event)鐘舵佷换鍔 (Status)
    瑙﹀彂鏂瑰紡涓婂崌娌鐢靛钩锛圱RUE锛
    鎵ц妯″紡鍗曟杩炵画寰幆
    绫绘瘮鎸夐挳鐐瑰姩锛堟寜涓涓嬶紝鍔ㄤ竴涓嬶級寮鍏筹紙鎵撳紑鍒欐寔缁繍琛岋級
    鍏稿瀷鐢ㄩ鍝嶅簲鐬椂鍛戒护銆佸鐞嗕腑鏂簨浠浣胯兘涓娈甸暱鏃堕棿杩愯鐨勫姛鑳
    閲嶈娉ㄦ剰浜嬮」锛氬彉閲忕殑鍙樺寲棰戠巼蹇呴』涓庝换鍔¤璋冨害鐨勬満浼氱浉鍖归厤銆傚鏋滀簨浠朵换鍔″叧鑱旂殑鍙橀噺蹇熻繛缁骇鐢熷涓笂鍗囨部锛岃屼换鍔℃湰韬墽琛屾椂闂磋緝闀匡紝鍒欏彲鑳戒細涓㈠け涓棿鐨勪簨浠躲傜姸鎬佷换鍔″垯鍦ㄥ彉閲忎负TRUE鏈熼棿浼氭寔缁崰鐢–PU銆
    2.4 澶栭儴浜嬩欢浠诲姟锛圗xternal锛夛細涓庣‖浠朵腑鏂殑妗ユ

    杩欐槸鏈鎺ヨ繎纭欢搴曞眰鐨勪竴绉嶄换鍔$被鍨嬶紝鍏惰Е鍙戞簮涓嶆槸鍐呴儴鐨凱LC鍙橀噺锛岃屾槸鐢鎺у埗鍣ㄧ‖浠舵垨搴曞眰椹卞姩鐩存帴鎻愪緵鐨勫閮ㄤ簨浠躲
    宸ヤ綔鍘熺悊锛氬綋鐗瑰畾鐨勭‖浠朵簨浠讹紙濡傛暟瀛楅噺杈撳叆閫氶亾鐨勪笂鍗囨部銆侀珮閫熻鏁板櫒婧㈠嚭銆佸畾鏃跺櫒涓柇绛夛級鍙戠敓鏃讹紝纭欢浜х敓涓柇淇″彿锛孋ODESYS Runtime鎺ユ敹鍒版淇″彿鍚庯紝绔嬪嵆璋冨害鎵ц鍏宠仈鐨勫閮ㄤ簨浠朵换鍔°
    鍏抽敭鐗圭偣
      鏋侀珮鐨勫疄鏃舵锛氬搷搴斿欢杩熸瀬鐭紝閫氬父涓哄井绉掔骇锛岃繙蹇簬閫氳繃寰幆浠诲姟鎵弿杈撳叆鐐圭殑鏂瑰紡銆纭欢鐩稿叧锛氭敮鎸佺殑浜嬩欢鍒楄〃瀹屽叏鍙栧喅浜庝綘鎵浣跨敤鐨鍏蜂綋鎺у埗鍣ㄥ瀷鍙鍙婂叾I/O妯″潡銆傚苟闈炴墍鏈夋帶鍒跺櫒閮芥敮鎸佹鍔熻兘銆閰嶇疆鐗规畩锛氬湪浠诲姟閰嶇疆鐨勨滀簨浠垛濇爮涓紝浣犻渶瑕佷粠鎺у埗鍣ㄦ彁渚涚殑涓嬫媺鍒楄〃涓夋嫨鍏蜂綋鐨勪簨浠讹紙濡 DI0.RisingEdge锛夈
    瀹炴垬搴旂敤
      楂橀熻鏁颁笌娴嬮噺锛氱敤浜庡鐞嗙紪鐮佸櫒鑴夊啿锛岃繘琛岀簿纭殑浣嶇疆鎹曡幏鎴栭熷害娴嬮噺銆蹇熷搷搴斿畨鍏ㄤ俊鍙锛氫緥濡傛ュ仠鎸夐挳銆佸畨鍏ㄥ厜骞曪紝闇瑕佺撼绉掔骇鍝嶅簲銆绮惧噯鏃堕棿鎴锛氫负鏌愪簺浜嬩欢鎵撲笂绮剧‘鍒板井绉掔殑纭欢鏃堕棿鎴炽
    閰嶇疆绀轰緥锛堜吉浠g爜锛屽疄闄呭彇鍐充簬纭欢锛
    1. // 鍋囪鎺у埗鍣ㄦ敮鎸佸皢纭欢杈撳叆鐐笵I0鐨勪笂鍗囨部閰嶇疆涓哄閮ㄤ簨浠
    2. // 鍦ㄤ换鍔¢厤缃腑锛孍vent閫夋嫨 鈥淗W_IRQ_DI0_Rising鈥
    3. // 璇ヤ换鍔′腑鐨勭▼搴忓皢鍦―I0涓婂崌娌垮嚭鐜版椂绔嬪嵆琚墽琛屼竴娆
    4. // 姝や换鍔″唴閫氬父鍙仛鏈绮剧畝鐨勫鐞嗭紝濡傜疆浣嶄竴涓爣蹇椾綅鎴栬褰曟椂闂存埑
    5. IF bExternalEventTriggered THEN
    6.     liCaptureTime := GET_CURRENT_NANOTIME(); // 鑾峰彇楂樼簿搴︽椂闂
    7.     bProcessData := TRUE; // 閫氱煡鍏朵粬浠诲姟澶勭悊
    8. END_IF
    澶嶅埗浠g爜
    璀﹀憡锛氬閮ㄤ簨浠朵换鍔″唴鐨勪唬鐮佸繀椤婚潪甯哥煭灏忕簿鎮嶏紝鎵ц鏃堕棿瑕佷弗鏍兼帶鍒躲傞暱鏃堕棿鎵ц浼氶樆濉炲叾浠栦腑鏂殑鍝嶅簲锛岀敋鑷冲奖鍝嶆暣涓郴缁熺殑瀹炴椂鎬с傚鏉傜殑澶勭悊搴旈氳繃缃綅鏍囧織锛屼氦鐢卞叾浠栧惊鐜换鍔″畬鎴愩
    3. 澶氫换鍔″崗鍚屼腑鐨勭粡鍏搁櫡闃变笌闃插尽涔嬮亾

    褰撶郴缁熶腑瀛樺湪澶氫釜浠诲姟鏃讹紝瀹冧滑涔嬮棿鐨勪氦浜掑氨鍙樻垚浜嗕竴涓渶瑕佺簿蹇冭璁$殑鑸炶箞銆傝俯閿欒妭鎷嶏紝绯荤粺灏变細鈥滄憯鍊掆濄
    3.1 鏁版嵁鍏变韩涓庡悓姝ラ棶棰

    杩欐槸澶氫换鍔$紪绋嬩腑鏈甯歌銆佹渶闅愯斀鐨勯棶棰樸傜敱浜庢墍鏈変换鍔″叡浜簲鐢ㄧ▼搴忕殑鍏ㄥ眬鍙橀噺锛屽綋澶氫釜浠诲姟锛堝挨鍏舵槸浼樺厛绾т笉鍚岀殑浠诲姟锛夎鍐欏悓涓涓彉閲忔椂锛屼細鍙戠敓绔炴佹潯浠讹紙Race Condition锛
    闂鍐嶇幇锛氬亣璁炬湁涓涓32浣嶆暣鏁 giCounter 鍦ㄤ綆浼樺厛绾т换鍔涓疮鍔狅紝鍚屾椂鍦ㄩ珮浼樺厛绾т换鍔涓璇诲彇銆
      浠诲姟A鎵ц giCounter := giCounter + 1;銆傝繖鏉¤鍙ュ湪鏈哄櫒鎸囦护灞傞潰鍙兘涓嶆槸鍘熷瓙鐨勩傚綋浠诲姟A鍒氭妸 giCounter 鐨勫硷紙鍋囪鏄100锛変粠鍐呭瓨鍔犺浇鍒板瘎瀛樺櫒锛岃繕娌℃潵寰楀強鍔1鍐欏洖鏃讹紝浠诲姟B琚姠鍗犺Е鍙戙備换鍔璇诲彇 giCounter锛屽緱鍒扮殑鍊间粛鐒舵槸100銆備换鍔鎵ц瀹屾瘯锛屼换鍔鎭㈠锛屽畬鎴愬姞1鎿嶄綔骞跺皢101鍐欏洖 giCounter銆傜粨鏋滐細浠诲姟B鍩轰簬涓涓滆繃鏈熲濈殑鏁版嵁锛100锛夎繘琛屼簡澶勭悊锛岃屽畠鏈簲澶勭悊101銆
    瑙e喅鏂规锛欳ODESYS鎻愪緵浜嗗绉嶅悓姝ユ満鍒讹紝瀵逛簬PLC绋嬪簭鍛樻潵璇达紝鏈瀹炵敤鐨勬槸浠ヤ笅涓ょ锛

    • 浣跨敤 ATOMIC 鍏抽敭瀛锛氳繖鏄渶绠鍗曠殑鏂规硶锛岀敤浜庝繚鎶ゅ崟鏉¤鍙ョ殑鍘熷瓙鎬с
      1. // 浣跨敤ATOMIC纭繚璇-鏀-鍐欐搷浣滅殑瀹屾暣鎬
      2. ATOMIC
      3.     giCounter := giCounter + 1;
      4. END_ATOMIC
      澶嶅埗浠g爜
      浣 ATOMIC 鍙兘淇濇姢涓鏉¤鍙ワ紝瀵逛簬闇瑕佷繚鎶ょ殑澶氳浠g爜娈垫棤鏁堛
    • 浣跨敤淇″彿閲忥紙Semaphore锛锛氳繖鏄繚鎶や复鐣屽尯锛堜竴娈典唬鐮侊級鐨勬爣鍑嗘柟娉曘侰ODESYS鍦 SysSem 搴撲腑鎻愪緵浜嗕俊鍙烽噺鍔熻兘銆
      1. // 绋嬪簭澹版槑閮ㄥ垎
      2. VAR
      3.     semMyData: SYS_SEM;
      4.     stSharedData: ST_MyData;
      5. END_VAR
      6. // 浠诲姟A锛堝啓鍏ユ暟鎹級
      7. SysSemEnter(semMyData); // 鑾峰彇淇″彿閲忥紙濡傛灉宸茶鍗犵敤鍒欑瓑寰咃級
      8. // 涓寸晫鍖哄紑濮嬶細瀹夊叏鍦颁慨鏀 stSharedData
      9. stSharedData.Value1 := ...;
      10. stSharedData.Value2 := ...;
      11. SysSemLeave(semMyData); // 閲婃斁淇″彿閲
      12. // 浠诲姟B锛堣鍙栨暟鎹級
      13. SysSemEnter(semMyData); // 鑾峰彇淇″彿閲
      14. // 涓寸晫鍖哄紑濮嬶細瀹夊叏鍦拌鍙 stSharedData
      15. liTemp := stSharedData.Value1;
      16. SysSemLeave(semMyData); // 閲婃斁淇″彿閲
      澶嶅埗浠g爜
      娉ㄦ剰锛氫娇鐢ㄤ俊鍙烽噺瑕佸皬蹇姝婚攣銆傜‘淇濆湪鑾峰彇淇″彿閲忓悗锛屼换浣曟儏鍐典笅锛堝寘鎷彂鐢熼敊璇椂锛夐兘鑳介噴鏀惧畠銆

    3.2 浼樺厛绾у弽杞笌姝婚攣

      浼樺厛绾у弽杞锛氬綋涓涓綆浼樺厛绾т换鍔℃寔鏈変簡楂樹紭鍏堢骇浠诲姟鎵闇鐨勮祫婧愶紙濡備俊鍙烽噺锛夋椂锛屼腑浼樺厛绾х殑浠诲姟鍙兘鎶㈠崰浣庝紭鍏堢骇浠诲姟锛屽鑷撮珮浼樺厛绾т换鍔¢棿鎺ュ湴琚腑浼樺厛绾т换鍔¢樆濉炪傝В鍐虫柟妗堟槸浣跨敤鈥滀紭鍏堢骇缁ф壙鈥濇垨鈥滀紭鍏堢骇澶╄姳鏉库濆崗璁紝浣咰ODESYS鏍囧噯浠诲姟璋冨害鏈韩涓嶈嚜鍔ㄥ鐞嗘闂锛岄渶瑕佸紑鍙戣呴氳繃璋ㄦ厧璁捐浠诲姟浼樺厛绾у拰璧勬簮鎸佹湁鏃堕棿鏉ヨ閬裤
    • 姝婚攣锛氫袱涓垨鏇村浠诲姟浜掔浉绛夊緟瀵规柟鎸佹湁鐨勮祫婧愶紝瀵艰嚧鎵鏈夌浉鍏充换鍔℃案涔呮寕璧枫傞伩鍏嶆閿佺殑榛勯噾娉曞垯锛
        浠ュ浐瀹氱殑鍏ㄥ眬椤哄簭鑾峰彇澶氫釜閿侊紙淇″彿閲忥級銆傚敖閲忕缉鐭寔鏈夐攣鐨勬椂闂淬傝冭檻浣跨敤甯﹁秴鏃剁殑閿佽幏鍙栧嚱鏁帮紙濡 SysSemEnterWithTimeout锛夈

    3.3 鍛ㄦ湡瓒呮椂涓庢姈鍔ㄥ垎鏋

    寰幆浠诲姟鏈鎬曠殑灏辨槸鈥滆秴鏃垛濄傚湪CODESYS寮鍙戠幆澧冧腑锛屾垜浠彲浠ラ氳繃鍦ㄧ嚎鐩戞帶鈥滀换鍔¢厤缃濊鍥撅紝鑾峰彇鍏抽敭鐨勬ц兘鎸囨爣锛
      骞冲潎鍛ㄦ湡鏃堕棿锛氫换鍔″疄闄呮墽琛岀殑骞冲潎鑰楁椂銆鏈澶у懆鏈熸椂闂锛氫换鍔℃墽琛岃楁椂鐨勫巻鍙叉渶澶у笺鎶栧姩锛氬懆鏈熸椂闂寸殑娉㈠姩鑼冨洿銆
    缁忛獙娉曞垯
      瀵逛簬鏈変弗鏍煎疄鏃惰姹傜殑浠诲姟锛堝杩愬姩鎺у埗锛夛紝骞冲潎鍛ㄦ湡鏃堕棿鏈澶у懆鏈熸椂闂閮藉繀椤诲皬浜庝换鍔¤瀹氱殑闂撮殧銆傞氬父寤鸿锛屽疄鏃朵换鍔$殑CPU鍗犵敤鐜囷紙骞冲潎鍛ㄦ湡鏃堕棿/闂撮殧锛変笉瑕佽秴杩70%銆備緥濡傦紝涓涓1ms鍛ㄦ湡鐨勪换鍔★紝鍏跺钩鍧囨墽琛屾椂闂存渶濂芥帶鍒跺湪0.7ms浠ュ唴锛屼负绯荤粺鎶栧姩鍜岀獊鍙戝鐞嗙暀鍑轰綑閲忋
    • 濡傛灉鍙戠幇鎶栧姩寰堝ぇ锛岄渶瑕佹鏌ワ細
        鏄惁鏈夋洿浣庝紭鍏堢骇鐨勪换鍔℃墽琛屾椂闂磋繃闀匡紵鏄惁鍦ㄤ换鍔′腑璋冪敤浜嗕笉纭畾鑰楁椂鐨勫嚱鏁帮紙濡傛煇浜涙枃浠舵搷浣溿佺綉缁滈氫俊锛夛紵鏄惁鍙戠敓浜嗗ぇ閲忕殑涓柇锛堝閮ㄤ簨浠讹級锛

    4. 楂樼骇瀹炴垬锛氭瀯寤轰竴涓浠诲姟鎺у埗绯荤粺鏍锋澘

    璁╂垜浠患鍚堣繍鐢ㄤ互涓婄煡璇嗭紝璁捐涓涓吀鍨嬬殑鏈哄櫒鎺у埗绯荤粺浠诲姟鏋舵瀯銆傝绯荤粺鍖呭惈楂橀烢therCAT杩愬姩鎺у埗銆佹ā鎷熼噺PID璋冭妭銆佽澶囬昏緫浠ュ強鏁版嵁璁板綍鍔熻兘銆
    绯荤粺闇姹
      1ms鍛ㄦ湡锛欵therCAT鎬荤嚎閫氫俊鍜屾牳蹇冭繍鍔ㄦ帶鍒剁畻娉曘4ms鍛ㄦ湡锛2涓狿ID娓╁害鎺у埗鍥炶矾銆10ms鍛ㄦ湡锛氫富璁惧閫昏緫锛堥『搴忔帶鍒躲佹姤璀﹀鐞嗙瓑锛夈傚悗鍙帮細闈炲疄鏃舵暟鎹褰曪紙姣100ms璁板綍涓娆″叧閿暟鎹埌鏂囦欢锛夈
    浠诲姟閰嶇疆鏂规
      浠诲姟1锛欵therCAT_Motion (寰幆浠诲姟)
        绫诲瀷锛欳yclic闂撮殧锛1 ms浼樺厛绾锛1 (鏈楂)绋嬪簭璋冪敤锛歁AIN_EtherCAT (澶勭悊鎬荤嚎鏁版嵁浜ゆ崲)锛 MAIN_MotionPlanner (璁$畻杞ㄨ抗)璇存槑锛氭渶楂樹紭鍏堢骇锛岀‘淇濇荤嚎閫氫俊鍜岃繍鍔ㄦ帶鍒剁殑缁濆瀹炴椂鎬с傜浉浣嶅亸绉昏涓0銆
      浠诲姟2锛歅ID_Control (寰幆浠诲姟)
        绫诲瀷锛欳yclic闂撮殧锛4 ms浼樺厛绾锛3鐩镐綅鍋忕Щ锛1 ms (鐩稿浜庝换鍔1閿欏紑1ms鍚姩)绋嬪簭璋冪敤锛歁AIN_PID (鍖呭惈涓や釜PID鍔熻兘鍧楃殑璋冪敤)璇存槑锛氫腑绛変紭鍏堢骇锛岀ǔ瀹氱殑4ms鍛ㄦ湡婊¤冻澶у鏁拌繃绋嬫帶鍒堕渶姹傘傜浉浣嶅亸绉婚伩鍏嶄笌1ms浠诲姟鍚屾椂瑙﹀彂銆
      浠诲姟3锛歁ainLogic (寰幆浠诲姟)
        绫诲瀷锛欳yclic闂撮殧锛10 ms浼樺厛绾锛5鐩镐綅鍋忕Щ锛2 ms绋嬪簭璋冪敤锛歁AIN_Logic锛 MAIN_Alarm璇存槑锛氬鐞嗕富瑕佺殑椤哄簭鎺у埗鍜屾姤璀﹂昏緫銆備紭鍏堢骇杈冧綆锛岀浉浣嶅亸绉昏繘涓姝ュ潎琛¤礋杞姐
      浠诲姟4锛欴ataLogger (鎯ф粦琛屼换鍔)
        绫诲瀷锛欶reewheeling浼樺厛绾锛15 (鏈浣)绋嬪簭璋冪敤锛歁AIN_DataLogger璇存槑锛氬湪MAIN_DataLogger涓紝浣跨敤涓涓畾鏃跺櫒鏉ュ疄鐜版瘡100ms璁板綍涓娆℃暟鎹紝鍏朵粬鏃堕棿璋冪敤 SysDelay 涓诲姩璁╁嚭CPU銆
      1. // MAIN_DataLogger 绀轰緥鐗囨
      2. VAR
      3.     tonLogTimer: TON;
      4.     bLogEnable: BOOL;
      5. END_VAR
      6. tonLogTimer(IN:=bLogEnable, PT:=T#100ms);
      7. IF tonLogTimer.Q THEN
      8.     // 鎵ц鏁版嵁璁板綍鍒版枃浠剁殑鎿嶄綔
      9.     WriteDataToCSV();
      10.     tonLogTimer(IN:=FALSE); // 澶嶄綅瀹氭椂鍣紝閲嶆柊寮濮嬭鏃
      11. END_IF;
      12. // 姣忔寰幆鏈熬娣诲姞涓涓皬寤舵椂锛岄伩鍏岰PU鍗犵敤鐜100%
      13. SysDelay(T#1ms);
      澶嶅埗浠g爜
    鏁版嵁浜や簰璁捐
      杩愬姩璁惧畾鍊间粠MainLogic浠诲姟璁$畻锛岄氳繃涓涓琚俊鍙烽噺淇濇姢鐨勫叏灞缁撴瀯浣浼犻掔粰EtherCAT_Motion浠诲姟銆侾ID鐨勮瀹氬煎拰杩囩▼鍙橀噺鍙兘鏉ヨ嚜MainLogic鎴栫洿鎺ユ潵鑷狪O鏄犲皠锛堝湪EtherCAT浠诲姟涓洿鏂帮級銆傜敱浜嶱ID鍦ㄧ嫭绔嬩换鍔′腑璁$畻锛屽叾杈撳嚭锛堝闃闂ㄥ紑搴︼級涔熼渶瑕侀氳繃淇″彿閲鍘熷瓙鎿嶄綔鍐欏洖缁橧O鏄犲皠浠诲姟鎴栭昏緫浠诲姟浣跨敤銆侱ataLogger浠诲姟闇瑕佽鍙栧悇绉嶆暟鎹傚畠閫氳繃涓涓澶嶅埗鏈哄埗鏉ユ搷浣滐細鍦ㄤ綆浼樺厛绾ч昏緫浠诲姟鐨勬煇涓畨鍏ㄧ偣锛堝鍛ㄦ湡寮濮嬶級锛屽皢瑕佽褰曠殑鏁版嵁蹇熷鍒跺埌涓涓笓鐢ㄤ簬璁板綍鐨勫壇鏈粨鏋勪綋涓侱ataLogger浠诲姟鍙鍙栬繖涓壇鏈紝浠庤屽畬鍏ㄩ伩鍏嶉攣绔炰簤銆
    閫氳繃杩欐牱鐨勬灦鏋勶紝鎴戜滑瀹炵幇浜嗗疄鏃舵т笌闈炲疄鏃舵т换鍔$殑闅旂锛岄氳繃浼樺厛绾с佺浉浣嶅亸绉诲拰鍚屾鏈哄埗锛岀‘淇濅簡绯荤粺鐨勭‘瀹氭с侀珮鍝嶅簲鍜岀ǔ瀹氭с傚湪瀹為檯椤圭洰涓紝浣犻渶瑕佸埄鐢–ODESYS鐨勫湪绾跨洃鎺у伐鍏锋寔缁瀵熷悇浠诲姟鐨勫懆鏈熸椂闂村拰鎶栧姩锛屽苟鎹杩涜寰皟銆傝浣忥紝娌℃湁涓鎴愪笉鍙樼殑鏈浣抽厤缃紝鍙湁鏈閫傚悎褰撳墠纭欢璐熻浇鍜岃蒋浠堕渶姹傜殑骞宠 鏂规銆
    +10
    涓嶈禐涓涓紵
    鎵撹祻榧撳姳涓涓嬶紒
    鍥炲

    浣跨敤閬撳叿 涓炬姤

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

    鏈増绉垎瑙勫垯

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

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

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

    閰峰痉缃

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

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