




已阅读5页,还剩13页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
测控网络课程设计姓名: 班级:学号:同组者: 第一部分 实验要求1.要求本次实践以开发计算机测控系统为最终目的,要求掌握计算机测控系统的工作原理,学习组态王工控组态软件的使用方法,根据要求完成工程组态;掌握MODBUS通信协议的原理,开发具有MODBUS通讯功能的智能仪表,最终完成和组态工程之间的通讯。2.设计内容与时间计划(1) 熟悉组态王软件安装,基本开发环境,采用构建简单的工程(采用仿真数据和设备,工程应包含PID功能),计划时间1天;(2) 根据罐区工艺的要求,完成相应的组态工程,实现对原油储罐的监控,计划时间2天;(3) 掌握MODBUS通讯协议的工作原理,在MSP430F5438单片机上编程实现MODBUS客户端服务程序,要求通过串行口将现场的温度、泵状态、流量等参数上传到上位机上,计划时间3天。(4) 在单片机上编程实现流量、温度上下限及仪表地址和波特率等参数设置功能,同时能从上位机对仪表参数进行设置,计划时间2天。(5) 优化设计,要求当出现通讯错误时在上位机和单片机上都要做出相应的反应,计划时间0.5天。(6) 上位机采用高级语言编程,实现对现场智能仪表的控制。第6项为有能力者完成,计划时间1.5天。3.详细设计要求3.1 组态王工程部分:见附录13.2 智能仪表部分:(1)仪表支持MODBUS ASCII和MODBUS RTU通讯协议。(2)仪表具有现场参数修改功能(变送器参数、泵参数和通讯参数可以自由设置,且单位可以更改),参数最好掉电不丢失。(3)仪表具有参数上传功能,可以通过上位机实现对仪表参数的设置。(4)当上位机发送的命令有问题时,仪表应进行错误处理;当仪表返回的数据有错误时,上位机也应作出反应。3.3 MODBUS上位机软件:能够正确读写仪表数据。第二部分 实验内容组态王部分1、罐区工艺流程图2- 储油罐进口电动阀;3- 储油罐排污电动阀;4- 储油罐出口电动阀;5- 泵图1:罐区工艺流程图2、 监控要求(1)监测各罐的液位(0-20m)/ (0-1m)/温度(0-100度)(现场仪表4-20mA输出)。(2)根据各罐液位控制各罐出口电动阀(H16m, 关进口阀,选择最低液位的罐进油;H15.5m高报警, H17m高高报警; 液位H2m低报警, H1m高报警, 界位1.5m高高报警; 界位0.5m低报警, H0)if(液位1=液位2 & 液位1=液位3 & 液位1=液位4 & 液位116)进口阀1=1;进口阀2=0;进口阀3=0;进口阀4=0;液位1=液位1+泵输入总流量*系数1; else if(液位2液位1 & 液位2=液位3 & 液位2=液位4 & 液位216)进口阀1=0;进口阀2=1;进口阀3=0;进口阀4=0;液位2=液位2+系数2*泵输入总流量;elseif(液位3液位1 & 液位3液位2 & 液位3=液位4 & 液位316)进口阀1=0;进口阀2=0;进口阀3=1;进口阀4=0;液位3=液位3+系数3*泵输入总流量;elseif(液位4液位1 & 液位4液位2 & 液位4液位3 & 液位40)if(液位1=液位2 & 液位1=液位3 & 液位1=液位4 & 液位12)出口阀1=1;出口阀2=0;出口阀3=0;出口阀4=0;液位1=液位1-系数1*泵输出总流量;elseif(液位2=液位1 & 液位2=液位3 & 液位2=液位4 & 液位22)出口阀1=0;出口阀2=1;出口阀3=0;出口阀4=0;液位2=液位2-系数2*泵输出总流量;elseif(液位3=液位1 & 液位3=液位2 & 液位3=液位4 & 液位32)出口阀1=0;出口阀2=0;出口阀3=1;出口阀4=0;液位3=液位3-系数3*泵输出总流量;elseif(液位4=液位1 & 液位4=液位2 & 液位4=液位3 & 液位42)出口阀1=0;出口阀2=0;出口阀3=0;出口阀4=1;液位4=液位4-系数4*泵输出总流量;if(排污阀1=1 | 排污阀2=1 | 排污阀3=1 | 排污阀4=1)液位1=液位1-排污阀1*0.1;液位2=液位2-排污阀2*0.1;液位3=液位3-排污阀3*0.1;液位4=液位4-排污阀4*0.1;if(液位1=16)进口阀1=0;if(液位2=16)进口阀2=0;if(液位3=16)进口阀3=0;if(液位4=16)进口阀4=0;if(液位1=2)出口阀1=0;if(液位2=2)出口阀2=0;if(液位3=2)出口阀3=0;if(液位4=2)出口阀4=0;if(泵输入总流量=0)进口阀1=0;进口阀2=0;进口阀3=0;进口阀4=0;if(泵输出总流量=0)出口阀1=0;出口阀2=0;出口阀3=0;出口阀4=0;智能仪表部分Modbus 协议是应用于电子控制器上的一种通用语言。通过此协议,控制器相互之间、控制器经由网络(例如以太网)和其它设备之间可以通信。此协议定义了一个控制器能认识使用的消息结构,而不管它们是经过何种网络进行通信的。它描述了控制器请求访问其它设备的过程,如果回应来自其它设备的请求,以及怎样侦测错误并记录。它制定了消息域格局和内容的公共格式。1、 变量定义及函数声明unsigned char RX32; /单片机接受数据数组unsigned char TX32; /03功能时单片机发送数据数组unsigned char TX632; /06功能时单片机发送数据数组unsigned char Buf10; /存储数据的数组unsigned int flag; / 上位机发送数据标志位unsigned int flag1; /单片机应答数据标志位unsigned int flow; / 流量值unsigned int temperature; /温度值unsigned char LRC; /上位机发送数据校验码unsigned char LRCt; /单片机应答数据校验码void TTXX();void In_LRC();void Out_LRC(); unsigned char shitohex(unsigned int shi) ;unsigned char asciitohex(unsigned char ascii) ;void selflow(unsigned char selflow) ; void seltemp(unsigned char seltemp) ;unsigned char MODBUS_LRC(unsigned char *auchMsg, unsigned short usDataLen);unsigned char hextoascii(unsigned char hex);void RS232_init();void RS232_open();void RS232_close();2、 串口初始化void RS232_init()/ RS232 串口初始化 9600,N,8,1 UART2P9DIR = 0xFF;P9SEL = 0x30; / P9.4,5 = USCI_A2TXD/RXDUCA2CTL1 |= UCSWRST; / *Put state machinein reset*UCA2CTL1 |= UCSSEL_2; / CLK = SMCLKUCA2BR0 = 78; / 9600 (see UsersGuide)UCA2BR1 = 0x00; /UCA2MCTL |= UCBRS_0+UCBRF_2+ UCOS16; / Modulation UCBRSx=6, UCBRFx=0UCA2CTL1 &= UCSWRST; / *Initialize USCI state machine*/ RS232 串口打开 UART2void RS232_open()UCA2IE |= UCRXIE; / Enable USCI_A2 RX interrupt/ RS232 串口关闭 UART2void RS232_close()UCA2IE &= UCRXIE; / Disable USCI_A2 RX interrupt3、 上位机利用UART中断给单片机发送指令#pragma vector=USCI_A2_VECTOR_interrupt void USCI_A2_ISR(void) while (!(UCA2IFG & UCTXIFG); / 判断是否发送完毕 if(UCA2RXBUF = :) /:为起始标志,如果开始,标志位flag置位 flag = 1; tempnumb-; if(flag=1) /当标志位flag置位说明发送命令开始,开始接受命令数据 RX0 = :; if(UCA2RXBUF != 0x0D & UCA2RXBUF != 0x0A ) /只要不是回车换行符,就依次将数据存入接受数组RX中,同时计数变量tempnumb加1 tempnumb+; RXtempnumb = UCA2RXBUF ; if(UCA2RXBUF = 0x0D) /若是回车 tempnumb+; RXtempnumb = D ; if(UCA2RXBUF = 0x0A) /若是换行 tempnumb+; RXtempnumb = A ; flag=0; /接受标志位清零 flag1=1; /发送标志位置1 TTXX(); /调用发送数据函数 4、 单片机通过UART中断向上位机发送应答指令void TTXX() int i; int j; unsigned int b; unsigned int c; unsigned int d; unsigned char temp; In_LRC(); /计数上位机发送命令校验码 if(RX8=1) /如果地址为寄存器0001,发送流量数据 shitohex(flow); if(RX8=2) /如果地址位寄存器0002,发送温度数据 shitohex(temperature); if(RX3=0 & RX4=3) /如果是03号功能 if(LRCHi = RXtempnumb-3) &(LRCLo = RXtempnumb-2) /如果上位机发送校验码正确 for(b=0;b4)&0x0F); TX6 = hextoascii(temp*2)&0x0F); for(i=0;itemp*4;i+=2) TX7+i = hextoascii(Bufi); /要发送的数据 TX8+i = hextoascii(Bufi+1); tempnumt = 7+i; /统计数据长度,用于计算校验码 Out_LRC(); /计算单片机发送数据校验码 TX7+i = LRCHi; TX8+i = LRCLo; TX9+i = 0x0D; TX10+i = 0x0A; for(j=0;j=(10+i);j+) /单片机发送数据 while (!(UCA2IFG & UCTXIFG); / 判断是否发送完毕 UCA2TXBUF=TXj; else /如果校验码不正确,返回错误代码 Input LRC ERROR!只能通过串口调试看到 ERR19=8; ERR20=TX4; for(d=0;d=20;d+) while (!(UCA2IFG & UCTXIFG); / 判断是否发送完毕 UCA2TXBUF=ERRd ; else if(RX3=0 & RX4=6) /如果是06号功能 for(c=0;c=tempnumb;c+) TX6c = RXc; while (!(UCA2IFG & UCTXIFG); / 判断是否发送完毕 UCA2TXBUF=TX6c; selflow(TX610); /设置流量值 seltemp(TX611); /设置温度值 flag1=0; /单片机发送标志位清零 tempnumb=0; /上位机发送数据计算值清零5、 LRC校验模块unsigned char MODBUS_LRC(unsigned char *auchMsg, unsigned short usDataLen) unsigned char uchLRC = 0 ; / LRC 初始化 while (usDataLen-) / 完成整个报文缓冲区 uchLRC += *auchMsg+ ; /缓冲区字节相加,无进位 return (unsigned char)(-(char)uchLRC) ; / 返回二进制补码 (2)发送和应答校验码计数程序 void In_LRC() unsigned int a; for(a=1;a(tempnumb-3);a+=2) tempRX(a-1)/2=(asciitohex(RXa)4)&0x0F); LRCLo = hextoascii(LRC&0x0F); void Out_LRC() unsigned int c; for(c=1;ctempnumt;c+=2) tempTX(c-1)/2 = (asciitohex(TXc)4); tempTX(c-1)/2 = (asciitohex(TXc)4)&0x0F); LRCtLo = hextoascii(LRCt&0x0F); 6、 进制转换/十六进制数转换为ASCII码 unsigned char hextoascii(unsigned char hex) if(hex=0x09) return hex+0x30; else return hex+0x37; /ASCII码转换为十六进制的数 unsigned char asciitohex(unsigned char ascii) if(ascii=0x39) return ascii-0x30; else return ascii-0x37; /十进制转十六进制, 由于组态王通信时会自动将十六进制数转换位十进制数, 因此需要在 单片机内将十进制数转换位十六进制数,这样组态王读到的就是十进制的数据。 unsigned char shitohex(unsigned int shi) int i,b,d,c; int a=0; d=4;char shiliu10; while (shi) /shi代表相应的十进制数 c=shi%16; /每次除以16取余求得相应的十六进制数 shi=shi/16; shiliua = c; a+; for(i=a;i=4;i+) /得到的数据首位倒置,才是要求的十六进制数 shiliui=0; for(b=0;b4;b+) d-; Bufb=shiliud; return 0; 7、 波特率、流量、温度的设置void selflow(unsigned char selflow) /选定流量 switch(selflow) case 0:flow=100; break; case 1:flow=1799; break; case 2:flow=5000; break; default:flow=1799; break; void seltemp(unsigned char seltemp) /选定温度 switch(seltemp) case 0:temperature=1;break; case 1:temperature=20; break; case 2:temperature=100; break; default:temperature=20; break; void selbps(unsigned char selbps) /设定波特率 switch(selbps) case 0: UCA1CTL1 |= UCSSEL_1; / 时钟源选择 UCA1BR0 = 0x1B; /1200 UCA1BR1 = 0x00; UCA1MCTL = 04; break; case 1: UCA1CTL1 |= UCSSEL_1; / 时钟源选择 UCA1BR0 = 0x0D; /2400 UCA1BR1 = 0; UCA1MCTL = 0X0A; break; case 2: UCA1CTL1 |= UCSSEL_1; / 时钟源选择 UCA1BR0 = 6; /4800 UCA1BR1 = 0; UCA1MCTL = 0x0C; UCA1CTL1 &= UCSWRST; / 使能串口功能 UCA1IE |= UCRXIE; / 使能接收中断 _BIS_SR(GIE); break; case 3: UCA1CTL1 |= UCSSEL_1; / 时钟源选择 UCA1BR0 = 3; /9600 UCA1BR1 = 0; UCA1MCTL = 06; UCA1CTL1 &= UCSWRST; / 使能串口功能 UCA1IE |= UCRXIE; / 使能接收中断 _BIS_SR(
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 智能药物研发知识图谱构建考核试卷
- 技术变革中的网络意识形态挑战及治理进路
- 全国向上向善好青年心得体会
- 企业财务工作总结合集15篇
- 榆林新春活动方案
- 武都清明祭祖活动方案
- 比赛小活动策划方案
- 橱柜购买活动方案
- 欢跳锅庄活动方案
- 橘子洲游玩活动方案
- GMP附录-细胞治疗产品
- 节能降耗与循环利用相结合的金属冶炼工业优化策略-洞察阐释
- 中国保险行业发展分析及发展前景与投资研究报告2025-2028版
- 2025年卫生系统招聘考试(护理学专业知识)新版真题卷(附详细解析)
- 少儿编程运营方案
- 2008-2024年江苏省连云港赣榆区事业单位考试《综合知识与能力素质》真题试卷及答案
- 贵州省贵阳市观山湖区2023-2024学年四年级下学期数学期末试卷(含答案)
- 2025年6月8日内蒙古呼伦贝尔市事业单位面试真题及答案解析
- 公司客户开发管理制度
- JG/T 3033-1996试验用砂浆搅拌机
- 2025年数字媒体艺术专业考试试卷及答案
评论
0/150
提交评论