• 倍福TwinCAT3.0软件与C++通讯问题(EAP通讯)


    一. TwinCAT控制器之间的几种通讯方式

    协议硬件要求实时性说明
    ADS通讯普通网卡,支持无线典型值:< 100msServer/Client,要写 PLC 程序,不用配置 IO
    EAP通讯支持 Y-Driver 的有线网卡 ,最好独占或EL660x交换机模块典型值:< 10msPublisher/Subscriber,不用写 PLC 程序,要配置 IO
    EtherCAT主从通讯从站控制器应有 Slave接口,e.g CX8090、-B110、FC11xx 等最小值:< 1msMaster/Slave,不用写 PLC 程序,要配置 IO

    目前上位机-控制器的控制模式很普遍,属于上位机与控制器的通讯而非传统的控制器之间的通讯,在实时性要求不高的场合,可以仅通过远程ADS,以变量名读取的方式进行变量之间的传递,一般可以达到100ms以内;
    而实时性要求高的场合,由于不是控制器之间的通讯,因此无法直接通过EAP进行通讯,但是可以转变思路,通过在上位机上建立一个本地中间Twincat程序,上位机C++程序通过本地ADS与本地中间Twincat程序进行信息传递,而在控制器上运行的Twincat程序与本地中间Twincat程序进行EAP通讯,从而将原本是远程ADS通讯变为了本地ADS通讯和EAP通讯的组合,这种方式一般可以达到10ms以内的实时性。

    1.添加EAP设备

    1. 新建工程,在I/O中的DEVICE中添加EAP,如下图:

      在这里插入图片描述

    2. 选择Network Variables类型

      在这里插入图片描述

    3. 有时需要设置网络适配器来激活EAP,在Adapter中选择search,选择网络适配器后确定,之后激活配置方可进行下一步。

      在这里插入图片描述

    2.添加变量刷新的Task周期

    1. 在Task上右键添加 task with image类型。

      在这里插入图片描述
      在这里插入图片描述

      EAP通讯是通过设置task周期性刷新通讯的变量,因此也可以自行设置task周期循环时间以及task优先级,在此不具体叙述。

    2. 在task子目录Inputs和Outputs分别新建需要通讯的变量名称和类型,在此我们设置类型为BOOL的变量outputTest和inputTest。

      在这里插入图片描述
      在这里插入图片描述

    3. 添加收发器(subscriber和publisher)

      在这里插入图片描述

    4. 同理在subscriber和publisher中添加变量,设置变量名和类型

      在这里插入图片描述

    5. 添加完我们可以看到,收发器下拉列表出现了VarData,我们将分别其链接到task中已经设置好的变量outputTest和inputTest中,然后重新激活配置。

      在这里插入图片描述

    3. 测试

    对于本项目(上位机-控制器),其中Inputs对应控制器程序通过EAP传递来的变量,即subscriber;Outputs对应控制器程序通过上位机ADS通讯传递来的变量,即publisher。因此对于Outputs,我们只需要在task变量中写入值便可以模拟ADS通讯传递过来变量的工况(上位机ADS通讯的方式与此前文章方法同理,都是以变量名读取的方式,例如“Tasks.Outputs.outputTest”);对于Inputs,需要在IO的subscriber中写入来模拟控制器EAP传递过来的变量

  • 相关阅读:
    使用 zk-SNARK 的可编程零知识证明:第 1 部分
    Mysql基础篇(Mysql数据类型)
    SpringBoot + MyBatis 结合 MVC框架设计 第1关:项目整合 - SpringBoot + MyBatis
    五分钟搭建ftp服务器,真的不含糊
    分库分表的 21 条法则,hold 住!
    iOS 开发中上传 IPA 文件的方法(无需 Mac 电脑)
    if,case,for,while
    传染病sir模型matlab案例代小村亚姆
    掌握SKILL语言:数字IC设计师必备的技能之一
    Java泛型和类型擦除
  • 原文地址:https://blog.csdn.net/qq_30150579/article/details/133792481