特定场景下的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解决: 无法控制第三方系统某接口的返回,返回的数据不满足要求 某依赖系统还未开发完成,就需要对被测系统进行测试 有些系统不支持重复请求,或 ...
随机推荐
- Java核心技术--Java程序设计
Java术语 术语名 缩写 解释 Java Development Kit(Java开发工具包) JDK 编写Java程序的程序员使用的软件 Java Runtime Environment(Java ...
- .NET 百万级 大数据插入、更新 ,支持多种数据库
功能介绍 (需要版本5.0.44) 大数据操作ORM性能瓶颈在实体转换上面,并且不能使用常规的Sql去实现 当列越多转换越慢,SqlSugar将转换性能做到极致,并且采用数据库最佳API 操作数据库 ...
- [atARC111F]Do you like query problems
(以下修改指1和2类操作,询问指3类操作,操作指修改或询问) 注意到总方案数确定,那么不妨求出答案的期望,再乘上方案数即为答案 (这里从期望的角度考虑只是为了描述方便,并没有太大的实际意义) 设$E( ...
- [bzoj3317]First Knight
建立方程后直接高斯消元,再把0的区间找出来计算,就可以过(因为实际上这样的复杂度是5次的,且常数小)(当然这样的复杂度看上去并不太好,考虑优化)可以发现最后一行的概率都可以用上一行来表示,那么代入上一 ...
- 多线程01.newThread的方式创建线程
1.java应用程序的main函数是一个线程,是被jvm启动的时候调用,线程的名字叫main 2.实现一个线程,必须创建一个thread实例,override run方法,并且调用start方法. 3 ...
- tomcat的log日志乱码解决方案
Intellij idea Tomcat输出log中文乱码 配置tomcat在VM options添加-Dfile.encoding=UTF8 -Dsun.jnu.encoding=UTF8 重启后控 ...
- 一个 Linux 后台程序编程案例分析
Linux 下的一个进程打开一个日志文件,不定期地往该文件里写入日志.此时可以在控制台使用 mv 命令给该日志文件改个名字或者用 rm 命令把这个日志文件删除掉.Linux 下是允许这么干的!对于改日 ...
- 混合(Pooling)样本测序研究
目录 1.混合测序基础 2. 点突变检测 3. BSA 4. BSR 5. 混合样本GWAS分析 6. 混合样本驯化研究 7. 小结 1.混合测序基础 测序成本虽然下降了,但对于植物育种应用研究来说还 ...
- ubuntu终端ls颜色配置
buntu中没有LS_COLORS,/etc/目录中也没有DIR_COLORS,所以这里使用dircolor命令加以解决 1. 利用dircolors命令,查看我们的系统当前的文件名称显示颜色的值,然 ...
- MybatisPlus入门程序
参考资料:MybatisPlus官网 环境搭建 创建数据库 CREATE DATABASE `mybatisplus` USE `mybatisplus` CREATE TABLE `user ...