h30631
級別: 略有小成
|
各位前輩好 小弟寫了一段程序如下 M8002 模擬會不會停,所以先給值 M100 準備啟動一個動作,M500 開始執行動作 M2000 需要動作的位置,M802 動作完觸發 最後是定義位置範圍 現在是因為每作完一次動作會把V0+1,如果M為0就繼續+1 M為1時停止+1並執行動作,旦是這樣感覺很沒效率 有沒有方法,直接判斷有哪些M是ON的,直接讓他丟M是ON的索引值 這樣忽略M=0 ,可以提升效率 懇請前輩們指點 |
---|---|
|
h30631
級別: 略有小成
|
我剛剛新增編碼指令進去 可惜它只能從高位開始動作,不能從低位開始 而且最後所有都變成oFF會出錯 請問各位前輩有其他方法嗎? 感謝~! |
---|---|
|
litung
臺灣-李同在
級別: VIP會員
|
ENCO不能全為OFF <會產生操作錯誤> 只要讓其中一個M值一直會ON,就可以解決了。 不知道你這個用途是要應用在那邊? 我是都拿來作異常碼的使用。 若是的話,你也可以用F來試試看。 樓主留言:感謝回覆 |
|
---|---|---|
|
h30631
級別: 略有小成
|
回樓上大哥 其實我這個動作是這樣的 M2000~M2250 其中可能有幾個M是ON的,也可能全部都是OFF的、也可能全部都是ON的 然後我需要作一個判斷,直接把有ON的抓出來,依照順序(編號小的先),讓他去觸發一個動作(另一個M) 等待那ㄧ個動作完成後,會給一個完成訊號,把此次的M復歸掉,然後繼續把下一個M2000~M2250 中有ON的丟進來 例如 : M2000 成立執行M500 ,執行完成復歸M500 復歸M2000,假設M2001為OFF M2002為ON, 他會值接抓M2002進來,再ㄧ次觸發M500,最後直到M2000~M2250都為OFF 就結束整個動作 我這個M2000~M2250 是用來代表位置的,所以必須依照大小順序來觸發M500 請問前輩有沒有好的方法來做呢? 謝謝 |
---|---|
|
john42tw
級別: 網絡英雄
|
用迴圈來做呢? 樓主留言:真誠感謝! |
---|---|
|
天空流星
SZ-CL
級別: 網絡英雄
|
還是沒明白你到想要實現的動作,到底光處理數據,還是選取動作 看下SUM這個指令對你有沒有用,配合ENCO也行 你所說的效率,其實也就PLC250個掃描周期,就是用1S也就1秒吧, 要是真的有影響,是不是考慮運算和執行同時走,第一個位置出來后,運算繼續運行把下一個的位置算出來, 或是一次性把M的地址都運算出來,就是每個M的偏移值都取出來,執行時直接使用 樓主留言:真誠感謝! |
---|---|
|
john42tw
級別: 網絡英雄
|
參考看看 M500 開始搜尋 M500 ---|^|-------------------------[MOV K0 Z0] ---[> Z0 K249]---| M500 M0Z0 ---||----------||----------------[SET M0Z0] | |-----------[RST M500] | M0Z0 |-------|/|---------------[+ Z0 K1 Z0] 樓主留言:感謝大哥分享 |
---|---|
|
天空流星
SZ-CL
級別: 網絡英雄
|
圖片:
圖片:
M0 開始運算 M1 開始執行 D100 需要執行的編號 加D2不等于0的條件 就是沒有需要執行的 樓主留言:真誠感謝! [ 此帖被king125在2013-12-19 14:06重新編輯 ] |
---|---|
|
h30631
級別: 略有小成
|
請問為什麼要從M1999和D999開始? 不是從M2000、D1000開始嗎? 您的方法是用D1000到D1250暫存器 依序把需要執行的位置放進去 完成訊號M802 把Z1位置減1 有點看不明白,煩請前輩指點 |
---|---|
|
天空流星
SZ-CL
級別: 網絡英雄
|
從M1999開始是防止有編號1的時候出錯,而且D2是需要執行的計數,數量是從1開始的,不能從0開始,所以向前移動了一位 需要執行的編號放到D1000中,放下一個需要執行的編號時先把D1000原來的數據移到D1001 ,字左移指令 D2就是第一個記錄的最大那個地址的編號,所以執行一次就減1,來執行下一個,減到0就是完成 樓主留言:熱心助人! |
---|---|
|