倍福Twincat 3.0软件与C++通讯问题(ADS通讯)
倍福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通讯)相关推荐
- 倍福Twincat 3.0软件的EAP通讯(补充)
上期文章在讲到EAP与上位机通讯时,因本人疏忽,提到一个地方有误----本文就不再介绍控制器程序部分EAP的配置,其配置与本文IO的配置同理 . 下位机(控制器)EAP的配置有些许不同,需要设置AMS ...
- 倍福ads通讯软件_倍福TwinCAT ADS通讯-高级语言.ppt
倍福TwinCAT ADS通讯-高级语言 * ADS组件库文件组成简介 ADS组件库集成在TwinCAT软件中,安装任何版本的TwinCAT软件都包含ADS通讯组件,如果用户希望在没有安装TwinCA ...
- matlab与倍福,倍福|TwinCAT|自动化软件-倍福展示最新版TwinCAT 3.1自动化软件
倍福展示最新版TwinCAT 3.1自动化软件 2012年11月20-22日,Beckhoff在2012德国纽伦堡国际电气自动化系统及元件展览会上展示了其3.1版本的TwinCAT自动化软件.该软件的 ...
- 【Ethercat机器人控制系统开发】倍福Twincat入门教程
[Ethercat机器人控制系统开发]倍福Twincat入门教程(一) 一. 简介 1. 倍福,Twincat与Ethercat简要介绍 1. 1 倍福Beckhoff简介 1. 2 Twincat简 ...
- 倍福TwinCAT无法添加ADS路由的排查方法
如果发现 ADS 路由不通了,依次检查 3 个环节: 1,是否 Ping 得通 2,是否广播得到 3,是否加得上路由 在不同环节遇阻,可能有不同的原因和相应的处理办法,下面依次说明. New: 7 附 ...
- Qt调用倍福TwinCAT通讯模块(TcAdsDll)
Qt实现TwinCAT通讯 目前这种方式是通过调用TwinCAT提供的AdsApi与倍福PLC通讯的.要求本机安装TwinCAT(无需作为主机,但是可能这个api依赖TwinCAT的一些服务). 关于 ...
- 如何卸载twincat3_倍福TwinCAT(贝福Beckhoff)常见问题(FAQ)-如何让不同的PLC程序分线程运行 TC3...
右击Tasks,添加一个新的Task 可以为这个线程设置自定义的扫描周期 然后在项目上右击添加Referenced Task 在TaskSub1上右击添加现有项,把之气写好的PRG程序绑定 ...
- 倍福TwinCAT(贝福Beckhoff)基础教程1.1 TwinCAT背景知识
本节附件中有很多PPT介绍贝福TwinCAT和EtherCAT的相关技术,在此只做简单说明. 简单总结:EtherCAT就是一种总线技术,具有速度快,稳定性高,布线简单等优点,详细可以参考下面这个PP ...
- 倍福TwinCAT(贝福Beckhoff)基础教程6.1 TwinCAT如何与高级语言通讯
因为使用TwinCAT的人用途不同,重视点就不同.如果用来代替传统PLC+HMI做项目的,很少会需要用到跟高级语言通讯,但是如果是用来做运动控制平台如做机器人运动控制器的,就肯定会用到.不管是否用得上 ...
最新文章
- 【C++】运算符重载
- 美团/力扣(647)--回文字串
- MySQL month()函数
- CentOS 7 / RHEL 7 systemd 指令
- python 计时_Python time clock()方法
- shell条件检查原理:command echo ‘success‘ || echo ‘error‘
- 鸿蒙手表升级计划,鸿蒙升级第一夜,服务器崩了!各机型升级排期表来了
- 设计模式之模板模式(模板方法)
- FIT2CLOUD飞致云面试总结
- bochs镜像java模拟器_bochs镜像下载
- Luogu 1606 [USACO07FEB]白银莲花池Lilypad Pond
- Python+OpenCV手势识别Mediapipe(基础篇)
- 浅谈DM数据库优化常识
- [附源码]java毕业设计领导干部听课评课管理系统
- 如何用word 2007在指定页插入页码和页眉页脚?
- CVE-2010-0188漏洞点定位
- Vim位置标记mark详解
- google map v3离线版地图
- 【XSY2689】王子 - 网络流
- vue3 引入天地图