本文是西门子开放式TCP通信的第2篇,上一篇我们讲了使用西门子1200PLC作为TCP服务器的程序编写,可以点击下方链接阅读:【公众号dotNet工控上位机:thinger_swj】

基于Socket访问西门子PLC系列教程(一)

在完成上述步骤后,接下来就是编写上位机软件与PLC之间进行通信。上位机UI界面设计如下图所示:

从上图可以看出,上位机需要完成以下功能:

  • TCP建立连接与断开连接
  • 多线程接收服务器数据
  • 各种数据类型通用数据解析
  • 各种数据类型的通用写入接下来我们将按照功能顺序来逐个完成,具体如下:

(1)TCP的建立连接与断开连接:TCP连接与断开主要是调用Socket的API函数来实现,代码如下所示:

(2)开启多线程持续接收服务器数据:上位机连接上PLC后,PLC会定时向上位机发送数据,上位机需要持续接收数据,因此在连接成功后,开启一个线程来接收服务器数据。

(3)各种数据类型通用数据解析:当已经获取到所有的数据(字节数组)时,如果想任意一种数据类型的解析,通过分析发现,至少需要三个元素,分别为起始字节、数据类型、偏移(针对布尔是位偏移,针对字符串是长度),因此我们首先针对这三个元素,创建了一个实体类,如下所示:

通过控件显示数据,因此需要给控件做下绑定,这里是通过Tag属性来做,按照DataType;Start.Offset的格式,DataType按照枚举类型填写数据,Start填写一个整数,对于Offset,如果不是布尔类型或者字符串,该项可以不填,填写格式如下所示:

Tag绑定方式如下所示:【公众号dotNet工控上位机:thinger_swj】

获取到控件绑定的Tag之后,需要编写一个方法,实现Tag和实体对象BindVariable之间的转换。

通用数据更新实现思路:遍历所有的控件,首先判断其Tag属性是否满足要求,如果满足要求,将Tag转换为BindVariable对象,再根据BindVariable对象来进行数据解析,这里可以将实时更新单独封装成一个方法,多线程中直接进行调用,完成上述步骤后,可以直接运行上位机软件,进行读取功能测试,先在博途中创建一个监控表,填入一些随机数,然后通过上位机进行读取对比,监控表如下图所示:

上位机运行读取数据如下图所示:

php读取西门子plc_基于Socket访问西门子PLC系列教程(二)相关推荐

  1. 基于Socket访问西门子PLC系列教程(二)

    本文是西门子开放式TCP通信的第2篇,上一篇我们讲了使用西门子1200PLC作为TCP服务器的程序编写,可以点击下方链接阅读:[公众号dotNet工控上位机:thinger_swj] 基于Socket ...

  2. C#上位机基础学习_基于SOCKET实现与PLC服务器的TCP通信(二)

    C#上位机基础学习_基于SOCKET实现与PLC服务器的TCP通信(二) 测试软件: TIA PORTAL V15.1 S7-PLCSIM ADVANCED V3.0 Visual Studio 20 ...

  3. QT5系列教程二---基于qcustomplot的QT5 GUI串口收发绘图软件实现

    QT5系列教程二---基于qcustomplot的QT5 GUI串口收发绘图软件实现 结构 UI部分 代码部分 step1:实现串口数据接受 串口接受数据格式 在`.pro`文件中添加`serialp ...

  4. 西门子标准报文1常用_基于Snap7使用C#编程访问西门子PLC系列教程(2)-S7协议

    本文是Snap7软件包系列教程的第2篇,我们来介绍下S7协议,包括如下几个主题: 1.S7协议简介 2.S7协议命令简介 3.S7协议通信的角色与模式 1.S7协议简介 S7协议是西门子S7系列PLC ...

  5. 西门子smartclient怎么用_基于Snap7使用C#编程访问西门子PLC系列教程(3)-Snap7Client(建立连接)...

    本文是Snap7软件包系列教程的第3篇. 在上一篇文章中,我们介绍了S7通信协议中有三种角色:客户端/服务器/伙伴:有两种通信模式:客户端/服务器(Client/Server)模式和伙伴/伙伴(Par ...

  6. h2 不能访问localhost_SpringBoot2.x系列教程44--H2数据库详解及搭建Web控制台

    SpringBoot2.x系列教程44--H2数据库详解及搭建Web控制台 作者:一一哥 我在上一章节中讲解了Spring Boot中整合Mybatis,接下来我给大家介绍一款内存数据库--H2. H ...

  7. 【Qt编程】基于Qt的词典开发系列十二调用讲述人

    我们知道,win7系统自带有讲述人,即可以机器读出当前内容,具体可以将电脑锁定,然后点击左下角的按钮即可.之前在用Matlab写扫雷游戏的时候,也曾经调用过讲述人来进行游戏的语音提示.具体的Matla ...

  8. 单片机学习笔记1--资料下载、环境搭建(基于百问网STM32F103系列教程)

    第1篇 资料下载.环境搭建 第一章 百问网视频体系及学习路线 1.1课程视频变化 2011-2020:百问网录制了10年的Linux视频. 2021: 1.首次进入单片机领域,发布单片机课程! 2.重 ...

  9. python plc_基于python的西门子plc数据采集系统

    这个是网络上别人写的,采用的opc获取数据,然后通过tcp传回,采集器以tcp服务端存在,自己再写一个tcp客户端接收数据进行处理就好了. 技术环境: (1)采用python开发环境(32位),支持W ...

最新文章

  1. 抽象工厂模式_常用设计模式--抽象工厂模式
  2. 汇总下几个IP计算/转换的shell小脚本-转
  3. Linux查看某个进程的线程
  4. 任正非未来出行三谈,在攀登无人驾驶珠峰路上沿途下蛋...
  5. python数据框常用操作_转载:python数据框的操作
  6. 数据访问模式二:数据集和数据适配器(传统的数据访问模式)
  7. 前端学习(3313):redux的基本操作
  8. Educational Codeforces Round 39 F Largest Beautiful Number
  9. Qt5学习笔记之串口助手三:打包成Windows软件
  10. 惠普服务器c盘格式化提示win7系统盘,c盘格式化,小编告诉你怎么格式化c盘
  11. 微信开发工具获取用户头像和用户昵称,实现本地和真机调试
  12. python投资_python计算投资
  13. 计算机专业毕业祝福语,大学毕业生祝福语
  14. ASP.NET 安全认证(二)——灵活运用 Form 表单认证中的 deny 与 allow 及保护 .htm 等文件...
  15. canvas-缤纷小球
  16. 企业微信机器人读取服务器,用企业微信机器人搞事情
  17. android项目epub格式电子书开源开发
  18. Linux磁盘相关-分区与修复
  19. 圣诞要到了~教你用Python制作一个表白神器——照片墙,祝你成功
  20. java国际化转换_java 实现国际化 中英文语言切换

热门文章

  1. maven项目添加文件夹报错
  2. 吴裕雄 Bootstrap 前端框架开发——Bootstrap 按钮:禁用按钮
  3. [UWP]实现一个轻量级的应用内消息通知控件
  4. 小乐乐打游戏(BFS+曼哈顿距离)
  5. JavaScript正则表达式之语法
  6. 0x58 数据结构优化DP
  7. 2022-2028年中国工业大数据行业深度调研及投资前景预测报告
  8. Jzoj4747 被粉碎的线段树
  9. 从零开始用 Flask 搭建一个网站(二)
  10. 金额阿拉伯数字转换为中文大写