1 NPS硬件设计
如图2所示,NPS采用1块TMPN315081AF神经元芯片,配置1片64K×8位Flash存储器作为程序存储器和1片128K×8位RAM作为数据存储器;神经元芯片的CP0~CP4双向通信接口和78kbps的收发器构成Lon-works网络接口;TMPN315081AF神经元芯片I/O引脚的功能可通过程序灵活配置。在此,I/00~I/07引脚接打印机接口的8位数据线,I/08引脚接打印机选通线(STRB),I/09接打印机的“Busy”信号线,并要在应用程序中用如下Neuron C语句配置:
IO_0 output byte PrintData;
IO_8 output bit PrintStb;
IO_9 output bit PrintBusy;。
2 NPS应用程序设计
NPS与各个智能节点之间为主从方式,通过查询完成工作。网络寻址为domain:subnet:node方式。网络通信采用显示报文格式。
2.1 应用程序运行机制
TMPN315081AF神经元芯片固化了LonTalk的全部七层协议[2],位于应用层的调度程序(Scheduler)负责目标应用程序的启动、任务调度运行,并且任务运行必须有一个特定的事件来触发。根据这个调度机制,本文在NPS的应用程序中实现了以下事件(Events)及其对应任务的功能。
(1) reset事件
完成NPS的网络地址设置,建立Lonworks网络的域和地址,并完成打印机初始化工作。
(2)timer_expires事件
在程序中定义了3个周期性定时器:
stimer repeating sNetUpDTr=12;
mtimer repeating mAddrTr=300;
mtimer repeating mPollTr=1000;。
秒级定时器sNetUpDTr启动网络更新,毫秒级定时器mAddrTr事件对应的任务通过广播报文查询网络上的节点地址,并更新程序中的所有节点列表。节点结构定义如下:
typedef struct
{ unsigned int ID_num;//唯一ID
char ID_descrip[32];//描述网络地址,定义在Neu-ron C的addrdefs.h文件中msg_out_addr ID_dest_addr;
}ID_INFO;
毫秒级定时器mPollTr事件激发查询任务,询问网络上的节点是否有打印信息。
(3)msg_arrives事件
当收到报文时,此事件为真,其对应的任务接收报文,根据报文类型字段,可以区分是命令报文还是欲打印数据报文。
(4)iO_in()事件
在程序中对应when(iO_in(Print_Busy)==0){…},就是当打印机一旦空闲,就启动打印任务,把程序中打印缓冲区的数据输出到打印机。整个NPS应用程序的运行机制如图3所示,每个任务在执行时都调用相应的函数来完成预定功能,函数代码不在此详述。
2.2 应用程序通信协议
之所以单独提出这个问题,是因为通讯协议对网络应用程序至关重要。本文中,NPS和其他智能节点间的应用层通信协议为两级协议:第一层,显式报文严格按照Neu-ron C定义的格式、填写报文的个字段;第二层,对显式报文中的数据段,应该定义自己的用户数据规约。
最后,应用程序在NodeBuider环境下编译、连接后生成可执行文件,写入到Flash存储器,经变电站现场调试和测试,NPS能够可靠地完成网络打印功能。
3 结 论
Lonworks网络技术是一种高抗干扰性、高性价比的现场总线网技术,本文NPS设计之所以采用这种技术就是考虑到工业现场往往具有很强的电磁干扰。从硬件、编程和开发工具对NPS的设计进行较详尽地描述,希望对从事Lonworks网络技术开发应用的读者能稍有裨益。本装置与变电站测控单元、保护单元配套,经过现场验证,工作稳定可靠。