1、上位机系统:现在数据采集系统通过 VB 将数据采集到 PC 上,经数据整合后由 MCGS 显示数据采集系统变量命名规则:addr 数据命名方法为,XADDRxx 下标的第一个数代表区号,第二个数代表NUMBER 序号,X 代表数据类型,P 代表光数据,T 代表温度 ,C 表 CO2 , S 表湿度。温室数据采集系统整体运行调试操作流程:系统数据采集思想:由于 MCGS 通讯属于主从通讯,数据采集系统缺乏灵活性,故本系统通过 OLE 自动化,以 VB 为中介将 MCGS 和下位机建立数据通信联系。系统在实现 mcgs 和 vb 交互解决的几个关键问题:1. mcgs 按钮按下后,vb 检测 mc
2、gs 按钮按下的信息后向下位发送启动或停止命令。解决方法:当 mcgs 按钮按下后,触发一个开关量的变化,这个变量的值会通过 ole 将此变量的值送至 vb,vb 通过定时器定时扫描变量的变化来执行相应命令。2. 系统所采集数据触发式存盘,如果 mcgs 采用定时存盘的话,数据的冗余度太大,也没有必要,故现要实现只有当 vb 收到串口数据后经 vb 数据提取与处理后,触发相应的存盘命令。同时也存在 mcgs 和 vb 数据提取与处理的同步问题解决方法:在 vb 中设置信号量 FLAG,此变量与 MCGS 中是同一个变量,然后在数据处理完成后,将 FLAG 置 1 通过 OLE 通知 MCGS
3、进行数据存盘。而且在Vb 数据处理时要添加延时程序,以实现 vb 数据处理和 mcgs 数据存盘显示同步.。3. 关于 MCGS 变量设定方式以及节点分布显示过程只有有数据时才能触发 MCGS 存盘,存盘扫描周期设为 400ms,只有 flag为 1 才开始存盘。flag 扫描周期的设定要与 vb 数据处理速度匹配!NUMBER 的初始值设为 1 吧。每次串口数据传送完成后,number 量被重新置1。Number 的置 1 由 vb 发送置 1 信号量,具体置 1 由 mcgs 实现。一个大数据采集周期里将分别进行四个区的数据采集,每个区的 number 都从 1 开始,每收到一个数据 nu
4、mber 会自加 1,最终的 number 值即为此次数据采集节点的个数。在节点分布显示上,vb 根据节点注册的先后顺序,即数据在整个数据包的前后位置,动态的将地址赋给地址变量。当 MCGS 检测到此变量值非零后,会将该节点的地址在节点分布图上的相应节点上显示出来。此节点显示方案的优点:节点地址灵活,可以根据用户自己定义节点地址程序编写较简单,系统运算量较少。同时由于温室数据采集使用轮询方式,节点注册的先后顺序基本固定,故节点地址误差不会很大。MCGS 策略说明NUMBER 策略 主要是进行数据区号判断,then 将相应的地址赋给地址变量。而地址的命名也是根据序号动态命名的。即,根据注册节点先
5、后顺序进行相应地址命名,如第 N 个注册节点,会把相应的地址数据存至 ADDRxN.串口一次发送的最大节点个数就等于 NUMBER 值。下次传送数据时 number 会自动刷新,重新计数。这样可以避免同一个地址数据出现在两个点上。触发式数据存盘策略 : 用 flag 标志位实现触发式数据存盘。Flag 置 1 由 vb 通过 OLE 传给 MCGS.只有 FLGA 时才能触发 MCGS 存盘.下位系统:帧格式及命令帧说明:基站地址: sourpan: 0001; souraddr 0X000DT_SINK- pan:0x0001 addr:0x0011 photo_sink-pan:0x000
6、1, addr:0x0000电机控制所用的单片机地址 SOURADDR:0X00D1 PANADDR:0X0001 光数据传输帧格式:length FCF16 DSN DESTPAN16 DESTADDR16 SOURADD16 DATA_TYPE SOURPAN16 PAYLOAD2 CRCPAYLOAD5:-SOURADD16 data_TYPE DATA16 Souaddr:包括高八位是区号,第八位地址。光和温度数据格式已经统一。温度传输数据格式:length fcf16 fsn destpan16 destaddr16 souraddr16 data_type data16 CRC_C
7、HECK湿度和 CO2 采集用的是温度采集系统,故其数据传输帧格式与温度相同,Data_Type:0x08- 温度数据 0x05-光数据0x07 payload 内部光数据类型值 0x070x06=CO2 0x02=湿度0X0D=确认帧0X0A-路由帧0XF0-广播帧(光采集)在温度采集时广播帧用的是 0x010X03-报文帧0X0B-停止帧(基站数据采集控制命令)0X0F 启动帧(基站数据采集控制命令)0X0E 电机启动帧0X09电机停止帧信道分类:光采集信道 12 ,温度采集信道 11 ,电机控制通信信道 13电机控制调试:电机控制包括 cc2430 单片机,步进驱动,电机,光耦电路。电机
8、转动采用步进驱动来实现,单片机只要给驱动脉冲,电机既可以转动,转动速度与单位时间脉冲个数有关。电机启动:电机启动时应该脉冲个数逐渐增加来实现。光耦电路主要是为了去除电机转动时对单片机的干扰,同时单片机对行程开关的信号检测采样查询方式,当查询到行程开关闭合后,经延时后继续判断该信号确实闭合,进而响应相关事件。电机启动和停止受基站控制,当单片机收到基站的命令帧后,根据命令类型做出相应的响应。温度、光数据采集调试:数据采集的整体过程:温度采集与光数据采集受基站控制,数据采集信号由基站发出,而当基站接收到上位机的启动命令后,开始向下发送数据采集命令。基站先通过信道 12 向光汇聚节点发送光采集命令,汇
9、聚收到命令后,开始向子节点发送光采集命令。当汇聚将子节点数据采集完毕后,将数据传向基站。基站收到汇聚节点的数据后将数据打包,并向光汇聚节点发送停止数据采集命令。汇聚收到停止命令后便停止向子节点发送数据采集命令,此时汇聚和子节点都进入休眠状态。接着基站将信道调至 13 信道将电机启动。然后再由信道 11 向温度汇聚节点发送数据采集命即,汇聚收到命令后开始向子节点发送数据采集广播帧发送广播帧的时间段 Tcall,接着开始进入竞争时槽 Tcsma ,子节点在此时间段将自己的地址发生给汇聚,称为组网过程。Tcsma 结束后开始进入有序时槽 Tgts,在此时间段内汇聚节点向各已注册的传感节点发送的 GT
10、S 分配报文,使各传感节点明确何时将采集到得数据传给汇聚节点。子节点数据传输发生在这个阶段。Tgts 结束后,就是路由时槽了,在此时间段内汇聚将采集到得数据发送给基站。基站将温度数据打包并发送温度采集停止命令。然后再切换信道至 13,向电机发送停止命令。如果还有湿度、CO2 等数据采集的话,只需基站再增加数据采集命令即可,同理与温度采集。至此一个数据采集周期结束了,基站会检查是否有上位机发送的停止数据采集命令。如果没有则开始第二轮数据采集过程,否则将进入等待 PC 启动数据采集的状态。光、温度数据 SINK 与 sensor 通信调试:加了一个内部负载光数据类型是避免射频干扰的一种方法,如在
11、base 和sink 之间通信时,我数据识别类型为 0x05 ,而 sink 和 sensor 之间的数据通信数据类型格式用 0x07 ,这样可以避免 sensor 信号对 base 的干扰。Sink 与 sensor 数据通信过程:sensor 的地址区号由软件设定,其地址顺序最好是连续的。这与 sink 光采集顺序有关。因为 sink 按地址递增的顺序依次向sensor 发送数据采集命令,每发生一个数据采集命令当在固定的时间内来接受sensor 的数据,然后在向第二个 sensor 发送采集命令。当 sink 把所有 sensor 采集一遍,将所有数据打包,发送给基站。温度节点地址的设定有
12、硬件来设定,其区号有软件来设定。!ReadSerialStr(参数 1)函数意义:从串口读取一个字符串。返 回 值:字符型。读取的字符串。参 数:参数 1,开关型,串口号,从 1 开始,串口 1 对应 1。实 例:!ReadSerialStr(1)。实例说明:从串口 1 读取一个字符串。!BufferCreate(缓冲区号,缓冲区长度)函数意义:创建一个用户指定代号,指定长度的缓冲区,用户可以操作这个缓冲区返 回 值:数值型。= 创建成功参 数:参数 1 ,数值型:缓冲区号,从 0 开始参数 2,数值型:缓冲区长度实 例:!BufferCreate(0,1024)实例说明:创建一个 1024
13、字节长度的缓冲区,代号为 0!BufferGetAt(缓冲区号,数据位置)函数意义:获取指定缓冲区指定位置的数据返 回 值:数值型。获取到的数据值参 数:参数 1 ,数值型:缓冲区号,从 0 开始,是用户自己创建的参数 2,数值型:数据在缓冲区中的位置 实 例:!BufferGetAt(0,8)实例说明:获取缓冲区 0 的第八个数据怎样将十进制数转换成十六进制数?答:先用系统内部函数中的字符串操作函数“!I2Hex(s)”把数值转换为 16 进制字符串,再用“!lVal (str)”将字符串转化为长整型数值,例如;:!I2Hex (17) =“11” !lVal(“11”)=11。!lVal(str)函数意义:将字符串转化为长数值型数值返 回 值:开关型,转换出的数值。参 数:str,字符型。待转换的字符串。实 例:!lVal(“12345678“)=12345678。!Hex2I(s)函数意义:把 16 进制字符串转换为数值。返 回 值:开关型。参 数:s, 字符型。实 例:!Hex2I(“11“) =17。!I2Hex(s)函数意义:把数值转换为 16 进制字符串。返 回 值:字符型。参 数:s,开关型。实 例:!I2Hex(17) =“11”。