关键词:分页访问 代码切换 无纸记录仪
记录仪是工业生产自动化系统中常见的二次仪表。传统的记录仪功能单一,机械结构易发故障,日常维护工作繁琐,已经无法满足生产过程综合自动化的要求。笔者天1998年研制的彩色中长图无纸记录仪,已经实现了产品化,并广泛应用于化工、钢铁行业的过程监控,获得用户的好评。在此基础上,根据用户的实际需求以及使用意见,笔者又开发了新一代的彩色小长图无纸记录仪。该记录仪具有5"DSTN彩色液晶显示,1~8通道万能输入、16点报警、2点PID输出,尺寸小、功能全、可满足大多数行业的需求。
1 主要功能
(1)信号采样:模拟输入通道1~8路。全隔离万能输入,可输入0~10V、0~5V、0~10mA、4~20mA标准信号和PT100、Cu50热电阻信号以及K、S、B、N、T、E、J、R热电偶信号。用户直接在组态画面选择,无需更换输入通道板。记录间隔可设置为1/2/4/8/20/40/60/120/240等。
(2)组态功能:该记录仪具有强大的组态功能,用户可对通道信号类型、单位、量程、显示范围、记录间隔、报警上下限以及显示画面、历史追忆、流量累计、PID参数等进行设置。图形化的组态界面,操作简单。
(3)显示功能:全中文图形界面,菜单驱动,信息直观丰富,操作简单。主要显示画面:水平趋势画面、垂直趋势画面、棒图画面、数字画面(以上画面均可1~8通道选择)、历史数字趋势追忆画面(单通道或多通道同时)、多通道流量累计画面、组态画面(包括通道设置、显示设置、流量累计设置、PID参数设置、历史追忆设置等画面)。
(4)存储功能:采用大容量Flash作为主要存储设备(用户可选1/2/4/6M)。软盘作为辅助,用户可以将任意时间段内的数据转存到软盘,然后在PC机上进行显示、分析、打印。
(5)通讯功能:提供RS-232/RS-485通讯接口。可远距离通讯,多台仪表组网。配合上位PC机软件可实现远程监控。
(6)打印功能:提供常用微型打印机接口,打印任意时间段内数据、趋势曲线、流量累计值等。
(7)报警功能:配有16点开关量输出通道(可选长开/长闭),根据各通道设置的上下限,在显示画面实时显示报警信息的同时输出报警信号。
(8)简单PID调节功能:具有两路PID输出通道,信号类型为1~5~/4~20mA。
2 硬件设计
作者先前开发的彩色中长图无纸记录仪内部采用了上下位机的结构。上位机采用ALL-IN-ONE型PC104嵌入式模板作为硬件平台,直接接入GB级硬盘和1.44MB软盘、640×480的10“彩色TFT液晶显示屏、6键数字键盘。下位机采用以PHILIPS公司80C552为控制核心的采集模块。上位机负责画面显示、用户组态、数据管理、打印以及远程通讯(RS232或485)。下位机负责信号调理、数据计算、报警以及PID输出。上下位机间通过RS232接口连接,传递通道组态信息和通道数据值。结构框图见图1。采用该种结构的优点是模块化设计,上下位机各司其职,分工合作;应用灵活,兼容性好;故障定位容量。该系统的易用性和可靠性已经在工厂应用得到了证明。但也要看到,在该系统中,PC104模板的功能并没有被充分使用,硬件空间浪费严重(目前市场上已买不到4G以下容量的硬盘了),液晶显示屏价格昂贵,从而导致了记录仪价格偏高。
在总结了中长图无纸记录仪的研发之后,在小长图无纸记录仪的设计中仍然采用了上下位机的结构。其中下位机数据采集模块与中长图无纸记录仪通用,这样避免了重复开发,并使小长图、中长图无纸记录仪成为一个体系。全新开发了以DALLAS公司80C320为核心的上位机。结构框图见图2。采用了320×240的5“DSTN彩色液晶显示屏。数据存储主要采用大容量的Flash,辅助设备采用1.44M软盘,由GM82C765负责控制。使用80C320主要基于两点考虑:一是80C320具有两个UART,能满足记录仪内部上下位机通讯以及与外部的远程通讯,软件编制的复杂程度也大大降低;二是软驱控制器GM82C765的实时性要求比较高,而80C320的4周期技术可使其在与其它51芯片采用相同晶振的条件下,指令执行速度快三倍;加上双DPTR的结构,能提高程序执行效率,从而更好地与GM82C765配合。
由于液晶屏采用RAM方式驱动,并且大容量的并行Flash存储器远远超出了51单片机64K的数据寻址空间,因此,我们对80C320进行了数据空间扩展,增加了8根地址线。对增加的地址空间我们进行了分页管理(每个页面大小为32K),利用51原有的高端32K数据空间进行换页访问。在增加的数据空间内,我们安排了32K的I/O空间、64K的液晶显示空间以及Flash存储器空间,扩充的数据空间达到8M。原理图见图3。
对编程而言,数据空间就是原有的64K空间。当程序要访问扩充的数据空间时,先向地址0x7FFF写入高8位地址进行页面选择,由硬件片选电路将被选择的页面映射到原51的高端32K数据空间。此后对高端32K数据空间的访问就是对所选扩展数据空间页面的访问。扩充数据空间总共有分为256个页面。低端32K数据空间的访问不受页面选择的影响。
由于51系列单片机体系结构上的限制,其代码空间只有64K。小长图无纸记录仪软件采用C语言编写,菜单驱动全中文图形界面显示,并且功能完备,软件代码的长度超出了64K。为了解决这个问题,我们开创性地使用了扩充代码空间并自行控制片选从而切换代码空间的方法,可以说这是最小长图无纸记录仪在技术上的一个创新。其硬件原理见图4。而在软件设计上,为了保证程序能在两块代码空间自由切换且保证运行正常,在软件编写以及编译连接定位上均有较高的要求。
这在下面的软件设计一节中详细说明。
3 软件设计
小长图无纸记录仪软件采用C语言和汇编语言混合编写。用C语言进行编程能提高开发的效率以及代码的质量,但在实时性要求较高的场合,目前的C51编译器仍有其局限性。因此,软件的主体部分采用C语言编写;而对实时性要求严格的GM82C765软驱控制器的访问、液晶屏有驱动等底层函数均采用51汇编语言编写。C程序和汇编语言模块之间的连接主要解决变量传递、共享及代码调用等问题。限于篇幅,在此就不多论述了,有兴趣的读者论坛者请参阅参考文献3。
软件设计中要解决的关键问题是代码切换。其原理图见图5。
原理图中Function1与Funciton2代码很大,当它们放在一个工程中编译时,代码超出了64K的限制。因此将它们分置于两个代码空间中。相应的程序必须分成两个工程来编写。其中Function1放在ROM1中,Function2放在ROM2中,MainLoop(主循环)与SwitchChip(空间切换函数)为公共函数;民时为了工程能够被正确编译连接,在ROM1和ROM2中分别加放了Function2与Function1的空函数。
代码空间切换的流程是这样的:假定上电后,程序开始运行于ROM1空间,进入MainLoop循环等待事件发生。当某一时刻,event2事件发生,程序调用SwitchChip,参数为2(见图中①)。进入SwitchChip函数后,根据参数设置片选,选中ROM2,此后程序在ROM2空间运行(见图中②)。SwitchChip函数返回,开始调用ROM2中真正的Function2函数(见图中③)。完毕后程序在ROM2空间中的MainLoop循环,等待新事件发生。
当程序运行在ROM2中的MainLoop时,event1事件发生,程序调用SwitchChip,参数为1(见图中④)。进入SwitchChip函数后,根据参数设置片选,先中ROM1,从而程序回到ROM1空间运行(见图中⑤)。SwitchChip函数返回,开始调用ROM1中真正的Function1函数(见图中⑥)。执行完毕后程序在ROM1空间中的MainLoop循环。而当程序运行在ROM1中发生event1事件时,调用SwitchChip不会切换ROM空间,从而能正确调用Function1函数。同理在ROM2中发生event2事件也是一样。
从原理图以及上述流程可以看出,使两块ROM空间进行正确切换的必要条件是:
·两块ROM中MainLoop函数的起始地址必须相同,并且语句必须完全一样,从而保证每条语句的地址是相同的。在ROM切换后,函数调用的返回地址是相同的。程序能正常运行而不跑飞。
·同理,两块ROM中SwitchChip函数体必须完全相同并定位在相同的地址。
·两个工程中的全局变量在RAM中的定位必须完全一致,否则将出现不可预期的后果。
·ROM片选线的切换速率必须足够快,使得CPU在读取下一条指令前片选信号就已稳定下来。
程序中函数以及变量的定位可参考C51编译器以及连接器的定位开关,这里就不展开了。
彩色小长图无纸记录仪的设计与开发保持了与彩色中长图无纸记录仪的通用性。基本功能一致,体积减小,成本降低。并且使用了数据空间(RAM)扩展分页访问管理、代码空间(ROM)扩展切换等新技术。