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不支持随机写,所以要求数据尽量连续
相关推荐
LeonDL1681 天前
【通用视觉软件框架】基于Labview开发的视觉框架软件,全套源码,开箱即用
labview·工业视觉·labview通用视觉软件框架·labview通用机器视觉框架·labview机器视觉软件框架·labview机器视觉框架·工业ccd检测系统
LabVIEW开发2 天前
LabVIEW中 ROI的保存与加载方法
labview·labview知识·labview程序
LabVIEW开发2 天前
示波器验证LabVIEW采集波形
labview·labview知识·labview功能·labview程序
LabVIEW开发2 天前
LabVIEW是否适合商业化软件开发
自动化·labview
labview_自动化2 天前
RabbitMQ
分布式·rabbitmq·labview
浅浅的小草3 天前
LabVIEW在银河麒麟V10系统下的运行使用
labview
LabVIEW开发3 天前
LabVIEW航空发动机冲击轴承监测
labview·labview知识·labview功能·labview程序
LabVIEW开发3 天前
LabVIEW液位边缘检测
图像处理·计算机视觉·labview·labview知识·labview功能·labview程序
LabVIEW开发6 天前
LabVIEW用直线边缘检测实现液位测量
数码相机·计算机视觉·labview·labview知识·labview功能·labview程序
LabVIEW开发6 天前
LabVIEW的Vision边缘工具(Edge Tool)功能
图像处理·计算机视觉·labview·labview知识·labview功能·labview程序