1.引用添加TwinCAT.Ads.dll文件
(见资源)
2.使用命名空间
using TwinCAT.Ads;
3.声明
TcAdsClient tcAds = null;
4.定义
tcAds = new TcAdsClient();
5.连接端口
tcAds.Connect(801);// twincat2用的801,twincat3用的851
6.创建变量句柄
6.1 声明通信变量,不管目标类型是什么类型统一 用 int 类型声明,读取后再转换成目标类型
int v = 0;
6.2 建立联系
v = tcAds.CreateVariableHandle(".GVL.v");// .GVL.v 是PLC中的变量 twincat2 前面要加个点,twincat3则不需要
7.读变量的值 等号左边为上位机这边目标的类型,等号右边typeof中的类型对应 PLC中的类型。
7.1 bool类型
bool bVarible = Convert.ToBoolean(tcAds.ReadAny( v , typeof(bool)));
7.2 string类型(不包含中文(汉字和中文符号))
string str = tcAds.ReadAny( v , typeof(string), new int[] { 80 }).ToString();
7.3 float类型
float f = tcAds.ReadAny( v , typeof(float));
7.4 ushort类型
int i = Convert.ToInt32(tcAds.ReadAny( v , typeof(ushort)));
7.5 包含中文(汉字和中文符号)
AdsStream dataStream = new AdsStream(80);
AdsBinaryReader binaryReader = new AdsBinaryReader(dataStream);
dataStream.Position = 0; // 将流中的当前位置复位
tcAds.Read( v , dataStream);
//twincat2的用法如下:
string str = binaryReader.ReadPlcString(Convert.ToInt32(dataStream.Length));
//twincat3的用法如下:
string str = binaryReader.ReadPlcUnicodeString(Convert.ToInt32(dataStream.Length));
8 写入值 写入的值类型必须与PLC中的变量一致
8.1 string 类型(不包含中文(汉字和中文符号))
tcAds.WriteAny( v , "str", new int[] { 80 });//str为要写入的值
8.2 ushort 类型,float类型,bool类型。。。
类型 o = 值;
tcAds.WriteAny( v , o);
8.3 string 类型包含中文(汉字和中文符号)
AdsStream dataStream = new AdsStream();
AdsBinaryWriter binaryWriter = new AdsBinaryWriter(dataStream);
dataStream.Position = 0;
binaryWriter.WritePlcAnsiString("好的", 80);
tcAds.Write( v , dataStream );
//当向PLC写入值时,确保写入后再进行下一动作时可以使用AdsErrorCode配合TryWrite来写入值
AdsErrorCode errorcode = tcAds.TryWrite( v , dataStream, 0, 80);
if (errorcode == AdsErrorCode.NoError)
{
//接下来的行为。。。
}
9 删除句柄(联系)
tcAds.DeleteVariableHandle( v );
10 断开连接
tcAds.Disconnect();
tcAds.Dispose();