当前位置: 首页 > news >正文

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不支持随机写,所以要求数据尽量连续
http://www.lryc.cn/news/533145.html

相关文章:

  • Idea 2024.3 使用CodeGPT插件整合Deepseek
  • [论文笔记] Deepseek-R1R1-zero技术报告阅读
  • VUE之组件通信(三)
  • 【Redis实战】投票功能
  • linux常用基础命令 最新1
  • UnityShader学习笔记——多种光源
  • 深入浅出谈VR(虚拟现实、VR镜头)
  • 项目2 车牌检测
  • Linux: 网络基础
  • 【实战篇】巧用 DeepSeek,让 Excel 数据处理更高效
  • Flink CDC YAML:面向数据集成的 API 设计
  • RabbitMQ技术深度解析:打造高效消息传递系统
  • DeepSeek与人工智能的结合:探索搜索技术的未来
  • TAPEX:通过神经SQL执行器学习的表格预训练
  • Qt:Qt基础介绍
  • 加速度计信号处理
  • 基于SpringBoot养老院平台系统功能实现六
  • Conmi的正确答案——Rider中添加icon作为exe的图标
  • 机试题——DNS本地缓存
  • Day38【AI思考】-彻底打通线性数据结构间的血脉联系
  • 【LeetCode】152、乘积最大子数组
  • [MRCTF2020]Ez_bypass1(md5绕过)
  • MySQL 缓存机制与架构解析
  • LabVIEW自定义测量参数怎么设置?
  • 海思的一站式集成环境Hispark Studio更新了
  • TresJS:用Vue组件构建3D场景的新选择
  • Axure设计教程:动态排名图(中继器实现)
  • 攻防世界 文件上传
  • 从 .NET Framework 升级到 .NET 8 后 SignalR 问题处理与解决方案
  • 《Node.js Express 框架》