C#读写倍福plcbeckhoff,使用ADS协议实现读取plc

C#读写倍福plcbeckhoff,使⽤ADS协议实现读取plc
本⽂将使⽤库技术来读写倍福PLC数据,使⽤的是基于以太⽹的ADS实现,不需要额外的组件,读取操作只要放到后台线程就不会卡死线程,本组件⽀持超级⽅便的⾼性能读写操作
在Visual Studio 中的NuGet管理器中可以下载安装,也可以直接在NuGet控制台输⼊下⾯的指令安装:
Install-Package HslCommunication
如果你需要在读取PLC数据之后,还要发客户端来实现远程办公室同步监视,可以参考如下的项⽬(基于该组件扩展起来的,带有账户验证,版本控制,数据发,公告管理等等功能)
本⽂将展⽰如何配置⽹络参数及怎样使⽤代码来访问PLC数据,希望给有需要的⼈解决⼀些实际问题。主要对基恩⼠的数据进⾏读写操作,具体的参照下⾯的地址信息
此处使⽤了⽹线直接的⽅式,如果PLC接进了局域⽹,就可以进⾏远程读写了^_^
电子数据系统
此处使⽤到了2个命名空间:
1 2using HslCommunication.Profinet.Beckhoff; using HslCommunication;
随便聊聊
当我们⼀个上位机需要读取100台西门⼦PLC设备(此处只是举个例⼦,凡是都是使⽤Modbus tcp的都是⼀样的)的时候,你采⽤服务器主动去请求100台设备的机制对性能来说是个极⼤的考验,如果开100个线程去轮询100台设备,那么性能损失将是⾮常⼤的,更不⽤说再增加设备,如果搭建Modbus tcp服务器,就可以完美的解决性能问题,因为连接的压⼒将会平均分摊给每⼀台PLC,服务器端只要新增⼀个时间戳就可以知道客户端有没有连接上。
我们在100台PLC⾥都增加发送Modbus tcp⽅法,将数据发送到服务器的ip和端⼝上去,服务器根据站号来区分设备。这样就可以搭建⼀个⾼性能总站。本组件⽀持快速搭建⼀个⾼性能的Modbus tcp总站。
关于两种模式
水炮泥在PLC端,包括三菱,西门⼦,欧姆龙以及Modbus Tcp客户端的访问器上,都⽀持两种模式,短连接模式和长连接模式,现在就来解释下什么原理。
短连接:每次读写都是⼀个单独的请求,请求完毕也就关闭了,如果服务器的端⼝仅仅⽀持单连接,那么关闭后这个端⼝可以被其他连接复⽤,但是在频繁的⽹络请求下,容易发⽣异常,会有其他的请求不成功,尤其是多线程的情况下。
长连接:创建⼀个公⽤的连接通道,所有的读写请求都利⽤这个通道来完成,这样的话,读写性能更快速,即时多线程调⽤也不会影响,内部有同步机制。如果服务器的端⼝仅仅⽀持单连接,那么这个端⼝就被占⽤了,⽐如三菱的端⼝机制,西门⼦的Modbus tcp端⼝机制也是这样的。以下代码默认使⽤长连接,性能更⾼,还⽀持多线程同步。
在短连接的模式下,每次请求都是单独的访问,所以没有重连的困扰,在长连接的模式下,如果本次请求失败了,在下次请求的时候,会⾃动重新连接服务器,直到请求成功为⽌。另外,尽量所有的读写都对结果的成功进⾏判断。
关于⽇志记录
不管是基恩⼠的,三菱的数据访问类,还是西门⼦的,还是Modbus tcp访问类,都有⼀个LogNet属性⽤来记录⽇志,该属性是⼀个接⼝类,ILogNet,凡事继承该接⼝的都可以⽤来记录⽇志,该⽇志会在访问失败时,尤其是因为⽹络的原因导致访问失败时会进⾏⽇志记录(如果你为这个 LogNet 属性配置了真实的⽇志记录器的话):如果你想使⽤该记录⽇志的功能,请参照如下的博客进⾏实例化:
访问测试项⽬
下⾯的⼀个项⽬是这个组件的访问测试项⽬,您可以进⾏初步的访问的测试,免去了您写测试程序的
⿇烦,三菱的界⾯和西门⼦的界⾯⼏乎是⼀致的。可以同时参考。该项⽬位于本篇⽂章开始处的Gitbub源代码⾥⾯的
下载地址为:
演⽰项⽬
下⾯的三篇演⽰了具体如何去访问PLC的数据,我们在访问完成后,通常需要进⾏处理,以下的⽰例项⽬就演⽰了后台从PLC读取数据后,前台显⽰并推送给所有在线客户端的功能,客户端并进⾏图形化显⽰,具有⼀定的参考意义,并且推送给⽹页前端,项⽬地址为:
下⾯的图⽚⽰例中的左边程序就是服务器程序,它应该和PLC直接连接并接⼊局域⽹,然后把数据推送给客户端显⽰。注意:⼀个复杂⾼级的程序就应该把处理逻辑程序和界⾯程序分开,⽐如这⾥的服务器程序实现数据采集,推送,存储。让客户端程序去实现数据的整理,分析,显⽰,这样即使客户端程序因为BUG奔溃,服务器端仍然可以正常的⼯作。
配置篇
倍福的配置
在使⽤组件和倍福plc通讯之前,需要进⾏相关的配置,
STEP1 选择system manager
SETP2选择 choose
铝槽钢
输⼊⽤户名和密码后点击OK添加完成
注意
连接ADS时必须要填密码
如果没有请去创建⼀个
点击AMS标签页
可以看到本机的AMSnet 和路由状况
注意,plc的IP地址,不是ams net id
电脑的ip地址,也不是ams net id。
吹管系数读写数据篇
初始化访问PLC对象
如果想使⽤本组件的数据读取功能,必须先初始化数据访问对象,根据实际情况进⾏数据的填⼊。下⾯仅仅是测试中的数据:            BeckhoffAdsNet beckhoffAdsNet = new BeckhoffAdsNet( "192.168.182.131", 48898 );
beckhoffAdsNet.SetTargetAMSNetId( "192.168.182.131.1.1:801" );
beckhoffAdsNet.SetSenderAMSNetId( "192.168.235.128.1.1" );
打开连接,并可以判断是否连接上
beckhoffAdsNet.ConnectServer( );
如果需要判断,那么按照如下的操作
OperateResult connect = beckhoffAdsNet.ConnectServer( );
if (connect.IsSuccess)
{
// connect success
}
else
{
// failed
}3d打印建筑
那么现在可以读写数据了,数据分为三种类型
1. I.Q.M地址,这三个是同理的
OperateResult<bool> read = beckhoffAdsNet.ReadBool( "M100" );
网络隔离
bool value = read.Content;
  此时的100是第100个位的数据
当然了,也可以读取字数据
OperateResult<short> read = beckhoffAdsNet.ReadInt16( "M10" );
short value = read.Content;
  此时的10的地址,就是指第10个字节的数据
2. 绝对地址
OperateResult<short> read = beckhoffAdsNet.ReadInt16( "i=100002" );
short value = read.Content;
  绝对地址以i=开头的,后⾯的是数据的绝对地址,在内存⾥的绝对地址信息。
3, 标签地址
OperateResult<short> read = beckhoffAdsNet.ReadInt16( "s=MAIN.int1" );
short value = read.Content;
⽆论读取什么地址,都是必须知道类型的,然后就可以读写操作了。
关于标签读取的⽅式的情况下的加速操作。
标签读取的本质分成两步,第⼀个根据标签获取到变量的绝对地址,然后根据绝对地址获取到值。
现在只需要将 UseTagCache 设置为True , 就可以实现缓存功能,加速标签的读写速度。

本文发布于:2024-09-25 01:22:10,感谢您对本站的认可!

本文链接:https://www.17tex.com/tex/2/216144.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:数据   连接   访问   读取   客户端   地址   实现   读写
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2024 Comsenz Inc.Powered by © 易纺专利技术学习网 豫ICP备2022007602号 豫公网安备41160202000603 站长QQ:729038198 关于我们 投诉建议