ERTEC200P-2 PROFINET设备完全开发手册(3-2)

周期数据分为两大类,输出数据OutputData和输入数据InputData,输出数据是PLC发送给设备的;输入数据是设备发送给PLC。如果采用标准接口(SI),读取输出数据和写入输入数据都是一次初始化数据读写调用和一次/多次回调构成。

为了读取输出数据,用户程序要调用初始化数据读操作PNIO_initiate_data_read 在调用之后,协议栈会获取通讯缓冲区数据,并按照子槽依次回调数据读PNIO_cbf_data_read。用户程序在回调函数中处理子槽对应的过程数据pBuffer(例如保存过程数据到缓冲区),并且完成IOPS、IOCS的操作。回调的次数取决于输出子槽的个数。

为了写入输入数据,用户程序要调用初始化数据写操作PNIO_initiate_data_write 在调用之后,协议栈会获取通讯缓冲区数据,并按照子槽依次回调数据写PNIO_cbf_data_write。用户程序在回调函数中处理子槽对应的过程数据缓冲区pBuffer(例如将缓冲区数据更新到过程数据),并且完成IOPS、IOCS的操作。回调的次数取决于输出子槽的个数。

协议栈在启动以后,会启动任务Task_CycleIO,周期触发数据读写操作。

ERTEC200P-2 PROFINET设备完全开发手册(3-2)_第1张图片

 

当PLC与200P建立通讯后,在每次周期通讯结束后,协议栈都会触发回调函数PNIO_cbf_trigger_io_exchangePNIO_cbf_trigger_io_exchange每次触发后会发送一个信号量TransEndSemId给周期任务Task_CycleIOTask_CycleIO 在接受到信号量后会执行PnUsr_cbf_IoDatXch这个回调函数。

ERTEC200P-2 PROFINET设备完全开发手册(3-2)_第2张图片

Task_CycleIO基本工作原理如下图所示:

ERTEC200P-2 PROFINET设备完全开发手册(3-2)_第3张图片 

在协议栈中PnUsr_cbf_IoDatXch分别调用初始化读写PNIO_initiate_data_readPNIO_initiate_data_write。因此会触发回调函数PNIO_cbf_data_readPNIO_cbf_data_write。

在回调函数PNIO_cbf_data_read中,过程数据被拷贝至OutData

在回调函数PNIO_cbf_data_write中,InData被更新至过程数据

 

这样,用户程序只需要根据槽和子槽的编号读取OutData,即可获得PLC输出的数据Q;写入InData,即可将输入数据I更新至PLC。 在默认的例程中,64字节输入模块在 slot_num=1,subslotnum=1,对应InData[1][1][0..63]。64字节输出在 slot_num=2,subslotnum=1,对应OutData[2][1][0..63]。 

ERTEC200P-2 PROFINET设备完全开发手册(3-2)_第4张图片

 

总结一下:因此周期数据读写操作是通过PNIO_initiate_data_read/PNIO_initiate_data_write发起,在PNIO_cbf_data_read和PNIO_cbf_data_write进行数据的读取、写入。

读数据的过程如下图所示:

ERTEC200P-2 PROFINET设备完全开发手册(3-2)_第5张图片

写数据的过程如下图所示:

ERTEC200P-2 PROFINET设备完全开发手册(3-2)_第6张图片

对于输出数据,需要判断IOPS,只有当IOPS = GOOD时,才可以将收到的输出数据生效到实际的物理外设上。如果IOPS != GOOD ,表示PLC下发的输出数据无效,这时可以采取的策略时是:1)保持;2)全1;3)全0。如何选择可以由厂商自定义。

你可能感兴趣的:(Profinet从站开发,Profinet,嵌入式硬件)