ayusecret
級別: 略有小成
|
花兩天半純手敲的代碼,代碼有點亂,周五就要出差了,沒時間整理了,原本只是幫同事用小助手測個MC協議,也不知道腦袋一熱敲了一堆代碼,收益匪淺啊,分享給大家 測試工具: R04 CPU,3E幀通訊(理論支持Q系列,可打開Gxwork3 e-Manual搜索3E幀得到手冊內容) TCP通訊小助手(測試報文用) Python環境編寫代碼 版本3.10.4 Gxwork3(配置CPU參數,理論上Q系列使用Gxwork2也可) 整體的一個思路如下: 1.用小助手報文測試進行報文測試,如果有響應,無論對錯,至少通訊上了,再根據發送的報文和響應的報文,根據手冊幀定義進行拆分解讀. 2.參考網上代碼,用Python實現Socket通訊到PLC,為下一個環節做準備. 3.先直接把前面測試成功的報文,以字符串形式(需解碼成字節)用Socket直接發給PLC 4.如果前面測試成功,就開始封裝幀,以某個元件(我是以"D元件")開始,編輯指令,再根據需要,擴展其他元件,反復優化,迭代 目前實現: D元件單雙字寫入,單進度浮點數寫入,可正負,浮點數可能有精度丟失 M元件0,1 寫入 TN 將其當成D理解去處理 TC,TS,X,Y將其當成M去處理,注意M地址是10進制而X,Y是16進制,需對類型進行區分 限制: 1.幀有部分內容暫時寫死,軟元件有部分子指令暫時寫死 2.目前只封裝批量讀寫指令,個人認為只需要這兩個即可,隨機讀寫指令實際應用中應該比較少就沒寫了. 總結: 1.純練習項目,還未實際應用,目前測試數據還算正常.發出來只是給大家做個參考 2.說來慚愧,干自動化那么多年,還沒接觸上位機開發,為了實現這些代碼也是網上參考了很多函數技巧,后面有機會再嘗試試試多線程,做數據庫相關的內容3 3.主要困難點在于 1.float數據如何傳到PLC,又如何讀出來解讀.(參考規格化浮點數定義) ,網上沒有實用的函數參考,為了實現并測試我足足研究了一個下午 2.數據正負的實現 4.臨時敲的代碼,可能還有很多Bug,望指正. |
---|---|
本帖最近評分記錄: |