1.新建项目并引用TwinCAT动态链接库
2.引用类,并编写倍福控制的相关对象
using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using TwinCAT.Ads;
namespace Project_V1._001_Data
{
public class Beckhoff_PLC
{
#region 基本对象定义
/// <summary>
/// 创建Ads对象
/// </summary>
public static TwinCAT.Ads.TcAdsClient _adsClient = new TcAdsClient();
/// <summary>
/// 定义连接PLC的AMSNetID
/// </summary>
public static string string_AmsNetID = "192.168.0.122.1.1";
/// <summary>
/// 定义连接PLC的端口号
/// TwinCAT2,端口号801;TwinCAT3,端口号为851
/// </summary>
//public static int iPort = 801;
public static int iPort = 851;
/// <summary>
/// PLC连接成功的标志
/// </summary>
public static bool bConnectToBeckhoffOK = false;
public static ArrayList notificationHandles = new ArrayList();
#endregion
#region 函数定义
/// <summary>
/// 连接到PLC
/// </summary>
public static void ConnectPLC()
{
try
{
//_adsClient.Connect(string_AmsNetID, iPort);
_adsClient.Connect(iPort);
bConnectToBeckhoffOK = true;
}
catch
{
bConnectToBeckhoffOK = false;
}
}
/// <summary>
/// 读取double类型的变量,非实时刷新
/// </summary>
/// <param name="PlcVariableName"></param>
/// <returns></returns>
public static double ReadDouble(string PlcVariableName)
{
double dResult = 0;
try
{
int iHandleTemp = _adsClient.CreateVariableHandle(PlcVariableName);
dResult = (double)(_adsClient.ReadAny(iHandleTemp, typeof(double)));
_adsClient.DeleteVariableHandle(iHandleTemp);
}
catch { return 0; }
return dResult;
}
/// <summary>
/// 根据PLC变量名,写PLC变量
/// </summary>
/// <param name="PlcVariableName"></param>
/// <param name="dResult"></param>
public static void WriteVariable(string PlcVariableName, double dResult)
{
try
{
int iHandleTemp = _adsClient.CreateVariableHandle(PlcVariableName);
_adsClient.WriteAny(iHandleTemp, dResult);
_adsClient.DeleteVariableHandle(iHandleTemp);
}
catch { }
}
/// <summary>
/// 根据PLC变量名,写PLC变量
/// </summary>
/// <param name="PlcVariableName"></param>
/// <param name="dResult"></param>
public static void WriteVariable(string PlcVariableName, bool bResult)
{
try
{
int iHandleTemp = _adsClient.CreateVariableHandle(PlcVariableName);
_adsClient.WriteAny(iHandleTemp, bResult);
_adsClient.DeleteVariableHandle(iHandleTemp);
}
catch { }
}
#endregion
}
}
3.主程序中直接调用倍福控制类
using System;using System.Collections;using System.Collections.Generic;using System.Linq;using System.Text;using TwinCAT.Ads;
namespace Project_V1._001_Data{ public class Beckhoff_PLC {
#region 基本对象定义 /// /// 创建Ads对象 /// public static TwinCAT.Ads.TcAdsClient _adsClient = new TcAdsClient();
/// /// 定义连接PLC的AMSNetID /// public static string string_AmsNetID = “192.168.0.122.1.1”;
/// /// 定义连接PLC的端口号 /// TwinCAT2,端口号801;TwinCAT3,端口号为851 /// //public static int iPort = 801; public static int iPort = 851;
/// <summary> /// PLC连接成功的标志 /// </summary> public static bool bConnectToBeckhoffOK = false;
public static ArrayList notificationHandles = new ArrayList(); #endregion
#region 函数定义 /// <summary> /// 连接到PLC /// </summary> public static void ConnectPLC() { try { //_adsClient.Connect(string_AmsNetID, iPort); _adsClient.Connect(iPort); bConnectToBeckhoffOK = true; } catch { bConnectToBeckhoffOK = false; } }
/// <summary> /// 读取double类型的变量,非实时刷新 /// </summary> /// <param name="PlcVariableName"></param> /// <returns></returns> public static double ReadDouble(string PlcVariableName) { double dResult = 0; try { int iHandleTemp = _adsClient.CreateVariableHandle(PlcVariableName); dResult = (double)(_adsClient.ReadAny(iHandleTemp, typeof(double))); _adsClient.DeleteVariableHandle(iHandleTemp); } catch { return 0; } return dResult; }
/// <summary> /// 根据PLC变量名,写PLC变量 /// </summary> /// <param name="PlcVariableName"></param> /// <param name="dResult"></param> public static void WriteVariable(string PlcVariableName, double dResult) { try { int iHandleTemp = _adsClient.CreateVariableHandle(PlcVariableName); _adsClient.WriteAny(iHandleTemp, dResult); _adsClient.DeleteVariableHandle(iHandleTemp); } catch { } }
/// <summary> /// 根据PLC变量名,写PLC变量 /// </summary> /// <param name="PlcVariableName"></param> /// <param name="dResult"></param> public static void WriteVariable(string PlcVariableName, bool bResult) { try { int iHandleTemp = _adsClient.CreateVariableHandle(PlcVariableName); _adsClient.WriteAny(iHandleTemp, bResult); _adsClient.DeleteVariableHandle(iHandleTemp); } catch { } }
#endregion
}}