倍福Twincat 3.0软件与C++通讯问题

倍福公司所开发的Twincat 3.0软件是基于Visual studio开发环境的一款自动化软件,目前其与C++程序通讯的方式主要还是靠ADS-DLL接口进行数据和信息传递,作者在Visual C++上进行混合编程开发,通过TwinCAT路由器和C语言API函数实现混合编程。
倍福软件提供:
TcAdsDll.dll—动态链接库;
TcAdsDll.lib—使用TcAdsDll的函数库;
TcAdsApi.h—声明ADS功能的头文件;
TcAdsDef.h—声明结构和常数的头文件;
具体步骤如下:
1.首先启动Visual Studio 2013,创建一个新项目,我们选择Visual C++→MFC→MFC应用程序。输入项目名称并保存确定,后续可以选择基于对话框的程序类型。

2.之后添加链接库,方便各种函数的调用,打开项目属性→配置属性→链接器→常规→附加库目录→输入目录名称(C:\TwinCAT\AdsApi\TcAdsDll\x64\lib,这是安装Twincat的通讯库函数的默认路径)。

3.再依次添加:链接器→输入→附加依赖项,输入文件名“TcAdsDll.lib”,点击确定。
4.还需要将头文件进行声明,将C:\TwinCAT\AdsApi\TcAdsDll\Include目录下的 "TcAdsDef.h"和 "TcAdsAPI.h" 先后声明在头文件MFCApplication3Dlg.h中(先声明TcAdsDef.h文件,不然编译报错)。

5.到此可以成功调用Twincat的ads通讯库的函数了,继续进行ADS通讯的初始化。

 //声明全局变量long nErr;long nPort;AmsAddr Addr;PAmsAddr pAddr;//初始化内容:建立路由、获取NetID、设置PLC端口号pAddr = &Addr;nPort = AdsPortOpen();//如果是远程ADS则使用下面注释的两句确定AmsNetId,id填入远程控制器的ip//AmsNetId id = {192,168,1,1,1,1};//pAddr->netId = id;//如果是本地ADS通讯则使用下面两条语句确定AmsNetIdnErr = AdsGetLocalAddress(pAddr);if (nErr) cerr << "Error: AdsGetLocalAddress: " << nErr << '\n';//确定端口号pAddr->port = 851;

6.以本地ADS通讯为例,进行MFC程序和Twincat程序的变量传递,建立MFC程序调试界面如下图。

在写入按钮右侧编辑框链接int型变量Write,在读取按钮右侧编辑框链接int型变量Read(MFC的编程部分不进行赘述)。
在写入按钮上增加响应事件,代码如下:

 UpdateData(TRUE);ULONG     lHdlVar;char   szVar[] = { "MAIN.Test" };//通过变量名通讯//得到句柄nErr = AdsSyncReadWriteReq(pAddr, ADSIGRP_SYM_HNDBYNAME, 0x0, sizeof(lHdlVar),&lHdlVar, sizeof(szVar), szVar);//写入值nErr = AdsSyncWriteReq(pAddr, ADSIGRP_SYM_VALBYHND, lHdlVar, 2, &Write);//释放句柄nErr = AdsSyncWriteReq(pAddr, ADSIGRP_SYM_RELEASEHND, 0, sizeof(lHdlVar), &lHdlVar);

在读取按钮上增加响应事件,代码如下:

ULONG     lHdlVar;
char   szVar[] = { "MAIN.Test" };
//得到句柄
nErr = AdsSyncReadWriteReq(pAddr, ADSIGRP_SYM_HNDBYNAME, 0x0, sizeof(lHdlVar),&lHdlVar, sizeof(szVar), szVar);
//读出值
nErr = AdsSyncReadReq(pAddr, ADSIGRP_SYM_VALBYHND, lHdlVar, 2, &Read);
//释放句柄
nErr = AdsSyncWriteReq(pAddr, ADSIGRP_SYM_RELEASEHND, 0, sizeof(lHdlVar), &lHdlVar);
UpdateData(FALSE);

7.到此C++测试程序编写完成,新建一个PLC程序,MAIN函数内建立int型变量Test,然后下载到本地运行。有一点Twincat编程基础都应该会吧,也不再赘述了。
8.接下来我们验证通讯功能,在MFC程序界面上,输入100,并点击写入。可以看到PLC程序中变量Test已经变成100。

再点击读取,读出的值由0又变成100,测试成功。

本地两个程序之间成功互相传递int变量,以此类推,远程两台控制器的通讯,不同类型变量的通讯,都可以通过更改C++程序来进行实现。

倍福Twincat 3.0软件与C++通讯问题(ADS通讯)相关推荐

  1. 倍福Twincat 3.0软件的EAP通讯(补充)

    上期文章在讲到EAP与上位机通讯时,因本人疏忽,提到一个地方有误----本文就不再介绍控制器程序部分EAP的配置,其配置与本文IO的配置同理 . 下位机(控制器)EAP的配置有些许不同,需要设置AMS ...

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

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

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

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

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

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

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

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

  6. Qt调用倍福TwinCAT通讯模块(TcAdsDll)

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

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

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

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

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

  9. 倍福TwinCAT(贝福Beckhoff)基础教程6.1 TwinCAT如何与高级语言通讯

    因为使用TwinCAT的人用途不同,重视点就不同.如果用来代替传统PLC+HMI做项目的,很少会需要用到跟高级语言通讯,但是如果是用来做运动控制平台如做机器人运动控制器的,就肯定会用到.不管是否用得上 ...

最新文章

  1. 【C++】运算符重载
  2. 美团/力扣(647)--回文字串
  3. MySQL month()函数
  4. CentOS 7 / RHEL 7 systemd 指令
  5. python 计时_Python time clock()方法
  6. shell条件检查原理:command echo ‘success‘ || echo ‘error‘
  7. 鸿蒙手表升级计划,鸿蒙升级第一夜,服务器崩了!各机型升级排期表来了
  8. 设计模式之模板模式(模板方法)
  9. FIT2CLOUD飞致云面试总结
  10. bochs镜像java模拟器_bochs镜像下载
  11. Luogu 1606 [USACO07FEB]白银莲花池Lilypad Pond
  12. Python+OpenCV手势识别Mediapipe(基础篇)
  13. 浅谈DM数据库优化常识
  14. [附源码]java毕业设计领导干部听课评课管理系统
  15. 如何用word 2007在指定页插入页码和页眉页脚?
  16. CVE-2010-0188漏洞点定位
  17. Vim位置标记mark详解
  18. google map v3离线版地图
  19. 【XSY2689】王子 - 网络流
  20. vue3 引入天地图

热门文章

  1. linux终端配置bash和csh,bash csh/tcsh 环境变量的设置
  2. Android RecyclerView 显示图片列表,点击查看大图,手指可放大缩小
  3. 计算机课玩手机检讨500,教室上课玩手机检讨书500字
  4. 电脑主板的BIOS参数为何要使用电池来存储?
  5. php zookeeper分布式事务,ZK实现分布式事务锁代码及原理验证
  6. 免费路由器操作系统大汇总
  7. elementUI的notify的click事件
  8. 2019年 年终总结,2020年 继续前行
  9. 霍尔信号、编码器信号与电机转向
  10. CentOS 安装 mongodb