本文将使用一个gitHub开源的组件技术来读写西门子plc数据,使用的是基于以太网的TCP/IP实现,不需要特别的组件,读取操纵只要放到后台线程就不会卡死线程,本组件撑持超级便利的高性能读写操纵
github地点:https://github.com/dathlin/HslCommunication 如果喜欢可以star或是fork,还可以打赏撑持。
English Version : https://github.com/dathlin/HslCommunication/blob/master/docs/Siemens.md
在Visual Studio 中的NuGet打点器中可以下载安置,也可以直接在NuGet控制台输入下面的指令安置
Install-Package HslCommunication
如果需要教程:Nuget安置教程:
技术撑持QQ群:592132877 (组件的版本更新细节也将第一时间在群里颁布)最后编纂日期:2018年4月5日 19:00:08
里面各类小伙伴,为您解答数据交互,编程技巧,如果对本界面供给的API有任何疑问,都可以加群咨询,如果有更好的建议,欢迎提出。
组件的完整信息和其他API介绍参照: 组件的授权协议,更新日志,都在该页面里面。
本文将展示如何配置网络参数及怎样使用代码来访谒PLC数据,但愿给有需要的人解决一些实际问题。主要对西门子PLC的M,Q,I,DB块的数据读写,亲测有效。
此处使用了网线直接的方法,如果PLC接进了局域网,就可以进行长途读写了^_^
此处使用到了2个定名空间:
using HslCommunication; using HslCommunication.Profinet.Omron;
随便聊聊当我们一个上位机需要读取100台西门子PLC设备(此处只是举个例子,通常都是使用Modbus tcp的都是一样的)的时候,你给与处事器主动去请求100台设备的机制对性能来说是个极大的考验,如果开100个线程去轮询100台设备,那么性能损掉将长短常大的,更不用说再增加设备,如果搭建Modbus tcp处事器,就可以完美的解决性能问题,因为连接的压力将会平均分摊给每一台PLC,处事器端只要新增一个时间戳就可以知道客户端有没有连接上。
我们在100台PLC里都增加发送Modbus tcp要领,将数据发送随处事器的ip和端口上去,处事器按照站号来区分设备。这样就可以搭建一个高性能总站。 本组件撑持快速搭建一个高性能的Modbus tcp总站。
关于两种模式本组件所供给的所有客户端类,包孕三菱,西门子,欧姆龙,modbus-tcp,以及SimplifyNet都是担任自双模式基类,双模式包罗了短连接和长连接,下面就具体介绍下两个模式的区别
短连接:每次读写都是一个单独的请求,请求完毕也就*了,如果处事器的端口仅仅撑持单连接,那么*后这个端口可以被其他连接复用,但是在频繁的网络请求下,容易产生异常,会有其他的请求弗成功,尤其是多线程的情况下。
长连接:创建一个公用的连接通道,所有的读写请求都操作这个通道来完成,这样的话,读写性能更快速,即时多线程挪用也不会影响,内部有同步机制。如果处事器的端口仅仅撑持单连接,那么这个端口就被占用了,好比三菱的端口机制,西门子的Modbus tcp端口机制也是这样的。以下代码默认使用长连接,性能更高,还撑持多线程同步。
在短连接的模式下,每次请求都是单独的访谒,所以没有重连的困扰,在长连接的模式下,如果本次请求掉败了,不才次请求的时候,会自动从头连接处事器,直到请求告成为止。此外,尽量所有的读写都对功效的告成进行判断。
关于日志记录不管是三菱的数据访谒类,还是西门子的,还是Modbus tcp访谒类,,都有一个LogNet属性用来记录日志,该属性是一个接口类,ILogNet,凡事担任该接口的都可以用来记录日志,该日志会在访谒掉败时,尤其是因为网络的原因导致访谒掉败时会进行日志记录(如果你为这个 LogNet 属性配置了真实的日志记录器的话):如果你想使用该记录日志的成果,请参照如下的博客进行实例化:
举个例子:
omronFinsNet.LogNet = new HslCommunication.LogNet.LogNetSingle( "omron.log.txt" );
关于通讯的说明使用FINS-TCP协议实现数据交互,如果在测试的过程中,发明写入掉败的话,有可能是因为
访谒测试项目在上述的github源代码里有个测试项目,HslCommunicationDemo,里面包罗了各类客户真个Demo项目,不需要编写任何的代码就可以测试数据的访谒了。
下载地点为:
演示项目下面的三篇演示了具体如何去访谒PLC的数据,我们在访谒完成后,凡是需要进行措置惩罚惩罚,以下的示例项目就演示了后台从PLC读取数据后,前台显示并推送给所有在线客户真个成果,客户端并进行图形化显示,具有必然的参考意义,项目地点为:
https://github.com/dathlin/RemoteMonitor