倍福TwinCAT3上位机与PLC通信测试(ADS通信) 包含C#和C++代码

倍福TwinCAT3上位机与PLC通信测试(ADS通信) 包含C#和C++代码

倍福TwinCAT3上位机与PLC通信测试(ADS通信) 包含C#和C++代码

本次测试需要环境:

VS2013,TwinCAT3(本人版本TC31-Full-Setup.3.1.4018.16)

代码:C#代码,PLC程序代码,C++代码(官方提供)

 测试部分:

 测试包含:bool类型,int类型,long类型,real类型,lreal类型,string类型,数组,以及结构体 部分测试(这里没有结构体嵌套)

PLC程序Main程序

基本类型部分

代码:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

PROGRAM MAIN

VAR

    BoolTest :BOOL;

    IntTest:INT;

    LongTest:DINT;

    SingleTest:REAL;

    DoubleTest:LREAL;

    StringTest:STRING;

    readstringlen:INT;

    plcstruc :plcstructure;

 

    plcarraytest:ARRAY[1..5] OF INT;

 

END_VAR

结构体程序部分

代码:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

TYPE  plcstructure :

STRUCT

    plcs1:BOOL;

    dummy1:BOOL;

    dummy2:BOOL;

    dummy3:BOOL;

     

    plcs2:INT;

    dummy4:INT;

     

    plcs3:DINT;

    plcs4:REAL;

    plcs5:LREAL;

 

END_STRUCT

END_TYPE

C#程序主界面

主界面代码包含按钮事件等

 

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
//引用Twincat.ads和Sustem.IO
using TwinCAT.Ads;
using System.IO;namespace writeread
{public partial class Form1 : Form{public Form1(){InitializeComponent();}//定义所需变量private bool  writebool =false;private bool  readbool=false ;private short  writeint = 0;private short  readint = 0;private int writelong = 0;private int readlong = 0;private float writereal = 0;private float readreal = 0;private double writelreal = 0;private double readlreal = 0;private string writestring = "";private string readstring = "";private int  stringlen = 0;//定义结构体类型public struct structtype{public  bool s1;public bool dummy1;public bool dummy2;public bool dummy3;public  short s2 ;public short dummy4;public  int s3 ;public  float s4;public  double s5 ;}//实例化结构体private  structtype structtest =new structtype ();//定义数组,含有五个元素private short[] arraytest = new short[5];//定义句柄变量private int hvar = new int();//通讯数据定义private TcAdsClient tcclient;//定义通讯协议private void Form1_Load(object sender, EventArgs e){//通讯协议tcclient = new TcAdsClient();//tcclient.Connect("控制器NetID",851)tcclient.Connect(851);}//writeboolprivate void button1_Click(object sender, EventArgs e){if (writebool == true){writebool = false;}else{writebool = true;}try{hvar = tcclient.CreateVariableHandle("MAIN.BoolTest");tcclient.WriteAny(hvar ,writebool );tcclient.DeleteVariableHandle(hvar);}catch (Exception err){}}//readboolprivate void button2_Click(object sender, EventArgs e){try{hvar = tcclient.CreateVariableHandle("MAIN.BoolTest");readbool = (bool)(tcclient.ReadAny(hvar, typeof(bool)));tcclient.DeleteVariableHandle(hvar);label1.Text = readbool.ToString();}catch (Exception err){}}//writeINt   plc int 对应c# shortprivate void button4_Click(object sender, EventArgs e){writeint =short.Parse (textBox2 .Text );try{hvar = tcclient.CreateVariableHandle("MAIN.IntTest");tcclient.WriteAny(hvar, writeint);tcclient.DeleteVariableHandle(hvar);}catch (Exception err){}}//readintprivate void button3_Click(object sender, EventArgs e){try{hvar = tcclient.CreateVariableHandle("MAIN.IntTest");readint = (short)(tcclient.ReadAny(hvar, typeof(short)));tcclient.DeleteVariableHandle(hvar);label2.Text = readint.ToString();}catch (Exception err){}}//writelongprivate void button6_Click(object sender, EventArgs e){writelong = int.Parse(textBox3.Text);try{hvar = tcclient.CreateVariableHandle("MAIN.LongTest");tcclient.WriteAny(hvar, writelong);tcclient.DeleteVariableHandle(hvar);}catch (Exception err){}}//readlongprivate void button5_Click(object sender, EventArgs e){try{hvar = tcclient.CreateVariableHandle("MAIN.LongTest");readlong = (Int32)(tcclient.ReadAny(hvar , typeof(Int32)));tcclient.DeleteVariableHandle(hvar);label3.Text = readlong.ToString();}catch (Exception err){}}//writerealprivate void button8_Click(object sender, EventArgs e){writereal = Single.Parse(textBox4.Text);try{hvar = tcclient.CreateVariableHandle("MAIN.SingleTest");tcclient.WriteAny(hvar , writereal);tcclient.DeleteVariableHandle(hvar);}catch (Exception err){}}//readrealprivate void button7_Click(object sender, EventArgs e){try{hvar = tcclient.CreateVariableHandle("MAIN.SingleTest");readreal = (float)(tcclient.ReadAny(hvar , typeof(float)));tcclient.DeleteVariableHandle(hvar);label4.Text = readreal.ToString();}catch (Exception err){}}//writelrealprivate void button10_Click(object sender, EventArgs e){writelreal = double.Parse(textBox5.Text);try{hvar = tcclient.CreateVariableHandle("MAIN.DoubleTest");tcclient.WriteAny(hvar, writelreal);tcclient.DeleteVariableHandle(hvar);}catch (Exception err){}}//readlrealprivate void button9_Click(object sender, EventArgs e){try{hvar = tcclient.CreateVariableHandle("MAIN.DoubleTest");readlreal = (double)(tcclient.ReadAny(hvar , typeof(double)));tcclient.DeleteVariableHandle(hvar);label5.Text = readlreal.ToString();}catch (Exception err){}}//writestring    按照ASCII码进行读写private void button12_Click(object sender, EventArgs e){writestring = textBox6.Text;stringlen = writestring.Length;try{hvar = tcclient.CreateVariableHandle("MAIN.StringTest");tcclient.WriteAny(hvar, writestring, new int[] { 80 });tcclient.DeleteVariableHandle(hvar);}catch (Exception err){}}//readstringprivate void button11_Click(object sender, EventArgs e){try{hvar = tcclient.CreateVariableHandle("MAIN.StringTest");readstring = tcclient.ReadAny(hvar, typeof(string), new int[] { 80 }).ToString();tcclient.DeleteVariableHandle(hvar);label6.Text = readstring;}catch (Exception err){}}//writestructprivate void button13_Click(object sender, EventArgs e){if (structtest.s1 == true){structtest.s1 = false;}else{structtest.s1 = true;}// structtest.s1 = bool.Parse(textBox7.Text);structtest.s2 = short.Parse(textBox8.Text);structtest.s3 = int.Parse(textBox9.Text);structtest.s4 = float.Parse(textBox10.Text);structtest.s5 = double.Parse(textBox11.Text);try{hvar = tcclient.CreateVariableHandle("MAIN.plcstruc");}catch (Exception err){MessageBox.Show("get hvar error");}AdsStream datastream = new AdsStream(24); //4+4+4+4+8=24BinaryWriter binwrite = new BinaryWriter(datastream);datastream.Position = 0;try{binwrite.Write(structtest.s1);binwrite.Write(structtest.dummy1 );binwrite.Write(structtest.dummy2);binwrite.Write(structtest.dummy3);binwrite.Write(structtest.s2);binwrite.Write(structtest.dummy4);binwrite.Write(structtest.s3);binwrite.Write(structtest.s4);binwrite.Write(structtest.s5);tcclient.Write(hvar, datastream);structtest.s1 = false;structtest.s2 = 0;structtest.s3 = 0;structtest.s4 = 0;structtest.s5 = 0;}catch (Exception err){MessageBox.Show("write value error");}try{tcclient.DeleteVariableHandle(hvar);}catch (Exception err){MessageBox.Show(" write delect hvar error");}}//readstructprivate void button14_Click(object sender, EventArgs e){try{hvar = tcclient.CreateVariableHandle("MAIN.plcstruc");}catch (Exception err){MessageBox.Show("get hvar error");}AdsStream datastream = new AdsStream(24);//4+4+4+4+8=24BinaryReader binread = new BinaryReader(datastream);datastream.Position = 0;try{tcclient.Read(hvar, datastream);structtest.s1 = binread.ReadBoolean();structtest.dummy1 = binread.ReadBoolean();structtest.dummy2 = binread.ReadBoolean();structtest.dummy3 = binread.ReadBoolean();structtest.s2 = binread.ReadInt16();structtest.dummy4 = binread.ReadInt16();structtest.s3 = binread.ReadInt32();structtest.s4 = binread.ReadSingle();structtest.s5 = binread.ReadDouble();label7.Text = structtest.s1.ToString();label8.Text = structtest.s2.ToString();label9.Text = structtest.s3.ToString();label10.Text = structtest.s4.ToString();label11.Text = structtest.s5.ToString();}catch (Exception err){MessageBox.Show("read value error");}try{tcclient.DeleteVariableHandle(hvar);}catch (Exception err){MessageBox.Show("read delect hvar error");}}//writearrayprivate void button15_Click(object sender, EventArgs e){arraytest[0] = short.Parse(textBox12.Text);arraytest[1] = short.Parse(textBox13.Text);arraytest[2] = short.Parse(textBox14.Text);arraytest[3] = short.Parse(textBox15.Text);arraytest[4] = short.Parse(textBox16.Text);try{hvar = tcclient.CreateVariableHandle("MAIN.plcarraytest");tcclient.WriteAny(hvar , arraytest);tcclient.DeleteVariableHandle(hvar);for (int i = 0; i < 5; i++){arraytest[i] = 0;}}catch (Exception err){}}//readarrayprivate void button16_Click(object sender, EventArgs e){try{hvar = tcclient.CreateVariableHandle("MAIN.plcarraytest");arraytest = (short[])(tcclient.ReadAny(hvar , typeof(short[]), new int[] { 5 }));tcclient.DeleteVariableHandle(hvar);label12.Text = arraytest[0].ToString();label13.Text = arraytest[1].ToString();label14.Text = arraytest[2].ToString();label15.Text = arraytest[3].ToString();label16.Text = arraytest[4].ToString();}catch (Exception err){}}private void Form1_FormClosing(object sender, FormClosingEventArgs e){if(tcclient !=null)tcclient.Dispose();}}
}

C++程序代码项目(注意红色框里面的路径是TwinCAT的安装路径)

测试结果:

上位机:

PLC程序:

PLC程序运行动图:

测试完毕!

 工程源文件下载地址

小伙伴们直接去这里下载:

点击下载

https://files.cnblogs.com/files/JiYF/%E5%80%8D%E7%A6%8FTwinCAT3%E4%B8%8A%E4%BD%8D%E6%9C%BA%E4%B8%8EPLC%E9%80%9A%E4%BF%A1%E6%B5%8B%E8%AF%95(ADS%E9%80%9A%E4%BF%A1)%E4%BE%8B%E5%AD%90%E4%BB%A3%E7%A0%81.rar

 注意事项:

string类型如果没有限定大小,默认是80个字符,在C#这里需要加一个字符为结束符也就是限定为81个字符

例如:

介绍:

分类: 08PLC相关技术

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/27755.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C#使用S7netPlus与PLC通讯(超简单)

前言 刚接到手一个项目&#xff0c;是开发一款程序&#xff0c;要和PLC有数据交互&#xff0c;如上图&#xff0c;设备发生故障后&#xff0c;PLC会发电报&#xff0c;我们收到电报后把故障显示出来&#xff0c;同时点击解除故障&#xff0c;也会给PLC发送相对应的电报。查了蛮…

C#与西门子PLC通信上位机程序

1.该程可以实现c#与西门子全系列plc(200smart&#xff0c;300&#xff0c;400&#xff0c;1200&#xff0c;1500)的以太网s7通讯&#xff0c;通讯传输快稳定。 2.该程序采用.dll动态链接库方式&#xff0c;是最近几年才出来的一种与西门子plc通讯的方式&#xff0c;本人经过几个…

C#中使用S7.net与西门子PLC通讯

最近因为工作的原因用到了西门子PLC&#xff0c;在使用过程中一直在思考上位机和PLC的通讯问题&#xff0c;后来上网查了一下&#xff0c;找到了一个专门针对S7开发的一个.net库–《S7netPlus》&#xff0c;PLC通讯方法比较多&#xff0c;所以也是在不断地学习中&#xff0c;以…

C#调用PCHMI与西门子PLC连接通讯

文章目录 一、PCHMI环境配置二、PCHMI连接S7&#xff08;PLC&#xff09;三、标签与按钮的使用总结 一、PCHMI环境配置 创建一个新项目 打开项目属性&#xff0c;更改输出路径为"bin\binexe"下 工具箱新建个选择卡&#xff0c;我们命名为PCHMI 鼠标右键【选择项】…

第三方调试助手的与S7-1200 PLC的通信

1、概述 西门子S7-1200 PLC支持多种协议通过以太网通讯方式&#xff0c;如OPC、TCP、S7、MODBUS-TCP等。TCP方式相比其它协议&#xff0c;具有更多的灵活性&#xff0c;更快的数据响应等优点&#xff0c; 需要PLC与电脑还有其他设备进行TCP通讯&#xff0c;使用TCP调试助手与…

TIA 博图 使用 S7通讯 Put Get 对两台PLC进行通讯

1.打开设备组态-属性-找到防护与安全&#xff1a; 把允许来自远程的PUT/GET 通讯访问✔&#xff0c;两台PLC都是这样&#xff0c;把组态下载进去。 2.设备与网络中&#xff0c;用端口1把两台设备连在一起&#xff1a; 两台设备需要在同一个网段里面 3.在PLC3新建一个DB块&#…

文心一言 VS 讯飞星火 VS chatgpt (23)-- 算法导论4.2 5题

五、V.Pan 发现一种方法&#xff0c;可以用 132 464 次乘法操作完成 68 x 68 的矩阵相乘&#xff0c;发现另一种方法&#xff0c;可以用 143 640 次乘法操作完成 70 x 70 的矩阵相乘&#xff0c;还发现一种方法&#xff0c;可以用155 424次乘法操作完成 72 x 72 的矩阵相乘。当…

【Python爬虫项目实战二】Chatgpt还原验证算法-解密某宝伪知网数据接口

目录 🐱背景🐱工具🐱分析流程🐔登陆分析🐔检索分析🐔模拟HTML代码请求🐔 解析HTML🐔 再次分析🐟分析js算法🐟 拿下furl🐟拿下sfname🐟拿下sfname🐔 构造请求🐔再次瓶颈🐔分析cookie🐟 成功演示🐱总结

[云炬python3玩转机器学习]6-2模拟梯度下降法

模拟梯度下降法 In [1]: import numpy as np import matplotlib.pyplot as plt import datetime;print (Run by CYJ,,datetime.datetime.now()) In [2]: plot_x np.linspace(-1., 6., 141) plot_xOut[2]: array([-1. , -0.95, -0.9 , -0.85, -0.8 , -0.75, -0.7 , -0.65…

OneFlow源码解析:静态图与运行时

作者&#xff5c;郑建华 更新&#xff5c;许啸宇、张文骁、成诚 OneFlow静态图的训练效率远高于动态图&#xff08;eager模式&#xff09;。本文试图通过一个简单例子&#xff0c;结合v0.8.0版本的代码&#xff0c;解读一下静态图和运行时的实现机制。 在开始之前&#xff0c;建…

infer源码阅读之yolo.cu

目录 yolo.cu注意事项一、2023/3/30更新前言1.宏定义2.Norm3.后处理3.1 affine_project3.2 decode3.2.1 decode_common3.2.2 decode_v8 3.3 nms3.4 invoker 4.预处理5.decode_mask6.AffineMatrix7.InferImpl7.1 adjust_memory7.2 preprocess7.3 load7.4 forwards 8.其它9.拓展之…

【爬虫实例】从B站和某论文网站分析python爬虫的一般编写思路———To someone

问题背景 好久没写爬虫了&#xff0c;前两天友人来问我python能不能爬论文&#xff0c;能不能告诉她爬虫的基本运行原理是什么&#xff0c;跑起来是什么样子。 我一看&#xff0c;论文爬取——爬虫最实用的场景之一&#xff0c;这不拿捏&#xff1f; 于是便尝试现场演示一番。…

【Metaverse系列一】元宇宙的奥秘

你有没有想过逃离闷热的会议室&#xff0c;瞬间移动到马尔代夫的沙滩上开会&#xff1f;开完会&#xff0c;纵身跳入大海和美人鱼捉迷藏。然后一个鲤鱼打挺直冲云霄&#xff0c;进入天宫一号开展科学研究&#xff0c;发现微重力环境下韭菜的长势喜人&#xff0c;而且在特定光照…

科大讯飞版ChatGPT测评:很好很强大

大家好&#xff0c;我是黄海广。 今天我体验到了科大讯飞版本的ChatGPT&#xff0c;这个产品凭借其强大的功能和出色的性能&#xff0c;超出了我对国产大模型的预期。 一、产品简介 这个模型全名叫讯飞星火认知大模型&#xff0c;官方是这么解释这个产品的&#xff1a; “科大讯…

七大语言模型PK,ChatGPT内容基线测评稳居第一

随着ChatGPT的爆火与流行&#xff0c;大型语言模型&#xff08;LLM&#xff09;与生成式人工智能&#xff08;AIGC&#xff09;不断跃入大众视野&#xff0c;随之也带来了许多内容风险隐患。 近日&#xff0c;知道创宇内容安全专家对互联网上流行的7款大型语言模型进行了全面和…

ChatGPT风靡全球,我们应该为未来感到担心吗?

近期&#xff0c;关于ChatGPT的话题再次引爆全网&#xff0c;不少用户加入到“玩疯了”的阵营中……有赞叹不已的、有表示惊奇的、有展示BUG的&#xff0c;但总体来说&#xff0c;ChatGPT的整体社交评价还是非常向好的。 微软CEO纳德拉就坦言&#xff0c;ChatGPT服务的风靡&…

库克考虑卸任苹果CEO,谁会是下一任接班人?

作者 | Carol 出品 | CSDN&#xff08;ID&#xff1a;CSDNnews&#xff09; 十年前&#xff0c;8 月 24 日那天&#xff0c;史蒂夫乔布斯宣布辞去苹果 CEO 一职&#xff0c;正式任命蒂姆库克成为苹果的新掌门人。如今&#xff0c;恰逢库克上任苹果 CEO 十周年。在今年4月份&…

历史上的今天:乔布斯辞去苹果CEO一职;Windows 95 发布

整理 | 王启隆 透过「历史上的今天」&#xff0c;从过去看未来&#xff0c;从现在亦可以改变未来。 今天是 2022 年 8 月 24 日&#xff0c;14 年前的今天&#xff0c;北京奥运会闭幕式举办&#xff0c;宣告圆满结束&#xff0c;为所有国人打上了一针强心剂。而在科技历史上&am…

最全盘点苹果高管团队 谁有可能成为下一代继任者?

编译&#xff5c;辰辰 出品&#xff5c;网易智能 随着苹果首席执行官蒂姆库克(Tim Cook)已经掌舵10年&#xff0c;他和高级副手们正将更多注意力放在培养公司新一代领导者上。 目前库克管理团队的成员都是在苹果工作20多年&#xff0c;已经赚到数千万美元、年龄在55岁至60岁左右…

行业报告 | AI+制造业赋能,机器视觉开启掘金新大陆(上)

原创 | 文 BFT机器人 01 核心要点 Al制造业赋能&#xff0c;META 发布 SAM 助力机器视觉迎来 GPT 时刻。 机器视觉技术使得工业设备能够“看到”它正在进行的操作并进行快速决策&#xff0c;完整机器视觉系统由硬件软件组成,分别进行成像和图像处理工作。 目前&#xff0c;以“…