CAN适配卡的控制程序模块将来自CAN适配卡的数据进行解析、存储到数据库,以及把来自Web服务器应用程序传递来的信息进行处理并向CAN适配卡发送相应数据;Web服务器应用程序模块:负责系统的全局调度,接收客户端请求并响应,它担当着对客户控制命令的下传和对上传数据信息的处理;而Windows消息处理模块则建立了Web服务器应用程序和基于CAN适配卡的控制程序的一种沟通机制。
其中,Web服务器应用程序编程使整个系统软件设计的关键部分。在WebSnap中,可以创建五种标准类型的Web服务器应用程序,它们是ISAPI和NASPI类型、独立于操作系统的CGI类型、独立于操作系统的WinCGI类型、Apache类型和Web服务器应用程序调试器类型。为了方便调试服务器应用程序起见,我们采用了Web服务器应用程序调试器类型。它可以利用本地机虚拟的Web服务器所开发的应用程序结合到一起运行并通过C++ Builder强大的调试功能,方便地发现程序中存在的逻辑错误。
由于WebSnap具备了嵌入脚本的能力,因此我们采用Dreamweaver来制作HTML页面文件并将其作为模板集成到C++ Builder的Web服务器应用程序中,构成一个完美的服务器网站。WebSnap应用程序与数据库的连接主要通过ADO组件技术和SQL。在WebSnap应用程序的主窗体上嵌入ADOConnection组件,使WebSnap应用程序与数据库总保持逻辑连接[6]。
5 数据交互路径
系统中的数据流向大体可分为上行数据和下行数据。上行数据就是从现场采集的数据上传给服务器,下行数据就是服务器接收来自客户浏览器的命令请求下传到相应的现场设备。
5.1 下行数据
当远程客户通过身份(用户名和口令)验证进入控制主页时,选择任务,如“关闭1号储液罐进油阀”,点击提交按钮,这样服务器便接收来自客户浏览器的控制命令请求。客户浏览器把地址栏中的URL(http://192.168.1.238:1024/chuyeguan.LhjSnap/Command)内容传给了Web服务器,将URL 第二部分服务器名(192.168.1.238:1024)解码与Web服务器相连,Web服务器应用程序通过WebDispatcher将URL 第四部分路径名(Command)解析,从它的动作项列表中选取【PathInfo】属性值与Command相同的动作项。该动作项触发其对应的页面制作器PageCommand。如果没有找到匹配的动作项,WebDispatcher将调用默认的动作项。PageCommand的属性【HTMLFile】标记着对应的HTML文件地址,其事件属性【OnHTMLTag】标记着PageCommandHTMLTag。当关闭1号储液罐进油阀事件被触发时,页面制作器PageCommand开始构造HTML页面,当发现透明书签〈#IsIn进油阀〉(HTML文件代码中)时,用相应的解析函数PageCommandHTMLTag中的替换文本替代。与此同时,我们在解析函数PageCommandHTMLTag中自定义Windows消息(关闭1号进油阀)并且发送它,当基于CAN适配卡的控制程序截获这个消息时,把关闭1号进油阀编制成命令码“1101100000”封装成CAN信息帧数组的结构成员ID发送到CAN适配卡。经CAN适配卡(转换成CAN协议能识别的数据格式)传到CAN总线时,经验收码和屏蔽码辨别,被CAN总线智能节点1接收,表明要控制的对象是1号大型储液罐。与此同时,CAN控制器产生接收中断,单片机把ID分解后知道被控量是进油阀,然后运行关闭进油阀子程序满足该控制要求,经执行器执行关闭进油阀命令。至此,客户浏览器把控制命令下传给了1号大型储液罐进油阀。