倍福TwinCAT ADS通讯:变量读写

2024-08-22 05:08

本文主要是介绍倍福TwinCAT ADS通讯:变量读写,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

文章目录

  • 1、PLC变量类型对应C#变量
  • 2、读写任意类型变量
    • 2.0 官方例程
    • 2.1、TcAdsClient类 ReadAny() 方法
    • 2.2、TcAdsClient类 WriteAny()方法
  • 3、对上面ReadAny()、WriteAny()方法 做一些集成
    • 3.1、使用泛型
    • 3.2、使用List泛型 - 实现PLC变量的批量读写


1、PLC变量类型对应C#变量

C# 基本数据类型,值类型隐式继承自System.ValueType->System.Object
基本类型占用字节
在这里插入图片描述

PLC变量C#
BOOLbool
INTshort
UINTushort
DINTint
UDINT(包括时间类型TIME)uint
REALfloat
LREALdouble
STRING(80)string, new int[] { 80 }
ARRAY[0…3] OF REALfloat[], new int[]{ 4 }
结构体结构体(考虑字节对齐问题)

2、读写任意类型变量

2.0 官方例程

TwinCAT 3 -> TE1000 XAE -> Technologies ->ADS -> TwinCAT ADS
在这里插入图片描述

2.1、TcAdsClient类 ReadAny() 方法

	//readbool bTest1 = (bool)tcAdsClient.ReadAny(pHandle_bool1, typeof(Boolean));//read by handleshort nTest1 = (short)tcAdsClient.ReadAny(pHandle_int1, typeof(short));//read by handleint dintTest1 = (int)tcAdsClient.ReadAny(pHandle_dint1, typeof(int));//read by handledouble dfTest1 = (double)tcAdsClient.ReadAny(pHandle_lreal1, typeof(double));//read by handlestring strTest1 = (string)tcAdsClient.ReadAny(pHandle_str1, typeof(string), new int[] { 11 });//read by handlefloat fTest1 = (float)tcAdsClient.ReadAny(pHandle_array_real1, typeof(float));MyStruct1 StructTest1 = (MyStruct1)tcAdsClient.ReadAny(pHandle_complexStruct1, typeof(MyStruct1))//数组读写方式1,readanyfloat[] arrfTest1 = (float[])tcAdsClient.ReadAny(pHandle_array_real1, typeof(float[]), new int[] { 4 });//read by handleConsole.Write("=====结果=====:");Console.Write("\n{0}\n{1}\n{2}\n{3}\n{4}\n", bTest1, nTest1, dintTest1, dfTest1, strTest1);for (int i = 0; i < 4; i++){Console.Write("{0} ",arrfTest1[i]);}

2.2、TcAdsClient类 WriteAny()方法

3、对上面ReadAny()、WriteAny()方法 做一些集成

3.1、使用泛型

/// <summary>
/// ReadAny<T> 泛型方法 实现
/// </summary>
/// <typeparam name="T">PLC数据类型,BOOL->bool, INT->short, REAL->float, LREAL->double 。</typeparam>
/// <param name="plcVariableName">plc变量名,字符串类型。</param>
/// <param name="Args">0:单个PLC变量; >0:PLC变量的字符串字符个数或数组元素个数。</param>
/// <returns>返回PLC变量值</returns>
public T ReadAny<T>(string plcVariableName, int Args = 0)
{if (base.ClientIsConnected){try{int varHandle = this.tcAdsClient.CreateVariableHandle(plcVariableName);if (Args != 0)//是数组类型 或 字符串类型{return (T)this.tcAdsClient.ReadAny(varHandle, typeof(T), new int[] { Args });//read by handle}else//单个变量{return (T)this.tcAdsClient.ReadAny(varHandle, typeof(T));}}catch (Exception){return default(T);throw;}}else{return default(T);//throw new Exception("base.ClientIsConnected 没有连接");}
}
/// <summary>
///  WriteAny<T> 泛型方法 实现
/// </summary>
/// <typeparam name="T">PLC数据类型,BOOL->bool, INT->short, REAL->float, LREAL->double 。</typeparam>
/// <param name="plcVariableName">plc变量名,字符串类型。</param>
/// <param name="value">写入的值。</param>
/// <param name="Args">0:单个PLC变量; >0:PLC变量的字符串字符个数或数组元素个数。</param>
/// <returns>true:写成功。</returns>
public bool WriteAny<T>(string plcVariableName, T value, int Args = 0)
{if (base.ClientIsConnected){try{int varHandle = this.tcAdsClient.CreateVariableHandle(plcVariableName);if (Args != 0)//是数组类型 或 字符串类型{this.tcAdsClient.WriteAny(varHandle, value, new int[] { Args });}else//单个变量{this.tcAdsClient.WriteAny(varHandle, value);}return true;}catch (Exception){    throw;}}else{return false;// throw new Exception("base.ClientIsConnected 没有连接");}
}

3.2、使用List泛型 - 实现PLC变量的批量读写

/// <summary>
/// 批量读取 PLC变量值
/// </summary>
/// <typeparam name="T">PLC变量类型</typeparam>
/// <param name="plcVariableName">PLC 变量名</param>
/// <param name="args">0:单个变量,>0:数组/字符串型PLC变量元素个数</param>
/// <returns>.NET 批量访问变量列表</returns>
public List<T> ReadAnyBatch<T>(List<string> plcVariableName, int args = 0)
{List<T> result = new List<T>();try{foreach (var item in plcVariableName){result.Add(ReadAny<T>(item, args));}return result;}catch (Exception){return result;throw;//读PLC变量失败}
}/// <summary>
/// 批量写
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="plcVariableName"></param>
/// <param name="value"></param>
/// <param name="args"></param>
/// <returns></returns>
public bool WriteAnyBatch<T>(List<string> plcVariableName, T value, int args = 0)
{try{foreach (var item in plcVariableName){if (WriteAny<T>(item, value, args) !=true){return false;//写PLC变量失败  }}return true;}catch (Exception){throw;}
}

这篇关于倍福TwinCAT ADS通讯:变量读写的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1095327

相关文章

SpringBoot中@Value注入静态变量方式

《SpringBoot中@Value注入静态变量方式》SpringBoot中静态变量无法直接用@Value注入,需通过setter方法,@Value(${})从属性文件获取值,@Value(#{})用... 目录项目场景解决方案注解说明1、@Value("${}")使用示例2、@Value("#{}"php

ShardingProxy读写分离之原理、配置与实践过程

《ShardingProxy读写分离之原理、配置与实践过程》ShardingProxy是ApacheShardingSphere的数据库中间件,通过三层架构实现读写分离,解决高并发场景下数据库性能瓶... 目录一、ShardingProxy技术定位与读写分离核心价值1.1 技术定位1.2 读写分离核心价值二

GO语言短变量声明的实现示例

《GO语言短变量声明的实现示例》在Go语言中,短变量声明是一种简洁的变量声明方式,使用:=运算符,可以自动推断变量类型,下面就来具体介绍一下如何使用,感兴趣的可以了解一下... 目录基本语法功能特点与var的区别适用场景注意事项基本语法variableName := value功能特点1、自动类型推

MySQL中读写分离方案对比分析与选型建议

《MySQL中读写分离方案对比分析与选型建议》MySQL读写分离是提升数据库可用性和性能的常见手段,本文将围绕现实生产环境中常见的几种读写分离模式进行系统对比,希望对大家有所帮助... 目录一、问题背景介绍二、多种解决方案对比2.1 原生mysql主从复制2.2 Proxy层中间件:ProxySQL2.3

Spring Boot中的路径变量示例详解

《SpringBoot中的路径变量示例详解》SpringBoot中PathVariable通过@PathVariable注解实现URL参数与方法参数绑定,支持多参数接收、类型转换、可选参数、默认值及... 目录一. 基本用法与参数映射1.路径定义2.参数绑定&nhttp://www.chinasem.cnbs

c++ 类成员变量默认初始值的实现

《c++类成员变量默认初始值的实现》本文主要介绍了c++类成员变量默认初始值,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧... 目录C++类成员变量初始化c++类的变量的初始化在C++中,如果使用类成员变量时未给定其初始值,那么它将被

C#读写文本文件的多种方式详解

《C#读写文本文件的多种方式详解》这篇文章主要为大家详细介绍了C#中各种常用的文件读写方式,包括文本文件,二进制文件、CSV文件、JSON文件等,有需要的小伙伴可以参考一下... 目录一、文本文件读写1. 使用 File 类的静态方法2. 使用 StreamReader 和 StreamWriter二、二进

MySQL主从复制与读写分离的用法解读

《MySQL主从复制与读写分离的用法解读》:本文主要介绍MySQL主从复制与读写分离的用法,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、主从复制mysql主从复制原理实验案例二、读写分离实验案例安装并配置mycat 软件设置mycat读写分离验证mycat读

Redis分片集群、数据读写规则问题小结

《Redis分片集群、数据读写规则问题小结》本文介绍了Redis分片集群的原理,通过数据分片和哈希槽机制解决单机内存限制与写瓶颈问题,实现分布式存储和高并发处理,但存在通信开销大、维护复杂及对事务支持... 目录一、分片集群解android决的问题二、分片集群图解 分片集群特征如何解决的上述问题?(与哨兵模

Python变量与数据类型全解析(最新整理)

《Python变量与数据类型全解析(最新整理)》文章介绍Python变量作为数据载体,命名需遵循字母数字下划线规则,不可数字开头,大小写敏感,避免关键字,本文给大家介绍Python变量与数据类型全解析... 目录1、变量变量命名规范python数据类型1、基本数据类型数值类型(Number):布尔类型(bo