YMGogre / KUKATCPCommunicationDemo

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 exchange of both sides adopts xml format.

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

KUKA库卡机械臂通讯测试Demo

  • 解决方案名称为 KUKA_TCP_Demo.sln。解决方案下包含三个项目:TCPServerTCPClientKUKA_TCP_Server,其中前两个项目为基于 BytesIO TCP 通讯库的测试项目,可以用于测试 KUKA 机械臂通讯 Demo;而 KUKA_TCP_Server 是基于 TCP/IP 协议簇、使用 Socket 接口、采用 XML 结构传输数据的库卡机械臂通讯测试项目。

欢迎访问本仓库相关博客

如果您需要测试 KUKA 机械臂通讯 Demo 功能是否正常,请前往这里

如果您想要测试将外部程序配置为服务端,机器人控制系统配置为客户端,请前往这里

如果您想要测试将外部程序配置为客户端,机器人控制系统配置为服务端,请前往这里


📌 按照 XPath 架构配置

使用 XML 进行数据交换时,交换的 XML 文件必须按照相同架构构建。Ethernet KRL 使用 XPath 语言描述和读取 XML 文件。

  1. 对于 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 结构。

  2. 对于 EKI 来说,用于发送接收数据的 XML 结构不能只有根元素(这与一般的 XML 文档要求似乎不同):

    ❌ 您不能像这样配置用于数据接收的 XML 结构:

    <RECEIVE>
      <XML>
          <ELEMENT Tag="Str" Type="STRING"/>
      </XML>
    </RECEIVE>

    ❌ 对应接收的 XML 结构不可以像这样:

    <Str>Text</Str>

📌 EKI 发送和接收数据

  1. 通过 XML 结构通讯时,KRL 程序可用 EKI_Send() 发送下列数据:

  2. 通过 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>

Q:Visual Studio 如何同时运行多个项目

A1:

  1. 在解决方案资源管理器中,右击解决方案节点,然后选择“属性”;
  2. 展开“通用属性”节点,然后选择“启动项目”,选择“多个启动项目”选项并设置适当的操作。然后点击应用;

A2: 或者更简单的,打开多个 Visual Studio 就好啦~

Q:CS0246 未能找到类型或命名空间名为"STTech"(是否缺少 using 指令或程序集引用?)

A:

这是因为 .gitignore 文件中添加了对 Nuget 程序包的忽略规则,通常这是正常的。这样可以减小仓库的大小,并且可以确保每个人都使用相同版本的程序包

  1. 在“解决方案资源管理器”中右击解决方案,选择【还原 Nuget 包】:
  2. 还是右击解决方案,选择【重新生成解决方案】即可。
  3. 如果项目还是无法成功生成,请参考博客中提供的解决办法。

About

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 exchange of both sides adopts xml format.

License:MIT License


Languages

Language:C# 100.0%