基于Ethernet KRL,上位机C#通过TCP/IP与KUKA库卡机械臂通讯Demo
目錄
0、引言:?
1、本文使用的相關軟硬件或產品:?
2、一些注意事項:?
2.1、涉及到的一些概念:?
2.2、配置以太網連接以及以及發送接收結構:?
2.3、上位機應當如何傳輸:?
2.4、通過smartHMI查看傳輸的數據:?
3、Demo程序:?
4、結語:?
0、引言:?
? ? ? ? Demo基于Ethernet KRL,使用C#開發的上位機通過TCP/IP與庫卡機械臂通訊,雙方數據交換采用 xml 格式。? ? ? ??
????????在開始之前,您需要確保您擁有庫卡官方的?KST_Ethernet_KRL?(懂的都懂)技術文檔,本文章并不提供該文檔。此外,如果您接受過庫卡官方機械臂編程培訓并熟悉?計算機網絡?、XML 相關知識將更加有助于理解本文章。當然不熟悉也沒關系,本文章提供可以直接使用的通訊Demo,您可以在此基礎上搭建自己的機械臂運動控制程序。
? ? ? ? 您還需要給機械臂安裝 KUKA.Ethernet KRL 軟件包,這是上位機與機械臂通訊的根基。該軟件包具備以下功能:
- 通過 EKI 交換數據;
- 接收外部系統的 XML 數據;
- 將 XML 數據發送給外部系統;
- 接收外部系統的二進制數據;
- 將二進制數據發送給外部系統;?
以及以下特性:
- 機器人控制系統和外部系統作為客戶端或服務器;
- 通過基于 XML 的配置文件配置連接;
- 配置“事件信息”;
- 通過向外部系統發送Ping命令監控連接;
- 從提交解釋器讀取和寫入數據;
- 從機器人解釋器讀取和寫入數據;?
????????當然,如果您是通過官方渠道購買了庫卡的TCP通訊服務,那您應該已經擁有了以上提到的?KST_Ethernet_KRL?技術文檔與?KUKA.Ethernet KRL 軟件包。?
🌐 以下內容是構筑在您已安裝完?KUKA.Ethernet KRL 軟件包并且使用庫卡官方通訊測試程序初步測試通過的基礎上的:
1、本文使用的相關軟硬件或產品:?
- KUKA KR210?prime cr 及配套產品(如機械臂示教器等)
- KUKA.WorkVisual 6.0.24
- KUKA.Ethernet KRL 3.1
- Windows 11 家庭中文版 21H2(OS 內部版本 22000.1219)
- Visual Studio Community 2022 - 17.4.0
- Microsoft .NET Framework 4.8.04084
- 「.NET 桌面開發」工作負荷
2、一些注意事項:?
涉及到一些小細節,如果僅僅是想使用該demo可以直接跳過第2章。?
2.1、涉及到的一些概念:?
| 術語名 | 說明 |
| 數據流 | 連續的數據組序列,其末尾無法提前預見。各個數據組具有任意而固定的類型。每個時間單位的數據組量(數據率)可能有所不同。只能按順序訪問這些數據。 |
| EKI | Ethernet KRL Interface(以太網KRL接口) |
| EOS | End Of Stream(末尾字符串)標記數據組末尾的字符串 |
| 以太網 | 以太網是局域數據網絡(LAN)的數據網絡技術,它實現了使數據以數據框架的形式在所連接用戶之間的交換。 |
| FIFO | 可處理數據存儲器的方法:
|
| LIFO | |
| KLI | KUKA 線路接口: ????????將設備集成到客戶網絡的生產線總線。 |
| KR C | 庫卡機器人控制器: ????????KR C 是 KUKA 機器人控制系統。 |
| KRL | KUKA Robot Language(庫卡機器人編程語言): ????????KRL 是 KUKA 機器人編程語言。 |
| smartHMI | smart Human-Machine Interface(smart 人機界面): ????????KUKA smartHMI 是 KUKA 系統軟件的操作界面。 |
| Socket | 套接字 ????????將 IP 地址和端口號相互連接的軟件接口。 |
| TCP/IP | Transmission Control Protocol(傳輸控制協議): ? ? ? ? 有關網絡用戶間數據交換的協議。TCP 可在網絡連接的兩個終點之間建立一個虛擬通道。在這個通道上可雙向傳輸數據。 |
| UDP/IP | User Datagram Protocol(用戶數據報協議): ? ? ? ? 有關網絡用戶間數據交換的無連接協議。 |
| IP | Internet Protocol(因特網協議): ? ? ? ? 因特網協議的任務是通過物理 MAC 地址定義子網絡。 |
| XML | Extensible Markup Language(可擴展的標記語言): ? ? ? ? 以規定的樹狀結構創建人機可讀文檔的標準。 |
| XPath | XML Path 語言: ? ? ? ? 用于描述和讀取 XML 文件部分的語言。 |
2.2、配置以太網連接以及以及發送接收結構:?
????????以太網連接通過 xml 文件進行配置。針對每個連接,必須在機器人控制系統的目錄 C:\KRC\ROBOTER\Config\User\Common\EtherKRL 中新建并定義一個配置文件;注意,這是在庫卡機械臂方需要配置的文件,上位機無需配置。機械臂在連接初始化時將讀入該配置。
? ? ? ? 同時我們一般還會在定義的配置文件中配置用于數據接收和發送的 XML 結構。當然這一部分結構是取決于用戶希望上位機和機械臂之間要交換哪些數據。所以一般的 xml 配置文件形式應當如下方這樣:
<ETHERNETKRL><CONFIGURATION><EXTERNAL></EXTERNAL><INTERNAL></INTERNAL></CONFIGURATION><RECEIVE><ELEMENTS></ELEMENTS></RECEIVE><SEND><ELEMENTS></ELEMENTS></SEND> </ETHERNETKRL>| 段 | 說明 |
| <CONFIGURATION> ... </CONFIGURATION> | 配置外部系統和 EKI 之間的連接參數 |
| <RECEIVE> ... </RECEIVE> | 配置機器人控制系統接收的接收結構 |
| <SEND> ... </SEND> | 配置機器人控制系統發送的發送結構 |
? ? ? ? ? xml 文件都是嚴格區分大小寫的。
????????本文Demo程序機械臂使用的 xml 配置文件為倉庫中名為 XmlTransmit.xml 的文件,要使用本文的Demo需要將該 xml 文件拷貝到機器人控制系統的對應目錄下。
? ? ? ? xml 文件名稱同時也是 KRL 的訪問鍵。比如Demo中配置文件名為?XmlTransmit ,則機械臂方編程時相應的 EKI 函數中就會使用該文件名字符串作為訪問鍵。比如:
EKI_INIT("XmlTransmit")2.3、上位機應當如何傳輸:?
????????無論配置何種用于數據接收和發送的 XML 結構,上位機向機械臂發送數據都是將普通文本字符串轉換為字節流后發送。所以無論 XML 結構中配置了要傳整型、浮點型、布爾型或者字符串等等數據類型給機械臂,對上位機來說都只是傳輸字符串過去(比如整型、浮點型就傳輸數字字符串;bool型就傳輸"true"、"false"或者"1"、"0"字符串),機器人控制系統會根據配置好的 xml 文件來解析收到的字符串,從而得到對應的數據類型。對上位機來說,僅僅只有一個要求,那就是發送的字符串一定得符合機器人控制系統中定義的那個配置文件中的 XML 結構!
? ? ? ? 綜上所述,機器人控制系統中配置的 xml 文件內容、KRL 代碼內容和上位機發送的字符串內容,應當滿足如下關系:
<!-- 機器人控制系統中 xml 配置文件內容范例 (這是范例所以僅演示了用于數據接收的 XML 結構的部分內容): --> <RECEIVE><XML><ELEMENT Tag="Sensor/Message" Type="STRING" /> <!-- 定義機械臂要接收一個string類型的傳感器信息數據 --><ELEMENT Tag="Sensor/Status/IsActive" Type="BOOL" /><!-- 定義機械臂要接收一個bool類型的傳感器狀態是否啟用數據 --></XML> </RECEIVE> <!-- 我們假設該 xml 配置文件命名為 Channel_1.xml --> ; 以下是KRL代碼,在KRL中英文逗號";"為行注釋標志: ; Declaration INT i DECL EKI_STATUS RET CHAR valueChar[256] BOOL valueBOOL; ATTENTION: The KRL variables *must* be initialized first! ; 注意:用于存放接收數據的 KRL 變量*必須*先經過初始化! FOR i=(1) TO (256)valueChar[i]=0 ENDFOR valueBOOL=FALSE; Read data RET=EKI_GetString("Channel_1", "Sensor/Message", valueChar[]) RET=EKI_GetBool("Channel_1", "Sensor/Status/IsActive", valueBOOL) //機器人控制系統接收到的 符合配置好的數據接收 XML 結構的 字符串內容: <Sensor><Message>Example message</Message><Status><IsActive>ture</IsActive></Status> </Sensor>/*這里我為了便于閱讀用了換行和縮進,實際上上位機發過去的字符串就是一個從頭到尾連在一起的字符串,就像下面這樣:*/ <Sensor><Message>Example message</Message><Status><IsActive>ture</IsActive></Status></Sensor>? ? ? ? 此外,本文Demo從機械臂方發送到上位機的數據也僅僅是字符串,Demo中上位機端還未提供解析代碼來解析 XML 結構,大佬有需求可自行補充。?
2.4、通過smartHMI查看傳輸的數據:?
? ? ? ? 想要在庫卡 smartPAD 示教器(smartPAD是用于工業機器人的手持編程器)上調試程序測試通訊是否成功,我們可以將機械臂端收到的數據交給全局變量,通過 smartHMI 查看該全局變量的值即可確定傳輸是否成功:
聲明全局變量 示教器顯示全局變量3、Demo程序:?
? ? ? ? 在通訊Demo中,上位機作為?服務端?監聽連接,而庫卡機械臂作為?客戶端?連接至服務端,雙方數據使用 xml 格式傳輸。Demo中還提供了一個基于 BytesIO TCP 通訊庫的服務端和客戶端測試程序,可以用于測試庫卡機械臂通訊程序。此外,機械臂端的 xml 配置文件和 src 源代碼文件也包含在里面,要使用該Demo需要把這兩個文件拷貝到機器人控制系統中的對應目錄下。
GitHub:https://github.com/YMGogre/KUKATCPCommunicationDemo.git
Gitee:https://gitee.com/YMGogre/KUKATCPCommunicationDemo.git
CSDN下載?????:https://download.csdn.net/download/YMGogre/87003119
xml 配置文件存放目錄:C:\KRC\ROBOTER\Config\User\Common\EtherKRL
KRL程序存放目錄:C:\KRC\ROBOTER\Program(對于Demo中KRL程序別忘了在系統文件 $CONFIG.DAT 聲明全局整型變量 "Nmb" !)
????????關于程序使用操作細則請參考Demo中的 README.md 。
? ? ? ? 💠tips:下載Demo后打開解決方案,可能會發現錯誤列表欄彈出一些錯誤信息:?CS0246 未能找到類型或命名空間名為"STTech"(是否缺少 using 指令或程序集引用?)?等。這是因為解決方案中那兩個基于 BytesIO TCP 通訊庫的服務端和客戶端測試程序項目中還未正確引用 BytesIO TCP 通訊庫,我們有兩項解決辦法:
- 首先在 NuGet 包管理器中卸載已安裝的三個包(三個包之間存在依賴關系,所以需要按順序卸載。卸載順序:STTech.BytesIO.TCP ==> STTech.BytesIO.Core ==> STTech.CodePlus):
- 三個包卸載完之后,搜索 "bytesIO" ,找到 STTech.BytesIO.Tcp 并安裝:
- 完成!重新生成解決方案看看,應該就沒有錯誤信息了。
注:第二個方法卸載是三個包全都卸載了,但安裝只用安裝 STTech.BytesIO.Tcp 就可以了。?
4、結語:?
? ? ? ? 依照庫卡機械臂官方人員的說法:“基于Ethernet KRL的通訊雖說可以實現PC與機械臂之間的直接溝通,并在此基礎上搭建機械臂的整套運動控制程序;但這種方式還沒有辦法給到機械臂最初所需要的使能信號,還需要每次自動運行前按一次示教器的"啟動鍵"。所以這種方式還不能擺脫機械臂的 smartPAD 示教器,實現完全的自動化。”
? ? ? ? 想要實現機械臂完全的外部自動,還是需要加入PLC去直接控制庫卡機械臂的IO口。這就需要購買庫卡官方的PLC通信模塊或者自行摸索實現了。
總結
以上是生活随笔為你收集整理的基于Ethernet KRL,上位机C#通过TCP/IP与KUKA库卡机械臂通讯Demo的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Mac下使用MAMP配置Nginx
- 下一篇: js 阿拉伯数字转化为中文数字