特定场景下的PLC 远程控制和数据读取
最近有位博友提出了一种应用场景,根据工作中实际遇到的类似的产品应用场景,记录下自己的解决方案。
场景: 需要在云端控制和采集各个站点的PLC数据。各个站点是分散的,每个站点有公网访问能力,但是分散站点的PLC没有固定IP,部分站点PLC设备不止一台。
方案一:
在这种场景下,其实最优和高效的解决方案是,使用物联网网关+MQTT的方式最可靠。这种方案比较简单,在每个站点的PLC上层加上物联网网关,网关与PLC设备进行数据通信。物联网网关一般支持多种数据协议,包括像Modbus等工控协议。
所以使用物联网网关 就不需要考虑设备层的协议解析问题,这部分工作网关内已经集成过了,然后网关多数会以MQTT的形式发送数据,MQTT报文多数为JSON格式的明文。所以采集只需按照不同厂家的网关的上传格式解析json字符串就能拿到数据,
控制的话流程也是这样,按照指定的格式拼装JSON字符串通过MQTT发送即可,MQTT服务的搭建我在之前的博客中介绍过,这里不在赘述。
所以使用物联网网关可以省去很大一部分工作量,但是缺点就是网关的费用是一笔不小的支出。还有就是现场没有宽带网络的话就需要使用物联网卡,通过3/4/5G通道传输。这样的话流量费也是比较大的支出。
所以项目经费充足,稳定性要求高的话可以采用这种方案。
方案二:
这里重点介绍下经济实惠的方案二。方案二采用Modbus协议直读的方式.
简单介绍下大致思路,首先站点分散,每台PLC没有固定IP,这样的话传统方式,在云服务器安装组态然后再去给各个PLC建点,读取数据的方式显然走不通。因为再云服务器找不到各个站点的PLC,在这种情景下,云服务器对各个PLC是可见的,
因为云服务器有公网IP,各个站点可以访问,但是云服务器无法访问到各个设备,因为他们不在一个局域网里。
所以传统路线是无法获取数据。考虑下别的思路。
在这里考虑用到虚拟串口+Modbus 直读的方式实现,这也是在类似项目遇到相同问题后的解决方案。在中小型规模的情况下满足使用需求,数据采集响应时间在5s内,当然也可以对程序进一步优化达到更好的效果。
具体方法:
步骤一,打开虚拟串口工具,监听TCP端口,注意选择TCPServer,端口选择已经映射过的且公网能访问的端口即可,
第二步:在与PLC相连的DTU上配置好 IP和端口,就是上面配置的监听端口。这样的话站点PLC 就通过TCP的形式和服务器建立起了连接。说到这里大家应该就清楚了,通过DTU和虚拟串口的目的,就是间接的将PLC与服务器连接在一起,这就好比通过一根无形
的串口线将PLC与服务器连接在一起,这样的话。接下来就该怎么读取就怎么读了,直接通过modbus从虚拟串口读取就可以了。控制也是一样。
我这里用Modsim模拟PLC
Modsim 连接串口三 COM3,这里TCPClient 就是实际应用中的DTU,连接到服务器的 8234 端口。这样PLC就与服务器连接上了。
然后,这里服务器我用kepserver 建了2个点模拟读取,
读取成功
这里大家可能会有疑问,如果多台PLC怎么办,其实是一样的,但是这里的多台PLC需要通过PLC 的DeviceID来区分。 多台PLC也是统一发到服务器的一个监听端口的。
这样,这种思路的PLC数据读取的方式就结束了。其实效果还是可以的。
特定场景下的PLC 远程控制和数据读取的更多相关文章
- 自己总结的C#编码规范--3.特定场景下的命名最佳实践
特定场景下的命名最佳实践 命名空间 要使用PascalCasing,并用点号来分隔名字空间中的各个部分. 如Microsof.Office.PowerPoint 要用公司名作为命名空间的前缀,这样就可 ...
- 特定场景下Ajax技术的使用
ajax介绍 jax技术包含了几种技术:javascript.xml.css.xstl.dom.xhtml和XMLHttpRequest七种技术,所以ajax就像是粘合剂把七种技术整合到一起,从而发挥 ...
- 特定场景下SQL的优化
1.大表的数据修改最好分批处理. 1000万行的记录表中删除更新100万行记录,一次只删除或更新5000行数据.每批处理完成后,暂停几秒中,进行同步处理. 2.如何修改大表的表结构. 对表的列的字段类 ...
- HBase指定大量列集合的场景下并发拉取数据时卡住的问题排查
最近遇到一例,HBase 指定大量列集合的场景下,并发拉取数据,应用卡住不响应的情形.记录一下. 问题背景 退款导出中,为了获取商品规格编码,需要从 HBase 表 T 里拉取对应的数据. T 对商品 ...
- 使用Swoole测试MySQL在特定SQL下的并发性能
场景描述 从全文检索或者缓存中获取ID,根据ID查询数据库获取基础信息,进行页面展示 SQL:select * from table where id in(id1,id2,id3...id40) 此 ...
- 亿级流量场景下,大型缓存架构设计实现【1】---redis篇
*****************开篇介绍**************** -------------------------------------------------------------- ...
- 美团在O2O场景下的广告营销
美团作为中国最大的在线本地生活服务平台,覆盖了餐饮.酒店.旅行.休闲娱乐.外卖配送等方方面面生活场景,连接了数亿用户和数百万商户.如何帮助本地商户开展在线营销,使得他们能快速有效地触达目标用户群体提升 ...
- 浅谈Vue不同场景下组件间的数据交流
浅谈Vue不同场景下组件间的数据“交流” Vue的官方文档可以说是很详细了.在我看来,它和react等其他框架文档一样,讲述的方式的更多的是“方法论”,而不是“场景论”,这也就导致了:我们在阅读完 ...
- mock以及特殊场景下对mock数据的处理
一.为什么要mock 工作中遇到以下问题,我们可以使用mock解决: 无法控制第三方系统某接口的返回,返回的数据不满足要求 某依赖系统还未开发完成,就需要对被测系统进行测试 有些系统不支持重复请求,或 ...
随机推荐
- 手把手教你汇编 Debug
关于汇编的第一篇文章: 爱了爱了,这篇寄存器讲的有点意思 Hello大家好,我是程序员cxuan!我们上篇文章了解了一下基本的寄存器,这篇文章我们来进行实际操作一下. 原文链接:手把手教你汇编 Deb ...
- 第一章 初始C语言
第一章 初始C语言 目录 第一章 初始C语言 1. C语言起源 2. 选择C语言的理由 2.1 设计特性 2.2 高效性 2.3 可移植性 2.4 强大而灵活 2.5 面向程序员 3. C语言的应用范 ...
- javascript-初级-day04js数据类型
day01-js数据类型 <!DOCTYPE HTML> <html> <head> <meta http-equiv="Content-Type& ...
- CF1554E You
考虑到删点操作的实质是指认边的方向. 由于这是一棵树,所以有很好的性质. 我们完全可以以此从树叶开始,往上拓扑进行,按照对某个数的取膜的大小来进行操作. 由此可知,除了 \(1\) 以外,任意 \(2 ...
- Codeforces 1188E - Problem from Red Panda(找性质+组合数学)
Codeforces 题面传送门 & 洛谷题面传送门 咦,题解搬运人竟是我? 一道很毒的计数题. 先转化下题意,每一次操作我们可以视作选择一种颜色并将其出现次数 \(+k\),之后将所有颜色的 ...
- 洛谷 P4709 - 信息传递(置换+dp)
题面传送门 一道挺有意思的题罢-- 首先看到这种与置换乘法相关的题,首先把这些置换拆成一个个置换环,假设输入的置换有 \(m\) 个置换环,大小分别为 \(s_1,s_2,\cdots,s_m\),显 ...
- 集群SGE作业调度系统
目录 0. 一些基本概念 1. 常见的几种资源管理和调度系统 2. SGE常见指令 2.1 提交任务 2.2 查看任务 2.3 删除任务 2.4 挂起/恢复任务 2.5 更改任务属性 0. 一些基本概 ...
- nginx_location
Nginx location 配置语法 1. location [ = | ~ | ~* | ^~ ] uri { ... } 2. location @name { ... } location 配 ...
- LVS-原理
一. 集群的概念 服务器集群简称集群是一种服务器系统,它通过一组松散集成的服务器软件和/或硬件连接起来高度紧密地协作完成计算工作.在某种意义上,他们可以被看作是一台服务器.集群系统中的单个服务器通常称 ...
- urllib的基本使用介绍
1. urllib中urlopen的基本使用介绍 1 ### urllib中urlopen的基本使用介绍 2 3 ## urlopen的基本用法(GET请求) 4 import urllib.requ ...