阮永超,刘武发,郑 鹏
(郑州大学机械与动力工程学院,河南郑州450001)
随着网络技术的发展,网络化的智能传感器系统运用越来越广泛。为了解决传感器与网络连接的标准化问题,电气和电子工程师协会(Institute of Electrical and Electronics Engineers,IEEE)制定了IEEE 1451一系列标准。
针对IEEE 1451标准,国内学者进行了大量研究并且取得了丰硕的研究成果。段文浩[1]设计了基于IEEE 1451.2标准[2]的智能传感器系统,该系统中的网络适配器模块使用基于SPI(serial peripheral inter-face,串行外设接口)协议所设计的十线制接口与智能传感器模块相连接[2]。郑培亮[3]以ARM9的嵌入式开发板OK2400-IV作为载体,在其上运行Linux系统并搭建Boa服务器作为网络适配器模块;在计算机中运行Linux系统,并通过网线使计算机与网络适配器模块进行通信;网络适配器模块与智能传感器模块的接口也采用基于SPI协议的十线制接口。尹宝军、周敏刚等[4-5]设计的智能传感器系统中网络适配器模块和智能传感器模块均采用RS232协议通信。马生贵[6]设计的智能传感器系统中网络适配器模块和智能传感器模块采用CAN(controller area network,控制器局域网总线)协议通信。赵露[7]设计了用于环境监测的使用ZigBee协议的无线传感器的网络节点。刘东明等[8]设计了采用ZigBee协议与其他节点通信的无线传感器节点。
IEEE 1451标准中关于网络适配器模块与智能传感器模块是否采用IIC通信[9]并没有相关规定,也鲜有研究,而笔者设计的智能传感器系统中网络适配器模块采用IIC与智能传感器模块通信,采用Wi-Fi[10]与上位机通信。IIC通信具有可靠性好、传输速度快、结构简单和易于扩充等优点;Wi-Fi通信的优势在于信号覆盖广、网络速度较快,能够摆脱线缆连接的束缚,成本低廉,容易维护。因此,该设计对于今后相关方面的研究具有借鉴意义。
智能传感器系统总体框架如图1所示。STM32F 103通过 USART(universal synchronous/asynchro-nous receiver/transmitter,通用同步/异步串行接收/发送器)[11]与ESP8266模块[12]连接,组成网络适配器模块[13]。STM32F103通过使用AT(Attention)指令与ESP8266模块通信,就能使ESP8266模块接入网络。STM32F103与传感器连接,组成智能传感器模块。系统总体设计采用客户端/服务器模式,上位机作为客户端,网络适配器模块作为服务器,智能传感器模块执行具体的操作。
图1 智能传感器系统总体框架Fig.1 General framework of intelligent sensor system
智能传感器系统的工作流程为:1)上位机发送指令;2)网络适配器模块接收指令后解析指令并生成自己的指令,然后向相应的智能传感器模块发送指令;3)智能传感器模块接收指令后执行相应操作,并将结果发送给网络适配器模块;4)网络适配器模块收到结果后将结果发送给上位机;5)上位机接收结果并进行相关操作。
本文主要对图1中虚线所包围的上位机、网络适配器模块、智能传感器模块1三部分的设计进行介绍,其他部分的设计类似,不再赘述。
智能传感器模块1与网络适配器模块的接口及硬件设计如图2所示,括号内为具体的引脚。
图2 智能传感器模块1与网络适配器模块的接口及硬件设计Fig.2 Interface between intelligent sensor module 1 and net-work adapter module and hardware design
在网络适配器模块中,PA0为ESP8266模块的片选信号引脚,当PA0为高电平时,ESP8266模块被选中,ESP8266模块开始工作;PA1为ESP8266模块的复位信号引脚,当PA1为低电平时,ESP8266模块复位;控制器通过PA2向ESP8266模块发送信息,通过PA3从ESP8266模块接收信息,通过VCC(volt current condenser,电路的供电电压)和GND(ground,地线)向ESP8266模块供电。
在网络适配器模块与智能传感器模块1的连接中,STM32F103.1作为IIC主机,STM32F103.2作为IIC从机,PB6作为IIC时钟线,PB7作为IIC数据线,智能传感器模块1通过PB2向网络适配器模块发送应答信号,网络适配器模块通过PB8向智能传感器模块1发送应答信号,PB9作为智能传感器模块1的连接请求线。智能传感器模块1连接成功后,网络适配器模块通过检测PB9的高低电平来判断智能传感器模块1是否断开连接。网络适配器模块通过VCC和GND向智能传感器1模块供电。
在STM32F103.2与传感器0的连接中,PB0作为时钟线,PB1作为数据线。当传感器0接入系统后,PC2被置为高电平;当传感器0断开连接后,PC2被置为低电平。STM32F103.2通过检测PC2的高低电平来判断传感器0是否接入,通过VCC和GND向传感器0供电。
智能传感器模块的智能性体现在其内部有传感器电子数据表格(transducer electronic data sheets,TEDS),用以描述和记录智能传感器模块的相关参数。参考IEEE 1451.2标准设计了3种TEDS,分别是主TEDS、通道TEDS和校准TEDS。按照标准,主TEDS和通道TEDS是必须有且固定不变的,它们被存储在程序中;校准TEDS是根据校准的需要而改变其中的校准数据,它被存储在STM32F103的内部Flash中。现主要以主TEDS为例介绍TEDS的设计。
TEDS格式设计中分别取TEDS中“类型”“长度”“内容”所对应的英文单词“type”“length”“value”的首字母,合称为TLV[14]。TEDS中的TLV个数不定,根据需要设置。设计中为了便于TEDS的存储和传输,TEDS由字符组成。在一个TLV中:TLV的类型用2个字符表示;长度是指此TLV内容的字符个数,用2个字符表示;表示内容的字符数量不固定。TEDS中第1个TLV的类型是用来告知信息的读取者,这些信息是TEDS信息;其他TLV中的类型表示其内容在TEDS中的数据区号。第1个TLV中的内容是TEDS相关标准、类型和版本信息,其他TLV中的内容是TEDS所记录的相关数据。
主TEDS主要用来描述智能传感器模块自身。主TEDS中有3个TLV。第1个TLV为“0106020101”,其中:开头的2个字符“01”用于将数据识别为TEDS;“06”表示此TLV内容由6个字符组成;“02”表示IEEE1451.2标准;第2个“01”表示主TEDS;最后一个“01”表示97年版本。第2个TLV为“042600347501136220191011120201”,其中:开头的“04”表示全球识别号;“26”表示此TLV内容由26个字符组成;“003475”中第1个“0”表示北纬,“003475”表示北纬34.75°;“011362”中“0”表示东经,“011362”表示东经 113.62°;“20191011120201”表示2019年10月11日12点2分1秒。所以该智能传感器模块的全球识别号为“0034750113620191011120201”。第3个TLV为“090202”,其中:“09”表示此TLV信息是执行通道数量;“02”表示此TLV内容由2个字符组成;最后一个“02”表示该智能传感器模块有2个传感器通道。
根据该智能传感器系统的特点设计了简单易读的指令体系,如表1所示。
上位机产生的指令中,除了校准TEDS指令外,其他都由3个字符组成,其中第1个字符表示智能传感器模块的编号。指令“1ch”表示要读取智能传感器模块1中传感器的连接状态,“1aa”表示要读取智能传感器模块1的主TEDS。在上位机发送的“10b”“10c”“102”三个指令中,第2个字符均表示要执行操作的传感器编号,第3个字符表示要执行的操作,如“10b”表示要读取智能传感器模块1中传感器编号为0的通道TEDS。上位机向智能传感器模块1写入校准TEDS时会在校准TEDS前面加上相关信息,如“1j0”,其中:“1”表示智能传感器模块1;“j”表示校准TEDS;“0”表示传感器0。智能传感器模块1将校准TEDS写入完成后会通过PB2通知网络适配器模块,网络适配器模块接到通知后向上位机发送指令“xw”。
当智能传感器模块1中传感器的连接状态发生变化时,智能传感器模块会将以“s”开头的四字符指令发送给上位机。在该四字符指令中:第2个字符“1”表示智能传感器模块1;第3个字符表示传感器0是否存在,“0”表示不存在,“1”表示存在;第4个字符是为了增强系统的可扩展性而设置的,可表示另一个传感器存在与否。
表1 智能传感器系统指令体系Table 1 Instruction system of intelligent sensor system
当智能传感器模块1的连接状态发生变化时,网络适配器模块会将以“s”开头的三字符指令发送给上位机。智能传感器模块1连接成功后,网络适配器模块向上位机发送“s1c”;智能传感器模块1断开连接后,网络适配器模块向上位机发送“s1b”。“s1b”“s1c”中的“1”表示智能传感器模块1,“b”表示不存在,“c”表示存在。
以“s”开头的指令优先级高,当指令产生冲突时,优先级高的指令优先被发送。通过程序设计,可实现指令的优先发送,具体可参见软件设计部分。
网络适配器模块和智能传感器模块1的程序都在keil5中用C语言[15]编写,上位机程序在Visual Stu-dio中用C#语言[16]编写。管理员信息、用户信息以及传感器的测量值等都保存在MySQL数据库[17]中。
智能传感器模块1与网络适配器模块接口的工作流程如图3所示。此设计中只有PB9的高电平是一直保持的,其他高电平是4 ms或10 ms高电平信号。检测PB8(非二进制传输)和PB2电平时,如果超过1 s未检测到高电平,智能传感器模块1和网络适配器模块则重新执行各自的接口程序。智能传感器模块1和网络适配器模块内部存储着相同的频率数组和地址数组。智能传感器模块1与接口连接后,会与网络适配器模块进行3次握手通信[18],然后接收网络适配器模块发送的频率和对应地址编号的二进制数,并将接收的二进制数转换为十进制数,找到相应的频率和地址进行自身的IIC配置。最后,网络适配器模块会与智能传感器模块1进行一次IIC通信测试,测试成功后,则告知上位机智能传感器模块1已连接。
网络适配器模块对智能传感器模块1的信息读取分为2步,第1步是读取信息的字符个数,第2步是按照字符个数去读取信息,这样就可以兼容不同长度的TEDS和测量数据。智能传感器模块1和网络适配器模块的工作流程如图4和图5所示。在智能传感器模块1中,传感器的连接状态有变化时所设置的PB2高电平会一直保持,其他时候设置的PB2高电平是10 ms高电平信号。网络适配器模块设置的PB8高电平也是10 ms高电平信号。检测PB8和PB2(非保持)电平时,如果超过2 s未检测到高电平,智能传感器模块1和网络适配器模块则重新执行各自的循环操作。
在智能传感器模块1的工作程序中有一个标记参数,用来使网络适配器模块读取不同的信息,如:参数设置为8时,网络适配器读取通道TEDS;参数设置为10时,读取主TEDS。智能传感器模块1在检测到传感器0连接状态有变化时,就会将PB2置高电平。网络适配器模块读取以“s”开头的返回指令后,会将PB8置高电平,告知智能传感器模块1。网络适配器模块工作程序中有一个代表智能传感器模块1是否存在的标记参数,该参数设置为1时代表智能传感器模块1存在,设置为0时代表智能传感器模块1不存在,参数默认值为0。
图3 智能传感器模块1与网络适配器模块接口的工作流程Fig.3 Workflow of interface between intelligent sensor mod-ule 1 and network adapter module
智能传感器模块1根据收到的指令执行相应的动作,设置标记参数,执行完毕后将PB2置高,告知网络适配器可以进行读取。网络适配器模块读取信息后,查看信息是否是以“s”开头的返回指令:如果是,将返回指令发送给上位机;如果不是,将PB8置高,告知智能传感器模块1读取完毕。智能传感器模块1检测到PB8的高电平信号后,会设置标记参数,准备要被读取的信息。网络适配器模块再次读取信息后,查看信息是否是以“s”开头的返回指令:如果是,将返回指令发送给上位机;如果不是,将上一次收到的数据与本次收到的数据组合在一起(上次收到的数据在前),作为返回数据发送给上位机。硬件设计和软件设计的结合实现了以“s”开头的返回指令被优先发送,进而实现了智能传感器模块和传感器的即插即用。
图4 智能传感器模块1的工作流程Fig.4 Workflow of intelligent sensor module 1
5.3.1 上位机软件的结构
上位机软件主要分为登录和功能两部分。表2和图6所示分别为上位机数据库的数据表信息和上位机软件结构图。
表2 上位机数据库的数据表信息Table 2 Data table information of upper computer data-base
图5 网络适配器模块的工作流程Fig.5 Workflow of network adapter module
图6 上位机软件结构图Fig.6 Diagram of the upper computer software structure
表2中:guanliyuan和yonghu表的字段都为var-char类型;sensor0表的平均值、最大值和最小值的字段为float类型,单位的字段为varchar类型,时间的字段为datetime类型。图6中:传感器校准是指将校准数据按照最小二乘法进行拟合得出拟合直线方程,并将各组校准数据写入智能传感器模块1的校准TEDS中;测量结果的计算包括测量数据组的平均值、按照t分布置信度为0.95的置信区间、系统误差和粗大误差等的计算[19];测量结果的查询包括按照平均值查询和按照测量时间查询两种。
5.3.2 上位机软件的运行流程
启动上位机软件后,先进入登录界面进行账号密码的验证,验证通过后才能进入功能界面。在功能界面中首先要连接Wi-Fi服务器。上位机软件运行流程如图7所示。
上位机连接Wi-Fi成功后,会开启2个后台线程,一个用于数据的接收,另一个用于检测网络的连接状态。点击功能界面上的指令按钮会产生对应的指令并将指令发送出去,然后用一个参数对已发送指令进行标记。比如点击智能传感器模块1界面的“查找传感器”按钮,会产生指令“1ch”,指令发出后,会将标记参数设置为3。当接收数据线程接收到数据后会根据指令标记参数进行不同的操作和显示,最后清除指令标记,即将指令标记参数设置为初始值0。上位机软件的指令发出后,会进行5 s定时,如果定时时间到后还没有收到相应的数据,则指令执行超时,进行弹窗提示。
上位机软件查找网络的连接状态时,需要调用wlanapi.dll中的相关函数。查找过程为:首先调用WlanOpenHandle函数,打开Wi-Fi句柄,然后调用WlanEnumInterfaces函数,列举无线网络适配器,并查找连接状态,接着调用WlanCloseHandle函数,关闭Wi-Fi句柄,最后返回查找结果。
图7 上位机软件运行流程Fig.7 Running process of upper computer software
将网络适配器模块上电产生Wi-Fi信号,将电脑进行Wi-Fi连接。启动上位机软件进行账号登录,然后输入Wi-Fi服务器的IP(internet protocol,互联网协议)地址和端口号进行网络连接。上位机软件启动后进行查找智能传感器模块及传感器、校准传感器、读取并管理TEDS及传感器测量结果等实验,并进行智能传感器模块及传感器的插拔实验。实验证明智能传感器模块和传感器能正常运行并得到正确结果。
智能传感器系统的硬件连接如图8所示,其中:A是为系统供电的USB(universal serial bus,通用串行总线);B是ESP8266模块;I和D是STM32F103开发板,D通过连线C与B相连,组成网络适配器模块;F是量程为5 kg的质量传感器;G是24位的A/D转换模块HX711,它将传感器的测量结果进行A/D转换,并通过连线H与I相连;J连接的是I的PC2引脚,当传感器接入时J为高电平,当传感器断开时J为低电平,I通过检测J的高低电平来判断传感器是否连接;F、G、H、I、J共同组成智能传感器模块1,网络适配器模块和智能传感器模块1通过连线E进行连接。
上位机界面如图9所示。
图8 智能传感器系统的硬件连接图Fig.8 Hardware connection diagram of intelligent sensor system
图9 上位机界面Fig.9 Interface of the upper computer
基于STM32F103所设计的智能传感器模块和网络适配器模块电路比较简单,它们之间采用IIC通信,连线较少,通信简单,易于扩展。智能传感器模块可以实现频率的自适应和地址的自分配,并且能够实现传感器的即插即用。指令体系的构建使系统的扩展有了指令框架。设计的TEDS格式更加适合数据的存储和传输。上位机具有登录界面,使功能界面的使用更加安全。通过软件运行,上位机可以将测量结果等信息存入数据库,方便对测量结果的管理。通过实验验证了该智能传感器系统设计的可靠性与稳定性。