_放射源监测二次仪表软件设计
- 格式:doc
- 大小:362.00 KB
- 文档页数:20
本科毕业论文(设计)题目:放射源监测二次仪表软件设计学院:物理与电子科学学院班级:姓名:指导教师王振义职称:副教授完成日期: 2014 年 5 月 25 日放射源监测二次仪表软件设计摘要:该文章详细论述了基于STM32F407ZET6的MCU与RS485接口及ZigBee模块的通信程序,以及串行智能LCD显示和界面设计,还有相关数据处理程序的软件设计。
具体就是将探头测量得到的数据通过RS485或者ZigBee传送到MCU进行处理,然后将处理结果显示到LCD上。
可以对出现的故障进行报警和做出相应的程序调整。
整个过程利用OPC server管理。
本文分别论述了各模块的定义及应用,主要介绍了二次仪表的软件设计以及在实际应用时出现的结果。
关键词:放射源;RS485;ZigBee;OPC server目录一、背景 (1)二、放射源监控系统涉及到的模块简介 (1)2.1放射源检测探头 (1)2.2 RS485接口 (1)2.3 ZigBee (2)2.4 LCD (2)2.5 OPC server软件模块或放射源监控管理系统件 (2)三、系统的通信过程 (3)3.1探头与MCU的通信过程 (3)3.2 ZigBee的通信过程 (3)3.3 LCD的通信过程 (3)3.4二次仪表和PC的通信过程 (4)3.5报警的通信过程 (4)四、各模块实现其功能的部分程序 (4)4.1 LCD的部分程序 (4)4.2与ZigBee和RS485通信的程序 (5)五、系统使用时显示屏出现的画面以及其原因 (8)5.1开机 (8)5.2测量 (8)5.3通讯故障显示及实现的程序 (9)5.4数据网关显示 (12)5.5故障处理部分程序 (13)参考文献 (15)致谢 (16)一、背景:如今在工农业生产方面,放射源应用已经非常广泛,例如,过程的控制,工业探伤,测井,医疗,辐射加工以及科学研究等诸多部门。
与此有个显明的对照——长期以来,放射源的监控工作一直处于由人工监管的落后状况,全国各地近来老是出现放射源物质泄露和放射源遗失的新闻报道[1]。
因为放射源的遗失或使用不当容易造成极大的社会恐慌和环境危害。
因此,使用放射性源的过程不仅需要必要的安全措施,有合格的防护装备,而且最重要的是有效的和严格的监督和放射源的控制,以确保人身安全和环境安全。
国家相关部门专门针对放射源的管理颁布了诸多法律法规和规章制度[2],这些法律法规都严格规范了放射源的使用和管理的所有过程,对放射源的买卖,储存,运输,使用等都有严格的要求,并且明确了监管机构和责任部门。
建立放射源监控系统,要依靠那些放射源使用企业现有的生产监管平台,建设一个信息管理系统,这个系统具有的功能要包括监控、传输和报警等功能。
其中监控功能应该包括位置、剂量、和状态监控。
传输则要求对监控数据进行实时传输。
出现事故会报警。
这样就可以对使用企业的放射源进行实时在线监管,做到对放射源管理自动化,信息化[3],使对放射源的监管更有实效性和科学性。
二、放射源监控系统涉及到的模块简介本文主要涉及通讯和显示单元的二次仪表软件设计。
具体包括二次仪表与探头、RS485接口及Zigbee模块的通信程序,以及串行智能LCD显示和界面设计,还有相关数据处理程序。
下面将分别介绍2.1放射源检测探头放射源检测探头用来采集放射源射线强度,由GM/SiPIN辐射探测器,数据处理模块,高压模块,电源和通信模块等构成。
主要功能是:将工作场所放射源的辐射剂量实时转化成数字信号传送给后续设备,作为监测,报警和综合管理的基础数据。
2.2 RS485接口RS485使用差分信号负逻辑,+2 ~ +6说“0”,6V ~ -2V说“1”。
RS485有两线制和四线制两种接线,四线制只能实现点对点的通信方式,现很少采用,现在多采用的是两线制接线方式,这种接线方式为总线式拓朴结构在同一总线上最多可以挂接32个结点。
在RS485通信网络中一般采用的是主从通信方式,即一个主机带多个从机。
很多情况下,连接RS-485通信链路时只是简单地用一对双绞线将各个接口的“A”、“B”端连接起来。
2.3 ZigBeeZigBee是一种低速短距离传输的无线网络协定,底层是采用IEEE 802.15.4 标准规范的媒体存取层与实体层。
主要特色有低速、低耗电、低成本、支援大量网络节点、支援多种网络拓扑、低复杂度、快速、可靠、安全。
2.4 LCDLCD 的构造是在两片平行的玻璃当中放置液态的晶体,两片玻璃中间有许多垂直和水平的细小电线,透过通电与否来控制杆状水晶分子改变方向,将光线折射出来产生画面。
比CRT要好的多,但是价钱较其贵。
2.5 OPC server软件模块或放射源监控管理系统件放射源监控管理系统软件运行在一台专用工控机上,对各放射源监测探头传回的监测数据进行相应的数据库管理(包括仪器历史数据日志记录与显示等),还可以通过计算机实时查询任意放射源的工作情况,自动显示异常报警信息并启动报警。
主要功能:(1)建立用源单位基本信息。
(2)单个放射源在线信息的实时接收、显示并保存放射源监测仪上传数据。
(3)报警功能:实时处理上传信息,若出现异常,则发出连续报警信号。
(4)查询上传功能:按要求将测量信息上传工厂生产管理系统软件。
系统软件根据功能分为三个子系统:基础信息管理子系统、放射源在线监管子系统及数据接口子系统。
基本信息管理子系统对有关放射源信息进行统一管理与维护。
OPC server[6]软件模块为放射源监测系统与工厂生产管理系统软件之间的信息转换接口,可以将放射源监测系统的实时监测数据按照工厂生产管理系统软件规定的通讯协议进行转换和传输,将监测数据以设备无关方式融入工厂生产管理系统,用本厂生产管理系统的无缝集成。
三、系统的通信过程主要涉及到辐射剂量,计数器计数和高低阈值,3.1探头与MCU的通信过程串口处于接收中断状态时,将串口接收到的数据发送到LPU接收缓存区。
此时应该判断收到的第一个字母或缓存区的第一个字母是否为定义好的格式,如“$”,如果是的话就开始接收数据,直到缓存区满了为止。
接收到的数据中前四个字母需要和帧头对比,看是否一样。
然后四个字母后面跟着的是数据的长度,需要判断此长度是否满足之前定义好的值,不够的话返回。
整个数据利用CRC进行校验。
即计算发送时的CRC值是否等于接收到的CRC值。
上述步骤都满足后,开始看接收到的数据。
因为一个二次仪表可以连接多个探头,那么需要将相同的探头发送回来的数据放到相同的位置。
这个过程通过探头的号码来区分,如果接收到的探头号码不存在的话,则将此数据舍弃。
与此同时有个超时时间的计数值,每次收到数据后会清零。
正常情况下这个数据不会太大,若数据太大,说明很长时间没有收到数据了,说明探头坏了,就会报警。
接收到的数据包括计数值,剂量值,工作高压,工作电压。
3.2 ZigBee的通信过程二次仪表将数据处理完之后需要将这些信息送给PC机。
那么这个传送的手段即使用ZigBee。
二次仪表将准备好的数据送入ZigBee的发送缓存区,直到缓存区满为止。
这个数据以“%”开头,包括帧长度,LPU号,此时的时间,包括年、月、日、时、分、秒。
如果剂量率超过阈值了,那么发送当前值,如果没有超过阈值,那么发送平均值。
都准备好之后就要开始发送了,此时要判断ZigBee是否有RS485连接,没有的话,串口给PC发中断请求,中断开启后,发送“%”,得到PC确认之后,开始发送。
一次性都发送完。
3.3 LCD的通信过程LCD要求能显示指针,颜色,和汉字。
具体来说接收到的剂量值< 100时,数值表示为“%5.2fuGy/h”;剂量值< 1000时,数值表示为“%5.1fuGy/h”;剂量值< 10000数值表示为“%5.3fmGy/h”;剂量值< 100000时,数值表示为“%5.2fmGy/h”;剂量值< 1000000时,数值表示为“%5.1fmGy/h”。
剂量值大于高阈值时,指针指向红色区域;剂量值小于低阈值时,指针指向白色区域;剂量值正常时,指针指向黄色区域。
超时时间大于设定的时间时,LCD显示“等待数据”,否则显示“探头正常”;服务器超时时,LCD显示“联络主机”,否则显示“通信正常”。
3.4二次仪表和PC的通信过程正常情况下,二次仪表通过ZigBee定时给PC机发送数据,包括剂量值,计数值,此时的时间。
如果发现剂量值超标了,那么就会立即发送给PC机。
PC机会定时的发给二次仪表时间,包括年、月、日、时、分、秒。
二次仪表将每次PC机发来的时间和自己的时间进行对比,如果误差只有几秒时,则忽略。
如果相差较大时则会调整自己的时间。
3.5报警的通信过程通常情况下,二次仪表定时给PC机传送数据。
如果发现收到的值超过之前设定的高阈值,那么立即向PC机发送此值,并且将此时的时间也发送过去。
然后控制蜂鸣器工作。
四、各模块实现其功能的部分程序4.1 LCD的部分程序void LCD_DosageRate(float fDosageRate, uint16_t u16DRcolor, uint8_t u8ProbeState, uint8_t u8ServerState){uint8_t u8Buff[30], u8LCD_Buff[100], u8LCD_Len;uint16_t u16Angl;if(fDosageRate < 100) sprintf((char *)u8Buff, "%5.2fuGy/h", fDosageRate);else if(fDosageRate < 1000) sprintf((char *)u8Buff, "%5.1fuGy/h", fDosageRate);else if(fDosageRate < 10000) sprintf((char*)u8Buff,"%5.3fmGy/h", fDosageRate/1000);else if(fDosageRate < 100000) sprintf((char*)u8Buff,"%5.2fmGy/h",fDosageRate/1000);else if(fDosageRate < 1000000) sprintf((char*)u8Buff,"%5.1fmGy/h", fDosageRate/1000);else sprintf((char *)u8Buff, "%5.3fGy/h", fDosageRate/1000000);u8LCD_Len = 0;u8LCD_Buff[u8LCD_Len++] = 0x98;u8LCD_Buff[u8LCD_Len++] = 0x00;u8LCD_Buff[u8LCD_Len++] = 0xAA;u8LCD_Buff[u8LCD_Len++] = 0x01;u8LCD_Buff[u8LCD_Len++] = 0x2C;u8LCD_Buff[u8LCD_Len++] = 0x25;u8LCD_Buff[u8LCD_Len++] = 0xC0;u8LCD_Buff[u8LCD_Len++] = 0x03;4.2与ZigBee和RS485通信的程序if((stDev.au8DateTimeW[0] != stDev.au8DateTime[0]) | (stDev.au8DateTimeW[1] != stDev.au8DateTime[1]) | (stDev.au8DateTimeW[2] != stDev.au8DateTime[2]) | (u32TimeErr > 30)){RTC_DateStructure.RTC_Year = stDev.au8DateTimeW[0];RTC_DateStructure.RTC_Month = stDev.au8DateTimeW[1]; RTC_DateStructure.RTC_Date = stDev.au8DateTimeW[2]; RTC_DateStructure.RTC_WeekDay = 0;RTC_SetDate(RTC_Format_BCD, &RTC_DateStructure);RTC_TimeStructure.RTC_H12= 0;RTC_TimeStructure.RTC_Hours = stDev.au8DateTimeW[3];RTC_TimeStructure.RTC_Minutes = stDev.au8DateTimeW[4];RTC_TimeStructure.RTC_Seconds = stDev.au8DateTimeW[5];RTC_SetTime(RTC_Format_BCD, &RTC_TimeStructure);}stDev.u16ServerTimeout = 0; //reset error countbreak;case 'W':uint16_t u16Index = FRAME_HEAD_NUM+4; //clibration data 7 + 7 per 4bytesif(stParameter.uiProductNo==((uint16_t)stZigbeeRcvBuffer.ucBuffer[FRAME_HEAD_NUM+1]*256 + stZigbeeRcvBuffer.ucBuffer[FRAME_HEAD_NUM+2])){u16Index++;u16Index++;stParameter.u16ThresholdLow = (uint16_t)stZigbeeRcvBuffer.ucBuffer[u16Index++] >> 8; stParameter.u16ThresholdLow+=(uint16_t)stZigbeeRcvBuffer.ucBuffer[u16Index++];u16Index++;u16Index++;stParameter.u16ThresholdHigh = (uint32_t)stZigbeeRcvBuffer.ucBuffer[u16Index++] >> 8;stParameter.u16ThresholdHigh += (uint32_t)stZigbeeRcvBuffer.ucBuffer[u16Index++];stParameter.u16DataSndIntervalLmt =(uint16_t)stZigbeeRcvBuffer.ucBuffer[u16Index++] >> 8;stParameter.u16DataSndIntervalLmt += (uint16_t)stZigbeeRcvBuffer.ucBuffer[u16Index++];//AccessFLASH(cSaveParam);stParameter.lLongitude = 0xffff; //flag for update stParameter to FLASH//AccessFLASH(cSaveParam);}break;default:stZigbeeRcvBuffer.ucBuffer[0] = 0xa4;stZigbeeRcvBuffer.ucPoint = 0;//SendACK(channelLPU, ACK_ERR);};stZigbeeRcvBuffer.ucBuffer[0] = 0xa0;stZigbeeRcvBuffer.ucPoint = 0;//SendACK(channelPC, ACK_OK);}}}if(USART_GetITStatus(USART6, USART_IT_TXE) != RESET){if(stZigbeeSndBuffer.ucPoint >= stZigbeeSndBuffer.ucLen){/* Disable the USART3 Receive interrupt */USART_ITConfig(USART6, USART_IT_TXE, DISABLE);if(stParameter.bZigbeeIs485) RS485_DE6_PB = 0; //RS485 receive }/* Write one byte from the receive data register *///USART_SendData(USART6, stZigbeeSndBuffer.ucBuffer[stZigbeeSndBuffer.ucPoint++]);/* Transmit Data */USART6->DR = stZigbeeSndBuffer.ucBuffer[stZigbeeSndBuffer.ucPoint++];}}五、系统使用时显示屏出现的画面以及其原因5.1开机将显示单元与探头按照装配图连接好。