PLC(FX2N-32MRPLC接压力变送器图上线设0.63MPa,运行PLC接压力变送器图达到0.68Mpa也不动作停机



































  • 品牌: 德国Sensortechnics压力变送器、压力传感器、光电液位开关,电子压力开关
  • 型号: 德国Sensortechnics压力变送器、压力传感器、光电液位开关,电子压力开关

可选中1个或多个下面的关键词,搜索相关资料。也可直接点“搜索资料”搜索整个问题。

看你描述的应该是plc程序有问题所以不动作。

本文将使用一个NuGet公开的组件技术来读写三菱PLC和西门子plc数据,使用的是基于以太网的TCP/IP实现,不需要额外的组件,读取操作只要放到后台线程就不会卡死线程,本组件支持超级方便的高性能读写操作

在Visual Studio 中的NuGet管理器中可以下载安装,也可以直接在NuGet控制台输入下面的指令安装:

 如果需要教程:Nuget安装教程:

技术支持QQ群:  (组件的版本更新细节也将第一时间在群里发布)最后编辑日期:2017年12月7日 11:03:56

里面各种小伙伴,为您解答数据交互,编程技巧,如果对本界面提供的API有任何疑问,都可以加群咨询,如果有更好的建议,欢迎提出。

如果你需要在读取PLC数据之后,还要群发客户端来实现远程办公室同步监视,可以参考如下的项目(基于该组件扩展起来的,带有账户验证,版本控制,数据群发,公告管理等等功能)

本文将展示如何配置网络参数及怎样使用代码来访问PLC数据,希望给有需要的人解决一些实际问题。主要对三菱Q系列PLC的X,Y,M,L,B,V,F,S,D,W,R区域的数据读写,对西门子PLC的M,Q,I,DB块的数据读写,亲测有效。

此处使用了网线直接的方式,如果PLC接进了局域网,就可以进行远程读写了^_^

此处使用到了2个命名空间:

切换长连接(可以根据自己的需求来确认是否切换),也可以放在窗口的Load方法中,一般建议使用长连接,速度更快,又是线程安全的:

 一行代码就可以切换到长连接模式,长连接的模式通讯更加稳定(如果网络确实好的话),这行代码可以放到Form的Load事件方法中。

只要放到form窗口下即可,实例化需要指定访问的是1200系列还是300系列,然后指定IP地址,端口号不需要指定,西门子有个默认的端口号102,支持读写操作。

演示一些简单使用的数据读写操作,以下代码没有进行对读写结果严格判断(判断是否读写成功,参照更下面的代码),网络良好的情况下几乎不会失败,但不保证完全没有错误,生产使用时尽可能的完善:

如果上面的指令不能满足你的需求,下面再分别讲解严格的操作,以及批量化的复杂的读写操作,假设你要读取1000个M,循环读取1千次可能要3秒钟,如果用了下面的批量化读取,只需要50ms,但是需要你对字节的原理比较熟悉才能得心应手的处理

批量位数据写入:(如果长度刚好为8的倍数,比如24个,那就刚好写3个字节的数据,如果像下面的代码写10个长度,那么实际上会改变M200-M201共16个开关点,这个一定要注意)

M,I,Q的读写(此处演示批量读取,自己根据需求来解析数据):

这三个数据的读写是一致的,为了区分之前旧的一个通讯类,此处的数据地址格式变更为字符串,

  如果是输入的话,就是把"M100"换成"I100","Q100",效果是一样的,这样的就可以对数据进行读写了。而DB块的格式有些区别,比如我们要写DB块20的100地址数据,我们需要写成"DB20.100"这样就可以正常读写了。DB块数据并没有进行严格测试,如果你需要使用这个功能,最好需要测试下是否真的能读取数据。

DB块的读写测试感谢我的好朋友:吃饱睡好

整数数据读写(一个数据由2个byte组成)

虽然上述实现了M数据的读写,但是只能表示0-255的数据,想要支持更大的数据,需要自己指定规则, 这就需要你对数据和字节原理非常清晰才能实现,为了方便,此处提供了读写双字节数据的功能,先演示读取M100-M106 的数据,对应有三个双字节数据,代码如下:

ASCII字符串数据的读写

在实际项目中,有可能会碰到PLC存储了规格数据,或是条码数据,这些数据是以ASCII编码形式存在, 我们需要把数据进行读取出来用于显示,保存等操作。下面演示读取指定长度的条码数据,数据的数据存放在M100-M109中, 长度应该为存储条码的最大长度,也即是占用了10个M,一个M可以存储1个ASCII码字符:


下面演示写入条码数据,地址在M100-M109中,所以需要写入10个字符:

需要注意的是,如果第一次在M100-M109中写入了"K",第二次写入了"K6666",那么读取M100-M109的条码数据会读取到K,如果要避免这种情况,则需要在写入条码的时候,指定总长度,该长度 可单数可偶数,具体的使用方法如下:

中文及特殊字符的读写在需要读写复杂的字符数据时,上述的ASCII编码已经不能满足要求,虽然使用读写的基础方法可以实现任意数据的读写, 但是此处为了方便,还是提供了一个方便的方法来读写中文数据,采用Unicode编码的字符, 该编码下的一个字符占用两个M来存储。如下将演示,读写方法,基本用途和上述 ASCII编码的读写一致。


在写入的过程中,只演示写入指定长度的(实际中也应该使用这个方法),指定长度的意思为多少个中文。

实际中可能碰到的情况会很复杂,一台设备中需要上传的数据包含了温度,压力,产量,规格等等信息,在一串数据中 会包含各种各样的不同的数据,所以此处做一个完整示例的演示,假设我们需要读取 M100-M116的数据,假设M100,M101存放了温度数据,55.1℃在M中为551,M102,M103存放了压力数据,1.23MPa在M中存放为123,M104存放了 设备状态,0为停止,1为运行,M105,M106存放了产量,1000就是指1000个,M107-M116存放了规格,以下代码演示如何去解析数据:

实际中我们需要读取PLC中的数据,并不是连续的数据块,最好的方法是将所有需要的数据块挪到一个连续的区块,比如M块,这样可以加速数据的读取,系统的性能也能更加高效,即时需要读取1000个M点,也是毫秒级的事情,如果1000个M点分成1000次来读取,那么使用本组件的效率是非常低下的,循环1000次的siemensTcpNet.ReadFromPLC("M100", 1);非常的耗时甚至可能达到几秒的量级,因为这个方法每次调用都会重新请求网络连接,然后初始化连接,请求数据,断开连接,所以最好的方法就是所有的数据都挪到一个统一的数据区块。

但是如果你确实有需求读取多个地址的数据,比如做成访问PLC的数据是可配置的,在配置文件里追加一个M100,长度4的int型数据,这种情况就不太适合将散乱的数据进行挪到统一的区块,所以本组件提供了一个高性能数组读取(但是仍然比一次读取连续区块慢一点,基本上是同一个量级的),声明如下:

/// 一次性从PLC获取所有的数据,按照先后顺序返回一个统一的Buffer,需要按照顺序处理,两个数组长度必须一致

address和count数组都不能为空,否则报错,两者的长度必须一致,否则报错

接下来我们举例访问PLC数据,比如我们需要读取M100开始的4个字节(这是一个int数据),M150开始的4个字节(这是一个float数据),M200开始的2个字节(这是一个short数据),I300开始的一个字节(普通的byte数据)。

此处提供一个核心的报文读取机制,你可以自己传入自己的报文,然后接收服务器的报文,再自己解析操作,可以根据报文格式实现任意的操作,当然,前提是需要报文支持。假设我要实现写入M100,为0x3B,那么最终的报文为

我要回帖

更多关于 PLC接压力变送器图 的文章

 

随机推荐