基于modbus的单片机课程设计+.docx
- 文档编号:4046642
- 上传时间:2022-11-27
- 格式:DOCX
- 页数:24
- 大小:1.99MB
基于modbus的单片机课程设计+.docx
《基于modbus的单片机课程设计+.docx》由会员分享,可在线阅读,更多相关《基于modbus的单片机课程设计+.docx(24页珍藏版)》请在冰豆网上搜索。
基于modbus的单片机课程设计+
基于ModBus总线协议的温度报警设计
********
班级:
电气自动化
*************
学号:
***********
8888年8月88日
摘要
随着现场总线在工业应用中的越来越广泛,越来越普及,Modbus作为其中的一种简单协议也受到不少的欢迎。
本论文将根据Modbus协议内容的用Modbus的ASCII模式实现读线圈、写单个线圈、写多个线圈、读寄存器、写单个寄存器、写多个寄存器这六个功能。
本系统以STC89C52为基本平台,主要利用其中的RS232串口,然后用单片机的I/O口模拟协议中的线圈,在单片机中定义几个变量模拟协议中的寄存器。
然后通过测量温度,与几个寄存器里的值比较判断是否报警。
本系统可以实时与上位机通信,实现数据的采集,存储,判断处理等功能。
另外本系统通过液晶实时显示当前线圈的状态、寄存器的值、测量的温度,另外本系统具有掉电保护的功能。
【关键词】Modbus、线圈、寄存器、RS232、STC89C52、温度报警
第一章设计要求及需求
第一节设计目标
一、基本功能
设计一个基于Modbus总线协议的系统,实现Modbus协议部分内容,如表1.1
功能码
功能
本系统中功能
十进制
十六进制
1
01
读线圈
输出:
D1~D4(只写)
输入:
P3.4~P3.7(只读)
5
05
写单个线圈
15
0F
写多个线圈
3
03
读寄存器
量程上限0~10000(读/写)
量程下限0~5000(读/写)
报警上限0~10000(读/写)
报警下限0~5000(读/写)
测量值0.0~10000.0(只读)
6
06
写单个寄存器
16
10
写多个寄存器
表1.1
用ASCII模式完成以上功能是本设计的基本要求,功能实现,程序规范。
二、拓展功能
在以上的基础上实现了RTU通信模式;系统能用LCD显示有关内容;实现了相关参数的修改保存;能够实时测温,并且有报警功能。
独立完成软件设计、软硬件调试和论文撰写,所有变量、函数命名格式为“XXXX_学号”,例如“RangeMax_123”、“RangeMin_123”。
论文必需包括需求分析、系统设计、详细设计、运行调试等过程,必须包含设计及运行过程的关键截图。
第二节设计需求
在工业上,温度是个很关键的参数,很多设备系统等都需要有一个工作范围,所以对温度的测量及报警,以及通过上位机可以实时去修改这个参数显得尤其重要。
那么怎么降低成本同时更好的完成上述功能呢?
现场总线给我们指引了一条道路,其中的一个Modbus总线协议就可以帮助我们很好的完成上述功能,而且性能稳定,价格便宜,很适合要求不是十分高的场合。
现在很多测量仪表价格很是昂贵,而且线路复杂,功能还不齐全,所以所做的基于Modbus总线协议的温度测量控制系统能很好的解决这些问题,所以应用很广泛,需求也是很大。
第二章系统设计
第一节设计平台STC89C52
STC89C52是一种低功耗、高性能CMOS8位微控制器,具有8K在系统可编程Flash存储器。
在单芯片上,拥有灵巧的8位CPU和在系统可编程Flash,使得STC89C52为众多嵌入式控制应用系统提供高灵活、超有效的解决方案。
具有以下标准功能:
8k字节Flash,512字节RAM,32位I/O口线,看门狗定时器,内置4KBEEPROM,MAX810复位电路,三个16位定时器/计数器,一个6向量2级中断结构,全双工串行口。
另外STC89X52可降至0Hz静态逻辑操作,支持2种软件可选择节电模式。
空闲模式下,CPU停止工作,允许RAM、定时器/计数器、串口、中断继续工作。
掉电保护方式下,RAM内容被保存,振荡器被冻结,单片机一切工作停止,直到下一个中断或硬件复位为止。
最高运作频率35Mhz,6T/12T可选。
如图2.1:
图2.1单片机资源
第二节Modbus协议
一、Modbus概述
Modbus是由Modicon(现为施耐德电气公司的一个品牌)在1979年发明的,是全球第一个真正用于工业现场的总线协议。
为更好地普及和推动Modbus在基于以太网上的分布式应用,目前施耐德公司已将Modbus协议的所有权移交给IDA(InterfaceforDistributedAutomation,分布式自动化接口)组织,并成立了Modbus-IDA组织,为Modbus今后的发展奠定了基础。
在我国,Modbus已经成为国家标准GB/T19582-2008。
据不完全统计:
截止到2007年,Modbus的节点安装数量已经超过了1000万个。
Modbus协议是应用于电子控制器上的一种通用语言。
通过此协议,控制器相互之间、控制器经由网络(例如以太网)和其它设备之间可以通信。
它已经成为一通用工业标准。
有了它,不同厂商生产的控制设备可以连成工业网络,进行集中监控。
此协议定义了一个控制器能认识使用的消息结构,而不管它们是经过何种网络进行通信的。
它描述了一控制器请求访问其它设备的过程,如何回应来自其它设备的请求,以及怎样侦测错误并记录。
它制定了消息域格局和内容的公共格式。
当在一Modbus网络上通信时,此协议决定了每个控制器须要知道它们的设备地址,识别按地址发来的消息,决定要产生何种行动。
如果需要回应,控制器将生成反馈信息并用Modbus协议发出。
在其它网络上,包含了Modbus协议的消息转换为在此网络上使用的帧或包结构。
这种转换也扩展了根据具体的网络解决节地址、路由路径及错误检测的方法。
Modbus具有以下几个特点:
(1)标准、开放,用户可以免费、放心地使用Modbus协议,不需要交纳许可证费,也不会侵犯知识产权。
目前,支持Modbus的厂家超过400家,支持Modbus的产品超过600种。
(2)Modbus可以支持多种电气接口,如RS-232、RS-485等,还可以在各种介质上传送,如双绞线、光纤、无线等。
(3)Modbus的帧格式简单、紧凑,通俗易懂。
用户使用容易,厂商开发简单。
二、Modbus通信协议
控制器通信使用主—从技术,即仅一设备(主设备)能初始化传输(查询)。
其它设备(从设备)根据主设备查询提供的数据作出相应反应。
典型的主设备:
主机和可编程仪表。
典型的从设备:
可编程控制器。
主设备可单独和从设备通信,也能以广播方式和所有从设备通信。
如果单独通信,从设备返回一消息作为回应,如果是以广播方式查询的,则不作任何回应。
Modbus协议建立了主设备查询的格式:
设备(或广播)地址、功能代码、所有要发送的数据、一错误检测域。
从设备回应消息也由Modbus协议构成,包括确认要行动的域、任何要返回的数据、和一错误检测域。
如果在消息接收过程中发生一错误,或从设备不能执行其命令,从设备将建立一错误消息并把它作为回应发送出去。
控制器能设置为两种传输模式(ASCII或RTU)中的任何一种在标准的Modbus网络通信。
用户选择想要的模式,包括串口通信参数(波特率、校验方式等),在配置每个控制器的时候,在一个Modbus网络上的所有设备都必须选择相同的传输模式和串口参数。
第三节总体设计方案
本系统在基于stc单片机平台上,利用其中的RS232,然后根据Modbus总线协议去编写相应的程序完成其功能,另外再利用DS18b20测量温度,在Modbus上去实现温度报警等功能,然后利用NOKIA5110液晶实时显示线圈的状态、几个寄存器的值、实时温度值。
图2.3为系统的总体方框图。
图2.3系统总体流程图
其中系统一直在死循环判断是否接收到一个完整的帧,通过串口中断接收数据,一旦接收完数据,那么进入程序进行相应的处理并且把数据返回到上位机,同时定时器中断也一直开着,只要到一定时间就去保存寄存器数据、读取并且显示温度,同时本系统会用数码管显示出现在在处理功能几,这样方便判断程序的执行。
第三章模块设计
第一节串口通信模块
串行通信是实现单片机与PC及通信的一种基本方式。
在本课题研究中,出
于研究的需要,我们采用串口通信实现上位机与下位机之间的通信。
同时由于在
课题研究中总线上我们只挂载了一个节点,所以只采用RS-232串行通信。
在串行通信的实现中,我采用了串口通信工作在方式一,波特率位9600的方案。
在串行通信过程中必然涉及寄存器以及定时器的配置。
TMOD(定时器寄存器)
GATEC/T*M1M0GATEC/T*M1M0
T1方式字段T0方式字段
TMOD|=0X20即定时器T1工作在方式2(自动重装的8位定时器)。
SCON(串行口控制寄存器)
SM0SM1SM2RENTB8RB8TIRI
SCON=0X50即串行口工作方式一(8位UART,波特率可变)。
由于单片机需要对数据帧进行处理,而处理数据帧所需要的时间相对比较长,
为了提高单片机的效率,在串行通信时,应该采用中断方式接受数据帧。
一般而
言,中断函数应该尽可能的简单。
所以中断函数只负责接受数据帧,而对于接收
上网数据帧的处理则放在主函数里。
第二节数据帧处理模块
数据帧处理是整个系统的核心部分,在现场总线技术中有着至关重要的作用。
所以要好好读懂理解Modbus的各个功能对应的帧格式,理解其含义和本质,然后才能找到对应信息去对其相应的处理。
根据ModBus协议,其ASCII模式数据帧格式如下:
开始
地址
功能
数据
纵向冗余检查
结束
1字符
:
2字符
2字符
n字符
2字符
2字符
编码系统:
16进制,ASCII字符0-9,A-F
起始符位“:
”,终止符为0X0D,0X0A;
在数据帧处理过程中,首先判断数据帧是否完整,然后判断是不是发给本从机。
对完整数据帧进行LRC校验,LRC校验正确的帧执行下面的处理步骤,否则丢弃该帧,并通知上位机重发数据。
帧处理的前提除了LRC校验正确,还需要确保地址位正确。
在前提条件满足的情况下才能提取功能位和数据位。
根据功能位确保要执行的功能。
并执行相关功能。
在具体功能中提取实现功能所需的数据位。
然后上位机对发回来的帧进行处理,判断对应的处理是否正确。
图3.2为数据帧处理流程图
图3.2数据帧处理流程图
第三节参数保存模块
在本系统中,为信息安全,我们需要增加参数的保存模块,让掉电后数据能保存起来,下次开机的时候能读出来。
保存修改的参数可以使之能够较好的适应各种环境的测量。
我们可以设置报警的上下限,测量的上下限。
由于需要保存的参数较少,我直接使用片内的EEPROM来保存修改的参数。
EEPROM可以用于保存一些选哟在应用过程中修改并前掉电不丢失的参数数据
ISP/IAP数据寄存器ISP_DATA:
ISP/IAP操作时的数据寄存器,ISP/IAP从
Flash读出数据放在此处,向Flash写的数据也放在此处。
ISP/IAP地址寄存器ISP_ADDRH和ISP_ADDRL:
用于存放EEPROM要寻址的地址,复位后为0000H。
ISP/IAP命令寄存器ISP_CMD:
用于选择EEPROM的模式。
ISP/IAP命令触发寄存器ISP_TRIG:
操作时的命令触发寄存器。
在ISPEN
(ISP_CONTR.7)=1时,对ISP_TRIG先写入46好,在写入B9h,ISP/IAP命
令才会生效。
每次ISP/IAP操作前。
都要对ISP_TRIG先写入46好,在写入B9h,
ISP/IAP命令才会生效。
ISP/IAP命令寄存器ISP_CONTR:
用于配置ISP/IAP。
建议:
由于扇区擦除一次是一个扇区,所以同一次修改的数据放在一个扇区,
不同次修改的数据放在不同的扇区较好。
(每个扇区512字节)。
特别得注意的是在修改扇区内容时,无法覆盖。
只有扇区擦除才能把原来的
“0”修改为“1”。
第四节液晶显示模块
本系统为了方便现场观察数据和调试,加上了液晶显示。
这里液晶采用Nokia5110。
Nokia5110是一款经典机型,可能由于经典的缘故,旧机器很多,所以很多电子工程师就把旧机器的屏幕拆下来,自己驱动Nokia5110,用于开发的设备显示,取代LCD1602。
通过取字幕软件可以提取汉字、字母、图形的编码,然后通过5110显示。
本系统主要用液晶实时显示线圈状态和寄存器的值,很直观。
该模块具有以下特点:
●84x48的点阵LCD,可以显示4行汉字,
●采用串行接口与主处理器进行通信,接口信号线数量大幅度减少,包括电源和地在内的信号线仅有9条。
支持多种串行通信协议(如AVR单片机的SPI、MCS51的串口模式0等),传输速率高达4Mbps,可全速写入显示数据,无等待时间。
●可通过导电胶连接模块与印制版,而不用连接电缆,用模块上的金属钩可将模块固定到印制板上,因而非常便于安装和更换。
●LCD控制器/驱动器芯片已绑定到LCD晶片上,模块的体积很小。
●采用低电压供电,正常显示时的工作电流在200μA以下,且具有掉电模式。
图3.4液晶引脚图
图3.5液晶指令表
命令字符解释:
图3.6命令字符解释
要注意的是“功能设置”命令的“H”和“V”。
H=0使用基本指令集命令,H=1使用扩展指令集命令。
V=0水平寻址,V=1垂直寻址。
第五节DS18B20温度采集模块
本系统主要利用Modbus总线来实现温度的报警功能,这里温度的测量使用了DS18B20温度传感器。
温度传感器的种类众多,在应用与高精度、高可靠性的场合时DALLAS(达拉斯)公司生产的DS18B20温度传感器当仁不让。
超小的体积,超低的硬件开消,抗干扰能力强,精度高,附加功能强,使得DS18B20更受欢迎。
一、DS18B20的主要特征:
(1)全数字温度转换及输出。
(2)先进的单总线数据通信。
(3)最高12位分辨率,精度可达土0.5摄氏度。
(4)12位分辨率时的最大工作周期为750毫秒。
(5)可选择寄生工作方式。
(6)检测温度范围为–55°C~+125°C(–67°F~+257°F)
(7)内置EEPROM,限温报警功能。
(8)64位光刻ROM,内置产品序列号,方便多机挂接。
(9)多样封装形式,适应不同硬件系统。
二、DS18B20引脚功能:
·GND电压地·DQ单数据总线·VDD电源电压
三、特点
独特的一线接口,只需要一条口线通信多点能力,简化了分布式温度传感应用无需外部元件可用数据总线供电,电压范围为3.0V至5.5V无需备用电源测量温度范围为-55°C至+125℃。
华氏相当于是-67°F到257华氏度-10°C至+85°C范围内精度为±0.5°C。
温度传感器可编程的分辨率为9~12位温度转换为12位数字格式最大值为750毫秒用户可定义的非易失性温度报警设置应用范围包括恒温控制,工业系统,消费电子产品温度计,或任何热敏感系统。
描述该DS18B20的数字温度计提供9至12位(可编程设备温度读数。
信息被发送到/从DS18B20通过1线接口,所以中央微处理器与DS18B20只有一个一条口线连接。
为读写以及温度转换可以从数据线本身获得能量,不需要外接电源。
因为每一个DS18B20的包含一个独特的序号,多个ds18b20s可以同时存在于一条总线。
这使得温度传感器放置在许多不同的地方。
它的用途很多,包括空调环境控制,感测建筑物内温设备或机器,并进行过程监测和控制。
四、温度计算
1、Ds1820用9位存贮温值度最高位为符号位下图为18b20的温度存储方式负温度S=1正温度S=0如
00AAH为+85,0032H为25FF92H为-55
2、Ds18b20用12位存贮温值度最高位为符号位下图为18b20的温度存储方式负温度S=1正温度S=0如
0550H为+850191H为25.0625,FC90H为-55
五、时序
主机使用时间隙(timeslots)来读写DSl820的数据位和写命令字的位。
第四章系统调试
第一节硬件调试
本系统用老师发的板子,自己按照原理图焊接了板子,这个由于都是现成的材料,所以也没有什么难度,自己以前也做过很多东西,所以很快就焊接好,经测试没有问题,下面就进行软件的编写了。
第二节软件件调试
一、调试平台
软件调试也是此系统最关键的一步了,也是有难度的一步。
本系统采用Keil软件编写程序,调试,如图4.2。
图4.2调试平台
二、调试问题
1、关于工程的建立:
.C、.h文件的处理。
在程序编译中会遇到不少关于这个的问题,其中有一些包含的问题,变量定义的问题,函数同名的问题,数据类型重定义的问题,不过经过查找资料,咨询有经验的同学都一个一个解决了这个问题。
2、关于具体函数的问题:
这都怪自己C语言功底还不够扎实,会出现一些有关语法、函数的问题,所以这也提醒我去把知识学扎实,学深入。
3、关于串口:
自己写的程序发送少了一个字符,所以老是出问题,通过用软件调试发现了这个问题,并且改掉了。
4、LRC校验出了问题:
我当时对LRC理解的错误,我是用ASIIC码相加得到了结果,正确的应该是把ASIIC码转换为16进制的值相加取反在加1。
5、关于EEPROM:
这时第一次用EEPROM功能,所以调试中也遇到不少问题,有的寄存器设置出错。
6、调试中的协议问题:
有的时候对帧的处理出了问题,所以这个也比较头疼,经过对帧的理解,一步步解决所有问题。
7、程序中判断一个帧是否接受完的方法不是很好,我是通过接收的个数去判断的,后来发现这样不够稳定,所以我又改成通过判断一个帧结尾的0X0D、0X0A来判断。
三、调试结果
1.硬件调试
在对硬件和软件综合调试后,经标准上位机验证,基本满足课题要求。
可以实现读写线圈和寄存器的功能,同时参数的储存也可以达到要求,还可以去实时显示线圈的状态和寄存器的值。
图4.3.1开机画面
图4.3.2系统运行时的照片
其中第一行显示的是8个线圈的状态,第二行显示的是测量上限,第三行显示的是测量下限,第四行显示的是报警上限,第五行显示的是报警下限,第六行显示的是实时的温度值。
2、软件调试截图
功能1:
读线圈
功能3:
读寄存器
功能5:
写单个线圈
功能6:
写单个寄存器
功能15:
写多个线圈
功能16:
写多个寄存器
第五章心得体会
通过此次课程设计,我更进一步地熟悉了单片机的结构及掌握了单片机的工作原理和其具体的使用方法,了解了单片机程序设计与特点,同时也更加深入的掌握了51系列单片机的相关知识。
并且我懂得了单片机程序设计的基本思路,增强了实践动手能力。
除此以外,我还深深地认识到严谨、认真的科学态度在科
学实验中发挥的重要作用。
对于这次课设,我是把它当做一个项目来做,所以一开始就抱着很负责很严谨的态度去面对。
这也是我在大学以来第一次去用51单片机去调试一个关于串口的协议,也是算我亲自写的最长的程序了,所以很有感慨。
将一个复杂的工程分成若干个基本模块进行分步设计和测试,最后将这些模块连接起来是本实验基本的设计思想。
从老师刚布置这个题目,感觉这个好难啊,从来没有接触过啊,到自己亲手去查资料,去写成程序,去一步一步解决问题,去实现基本功能,去实现附加功能,感觉自己成长了不少。
一个东西刚开始接触可能会觉的有难度,但是自己亲手认真去作,一个一个解决问题,到最后会发现其实这个大的难题也没有什么。
这次我学到的最多的不是单片机知识,不是Modbus协议,是这种过程,这种态度,这种方法,和这种感觉。
同样自己还有很多方面的不足有待于改善,所以,我要更加的努力去学习,更加静下心去完善自己。
参考文献
[1]张友德,赵志英,涂时亮.单片微型机原理、应用与实验(第五版).复旦
大学出版社,2006.
[2]朱大奇,邬勤文,袁芳.单片机原理、应用与实验.科学出版社,2009.
[3]李朝青.单片机原理及接口技术.北京航空航天大学出版社,2005.
[4]张凤登.现场总线技术及应用.科学出版社,2008.
附录
一、硬件部分原理图
二、部分程序代码
#include"main.h"
#include"intrins.h"
#include"nokia_5110.h"
#include"ds18b20.h"
#include"EEPROM.h"
uint8sendBuf_124[35],receBuf_124[35];//发送接收缓冲区
uint16reg_124[5];//寄存器
uint16wendu_124;//温度值
unsignedintzhengshu_124,xiaoshu_124;
chartemperature_124[]=".";
uint8codetable_124[]=//数码管码
{
0xc0,0xf9,0xa4,0xb0,
0x99,0x92,0x82,0xf8,
0x80,0x90,0x88,0x83,
0xc6,0xa1,0x86,0x8e};
uint8receTimeOut_124;//接收超时
bitf1ms_124=0,f10ms_124=0,f100ms_124=0;//定时标志位
uint8c10ms_124,c100ms_124;//定时计数
voidcommIntProc_124()interrupt4//串行中断程序
{
if(TI)
{
TI=0;
if(sendPosi_124 { sendPosi_124++; SBUF=sendBuf_124[sendPosi_124]; } else { receTimeOut_124=10; b232Send_124=1;//发送完后将232置于接收状态 receCount_124=0;//清接收地址偏移寄存器 //checkoutError=0; } } elseif(RI) { RI=0; //receTimeOut=10;//通讯超时值 receBuf_124[receCount_124]=SBUF; receCount_124++;//接收地址偏移寄存器加1 if((receBuf_124[receCount_124-1]==0x0A)&&(receBuf_124[receCount_124-2]==0x0D)) { flag=1; } } } //定时器01ms中断 voidtimer0IntProc()interrupt1 { TH0=(65536-18432)/256; TL0=(65536-18432)%256; f1ms_124=1; c10ms_124++; if(c10ms_124>=10) { c10ms_124=0;//10ms计时器清零 f10ms_124=1; } }//voidTimer0IntProc() voidsave_124(void)//保存掉电寄存器数据 { uint8tempdata_124; tempdata_1
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 modbus 单片机 课程设计