全国服务热线:

15861139266

C#通过S7Plus协议访问S7-1200/1500中的符号变量_常州上位机培训_常州工业机器人培训
时间:2023-12-06 17:01:37 点击:1263 标签:

C#通过S7Plus协议访问S7-1200/1500中的符号变量

S7协议是西门子S7系列PLC内置的通信协议。我们使用C#、C++或者Python等高级编程语言开发的上位机如果想访问S7系列PLC的数据,那S7协议是最方便的。目前市面上也有很多开源或者闭源的基于S7的通信驱动,比如S7Net、NodeS7、Snap7等等。但是自S7-1200/1500开始,西门子将其内置的协议升级到了S7CommPlus。该协议支持以符号名访问PLC数据,并且全面支持通信过程的认证和数据加密,使其安全性得到了很大的提高。

S7CommPlus并非开放的协议。网上也有一些针对该协议的研究文章。但是S7CommPlus认证过程比较复杂,没有很扎实的网络通信基础很难分析出来,更别说基于它开发一个通信驱动了。幸运的是前一段时间无意中在网上发现了一个德国人封装的S7CommPlus通信驱动。前几天下载后抽空研究了下。本来没抱太大希望,但是运行起来连接到PLCSIM Advanced后发现竟然可以批量获取到PLC里面所有的标签名。

string HostIp;

int res;

Listreadlist = new List();

Console.WriteLine("程序启动......");

//设定目标PLC的IP

if (args.Length == 1)

{

     HostIp = args[0];

}

else

{

     HostIp = "192.168.0.10";

}


Console.WriteLine("连接至PLC: " + HostIp);


S7CommPlusConnection conn = new S7CommPlusConnection();

res = conn.Connect(HostIp);

if (res == 0)

{

     Console.WriteLine("连接成功!");

     Console.WriteLine("浏览标签......");

     // Variablenhaushalt auslesen

     Listvars = new List();

     res = conn.Browse(out vars);

}

看来所言非虚,不过连续运行一段时间后,发现通信非常不稳定,短则几十秒,长则3-5分钟就会掉一次线。

为了排除PLCSIM Advanced或者系统的问题,我又找了一台S7-1200PLC来测试。发现可以连接到CPU,但是无法获取标签名。想着是不是固件版本问题。将CPU的固件版本从4.4升级到4.5后终于可以获取到标签名称了。通过驱动的读标签值方法也可以获取到变量的值。

Console.WriteLine("读标签值......");foreach (var v in vars){     readlist.Add(new ItemAddress(v.AccessSequence));} Listvalues = new List(); Listerrors = new List(); //调用读标签值方法 res = conn.ReadValues(readlist, out values, out errors);


既然读写没问题,那么连续运行试下稳定性如何。一晚上没关机,第二天起来发现通信依然正常。检查应用程序的各项参数也都没啥问题,看来稳定性应该还行。不过经过对比,在数据刷新速度上,S7CommPlus比之前的S7明显慢了一些,不知道是否和中间的通信认证有关系。后面有时间再观察看看。

虽然我们使用OPC UA也可以通过标签名读写数据。但是通过TIA的硬件组态可以看出OPC UA迟早会收费。使用S7CommPlus就不会有这个顾虑了。



立即咨询
  • 品质服务

    服务贴心周到

  • 快速响应

    全天24小时随时沟通

  • 专业服务

    授权率高,保密性强

  • 完善售后服务

    快速响应需求,及时性服务

直播课程
电气类课程
上位机软件开发课
机器视觉软件开发课
深度学习
联系方式
电话:15861139266
邮箱:75607802@qq.com
地址:苏州吴中区木渎镇尧峰路69号
关注我们

版权所有:大林机器视觉培训所有 备案号:苏ICP备14016686号-9

本站关键词:上位机培训 机器视觉软件开发培训 上位机运动控制培训 深度学习培训 网站标签