IoTask设计

来源:互联网 发布:windows运行机制 编辑:程序博客网 时间:2024/06/14 16:28
Iotask是单线程的,它会循环扫描每个通道上,由于每个通道上都有一种协议,其实就是一个插件(dll), 每个插件都export出
OnInit
OnRead
OnWrite
OnComplete
OnTimeOut
接口, Iotask启动的时候会调用OnInit函数,然后进行打包(就是按照扫面时间和Modbus地址的连续性进行分类),接着按照分类的包再调用OnRead函数,参数是Package,OnRead会返回一个值,表示是否需要关心设备的返回值,
如果需要关心,那么Iotask会在收到这个通道上的来自设备的数据后调用这个插件的OnComplete函数,并在这个函数中检查数据是否完整,并把接收到的数据放到实时数据库中。如果不需要关心此设备的返回值,那么就不需要调OnComplete函数。而且如果需要等返回值,那么需要等到值回来以后在调用下一种包的OnRead函数,即调完这种包的OnRead函数后就继续调用下一个通道的OnRead函数了,否则如果不需要等返回的话,就调用同一个通道的下一种包的OnRead函数了。