Qt实现TwinCAT通讯

目前这种方式是通过调用TwinCAT提供的AdsApi与倍福PLC通讯的。要求本机安装TwinCAT(无需作为主机,但是可能这个api依赖TwinCAT的一些服务)。

关于AdsApi的一些介绍可以看这里https://www.apps121.com/2018/07/30/beckhoff-twincat-ads-plc
(这个网站好像被劫持了,不用管它)
关于AdsApi的官方资料请看这里,有函数的详细解释,还有例子。你值得拥有。
用ads与TwinCAT通讯时,需要注意各自的数据类型的区别。
这里可以看到TwinCAT的常用数据类型的介绍
https://blog.csdn.net/weixin_42104932/article/details/110821507
https://wenku.baidu.com/view/e5c8004b316c1eb91a37f111f18583d049640f94.html

我所使用的环境是Qt5.12.3+VS2017+Win7,安装的TwinCAT是TC31-Full-Setup.3.1.4022.16.exe;但是那个AdsApi提供的库是c语言的,所以只要是支持C语言的编译环境应该都可以按照类似的方法调用。

这里进行通讯的前提是,你已经有了一个TwinCAT的主机(安装了TwinCAT的电脑,或者是倍福PLC),这个主机就是你要与之通讯的对象。

1.首先要把主机添加到你本机的TwinCAT设备列表中。添加的步骤查看下面的截图。


2.然后就是把TwinCAT提供的AdsApi的库包含到Qt工程中(具体路径要看你的TwinCAT的安装目录)。

INCLUDEPATH += F:\TwinCAT\AdsApi\TcAdsDll\Include
LIBS += F:\TwinCAT\AdsApi\TcAdsDll\x64\lib\TcAdsDll.lib

3.接着include头文件
这里要特别说明一下,要include三个头文件,如下

#include <Windows.h>
#include <TcAdsDef.h>
#include <TcAdsAPI.h>

且include这三个头文件的顺序必须如此,因为下面那两个头文件用到BOOL类型,而BOOL类型是在Windos.h中定义的;TcAdsAPI.h中的一些类型是在TcAdsDef.h中定义的。
4.接下来就是编程了。
目前我这边主要测试了三个功能:读、写、监听。
分别对应这三个函数(这三个函数的声明都在#include <TcAdsAPI.h>中):

long AdsSyncWriteReq(AmsAddr*    pServerAddr,    // Ams address of ADS serverunsigned long   indexGroup,     //  index group in ADS server interfaceunsigned long    indexOffset,    // index offset in ADS server interfaceunsigned long    length,         // count of bytes to writevoid*             pData               // pointer to the client buffer);long AdsSyncReadReq(AmsAddr*   pAddr,                      // Ams address of ADS serverunsigned long       indexGroup,     //  index group in ADS server interfaceunsigned long        indexOffset,    // index offset in ADS server interfaceunsigned long        length,         // count of bytes to readvoid*              pData               // pointer to the client buffer);__declspec( dllexport )
long AdsSyncAddDeviceNotificationReq(AmsAddr*   pAddr,  // Ams address of ADS serverunsigned long indexGroup, //    index group in ADS server interfaceunsigned long indexOffset,// index offset in ADS server interfaceAdsNotificationAttrib* pNoteAttrib, // attributes of notification requestPAdsNotificationFuncEx pNoteFunc,      // address of notification callbackunsigned long hUser,                     // user handleunsigned long *pNotification          // pointer to notification handle (return value));

这几个函数中的indexGroup的意思可以查看文章开始时提供的那个连接,里面有介绍到。

我这边要读取和写入的对象是存放在M寄存器中的。所以我的indexGroup = 0x00004020;变量的地址按照下图所示查看:

所以地址偏移(indexOffset)是512028

{QString targetNetId = "169.254.71.20.1.1";int targetPort = 851;//这里的hostNetId是我写错了,感谢评论区 用户“Lee轮回” 的指出。谢谢。//AmsAddr targetAddr = createAddr(hostNetId, targetPort);AmsAddr targetAddr = createAddr(targetNetId, targetPort);unsigned short data = 0; //用来存放数据的缓冲区qDebug() << AdsSyncWriteReq(&targetAddr, 0x00004020, 512028, 2, &data);qDebug() << AdsSyncReadReq(&targetAddr, 0x00004020, 512028, 2, &data) << data;
}
//这个createAddr是自己定义的函数,作用是把字符串初始化adsapi所使用的AmsAddr
AmsAddr createAddr(QString netId, int port)
{AmsAddr addr;addr.port = port;QStringList ids = netId.split(".");for(int i = 0; i < 6; i++){addr.netId.b[i] = ids[i].toUInt();}return  addr;
}

这样子就实现了简单的读写。
监听的有空再详细介绍。

Qt调用倍福TwinCAT通讯模块(TcAdsDll)相关推荐

  1. 倍福ads通讯软件_倍福TwinCAT ADS通讯-高级语言.ppt

    倍福TwinCAT ADS通讯-高级语言 * ADS组件库文件组成简介 ADS组件库集成在TwinCAT软件中,安装任何版本的TwinCAT软件都包含ADS通讯组件,如果用户希望在没有安装TwinCA ...

  2. 倍福Twincat 3.0软件与C++通讯问题(ADS通讯)

    倍福Twincat 3.0软件与C++通讯问题 倍福公司所开发的Twincat 3.0软件是基于Visual studio开发环境的一款自动化软件,目前其与C++程序通讯的方式主要还是靠ADS-DLL ...

  3. 【Ethercat机器人控制系统开发】倍福Twincat入门教程

    [Ethercat机器人控制系统开发]倍福Twincat入门教程(一) 一. 简介 1. 倍福,Twincat与Ethercat简要介绍 1. 1 倍福Beckhoff简介 1. 2 Twincat简 ...

  4. matlab与倍福,倍福|TwinCAT|自动化软件-倍福展示最新版TwinCAT 3.1自动化软件

    倍福展示最新版TwinCAT 3.1自动化软件 2012年11月20-22日,Beckhoff在2012德国纽伦堡国际电气自动化系统及元件展览会上展示了其3.1版本的TwinCAT自动化软件.该软件的 ...

  5. 倍福TwinCAT无法添加ADS路由的排查方法

    如果发现 ADS 路由不通了,依次检查 3 个环节: 1,是否 Ping 得通 2,是否广播得到 3,是否加得上路由 在不同环节遇阻,可能有不同的原因和相应的处理办法,下面依次说明. New: 7 附 ...

  6. 如何卸载twincat3_倍福TwinCAT(贝福Beckhoff)常见问题(FAQ)-如何让不同的PLC程序分线程运行 TC3...

    右击Tasks,添加一个新的Task   可以为这个线程设置自定义的扫描周期   然后在项目上右击添加Referenced Task   在TaskSub1上右击添加现有项,把之气写好的PRG程序绑定 ...

  7. 倍福TwinCAT(贝福Beckhoff)基础教程1.1 TwinCAT背景知识

    本节附件中有很多PPT介绍贝福TwinCAT和EtherCAT的相关技术,在此只做简单说明. 简单总结:EtherCAT就是一种总线技术,具有速度快,稳定性高,布线简单等优点,详细可以参考下面这个PP ...

  8. 倍福TwinCAT(贝福Beckhoff)应用教程13.1 TwinCAT控制松下伺服 NC高级

    本节主要演示了使用自定义函数实现电机的运动(梯形曲线和S曲线都有实现),这里的JOG+和JOG-,针对单个关节实现了PTP的运动(跟贝福的MoveAbsolute功能块实现效果一致),在此没有介绍运动 ...

  9. 倍福 TwinCAT背景知识

    简单总结:EtherCAT就是一种总线技术,具有速度快,稳定性高,布线简单等优点,详细可以参考下面这个PPT(不是说其他总线就不行,只是说这个很优秀) 简单总结:TwinCAT就是贝福推出的基于PC的 ...

最新文章

  1. python零基础怎么学-零基础如何学习Python?老男孩Python入门培训
  2. 电子到底为什么会干涉?
  3. python库整理:networkx 包
  4. 均值滤波器3*3模板_均值滤波器
  5. IntelliJ IDEA 2017.01配置jdk和tomcat
  6. 在本地机房享受专属公共云服务,详解阿里云本地化部署服务云盒
  7. 2014/School_C_C++_A/6/“数独”游戏
  8. 【BZOJ 3339 / BZOJ 3585 / luogu 4137】Rmq Problem / mex
  9. 小系统单据自动生成存储过程
  10. Struts 2 的学习笔记(二) struts的配置流程和strut是2的工作原理
  11. 蚂蚁金服:开源增强版 SpringBoot 的研发框架!
  12. Java Map 集合实现类
  13. 低代码平台开发 python_低组词_低的多音字组词,低是多音字吗,低组词有哪些
  14. 解除微信授权的html5网页,微信授权登录网页管理在哪里看?如何取消授权
  15. 《禅者的初心》读书笔记(2)
  16. 在oracle中bpa是什么意思,BPA是什么意思_BPA的翻译_音标_读音_用法_例句_爱词霸在线词典...
  17. 浏览器主页被篡改怎么办
  18. bert中的cls和sep等等
  19. Notepad Next:Linux 用户的 Notepad++ 最佳替代品
  20. Kafka安全认证 SASL/PLAINTEXT,账号密码认证

热门文章

  1. 软件项目中的文档管理(上)
  2. 【论文阅读】GRAPH-BASED RECURRENT RETRIEVER
  3. python标记_Python实现一个简单的图片物体标注工具
  4. vue开发饿了吗外卖app⑤——使用better-scroll详解和一些知识点
  5. 汇编课程设计:音乐播放器详解
  6. 安防行业竞争激烈,哪些发展趋势将会成为主流?
  7. Flutter学习笔记之生成随机数
  8. python爬虫多久能学会-零基础学爬虫大概多久啊?
  9. 斯蒂文斯理工学院计算机科学硕士,美国斯蒂文斯理工学院计算机科学硕士专业.pdf...
  10. GP2Y1014AU粉尘传感器模块 PM2.5灰尘传感器代替GP2Y1010AU0F