win10系统下TwinCAT3与VS2019之间的ADS通信

2023-05-16

@WIN10, TwinCAT3, VS2019, ADS
转博后第一次出差,来到了UnitedImaging,这次的任务是负责在ros系统和TwinCAT3之间的 ADS 通信。
作为本次第一篇博客,先跑通win10系统下TwinCAT3与VS2019之间的ads通信。
本文在PLC中设置一个BOOL量,通过c++控制台来读取和写入该值,从而实现第一步的通信读写。

TwinCAT3 TcXaeShell程序编写

  1. 首先安装TwinCAT3 ,倍福的网站:

     https://tr.beckhoff.com.cn/course/view.php?id=136
    

这里面有完整的介绍。

  1. 选择一个简单的实例,这里我跑了一下倍福的教程通过c++程序读取/写入PLC程序中的布尔量,该任务实现分为两部分:1)在TwinCAT程序下编写PLC的程序;2)在vs2019下编写c++程序。

TwinCAT PLC 程序编写

首先进行PLC程序的编写,本节分为三部分1)如何新建一个项目;2)程序代码的介绍和编写;3)如何调试。

如何新建项目

1.新建project
打开下载好的TwinCAT3 TcXaeShell,点击文件->新建->项目,如下图所示,选择TwinCAT Projects下的TwinCAT XAE Project,设置好项目名称和路径,注意路径中不要出现中文
新建项目

添加新项

在项目中找到PLC,(如下图所示)右键添加新项,选择Standard PLC Project,命名成PLC_TEST1,点击添加,这样我们的项目就建好了。outline
在这里插入图片描述

  1. 编写第一个程序
    在左侧解决方案资源管理器中PLC->PLC_TEST1->PLC_TEST1 Project->POUs,里面已经有了主程序MIAN(PRG)
    双击点开可以发现有上下两块,分别代表变量声明区程序代码区

在变量声明区(上面的区域)定义一个名称为BOOL1的BOOL型变量,并赋予其地址“AT %MD0”,

PROGRAM MAIN
VAR
BOOL1 AT %MD0 : BOOL;
END_VAR

在程序代码区中输入一个“;”(相当于return)

;

在这里插入图片描述
3. 程序调试
在调试前先以管理员身份运行C:\TwinCAT\3.1\System下面的 win8settick.bat,上方有三个小图标,左边楼梯一样的代表激活,中间绿色方框代表run,右边蓝色代表退出run。
首先把鼠标选择到PLC_TEST1 Project右键点击生成,这样就Build了代码,然后点击楼梯一样的小图标activate项目,最后点击绿色图标程序就开始运行了。

在这里插入图片描述
然后点击登录到(这个绿色的箭头),表示你的程序接入了通信网络
在这里插入图片描述

在这里插入图片描述
到这里我们的PLC程序编写以及运行已经OK了,接下来就进行C++的编写。

Vs 2019程序环境配置

首先要保证TwinCAT3和Vs2019 同属于一个平台 x86或者x64,这里选择x64, 在给定的API里面有3个文件:TcAdsAPI.h,TcAdsDef.h和TcAdsDll.lib

  1. 配置环境
    包含目录:包含.h文件的路径
    库目录:包含.lib
    在这里插入图片描述链接器
    库目录:lib文件目录
    在这里插入图片描述
    输入:TcAdsDll.lib
    在这里插入图片描述
  2. 编写程序
    首先新建控制台项目,如下图所示,新建项目PLCConsole

在这里插入图片描述

  1. 编写程序
    主程序中输入如下代码

#include //标准的输入输出流头文件
#include <conio.h> //控制台输入输出头文件
#include <windows.h> //windowsAPI的函数声明和宏
#include “TcAdsDef.h” //结构体和常量的声明
#include “TcAdsAPI.h” // ADS函数的声明
#include <conio.h>
#include <stdio.h>
using namespace std;
int main()
{
long nErr, nPort; //定义端口变量
AmsAddr Addr; //定义AMS地址变量
PAmsAddr pAddr = &Addr; //定义端口地址变量
bool BOOL1; //定义布尔量
nPort = AdsPortOpen(); //打开ADS通讯端口
nErr = AdsGetLocalAddress(pAddr); //得到本地端口地址
if (nErr) std::cerr << "Error: AdsGetLocalAddress: " << nErr << ‘\n’; //检查获取地址的操作是否执行成功
pAddr->port = 851; //将指针指向851端口
do
{
//向PLC中读取BOOL量
nErr = AdsSyncReadReq(pAddr, 0x4020, 0x0, 0x1, &BOOL1); //从ADS服务器同步读取数据,pAddr:ADS设备的地址,0x4020:段地址,0x0偏移地址,0x1:数据长度,@BOOL1:接收数据的缓存
if (nErr) std::cerr << "Error: AdsSyncReadReq: " << nErr << ‘\n’; //检查获取地址的操作是否执行成功
cout << BOOL1 << ‘\n’; //输出”BOOL1”的值
//在控制台上输出BOOL:
cin >> BOOL1; //为BOOL1赋值
nErr = AdsSyncWriteReq(pAddr, 0x4020, 0x0, 0x1, &BOOL1); //同步写数据到ADS设备,pAddr:ADS设备的地址,0x4020:段地址,0x0偏移地址,0x1:数据长度,@BOOL1:接收数据的缓存
if (nErr) cerr << "Error: AdsSyncWriteReq: " << nErr << ‘\n’; //检查获取地址的操作是否执行成功
} while (_getch() == ‘\r’); //用do-while语句来实现循环读取
nErr = AdsPortClose(); //关闭ADS通讯端口
if (nErr) std::cerr << "Error: AdsPortClose: " << nErr << ‘\n’; //检查关闭通讯端口的操作是否执行成功
return 1;
}

  1. 编译程序并运行
    编译程序并运行,首先观察PLC程序中BOOL1的值是FALSE
    在这里插入图片描述
    运行PLCConsole,显示值为0,说明成果读取BOOL1的值是FALSE(也就是0)
    在这里插入图片描述

接下来在控制台中输入1并回车
在这里插入图片描述
这个时候已经把BOOL1的值写入给了PLC程序,进入PLC程序去看看吧~
在这里插入图片描述
果然被改成了TRUE,通信成功!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

win10系统下TwinCAT3与VS2019之间的ADS通信 的相关文章

  • boost库介绍以及使用

    C 43 43 boost库介绍以及使用 一 什么是boost库 boost 库是一个优秀的 xff0c 可移植的 xff0c 开源的 C 43 43 库 xff0c 它是由 C 43 43 标准委员会发起的 xff0c 其中一些内容已经成
  • 内存映射文件

    内存映射文件 本文给出了一种方便实用的解决大文件的读取 存储等处理的方法 xff0c 并结合相关程序代码对具体的实现过程进行了介绍 引言 文件操作是应用程序最为基本的功能之一 xff0c Win32 API和MFC均提供有支持文件处理的函数
  • 如何在Eclipse中使用Ruby开发工具(RDT)插件进行Ruby开发

    一 为什么使用Ruby xff1f 现在 xff0c 为什么众多的Java开发者都关注Ruby xff1f Ruby xff0c 是10年以前在日本创建的一种通用目的脚本语言 xff0c 这是一种纯面向对象的语言 不同于 Java技术 xf
  • Open eyes in your life

    读到几个故事 xff0c 希望和大家分享 一 成功无捷径 Be proactive 一个青年职员平时工作懒懒散散 xff0c 在转正前一个月他问老板 xff1a 如果我兢兢业业工作一个月 xff0c 我能转正吗 xff1f 老板答道 xff
  • Ruby菜鸟必读http://blog.csdn.net/leasun/archive/2004/06/16/9836.aspx

    作者 xff1a William Djaja Tjokroaminata 目录 资源 1 利用警告信息 2 交互式命令解释器 xff08 Interactive shell xff09 3 联机文档 4 Class method 5 从字符
  • 毕业生收入最高的前30所大学排行榜

    毕业生收入最高的前30所大学排行榜 1 北大 123023 2 清华 118712 3 北邮 98712 4 中科大 87623 5 西电 82312 6 南京大学 78620 7 北理工 76228 8 外交学院 75667 9 国际关系
  • 世界500强面试题(情商部分)

    情商 xff08 1 xff09 1 什么书中毛病最多 xff1f 2 为什么好马不吃回头草 xff1f 3 什么东西说 父亲 是不会相碰 xff0c 叫 爸爸 时却会碰到两次 xff1f 4 农夫养10头牛 xff0c 只有19只角 xf
  • 苏浙差距!江苏经济何以难敌浙江http://bbs.icxo.com/dispbbs.asp?boardID=1894&ID=100323&page=1

    进入21世纪 xff0c 江苏经济虽然也以高于全国平均速度在增长 xff0c 但以民间资本为主的浙江经济则以高于江苏经济增长速度在发展 更为引人注目的是 xff0c 2004年下半年起 xff0c 依靠外力和政府强势推动的江苏出现了边际生产
  • 公司注册流程

    项目 xff1a 首先你要明白经商成功与否的关键在于是否有一个好的项目 xff0c 而不在于没有本钱 xff0c 怎么找到一个好项目 这个因人而异 xff0c 因地而异 xff0c 不能作具体讨论 基本上要根据你自身的综合的特点来选择行业和
  • 安卓高级xml布局(一)高级输入框EditText设计

    安卓高级xml布局 xff08 一 xff09 高级输入框EditText设计 转载请注明来源 代码连接 http download csdn net detail androidmsky 9274037 欢迎加安卓开发交流群 xff1a
  • SIP协议详解

    SIP协议基本介绍 背景介绍 Internet的许多应用都需要建立和管理一个会话 xff0c 会话在这里的含义是在参与者之间的数据的交换 由于考虑到参与者的实际情况 xff0c 这些应用的实现往往是很复杂的 xff1a 参与者可能是在代理间
  • STL容器的适用情况(转)

    原文 xff1a http hsw625728 blog 163 com blog static 3957072820091116114655254 vector 典型的序列容器 xff0c C 43 43 标准严格要求次容器的实现内存必须
  • 嵌入式STM32入门之STM32中断——点灯实验、串口通信

    STM32中断实验 一 前言二 实验要求三 中断介绍四 CuBe实现中断点灯 xff08 1 xff09 新建工程 xff08 2 xff09 设置管脚 xff08 3 xff09 设置NVIC xff08 4 xff09 配置中断优先级
  • 制作个人网站 之 人生进度条

    来源 xff1a 仿照 uTools里的人生进度条插件用页面的形式写出 目的 xff1a 做个人网站的目的就是把看到的变成自己实现的案例 这些值由后台数据库获取 这里写死了 你的名字 你打算活到几岁 你的生日 时钟为罗盘时钟 在jq插件网找
  • 从零入门激光SLAM(六)——ROS常用工具箱

    大家好呀 xff0c 我是一个SLAM方向的在读博士 xff0c 深知SLAM学习过程一路走来的坎坷 xff0c 也十分感谢各位大佬的优质文章和源码 随着知识的越来越多 xff0c 越来越细 xff0c 我准备整理一个自己的激光SLAM学习
  • STM32串口收发处理

    STM32串口收发 STM32的串口接收和发送方式都有三种情况 xff0c 即轮询 中断和DMA xff0c 俩俩组合便有9种可能的组合 下面挑出其中三种收发方式进行研究 xff0c 以及优缺点比较 一 中断接收 轮询发送 xff0c 无缓
  • STM32学习笔记一(LED,跑马灯,呼吸灯)

    本人是初学者 xff0c 水平有限 xff0c 写个简单的学习笔记方便大家参考 xff0c 同时也方便自己查缺补漏 STM32学习一 1 点亮板上的LED小灯 首先 xff0c 我们在点灯之前还要看看LED的硬件连接 看到硬件电路后 xff
  • 打造企业级网络请求框架集合retrofit+gson+mvp(一、二)

    本文是企业级网络框架第二篇主要讲MVP模式和Gson在Retrofit网络请求框架下的使用方式 xff08 已更新为一篇 xff09 对MVP不了解的请看 梦之鬼索MVP模式在Android中的设计和实现 http blog csdn ne
  • Python解析GPGGA报文_统计数据完整率

    相信很多人在拿到一款新的GNSS接收机的时候 xff0c 都在想如何评估这个设备的性能 评估GNSS设备性能的方法很多 xff0c 如统计GGA的固定率 数据完整率 连续运行时间的稳定性等等 下面我们就从数据的完整率来入手分析GNSS接收机
  • 头文件中只能声明变量不能定义变量 而声明变量必须带extern,为什么头文件中变量的声明都没有加

    xfeff xfeff 1 头文件中不可以放变量的定义 xff01 一般头文件中只是放变量的声明 xff0c 因为头文件要被其他文件包含 include xff0c 如果把定义放在头文件的话 xff0c 就不能避免多次定义变量 C 43 4

随机推荐

  • 三轴磁力计解算姿态(四元数)

    原理 根据地磁场向量在水平面上的投影来计算载体的偏航角 xff0c 类似于加速度计解算姿态 xff0c 不同在于磁场易受干扰 xff0c 且只能得到偏航角 方法 假设导航坐标系为东北天 xff0c 载体坐标系为右前上 初始载体坐标系和导航坐
  • VRPN的使用

    VRPN是作为一个设备服务的角色 根据自己的设备来配置VRPN xff0c 随后就能够以标准方式 xff0c 非常容易的连接到该服务来获取自己设备的数据 VRPN是跨平台的 xff0c 可以再许多OS上运行 xff0c 包括Windows
  • Keil调试局部变量显示"not in scope"的问题解决

    今天在调试程序的时候 xff0c 发现函数返回值赋值给变量时 xff0c 变量值总是显示 34 not in scope 34 xff0c 无法看到变量被赋的值 出现这种情况的原因是这个局部变量没被分配到内存 xff0c 或者变量被编译器优
  • STM32串口中断的方式发送

    我将其改为真正的中断发送 步骤一 xff1a 初始化GPIO GPIO InitTypeDef GPIO InitStructure GPIO InitStructure GPIO Pin 61 GPIO Pin 10 LED1 PC10
  • 可综合的异步fifo设计(一)

    异步FIFO设计 一 基本概念二 设计思路2 1 设计前准备工作2 1 1 系统框图2 1 2 格雷码基础2 1 3 异步fifo工作流程举例2 1 4 异步fifo空满标志产生的算法设计 2 2 RTL建模2 2 1 DPRAM建模2 2
  • Unity学习(六):Unity中的实例化炮弹并设置速度

    1 static function Instantiate original Object position Vector3 rotation Quaternion Object 可用于prefab的拷贝 Instantiates 10 c
  • Unity学习(十一): Unity中的NetWork使用

    先说一下一些基本概念吧 xff01 复习复习 NAT 穿透技术 NAT 即Network Address Translation xff0c 可译为网络地址转换或网络地址翻译 网络地址转换 NAT Network Address Trans
  • ubuntu提示opengl版本过低-Gallium0.4 on llvmpipe(llvm 3.8 128bits)

    在ubuntu14 04下写GLSL xff0c 需要GLSL 4 0 以上的支持 xff0c 但是编译运行的时候 xff0c 提示我opengl和glsl版本过低 xff0c 只支持1 3 我xx xff0c 我用的卡是Geforce G
  • C#中的继承规则

    1 继承可传递 C从B派生 B从A派生 xff0c 则C不仅继承了B中的成员 xff0c 同时也获得了A中的成员 Object类为所有类的基类 2 派生类是对基类的扩展 xff0c 可以添加新成员 xff0c 但不能除去已经继承的成员的定义
  • 安卓自定义View文章数据滚动显示数值

    本文已经在微信公众号 Android群英传 发表 未经允许不得转载 转载请注明作者AndroidMsky及原文链接 http blog csdn net androidmsky article details 53009886 本文Gith
  • 场景管理方法之BVH介绍

    总结一下最近学习BVH的知识 BVH全称 xff1a Bounding volume hierarchy 这是一种用来管理3D场景中物体的方法 我主要是在光线追踪算法中用这个方法来做加速 xff0c 因为光线追踪算法的计算要求非常高 xff
  • C++ :error LINK2005:函数XXX已经在main.obj中定义--解决方法

    我的情况是这样的 xff1a 我在头文件中定义了一个函数 xff0c 然后这个函数被其他函数引用 但是编译的时候死活通不过 xff0c 一直报错 xff1a error LINK2005 xff0c 费了好大力气 才解决 include 3
  • unity解决快速运动物体碰撞检测穿透问题

    在Unity中 xff0c 快速移动的物体在与其他物体进行碰撞检测时 xff0c 可能会穿透 比如子弹和墙壁的碰撞检测 如何解决这个问题呢 xff1f 网上看了下 xff0c 有说Rigidbody修改continus的 xff0c 但是我
  • leetcode33题解_Search in Rotated Sorted Array

    题意 xff1a 要在一个排好序的但是旋转过的序列中找给定的数字 xff08 通常的题目是 xff0c 比如 xff1a 1 xff0c 2 xff0c 3 xff0c 4 xff0c 5 xff0c 6 xff0c 7 找这组序列中是否有
  • 回溯算法的理解与使用

    最近在做题的过程中发现很多我不会的题目的解决方法都使用了回溯算法的思想 xff0c 说明我对这个算法目前掌握的还不够牢固 xff0c 因此今天花时间来好好了解这个算法 回溯算法是一种算法思想 xff0c 而递归则是具体的代码结构 就我的学习
  • Kmeans基本思想以及和SVM的区别

    由于最近要用到该算法 xff0c 但是发现算法的思想基本忘掉了 xff0c 只知道是聚类算法 xff0c 因此又回头去学习了一番 xff0c 记录下学习的感受 xff0c 方便以后复习 Kmeans算法的基本思想 xff1a 看如下图 xf
  • HTTPConnection与JSON应用实例

    JSON xff1a 一种轻量级的数据交换格式 JSONObject xff1a 一个json对象 包含一对儿 Key Value 数值 xff0c 在Key和Value之间是以逗号 分隔 JSONStringer xff1a json文本
  • VS(Visual Studio)与VC(Visual C++)对应关系

    opencv 2 4 10 gt vc10 vc11 vc12 opencv 2 4 13 gt vc11 vc12 opencv 3 4 0 gt vc14 vc15 opencv 3 4 1 gt vc14 vc15 Visual St
  • 如何在win10下用Anaconda安装gym(强化学习)

    默认已经安装好Anaconda和pycharm 配置libssl 1 1 x64 ddl libcrypto 1 1 x64 dll 把路径 Anaconda3 Library bin 下面的文件复制到路径 Anaconda3 DLLs 下
  • win10系统下TwinCAT3与VS2019之间的ADS通信

    64 WIN10 TwinCAT3 VS2019 ADS 转博后第一次出差 xff0c 来到了UnitedImaging xff0c 这次的任务是负责在ros系统和TwinCAT3之间的 ADS 通信 作为本次第一篇博客 xff0c 先跑通