基于80C166单片机PEC服务的PROFIBUS-FDL从站协议实现
第二阶段的帧控制字处理请参考PROFIBUS标准的相关内容。对于第三阶段的组织和发送应答帧,由于数据长度和内容已知,只要定义好串口发送中断/服务,定义好相应的PEC通道:源地址为发送数据缓冲区首址+1、目的地址为串口发送缓冲器、COUNT域为发送字节数-1,将所要发送数据的第一个字节写入串口发送缓冲器,即可触发串口发送相关的PEC服务;当COUNT减为0时,触发串口发送中断服务子程序,完成串口数据发送过程。由于该过程实现简单,不作详细讨论。这里主要讨论第一阶段的帧完整接收实现过程。
从上面的帧结构分析可见,帧的长度是不固定的。因此,为提高接收效率,应用PEC服务分三步进行数据的批量接收。
4.1 第一步:帧头接收
首先,初始化时,定义串口接收PEC服务为连续接收三字节,用于接收帧的前三字节。
由第一个字符SDx(x=1,2,3)判断帧类型;对于不带数据固定长度帧和带数据固定长度帧接下来的两个字符是DA、SA,判断DA是否为本机地址;而对于带数据长度可变帧,接下来的两个字符是LE、LEr,判断其是否相等。
若以上判断都成立,则需定义下一次PEC服务的接收字符数:对于固定长度帧,定义PEC批量接收三字节数据,并保存DA、SA;对于可变长度帧,定义PEC服务接收四字节数据,转第二步;
若LE≠LEr或DA目的地址非本站地址,则重回到初始状态,进行帧头接收。
4.2 第二步:帧控制字接收
由于主站帧的连续发送,会再次触发PEC服务。由串口接收PEC服务连续接收三或四字节后,处理如下:
.不带数据固定长度帧,接收三字节,分别为FC、FCS、ED。对FCS和ED分别完成累加和校验与帧结束判断后,将帧控制字FC保存,转去执行帧控制字处理。
.带数据固定长度帧? 接收三字节?分别为FC和数据单元的前两个字节,保存FC,定义PEC服务接收后八个数据字节,转第三步。
.带数据可变长度帧,接收了四字节,分别为SD、DA、SA、FC。对SD再进行一次判断,之后判断DA是否为本机地址,保存DA、SA、FC,定义PEC服务接收余下的数据字节?长度由LE确定?,转第三步。
4.3 第三步:帧数据接收
当串口接收PEC服务连续接收八或更多的字节后,处理如下:
.带数据固定长度帧,接收八个字节,分别为余下的六字节数据和FCS、ED。在累加和校验与帧结束判断完毕后,转去执行帧控制字处理。
.带数据长度可变帧,接收了DATA-UNIT+2个字节,分别DATA-UNIT个数据字节和FCS、ED。在累加和校验与帧结束判断完毕后,进行协议要求的目的地址和原地址的地址扩展判断和保存,转去执行帧控制字处理。
4.4 串口接收中断服务子程序
以上三步都由串口接收中断服务子程序负责完成。每一步对应不同的处理状态。为提高程序的执行效率,用有限状态机实现。以1、2、3分别表示上述帧接收三个步骤,4表示帧控制字处理状态,其状态转换如图3。
采用这种协议实现方法,在最近研制的棒材生产线的飞剪控制器中运行效果良好。
《基于80C166单片机PEC服务的PROFIBUS-FDL从站协议实现(第3页)》