# KUKATCPCommunicationDemo **Repository Path**: YMGogre/KUKATCPCommunicationDemo ## Basic Information - **Project Name**: KUKATCPCommunicationDemo - **Description**: Demo基于Ethernet KRL,使用C#开发的上位机通过TCP/IP与库卡机械臂通讯,双方数据交换采用 xml 格式。Demo is based on Ethernet KRL, the upper computer developed by C# communicates with the KUKA manipulator through TCP/IP, and the data exch - **Primary Language**: C# - **License**: MIT - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 16 - **Forks**: 13 - **Created**: 2022-11-21 - **Last Updated**: 2025-08-04 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # KUKA库卡机械臂通讯测试Demo * 解决方案名称为 `KUKA_TCP_Demo.sln`。解决方案下包含三个项目:`TCPServer`、`TCPClient` 和 `KUKA_TCP_Server`,其中前两个项目为基于 **BytesIO TCP** 通讯库的测试项目,可以用于测试 KUKA 机械臂通讯 Demo;而 `KUKA_TCP_Server` 是基于 TCP/IP 协议簇、使用 Socket 接口、采用 XML 结构传输数据的库卡机械臂通讯测试项目。 ## 欢迎访问本仓库相关[博客](https://blog.csdn.net/YMGogre/article/details/127792826)! ### 如果您需要测试 KUKA 机械臂通讯 Demo 功能是否正常,请前往[这里](./doc/KUKA%E9%80%9A%E8%AE%AFDemo%E6%B5%8B%E8%AF%95%E6%89%8B%E5%86%8C.md)。 ### 如果您想要测试将外部程序配置为服务端,机器人控制系统配置为客户端,请前往[这里](./doc/%E5%A4%96%E9%83%A8%E7%A8%8B%E5%BA%8F%E4%B8%BA%E6%9C%8D%E5%8A%A1%E7%AB%AF-%E6%9C%BA%E5%99%A8%E4%BA%BA%E6%8E%A7%E5%88%B6%E7%B3%BB%E7%BB%9F%E4%B8%BA%E5%AE%A2%E6%88%B7%E7%AB%AF.md)。 ### 如果您想要测试将外部程序配置为客户端,机器人控制系统配置为服务端,请前往[这里](./doc/%E5%A4%96%E9%83%A8%E7%A8%8B%E5%BA%8F%E4%B8%BA%E5%AE%A2%E6%88%B7%E7%AB%AF-%E6%9C%BA%E5%99%A8%E4%BA%BA%E6%8E%A7%E5%88%B6%E7%B3%BB%E7%BB%9F%E4%B8%BA%E6%9C%8D%E5%8A%A1%E7%AB%AF.md) ### ⚠️ [其它注意事项](#AnchorPoint-MattersNeedAttention) ### [Q&A](#AnchorPoint-Q&A) --- # 其他注意事项 ## 📌 按照 XPath 架构配置 > 使用 XML 进行数据交换时,交换的 XML 文件必须按照相同架构构建。Ethernet KRL 使用 [XPath](https://www.runoob.com/xpath/xpath-tutorial.html) 语言描述和读取 XML 文件。 1. 对于 EKI 来说,用于**发送**和**接收**数据的 XML 结构**必须拥有[根元素](https://www.runoob.com/xml/xml-syntax.html)**: > ✔️ 您可以像这样配置用于数据接收的 XML 结构: > > ```xml > > > > > > > ``` > > ✔️ 对应接收的 XML 结构可以像这样: > > ```xml > > Text > > 1.23 > > > > > ``` > > 显然,上方实例中 `Ext` 就是根元素。 --- > ❌ 您不能像这样配置用于数据接收的 XML 结构: > > ```xml > > > > > > > ``` > > ❌ 对应接收的 XML 结构不可以像这样: > > ```xml > Text > > 1.23 > > ``` > > 显然,上方实例中没有根元素,这不是一个有效的 XML 结构。 2. 对于 EKI 来说,用于**发送**和**接收**数据的 XML 结构**不能只有根元素**(这与一般的 XML 文档要求似乎不同): > ❌ 您不能像这样配置用于数据接收的 XML 结构: > > ```xml > > > > > > ``` > > ❌ 对应接收的 XML 结构不可以像这样: > > ```xml > Text > ``` ## 📌 EKI 发送和接收数据 1. 通过 XML 结构通讯时,KRL 程序可用 `EKI_Send()` 发送下列数据: * [完整的 XML 结构](#AnchorPoint-KrlSendFullXml) * [XML 结构的一部分](#AnchorPoint-KrlSendPartXml) * [可变长度的任意字符串](#AnchorPoint-KrlSendString) 2. 通过 XML 结构通讯时,上位机程序可发送下列数据: * [完整的 XML 结构](#AnchorPoint-PcSendFullXml) * [XML 结构的一部分](#AnchorPoint-PcSendPartXml) ### 示例: **KRL 程序发送完整的 XML 结构**: * 保存的用于发送数据的 XML 结构: ```xml 12345678 ``` * KRL 程序: ``` DECL EKI_STATUS RET ; 假设配置文件名为“Channel_1.xml” RET=EKI_Send("Channel_1","Robot") ``` * 发送的 XML 结构: ```xml 12345678 ``` **KRL 程序发送 XML 结构的一部分**: * 保存的用于发送数据的 XML 结构: ```xml 12345678 ``` * KRL 程序: ``` DECL EKI_STATUS RET ; 假设配置文件名为“Channel_1.xml” RET=EKI_Send("Channel_1","Robot/ActPos") ``` * 发送的 XML 结构: ```xml ``` **KRL 程序发送可变长度的任意字符串**: * 保存的用于发送数据的 XML 结构(直接发送字符串时不使用): ```xml 12345678 ``` * KRL 程序: ``` DECL EKI_STATUS RET ; 假设配置文件名为“Channel_1.xml” RET=EKI_Send("Channel_1","1") ``` * 发送的字符串: ```xml 1 ``` --- **上位机程序发送完整的 XML 结构** * 保存的用于发送数据的 XML 结构: ```xml Text 1.23 ``` * 上位机程序代码: ```c# //略... ``` * 发送的 XML 结构: ```xml Text 1.23 ``` **上位机程序发送 XML 结构的一部分** * 保存的用于发送数据的 XML 结构: ```xml Text 1.23 ``` * 上位机程序代码: ```c# //略... ``` * 可发送的 XML 结构: ```xml Text ``` 或者 ```xml 1.23 ``` --- # Q&A ## Q:Visual Studio 如何同时运行多个项目 **A1:** 1. 在解决方案资源管理器中,右击解决方案节点,然后选择“属性”;
![](./doc/image/attribute.PNG) 2. 展开“通用属性”节点,然后选择“启动项目”,选择“多个启动项目”选项并设置适当的操作。然后点击应用;
![](./doc/image/apply.PNG) **A2:** 或者更简单的,打开多个 Visual Studio 就好啦~ ## Q:CS0246 未能找到类型或命名空间名为"STTech"(是否缺少 using 指令或程序集引用?) **A:** 这是因为 `.gitignore` 文件中添加了对 Nuget 程序包的忽略规则,通常这是正常的。[这样可以减小仓库的大小,并且可以确保每个人都使用相同版本的程序包](https://learn.microsoft.com/zh-cn/nuget/consume-packages/package-restore)。
![](./doc/image/NugetIgnore.PNG) 1. 在“[解决方案资源管理器](https://learn.microsoft.com/zh-cn/visualstudio/ide/use-solution-explorer?view=vs-2022)”中右击解决方案,选择【还原 Nuget 包】:
![](./doc/image/NugetRestore.PNG) 2. 还是右击解决方案,选择【重新生成解决方案】即可。 3. 如果项目还是无法成功生成,请参考[博客](https://blog.csdn.net/YMGogre/article/details/127792826)中提供的解决办法。