2024年4月16日发(作者:)
DB接口模块设计
1 DbComm设计
DbComm通讯机制
通讯架构
DbComm为Db通讯组件的核心模块,其他模块实现如DbApi和DbOcx,DbSdk都
是在此核心模块基础上的二次封装,DbComm采用静态库的方式提供。
DbComm和Db进行通讯,分为两种模式:
本地模式:采用窗口消息机制(COPYDATA)与本地DB进行通讯
远程模式:采用TCP方式与远程NetServer进行通讯
同一时刻只能运行于一种模式,本地或者远程
DbComm
本地模式
DB
NetServer
(DB)
远程模式
不论本地还是远程模式,处理模块内部都将开辟两个线程:
数据处理线程:负责连接DB,初始化DB,数据包的解析等工作
回调函数线程:负责按照需求进行回调(连接状态变化回调,数据变化回调)
DbComm
数据处理线程
回调函数线程
所有调用函数都采用同步机制实现,发送给DB相应的请求以后将等待一个超
时时间,如果DB返回数据,调用函数成功,如果超时,调用函数失败。为了防止
交换数据过大,网络速率引起的时间延误,DBCOMM在收到正确的数据包后将刷新
超时时间,超时时间按照接收到最后一个正确的数据包计算,但最大时间不超
过超时时间的10倍。
数据流程
与DB通讯流程(本地模式和远程模式的差别只是在于通讯链路的区别,通
讯机制是相同的)
DB初始化:只有DB初始化完成以后,向DB发送各种命令才有意义
连接DB
本地:FindWindows
远程:Tcp::Connect
连接成功失败
发送
初始化DB
命令
命令成功失败
DB初始化完成
当客户端注册数据通知以后,注册的数据点在获取数据时,默认从DbComm
的内部缓存中读取数据(也可以强制从DB读取数据),以加快数据的获取速度
对于注册点,内部采用计数机制,每一个数据点内部都有一个计数器,代
表这个数据点的注册次数,注销的时候只有在计数为0时,才真正注销计数。
典型的应用为,有A、B两任务,A任务使用Tag1-10,10个点的数据,B任务使
用Tag5-15,10个点的数据,两任务有5个点的交叉,这样一个任务不用去分辨
那些点和其他任务交叉,主需要注册10个点即可,在DbComm内部会保存,Tag5-10
的注册计数为2,只有调用两次注销函数,才会真正将点从缓存中去掉,这样


发布评论