当前位置:   article > 正文

C++上位软件通过Snap7开源库访问西门子S7-200/LOGO PLC/合信M226ES PLC V存储区的方法_snap7读写西门子s7系列plc

snap7读写西门子s7系列plc

前言

        在前面例程中谈到了C++ 通过Snap7开源库S7通信库跟西门子S7-1200PLC/S7-1500PLC以及合信CTMC M226ES PLC/CPU226 PLC通信的方式方法和应用例程。但是遗憾的是Snap7中根据官方资料显示只能访问PLC的 DB区、MB区、C区、T区 、I区、Q区,并没有提到有关如何访问S7-200/S7-200SMART/MT226ES/CPU226等200系列PLC的方式和方法。
       1、 以下为Snap7官方封装好的函数列表。

        2、以下为Snap7官方有关Snap7开源通信库访问PLC存储区的类型定义及数据长度说明。

        3、Snap7官方有关Snap7连接的机架号和PLC槽位号介绍。
        4、由以上可看出Snap7中并未介绍如何访问PLC V存储区的方式和方法,虽然Snap7并未介绍,但是Snap7是肯定支持此功能的,不然S7-200PLC和S7-200PLC之间的通信是如何实现的呢?本人使用三方设备也支持S7-200PLC 的S7通信,再有就是M226ES也支持S7主从站通信这个前面例程已经介绍过。感兴趣的可以看下本人下面这篇文章。

        https://blog.csdn.net/lzc881012/article/details/135356054?spm=1001.2014.3001.5501icon-default.png?t=N7T8https://blog.csdn.net/lzc881012/article/details/135356054?spm=1001.2014.3001.5501

        5、经过不屑的努力和查阅资料终于有了写的发现,正可谓功夫不负有心人。查阅了大量的资料后发现网上有关Snap7访问S7-200PLC V存储区的文章是几乎没有,要吗就是东扯一句西扯一句根本无法参考。

        

        6、饶了一圈最终回到了Snap7的官方说明手册,如上图所示的Overview中提到了LOGO 0BA7/0BA8两款PLC,应该是LOGO plc只有这两款支持Snap7,好像是说LOGO plc早期版本不带网络通信口,此时比较惊喜那就继续往下看。

        7、在Snap7官方手册的第76也找到了Logo PLC 的相关说明,顺着文章一直往下看。

        8、下面这段话非常重要,这里主要说的意思是HMI 设备和Snap7 都是通过DB1 来读写LOGO V存储区的。那就意味着LOGO/S7-200PLC的V存储区就是DB1。是不是恍然大悟?。惊不惊喜?意不意外?
        9、C++上位软件编程,编写方法这里不再介绍,可以参考前面两篇有关Snap7 的文章。
  1. #include <iostream>
  2. #include"snap7.h"
  3. #include <ctime>
  4. using namespace std;
  5. unsigned char Snap7Rcv[100];
  6. unsigned char Snap7RcvM226Es[100];
  7. unsigned char Snap7RcvM226Esvb[100];
  8. bool Snap7RcvM226EsBitS[100];
  9. TS7Client* mClient;
  10. void mSnap7GetDataFromS71200Db()
  11. {
  12. mClient = new TS7Client;
  13. mClient->ConnectTo("192.168.2.202", 0, 1);
  14. mClient->DBRead(9,0,100,&Snap7Rcv);
  15. mClient->Disconnect();
  16. delete mClient;
  17. }
  18. void mSnap7GetDataFromM226EsMbBlock()
  19. {
  20. mClient = new TS7Client;
  21. mClient->ConnectTo("192.168.2.201", 0,0);
  22. mClient->MBRead(500,100, &Snap7RcvM226Es);
  23. mClient->Disconnect();
  24. delete mClient;
  25. }
  26. void mSnap7GetDataFromM226EsVbBlock()
  27. {
  28. mClient = new TS7Client;
  29. mClient->ConnectTo("192.168.2.201", 0, 0);
  30. mClient->DBRead(1, 2000,100, &Snap7RcvM226Esvb);
  31. mClient->Disconnect();
  32. delete mClient;
  33. }
  34. void Delay(int time)
  35. {
  36. clock_t now = clock();
  37. while (clock() - now < time);
  38. }
  39. int main()
  40. {
  41. while (true)
  42. {
  43. mSnap7GetDataFromS71200Db();
  44. mSnap7GetDataFromM226EsMbBlock();
  45. mSnap7GetDataFromM226EsVbBlock();
  46. Delay(1000);
  47. for (int i = 0; i < 100; i++)
  48. {
  49. //cout << "mSnap7GetDataFromS71200Db-Snap7DB.Snap7Byte" << "[" << i << "]" << "=" << (int)Snap7Rcv[i] << endl;
  50. //cout << "mSnap7GetDataFromM226ES_MB-Snap7MB" << "[" << 500 + i << "]" << "=" << (int)Snap7RcvM226Es[i] << endl;
  51. cout << "mSnap7GetDataFromM226ES_VB-Snap7VB" << 2000 + i << "=" << (int)Snap7RcvM226Esvb[i] << endl;
  52. }
  53. }
  54. }
  1. void mSnap7GetDataFromM226EsVbBlock()
  2. {
  3. mClient = new TS7Client;
  4. mClient->ConnectTo("192.168.2.201", 0, 0);
  5. mClient->DBRead(1, 2000,100, &Snap7RcvM226Esvb);
  6. mClient->Disconnect();
  7. delete mClient;
  8. }
        10、函数mSnap7GetDataFromM226EsVbBlock()主要功能是读取M226ES PLC V存储区的功能。mClient->DBRead(1, 2000,100, &Snap7RcvM226Esvb);此句的意思是读取VB2000开始100个Byte。因为DNumber为1就代表访问PLC的V存储区。如下图所示是DBRead函数的官方说明。

        

        11、程序测试,运行C++上位软件进行测试。测试结果如下图所示。通过测试结果可以看到PLC状态监控表中的VB2000开始的100个Byte数据和C++软景通过Snap7开源库读取到的数据完全相同,到此Snap7的使用算是画上了圆满的句号。

        

以往有关Snap7的连接

https://blog.csdn.net/lzc881012/article/details/135356054?spm=1001.2014.3001.5501icon-default.png?t=N7T8https://blog.csdn.net/lzc881012/article/details/135356054?spm=1001.2014.3001.5501https://blog.csdn.net/lzc881012/article/details/135345037?spm=1001.2014.3001.5501icon-default.png?t=N7T8https://blog.csdn.net/lzc881012/article/details/135345037?spm=1001.2014.3001.5501

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/AllinToyou/article/detail/616942
推荐阅读
相关标签
  

闽ICP备14008679号