六种通信库与西门子S7-1200PLC进行通信测试
六种通信库与西门子S7-1200PLC进行通信测试
dian_gon
专业电工电气领域自媒体,不容错过。电工电气学习必关注,我们始终专注于电工电气行业全方位信息,与您分享干货,助力行业发展!
自动化行业,正在慢慢往软件行业靠近。 西门子PLC通信一直都是很多人感兴趣的话题。 本文主要以C#作为编程语言,结合目前市场上常用的6种通信库,分别与西门子S7-1200PLC进行通信测试,并对测试结果进行分享。 通信库简介 一、S7.NET 简介:S7.NET是一款开源的S7协议通信库,支持西门子S7通信。 二、Sharp7 简介:Sharp7与S7.NET一样,是一款.NET版本的S7通信库。 三、Snap7 简介:Snap7是一个开源的C++通信库,支持西门子S7通信。 四、Prodave 简介:Prodave是官方提供的通信库,支持西门子PLC各种方式通信。 五、HslCommunication 简介:HslCommunication是一个商业通信库,涵盖各种不同设备的通信。 六、xktComm 简介:xktComm是一个工业通信库,涵盖西门子、欧姆龙、三菱、基恩士等PLC,也支持Modbus及OPC通信。 测试编写
1、首先创建了几个变量,便于随时修改,实现不同功能测试。
[td]| 1 | ReadLength | 读取字节长度 | 200 |
| 2 | Timers | 循环读取次数 | 100 |
| 3 | IpAddress | PLC的IP地址 | 192.168.1.33 |
2、针对各个通信库编写通信代码
一、S7.NET-
Console.WriteLine("S7.NET通信测试开始");
-
objS7net = new Plc(CpuType.S71200, IpAddress, 0, 0);
-
try
-
{
-
objS7net.Open();
-
Console.WriteLine("S7.NET连接成功");
-
sw.Restart();
-
Count = 0;
-
for (int i = 0; i < Times; i++)
-
{
-
byte[] res = objS7net.ReadBytes(DataType.Memory, 0, 0, ReadLength);
-
if (res != null && res.Length == ReadLength)
-
{
-
Count++;
-
}
-
else
-
{
-
Console.WriteLine("S7.NET通信测试读取失败");
-
}
-
}
-
Console.WriteLine("S7.NET通信测试结束,耗时:" + (sw.ElapsedMilliseconds / Convert.ToSingle(Times)).ToString());
-
}
-
catch (Exception)
-
{
-
Console.WriteLine("S7.NET连接失败");
}
-
Console.WriteLine("Sharp7通信测试开始");
-
int result = objSharp7.ConnectTo(IpAddress, 0, 0);
-
if (result == 0)
-
{
-
Console.WriteLine("Sharp7连接成功");
-
sw.Restart();
-
for (int i = 0; i < Times; i++)
-
{
-
byte[] buffer = new byte[65535];
-
result = objSharp7.MBRead(0, ReadLength, buffer);
-
if (result > 0)
-
{
-
Console.WriteLine("Sharp7通信测试读取失败");
-
}
-
else
-
{
-
Count++;
-
}
-
}
-
Console.WriteLine("Sharp7通信测试结束,耗时:" + (sw.ElapsedMilliseconds / Convert.ToSingle(Times)).ToString());
-
}
-
else
-
{
-
Console.WriteLine("Sharp7连接失败");
}
-
Console.WriteLine("Snap7通信测试开始");
-
int operateResult = objSnap7.ConnectTo(IpAddress, 0, 0);
-
if (result == 0)
-
{
-
Console.WriteLine("Snap7连接成功");
-
sw.Restart();
-
for (int i = 0; i < Times; i++)
-
{
-
byte[] buffer = new byte[65535];
-
result = objSnap7.MBRead(0, ReadLength, buffer);
-
if (result > 0)
-
{
-
Console.WriteLine("Snap7通信测试读取失败");
-
}
-
else
-
{
-
Count++;
-
}
-
}
-
Console.WriteLine("Snap7通信测试结束,耗时:" + (sw.ElapsedMilliseconds / Convert.ToSingle(Times)).ToString());
-
}
-
else
-
{
-
Console.WriteLine("Snap7连接失败");
-
}
-
Console.WriteLine("Prodave通信测试开始");
-
short ConNr = 63;
-
string AccessPoint = "S7ONLINE";
-
Prodave6.CON_TABLE_TYPE ConTable;
-
int ConTableLen = System.Runtime.InteropServices.Marshal.SizeOf(typeof(Prodave6.CON_TABLE_TYPE));
-
int RetValue;
-
List<byte> list = new List<byte>();
-
foreach (var item in IpAddress.Split(’.’))
-
{
-
list.Add(Convert.ToByte( item));
-
}
-
list.Add(0);
-
list.Add(0);
-
ConTable.Adr = list.ToArray();
-
// Type of address: MPI/PB (1), IP (2), MAC (3)
-
ConTable.AdrType = 2;
-
ConTable.SlotNr = 0;
-
ConTable.RackNr = 0;
-
RetValue = Prodave6.LoadConnection_ex6(ConNr, AccessPoint, ConTableLen, ref ConTable);
-
if (RetValue == 0)
-
{
-
Console.WriteLine("Prodave连接成功");
-
sw.Restart();
-
for (int i = 0; i < Times; i++)
-
{
-
byte[] pReadBufferM2 = new byte[(uint)ReadLength];
-
uint pDatLen = 0;
-
RetValue = Prodave6.field_read_ex6(Prodave6.FieldType.M, 0, 0, (uint)ReadLength, (uint)ReadLength, pReadBufferM2, ref pDatLen);
-
if (RetValue > 0)
-
{
-
Console.WriteLine("Prodave通信测试读取失败");
-
}
-
else
-
{
-
Count++;
-
}
-
}
-
Console.WriteLine("Prodave通信测试结束,耗时:" + (sw.ElapsedMilliseconds / Convert.ToSingle(Times)).ToString());
-
}
-
else
-
{
-
Console.WriteLine("Prodave连接失败");
-
}
-
Console.WriteLine("HslCommunication通信测试开始");
-
objHsl = new SiemensS7Net(SiemensPLCS.S1200, IpAddress);
-
var operate = objHsl.ConnectServer();
-
if (operate.IsSuccess)
-
{
-
Console.WriteLine("HslCommunication连接成功");
-
sw.Restart();
-
for (int i = 0; i < Times; i++)
-
{
-
operate = objHsl.Read("M0", (ushort)ReadLength);
-
if (operate.IsSuccess)
-
{
-
Count++;
-
}
-
else
-
{
-
Console.WriteLine("HslCommunication通信测试读取失败");
-
}
-
}
-
Console.WriteLine("HslCommunication通信测试结束,耗时:" + (sw.ElapsedMilliseconds / Convert.ToSingle(Times)).ToString());
-
}
-
else
-
{
-
Console.WriteLine("HslCommunication连接失败");
-
}
-
Console.WriteLine("xktComm通信测试开始");
-
if (objxktComm.Connect(IpAddress, CPU_Type.S71200, 0, 0))
-
{
-
Console.WriteLine("xktComm连接成功");
-
sw.Restart();
-
Count = 0;
-
for (int i = 0; i < Times; i++)
-
{
-
byte[] res = objxktComm.ReadBytes(StoreType.Marker, 0, 0, ReadLength);
-
if (res != null && res.Length == ReadLength)
-
{
-
Count++;
-
}
-
else
-
{
-
Console.WriteLine("xktComm通信测试读取失败");
-
}
-
}
-
Console.WriteLine("xktComm通信测试结束,耗时:" + (sw.ElapsedMilliseconds / Convert.ToSingle(Times)).ToString());
-
}
-
else
-
{
-
Console.WriteLine("xktComm连接失败");
-
}
免责声明:本文转自网络,版权归原作者所有,如涉及作品版权问题,请及时与我们联系删除,谢谢!
猜您喜欢
◆ 75例经典电气控制接线图、电子元件工作原理图,学会不求人!
◆ 新八级工制度考核下放到单位,电工“技师”们到底有多狂?
◆ 适合电工初学及提高自身技能的6本书推荐
◆ 惨!不验电,当场触电死亡!
◆ 致命的插线板!乌鲁木齐10死9伤原因查明!用完不拔插头,这个习惯很多人都有……
◆ 维修电工的最高境界,就是要猜车间主任的心,绝对胜过学技术
推荐阅读
:
西门子S7-1500与欧姆龙安全PLC的TCP/IP通讯
,
戳下方
“
阅读原文”
-
2023年血糖新标准公布,不是3.9-6.1,快来看看你的血糖正常吗? 2023-02-07
-
2023年各省最新电价一览!8省中午执行谷段电价! 2023-01-03
-
GB 55009-2021《燃气工程项目规范》(含条文说明),2022年1月1日起实施 2021-11-07
-
PPT导出高分辨率图片的四种方法 2022-09-22
-
2023年最新!国家电网27家省级电力公司负责人大盘点 2023-03-14
-
全国消防救援总队主官及简历(2023.2) 2023-02-10
-
盘点 l 中国石油大庆油田现任领导班子 2023-02-28
-
我们的前辈!历届全国工程勘察设计大师完整名单! 2022-11-18
-
关于某送变电公司“4·22”人身死亡事故的快报 2022-04-26
