LabVIEW与PLC交互

一、写法

写命令立即读出

写命令后立即读出,在同一时间不能有多个地方写入,因此需要在整个写入后读出过程加锁

项目中会存在多个循环并行执行该VI,轮询PLC指令

在锁内耗时,就是TCP读写的实际耗时为5-8ms,在主VI六个循环里统计的耗时是读取PLC寄存器的整个耗时为10-40ms:

因此可以得出结论,由于锁会让TCP读写的代码块变为同步,因此如果越多地方在同一时操作PLC寄存器,会增加整体耗时。

在项目中轮询信号应该只在一个地方批量把寄存器里的值读取出来。

写法1:以"写命令立即读出"用一个地方批量读取,其他地方间隔写入

下面用fins udp进行测试:

  • 读取是可重入
  • 写入是不可重入
  • 在操作tcp时加锁

工况1

  • 一个循环批量轮询PLC信号,间隔1ms
  • 一个循环读取字符串(INT数组),间隔2000ms
  • 32个循环4s内随机间隔写入一个寄存器


    轮询的耗时大概为20-30ms,写入的时间也大概为20-30ms,对应

工况2

  • 一个循环批量轮询PLC信号,间隔1ms
  • 一个循环读取字符串(INT数组),间隔1ms
  • 32个循环4s内随机间隔写入一个寄存器
    轮询的耗时大概为20-50ms,写入的时间也大概为20-50ms,耗时相对第一种加长

    增加一个读取条码的循环后,耗时增加

工况3

  • 一个循环批量轮询PLC信号,间隔1ms
  • 一个循环读取字符串(INT数组),间隔1ms
  • 32个循环写入一个寄存器,间隔1ms
    轮询的耗时大概为20-50ms,写入的时间也大概为20-50ms,耗时相对第一种加长,相对第二种无变化

    结合工况2,可以得出write.vi的间隔减少,不影响read.vi的耗时,因此轮询的地方越少越好

工况4

  • 一个循环批量轮询PLC信号,间隔1ms
  • 一个循环读取字符串(INT数组),间隔1ms
  • 32个循环写入一个寄存器,间隔1ms
  • 增加8个循环轮询一个寄存器,间隔1ms
    轮询的耗时大概为150-200ms,写入的时间也大概为150-200ms,耗时大大加长


    结合工况2和工况3,可以得出read.vi的间隔减少,会影响read.vi的耗时,因此轮询的地方越少越好

工况5

  • 一个循环批量轮询PLC信号,间隔1ms
  • 一个循环读取字符串(INT数组),间隔1ms
  • 32个循环写入一个寄存器,间隔1ms
  • 增加8个循环轮询一个寄存器,间隔2000ms
    轮询的耗时大概为20-50ms,写入的时间也大概为20-50ms,耗时相对第一种加长,和第二种相当


    结合工况3和工况4,可以得出read.vi的间隔减少,会影响read.vi的耗时,但是间隔较长的话,影响会比较小,因此轮询的地方越少越好

工况5

  • 一个循环批量轮询PLC信号,间隔1ms
  • 一个循环读取字符串(INT数组),间隔2000ms
  • 32个循环写入一个寄存器,间隔1ms
  • 增加8个循环轮询一个寄存器,间隔2000ms
    轮询的耗时大概为20-50ms,写入的时间也大概为20-50ms,耗时相对第一种加长,和第二种相当
    但是读取条码的耗时会加长,30-158ms


    结合工况5,可以得出read.vi的耗时需要看同一时间有多少在执行,由于锁,耗时会浮动较大

二、测试

  • PC和PLC交互的耗时在于:①交互的时间,多个PC操作一个PLC的时候,可能会减慢,②同一个程序,多个地方读写,锁的耗时

  • PC执行一条读/写指令的耗时是相同的,批量读1000个地址和读1个地址的耗时是一样的

  • 多个地方在同时读写,会因为锁的原因,实际执行是按顺序执行的,也就是说,同一时间,很多地方在读/写的话,会存在先后执行关系

    以下日志实际是6个同时写入,<注液孔定位1X_PC>先写完,<注液孔定位2Data_PC>最后写完,总耗时是411

  • 以50ms轮训,PLC拿到复位信号,大概在30ms以内,说明PC和PLC彼此响应的时间都比较快

三、交互原则

1、所有地址规划在一个较小的范围内,以免返回字节过多,测试1000个一次读取和一次

2、尽量减少轮询的地方,最好只有一个循环在轮询,通过队列来触发流程

3、最简交互:

  • 握手交互
    ①PLC→PC:将结论置0,将握手赋值非0,具体值可以再规划,例如可以按照工位,触发工位1,就将握手赋值1等等
    ②PC→PLC:轮询握手,不为0时,把值缓存下来,并将握手赋值为0
  • 数据交互
    ③PC→PLC:执行正常流程,把所有该发送的数据尽量调整至一条指令发送,由于大部分PLC不支持随机写,所以要求数据尽量连续
相关推荐
乌恩大侠15 天前
X波段相控阵雷达开发平台 高等教育 雷达上课
科技·labview·雷达·通信工程
LabVIEW开发1 个月前
LabVIEW音频测试分析
音视频·labview·labview知识
LabVIEW开发1 个月前
LabVIEW自感现象远程实验平台
labview
LabVIEW开发1 个月前
LabVIEW Modbus 主站冗余控制
labview·labview知识
LabVIEW开发1 个月前
LabVIEW的MathScript Node 绘图功能
labview
LabVIEW开发1 个月前
LabVIEW基于 DataSocket从 OPC 服务器读取数据
labview
LabVIEW开发1 个月前
LabVIEW准分子激光器智能控制系统
labview·labview开发案例
LabVIEW开发1 个月前
LabVIEW比例阀性能测试试验台
labview
LabVIEW开发1 个月前
LabVIEW软件开发过程中如何保证软件的质量?
labview
无垠的广袤1 个月前
【萤火工场GD32VW553-IOT开发板】ADC电压的LabVIEW采集
c++·单片机·嵌入式硬件·物联网·labview