基于ARM的DCS工业键盘研究与实现(二)
时间:2013-07-15 阅读:1306
工业控制现场中的分散控制系统(DCS)需要特定 的DCS操作员键盘对其进行控制。本文研究基于 ARM微处理器的DCS工业键盘,设计了具有 USB2.0通信协议的标准HID类键盘接口程序以及具有标准PC键盘和DCS功能扩展键盘功能的键盘任 务处理程序,有效实现了该键盘。实验结果表明, 设计合理、系统稳定与可靠,能满足工业现场环境的需要。
引言
随着工业控制现场中分散控制系统(DCS)的发 展,需要特定的DCS操作员键盘对系统进行控制。该 键盘使操作员能对系统的操作更加直观,操作方法更 加简捷,以降低对操作员的操作技能要求,进一步减 少误操作的可能,从而提高整个生产线的自动化能力。 DCS操作员键盘正是基于这个目的产生的。该键盘在 功能上除了兼容标准PC键盘的功能外,增加了 DCS 功能扩展区和用户自定义扩展区。在该键盘按键壳体 上印刷按键功能,如逻辑开、逻辑关、手动、自动、报警、 输出步长等等,一旦有按键动作,键盘立刻响应并将按 键编码发给主机,主机根据接收到的按键编码调用相 应的子函数来完成响应功能。同时该键盘支持目前广 泛流行的USB接口的标准PC键盘通讯协议。USB协 议专门为人机交互设备提供了接口描述,即HID设备 类。用户可以按照HID设备类的协议设计通用键盘, 也可以根据自己的需要设计特殊的键盘,以满足不同 的应用场合。USB通信协议的设备一旦接入主机USB 接口 ,主机调用底层驱动自动完成USB设备的枚举, 实现方便快捷的即插即用。另外该键盘可记挂标准 PC键盘,即便在DCS操作员键盘故障或在工程 师操作管理模式下,可使用标准PC键盘做进一步的 操作。在基本功能上与标准PC键盘保持一致,可相互 控制Capslock状态。本文描述的正是这样一个基于 ARM的DCS工业键盘的研究与实现。
2.1USB任务处理设计
USB键盘是HID类设备的一种,遵循着USB设 备启动过程。即每次设备接入总线,*入设备检测 状态,总线对设备进行总线复位。其次是设备枚举过 程,在这里USB设备将被枚举为标准的HID类键 盘。主机通过默认端点0发送SETUP包,得到设备 描述符,然后给设备分配新的地址,分配成功后, 主机将通过新的设备地址向设备依次发送标准USB 请求来获取设备的配置信息,即获得设备描述符、配 置描述符、接口描述符、端点描述符、HID描述符 和报表描述符。通过设备的这些描述符,主机就知 道了设备的详细信息,并根据设备的配置情况对设备 的端点进行操作。这些操作包括初始化端点数目,分 配各端点所需使用的Packet Buffer;初始化所使用的 端点,配置端点的传输类型、传输方向、Packet Buffer地址和初始状态。在需要发送数据或接收数据 的时候,使能端点;并在该端点的中断回调函数中, 处理数据,如果需要则使能下一次传输。以上便是实 现USB键盘设备的步骤。
USB设备描述符如下:
在实际设计与开发中,由于STM32提供丰富的 USB标准函数库,充分使用该函数库会加快开发进 程。下面是一段对IN端点的初始化和使能,以及 IN传输的关键代码:
2.2键盘任务处理设计
键盘任务处理函数keyboard ()流程图如图3所 示。先对按键进行扫描,若无按键按下,则每隔 10ms扫描一次。若有按键按下,记录下按键所处键 盘的位置代码,转向消抖处理。所按下按键若通过 消抖处理,则确认其位置代码,进入到按键处理阶 段,将位置代码转换为按键HID码并发送。否则释 放其位置代码,转到按键扫描处重新扫描。发送完 其HID码的按键再进行消抖处理看释放否。若按键 未释放则继续等待,若已释放则转向按键扫描处重新扫描。
在具体设计中引入状态转移分析法和定时器中 断。将按键的所有状态分为4种。状态0为按键扫 描,状态1为按键消抖处理并确认,状态2为按键键 码转换并发送,状态3为等待按键释放状态。以上的 函数流程实际上是在这4个状态中转移, 如图 4所 示。设置一个状态标志位key_state来表示按键所处 的不同状态,采用多分支结‘ swich-case,可以很方便的实现。
而定时器中断是使MCU的TIM2定时器产生 10ms的定时中断。主程序每隔10ms中断调用key¬board ()函数一次。当无按键按下时,key_state二0, 执行case0,即实现了每10ms执行一次键盘扫描。若 有按键按下,则定位其按下按键的位置代码,并使 key_state二1。当 10ms 后再次调用 keyboard ()函数, 这时key_state二1而进入case1,在case1中对前面所 定位的按键位置再次进行确认,若还在,则再次确定 其位置代码,并使key_state二2。如此时按键已经释 放,说明为假按键,则使key_state二0,返回按键扫 描。这里巧妙利用了两次定时'断的10ms间隔实现 按键的消抖处理。若key_state二2, 10ms后再次调用 keyboard (函数时则进入case2,这里将已确认的按 键位置代码转化为按键代码以及zui终的HID码,建 立键盘报表并发送给主机,然后使key_state二!。当下 一个10ms, key_state二!则进入csae!,等待按键释放 状态,此时再次扫描前面已确定按键的位置,若按键 已释放,则key_state 二0,下一个10ms来临则进入 case0重新按键扫描;否则仍然key_state 二!,继续等 待释放。这里也巧妙的利用这10ms进行按键释放时 的去抖动处理。
另外在多键(含双键)、特殊功能键和复合键的 实现中,该软件也设计了比较好的实现方法。譬如多 键,设置内部缓存器,在逐行扫描中将每个按下按键 在矩阵键盘中的位置代码存入其中。之后的消抖处理 等操作的对象便是缓存器中的按键位置代码值。系统 zui多处理的普通键数为6个,超过则为溢出。对于特 殊功能键,其形式上是单键,实际实现的是多键的功 能。只要将单键在发送前转换成需要的多键HID码, 即可方便实现。对于复合键,理论上是两个以上按键 同时按下所完成的功能,实际情况很难实现真正的 “同时按下”,它们的时间差别可能长达50ms。譬如 对引导键SHIFT键的设计,需设置专门标志位 Shiftkeyjlag,有 SHIFT 按下则 Shiftkey_£lag二1,否则 为0。在*次检测出SHIFT单按键时,改变状态 标志位为1。随后的按键扫描中,若再无其他按键按 下,则key_state 二0,直到有其他按键按下,key_state 二1。这在软件中实际上是对状态0的细化。同理, 在各个状态中,因为该键的特殊性,也有相应的细化 过程。
从以上分析可见,这样的软件设计不仅结构清 晰,代码简洁,实现便捷,而且使得当无按键按下, 键盘每10ms扫描一次,当有确定非复合按键按下 (即通过消抖处理",则键盘响应速度在30ms以内, 如此的响应速度大大提高了键盘的灵敏度。
3结束语
DCS系统是目前工业控制领域的核心系统,其 键盘是提高整个生产线自动化能力的关键一环。 该键盘的设计避免了现有键盘电路特殊按键实现 复杂、软硬件成本高的情况,而是研究开发了基于 ARM的DCS工业键盘,实现了对多达86个按 键的控制。采用STM32芯片及有效率的软件开发大 大提高了产品开发的速度。经过实验结果与实际应用 证明,该键盘易用性、可靠性达到了工业要求, 并产生很大的经济效益。