网站大全软件,厂家网页制作,电脑版网页登录入口,牡丹江网络推广公司高速数据采集要保证速度#xff0c;也要保证时刻的准确性。在windows系统里#xff0c;时间稳定性是个很难的问题。如果PLC发送的数据里带有时间信息#xff0c;则可以由PLC来保证采样周期的稳定性。
从V2.12版本开始#xff0c;PLC-Recorder软件可以处理发送电文里的时间…高速数据采集要保证速度也要保证时刻的准确性。在windows系统里时间稳定性是个很难的问题。如果PLC发送的数据里带有时间信息则可以由PLC来保证采样周期的稳定性。
从V2.12版本开始PLC-Recorder软件可以处理发送电文里的时间戳有网友用0.24ms的速度外发软件也能够稳定接收并精确确定数据的时刻。
本文向大家展示一下汇川CODESYS平台PLCAM等系列通过UDP快速通讯的实现方法。
一、测试条件
下面用AM401实现带有时间戳的高速数据采集测试条件如下
PLC的主任务设置成1ms的循环最小只能设置成1ms。测试发现设置为“惯性滑行”时实际周期为3ms)。通讯协议UDP目前只有该协议在高速模式下才支持时间戳。编程软件和系统InoProShop基于CODESYS V3平台PLC的系统版本3.5.11.10IP地址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(uliTimeUsclockus);//获取运行时间微秒为单位
sendPulse:NOT(sendPulse);//发送脉冲每周期跳变一次
sendData.STAMP.Value:ULINT_TO_UDINT(clockus);//截取低4字节的值。
//周期计数
IF sendPulse THENsendData.data1.Value:sendData.data1.Value1;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:pArray1;
END_FOR
FOR i:0 TO SIZEOF(sendData.data1.Bytes)-1 BY 1 DOid_SendBuffer[pArray]:sendData.data1.Bytes[i];pArray:pArray1;
END_FOR
FOR i:0 TO SIZEOF(sendData.data2.Bytes)-1 BY 1 DOid_SendBuffer[pArray]:sendData.data2.Bytes[i];pArray:pArray1;
END_FOR
FOR i:0 TO SIZEOF(sendData.data3.Bytes)-1 BY 1 DOid_SendBuffer[pArray]:sendData.data3.Bytes[i];pArray:pArray1;
END_FOR
//UDP通讯链路创建
UDP_Peer_1(xEnable:ib_Connect_Enable,strIpAddrLocal:PLC_IpAddrLocal,uiPortLocal:PLC_PortLocal,xDoneob_Connect_Done,xBusyob_Connect_Busy,xErrorob_Connect_Error,dwErrorIDob_Connect_ErrorID, xActiveob_Connect_Actived,hPeervb_dConnection);//UDP发送指令
UDP_Send_1(xExecute:ob_Connect_Actived AND vb_dConnection0 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,xBusyob_SendBusy,dwErrorIDob_SendErrorID);
四、PLC-Recorder侧的通讯设置
请用帕姆齐设备类型目前仅该类型支持时间戳功能并选择时间戳单位为usPLC-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