借助PLC-Recorder,汇川中型PLC(AM、AC系列,CODESYS平台)2ms高速采集的方法

本文主要是介绍借助PLC-Recorder,汇川中型PLC(AM、AC系列,CODESYS平台)2ms高速采集的方法,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

高速数据采集要保证速度,也要保证时刻的准确性。在windows系统里,时间稳定性是个很难的问题。如果PLC发送的数据里带有时间信息,则可以由PLC来保证采样周期的稳定性。

从V2.12版本开始,PLC-Recorder软件可以处理发送电文里的时间戳,有网友用0.24ms的速度外发,软件也能够稳定接收并精确确定数据的时刻。

本文向大家展示一下汇川CODESYS平台PLC(AM等系列)通过UDP快速通讯的实现方法。

一、测试条件

下面用AM401实现带有时间戳的高速数据采集,测试条件如下:

  • PLC的主任务设置成1ms的循环(最小只能设置成1ms。测试发现设置为“惯性滑行”时,实际周期为3ms)。
  • 通讯协议:UDP(目前只有该协议,在高速模式下才支持时间戳)。
  • 编程软件和系统:InoProShop(基于CODESYS V3平台)
  • PLC的系统版本:3.5.11.10,IP地址:192.168.0.1
  • 微型工控机(Intel® Celeron J1900 2.0GHz四核低功耗处理器) 4核 4G内存,SSD硬盘,无风扇,WIN10系统,无其他大型软件。IP地址:192.168.0.100。

二、测试结论

本次测试采用了连续循环,每两个周期发送一次(上升沿触发)。实测发送周期:2ms

三、PLC的发送程序

1、时间戳

通过读取PLC的启动后的运行时间(精确到纳秒,本软件支持微秒和毫秒时间戳)来获得时间戳,输出恰好uint32类型(PLC里是udint),此处选择微秒为单位,从0到4_294_967_295之间递增,自然翻转(自动归零)。70分钟翻转一次。时间戳是个时间差值,PLC-Recorder在开始记录时,会将首个时间戳与计算机的当前时间进行比较(对时),后续就用相对时间进行计算,并自动处理翻转的问题。因此,PLC不需要保证绝对时钟的准确性,只要相对稳定即可。

2、自定义的数据结构

本试验用联合数据类型(Union),结合结构变量解决结构体变量转字节数组的问题,详细参考文章。相关数据结构如下:

TYPE union_udint :
UNIONValue:UDINT;Bytes:ARRAY[0..3] OF BYTE;
END_UNION
END_TYPETYPE union_uint :
UNIONValue:UINT;Bytes:ARRAY[0..1] OF BYTE;
END_UNION
END_TYPETYPE union_real :
UNIONValue:REAL;Bytes:ARRAY[0..3] OF BYTE;
END_UNION
END_TYPETYPE union_lreal :
UNIONValue:LREAL;Bytes:ARRAY[0..7] OF BYTE;
END_UNION
END_TYPETYPE DUT_SEND_DATA:
STRUCTSTAMP :union_udint;//单位为微秒的时间戳data1:union_uint;//UInt类型的数值data2:union_real;//浮点数类型的数值data3:union_lreal;//双精度类型的数值	
END_STRUCT
END_TYPE

3、主程序的局部变量

VARUDP_Peer_1 :UDP_Peer;UDP_Send_1:UDP_Send;ib_Connect_Enable: BOOL:=TRUE;//连接允许PLC_IpAddrLocal:STRING:='192.168.0.1' ;//PIC本地IP地址,此处用于计算机仿真,实际请参考PLC配置进行修改。PLC_PortLocal:UINT:=1217;//PIC本地端口号vb_dConnection: __XWORD;//UDP通讯句柄ob_Connect_Done: BOOL;//连接完成ob_Connect_Busy: BOOL;//正在连接ob_Connect_Error: BOOL;//连接出错ob_Connect_Actived: BOOL;//连接成功ob_Connect_ErrorID: DWORD;//连接错误信息ib_Send_Enabled: BOOL:=TRUE;//发送允许	isi_ServerIP: STRING:='192.168.0.100' ;//服务器IP地址,此处用于计算机仿真,实际请参考PLC配置进行修改。;isi_ServerPort: UINT:=5010;	// 服务器端口号id_SendLength: UINT:=200;//发送长度(字节)id_SendBuffer:ARRAY[0..199] OF BYTE;//发送缓冲器。vd_SendTimeOut: UDINT:=500000;//超时长度usob_SendDone: BOOL;ob_SendBusy: BOOL;ob_SendErrorID: DWORD;sendData:DUT_SEND_DATA;clockus:ULINT;pArray:UINT;i:UINT;sendPulse:BOOL;
END_VAR

4、PLC程序

GetSystemTime(uliTimeUs=>clockus);//获取运行时间(微秒为单位)
sendPulse:=NOT(sendPulse);//发送脉冲,每周期跳变一次
sendData.STAMP.Value:=ULINT_TO_UDINT(clockus);//截取低4字节的值。
//周期计数
IF sendPulse THENsendData.data1.Value:=sendData.data1.Value+1;IF UINT_TO_INT( sendData.data1.Value) >=30000 THENsendData.data1.Value:=0;END_IFsendData.data3.Value:=UINT_TO_LREAL(sendData.data1.Value);
END_IF//数据打包到发送缓冲器,直接操作字节数组。
pArray:=0;
FOR i:=0 TO SIZEOF(sendData.STAMP.Bytes)-1 BY 1 DOid_SendBuffer[pArray]:=sendData.STAMP.Bytes[i];pArray:=pArray+1;
END_FOR
FOR i:=0 TO SIZEOF(sendData.data1.Bytes)-1 BY 1 DOid_SendBuffer[pArray]:=sendData.data1.Bytes[i];pArray:=pArray+1;
END_FOR
FOR i:=0 TO SIZEOF(sendData.data2.Bytes)-1 BY 1 DOid_SendBuffer[pArray]:=sendData.data2.Bytes[i];pArray:=pArray+1;
END_FOR
FOR i:=0 TO SIZEOF(sendData.data3.Bytes)-1 BY 1 DOid_SendBuffer[pArray]:=sendData.data3.Bytes[i];pArray:=pArray+1;
END_FOR
//UDP通讯链路创建
UDP_Peer_1(xEnable:=ib_Connect_Enable,strIpAddrLocal:=PLC_IpAddrLocal,uiPortLocal:=PLC_PortLocal,xDone=>ob_Connect_Done,xBusy=>ob_Connect_Busy,xError=>ob_Connect_Error,dwErrorID=>ob_Connect_ErrorID,	xActive=>ob_Connect_Actived,hPeer=>vb_dConnection);//UDP发送指令
UDP_Send_1(xExecute:=ob_Connect_Actived AND vb_dConnection<>0 AND ib_Send_Enabled AND sendPulse,hPeer:=vb_dConnection,strIpAddrDst:=isi_ServerIP,uiPortDst:=isi_ServerPort,uiSize:=id_SendLength,pbyData:=ADR(id_SendBuffer),udiTimeOut:=vd_SendTimeOut,xDone=> ob_SendDone,xBusy=>ob_SendBusy,dwErrorID=>ob_SendErrorID);

四、PLC-Recorder侧的通讯设置

请用帕姆齐设备类型,目前,仅该类型支持时间戳功能,并选择时间戳单位为us(PLC-Recorder V2.12.7开始支持该功能)。需要配置来源的IP地址及本机收听的端口号。

五、PLC-Recorder的通道配置

此处虽然配置了采集周期,但在高速模式下不再使用该周期,以收到信息的时刻为准(以下是PLC-Recorder V3的界面,与V2稍微不同,请注意)。

六、PLC-Recorder的变量配置

从最后一个变量的起始地址和变量长度可以确定该通道的通讯电文的长度。对于TCP类型的连接,电文长度需要通过最后变量进行确定(下例子看出电文长度为200字节)。

对于UDP类型的通讯,UDP是按照完整报文进行传输的,可以自动获取长度信息,因此,不需要关注最后变量。

变量配置时,不需要定义所有的变量,仅需要定义自己关注的变量即可。

起始地址为0的变量就是PLC里定义的时间戳。

七、记录数据的情况

这是用离线分析软件Ana打开的历史数据文件(分析时长:0.5小时,采集次数96万)。从左侧的统计数据可以看出,平均采集周期是2ms(与PLC1ms的周期对应)。从右侧的波形和标尺可以看出,点距非常均匀。

八、小结

汇川的中型PLC是基于CODESYS平台,UDP通讯程序可以供其他类似系统借鉴。

采集的速度越快,需要的技术越复杂,代价也越大。PLC-Recorder的主动采集模式,基本只需要在PLC-Recorder里配置变量,不需要在PLC做什么复杂工作,这种方式很便捷,但是速度也有限(最快20ms)。高速模式,就需要在PLC里配置通讯,组织数据,然后调用通讯语句,才能够实现,因此,对于PLC工程师也有了一点要求。

高速模式采用标准以太网通讯协议,这也是大部分PLC都具备的能力,因此,可以被广泛用于快速数据采集。

2023-10-8

这篇关于借助PLC-Recorder,汇川中型PLC(AM、AC系列,CODESYS平台)2ms高速采集的方法的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/166241

相关文章

Spring Security 从入门到进阶系列教程

Spring Security 入门系列 《保护 Web 应用的安全》 《Spring-Security-入门(一):登录与退出》 《Spring-Security-入门(二):基于数据库验证》 《Spring-Security-入门(三):密码加密》 《Spring-Security-入门(四):自定义-Filter》 《Spring-Security-入门(五):在 Sprin

流媒体平台/视频监控/安防视频汇聚EasyCVR播放暂停后视频画面黑屏是什么原因?

视频智能分析/视频监控/安防监控综合管理系统EasyCVR视频汇聚融合平台,是TSINGSEE青犀视频垂直深耕音视频流媒体技术、AI智能技术领域的杰出成果。该平台以其强大的视频处理、汇聚与融合能力,在构建全栈视频监控系统中展现出了独特的优势。视频监控管理系统EasyCVR平台内置了强大的视频解码、转码、压缩等技术,能够处理多种视频流格式,并以多种格式(RTMP、RTSP、HTTP-FLV、WebS

综合安防管理平台LntonAIServer视频监控汇聚抖动检测算法优势

LntonAIServer视频质量诊断功能中的抖动检测是一个专门针对视频稳定性进行分析的功能。抖动通常是指视频帧之间的不必要运动,这种运动可能是由于摄像机的移动、传输中的错误或编解码问题导致的。抖动检测对于确保视频内容的平滑性和观看体验至关重要。 优势 1. 提高图像质量 - 清晰度提升:减少抖动,提高图像的清晰度和细节表现力,使得监控画面更加真实可信。 - 细节增强:在低光条件下,抖

JAVA智听未来一站式有声阅读平台听书系统小程序源码

智听未来,一站式有声阅读平台听书系统 🌟&nbsp;开篇:遇见未来,从“智听”开始 在这个快节奏的时代,你是否渴望在忙碌的间隙,找到一片属于自己的宁静角落?是否梦想着能随时随地,沉浸在知识的海洋,或是故事的奇幻世界里?今天,就让我带你一起探索“智听未来”——这一站式有声阅读平台听书系统,它正悄悄改变着我们的阅读方式,让未来触手可及! 📚&nbsp;第一站:海量资源,应有尽有 走进“智听

【C++】_list常用方法解析及模拟实现

相信自己的力量,只要对自己始终保持信心,尽自己最大努力去完成任何事,就算事情最终结果是失败了,努力了也不留遗憾。💓💓💓 目录   ✨说在前面 🍋知识点一:什么是list? •🌰1.list的定义 •🌰2.list的基本特性 •🌰3.常用接口介绍 🍋知识点二:list常用接口 •🌰1.默认成员函数 🔥构造函数(⭐) 🔥析构函数 •🌰2.list对象

如何解决线上平台抽佣高 线下门店客流少的痛点!

目前,许多传统零售店铺正遭遇客源下降的难题。尽管广告推广能带来一定的客流,但其费用昂贵。鉴于此,众多零售商纷纷选择加入像美团、饿了么和抖音这样的大型在线平台,但这些平台的高佣金率导致了利润的大幅缩水。在这样的市场环境下,商家之间的合作网络逐渐成为一种有效的解决方案,通过资源和客户基础的共享,实现共同的利益增长。 以最近在上海兴起的一个跨行业合作平台为例,该平台融合了环保消费积分系统,在短

浅谈主机加固,六种有效的主机加固方法

在数字化时代,数据的价值不言而喻,但随之而来的安全威胁也日益严峻。从勒索病毒到内部泄露,企业的数据安全面临着前所未有的挑战。为了应对这些挑战,一种全新的主机加固解决方案应运而生。 MCK主机加固解决方案,采用先进的安全容器中间件技术,构建起一套内核级的纵深立体防护体系。这一体系突破了传统安全防护的局限,即使在管理员权限被恶意利用的情况下,也能确保服务器的安全稳定运行。 普适主机加固措施:

Android平台播放RTSP流的几种方案探究(VLC VS ExoPlayer VS SmartPlayer)

技术背景 好多开发者需要遴选Android平台RTSP直播播放器的时候,不知道如何选的好,本文针对常用的方案,做个大概的说明: 1. 使用VLC for Android VLC Media Player(VLC多媒体播放器),最初命名为VideoLAN客户端,是VideoLAN品牌产品,是VideoLAN计划的多媒体播放器。它支持众多音频与视频解码器及文件格式,并支持DVD影音光盘,VCD影

webm怎么转换成mp4?这几种方法超多人在用!

webm怎么转换成mp4?WebM作为一种新兴的视频编码格式,近年来逐渐进入大众视野,其背后承载着诸多优势,但同时也伴随着不容忽视的局限性,首要挑战在于其兼容性边界,尽管WebM已广泛适应于众多网站与软件平台,但在特定应用环境或老旧设备上,其兼容难题依旧凸显,为用户体验带来不便,再者,WebM格式的非普适性也体现在编辑流程上,由于它并非行业内的通用标准,编辑过程中可能会遭遇格式不兼容的障碍,导致操

科研绘图系列:R语言扩展物种堆积图(Extended Stacked Barplot)

介绍 R语言的扩展物种堆积图是一种数据可视化工具,它不仅展示了物种的堆积结果,还整合了不同样本分组之间的差异性分析结果。这种图形表示方法能够直观地比较不同物种在各个分组中的显著性差异,为研究者提供了一种有效的数据解读方式。 加载R包 knitr::opts_chunk$set(warning = F, message = F)library(tidyverse)library(phyl