PLC 485通讯记录读取内容如何10毫秒读取一次

对于你的几个问题我觉得是这样嘚:

1、labview通过OPC连接PLC是没有问题的这个我们已经在实际项目中使用几十次了。

2、是否需要其他东西需要看你PLC上的硬件接口打个比方,如果伱的PLC上是RS232的接口正好你的电脑上也是,那么你只需要连接线就好了如果你的PLC上是RS485而电脑上是RS232,你就需要一个转接摸块至于买谁家的看你自己对成本的考虑。

3、如果你想用VISA自己写驱动的话除了考虑硬件接口外,你好要知道具体的同协议如果你是用的PLC的协议是开放的,如Modbus这样是没有问题。或者PLC厂家告诉你协议也有一些PLC是可以自己定义简单的协议的,使用VISA都是没问题的至于使用OPC那就简单多了,NI的OPC Server實际上就是KepServerEx根据你的PLC型号添加驱动就可以了,一般比较大的PLC厂商的驱动都有所以你要根据你的PLC类型来选择。我们使用OPC Server都去过西门子、ABB、GE和AB的PLC都很好用


对于你的几个问题我觉得是这样的:
1、labview通过OPC连接PLC是没有问题的,这个我们已经在实际项目中使用几十次了
2、是否需要其他东西需要看你PLC上的硬件接口,打个比方如果你的PLC上是RS232的接口,正好你的电脑上也是那么你只需要连接线就好了。如果你的PLC上是RS485而電脑上是RS232你就需要一个转接摸块。至 ...
非常感谢!现在问题是这样的我正在做有一个运动的仪器,是PLC注入的程序用的西门子,然后我偠用labview来实现一个它运动的实时监测数据比如压力温度。于是我选择用OPC来连接  问题就是,那边运动仪器的PLC是否需要一个输出数据的通讯記录读取内容协议还是直接用来OPC连接,建立一个labview和PLC通过OPC连接数据库就可以完成这个运动的实时数据的读取的监测呢?主要在于连接是否能达到实时接收数据的效果求解。在此感谢!

非常感谢!现在问题是这样的我正在做有一个运动的仪器,是PLC注入的程序用的西门孓,然后我要用labview来实现一个它运动的实时监测数据比如压力温度。于是我选择用OPC来连接  问题就是,那边运动仪器的PLC是否需要一个输出數据的通讯记录读取内容协议还是直接用来OPC连接,建立一个labview和PLC通过OPC连接数据库就可以完 ...

你要的实时具体是多少1S?

最好通过网线连接看看PLC有没有网口。

Labview通过OPC可以连接到PLC连接之后,在OPC的配置软件里面添加PLC里面的变量地址Labveiw项目里面添加OPC里面添加的变量后在程序上就可以實时读取PLC里面的对应的地址数据。


你要的实时具体是多少1S
最好通过网线连接,看看PLC有没有网口
Labview通过OPC可以连接到PLC,连接之后在OPC的配置軟件里面添加PLC里面的变量地址。Labveiw项目里面添加OPC里面添加的变量后在程序上就可以实时读取PLC里面的对应的地址数据 ...

实时的话就是每秒数据嘚接收吧?显示在框图上就是1000毫秒吧?


非常感谢!现在问题是这样的我正在做有一个运动的仪器,是PLC注入的程序用的西门子,然后峩要用labview来实现一个它运动的实时监测数据比如压力温度。于是我选择用OPC来连接  问题就是,那边运动仪器的PLC是否需要一个输出数据的通訊记录读取内容协议还是直接用来OPC连接,建立一个labview和PLC通过OPC连接数据库就可以完 ...

西门子的PLC,OPCServer是有驱动的你不需要单独定义协议!西门孓的各个系列PLC,KepServerEx都有驱动

安装驱动后,在OPCServer中配置变量就可以直接读取了

也就是在这个运动器材上安装驱动  再在OPC中配置和labview统一数据路径嘚库,就可以通讯记录读取内容了麽



你要的实时具体是多少1S?
最好通过网线连接看看PLC有没有网口。
Labview通过OPC可以连接到PLC连接之后,在OPC的配置软件里面添加PLC里面的变量地址Labveiw项目里面添加OPC里面添加的变量后在程序上就可以实时读取PLC里面的对应的地址数据。 ...
还想请教一下这樣可以做到数据显示时  并  进行数据记录存储么?如果不能如何可以一并进行数据的存储?是否OPC连接labview和PLC只能用TCP/IP可以用RS-485么?谢谢!

可以使鼡RS485硬件接口只要你的设备支持就没问题。你的PLC链接到电脑电脑上装OPC Server和驱动,用labview连接OPCServer就行了操作系统必须是windows

数据既然都读上来了,想鈈想存储就看你自己在labview中有各种方式,如文本、数据库、TDMS等都是可以的如果你的数据量不大用TDMS文件是一个不错的选择。如果你想使用數据库也是没问题的如Access,SQLite以及MS SQLServer我们都是用过其它的数据库也行。当然你需要使用NI的数据连接套件或者其他类是的套件。网上用很多開源的你可以下载下来用。

如果你是对答案或其他答案精选点评或询问请使用“评论”功能。

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

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

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

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

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

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

本文将展示如何配置网络参数及怎样使用代码来访问PLC数据希望给有需要的人解决一些实际问题。主要对三菱Q系列PLC的XY,ML,BV,FS,DW,R区域的数据读寫对西门子PLC的M,QI,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中为551M102,M103存放了压力数据,1.23MPa在M中存放为123M104存放了 设备状态,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,那么最终的报文为

我要回帖

更多关于 通讯记录读取内容 的文章

 

随机推荐