1.引入倍福的TWINCAT的文件
引用--管理NUGET程序包--搜索Twincat--选择这个包安装
2.安装完成后,写一个倍福ADS通讯操作类
using System;
using System.Collections;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Timers;
using TwinCAT.Ads;
namespace SIC上位.BeckoffHelp
{
public class BHelp
{
/// <summary>
/// 创建Ads对象
/// </summary>
public TwinCAT.Ads.TcAdsClient _adsClient = new TcAdsClient();
///// <summary>
///// 定义连接PLC的AMSNetID
///// </summary>
public string string_AmsNetID = "";
///// <summary>
///// 定义连接PLC的端口号
///// TwinCAT2,端口号801;TwinCAT3,端口号为851
///// </summary>
public int iPort = 851;
////public int iPort = 851;
/// <summary>
/// PLC连接成功的标志
/// </summary>
public bool bConnectToBeckhoffOK = false;
public ArrayList notificationHandles = new ArrayList();
public void ADS()
{
_adsClient = new TcAdsClient();
}
/// <summary>
/// 连接到PLC
/// </summary>
public void ConnectPLC()
{
try
{
_adsClient.Connect(string_AmsNetID, iPort);
//_adsClient.Connect(iPort);
bConnectToBeckhoffOK = true;
}
catch
{
bConnectToBeckhoffOK = false;
}
}
/// <summary>
/// 断开PLC
/// </summary>
public void DisConnectPLC()
{
_adsClient.Dispose();
}
/// <summary>
/// 读取int类型的变量,非实时刷新
/// </summary>
/// <param name="PlcVariableName"></param>
/// <returns></returns>
public int ReadInt(string PlcVariableName)
{
int dresult = 0;
try
{
int iHandleTemp = _adsClient.CreateVariableHandle(PlcVariableName);
dresult = (int)(_adsClient.ReadAny(iHandleTemp, typeof(int)));
_adsClient.DeleteVariableHandle(iHandleTemp);
}
catch { return 0; }
return dresult;
}
/// <summary>
/// 读取string类型的变量,非实时刷新
/// </summary>
/// <param name="PlcVariableName"></param>
/// <returns></returns>
public char[] Readchar(string PlcVariableName)
{
char[] dresult = { };
try
{
int iHandleTemp = _adsClient.CreateVariableHandle(PlcVariableName);
dresult = (char[])(_adsClient.ReadAny(iHandleTemp, typeof(char[])));
_adsClient.DeleteVariableHandle(iHandleTemp);
}
catch { }
return dresult;
}
/// <summary>
/// 读取string类型的变量,非实时刷新
/// </summary>
/// <param name="PlcVariableName"></param>
/// <returns></returns>
public string Readstring(string PlcVariableName)
{
string dresult = "";
try
{
int iHandleTemp = _adsClient.CreateVariableHandle(PlcVariableName);
dresult = _adsClient.ReadAny(iHandleTemp, typeof(string), new int[] { 80 }).ToString();
_adsClient.DeleteVariableHandle(iHandleTemp);
}
catch { }
return dresult;
}
/// <summary>
/// 读取float类型的变量,非实时刷新
/// </summary>
/// <param name="PlcVariableName"></param>
/// <returns></returns>
public float Readfloat(string PlcVariableName)
{
float dresult;
try
{
int iHandleTemp = _adsClient.CreateVariableHandle(PlcVariableName);
dresult = (float)(_adsClient.ReadAny(iHandleTemp, typeof(float)));
_adsClient.DeleteVariableHandle(iHandleTemp);
}
catch { return 0; }
return dresult;
}
/// <summary>
/// 读取short类型的变量,非实时刷新
/// </summary>
/// <param name="PlcVariableName"></param>
/// <returns></returns>
public short Readshort(string PlcVariableName)
{