利用TINI平台设计网络On/Off开关(图)
TINI平台可提供设计IP网络继电器所需的TCP/IP栈和本地控制,Java运行环境可以大大降低设计工作的复杂度,利用Java程序,可以通过网络远程访问控制小型传感器和执行器。本文介绍了一个IP On/Off开关,采用一个简单的继电器电路和TINIm390/400验证模块构建,还可以延伸到其他远程监视和控制应用中。
系统软件概述 com.dalsemi.tininet.http.HTTPServer类允许开关控制应用程序充当简单的web服务器,将Java程序传递给远端主机。在被主机内部浏览器执行后,该Java程序就建立了一个与TINI应用程序交换命令和状态的双向TCP连接,也为显示控制和状态提供了一个图形用户界面。整个软件系统如图1所示。
 系统硬件概述 在图2中,基于TINIm390/4002模板的开/关控制电路构成了该接口。TINIm390/400模板提供了Ethernet网络接口能力,以及通过引脚P5.0(其他引脚也可以等效工作)控制开关。N沟道MOSFET开关切换流过继电器的电流,控制继电器。用户可以根据继电器和FET的大小要求,供给不同的电压和电流;如果不需要隔离外部电路与TINI模板的电源,则可以去掉继电器。在开关状态改变时,二极管抑制继电器线圈的感生电压。为了实现某些新的服务,如网络开关控制。
TINI开关控制应用 由四个类构成了该应用的开关控制和web服务器接口。POWERSWITCH类通过采用TINI类中的com.dalsemi.system.BitPort应用程序接口类,直接与硬件接口。WebWorker类直接来自MAXIM的Software Developer's Kit(TINI SDK)中的TINIWebServer实例,负责为到来的HTTP连接提供服务。SwitchWorker类管理Java程序和TINI应用之间的所有命令和状态通信。TINIWebServer类通过绑定各个类的操作,来实现本应用。
 PowerSwitch类是一个连接硬件的接口,在其构造器内为引脚P5.0创建一个BitPort目标。在该类中,可以执行两种函数,开函数设定的引脚端口状态是接通继电器线圈的电压;而关函数通过清零端口状态,来断开继电器线圈的电压。图2中的单刀双掷(SPDT)继电器能够工作于常闭或常开位置,即在这两种位置之间切换外部电压源。开、关函数假设电路工作于常开状态,且必须能够被改变至常闭电路状态。为了指示开/关是否对应于BitPort的置位或清零函数,则在该类中引入了一个外部的Boolean变量(invert),另一个函数(setInvert)要求用来初始化invert变量。图2所示的硬件图描述的是常开电路。
WebWorker类提供了网络和应用之间的接口。它简单地建立和驱动一个目标(com.dalsemi.tininet.http.HTTPServer),该目标依次产生线程,为每个到来的HTTP连接提供服务。该类取自上述TINIWebserver实例,无须作任何修改,可以在网络上的任何地方接入。HTTPServer能够提示输入密码,或者接受任何其他形式的控制,仅允许那些授权的用户接入。
通过将网络和硬件接口组合在一起(图3所示),TINIServer允许远程开关控制。例如,drive()函数通过创建一个WebWorker线程和网页“index.htm1”,建立此web服务器。网页的主要目的是为了在主机工作站上下载并执行该Java程序。如果提示网页仅包含静态信息,该应用就没有必要创建网页。提示网页只需要与包含Java程序的文件目录一起,拷贝至web服务器的根目录下即可。
CODEBASE是一个在每个TINI芯片组设计中可以改变的网页参数。Java程序使用该信息,以返回连接至某个独立的服务器插件中的TINI应用程序。可以创建并上传一个定制的网页至任何一个安装在现场的TINI芯片组参考设计。一个简单的方法是由应用程序在每次运行时,创建该网页。通过三次写操作,CreateIndexPage函数可以创建文件index.html,并将IP地址插入CODEBASE部分。
1)index.write(indexTop.getBytes(),0,indexTop.length()); 2)index.write(inetAddress.getLocalHost().getHostAddress().getBytes()); 3)index.write(indexBottom.getBytes(),0,indexBottom.lenghth());
第一次和第三次写操作是将网页的静态部分拷贝至文件中,而第二次写操作是将IP地址拷贝至文件的CODEBASE部分。在应用程序建立web服务器和创建网页后,就启动了web服务器。它创建一个服务器插件,用来处理来自下载Java程序的进入连接,并且在Java程序每次连接TINI应用时,调用ServiceConnection函数。
ServiceConnection函数创建了一个新例程SwitchWorker,并将这个插件传给该类。SwitchWorder构造器创建一个新的线程,以处理主机Java程序和TINI应用之间的连接。ServiceConnection函数也处理下一个进入连接,接着将控制传给drive函数。
 SwitchWorker类管理Java程序和webserver之间的所有通信,如图4所示,在连接被断开之前,它不断地循环,执行下列步骤:
停留在read(),等待一个来自Java程序的命令字节; 如果命令字节为0,则断开开关;如果为1,则闭合开关;
读入当前开关状态,回传至Java程序。
通过分配每个命令字节的低7位来表示不同开关的状态,如图5所示,该运算法则可以适用于更多的开关。保留最高位,用来指示只读操作。该运算法则也可以被扩展,以允许在同一时刻多个Java程序连接至单个TINI webserver应用。SwitchWorker只是简单地保持一个“监听向量”。每次Java程序发出一个修改开关状态的命令,webserver就将其状态回传至当前与之连接的所有Java程序。
主机Java程序 TINI类中的com.dalsemi.tininet.http.HTTPServer类是一种小巧而快速的类,但仅支持HTTP GET操作。由此产生的数据只能从TINI应用到主机单向传递。然而,该应用要求双向数据传输。命令由主机发送至TINI webserver,而状态由webserver发送至所有相连的主机。主机和TINI应用之间的通信无协议开销,单字节命令和单字节状态允许极快的控制和状态响应。
 主机Java程序包括两个类,主类(SwitchControl)处理主机端的网络通信和创建网页上所有的显示图形单元,见图6;另一个类(Image Button)创建一个图形拨动按钮,显示对应于按钮状态的两种位图之一,见图7。拨动按钮用于开关的控制和状态指示应该是足够的,但Java程序的表现会因浏览器的不同而异,因此,加入简单的开/关按钮和一个状态文本窗,以适应于更多的浏览器。ImageButton和开/关按钮将完成相同的控制功能,位图和状态窗完成相同的状态指示功能而已。在创建图形单元后,SwitchControl类将创建一个状态监测线程。该线程接着进入休眠模式 ,停留于read(),等待来自于TINI应用的状态信息。当线程向下运行时,ImageButton的位图和状态窗被刷新,接着又循环到程序的顶部,等待下一次的状态字节。Java程序事件线程驱动actionPerformed函数,该函数在每次按下图形按钮后被调用。如果调用是由ImageButton触发的,则它翻转当前状态,并向TINI发出一个开或关的命令。如果由开/关按钮触发,则它发出一个开/关命令。ImageButton类只是一个简单的采用AWT(Abstract Window Toolkit)组件编程的范例。
结论 采用TINI实时环境、Java程序和简单的继电路电路,就可以实现远程控制闭合/关断开关。通过网络,可以在任何地点控制从照明灯到机床的各种设备。
会员服务热线: |
深圳矽通科技版权所有 © Copyright 2005-2007, ic-cn.com.cn All Right Reserved. |
|
深 圳:13410210660 QQ : 317143513 |
|
客服联系: MSN:CaiZH01@hotmail.com E-mail:CaiZH01@163.com |
|
|