通过对上述ISO15765技术特征的分析和网络层协议的理解,将ISO15765网络层进行了软件开发。主要通过数据拆分、数据重组和错误处理3个模块实现网络层的功能。在对等通信过程中,解决了时间管理和流控制管理的问题。
应用层要求发送服务数据时,调用网络层提供给它的缓冲区地址接口,将诊断服务数据存入缓冲区中。缓冲区大小在程序的头文件中进行声明,可以按照服务要求进行修改。为能够充分利用缓冲区空间,在软件实现上,将其做成循环结构的缓冲区,这样可提供给上层数据存放的首地址和数据的总长度,即可以使上层获得完整的数据。
网络层在发送数据时,每发送一帧数据后就将此帧数据所占用的缓冲区清空,以释放资源为其它数据使用。
网络层在接收数据时,由于是循环缓冲区,所以接收的分段数据就可以连续存放。
数据接收完毕后,将整段数据的首地址和总长度提供给上层,上层则可以对服务数据进行操作。如果数据接收过程中应用层要求发送诊断服务数据,那么网络层会检查是否有足够的缓冲区。如果有则向上层提供缓冲区接口;如果没有则向上层发出缓冲区溢出N_BUFFER_OVFLW的指示信号,应用层则根据信号延时等待传送。
在接收分段数据时,首先比较数据总长度和缓冲区的大小。如果缓冲区的容量较大,则继续接收数据帧,否则向发送端发出停止流控制帧。
发送端根据收到的命令中止数据发送,并向上层发出缓冲区溢出的确认信号。
在接收过程中,网络层要检查缓冲区是否有容纳下一帧数据的连续空间。如果没有,则发出等待流控制帧要求发送端等待,并延时一段时间后再次检查; 如果连续发送了最大数目的等待流控制帧后,仍然无法接收数据,则中止数据接收,向上层发出缓冲区溢出的指示;如果有足够的空间,则发出要求继续发送数据的流控制帧。
在网络层的时间管理上,需要实现延时和超时两个功能。Block块中连续帧的连续发送和等待流控制帧的连续发送都是在发送一帧数据后,延时固定的时间再调用发送任务。通信双方在每发送一帧数据或每接收连续的一帧数据后,都需要解决数据通信的超时问题。系统中要求实现延时和超时功能的服务很多,如果申请过多的定时器,会造成很重的负荷和低效的工作。为此,需要找出一种方法来减少运行中定时器的使用数量。
在网络层的软件开发中,采用计时链表来实现系统延时与超时功能。计时的基础是系统时钟,实现是在计时链表上动态地插入和删除时间节点。时间节点包含时钟节拍的计数值和时间期满时需要执行的任务接口等信息。
当需要执行延时或超时任务时,就申请Time_inser( )服务,在计时链表中动态地插入一个节点,并对其赋初值。系统时钟中断产生时,就会将计时链表上的每个节点轮寻一遍。如果节点的时间计数值为0,说明计时时间到,则通过节点包含的任务接口执行相应的操作,并申请Time_delete( )服务,删除计时节点;如果计数值不为0,则将其值减1,等待下一次的中断轮寻。通过这种方法就可以实现采用一个系统定时器来同时执行多个计时任务的目的。
在通讯过程中,任何错误情况都会使当前运行中止,并向错误处理模块发送错误指示消息。错误处理模块负责将错误指示信息与本模块中的错误类型进行匹配并做出相应的处理或启动另一个模块进行处理。
微信号:hongkeqiche
了解更多请戳www.hongkeqiche.com