目录
一. 环境:Win10专业版(i7处理器,intel网卡)+VS Community 2017+TC3
备注:如果在虚拟机中安装,参考官方文档《TwinCAT3软件版本管理指南》2.2.1 通过虚拟机管理开发环境
备注:在TC中开发c++程序模块,需要添加网卡适配器驱动,以及windows的sdk/安装证书,操作过程需要参考官方文档《TwinCAT3 C++/Simulink教程》
备注:官方文档非常丰富,强烈建议学习。倍福虚拟学院: 课程类别 (beckhoff.com.cn)
刚接触TwinCAT3的小伙伴多多看看视频课程以及文档资料!!!
正常安装即可。
备注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下实现实时内核的问题
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加个插件。
备注:下面的步骤都是基于“本地连接”,没有单独的主机、从机,即在同一台pc机上实现TC的plc程序和VS的c++程序通信(ads通信)
1. 依次选择FILE->NEW->Project
2.按照下图依次点击
3.试用版授权激活
在不连接网络的情况下,可以根据实际需求重复激活使用。TwinCAT3 开发环境可以自动检测项目中所需要的授权,并且在运行项目的时候进行提示,比如当项目在本地或者目标控制器中被激活的时候,会提示那些试用版授权应该被激活。具体步骤如下:
备注:下图是已经激活后的图
(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++程序和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。
文章浏览阅读1.1w次,点赞6次,收藏3次。com.alibaba.dubbo.remoting.TimeoutException: Waiting server-side response timeout by scan timer.超时异常:等待服务响应超时。出现这个问题的分析:1,jar包依赖问题,没有成功引入依赖。2,服务提供方打了断点,导致代码执行堵塞,响应超时。3,服务端后台代码报错导致服务没有被成功调用(..._com.alibaba.dubbo.remoting.timeoutexception: waiting server-side response ti
文章浏览阅读883次。title: 利用Gh0st 3.6远程溢出漏洞反向控制攻击者comments: truetoc: truecategories:[Metasploit][Exp]tags:MetasploitOverflowGh0stdate: 2020-01-12 18:30:10abbrlink: 30568前言漏洞验证在2017年被公开,实际上Gh0st溢出漏洞在2009..._gh0st漏洞
文章浏览阅读206次。## 一. 内容1. swap 是一个有趣的函数。原本它只是STL的一部分,后面成为异常安全性编程的重要支柱(见条款29),以及处理自我赋值的常见机制(见条款11)。swap如此有用,考虑其合理的实现变得十分重要。2. 所谓 swap(置换),就是将两个对象的值彼此赋值给对方。3. 默认情况下,swap 可以交给 标准程序库提供的 swap 算法完成,其典型实现正如预期。 ```cpp namespace std{ template void swap(............_effective c++ 条款25
文章浏览阅读2.5k次,点赞3次,收藏9次。1 .LNMP环境一键安装脚本1.1 要求可编译也可yum安装,最终显示phpinfo信息:修改nginx默认端口为8000修改nginx的连接数为10240修改nginx的默认首页启动每个服务前,需要先检测服务是否存在1.2 脚本内容如下:#!/bin/bashnginx_install() { if [ -f /root/nginx-1.18.0.tar.gz ];then echo "nginx源码包存在,开始解压..." cd /root_不依赖zabbix,脚本监控
文章浏览阅读2.2k次。关于mybatisPlus多数据源的一点小小的记录_mybatis plus多数据源 @primary
文章浏览阅读2.6k次,点赞2次,收藏17次。成熟度模型是一次性评估,效能度量是持续、定期的度量_devops成熟度模型
文章浏览阅读2.4k次,点赞4次,收藏21次。一、枚举语法的定义枚举(enum)是一种数据类型,它的语法定义格式为:enum枚举名{枚举元素1,枚举元素2,......};例如,一个星期有七天,使用枚举法进行定义为:enum Day{ Mon,Tue,Wed,Thu,Fri,Sat,Sun};需要注意的是,第一个枚举元素的默认值为0,后面的枚举元素的值在上一枚举元素的值上加1。因此,Mon=0,Tue=1,Wed=2,Thu=3,Fri=4,Sat=5,Sun=6.但是,在定义枚举类型时,可以改..._c语言枚举
文章浏览阅读982次,点赞20次,收藏21次。产品所在工位推动气缸缩回,缩回到位后升降气缸下降,下降到 位后检测LED灯闪烁,4s后,升降气缸上升,上升到位后推动气缸伸出,结果指示灯点亮(当检测结果为优良品时,绿灯常亮,当检测结果为废品时,红灯常亮,当检测为合格品时,红色和绿色指示灯交替闪烁)。1.程序正常运行过程中,若触发安全光栅,工业机器人速度降至当前速度的50%,降速超过6s,工业机器人停止运行。完成后,机器人回到安全点,暂停。4.按下 “开始”按钮,根据初次检测结果完成产品的入库工作,优良品的产品放入成品区,完成后机器人放下工具,回安全点。_机器人拾取吸盘工具到物料区拾取物料并判断将合格品放到原料区不合格品放到回
文章浏览阅读1.6k次。时间序列数据库KDB 与Java结合使用介绍 -- 3 基于KDB JDBC的写入实现_kdb支持sql吗
这篇文章讲述了RGB颜色处理的方法,包括使用numpy和matplotlib库来处理图像,使用LAB色彩空间进行处理。
文章浏览阅读129次。C++内存分区模型文章目录C++内存分区模型前言一、代码区和全局区1、代码区2、全局区二、栈区和堆区1.栈区2.堆区三、new操作符总结前言C++程序在执行时,将内存大方向相划分为4个区域:代码区:存放函数体的二进制代码,有操作系统进行管理全局区:存放全局变量和静态变量以及常量栈区: 由编译器自动分配和释放,存放函数的参数值,局部变量等堆区: 由程序员分配和释放,若程序员不释放,程序结束时由操作系统回收内存四区的意义: 不同区域存放的数据,赋予不同的生命周期,给我们更大的灵活_c++的内存分区模型
文章浏览阅读7.7k次。缺省情况下如果你的测试环境下在浏览器输入地址:http://localhost/如果你的文件根目录里有 index.html,index.php,浏览器就会显示 index.html的内容,如果没有 index.html,浏览器就会显示文件根目录的目录列表,目录列表包括文件根目录下的文件和子目录。同样你输入一个虚拟目录的地址:http://localhost/b/如_使用localhost进行浏览,显示apache网页,不显示文件目录