- 解决方案名称为
KUKA_TCP_Demo.sln
。解决方案下包含三个项目:TCPServer
、TCPClient
和KUKA_TCP_Server
,其中前两个项目为基于 BytesIO TCP 通讯库的测试项目,可以用于测试 KUKA 机械臂通讯 Demo;而KUKA_TCP_Server
是基于 TCP/IP 协议簇、使用 Socket 接口、采用 XML 结构传输数据的库卡机械臂通讯测试项目。
欢迎访问本仓库相关博客!
如果您需要测试 KUKA 机械臂通讯 Demo 功能是否正常,请前往这里。
如果您想要测试将外部程序配置为服务端,机器人控制系统配置为客户端,请前往这里。
如果您想要测试将外部程序配置为客户端,机器人控制系统配置为服务端,请前往这里
⚠️ 其它注意事项
使用 XML 进行数据交换时,交换的 XML 文件必须按照相同架构构建。Ethernet KRL 使用 XPath 语言描述和读取 XML 文件。
-
对于 EKI 来说,用于发送和接收数据的 XML 结构必须拥有根元素:
✔️ 您可以像这样配置用于数据接收的 XML 结构:
<RECEIVE> <XML> <ELEMENT Tag="Ext/Str" Type="STRING"/> <ELEMENT Tag="Ext/Pos/XPos" Type="REAL"/> </XML> </RECEIVE>
✔️ 对应接收的 XML 结构可以像这样:
<Ext> <Str>Text</Str> <Pos> <XPos>1.23</XPos> </Pos> </Ext> <!-- 这里笔者为了便于阅读用了换行和缩进,实际上接收的 XML 结构是一个从头到尾连在一起的字符串。后面也是如此。 -->
显然,上方实例中
Ext
就是根元素。
❌ 您不能像这样配置用于数据接收的 XML 结构:
<RECEIVE> <XML> <ELEMENT Tag="Str" Type="STRING"/> <ELEMENT Tag="Pos/XPos" Type="REAL"/> </XML> </RECEIVE>
❌ 对应接收的 XML 结构不可以像这样:
<Str>Text</Str> <Pos> <XPos>1.23</XPos> </Pos>
显然,上方实例中没有根元素,这不是一个有效的 XML 结构。
-
对于 EKI 来说,用于发送和接收数据的 XML 结构不能只有根元素(这与一般的 XML 文档要求似乎不同):
❌ 您不能像这样配置用于数据接收的 XML 结构:
<RECEIVE> <XML> <ELEMENT Tag="Str" Type="STRING"/> </XML> </RECEIVE>
❌ 对应接收的 XML 结构不可以像这样:
<Str>Text</Str>
-
通过 XML 结构通讯时,KRL 程序可用
EKI_Send()
发送下列数据: -
通过 XML 结构通讯时,上位机程序可发送下列数据:
KRL 程序发送完整的 XML 结构:
-
保存的用于发送数据的 XML 结构:
<Robot> <ActPos X="1000.12"></ActPos> <Status>12345678</Status> </Robot>
-
KRL 程序:
DECL EKI_STATUS RET ; 假设配置文件名为“Channel_1.xml” RET=EKI_Send("Channel_1","Robot")
-
发送的 XML 结构:
<Robot> <ActPos X="1000.12"></ActPos> <Status>12345678</Status> </Robot>
KRL 程序发送 XML 结构的一部分:
-
保存的用于发送数据的 XML 结构:
<Robot> <ActPos X="1000.12"></ActPos> <Status>12345678</Status> </Robot>
-
KRL 程序:
DECL EKI_STATUS RET ; 假设配置文件名为“Channel_1.xml” RET=EKI_Send("Channel_1","Robot/ActPos")
-
发送的 XML 结构:
<Robot> <ActPos X="1000.12"></ActPos> </Robot>
KRL 程序发送可变长度的任意字符串:
-
保存的用于发送数据的 XML 结构(直接发送字符串时不使用):
<Robot> <ActPos X="1000.12"></ActPos> <Status>12345678</Status> </Robot>
-
KRL 程序:
DECL EKI_STATUS RET ; 假设配置文件名为“Channel_1.xml” RET=EKI_Send("Channel_1","<POS><XPOS>1</XPOS></POS>")
-
发送的字符串:
<POS><XPOS>1</XPOS></POS>
上位机程序发送完整的 XML 结构
-
保存的用于发送数据的 XML 结构:
<Ext> <Str>Text</Str> <Pos> <XPos>1.23</XPos> </Pos> </Ext>
-
上位机程序代码:
//略...
-
发送的 XML 结构:
<Ext> <Str>Text</Str> <Pos> <XPos>1.23</XPos> </Pos> </Ext>
上位机程序发送 XML 结构的一部分
-
保存的用于发送数据的 XML 结构:
<Ext> <Str>Text</Str> <Pos> <XPos>1.23</XPos> </Pos> </Ext>
-
上位机程序代码:
//略...
-
可发送的 XML 结构:
<Ext> <Str>Text</Str> </Ext>
或者
<Ext> <Pos> <XPos>1.23</XPos> </Pos> </Ext>
A1:
- 在解决方案资源管理器中,右击解决方案节点,然后选择“属性”;
- 展开“通用属性”节点,然后选择“启动项目”,选择“多个启动项目”选项并设置适当的操作。然后点击应用;
A2: 或者更简单的,打开多个 Visual Studio 就好啦~
A:
这是因为 .gitignore
文件中添加了对 Nuget 程序包的忽略规则,通常这是正常的。这样可以减小仓库的大小,并且可以确保每个人都使用相同版本的程序包。