目录
一. 环境:Win10专业版(i7处理器,intel网卡)+VS Community 2017+TC3
一. 环境:Win10专业版(i7处理器,intel网卡)+VS Community 2017+TC3
备注:如果在虚拟机中安装,参考官方文档《TwinCAT3软件版本管理指南》2.2.1 通过虚拟机管理开发环境
备注:在TC中开发c++程序模块,需要添加网卡适配器驱动,以及windows的sdk/安装证书,操作过程需要参考官方文档《TwinCAT3 C++/Simulink教程》
备注:官方文档非常丰富,强烈建议学习。
倍福虚拟学院: 课程类别 (beckhoff.com.cn)
刚接触TwinCAT3的小伙伴多多看看视频课程以及文档资料!!!
- 安装VS2017
正常安装即可。
备注1:旧的TC3.1支持Win10和VS2015,如果安装的是2017及以上版本,则安装TC3.1时会集成VS2013shell,此环境无法开发c++和matlab程序,但是能够运行这些程序。
备注2:安装顺序:安装VS->安装TC;卸载顺序:卸载TC->卸载VS
备注3: 最新的TC3下载地址,最高支持VS2019。
Software | 倍福 中国
备注4:本文介绍了TwinCAT的安装、简单使用、PLC以及与c++程序的ads通讯。参考了倍福虚拟学院的官方文档,大家可以在倍福虚拟学院中找到。
二、开启虚拟化,关闭超频。
在安装之前要配置一下主板的BIOS:
关闭
Hyper-Threading
的功能打开
Intel VirtualizationTechnology Extensions (VT-x)
功能
,这个主要是因为关系到TC3在wind下实现实时内核的问题
三、安装TC3.1
1.双击打开TC31-Full….exe文件
2.等待,然后点击next
3.许可协议点击accept,点击next
4.点击next
5. 点击next
我的电脑系统中已经装了vs2015,所以会显示下图。因为我TC3属于旧版本,暂时不支持vs2017及以上版本,如果vs版本再高,旧版本的TC3就只能集成一个vs2013的内核。最新的版本可以安装vs2017/vs2019。
勾选2015,next
6.点击Install,开始安装
安装过程,需要等待时间较久:
选择“安装”
7.点击Finish
8.点击Yes,重启电脑
9.完成重启后,开机进入桌面后,会自动出现TC的画面,然后消失,这是正常开机自启动画面。桌面右下角会出现TC的图标。
单击打开选项,选择如下图,打开TC界面。
10.界面如下
备注:TC的实际界面其实就是VS的界面,安装TC相当于给VS加个插件。
四、新建PLC项目
备注:下面的步骤都是基于“本地连接”,没有单独的主机、从机,即在同一台pc机上实现TC的plc程序和VS的c++程序通信(ads通信)
1. 依次选择FILE->NEW->Project
2.按照下图依次点击
3.试用版授权激活
在不连接网络的情况下,可以根据实际需求重复激活使用。TwinCAT3 开发环境可以自动检测项目中所需要的授权,并且在运行项目的时候进行提示,比如当项目在本地或者目标控制器中被激活的时候,会提示那些试用版授权应该被激活。具体步骤如下:
- 点开 SYSTEM 下的 License
备注:下图是已经激活后的图
(2)在菜单中有 4 个选项
Order Information(Runtime):试用版和正版激活选项
Manager Licenses:可以手动勾选所需要的 licenses
Project Licenses:当前项目所用到的 licenses
Online Licenses:激活过的 licenses 或者曾经激活过的 licenses
(3)首先选择 Manager Licenses,在 Add License 中勾选所需要的 License
(4)之后回到 Order information 选型,点击 Activate 7 Days Trial License,随后会
弹出验证码方框,输入 5 位验证码,大小写有区分
备注:手动输入,复制粘贴无效
(5)输入正确后点击 OK 会弹出窗口告知 7 天的试用版 license 已经生成,这样
我们就可以有 7 天的授权可以用,如果过期了再次用同样的方法激活就可以了
4.新建PLC测试程序
-
项目文件夹下找到
,右键选择添加新项
(2)选择 Standard PLC Project,并把名称改成英文,例如下图中的‘test’
(3)找到主程序MIAN(PRG)
双击点开可以发现有上下两块,分别代表变量声明区和程序代码区
在变量声明区(上面的区域)定义一个名称为BOOL1的BOOL型变量,并赋予其地址“AT %MD0”
在程序代码区中输入一个“;”(相当于return)
备注:%MD0是双字节地址,声明布尔量是用%MX0.0比较好
(4)程序写好后右键 xxxx Project,选择 Build
(5)编译结果如下,主要看Output中的结果,是否是成功
(6)如果(8)步执行不了,请先执行(6)、(7)步。
在TwinCAT安装目录下找到win8settick.bat文件,右键选择管理员方式运行,可能会弹出命令窗口,也可能窗口闪退,不用管,然后重启。
(7)桌面右下角将System切换到Start模式,类似PLC的RUN模式。(默认是Config模式)
(8)激活配置,弹出的窗口点确定、确定。
软件右下角出现绿色动态图标,代表正常。
(9)点击Login
如果端口没有应用,则会弹出创建窗口,确认即可。
五、新建c++项目
这里的c++程序和TwinCAT3中的通讯是
ADS通讯
。
1.创建c++控制台项目,正常创建即可。
2.右键项目文件夹名,选择属性,打开配置窗口。
3.配置属性→链接器→常规→附加库目录→输入目录名称(C:\TwinCAT\AdsApi\TcAdsDll\x64\lib,这是安装Twincat的通讯库函数的默认路径)。(根据实际需要选择x64,x86则去掉 \x64 )
4. 再依次添加:链接器→输入→附加依赖项,输入文件名“TcAdsDll.lib”,点击确定。
5. 还需要将头文件进行声明,将C:\TwinCAT\AdsApi\TcAdsDll\Include目录下的 “TcAdsDef.h”和 “TcAdsAPI.h” 先后声明在头文件中(先声明TcAdsDef.h文件,不然编译报错)。程序代码如下。
#include <iostream>//标准的输入输出流头文件
#include <conio.h> //控制台输入输出头文件
#include <windows.h> //windowsAPI的函数声明和宏
#include "C:\TwinCAT\AdsApi\TcAdsDll\Include\TcAdsDef.h" //结构体和常量的声明
#include "C:\TwinCAT\AdsApi\TcAdsDll\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;
}
6.
调试
控制台输出0,表示通信成功,并读取到plc中的bool变量;
向控制台输入1,可以观察到plc中的bool变量的值变成true。