• 11.53 MB
  • 62页

电气毕业设计_电动机设备运行参数远程监控系统设计

  • 62页
  • 当前文档由用户上传发布,收益归属用户
  1. 1、本文档共5页,可阅读全部内容。
  2. 2、本文档内容版权归属内容提供方,所产生的收益全部归内容提供方所有。如果您对本文有版权争议,可选择认领,认领后既往收益都归您。
  3. 3、本文档由用户上传,本站不保证质量和数量令人满意,可能有诸多瑕疵,付费之前,请仔细先通过免费阅读内容等途径辨别内容交易风险。如存在严重挂羊头卖狗肉之情形,可联系本站下载客服投诉处理。
  4. 文档侵权举报电话:19940600175。
'毕业设计(论文)题目电动机设备运行参数远程监控系统设计学院 计算机与控制工程学院专业班级 学生姓名 指导教师 成  绩  2013年 6 月 16日57 摘要随着工业技术的快速发展,电气设备远距离监控也越来越具有广泛的应用和发展前景。对于电动机,作为自动控制装置中不可缺少的动力执行部分,必须时时刻刻知道其是否正常工作,是否正常运行,以避免产生不必要的损失。由于工业现场的恶劣条件,为了提高工作效率,使得电机性能的远程精确测量显得更为重要。本文根据电动机的运行特点,采集电动机的电压、电流、转速和温度四个基本参数数据,用以观察电动机是否在正常工作状态中,如果出现工作异常,可以及时发现,并及时停机提示处理。该系统先将采集的实时参数显示在现场液晶上,并将数据通过GPRS传送到互联网上,即传入计算机中进行处理和操作以便观察和保存。实现了用户不在现场也能知道现场情况。在设计方面,单片机编程是采用C语言设计,其中单片机之间的通信采用Modbus协议与RS-485接口,使得子单片机与主单片机直接的通信变得更加稳定可靠。PC机中上位机是在LabWindows/CVI开发平台中用C语言设计,其中包括每个电机是否正常运行的显示、单个电机参数的图形显示、增添删减电气设备、历史数据保存和数据的保存。软件的界面友好,显示直观,操作简单。关键词:单片机;参数采集;GPRS;LabWindows/CVI57 AbstractWiththedevelopmentofscienceandtechnologyindustry,remotemonitoringdeviceisalsoincreasinglywiderangeofapplications.Forthemotor,automaticcontroldeviceasanindispensablepartofthedynamicexecutionmustalwaysknowthatitisworking,whetherthenormaloperation,inordertoavoidunnecessarylosses.Becauseoftheharshconditionsofindustrialfield,inordertoimproveworkefficiency,makingprecisemeasurementsoftheremotemotorperformanceisevenmoreimportant.Basedonthecharacteristicsofthemotorrunning,collectingthemotorvoltage,current,speedandtemperaturefourbasicparametersofthedata,toobservewhetherthemotorinnormalworkingcondition,ifthereisnotworkingproperly,youcandiscoverandpromptlyshutdownprompttreatment.FirstacquisitiontimeofthesystemparametersaredisplayedontheLCDfield,anddatatransmittedtotheInternetbyGPRS,whichareprocessedintothecomputerandoperateinordertoobserveandsaved.Achievetheuseroff-site,toknowthesituation.Intermsofdesign,microcontrollerprogrammingusingClanguagedesign,inwhichcommunicationbetweenthemicrocontrollerusingModbusprotocolandRS-485interface,sothatthesubMCUandhostmicrocontrollerdirectcommunicationbecomesmorestableandreliable.PC,positionmachineisintheLabWindows/CVIdevelopmentplatformusingClanguagedesign,includingwhetherthenormaloperationofeachmotorshow,asinglegraphicaldisplayofmotorparameters,historicaldataretentionanddatapreservation.Softwareisuser-friendly,intuitivedisplay,easytooperate.Keyword:MCU;Parametercollection;GPRS;LabWindows/CVI57 目录摘要IABSTRACTII第1章绪论11.1课题研究的背景和意义11.2本系统的发展现状与趋势11.3本系统实现目标2第2章总体框架的设计42.1电机监控系统结构设计42.1.1主控制器设计42.1.2检测模块方案设计62.2数据通信方案设计9第3章硬件电路设计123.1核心控制系统的设计123.1.1STC12C5A60S2单片机简介123.1.2STC12C5A60S2单片机的最小系统设计123.2系统供电电源设计133.3光电隔离模块153.4参数采集模块163.4.1电压检测采集模块163.4.2电流检测采集模块163.4.3温度检测采集模块173.4.4转速检测采集模块173.5GPRS通信设计183.6LED12864显示部分18第4章参数监测系统的程序设计204.1主控制器程序设计204.2参数采集模块程序设计214.2.1电压检测程序设计214.2.2脉冲检测程序设计214.3数据传输协议程序设计224.3.1RS485网络224.3.2CRC校验23第5章上位机程序设计及实验效果245.1LabWindows/CVI简介2457 5.2Windows窗体设计及操作说明245.3上位机程序设计285.4实验效果显示图29结论32参考文献33附录1主控制器参考程序代码34附录2测量模块程序代码46附录3上位机程序代码53致谢6757 第1章绪论1.1课题研究的背景和意义随着工业技术的发展,自动控制装置具有越来越深入各种应用领域。由于电能环保方便等优点,使电机的应用领域非常众多,覆盖人们生产生活的各个方面,人们对电机的依赖也越来越大,电机已是当今社会生产生活中最主要的原始动力装置。因此,由于原始动力装置的故障、损坏所影响人们的生活问题甚至导致工厂停工所造成的经济损失非常巨大。尽可能的减少电机故障所造成经济损失,提高经济效益,所以对电机现场的一些参数进行监控是非常必要的。在生产实践中,要得到需要的数据,通常将由传感器产生输出的模拟电压信号或者电流信号通过相关处理后转换为数字信号,再通过相关应用的系统进行相应的处理过程称为数据采集。数据采集装置已经在众多领域得到广泛的运用,目前己进入到了现代化工厂、地质勘测、医药检测器械、电子信息通信、载人航空航天等各个行业,给人类提供了获得各种各样信息的便利条件。原始的数据采集系统虽然稳定但应用的范围比较窄,对于各种各样需求,数据采集系统需要重新改造设计,浪费了大量人力物力和时间。而且对数据采集的精度要求也越来越高,在各种各样的领域都需要运用到高精度的数据采集系统。所以设计一种适用强应用范围广高精度远程传输的数据采集系统是显得尤为重要的。随着科学技术的快速发展,被测量对象的位置分散,现场环境恶劣,要求测试测量和处理分析的信息也越来越大,越来越多,而且测量的任务繁杂,测试测量的系统巨大,测量的单元众多,各个测量单元与主控器的数据交换量也越来越大。而且由于工业现场的环境条件恶劣,同时为了有效提高工作效率,所以远距离监控非常重要。因此数据采集系统的网络化和远距离化越来越重要。综上而言,研究一套适用性强、运用范围广的高精度的远距离传输的数据采集系统是非常必要的,也是迫在眉睫的,它不仅可以有效节省人力物力的投入和提高工业生产的自动化水平,还对于提高我国实现现代化水平和推动社会经济快速发展具有非常深刻的意义。1.2本系统的发展现状与趋势电动机测量技术的发展与工业的发展是息息相关的,电动机的测量从最开始采用原始的测量方法(即使用指针式仪表进行手工测量)到现在的微型计算机自动化测量。从而使测量的工作简单化、高效化和准确化,而且能够完成原始的测量无法完成的测量和实验工作。57 对于目前的仪器仪表来说,微处理器的引用也使它们的结构体积和性能都有很大的提升,使仪器仪表更偏向智能化,在精度、性能与功能上都有了很大的进步,而目前仪器仪表中经常用的微处理器大部分是单片机,因为单片机发展非常快,从普通的51型单片机到avr到后来的增强型8051单片机,运算速度越来越快,功能越来越多,外配电路越来越少,操作也越来越简单方便了,解决了原始的仪器仪表不能解决的问题。但是这只是在仪器仪表方面的发展,只是提高了仪器仪表的精确度和更加方便使用,没有实现高度自动化。在硬件方面,纳米技术的高速发展和应用,也使得硬件集成电路更新迅猛,集成电路芯片的功能也日益强大,应用领域也越来越广泛,开发新产品时间也越来越短,更新越来越快。随着科学技术的迅猛发展,要求测试测量和处理分析的信息量越来越大,对电动机设备自动化测量程度也越来越高。本系统可以远程监控,无需人员在现场监护,大量减少人力物力的投入,而且在上位机上可以同时对多个电动机设备进行操作,大大提高了工作效率。使人们的生活更加智能化,更加简单美好。1.1本系统实现目标电动机设备运行参数远程监控系统的总体设计目标是研究一个远程的能够较为精确的测量电机运行中的电压、电流、转速和温度等参数的功能,并能即时的可靠的远程数据传输的测试方法和实现途径。本课题设计的电机监测系统要求能够较精确的测量电机运行中的电压、电流、转速和温度等参数,能够实现可靠的即时的远程数据传输,并能够在监测到电机某参数异常时能即时发出停机信号或者给出提示信息。同时,既要降低用户的操作程序,又要能对多个电机同时进行监测,实行高度自动化、智能化。该监测系统所需要实现的指标要求如下:(1)该监测系统能够实现对电机电压、电流、转速、温度的采集,并能够时时保存数据。(2)能够同时实现至少12个电机的参数采集,并能够实现远距离数据传输。只需在电脑旁,便可知所有电机运行参数和工作状态。(3)该系统的电压测量范围为0到450V,电流测量范围为0到50A,转速测量范围为0到2000转/分,温度测量范围为0℃到200℃。测量精度为0.1%。(4)当监测到电机参数异常时,能发出停止信号或者提示信息。(5)该系统电源在电机正常工作的时候是用电机的电源通过整流得到的,在电机非正常工作时候,电源要保证该电机系统模块能继续运行一段时间。(6)实现将该系统的参数数据发送到互联网上57 ,工作人员在任何地方都可以观察工业现场电机是否运行正常。(1)在计算机上建立个基于Windows系统下的数据显示平台,能简单明了的看出问题所在。(2)在计算机上,能查看所有电动机设备的运行参数图像,而且能够对电动机进行实时简单控制。57 第2章总体框架的设计2.1电机监控系统结构设计本系统的工作过程是由电机的各个参数采集模块采集数据,再通过RS-485协议将数据发送给主控制器,主控制器将各个参数数据通过LCD12864显示并组合打包成一个数据串,通过RS-232发送给GPRS无线模块,GPRS无线模块又将数据串和本身的地址数据组合打包一起发送到互联网,然后PC机通过互联网接受各个GPRS无线模块发送的数据并进行处理和显示。如果某个电机出现故障,PC机可以向各个通信节点发送命令后根据命令再向参数采集模块或执行模块发送停机命令,总体结构图如下图2-1。PC机收集数据与绘制参数曲线电机电压采集模块电机电流采集模块电机温度采集模块电机转速采集模块主控制器1用来中转与显示数据GPRS无线模块1电机电压采集模块。。。。。。电机转速采集模块主控制器2用来中转与显示数据GPRS无线模块n图2-1总体结构图2.1.1主控制器设计主控制器作用是通过RS-485接收电机参数采集模块的发上采集数据,校验确保数据正确后,在将采集数据现场显示出来并按照规定协议组合打包,再通过RS-232发送给GPRS无线发送模块。要实现这些功能要用到两个串口通信,其中一个是接收电机参数采集模块发送的数据的485串口,另一个是将数据打包发送给GPRS无线发送模块的232串口;接收到采集模块的数据后能在LCD12864实现现场显示并且能给电机发送指令。为了满足上述要求,所选控制核心芯片的引脚必须在24管脚以上,拥有两个通信串口。主控制器功能图如下图2-2:57 主控制器单片机测量参数模块LED12864实现现场显示测量参数模块RS-485RS-485RS-232GPRS无线数据收发模块图2-2主控器要实现以上功能,主控器用普通的增强版51单片机就能实现。目前生产的普通单片机是集成在一个芯片上的微型计算机,是将微型的中央处理器CPU,数据储存器,程序储存器和并行I/O口等电路高度集成在一个小芯片上构成的。因此向单片机内写入相应的程序和正确的外配电路相结合,便可以设计出由单片机为主控制芯片的系统,实现所想实现的功能。在大学期间主要使用的单片机是8051系列的单片机,常用的51系列单片机有ATMEL公司生产的AT89S/C系列的单片机和台湾宏晶公司的STC89C52单片机。台湾宏晶公司的STC12C5A60S2(如图2-3)单片机是基于MCS-51内核的基础开发的,最大的特点就是STC具有串口下载功能ISP和ASP,大大降低单片机的开发难度。图2-3STC12C5A60S2单片机STC单片机内部有集成模数转换功能的10位AD转换器,在采集模拟信号时可以不用外配AD,大大的简化电路,节约成本。57 2.1.2检测模块方案设计通过学习和实验采集,本系统将采集电机的电压、电流、转速、温度四个基本参数,可以分为电压检测模块,电流检测模块,转速检测模块和温度检测模块。1.测量电压的方案设计电压检测目前查到两种通常测量方法,第一种最普遍简单的方法是直接用电阻分压,把高电压分压成低电压,再整流测量,通常万用表就是用的这种方法。第二种方法是采用霍尔电压传感器,霍尔电压传感器运用了霍尔效应,感应出相应电动势,这样电压便被采集到了,这种方法的精确度比前两种方法的精确度高出不少,所以本设计采用利用霍尔电压传感器采集电压的模块(如图2-4)作为在线电压采集的元件。图2-4霍尔电压传感器2.测量电流的方案设计在测量电流时,主要分为直接测量电流和非直接测量电流两种方法,主要是从安全方面去考虑,当测量电流比较大时,大都会选择非接触式电流检测法。对于非接触式电流检测,电流越大它周边的磁场就越强,根据这一原理,霍尔电流检测法通过霍尔元件把磁场的强度转换成电压信号,线圈检测法是通过线圈吧磁场强度的变化量转换成小的电流信号,再把小电流转换成电压信号。根据检测精度的要求,本设计选择了霍尔电流检测方法,HBA50-TSAD(如图2-5所示)用来作为电流信号的采集元件。57 图2-5HBA50-TSAD3.测量转速的方案设计测量转速通常选用两种传感器进行测量,一种为光电传感器,一种为霍尔传感器。光电传感器通常需要配合光电码盘,码盘上有小孔,也可以是用自制的黑白相间的圈,每转一圈记一个数。但是由于做实验过程中电机的变频磁场干扰强,使测量误差很大。霍尔传感器的方法需要的是金属,这就要比采用光电传感器时的外围方便许多。在霍尔传感器检测到金属后便计数一次,这样就可实现转速的测量,误差相对较小。根据记脉冲个数来测量转速有以下三种方法:(1)在单位的时间里去测量传感器所产生的脉冲个数来计算出速度,称为M法测速;(2)测量两个相邻脉冲的时间来测量速度,称为T法测速;(3)同时测量检测时间和在此时间内传感器产出的脉冲个数来测量速度,称为M/T法测速。比较以上三中测量方法,M法可以测量速度比较大的,因为速度慢了,在单位时间内可能没有脉冲;T法可以用于测量速度较低的,如果速度快了,检测的时间很小误差也变得比较大了;而M/T法可以适用于检测高速和低速的电机。本设计中电机的转速比较高,所以选择的是M法,如下图2-6所示。57 图2-6霍尔传感器与三相交流电机4.测量温度的方案设计非接触式测温技术,这种技术测温理念超前,又是非接触式。虽然安全方面非常可靠,但是,其制作成本较高,在本设计中没有采用。接触式的测温方法就比较通用,而且应用比较广泛,一般分为两种。一种是埋置检温计法,就是把热电阻或者热电偶放进电机内部测量温度,这种方法测量在工业应用最为广泛,对于大型电机,这种方法可以测出量多点的准确温度。最后一种是数字是温度传感器DS18B20,在芯片内部直接将温度转换成数字信号,单片机直接按照特定协议读取就行,但是抗干扰能力差,容易出现误差,数据变化大。本设计采用的是埋置检温计法,选择的是Pt100铂电阻的温度变送器(如图2-7所示),这样可以有效的排出电动机产生的磁场对测温的干扰。图2-7温度变送器57 2.2数据通信方案设计设备之间的数据通信是产品设计中常见的要求,数据通信的实现方法较多,总体归纳为无线和有线两种。无线通信主要有红外、蓝牙、ZigBee等,有线通信主要有RS-232、USB、M_BUS、CAN等。在本系统中有两个地方需要运用到数据通信,参数检测模块与主控制器之间的通信和主控单片机与上位机之间的通信。参数检测模块与主控单片机通信可以说是现场数据通信,及现场总线。选择现场总线,有几个有名的现场总线值得提一提,首先就是基金会现场总线,它的英文名称是:FieldbusFoundation,简称:FF。他的体系的结构式参照了ISO/OSI模型。他用到了此模型的应用层、数据连接层和物理层,并且在此基础上还专门为用户添加了用户层。最后一种总线是中国中小型工业企业用户最多,并且在全球最早用于工业现场的总线协议。它最大的特点是Free,它的名字叫Modbus。Modbus已经成为中国国家标准GB/T19582-2008,他可以支持多种电气接口,可硬用双绞线、光纤、无线等多种传输介质。通信接口(communicationinterface)是指中央处理器和标准通信子系统之间的接口。常用的串行通信接口有:RS-232:串行数据通信接口的标准,RS是英文“推荐标准”的缩写,232为标识号,最初都是由电子工业协会(EIA)制订并发布的,RS-232在1962年发布,命名为EIA-232-E,作为工业标准,以保证不同厂家产品之间的兼容。RS-422由RS-232发展而来,它是为弥补RS-232之不足而提出的。RS-232是为点对点(即只用一对收、发设备)通讯而设计的,其驱动器负载为3~7kΩ。所以RS-232适合本地设备之间的通信。RS-232标准规定,制做的驱动器可以添加2500pF的电容,但是数据传输的距离将受到此电容限制,例如,采用150pF/m的通信电缆线时,最大传输距离为15m;若将每米电缆线的电容量减小,数据传输的距离可以大大增加。RS232接口如下图2-8所示。57 图2-8RS232接口RS-485:远距离传输时具有抑制共模干扰的能力,在要求数据传输距离为几十米到一千多米时,广泛运用的是RS-485串行总线标准。RS-485最大的通信距离约为1219m,最大传输速率为10Mbps。RS-485的工作方式是半双工,所以在通信时,必须要控制485芯片(如图2-9所示)的使能端,AB线路上至多只能有一个通信节点为发送信号状态,平时几乎所有的通信节点都处于接收状态。由于RS-485传输距离长,操作简单,工作新能稳定,人们多用RS-485来多点互联。图2-9MAX485芯片GPRS-GPS模块具有两个RS232接口,UART0为模块主接口,UART2为GPS输出接口。模块可工作在自动定位模式和Modem模式。模块工作自动定位模式下时,模块上电后将自动连接GPRS网络,并定时向GPRS网络传送GPS定位信息,UART0为透明数据接口,用户通过此串口可以向网络发送数据;模块工作在Modem模式下时,57 UART0为GPRS模块接口,用户可以通过此接口与GPRS模块(MC37I)通信,模块默认工作模式为自动定位模式。在本系统中共用到一台PC机,两个GPRS无线模块与三个单片机,PC机面向用户,其中一个单片机和GPRS无线模块作为数据中转站,剩下的两个单片机作为检测模块来设计。PC机与数据中转站通信是总体的通信,并且通信距离大于10m,通过GPRS无线实现。GPRS无线模块与单片机之间的通信接口是选择全双工的RS-232-C接口。数据中转站与参数检测节点之间因为是多点相互连接,且通信距离在实际应用时可能会较长,所以选择RS-485接口比较合适。57 第3章硬件电路设计3.1核心控制系统的设计3.1.1STC12C5A60S2单片机简介STC12C5A60系列单片机是台湾宏晶公司生产单片机,是一款具有非常快的计算速度并且抗干扰能力不错的单片机系列。他的指令与引脚都符合51单片机的标准,在普通51单片机的标准上,它增加了一个十位的高速A/D转换器,转换器拥有八个通道,复用的是单片机的P1引脚,内部集成了典型复位电路,还有两路可以调速的PWM输出,除此之外,他还增加了两个可编程计数器阵列和根据型号不同大小也不同的几个EEPROM扇区,每一个扇区可以重复擦鞋一万次。此系列了的单片机计算速度是普通51单片机计算速度的8-12倍,所以在做信号处理上也有很大的优势。3.1.2STC12C5A60S2单片机的最小系统设计STC12C5A60S2单片机与普通的51单片机最小系统的电路基本相同,需要+5V供电,一个复位电路(如图3-2所示)和时钟电路(如图3-1所示)构成了一个单片机最小系统(如图3-3所示)。时钟电路相当于单片机的心脏,给单片机运行提供时钟,它的电路由一个外部铁壳晶振和两个瓷片电容构成如图3-1;单片机复位电路由一个按键,一个10uF和一个1K电阻组成,当按键S1按下,单片机软件复位。本设计中,通信传输波特率为9600bps,为了使通信方便外部晶振为11.0592MHz,设置波特率误差比较小。图3-1时钟电路图3-2复位电路57 图3-3STC12C5260S2单片机最小系统3.2系统供电电源设计系统供电电源有现场测量和上位机两部分。现场测量部分电压传感器和电流互感器需要24V供电,温度传感器Pt100需要12V供电,测速接近开关需要5V供电;主控芯片和显示需要5V供电;上位机为PC机。在现场它们的电源来自变频柜,由变频柜引出接线端子,再由开关电源(如图3-4所示)稳压成24V电源与12V电源。有提供24V的电源,只需将24V转换成5V。而传统的7805稳压芯片要求输入电压在6V到12V,无法满足要求,所以选择了LM2576系列开关稳压集成器件。57 图3-412V与24V开关电源随着科技的发展,LM2576开关稳压积尘电路系列,将慢慢替代三端稳压器件(如78xx系列三端集成电路),LM2576系列具有较高的工作性能和能输出较大工作的电流。从而为MCU的可靠、稳定工作提供了强有力的保证。LM2576系列能输出3A电流的降压稳压电路,它内部含稳定晶振振荡器(52kHz)和基本标准稳压芯片(1.23V),并具有相当完善的电路保护。LM2576系列(如图3-5所示)包括LM2576(最高输入电压40V)及LM2576HV(最高输入电压60V)二个系列,各系列产品均提供有3.3V(-3.3)、5V(-5.0)、12V(-12)、15V(-15)及可调(-ADJ)等多个电压档次产品。LM2576的外配电路如图3-6。图3-5LM257657 图3-6LM2576外配电路3.3光电隔离模块电动机设备运行参数远程监控系统是研究一个远程的能够较为精确的测量电机运行中的电压、电流、转速和温度等参数并能即时的可靠的远程数据传输的。电动机设备运行环境中存在着很多不为人知的变化脉冲,这些变化脉冲很有可能直接改变了传输的数据,数据传输错误严重导致误操作,更有甚者损坏与之相连设备。为了实现数据稳定准确无误的传输,本系统设计必须要对这些干扰进行消除,使用光电隔离来维持数据的完整性并保护与之相连设备。必须保证该系统的抗干扰能力强,数据可靠和性能稳定。不能因为电机开启运行停止出现故障时产生的强磁或者对电源电压影响从而影响数据正确传输,所以在485数据通信时加了光电隔离模块使受影响的部分不会传递给另一部分。从而可以保证区部或主要部分能正常工作。光电隔离的作用从设备装置中把容易受到影响的部分跟干扰源从电气上分离开,使测量控制设备与现场设备只保持光信号的联系,而不直接通过电器的联系。这种隔离的本质是把引进影响部分设备的电气通道切断,从而使测量控制设备从现场的干扰中隔离开。另外,在布线上也应该注意隔离。本系统中用到了光电耦合器即将发光元件和受光元件封装在一起,通过电-光-电这种模式转换,本设计所以的光耦外配电路如图3-7所示也是利用这个原理,充分利用“光”这个非带电子粒子,完成设备间的隔离功能,从而使输入信号和输出信号在电气上是完全隔离开的。根据受光元件的不同可分为晶体管输出型和晶闸管输出型两类。图3-7光耦电路57 3.4参数采集模块3.4.1电压检测采集模块电压检测模块电路(如图3-8所示)的霍尔电压传感器模块所采集的是三项电机的线电压,它的采集量程为0-380V,转换出0-5V的标准电压信号。这个电压标准信号被单片机的P1_2引脚连接,此引脚是单片机内置十位AD转换器的第三路通道。图3-8检测电压电流模块电路3.4.2电流检测采集模块电流检测模块电路中的霍尔电流检测模块的量程是0-10A,对应的电压输出信号是0-5V,由单片机内置AD转换器转换成数字信号再发送给通信节点。在图3-12中,电源线是从电路图右侧引出,为5V电源,电流检测霍尔传感器是由24V供电,当电机的线电流流过,传感器会将电流等比转换成0-5V的电压信号。使用说明:(1)当待测电流从变送器穿过,即可在输出端测得电流大小。(注意:错误的接线可能导致变送器损坏);(2)变送器的输出加幅度可根据用户需要进行适当调节;(3)可按用户需求定制不同额定输入电流和输出电压的变送器。3.4.3温度检测采集模块金属铂具有电阻温度系数大,感应灵敏;电阻率高,元件尺寸小;电阻值随温度变化而变化基本呈线性关系。利用铂此种特有性质制成的传感器称为铂电阻温度传感器,通常使用的铂电阻温度传感器有PT100,应用温度范围广,最常用的一种温度检测器。温度检测采集模块所用的传感器元件是温度变送器与铂电阻pt10057 ,温度变送器的量程是-50~250摄氏度,对应输出0-5V的电压信号,以便单片机直接采集,温度变送器与pt100都需要12V电源供电。采集的温度信号由10位AD转换器转换可精确到0.01摄氏度,其电路图如图3-9所示。图3-9测速温度测量模块3.4.4转速检测采集模块本系统中电动机的额定转速在1400转/min左右,平均每秒二三十转。而且电动机的磁场干扰强,所以转速检测采集模块所用的传感器元件是霍尔传感器,又叫霍尔开关,接近开关。在电机转子上有用来固定的金属元件,当霍尔传靠近金属元件,会改变霍尔开关的输出电平,通过计算电平变换的次数来计算电机的转速。本设计的转速测量方式原理为M/T法。Tc为给定时间间隔,m为Tc时间内电机主轴旋转产生的脉冲个数。则转速为:n=60m/Tc式中m,Tc越大整量化误差越小,使得测量精度越高。3.5GPRS通信设计GPRS模块(如图3-10所示)具有两个RS232接口,UART0为模块主接口,UART2为GPS输出接口。模块可工作在自动定位模式和Modem模式。模块工作自动定位模式下时,模块上电后将自动连接GPRS网络,并定时向GPRS网络传送GPS数据信息,UART0为透明数据接口,用户通过此串口可以向网络发送数据;模块工作在Modem模式下时,UART0为GPRS模块接口,用户可以通过此接口与GPRS模块(MC37I)通信,模块默认工作模式为自动收发模式。本系统将GPRS模块设置为自动收发模式,通过RS-232收发数据。57 图3-10GPRS无线模块3.6LED12864显示部分在本课题中,需要显示参数、参数名称和参数的符号,这是最基本的显示要求,而LED数码管并不能达到本课题的要求,所以采用能够显示汉子与字符的LCM作为显示电路元件。LCM显示模组:LCM(LCDModule)即液晶模块,是将LCD器件配置一个专门的控制器,再根据控制器组装上接口电路,用户就可以按照接口要求进行操作来控制LCD正确显示了。LCD可以比较方便地与各种微控制器连接,所以下图3-11为本设计中现场显示所用的LCD12864.。在显示方面,跟据各型号的不同,LCM提供英文或者中英文字库,可以根据用户的需要,显示丰富多彩的文字和图形。57 图3-11LCM12864模块LCM12864采用的是TTL电平接口,以供51用户方便的使用,它的读写工作方式有两种可供选择,一种是并口,一种是串口。对于本设计而言,单片机引脚够用且需要讲究的是效率,所以本设计选择了并行接口工作方式。读写方式选择好后就是读写的时序、命令与初始化了,由于内容较多,特别繁杂,而且技术比较成熟,本文不做详细介绍。LCM12864模块没有复杂的外围电路,只需要把它的引脚一一连接到控制器上便可,电路如下图3-12所示。图3-12LCM12864液晶接口电路57 第4章参数监测系统的程序设计参数监测系统的程序设计可以分三大部分:主控制部分,参数采集部分,数据传输部分(即通信协议)。4.1主控制器程序设计主控制器作用是通过RS-485接收电机参数采集模块的发上采集数据,在将采集数据现场显示出来并按照规定协议组合打包,再通过RS-232发送给GPRS无线发送模块。要实现这些功能要用到两个串口通信(如图4-2所示),其中一个是接收电机参数采集模块发送的数据的485,另一个是将数据打包发送给GPRS无线发送模块的232;接收到采集模块的数据后能在LCD12864实现现场显示并且能给电机发送指令。实现这些功能,须有LCD12864显示程序,RS-485总线通信协和RS-232通信协议。议主控制器的程序流程图如图4-1所示。LCD12864初始化两个串口初始化结束接受串口产生中断RS-485、RS-232LCD12864显示初始化显示所监测参数串口发送数据返回断点串口中断判断数据储存数据开始图4-1主控程序流程图4-2串口中断程序流程4.2参数采集模块程序设计4.2.1电压检测程序设计电压测量,电流测量,温度测量都是先通过硬件电路将各个传感器输出的信号转变为0-5V的直流电压,再送到单片机A/D转换器输入端。根据A/D转换的值,然后进行故障判断,如有故障存在,就发出停机信号。电压,电流,温度采集部分的程序流程图如图4-3所示。57 A/D寄存器初始化故障判断NY开始结束串口传输数据A/D读出参数值电机故障,电机停机信号图4-3A/D参数检测程序流程图4.2.2脉冲检测程序设计转速测量是在电机转子上有固定的金属元件,当霍尔传靠近金属元件,会改变霍尔开关的输出电平,通过计算电平变换的次数来计算电机的转速。本设计的转速测量方式原理为M法。Tc为给定时间间隔,M为Tc时间内电机主轴旋转产生的脉冲个数。将分别给定时器0和计数器1赋值,用定时器0来记时间Tc,每过Tc秒后,定时器0就产生中断;用计数器1来记有多少个脉冲个数。先设定定时器0和定时器1,给寄存器赋初值,设定好工作模式,调整好工作状态。定时器0中断框图如图4-4所示。57 判断是否等于Tc定时器0进入中断个数加一,定时器0赋初值读出计数器1的值M计算转速M/T把计数器1单元清0返回NY图4-4中断服务程序4.3数据传输协议程序设计4.3.1RS485网络RS485也叫Modbus协议是现在工业上比较流行的一种数据传输方式,其连接简单而且是差分方式数据传输,应用范围比较广泛。在总线上挂载能力强,最多能挂接32个节点。可以在主点加光电隔离,使主模块和子模块在电气上分离开来达到某个部分在受到大的干扰时不会干扰其他部分,提高整个系统的抗干扰能力。RS485描述了主控设备访问其子设备的过程,回答其子设备发的指令,以及判断接受到的传输数据的正错并记录正确数据的过程。当在基于Modbus协议上传输数据时,确定的协议就决定了每个子设备相对应的设备地址,再在通信传输时,通过判断地址来判断是否接受消息数据。现在用的协议是每次都发送七个整数,第一个整数是地址,第二个是0X03,第三个是0X07,第四个是检测数据的高八位,第五个是检测数据的低八位,第六个是CRC校验数据高八位,第七个是CRC校验数据低八位。再通过单片机的串口一个数据一个数据的顺次发送,不能打乱发送数据的顺序,以免产生错误。在发送数据时,必须保证发送数据的波特率一致。RS485中主要的程序是在接受数据,接受程序也决定数据是否接受,接受到的数据是否可靠是否正确等。4.3.2CRC校验在本课题中选择CRC-16,其生成多项式为x16+x15+x2+1,简记为8005,生成CRC-16校验字节的步骤如下(查表法):①初始化CRC寄存器的低位字节寄存器与高位字节寄存器,使其都为1。②高位字节寄存器与8位字的数据节进行异或运算。运算结果放入索引寄存器。③把在高位索引表中索引出值与低位寄存器的值进行异或运算并送给高位寄存器。57 ④在把在低位索引表中索引出的值给低位寄存器。⑤重复③和④,直到计算完所有的数据,此时的高位寄存器的值左移8位加上低位寄存器的值就是所需要的CRC校验码。程序如下:/**************CRC校验码生成函数*****************************///函数功能:生成CRC校验码//unsignedchar*Msgpuch;/*要进行CRC校验的消息*///unsignedshortLenusData;/*消息中字节数*//*************************************************************/unsignedintcrc16(unsignedchar*Msgpuch,unsignedcharLenusData){unsignedcharHiuchCRC=0xFF;/*高CRC字节初始化*/unsignedcharLouchCRC=0xFF;/*低CRC字节初始化*/unsignedintuIndex;/*CRC循环中的索引*/while(LenusData--)/*传输消息缓冲区*/{uIndex=HiuchCRC^*Msgpuch++;/*计算CRC*/HiuchCRC=LouchCRC^HiauchCRC[uIndex];LouchCRC=LoauchCRC[uIndex];}return(LouchCRC<<8|HiuchCRC);}57 第5章上位机程序设计及实验效果5.1LabWindows/CVI简介虚拟仪器编程语言LabWindows/CVI是NI公司研究实验运行开发的32位、面向计算机的应用测量控制领域的交互式应用C语言软件,它可以在很多种操作系统(如Windows98/NT/2000、MacOS和UNIX)下运行,LabWindows/CVI是为C语言程序员提供的软件开发系统,在其交互式开发环境中编写的程序必须符合标准C规范。在LabWindows/CVI开发条件下可以充分运用其包含的自带函数库去实现软件设计和标准C语言程序编写。在该编程条件下可以用LabWindows/CVI丰富的函数库来编写程序,此外每个控件都应该有个回调函数,而且有一个函数面板(FunctionPanel)的相互交叉式操作界面,在每个回调函数中都可以执行对该函数并且可以自动生成回调函数的带码,还可通过鼠标右键点击面板或对应控件获得与之有有关惨数、函数类和函数库的帮助。5.2Windows窗体设计及操作说明图5-1上位机主界面所做的课题是电动机设备运行参数远程监控系统设计,需要远距离监测电动机设备的运行参数,为了适应时代的发展,实现有效节省人力物力和提高工业生产的自动化水平,提高我国实现现代化水平和推动社会经济快速发展。编写此界面,可以方便工作人员的使用操作,而且需要计算机通过RS-232与GPRS模块串口通信。为了满足以上的要求,设计了如图5-1所示的界面供人们使用。57 首先,进行串口参数的设置,点击设置串口参数按钮后,会自动弹出串口参数设置界面(如图5-2)。在设置端口号时,先查看计算机添加的端口是多少,再设置端口;波特率的设置根据GPRS模块传输速率一致,由于GPRS模块的传输波特率设置为9600B/s,所以该串口的波特率设置为9600B/s;停止位都是一般设置为一位;数据传输为一个字符型,为8位长;透明格式传输,没有奇偶校验。串口设置完成后点击配置按钮,如果参数设置没有配置正确,就会弹出窗口提示配置失败(如图5-3),配置失败点击确认后,检查原因改正再继续配置;如果参数配置正确,就会弹出提示配置成功窗口(如图5-4),并且指示灯由红变绿,可以点击确认再点击返回按钮,返回到主界面进行下一项。图5-2串口参数设置界面图5-3配置失败提示图5-4配置成功提示然后,在主界面中点击电动机参数按钮,进入如图5-5所示的电动机参数主界面。本设计选用了中国地图作为背景,选择每个省放一个标志灯,此界面可以很直观显示所测量设备的地点位置,还显示所检测的地点电动机的运行参数是否正常。如果某个电动机的运行参数不正常,相对应的点灯将会变红,并发出警告;反之,正常情况下为绿色。如果想查看某个地区的设备我们只需点击该地区的标志灯,界面就会自动切换到如图57 5-6所示的电动机参数显示界面。图5-5电动机设备分布图进入了电动机参数显示界面后,首先将判断检测道的数据是否显示正确,如果有误差或者不正常,将会弹出警告提示(如图5-8)正在重新配置中。可以点击确认,点击五六次后还没有配置好就会自动弹出操作提示(如图5-9),提示配置错误!请返回串口参数设置界面,重新配置。如果配置正确,就会按照所检测的值进行显示,可以依次描绘出所检测值与时间的关系图。在这个界面中还有三个显示选择按钮,下面量可以选择想要查看的电机的地址。选择完了后,点击确定按钮就会显示对应的电机参数。这样免得使用者想查看其他电动机设备参数时还得返回主界面,再点击进入,可以直接改变电机的信号地址就可以查看。电动机参数可以实时显示,并且再加强下可以保存所以的数据以便以后查看。57 图5-6电动机参数显示界面图5-7保存成功提示图5-8警告提示图5-9操作提示最后,在开始的主界面上点击增添/删减中断设备按钮就会进入如图5-10所示,可以保存软件中所需要的数据地址和电动机设备编号,还有电动机设备所在的具体地址。如果哪个电机出来故障,我们只需输入软件地址或者电动机设备编号,就能查到设备所在的地点,以便工作人员对出故障的电动机设备进行修理。添加/删除设备界面的操作说明:添加设备,先确定下要添加的设备的数据地址和相对应的实际地址,再点击数据地址的滑条选择地址,可以先查看下是否已经有,如果没有,就可以直接输入该电动机设备的实际地址,直接点击保存就可以,保存成功就会弹出保存成功的提示(如图5-7);删除已有设备,如果在实际中要撤出某个设备,先点击查看该电机的数据地址,核对无误后,点击删除及将想要删除的设备从库中删除。本界面的设计中还采用了双保险方法,数据保存后在标号储存中会显示电动机对应的设备标号,还有实际地址栏中显示相对应的地址。由于个人水平关系,此界面还可以做得更加完善智能适用,比如添加选择测量那些电动机的参数,有待以后的改进。57 图5-10添加/删除设备5.3上位机程序设计本系统采用的是基于LabWindows/CVI的平台上编写的上位机程序,应用此软件有很多库函数,可以直接调用,基本不需要写代码。只需要在LabWindows/CVI软件中的面板中画好你所设计的界面,改好它们的面板熟悉设置。可以自动生成程序框架结构,我们只需要往所需按钮下的回调函数中添加我们想实现的功能程序。本系统的上位机程序设计流程,是根据实际中所需要的和所要实现的功能进行设计的,首先是调试串口,确保计算机能和GPRS模块进行串口通信。然后显示中心地图,显示出各个地方的设备运行情况。还有可以添加或者删除设备,保存相关的信息。在这个软件平台下,每个事件都必须有触发条件,比如鼠标点击控件按钮,定时器定时中断等。没有触发条件,相对应的程序是不会去执行。所以在数据显示这里,采用定时器方法,利用定时器的触发条件,时时去检测读取RS232中的数据,并且显示到图像显示控件上。实验效果显示图本课题实物有现场控制电机的变电柜,控制器的内部总体安装效果如图5-11所示。控制柜的面板为图5-12所示。57 图5-11总体安装效果图图5-12控制柜面板经过安装总体调试后,在上位机上显示了数据,上位机不是很卡,此效果(如图5-13所示)为电机在低速运行时的数据采集,时时反应在控制面板上。图5-14为在启动现场电动机设备时,现场显示的开机效果图,现场的数据显示效果如图5-15所示。本次测试基本上达到了所要实现的效果,检测数据精确。57 图5-13测量效果图图5-14现场显示开机界面图5-15现场数据显示界面57 结论参数远程监控系统不仅仅可以用来采集电动机的运行参数,也可以采集其它电气设备的参数,比如压缩机的温度,压力等参数的采集和远程监控;还可以运用于智能家居远程监测和控制。所以电动机设备运行参数远程监控系统既可以用于工业上的多种领域,还可以应用于家居监测控制。电动机设备运行参数远程监控系统已经基本完成了电机四项参数的采集、远距离传输与现场显示功能,并且能够在Windows窗体中绘制参数曲线。在采集过程中,STC12C5A60S2单片机的内置AD转换器起到了很大的作用,它的转换速率很快,工作性能稳定,还能减少外围电路。在设计中用了RS485通信协议,极好的提高了系统外扩能力,只要子模块的地址和数据串满足协定要求。在Windows窗体软件中,软件设定了采样的周期,并对采集的参数用CVI中Grip绘制了参数曲线,窗体软件中的命令可以自行设定,软件界面简洁,功能强大,绘制的曲线基本达到了各种参数的精度要求。本系统的优点就是硬件设计简单,成本低,实用性强。最大特点是能够实现远程数据的传输,远程监控,无需人员在现场监护,大量减少人力投入,而且在上位机上可以同时对多个电机进行操作,大大提高了工作效率。但是也存在着不足,就是根据不同的参数不能够设置不同的采样周期,但是也通过软件设计尽量提高了采样频率。随着我国经济的日益发展,工业上对电动机设备运行参数远程监控系统的需求会越来来越多,因此,参数采集技术也会向着更高的精度、更加快速、更加智能的方向飞速发展。57 参考文献[1]孙晓云主编.基于LabWindows/CVI的虚拟仪器设计与应用[M].电子工业出版社,2010.2.[2]宋宇峰等.LabWindows/CVI逐步深入与开发实例[M].北京:机械工业出版社,2003.[3]宋晓波.基于ARM的通用高精度数据采集装置的研究[D].哈尔滨:哈尔滨理工大学硕博学位论文,2011[4]张曾科编著.计算机网络与通信[M].北京:机械工业出版社,2008.[5]胡广书.数字信号处理-理论、算法与实现[M].北京:清华大学出版社,2003.[6]张毅刚,乔立岩.虚拟仪器软件开发环境LabWindows/CVI6.0编程指南[M].北京:机械工业出版社,2002[7]赵庭.智能电机数据采集、保护器的设计[D].吉林:东北大学硕士学位论文,2005[8]GangzhuChen,AstunoriYamaguchiandKenzoMiya.Anovelsignalprocessingtechniqueforeddy-currenttestingofsteamgeneratortubes.IEEETransactionsonMagnetics,1998,34(3):642-648[9]MallatS,ZhongS.SingularityDetectionandProcessingwithWavelets.IEEETransactionsonPatternandMachineIntelligence,1992,14(7):710-732[10]贾玉凤,基于多重无线通讯协议的WSN的设计[D].山东:山东大学,2008[11]赵申,GPRS无线远程数据采集与传输的研究和实现[D].硕士学位论文,2006[12]吴亚林主编.物联网用传感器[M].北京:电子工业出版社,2012:49-93.[13]樊尚春,传感器技术及应用[M].北京:北京航空航天大学出版社,2004:174-195[14]刘君华,现代检测技术与测试系统设计.西安:西安交通大学出版社,1999[15]刘存,李晖,现代检测技术[M].北京:机械工业出版社,2005[16]陈长龄,田书林,师奕兵,黄建国.自动测试及接口技术[M].北京:机械工业出版社,2005[17]杨光宇,基于FPGA和DSP的擦伤检测系统设计与实现[D],四川:西南交通大学硕士学位论文,2008[18]高云,电机电能质量分析仪的研制[D],武汉:华中科技大学硕士学位论文,2009[19]李莉,电机主要运行参数的监测研究[D],西安:西安科技大学硕士学位论文,200857 附录1主控制器参考程序代码#include#include#include"UCRT.c"#include"LCD.c"#include"CRC.c"sbitLE=P1^0;sbitLED1=P2^1;//shousbitLED2=P2^2;////fasbitKEY1=P3^3;sbitKEY2=P3^4;sbitKEY4=P3^6;sbitKEY5=P3^7;unsignedchara=0,b=0,flag=0,flag1=0,i,j,k,w=0;unsignedintCRC_Dat;unsignedcharcodedat0[7][7]={0X11,0X03,0X07,0X00,0X00,0X00,0X00,//温度10X12,0X03,0X07,0X00,0X00,0X00,0X00,//转速20X13,0X03,0X07,0X00,0X00,0X00,0X00,//电压30X14,0X03,0X07,0X00,0X00,0X00,0X00,//电流40X15,0X03,0X07,0X00,0X00,0X00,0X00,//压力50X16,0X03,0X07,0X00,0X00,0X00,0X00,//流量60X17,0X03,0X07,0X00,0X00,0X00,0X00};unsignedchardat1[7][7]={0X11,0X03,0X07,0X00,0X00,0X00,0X00,//温度10X12,0X03,0X07,0X00,0X00,0X00,0X00,//转速20X13,0X03,0X07,0X00,0X00,0X00,0X00,//电压30X14,0X03,0X07,0X00,0X00,0X00,0X00,//电流40X15,0X03,0X07,0X00,0X00,0X00,0X00,//压力50X16,0X03,0X07,0X00,0X00,0X00,0X00,//流量60X17,0X03,0X07,0X00,0X00,0X00,0X00};unsignedcharcodedat2[]={0X01,0X03,0X07,0X00,0X00,0X00,0X00};unsignedchardat11[]={0X00,0X00,0X00,0X00,0X00,0X00,0X00};unsignedchardat22[]={0X00,0X00,0X00,0X00,0X00,0X00,0X00};unsignedchardat00[]={0X11,0X88,//标志,标志这个是电机检测信号开始端0X01,0X01,//电机地址0X00,0X00,//温度10X00,0X00,//转速20X00,0X00,//电压30X00,0X00,//电流40X00,0X00,//压力50X00,0X00,//流量60X00,0X00,//0X00,0X00};voidGPRS(void){for(j=0;j<4;j++){dat00[2*j+4]=dat1[j][3];dat00[2*j+5]=dat1[j][4];}/**/for(j=0;j<12;j++){UART1_SentData(dat00[j]);delay(1);}dat00[7]++;LCDwrite21(0x83,dat00[4],dat00[5]);LCDwrite22(0x93,dat00[6],dat00[7]);LCDwrite23(0x8B,dat00[8],dat00[9]);LCDwrite24(0x9B,dat00[10],dat00[11]);57 }voidduqu(void){delay(3);for(i=0;i<7;i++){/*************************/for(j=0;j<7;j++)dat11[j]=dat0[i][j];/*************************/LE=1;LED2=0;for(j=0;j<7;j++){UART2_SentData(dat11[j]);}LE=0;a=0;delay(5);LED2=1;delay(30);//缩进式延时if(flag==0)delay(30);if(flag==0)delay(40);if(flag==0){LED1=1;delay(150);}if(flag==0)delay(50);if(flag==1)//数据接收完全检验{flag=0;CRC_Dat=crc16(dat11,sizeof(dat11)-2);if((dat11[5]==(unsignedchar)(CRC_Dat>>8))&&(dat11[6]==(unsignedchar)CRC_Dat)){dat1[i][3]=dat11[3];dat1[i][4]=dat11[4];}LED1=1;}}}voidmain(){LE=0;w=0;Interrupt_Init();LCDchushi();delay(10);LCDwritezi(0x82,0,4);LCDwritezi(0x90,4,8);LCDwritezi(0x88,12,8);LCDwritezi(0x9A,20,6);delay(15000);while(1){if(w==1){LCDwritezi(0x80,26,8);LCDwritezi(0x90,34,8);LCDwritezi(0x88,42,8);LCDwritezi(0x98,50,8);while(w==1){duqu();GPRS();}}else{LCDwritezi(0x80,26,8);57 LCDwritezi(0x90,34,8);LCDwritezi(0x88,42,8);LCDwritezi(0x98,50,8);while(w==0){duqu();GPRS();}}}}/******************串口1中断******************/voidUART1()interrupt4using1{if(RI){RI=0;if(b>=3){dat22[b]=SBUF;b++;}if(SBUF==dat2[2]&&b==2)//检测电流{dat22[2]=SBUF;b++;}if(SBUF==dat2[1]&&b==1){dat22[1]=SBUF;b++;}if(SBUF==dat2[0]&&b==0)//检测电流{dat22[0]=SBUF;b++;}if(b==7){b=0;flag1=1;w=1;}}}/******************串口2中断******************/voidUART2()interrupt8using1{if(S2CON&0X01){S2CON&=0XFE;if(a>=3){dat11[a]=S2BUF;a++;}if(S2BUF==dat11[2]&&a==2)//检测电流{a++;}if(S2BUF==dat11[1]&&a==1){a++;57 }if(S2BUF==dat11[0]&&a==0)//检测电流{a++;LED1=0;}if(a==7){a=0;flag=1;}}}#defineLCDdataP0/*********数据传输口*********************************/sbitLCDRS=P2^5;sbitLCDRW=P2^4;sbitLCDE=P2^3;sbitLCDPSB=P2^6;sbitLCDRST=P2^7;/********************要显示的“字”****************************************/unsignedcharcodetable1[]="毕业设计电机设备运行参量远程监控系统设计----天有多高温度:C天转速:R有电压:V多电流:A高";/***********************延时若干微秒*****************************************/voiddelayus(unsignedcharx){while(x--){_nop_();_nop_();}}/***********************延时若干毫秒*****************************************/voiddelay(unsignedintms)//延迟时间毫秒{unsignedintn,m;for(n=ms;n>0;n--)for(m=0;m<432;m++);}voidwrite_com(unsignedcharcom)//写指令{LCDRS=0;LCDRW=0;delay(2);LCDE=1;LCDdata=com;LCDE=0;delay(10);}voidwrite_data(unsignedchardate)//写数据{LCDRS=1;LCDRW=0;delay(2);LCDE=1;LCDdata=date;LCDE=0;delay(10);}/*********************** LCD 显示初始化 **********************************/voidLCDchushi()//显示初始化{delay(40);57 LCDPSB=1;delayus(10);LCDRST=0;delayus(10);LCDRST=1;LCDRS=0;LCDRW=0;delayus(1);LCDE=0;write_com(0x38);delayus(1);write_com(0x0c);write_com(0x06);write_com(0x01);write_com(0x80);}/*********************** LCD在指定地址显示一个8位"数" *************************/voidLCDwrite1(unsignedcharaddrs,unsignedchardata1){unsignedcharshi,ge;unsignedintLCD_Dat;LCD_Dat=data1;shi=LCD_Dat/10;ge=LCD_Dat%10;write_com(addrs);delay(1);write_data(0X30+shi);write_data(0X30+ge);}/*********************** LCD在指定地址显示两个8位"数" *************************/voidLCDwrite2(unsignedcharaddrs,unsignedchardata1,unsignedchardata2){unsignedcharqian,bai,shi,ge;unsignedintLCD_Dat;LCD_Dat=((data1<<8)+data2);qian=LCD_Dat/1000;bai=LCD_Dat%1000/100;shi=LCD_Dat%1000%100/10;ge=LCD_Dat%1000%100%10;write_com(addrs);delay(1);write_data(0X30+qian);write_data(0X30+bai);write_data(0X30+shi);write_data(0X30+ge);}/*********************** LCD在指定地址显示16位"数" *************************/voidLCDwrit(unsignedcharaddrs,unsignedintdata1){unsignedcharqian,bai,shi,ge;unsignedintLCD_Dat;LCD_Dat=data1;qian=LCD_Dat/1000;bai=LCD_Dat%1000/100;shi=LCD_Dat%1000%100/10;ge=LCD_Dat%1000%100%10;write_com(addrs);delay(1);write_data(0X30+qian);write_data(0X30+bai);write_data(0X30+shi);write_data(0X20+14);write_data(0X30+ge);}57 /*********************** LCD在指定地址显示"字" *************************/voidLCDwritezi(unsignedcharaddrs,unsignedcharzi1,unsignedcharzi2){//要显示的地址从第zi1个字开始显示显示zi2个字后结束unsignedintn;write_com(addrs);delay(1);for(n=2*zi1;n<2*(zi1+zi2);n++){write_data(table1[n]);delay(1);}}/*********************** LCD在指定地址显示温度 *************************/voidLCDwrite21(unsignedcharaddrs,unsignedchardata1,unsignedchardata2){unsignedcharqian,bai,shi,ge;unsignedintLCD_Dat;LCD_Dat=((data1<<8)+data2);if(LCD_Dat>210)LCD_Dat=(LCD_Dat*2.44)-500;elseLCD_Dat=0;qian=LCD_Dat/1000;bai=LCD_Dat%1000/100;shi=LCD_Dat%1000%100/10;ge=LCD_Dat%1000%100%10;write_com(addrs);delay(1);write_data(0X30+qian);write_data(0X30+bai);write_data(0X30+shi);write_data(0X20+14);write_data(0X30+ge);}/*********************** LCD在指定地址显示转速 *************************/voidLCDwrite22(unsignedcharaddrs,unsignedchardata1,unsignedchardata2){unsignedcharqian,bai,shi,ge;unsignedintLCD_Dat;LCD_Dat=((data1<<8)+data2);qian=LCD_Dat/1000;bai=LCD_Dat%1000/100;shi=LCD_Dat%1000%100/10;ge=LCD_Dat%1000%100%10;write_com(addrs);delay(1);write_data(0X30+0);write_data(0X30+qian);write_data(0X30+bai);write_data(0X30+shi);write_data(0X30+ge);}/*********************** LCD在指定地址显示电压 *************************/voidLCDwrite23(unsignedcharaddrs,unsignedchardata1,unsignedchardata2){unsignedcharqian,bai,shi,ge;unsignedintLCD_Dat;LCD_Dat=((data1<<8)+data2);LCD_Dat=LCD_Dat*2.44;qian=LCD_Dat/1000;bai=LCD_Dat%1000/100;shi=LCD_Dat%1000%100/10;57 ge=LCD_Dat%1000%100%10;write_com(addrs);delay(1);write_data(0X30+qian);write_data(0X30+bai);write_data(0X30+shi);write_data(0X20+14);write_data(0X30+ge);}/*********************** LCD在指定地址显示电流 *************************/voidLCDwrite24(unsignedcharaddrs,unsignedchardata1,unsignedchardata2){unsignedcharqian,bai,shi,ge;unsignedintLCD_Dat;LCD_Dat=((data1<<8)+data2);LCD_Dat=(LCD_Dat-204)*6.1;qian=LCD_Dat/1000;bai=LCD_Dat%1000/100;shi=LCD_Dat%1000%100/10;ge=LCD_Dat%1000%100%10;write_com(addrs);delay(1);write_data(0X30+qian);write_data(0X30+bai);write_data(0X20+14);write_data(0X30+shi);write_data(0X30+ge);}#include/*CRC高位字节值表*/staticunsignedcharcodeauchCRCHi[]={0x00,0xC1,0x81,0x40,0x01,0xC0,0x80,0x41,0x01,0xC0,0x80,0x41,0x00,0xC1,0x81,0x40,0x01,0xC0,0x80,0x41,0x00,0xC1,0x81,0x40,0x00,0xC1,0x81,0x40,0x01,0xC0,0x80,0x41,0x01,0xC0,0x80,0x41,0x00,0xC1,0x81,0x40,0x00,0xC1,0x81,0x40,0x01,0xC0,0x80,0x41,0x00,0xC1,0x81,0x40,0x01,0xC0,0x80,0x41,0x01,0xC0,0x80,0x41,0x00,0xC1,0x81,0x40,0x01,0xC0,0x80,0x41,0x00,0xC1,0x81,0x40,0x00,0xC1,0x81,0x40,0x01,0xC0,0x80,0x41,0x00,0xC1,0x81,0x40,0x01,0xC0,0x80,0x41,0x01,0xC0,0x80,0x41,0x00,0xC1,0x81,0x40,0x00,0xC1,0x81,0x40,0x01,0xC0,0x80,0x41,0x01,0xC0,0x80,0x41,0x00,0xC1,0x81,0x40,0x01,0xC0,0x80,0x41,0x00,0xC1,0x81,0x40,0x00,0xC1,0x81,0x40,0x01,0xC0,0x80,0x41,0x01,0xC0,0x80,0x41,0x00,0xC1,0x81,0x40,0x00,0xC1,0x81,0x40,0x01,0xC0,0x80,0x41,0x00,0xC1,0x81,0x40,0x01,0xC0,0x80,0x41,0x01,0xC0,0x80,0x41,0x00,0xC1,0x81,0x40,0x00,0xC1,0x81,0x40,0x01,0xC0,0x80,0x41,0x01,0xC0,0x80,0x41,0x00,0xC1,0x81,0x40,0x01,0xC0,0x80,0x41,0x00,0xC1,0x81,0x40,0x00,0xC1,0x81,0x40,0x01,0xC0,0x80,0x41,0x00,0xC1,0x81,0x40,0x01,0xC0,0x80,0x41,0x01,0xC0,0x80,0x41,0x00,0xC1,0x81,0x40,0x01,0xC0,0x80,0x41,0x00,0xC1,0x81,0x40,0x00,0xC1,0x81,0x40,0x01,0xC0,0x80,0x41,0x01,0xC0,0x80,0x41,0x00,0xC1,0x81,0x40,0x00,0xC1,0x81,0x40,0x01,0xC0,0x80,0x41,0x00,0xC1,0x81,0x40,0x01,0xC0,0x80,0x41,0x01,0xC0,0x80,0x41,0x00,0xC1,0x81,0x40};/*CRC低位字节值表*/staticunsignedcharcodeauchCRCLo[]={0x00,0xC0,0xC1,0x01,0xC3,0x03,0x02,0xC2,0xC6,0x06,0x07,0xC7,0x05,0xC5,0xC4,0x04,0xCC,0x0C,0x0D,0xCD,0x0F,0xCF,0xCE,0x0E,0x0A,0xCA,0xCB,0x0B,0xC9,0x09,57 0x08,0xC8,0xD8,0x18,0x19,0xD9,0x1B,0xDB,0xDA,0x1A,0x1E,0xDE,0xDF,0x1F,0xDD,0x1D,0x1C,0xDC,0x14,0xD4,0xD5,0x15,0xD7,0x17,0x16,0xD6,0xD2,0x12,0x13,0xD3,0x11,0xD1,0xD0,0x10,0xF0,0x30,0x31,0xF1,0x33,0xF3,0xF2,0x32,0x36,0xF6,0xF7,0x37,0xF5,0x35,0x34,0xF4,0x3C,0xFC,0xFD,0x3D,0xFF,0x3F,0x3E,0xFE,0xFA,0x3A,0x3B,0xFB,0x39,0xF9,0xF8,0x38,0x28,0xE8,0xE9,0x29,0xEB,0x2B,0x2A,0xEA,0xEE,0x2E,0x2F,0xEF,0x2D,0xED,0xEC,0x2C,0xE4,0x24,0x25,0xE5,0x27,0xE7,0xE6,0x26,0x22,0xE2,0xE3,0x23,0xE1,0x21,0x20,0xE0,0xA0,0x60,0x61,0xA1,0x63,0xA3,0xA2,0x62,0x66,0xA6,0xA7,0x67,0xA5,0x65,0x64,0xA4,0x6C,0xAC,0xAD,0x6D,0xAF,0x6F,0x6E,0xAE,0xAA,0x6A,0x6B,0xAB,0x69,0xA9,0xA8,0x68,0x78,0xB8,0xB9,0x79,0xBB,0x7B,0x7A,0xBA,0xBE,0x7E,0x7F,0xBF,0x7D,0xBD,0xBC,0x7C,0xB4,0x74,0x75,0xB5,0x77,0xB7,0xB6,0x76,0x72,0xB2,0xB3,0x73,0xB1,0x71,0x70,0xB0,0x50,0x90,0x91,0x51,0x93,0x53,0x52,0x92,0x96,0x56,0x57,0x97,0x55,0x95,0x94,0x54,0x9C,0x5C,0x5D,0x9D,0x5F,0x9F,0x9E,0x5E,0x5A,0x9A,0x9B,0x5B,0x99,0x59,0x58,0x98,0x88,0x48,0x49,0x89,0x4B,0x8B,0x8A,0x4A,0x4E,0x8E,0x8F,0x4F,0x8D,0x4D,0x4C,0x8C,0x44,0x84,0x85,0x45,0x87,0x47,0x46,0x86,0x82,0x42,0x43,0x83,0x41,0x81,0x80,0x40};/***************************CRC校验码生成函数********************************///函数功能:生成CRC校验码//本代码中使用查表法,以提高运算速度//unsignedchar*puchMsg;/*要进行CRC校验的消息*///unsignedshortusDataLen;/*消息中字节数*//****************************************************************************/unsignedintcrc16(unsignedchar*puchMsg,unsignedcharusDataLen){unsignedcharuchCRCHi=0xFF;/*高CRC字节初始化*/unsignedcharuchCRCLo=0xFF;/*低CRC字节初始化*/unsignedintuIndex;/*CRC循环中的索引*/while(usDataLen--)/*传输消息缓冲区*/{uIndex=uchCRCHi^*puchMsg++;/*计算CRC*/uchCRCHi=uchCRCLo^auchCRCHi[uIndex];uchCRCLo=auchCRCLo[uIndex];}return(uchCRCLo<<8|uchCRCHi);}57 附录2测量模块程序代码/*********************测速程序**************************************/#include#include#include"UCRT.c"#include"CRC.c"sbitLE=P1^0;unsignedchari,j,flag=0;unsignedchara=0,ge=0,gge=0;unsignedintCRC_Dat;unsignedintzhuansu,zhuansu0=0;unsignedchardat2[]={0X12,0X03,0X07,0X00,0X00,0X00,0X00};//转速2unsignedchardat0[]={0X00,0X00,0X00,0X00,0X00,0X00,0X00};/***********************延时若干毫秒*****************************************/voiddelay(unsignedintms)//延迟时间毫秒{unsignedintn,m;for(n=ms;n>0;n--)for(m=0;m<432;m++);}voidmain(){LE=0;a=0;Interrupt_Init();TMOD=0x51;TCON=0X00;TH1=0;TL1=0;TH0=(65534-46080)/256;//取出定时器的值TL0=(65534-46080)%256;//取出定时器的值flag=0;while(1){if(flag==1){EA=1;TR0=0;TR1=0;TH0=(65534-46080)/256;//取出定时器的值TL0=(65534-46080)%256;//取出定时器的值TH1=0;TL1=0;if((dat0[0]==0x12)&&(flag==1))//检测转速{flag=0;dat0[3]=dat2[3];//((zhuansu0*60)/gge)>>8;dat0[4]=dat2[4];//((zhuansu0*60)/gge);CRC_Dat=crc16(dat0,sizeof(dat0)-2);dat0[5]=CRC_Dat>>8;dat0[6]=CRC_Dat;delay(3);LE=1;for(j=1;j<3;j++){for(i=0;i<7;i++){UART2_SentData(dat0[i]);}delay(3);}LE=0;a=0;/*if(gge>=30)一分钟转多少转zhuansu1=((zhuansu0*30)/gge);57 {gge=0;zhuansu0=0;zhuansu=0;}delay(10);*/}}else{EA=1;ET0=1;TR0=1;ET1=1;TR1=1;/*if(gge>=30)一分钟转多少转zhuansu1=((zhuansu0*30)/gge);{gge=0;zhuansu0=0;zhuansu=0;}delay(10);*/}}}/******************串口2中断******************/voidUART2()interrupt8using1{if(S2CON&0X01){S2CON&=0XFE;if(a>=2){dat0[a]=S2BUF;a++;}if(S2BUF==0x03&&a==1){dat0[1]=0X03;a++;}if(S2BUF==0x12&&a==0)//检测转速{dat0[0]=0X12;a++;}if(a==7){a=0;flag=1;}}}/******************定时器0中断******************/voidtimer0()interrupt1//定时器0中断定50ms{TH0=(65534-46080)/256;//取出定时器的值TL0=(65534-46080)%256;//取出定时器的值ge++;if(ge==20){ge=0;dat2[3]=TH1;dat2[4]=TL1;zhuansu==(TH1*0X100)+TL1;TR0=1;TR1=1;57 TH1=0;TL1=0;gge++;zhuansu0=zhuansu0+zhuansu;}}voidjishu1()interrupt3{TH1=0;TL1=0;}/*********************************AD检测程序*************************************************/#include#include#include"UCRT1.c"#include"CRC1.c"#include"ad1.c"sbitLE=P1^0;unsignedchari,j,flag=0;unsignedchara=0,ge=0;unsignedintCRC_Dat,ADC_Dat;unsignedintwendu,dianya,dianliu;unsignedchardat3[]={0X11,0X03,0X07,0X00,0X00,0X00,0X00};//温度1,flag1=0unsignedchardat1[]={0X13,0X03,0X07,0X00,0X00,0X00,0X00};//电压3unsignedchardat2[]={0X14,0X03,0X07,0X00,0X00,0X00,0X00};//电流4unsignedchardat0[]={0X00,0X00,0X00,0X00,0X00,0X00,0X00};/***********************延时若干毫秒*****************************************/voiddelay(unsignedintms)//延迟时间毫秒{unsignedintn,m;for(n=ms;n>0;n--)for(m=0;m<432;m++);}voidmain(){LE=0;a=0;Interrupt_Init();STC_ADC();flag=0;while(1){wendu=ADC_Work(0x06);//温度1dianliu=ADC_Work(0x04);//电流4dianya=ADC_Work(0x01);//电压if(flag==1){if((dat0[0]==0x14)&&(flag==1))//检测电流{flag=0;dat0[3]=dianliu>>8;dat0[4]=dianliu;CRC_Dat=crc16(dat0,sizeof(dat0)-2);dat0[5]=CRC_Dat>>8;dat0[6]=CRC_Dat;delay(3);LE=1;for(j=1;j<3;j++){for(i=0;i<7;i++){UART2_SentData(dat0[i]);}57 delay(3);}LE=0;a=0;delay(20);}elseif((dat0[0]==0x13)&&(flag==1))//检测电压{flag=0;dat0[3]=dianya>>8;dat0[4]=dianya;CRC_Dat=crc16(dat0,sizeof(dat0)-2);dat0[5]=CRC_Dat>>8;dat0[6]=CRC_Dat;delay(3);LE=1;for(j=1;j<3;j++){for(i=0;i<7;i++){UART2_SentData(dat0[i]);}delay(3);}LE=0;a=0;delay(20);}elseif((dat0[0]==0x11)&&(flag==1))//检测温度{flag=0;dat0[3]=wendu>>8;dat0[4]=wendu;CRC_Dat=crc16(dat0,sizeof(dat0)-2);dat0[5]=CRC_Dat>>8;dat0[6]=CRC_Dat;delay(3);LE=1;for(j=1;j<3;j++){for(i=0;i<7;i++){UART2_SentData(dat0[i]);}delay(3);}LE=0;a=0;delay(20);}}}}/******************串口2中断******************/voidUART2()interrupt8using1{if(S2CON&0X01){S2CON&=0XFE;if(a>=2){dat0[a]=S2BUF;a++;}if(S2BUF==0x03&&a==1){dat0[1]=0X03;57 a++;}if(a==0){if(S2BUF==0x14&&a==0)//检测电流{dat0[0]=0X14;a++;}elseif(S2BUF==0x13&&a==0)//检测转速{dat0[0]=0X13;a++;}elseif(S2BUF==0x11&&a==0)//检测转速{dat0[0]=0X11;a++;}}if(a==7){a=0;flag=1;}}}57 附录3上位机程序代码#include#include#include#include"zhujiemian.h"intshow_low;intshow_high;unsignedcharcombuffer[12];staticintstatus;staticintpanelAdd,ctrlarray,panelone;staticintpanelrs232,panelzhu,panelmain;intcom_crc;intcom_stop;intcom_rate;intcom_lenght;intcom_com;//添加或删除的面板按键参数unsignedchari1,add_names[200];inti2,com_grade;intcom_low;intcom_high;//显示数据图像intshow_which(void);voidshow_set(intshow1,intshow2);unsignedcharkk;//错误配置次数unsignedcharaddress[300][200];intmain(intargc,char*argv[]){if(InitCVIRTE(0,argv,0)==0)return-1;/*outofmemory*/if((panelAdd=LoadPanel(0,"zhujiemian.uir",PANEL_ADD))<0)return-1;if((panelone=LoadPanel(0,"zhujiemian.uir",PANELONE))<0)return-1;if((panelrs232=LoadPanel(0,"zhujiemian.uir",PANELRS232))<0)return-1;if((panelzhu=LoadPanel(0,"zhujiemian.uir",PANELZHU))<0)return-1;if((panelmain=LoadPanel(0,"zhujiemian.uir",PANELMAIN))<0)return-1;ctrlarray=GetCtrlArrayFromResourceID(panelAdd,CTRLARRAY);DisplayPanel(panelzhu);HidePanel(panelmain);HidePanel(panelAdd);HidePanel(panelone);HidePanel(panelrs232);RunUserInterface();DiscardPanel(panelAdd);DiscardPanel(panelone);DiscardPanel(panelrs232);DiscardPanel(panelzhu);DiscardPanel(panelmain);return0;}//显示intCVICALLBACKtimer_check(intpanel,intcontrol,intevent,57 void*callbackData,inteventData1,inteventData2){doublekk1;switch(event){caseEVENT_TIMER_TICK:ComRd(com_com,combuffer,12);if((combuffer[0]==17)&&(combuffer[1]==136)){show_which();kk=0;}else{GetCtrlVal(panelrs232,PANELRS232_RINGSLIDE_COM,&com_com);CloseCom(com_com);MessagePopup("警告提示","重新配置中……");SetCtrlVal(panelrs232,PANELRS232_LEDSTATE,0);GetCtrlVal(panelrs232,PANELRS232_RINGSLIDE_LENGTH,&com_lenght);GetCtrlVal(panelrs232,PANELRS232_RINGSLIDE_RATE,&com_rate);GetCtrlVal(panelrs232,PANELRS232_RINGSLIDE_STOP,&com_stop);GetCtrlVal(panelrs232,PANELRS232_RINGSLIDE_CRC,&com_crc);status=OpenComConfig(com_com,"",com_rate,com_crc,com_lenght,com_stop,512,512);kk++;if(kk>5){SetCtrlAttribute(panelone,PANELONE_TIMER_SHOW,ATTR_ENABLED,0);kk=0;MessagePopup("操作提示","配置错误!!!nn请返回串口参数设置界面,重新配置");}}/**/break;}return0;}//显示对应的电压电流温度转速intCVICALLBACKcom_show_all(intpanel,intcontrol,intevent,void*callbackData,inteventData1,inteventData2){switch(event){caseEVENT_COMMIT:GetCtrlVal(panelone,PANELONE_RING_SHOW_ADDRESS1,&show_high);GetCtrlVal(panelone,PANELONE_RING_SHOW_ADDRESS2,&show_low);i2=show_high*16+show_low;SetCtrlVal(panelone,PANELONE_RING_SHOW_ADDRESS1,show_high);SetCtrlVal(panelone,PANELONE_RING_SHOW_ADDRESS2,show_low);SetCtrlVal(panelone,PANELONE_NUMERIC_SHOW_ID,i2);ClearStripChart(panelone,PANELONE_STRIPCHARTSHOW_V);ClearStripChart(panelone,PANELONE_STRIPCHARTSHOW_R);ClearStripChart(panelone,PANELONE_STRIPCHARTSHOW_A);ClearStripChart(panelone,PANELONE_STRIPCHARTSHOW_C);break;}return0;}//保存数据57 intCVICALLBACKcom_save_add(intpanel,intcontrol,intevent,void*callbackData,inteventData1,inteventData2){inthandadd;switch(event){caseEVENT_COMMIT:GetCtrlVal(panelAdd,PANEL_ADD_RING_ADDRESS1,&com_high);GetCtrlVal(panelAdd,PANEL_ADD_RING_ADDRESS2,&com_low);GetCtrlVal(panelAdd,PANEL_ADD_NUMERIC_ID,&com_grade);GetCtrlVal(panelAdd,PANEL_ADD_STRING_ID,add_names);if((com_high>=0)&&(com_low>=0)&&(com_grade>=0)){i2=(com_high*16+com_low);for(i1=0;i1<200;i1++)address[i2][i1]=add_names[i1];SetCtrlVal(panelAdd,PANEL_ADD_NUMERIC,com_grade);SetCtrlVal(panelAdd,PANEL_ADD_STRING,add_names);SetCtrlVal(panelAdd,PANEL_ADD_NUMERIC_ID,i2);MessagePopup("提示","保存成功!!!");}else{MessagePopup("错误提示","保存失败!!!");}break;}return0;}//删除数据intCVICALLBACKcom_delete(intpanel,intcontrol,intevent,void*callbackData,inteventData1,inteventData2){switch(event){caseEVENT_COMMIT:GetCtrlVal(panelAdd,PANEL_ADD_RING_ADDRESS1,&com_high);GetCtrlVal(panelAdd,PANEL_ADD_RING_ADDRESS2,&com_low);i2=(com_high*16+com_low);for(i1=0;i1<200;i1++){add_names[i1]=0;address[i2][i1]=0;}SetCtrlVal(panelAdd,PANEL_ADD_STRING_ID,add_names);SetCtrlVal(panelAdd,PANEL_ADD_STRING,add_names);SetCtrlVal(panelAdd,PANEL_ADD_NUMERIC_ID,0);SetCtrlVal(panelAdd,PANEL_ADD_NUMERIC,0);break;}return0;}//查看数据57 intCVICALLBACKcom_find(intpanel,intcontrol,intevent,void*callbackData,inteventData1,inteventData2){switch(event){caseEVENT_COMMIT:GetCtrlVal(panelAdd,PANEL_ADD_RING_ADDRESS1,&com_high);GetCtrlVal(panelAdd,PANEL_ADD_RING_ADDRESS2,&com_low);i2=(com_high*16+com_low);for(i1=0;i1<200;i1++)add_names[i1]=address[i2][i1];SetCtrlVal(panelAdd,PANEL_ADD_STRING_ID,add_names);SetCtrlVal(panelAdd,PANEL_ADD_STRING,add_names);SetCtrlVal(panelAdd,PANEL_ADD_NUMERIC_ID,i2);SetCtrlVal(panelAdd,PANEL_ADD_NUMERIC,i2);break;}return0;}//RS-232配置设计intCVICALLBACKcomgoto(intpanel,intcontrol,intevent,void*callbackData,inteventData1,inteventData2){switch(event){caseEVENT_COMMIT:GetCtrlVal(panelrs232,PANELRS232_RINGSLIDE_COM,&com_com);GetCtrlVal(panelrs232,PANELRS232_RINGSLIDE_LENGTH,&com_lenght);GetCtrlVal(panelrs232,PANELRS232_RINGSLIDE_RATE,&com_rate);GetCtrlVal(panelrs232,PANELRS232_RINGSLIDE_STOP,&com_stop);GetCtrlVal(panelrs232,PANELRS232_RINGSLIDE_CRC,&com_crc);status=OpenComConfig(com_com,"",com_rate,com_crc,com_lenght,com_stop,36,36);if(status!=0){SetCtrlVal(panelrs232,PANELRS232_LEDSTATE,0);MessagePopup("提示","配置失败!!!");return0;}else{SetCtrlVal(panelrs232,PANELRS232_LEDSTATE,1);SetCTSMode(com_com,LWRS_HWHANDSHAKE_OFF);MessagePopup("提示","配置成功!!!");}break;}return0;}intCVICALLBACKled_1(intpanel,intcontrol,intevent,void*callbackData,inteventData1,inteventData2){switch(event)57 {caseEVENT_COMMIT:show_set(1,1);break;}return0;}intCVICALLBACKled_2(intpanel,intcontrol,intevent,void*callbackData,inteventData1,inteventData2){switch(event){caseEVENT_COMMIT:show_set(1,2);break;}return0;}intCVICALLBACKled_5(intpanel,intcontrol,intevent,void*callbackData,inteventData1,inteventData2){switch(event){caseEVENT_COMMIT:show_set(1,5);break;}return0;}intCVICALLBACKled_4(intpanel,intcontrol,intevent,void*callbackData,inteventData1,inteventData2){switch(event){caseEVENT_COMMIT:show_set(1,4);break;}return0;}intCVICALLBACKled_3(intpanel,intcontrol,intevent,void*callbackData,inteventData1,inteventData2){switch(event){caseEVENT_COMMIT:show_set(1,3);break;}return0;}intCVICALLBACKled_9(intpanel,intcontrol,intevent,void*callbackData,inteventData1,inteventData2)57 {switch(event){caseEVENT_COMMIT:show_set(1,9);break;}return0;}intCVICALLBACKled_34(intpanel,intcontrol,intevent,void*callbackData,inteventData1,inteventData2){switch(event){caseEVENT_COMMIT:show_set(1,34);break;}return0;}intCVICALLBACKled_8(intpanel,intcontrol,intevent,void*callbackData,inteventData1,inteventData2){switch(event){caseEVENT_COMMIT:break;}return0;}intCVICALLBACKled_6(intpanel,intcontrol,intevent,void*callbackData,inteventData1,inteventData2){switch(event){caseEVENT_COMMIT:break;}return0;}intCVICALLBACKled_10(intpanel,intcontrol,intevent,void*callbackData,inteventData1,inteventData2){switch(event){caseEVENT_COMMIT:break;}return0;}intCVICALLBACKled_7(intpanel,intcontrol,intevent,void*callbackData,inteventData1,inteventData2){switch(event){caseEVENT_COMMIT:break;57 }return0;}intCVICALLBACKled_13(intpanel,intcontrol,intevent,void*callbackData,inteventData1,inteventData2){switch(event){caseEVENT_COMMIT:break;}return0;}intCVICALLBACKled_12(intpanel,intcontrol,intevent,void*callbackData,inteventData1,inteventData2){switch(event){caseEVENT_COMMIT:break;}return0;}intCVICALLBACKled_11(intpanel,intcontrol,intevent,void*callbackData,inteventData1,inteventData2){switch(event){caseEVENT_COMMIT:break;}return0;}intCVICALLBACKled_26(intpanel,intcontrol,intevent,void*callbackData,inteventData1,inteventData2){switch(event){caseEVENT_COMMIT:break;}return0;}intCVICALLBACKpic_quit(intpanel,intcontrol,intevent,void*callbackData,inteventData1,inteventData2){switch(event){caseEVENT_COMMIT:CloseCom(com_com);QuitUserInterface(0);break;}return0;}intCVICALLBACKQuitCallback(intpanel,intcontrol,intevent,void*callbackData,inteventData1,inteventData2)57 {switch(event){caseEVENT_COMMIT:QuitUserInterface(0);break;}return0;}intCVICALLBACKcom_add_quit(intpanel,intcontrol,intevent,void*callbackData,inteventData1,inteventData2){switch(event){caseEVENT_COMMIT:DisplayPanel(panelzhu);HidePanel(panelmain);HidePanel(panelAdd);HidePanel(panelone);HidePanel(panelrs232);break;}return0;}intCVICALLBACKcomshow_quit(intpanel,intcontrol,intevent,void*callbackData,inteventData1,inteventData2){switch(event){caseEVENT_COMMIT:HidePanel(panelzhu);HidePanel(panelone);HidePanel(panelAdd);HidePanel(panelrs232);DisplayPanel(panelmain);SetCtrlAttribute(panelone,PANELONE_TIMER_SHOW,ATTR_ENABLED,0);break;}return0;}intCVICALLBACKcomrs232quit(intpanel,intcontrol,intevent,void*callbackData,inteventData1,inteventData2){switch(event){caseEVENT_COMMIT:DisplayPanel(panelzhu);HidePanel(panelmain);HidePanel(panelAdd);HidePanel(panelone);HidePanel(panelrs232);break;}return0;}intCVICALLBACKpic_RS232(intpanel,intcontrol,intevent,57 void*callbackData,inteventData1,inteventData2){switch(event){caseEVENT_COMMIT:HidePanel(panelzhu);HidePanel(panelmain);HidePanel(panelAdd);HidePanel(panelone);DisplayPanel(panelrs232);break;}return0;}intCVICALLBACKpic_main(intpanel,intcontrol,intevent,void*callbackData,inteventData1,inteventData2){switch(event){caseEVENT_COMMIT:DisplayPanel(panelmain);HidePanel(panelzhu);HidePanel(panelAdd);HidePanel(panelone);HidePanel(panelrs232);break;}return0;}intCVICALLBACKpic_add(intpanel,intcontrol,intevent,void*callbackData,inteventData1,inteventData2){switch(event){caseEVENT_COMMIT:HidePanel(panelzhu);HidePanel(panelmain);DisplayPanel(panelAdd);HidePanel(panelone);HidePanel(panelrs232);break;}return0;}intCVICALLBACKcom_mainaa(intpanel,intcontrol,intevent,void*callbackData,inteventData1,inteventData2){switch(event){caseEVENT_COMMIT:HidePanel(panelmain);HidePanel(panelAdd);HidePanel(panelone);HidePanel(panelrs232);DisplayPanel(panelzhu);break;57 }return0;}//显示图像intshow_which(void){doublecombuffer2a;doublecombuffer2v;doublecombuffer2r;doublecombuffer2c;intshuju=0;SetCtrlVal(panelone,PANELONE_NUMERICONE,combuffer[5]);SetCtrlVal(panelone,PANELONE_NUMERICONE2,combuffer[6]);SetCtrlVal(panelone,PANELONE_NUMERICONE3,combuffer[7]);SetCtrlVal(panelone,PANELONE_NUMERICONE4,combuffer[8]);SetCtrlVal(panelone,PANELONE_NUMERICONE5,combuffer[4]);if((combuffer[2]==show_high)&&(combuffer[3]==show_low)){shuju=0;shuju=(combuffer[4]<<8)+combuffer[5];//电机温度if(shuju>208)combuffer2c=shuju*0.244-50;shuju=0;shuju=(combuffer[6]<<8)+combuffer[7];//电机转速combuffer2r=shuju*1.0;shuju=0;shuju=(combuffer[8]<<8)+combuffer[9];//电机电压combuffer2v=shuju*0.244;shuju=0;shuju=(combuffer[10]<<8)+combuffer[11];//电机电流combuffer2a=shuju*4/1024.0+1;PlotStripChartPoint(panelone,PANELONE_STRIPCHARTSHOW_V,combuffer2v);PlotStripChartPoint(panelone,PANELONE_STRIPCHARTSHOW_A,combuffer2a);PlotStripChartPoint(panelone,PANELONE_STRIPCHARTSHOW_R,combuffer2r);PlotStripChartPoint(panelone,PANELONE_STRIPCHARTSHOW_C,combuffer2c);}return0;}//显示设置voidshow_set(intshow1,intshow2){show_high=show1;show_low=show2;HidePanel(panelmain);HidePanel(panelAdd);HidePanel(panelzhu);HidePanel(panelrs232);DisplayPanel(panelone);i2=show_high*16+show_low;57 SetCtrlVal(panelone,PANELONE_RING_SHOW_ADDRESS1,show_high);SetCtrlVal(panelone,PANELONE_RING_SHOW_ADDRESS2,show_low);SetCtrlVal(panelone,PANELONE_NUMERIC_SHOW_ID,i2);SetCtrlAttribute(panelone,PANELONE_TIMER_SHOW,ATTR_ENABLED,1);//打开打开定时器,开始定时}57 致谢通过大四下学期的努力,同学的帮助和老师的方向指导,本系统能够实现远距离数据传输和实现现场电动机的数据采集,基本实现设计目标。真心的感谢我的导师,认真给我讲解剖析,一直带着我们在实验室学习单片机等知识。让我们懂不仅仅是学习知识,更深刻的懂得怎么样去做人。我还要感谢实验室的战友,是你们陪我一直在实验室战斗,共同探讨我们没有理解将要理解的知识,相互帮助,相互学习,共同奋斗,使我们的大学生活更加精彩。我还要感谢所有在大学里教过我的老师们,是你们教会了我怎样去学习,让我了解我以前没有接触的知识,是你们细心的指导和帮助。还有谢谢我的同学们,是你们让我感觉到大学生活的精彩充实。最后要感谢我的家人,是你们在背后默默的支持着我,给我勇往直前的底气。谢谢你们!57'