特定场景下的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解决: 无法控制第三方系统某接口的返回,返回的数据不满足要求 某依赖系统还未开发完成,就需要对被测系统进行测试 有些系统不支持重复请求,或 ...
随机推荐
- 面向政务企业的开发者工具集-逐浪文本大师v0.1正式发布(含代码全部开源啦!)
这是一款基于.net 4.7环境开发的开发者工具. 一个实用的windows小工具集合,里面包含了多个常用的小软件.其中的批量修改文件名及文件内容功能,可以自定义修改规则,支持规则的导入与导出.不需要 ...
- ES6基础知识(async 函数)
1.async 函数是什么?一句话,它就是 Generator 函数的语法糖. const fs = require('fs'); const readFile = function (fileNam ...
- 【数据结构】【图文】【oj习题】 图的拓扑排序(邻接表)
拓扑排序: 按照有向图给出的次序关系,将图中顶点排成一个线性序列,对于有向图中没有限定次序关系的顶点,则可以人为加上任意的次序关系,由此所得顶点的线性序列称之为拓扑有序序列.显然对于有回路的有向图得不 ...
- myeclipse自带tomcat
安装myeclipse自带的tomcat没有在myeclipse的安装目录下,是再myeclipse指定的工作空间下 的.metadata\.plugins\com.genuitec.eclipse. ...
- 论文翻译:2021_Decoupling magnitude and phase optimization with a two-stage deep network
论文地址:两阶段深度网络的解耦幅度和相位优化 论文代码: 引用格式:Li A, Liu W, Luo X, et al. ICASSP 2021 deep noise suppression chal ...
- [NOIP2017 提高组] 逛公园
考虑先做一个\(dp\),考虑正反建图,然后按0边拓扑,然后按1到这里的最小距离排序,然后扩展这个\(f_{i,j}\),即多了\(j\)的代价的方案数.
- Codeforces 1188B - Count Pairs(思维题)
Codeforces 题面传送门 & 洛谷题面传送门 虽说是一个 D1B,但还是想了我足足 20min,所以还是写篇题解罢( 首先注意到这个式子里涉及两个参数,如果我们选择固定一个并动态维护另 ...
- Unique Path AGC 038 D
Unique Path AGC 038 D 考虑如果两个点之间只能有一个边它们就把它们缩起来,那么最后缩起来的每一块都只能是一棵树. 如果两个点之间必须不止一个边,并且在一个连通块,显然无解. 首先把 ...
- [R] 添加误差棒的分组折线图:geom_path: Each group consists of only one observation. Do you need to adjust the...
想做一个简单的分组折线图,并添加误差棒,类似下面这样的: 用ggplot似乎很简单就能实现:ggplot+geom_errorbar+geom_line+geom_point,重点在于计算误差棒. 还 ...
- 7. Minimum Depth of Binary Tree-LeetCode
难度系数:easy /** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; ...