达州网站建设yufanse,三网合一 做网站,wordpress 360浏览器,合肥网站优化平台一、写法
写命令立即读出
写命令后立即读出#xff0c;在同一时间不能有多个地方写入#xff0c;因此需要在整个写入后读出过程加锁 项目中会存在多个循环并行执行该VI#xff0c;轮询PLC指令 在锁内耗时#xff0c;就是TCP读写的实际耗时为5-8ms#xff0c;在主VI六个…一、写法
写命令立即读出
写命令后立即读出在同一时间不能有多个地方写入因此需要在整个写入后读出过程加锁 项目中会存在多个循环并行执行该VI轮询PLC指令 在锁内耗时就是TCP读写的实际耗时为5-8ms在主VI六个循环里统计的耗时是读取PLC寄存器的整个耗时为10-40ms 因此可以得出结论由于锁会让TCP读写的代码块变为同步因此如果越多地方在同一时操作PLC寄存器会增加整体耗时。 在项目中轮询信号应该只在一个地方批量把寄存器里的值读取出来。
写法1以写命令立即读出用一个地方批量读取其他地方间隔写入
下面用fins udp进行测试
读取是可重入写入是不可重入在操作tcp时加锁
工况1
一个循环批量轮询PLC信号间隔1ms一个循环读取字符串(INT数组)间隔2000ms32个循环4s内随机间隔写入一个寄存器 轮询的耗时大概为20-30ms写入的时间也大概为20-30ms对应
工况2
一个循环批量轮询PLC信号间隔1ms一个循环读取字符串(INT数组)间隔1ms32个循环4s内随机间隔写入一个寄存器 轮询的耗时大概为20-50ms写入的时间也大概为20-50ms耗时相对第一种加长 增加一个读取条码的循环后耗时增加
工况3
一个循环批量轮询PLC信号间隔1ms一个循环读取字符串(INT数组)间隔1ms32个循环写入一个寄存器间隔1ms 轮询的耗时大概为20-50ms写入的时间也大概为20-50ms耗时相对第一种加长相对第二种无变化 结合工况2可以得出write.vi的间隔减少不影响read.vi的耗时因此轮询的地方越少越好
工况4
一个循环批量轮询PLC信号间隔1ms一个循环读取字符串(INT数组)间隔1ms32个循环写入一个寄存器间隔1ms增加8个循环轮询一个寄存器间隔1ms 轮询的耗时大概为150-200ms写入的时间也大概为150-200ms耗时大大加长 结合工况2和工况3可以得出read.vi的间隔减少会影响read.vi的耗时因此轮询的地方越少越好
工况5
一个循环批量轮询PLC信号间隔1ms一个循环读取字符串(INT数组)间隔1ms32个循环写入一个寄存器间隔1ms增加8个循环轮询一个寄存器间隔2000ms 轮询的耗时大概为20-50ms写入的时间也大概为20-50ms耗时相对第一种加长和第二种相当 结合工况3和工况4可以得出read.vi的间隔减少会影响read.vi的耗时但是间隔较长的话影响会比较小因此轮询的地方越少越好
工况5
一个循环批量轮询PLC信号间隔1ms一个循环读取字符串(INT数组)间隔2000ms32个循环写入一个寄存器间隔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不支持随机写所以要求数据尽量连续