PLC 的應用場合,有時需要與伺服通訊,最簡單的方法是透過 RS-232/485,採用 modbus協定。這對於軸數不多的小系統是很划算的方式。但往往達不到快速的反應,而使應用受限,甚為可惜。本文針對此類應用,以台達A2伺服為例,提供一些加速的方法,可以提升通訊的刷新率,使命令的反應更為迅速,有興趣的讀者可以參考。
提升 Baud rate P3-01.X
提升 baud rate可以減少每個位元的傳輸時間,通常 baud rate 需隨著通訊距離增加而降低,否則錯誤率會增高,因此配線愈短愈好,並做好隔離抵抗干擾,封包傳輸時間可以根據 baud rate 算出。例如 baud rate= 115200,表示每個 bit 需要 1/115200 秒,一個 byte 若用 8E1 格式(見 P3-02)則需要 11位元(1啟動+8資料+1同位檢查+1停止),一個封包若有 30 byte則需要花費:
1/115200 x 11 x 30 = 2.8 msec。
使用 RTU 取代 ASCII,P3-02
相同的內容若以 RTU 方式傳輸,封包的位元數約為 ASCII 方式的一半,傳輸時間也節省一半!
A2 伺服支持的 Modbus 命令有:
- CMD 06h:一次寫一個 16 bit 的參數,若寫入的參數屬性為 32 bit則會錯誤!
- CMD 10h:一次寫N個參數,N=1~4,16 bit 或 32 bit 參數都可寫。每個參數佔2個 word 位址,不論該參數是16/32 bit 都一樣。
- CMD 03h:一次讀N個參數,N=1~5,16 bit 或 32 bit 參數都可讀,每個參數佔2個 word 位址,不論該參數是16/32 bit 都一樣。
使用映射參數,減少通訊次數
由於通訊讀寫的對象位址通常不會連續,例如要控制DI需要寫入 P4-07,觸發PR需要寫 P5-07,若分別寫入就需要2次通訊,這樣很沒有效率。台達 A2伺服提供8個映射參數 P0-25~P0-32,以上述為例,可以將 P4-07 映射到 P0-25,而 P5-07 映射到 P0-26,通訊時用CMD 10h同時對 P0-25~P0-26 做通訊,就只需要一次通訊,可大大的提升效率。且因每一映射參數都是 32 bit 寬,而上述 P4-07 與 P5-07 都是 16 bit 寬,故可將其分別映射到 P0-25 的高 16bit 與低 16 bit,不必佔用2個映射參數。因此,使用映射參數的好處除了使位址連續而減少通訊次數外,也可以使通訊的資料緊湊,提高頻寬利用率,這是很重要的技巧。映射的方法可參考參數 P0-35 的設定,或使用 ASDASoft 軟件,如下圖進行操作:
映射參數的配置技巧
如果覺得8個映射參數不夠用,可以將讀寫都需要的參數配置在中間,可節省空間。例如:總共需要通訊9個參數,(已超過8個了),若其中需讀5個參數,寫4個參數,由於有些參數可能是讀寫都需要的,例如 DI:P4-07 與 PR:P5-07,映射時可以將只需讀取的3個參數配置在映射區1~3,然後4,5配置讀寫都需要的參數 ,接著配置只需寫入的參數 6,7。讀取時用 CMD 03h 同時讀取1~5。寫入時用 CMD 10h 同時寫入 4~7。就可以滿足需求,反而還剩一個映射空間未使用。如果還是不夠用,可以把每次通訊都需要讀寫的參數配置在映射區,偶爾才需讀寫的就不做映射,直接用其本身的位址來通訊即可。其觀念類似於 CANopen 協定中的 PDO 與 SDO 概念,PDO 適合需要頻繁刷新的參數,效率高但對象固定(採用映射);SDO 適合需要隨機通訊的參數,對象可變但效率低。
建立與PLC 掃描同步的通訊
藉由上述映射技巧與多筆讀寫的通訊命令,程序統一在一處對伺服的映射參數做讀/寫,這樣可以將所需資料一次刷新到 PLC 的記憶體中,也相當於讓伺服的參數映射到 PLC 的記憶體中,很像 memory link,其中,映射區的讀取與寫入分別對應到 PLC 不同的記憶體,如下圖中的 IN_Area 與 OUT_Area。且資料刷新與 PLC 掃描週期同步,這樣可使通訊的內容在一次掃瞄週期內維持固定,避免程式邏輯發生錯誤。
台達A2伺服的PR模式,具有回原點,點對點運動,也包含電子凸輪,若能提升 modbus 的通訊效率,PLC 就能有效的利用這些功能,對一般的應用已經足夠,不一定非得上 CAN bus 或 EtherCAT,除了簡化系統也可節省成本,對小型系統尤其具有競爭力。
Ref. 台達 A2 伺服 快速入門。