倍福TwinCAT ADS通讯:变量读写


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() 方法

	//read
	bool bTest1 = (bool)tcAdsClient.ReadAny(pHandle_bool1, typeof(Boolean));//read by handle
	short nTest1 = (short)tcAdsClient.ReadAny(pHandle_int1, typeof(short));//read by handle
	int dintTest1 = (int)tcAdsClient.ReadAny(pHandle_dint1, typeof(int));//read by handle
	double dfTest1 = (double)tcAdsClient.ReadAny(pHandle_lreal1, typeof(double));//read by handle
	string strTest1 = (string)tcAdsClient.ReadAny(pHandle_str1, typeof(string), new int[] { 11 });//read by handle
 	float fTest1 = (float)tcAdsClient.ReadAny(pHandle_array_real1, typeof(float));
 	MyStruct1 StructTest1 = (MyStruct1)tcAdsClient.ReadAny(pHandle_complexStruct1, typeof(MyStruct1))
	//数组读写方式1,readany
	float[] arrfTest1 = (float[])tcAdsClient.ReadAny(pHandle_array_real1, typeof(float[]), new int[] { 4 });//read by handle
	Console.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;
    }
}
  • 7
    点赞
  • 62
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
倍福Twincat电子齿轮是一种高性能的工业自动化设备,它通过提供精确的位置和速度同步控制来驱动机械系统中的齿轮传动。 该电子齿轮的核心是Twincat软件平台,它提供了一个强大的编程环境,使工程师能够轻松地完成控制逻辑的开发和调试。与传统的机械齿轮相比,倍福Twincat电子齿轮具有更高的精度和可靠性,同时还能提供更灵活的控制方式。 倍福Twincat电子齿轮采用了先进的同步驱动技术,通过与传感器和执行器的配合,可以实现非常精准的位置和速度控制。它具有高速响应、低延迟和快速调整的优势,使得在工业生产中的高速运动和精确定位都可以得到满足。 除了驱动机械系统中的齿轮传动外,倍福Twincat电子齿轮还可以与其他设备和系统进行无缝集成。它支持多种通信接口和协议,如以太网、CAN总线等,可以与PLC、人机界面和上位机等设备进行联网控制和数据交互。 在现代工业生产中,倍福Twincat电子齿轮广泛应用于食品加工、汽车制造、机器人控制等领域。它能够提高生产效率、降低运行成本,并且具有很强的可扩展性和适应性,可以根据实际需求进行灵活的配置和扩展。 总之,倍福Twincat电子齿轮是一种功能强大、性能卓越的工业自动化设备,通过提供精确的位置和速度控制,可以满足现代工业生产对高速运动和精确定位的需求。同时,它还具备灵活的控制方式和强大的集成能力,能够与其他设备和系统实现无缝连接,为工业生产提供全方位的解决方案。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值