LabVIEW与三菱FX3U PLC通讯问题总结

时间:2024-02-29 15:20:52

LabVIEW与三菱FX3U PLC通讯问题总结

                                        ——2018.7.9 

遇到的问题:

1)使用C#封装的Sample_References.dll文件,速度慢,单个读取vi,读取8个字节,执行周期为30-40ms(后来是20ms?),且一个while中,读取的数量多、使用的读写vi函数多、线程多,都会导致速度变慢。另外,把线程周期设定为1ms时,反而会降低读取速度,经过测试,设定为60ms最优。没有遇到有读取数量限制的问题;设置MX Component时要选择FX NET,而不是FX3U ADP NET。

2)使用MXComponent的Active控件(简称ACT控件),MITSUBISHI ActUtlType Control(三菱的《MXComponent中文使用说明书》中介绍了两个控件,另外一个是.NET的DotUltType Control控件),在前面板插入如下所示Active对象,单个读取函数,读取8个字节,函数执行周期为10-20ms,但是发现了读取数量的限制,如果把数量设定为50,LabVIEW就崩溃了;

 

 

3)使用MX OPC 4.02。速度较快,但是问题是与5个PLC通讯时,会出现OPC与PLC连接不上的问题,变量监控时显示Not available,与一个PLC通讯则不会出现该问题;

4)使用MX OPC 6.05。速度较快,也可以同时与5个PLC通讯,比较稳定,问题如下

问题:

①  会出现LabVIEW与三菱编程软件不能同时工作的问题,如果三菱GX Works2连上PLC,则LabVIEW无法读取到数据(且OPC中的通讯质量为Bad),而如果LabVIEW先运行,可以读取到数据,但是三菱GX Works2又无法连上PLC;设置时要选择FX NET,而不是FX3U ADP NET。

②写入时有时失败,在LabVIEW中关联的变量数值已经更新了,但是在MX Configure中未更新,经过测试,把LabVIEW程序中包含写入OPC地址的前面板打开,即可正常写入(实际上,只要前面板未打开,几乎都写不进去),所以这可能是LabVIEW与MX OPC6.05通讯时的特点:必须要把前面板打开,labview中OPC变量的数据才能更新到OPC中(即写入操作)。

Notes

①在LabVIEW的opc库文件中,可以右键OPC I/O Client属性,设定数据更新速度,默认为1000ms,可设定为100ms;

②与MX OPC通讯,LabVIEW中不能把OPC变量作为常量使用,否则运行时会提示“OPC Server返回了错误”;

③写入失败,尝试过把写入操作放置到循环中,持续去写,但是依然失败。问题的根本原因是有opc变量的vi运行时未打开前面板。另外,可以尝试把写入操作放入循环中,似乎没什么问题;

5)用NI OPC连接不上三菱FX3U PLC;

 

针对以上几种方案遇到的问题的解决方案:

1)

①尝试每个读写动作都使用独立命名的dll文件,看时间是否会缩短,如果可以,测试多个线程同时工作时的线程执行周期。→未测试。

②重新规划地址,并减少预留的地址,使需要读写的PLC地址连续,然后使用一个读取vi函数,一次性读取,用测试vi测试一下5个线程同时工作时,每个线程内的执行周期,线程内延时设为100ms(经过测试,延时1ms时,实际上会使其中某个线程的读取周期变长,且所有线程的读取周期并不会缩短)。规划后,每站内需要交互的变量为:LabVIEW需要读取35个D寄存器,写入16个D寄存器。经过测试,每站需要读取35个字节,写入16个字节,各5个线程,其中各放置1个读/写函数,线程周期设定为60ms时,每个线程的循环读/写时间为500-600ms;每个站的通讯程序使用1个Read和1个Write函数即可,进行批量读写。关于写的问题,实际使用场景为一个PLC需要向上一站和下一站写入数据,但是不需要使用2个Write函数,把问题转换为:在某个站的通讯线程中,只考虑其它其它站往此站写入数据,而不考虑此站往其它站写入数据,不论写入的数据来源于多少个其它站的Read函数,只需要通过中间变量,从其它站的Read函数收集数据,然后把收集到的数据创建成数组即可,即可以批量写入。因此对每个站而言,只需要一个Read函数和一个Write函数足够,总共10个函数,使用测试的方法,读写周期为500ms-600ms;

2)同上,并测试最大可读写的数量。→未测试。

3)查询手册,是否有相关设置。→未找到解决方法。

4)

①查询手册,是否有相关设置。→未找到解决方法;

②把LabVIEW程序中包含写入OPC地址的前面板外观属性设定为调用时打开(另外,“加载时打开”是打开主vi中,会把相应的加载到内存中的vi打开,“调用时打开”是程序执行到相应vi时,才会打开vi),同时为了避免运行时子vi弹出,可通过编程将相应vi的前面板隐藏,结果是主vi运行时,子vi前面板也会弹出来,但随后子vi前面板界面消失,编程方法参考《如何将LabVIEW可执行文件作为后台程序运行》https://jingyan.baidu.com/article/ed2a5d1f7ad89e09f6be172f.html;

不过有一个现象:程序启动时,会跳转到选择型号界面,默认为选择"未选择型号“,此时应该给PLC发送0,但实际上通过OPC Configure监控软件,发现有的站(ST10)相应的型号地址D2076的值仍然是上一次的值,不过这没关系,因为上位机要重新选择型号,而手动去选择型号时,数据是可以更新到OPC中的;

5)使用NI OPC,查询相关的使用方法。→未找到解决方法。

 

MX OPC本质上,是OPC软件调用MX Conponent控件(已经集成在OPC内部,实际使用OPC时不另外安装MX Component),来实现OPC的数据中转功能,而labview本身也是可以调用MX Conponent控件(通过ACT控件和.NET控件)的,根本不需要通过OPC来中转。