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不支持随机写,所以要求数据尽量连续
相关推荐
我比怪兽还怪1 天前
simulink导出dll labview调用
labview
LabVIEW开发1 天前
LabVIEW 调用 Win10 触控键盘(TabTip.exe)说明
labview·labview知识·labview功能·labview程序·触屏键盘
ewb_topic5 天前
重新定义PC仪器:我们发明了一种方法,给“看不见”的软件延迟装上了刻度
labview·虚拟仪器
专注VB编程开发20年13 天前
上位机开发-工厂流水线机器视频VisionPro、LabVIEW 实现多物品识别的
labview·机器视觉·visionpro
9稳17 天前
基于PLC的液体自动混合加热控制系统设计
开发语言·网络·数据库·labview·plc
LabVIEW开发18 天前
LabVIEW 开发内燃机缸压采集与分析系统
labview·labview知识·labview功能·labview程序
LabVIEW开发18 天前
LabVIEW脑信息获取与成像系统
labview·labview知识·labview功能·labview程序
Gentle58618 天前
关于labview一些记录
labview
Gentle58618 天前
labview实现滚动字符串
labview
LabVIEW开发19 天前
LabVIEW系统资源监控:CPU / 内存 / 硬盘
labview·labview知识·labview功能·labview程序