这类通信虽说遵循某种通信协议,貌似只是普通的数据读写,但实质并非如此。普通的数据读写或控制,例如变频器的控制,除了运行参数的读写外,还包括运行、停止、改变运行速度等指令发送,只要通信正常完成,控制过程也就结束了。而定位运动的控制不只是运动指令的发送,还包括定位单元运动状态的监测,比如最为常见的定位控制过程——“当前的定位运动是否已完成,如果完成,则进行下一个动作”。‘定位运动是否已完成’‘温控系统的温度是否已到设定值’‘气压是否已达到工艺要求’等等这类信息如果是通过串行通信获得的,那主控系统就必须不断地向从设备查询。如果从设备数量不多,解决这样的问题可能难度不是很大,但如果如上面所述的这类实例,大量的运动指令发送,再加上轴运行状态的获取,如果只是以通常的编程方式来解决这样的问题,可能是思绪万千、困难重重。为此有必要考虑用一种新的思路来解决这类问题。这就是本帖提出的通信调度这概念。
百度百科对调度算法的解释是:操作系统管理了系统的有限资源,当有多个进程(或多个进程发出的请求)要使用这些资源时,因为资源的有限性,必须按照一定的原则选择进程(请求)来占用资源,这就是调度。本帖的通信调度有点类同于定义中的操作系统,它管理着PLC的串行通信设备这一有限资源,按照一定的原则选择通信请求来占用资源。因此,本实例的通信调度要实现的首个功能是合理有序地安排通信任务。在有限的资源下,如何避免通信冲突是通信调度一个非常重要的功能。此外,其他要实现的功能有把通信数据处理成符合通信协议的数据格式;组织发送;响应信息的接收;通信过程中异常情况的处理(例如对象设备没有响应,接收超时,从设备报告收到的数据有误,校验错误等等);把收到的数据处理成一定格式存放在指定地址。最后还有一个重要的功能就是如上文所说的获取用户关心的信息,这个获取过程并不需要用户提出请求,而是通信调度根据设置,在闲暇时自动发起通信,收集指定的信息(例如各轴的当前位置、当前的运动状态,硬件信息等等),供用户随时调用。