基于单片机的MODBUS通信接口设计资料.docx
《基于单片机的MODBUS通信接口设计资料.docx》由会员分享,可在线阅读,更多相关《基于单片机的MODBUS通信接口设计资料.docx(25页珍藏版)》请在冰豆网上搜索。
基于单片机的MODBUS通信接口设计资料
实验室
开放实验
题目:
基于DSP2407单片机的MODBUS通信接口设计
院系名称:
专业班级:
学生姓名:
学号:
指导教师:
成绩:
指导老师签名:
日期:
目录
摘要…………………………………………………………………3
1绪论………………………………………………………………4
2设计方案…………………………………………………………4
2.1方案概述……………………………………………………5
2.2方案论证……………………………………………………5
2.3MODBUS协议…………………………………………………6
3硬件电路设计……………………………………………………7
3.1最小系统电路………………………………………………7
3.2单片机电源电路……………………………………………8
3.3报警控制电路………………………………………………9
3.4通讯电路……………………………………………………10
4总体设计方案……………………………………………………11
4.1主程序设计…………………………………………………11
4.2串口中断处理设计…………………………………………12
4.3CRC计算及校验设计………………………………………13
4.4数据帧处理模块……………………………………………14
心得体会……………………………………………………………16
参考文献……………………………………………………………17
附录一部分程序代码………………………………………………18
摘要
在机械、化工、纺织等行业,随着生产规模的不断扩大,以及对生产过程集中监控的迫切要求,现场总线技术应运而生,并成为了当今测控领域研究的热点之一。
Modbus协议作为现场总线的一种,以其开发成本低,简单易用等诸多优点己被工业领域广泛接受。
信号测量作为工业中重要的测量参数之一,本课题选择了信号测量作为测量的对象,并设计了基于Modbus协议的信号测量测控节点。
本设计采用TC1047A传感器采集现场信号测量,由DSP320IF2407单片机进行AD转换和Modbus协议通讯。
通讯的物理层采用RS232接口,并增加了光电隔离、抗雷击和短路保护等功能。
最后实现了单个节点和PC机的Modbus协议通讯,并通过控制蜂鸣器和继电器来模拟工业现场控制。
本文分别从硬件和软件上阐述了该信号测量测控节点的实现方法。
[关键词]信号测量测控Modbus协议RS232DSP320IF2407
1绪论
随着计算机技术和网络技术的发展,工业参数的数字采集促进了现场总线技术的发展,目前现场总线已经从当初的4-20mA电流信号升级为数字信号,发展成为全数字通讯,解决了现场信号远距离高速传送的问题,而且提高了抗干扰性能,增加了系统配置的灵活性,节省了硬件投资,是未来生产自动化和过程控制的发展方向。
目前,较有影响的总线有:
Modbus,CAN,LonWorks,Profibus等。
采用RS485标准总线技术对现场数据进行采集、管理,相对于CAN,LonWorks,Profibus等现场总线系统而言,具有结构简易、成本低廉、硬软件支持丰富、安装方便,且与传统的DCS兼容,与现场仪表接口简单,系统实施容易等特点,因而RS485总线系统在一定时间内仍是中小控制系统的主要形式。
信号测量测控模块作为一种重要的设备,在诸多工业生产过程中得到了广泛应用。
自70年代以来,由于工业过程控制的需要,特别是微电子技术和计算机技术的迅猛发展,国外信号测量测控发展迅速,并在智能化、自适应等方面取得显著成果。
在这方面,以口本、美国、德国、瑞典等国的技术领先,生产出了很多商品化的、性能优异的信号测量测控器及仪器仪表,并在各行业广泛应用。
目前,国外信号测量测控系统及仪表正朝着高精度、智能化、小型化等方面快速发展。
基于单片机的Modbus协议产品一般由单片机芯片为核心和外围辅助逻辑元器件组成,它充分利用单片机的硬件资源和软件资源,同时合理配置特定的功能元器件来实现产品的功用,外围元器件一部分是用来实现通讯的串行接口元件,具有电平转换的功能,这使得Modbus产品具有组成工业网络的能力;另一部分是功能器件,如:
数模转化器、模数转化器、LED显示器等,能够实现很多的特定功能。
由于产品的硬件构成比较简单,性能比较稳定,功能比较强且造价比较低成为该产品的主要特点,在国内使用的Modbus产品大部分是国外产品,国内很少有独立的知识产权,这是Modbus产品在国内的现状。
本设计实现了单节点与PC机的Modbus协议的通讯,通过单片机的功能模块进行AD采集,数码管显示,蜂鸣器报警和继电器控制,通过串口以RTU帧的格式和上位机通讯,实现节点上传信号测量AD值和上位机控制节点的I/O的功能。
2设计方案
2.1方案概述
本方案采用精密信号测量电压转换器TC1047作为采集现场环境信号测量的传感器,单片机选用性价比较高的DSP320IF2407。
外部电压基准源为REF3325作为2.5V电压基准。
8位拨码开关用来设置Modbus协议节点的ID号。
RS232通讯电路实现节点和PC的Modbus通讯,并在调试时作为ISP烧录程序的接口。
RS485电路实现节点与节点之间的Modbus通讯接口。
由于节点是在工业现场进行远距离布线,所以在设计RS485总线电路时特别增加了电路抗电磁干扰和防雷电等措施。
数码管电路用来显示现场信号测量。
在现场信号测量超过设定的阈值时,蜂鸣器进行报警,并且通过控制继电器来控制阀门等现场的执行器。
单片机系统的具体框图如图2.1所示:
图2.1单片机系统框图
2.2方案论证
本设计中,通讯的物理层包括RS232电路和RS485电路两部分。
RS232主要是单节点与PC机的通讯,其通讯速率预设低于9600b/s,距离小于15米,适用于户内布线,电磁干扰较小,所以采用DB-9连接器及MAX232电压转换电路即可实现其稳定工作。
RS485电路适用于节点之间的通讯,其通讯速率预设低于1Mb/s,距离小于1000米,适用于户外布线,这就存在雷击、浪涌等电磁干扰,有时还会出现RS485信号线与电力线短路的情况,所以在设计RS485电路时,要求有抗雷击、抗浪涌冲击以及过压保护等功能。
在设计硬件电路时,本人查阅了相关技术文档,并经过论证,最后确定采用瞬变电压抑制二极管、自恢复保险丝以及钳位电路等来实现上述功能。
具体电路见后面章节详细介绍。
由于本通讯采用了Modbus协议及CRC校验,可以保证数据链路层和应用层数据传输的可靠性。
2.3MODBUS协议
2.31MODBUS概述
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的帧格式简单、紧凑,通俗易懂。
用户使用容易,厂商开发简单。
2.32MODBUS通信协议
控制器通信使用主—从技术,即仅一设备(主设备)能初始化传输(查询)。
其它设备(从设备)根据主设备查询提供的数据作出相应反应。
典型的主设备:
主机和可编程仪表。
典型的从设备:
可编程控制器。
主设备可单独和从设备通信,也能以广播方式和所有从设备通信。
如果单独通信,从设备返回一消息作为回应,如果是以广播方式查询的,则不作任何回应。
Modbus协议建立了主设备查询的格式:
设备(或广播)地址、功能代码、所有要发送的数据、一错误检测域。
从设备回应消息也由Modbus协议构成,包括确认要行动的域、任何要返回的数据、和错误检测域。
如果在消息接收过程中发生错误,或从设备不能执行其命令,从设备将建立错误消息并把它作为回应发送出去。
控制器能设置为两种传输模式(ASCII或RTU)中的任何一种在标准的Modbus网络通信。
用户选择想要的模式,包括串口通信参数(波特率、校验方式等),在配置每个控制器的时候,在一个Modbus网络上的所有设备都必须选择相同的传输模式和串口参数。
3硬件电路设计
3.1.最小系统电路
DSP320IF2407系列单片机是宏晶科技生产的单时钟的单片机,是高速、低功耗、超强抗干扰的新一代8051单片机,指令代码完全兼容传统8051。
其内部集成MAX810专用复位电路,2路PWM,8路高速10位AD转换,工作电压5.5V至3.3V,工作频率范围0至35MHz,通用I/O口44个,复位后为准双向口/弱上拉,可设置成准双向口/弱上拉,推挽/强上拉,仅为输入/高阻,开漏每个I/O口驱动能力可达到20mA,但整个芯片最大不超过55mA,有看门狗功能,有8路10位精度ADC,转换速度可达250K/S,内部有60K字节的Flash程序存储器。
选用DSP320IF2407单片机完全可以满足本设计需求。
单片机最小系统如图3.1所示:
图3.1单片机最小系统
3.2单片机电源电路
为了给单片机系统提供稳定可靠的电源,本设计采用国半公司的LM22680系列稳压器电路。
LM22680提供了作为降压开关稳压器应有的一切有源功能,具有优良的线性与负载调节特性,可以驱动电流高达2A的负载。
其通过使用一个低导通电阻的N沟道金属氧化物半导体场效应管获得超过90%的高效率,并提供了一种简易的整体设计手段,可将使用的外部元器件减少到最低限度。
开关时钟频率由内部工作在500kHz固定频率的振荡器提供,也可以通过一个外部电阻进行调节,或者与高达1MHz的外部时钟同步,另外也可以设置让多个稳压器自同步,工作在同一开关频率。
LM22680系列产品具有内置热关断和限流功能,而且有一个使能控制输入端,可使稳压器休眠至静态电流为25微安的待机状态。
通过选择合适的外部软启动电容器可实现可调软启动特性。
LM22680的其它主要特征如下:
(1)宽广的输入电压范围:
4.5V至42V
(2)低等效串联阻抗的陶瓷电容器即可稳定工作
(3)输出电压可调,输出低至1.285V
(4)±1.5%反馈参考精度
(5)500kHz的开关频率,且在200kHz至1MHz之间可调
(6)工作结点信号测量范围为-40°C至125°C
对于LM22680_ADJ,输出电压应该直接连到FB引脚上,不需要电阻分压器就可实现1.285V的输出电压,其它输出电压可以利用一个电阻分压器实现。
官方推荐电阻R1和R2之和的最大值不超过10kΩ,以保证高输出电压的精确度。
在本电源电路中采用510Ω和1.5KΩ,输出5.06V电压。
单片机系统电源电路如图3.2所示:
图3.2单片机系统电源电路
3.3报警控制电路
信号测量测控节点的设计不仅要对现场信号测量进行数据上传,还要对现场进行简单的报警和控制,如当信号测量达到预设的阈值时,蜂鸣器要进行报警,以提示现场人员,并通过控制继电器,实现对现场的设备进行简单的控制。
蜂鸣器是一种采用直流电压供电的电子讯响器,主要分为压电式与电磁式两种类型。
压电式蜂鸣器主要由多谐振荡器、压电蜂鸣片、阻抗匹配器及共鸣箱、外壳等组成。
多谐振荡器由晶体管或集成电路构成,当接通电源后,多谐振荡器起振,输出1.5kHZ至2.5kHZ的音频信号,阻抗匹配器推动压电蜂鸣片发声。
电磁式蜂鸣器由振荡器、电磁线圈、磁铁、振动膜片及外壳等组成,当接通电源后,振荡器产生的音频信号电流通过电磁线圈,使电磁线圈产生磁场。
振动膜片在电磁线圈和磁铁的相互作用下,周期性的振动发声。
本系统的设计采用电磁式蜂鸣器,通过DSP320IF2407单片机的I/O口进行控制,P1.3口具有PWM输出功能,可以进行频率的设置,从而让蜂鸣器发出不同频率的声音,蜂鸣器报警电路如图3.3所示:
图3.3蜂鸣器报警电路
3.4通讯电路
为实现现场组网控制和方便上位机完成现场数据采集和各种控制任务,该设计提供了两种通信接口:
RS485接口和RS232接口。
RS232主要用来实现一对一的通信方式,即信号测量测控节点和上位机的通讯,而RS485则可用来完成节点组网通信。
其中RS232通讯电路采用MAX232芯片,它是专门为电脑的RS232标准串口设计的单电源电平转换芯片,使用+5v单电源供电。
具体RS232通讯电路如图3.4所示:
图3.4RS232通讯电路
4总体设计方案
4.1主程序设计
基于Modbus信号测量测控节点的程序设计要实现五大功能:
第一,主机和从机之间串口通讯功能;第二,要完成命令报文的解析和信息提取功能;第三,实现MODBUS协议规定的主要的读、写功能;第四,实现在通讯过程中循环冗余检测功能;第五,单片机采集信号测量;第六,数码管显示信号测量功能。
在信号测量检测中,选用单片机ADC通道1,配置转换精度为8位,速度为420个时钟周期。
由于信号测量的变化速率较慢,为了节约CPU资源,采用前后台操作,在后台中每隔100ms进行一次AD采集。
在实际的调试当中发现单片机刚上电或复位时,AD刚开始采集的数值是错误的,在本设计中采取的方法是丢弃前50次采集的AD值,这样可以保证第一次拿到的AD值是正确的,从而不会出现因复位而误报的情况。
并且结合热敏电阻变化特性及实际环境信号测量变化的情况,本设计采用了5个队列深度的均值滤波,以减小误差。
节点软件设计的重点有:
CRC校验,MODBUS协议功能实现,AD采集程序程序,串口初始化及中断处理程序,定时器中断处理程序,单片机执行程序。
软件设计选用的编译环境为经典的KeiluVision2IDE。
其中C语言具有丰富的库函数,具有程序编写简单,可读性强,维护性好,也具有直接对硬件进行操作的特点,生成目标代码的质量高,且有较好的可移植性,所以选用C语言进行编程。
图4.1为主函数程序流程图:
图4.1主函数程序流程图
4.2串口中断处理设计
单片机与外界通讯主要通过串口,无论是接收还是发送消息,都是经过串口来实现,在执行通讯任务时必须进行串口的初始化,初始化程序设计主要是波特率的设计,在串行通信中,收发双方的波特率必须一致。
51单片机串口可有4种工作方式,在本设计中设定串口为工作方式1为8位异步收发,波特率由T0的溢出率和SMOD的值共同确定。
根据晶振频率为11.0592MHz,波特率为4800b/s,SMOD为1时,定时器1的初值为F4H。
串口中断处理程序流程图如下4.2所示:
图4.2串口中断处理程序流程图
4.3CRC计算及校验设计
循环冗余校验(CRC)域为两个字节,包含一个二进制16位值。
附加在报文后面的CRC的值由发送设备计算。
接收设备在接收报文时重新计算CRC的值,并将计算结果于实际接收到的CRC值相比较。
如果两个值不相等,则为错误。
CRC的计算,开始对一个16位寄存器预装全1。
然后将报文中的连续的8位子节对其进行后续的计算。
只有字符中的8个数据位参与生成CRC的运算,起始位,停止位和校验位不参与CRC计算。
CRC的生成过程中,每个8位字符与寄存器中的值异或。
然后结果向最低有效位方向移动1位,而最高有效位位置充零。
然后提取并检查LSB:
如果LSB为1,则寄存器中的值与一个固定的预置值异或;如果LSB为0,则不进行异或操作。
这个过程将重复直到执行完8次移位。
完成最后一次(第8次)移位及相关操作后,下一个8位字节与寄存器的当前值异或,然后又同上面描述过的一样重复8次。
当所有报文中子节都运算之后得到的寄存器中的最终值,就是CRC值。
图4.3为CRC计算及校验程序流程图:
图4.3CRC计算及校验流程图
4.4数据帧处理模块
数据帧处理是整个系统的核心部分,在现场总线技术中有着至关重要的作用。
所以要好好读懂理解Modbus的各个功能对应的帧格式,理解其含义和本质,然后才能找到对应信息去对其相应的处理。
根据ModBus协议,其ASCII模式数据帧格式如表4.4所示
表4.4ASCII模式数据帧
开始
地址
功能
数据
纵向冗余检查
结束
1字符
2字符
2字符
n字符
2字符
2字符
编码系统:
16进制,ASCII字符0-9,A-F
起始符位“:
”,终止符为0X0D,0X0A;
在数据帧处理过程中,首先判断数据帧是否完整,然后判断是不是发给本从机。
对完整数据帧进行LRC校验,LRC校验正确的帧执行下面的处理步骤,否则丢弃该帧,并通知上位机重发数据。
帧处理的前提除了LRC校验正确,还需要确保地址位正确。
在前提条件满足的情况下才能提取功能位和数据位。
根据功能位确保要执行的功能。
并执行相关功能。
在具体功能中提取实现功能所需的数据位。
然后上位机对发回来的帧进行处理,判断对应的处理是否正确。
图4.5为数据帧处理流程图:
图4.5数据帧处理流程图
心得体会
通过此次课程设计,我更进一步地熟悉了单片机的结构及掌握了单片机的工作原理和其具体的使用方法,了解了单片机程序设计与特点,同时也更加深入的掌握了52系列单片机的相关知识。
并且我懂得了单片机程序设计的基本思路,增强了实践动手能力。
除此以外,我还深深地认识到严谨、认真的科学态度在科学实验中发挥的重要作用。
对于这次课设,我是把它当做一个项目来做,所以一开始就抱着很负责很严谨的态度去面对。
这也是我在大学以来第一次去用52单片机去调试一个关于串口的协议,也是算我亲自写的最长的程序了,所以很有感慨。
将一个复杂的工程分成若干个基本模块进行分步设计和测试,最后将这些模块连接起来是本实验基本的设计思想。
从老师刚布置这个题目,感觉这个好难啊,从来没有接触过啊,到自己亲手去查资料,去写成程序,去一步一步解决问题,去实现基本功能,去实现附加功能,感觉自己成长了不少。
一个东西刚开始接触可能会觉的有难度,但是自己亲手认真去作,一个一个解决问题,到最后会发现其实这个大的难题也没有什么。
这次我学到的最多的不是单片机知识,不是Modbus协议,是这种过程,这种态度,这种方法,和这种感觉。
同样自己还有很多方面的不足有待于改善,所以,我要更加的努力去学习,更加静下心去完善自己。
参考文献
[1]张友德,赵志英,涂时亮.单片微型机原理、应用与实验(第五版).复旦大学出版社,2006.
[2]朱大奇,邬勤文,袁芳.单片机原理、应用与实验.科学出版社,2009.
[3]李朝青.单片机原理及接口技术.北京航空航天大学出版社,2005.
[4]张凤登.现场总线技术及应用.科学出版社,2008.
[5]何立民.单片机应用技术选编[M].北京:
北京航空大学出版社,1998.
[6]常健生.检测与转换技术[M].北京:
机械工业出版社,1997.
[7]凌志浩.智能仪表原理与设计技术[M].上海:
华东理工大学出版,2003.
[8]谭浩强.C程序设计(第三版)[M].北京:
清华大学出版社,2005.
[9]康华光.电子技术基础(模拟部分)[M].北京:
高等教育出版社,1987.
附录一部分程序代码
#include
#include"crc16.h"
#defineLedPortP0//段选段P0
#defineLedCtrlP2//位选段P2
#defineHIG_BJ210
typedefstruct
{
unsignedcharstate;
unsignedcharbuf[15];
unsignedcharRecCunt;
unsignedcharSendCunt;
unsignedcharTimerCunt;
}RECBUF;
RECBUFRecBuf;//
unsignedcharMAddr;//Modbus节点地址
sbitJDQ=P2^1;
sbitSPEAK=P2^0;
//数码管段码显示:
0~f,不亮
unsignedcharcodeLED_Disp[]={0x03,0x9f,0x25,0x0d,0x99,0x49,0x41,0x1f,0x01,0x09,
0x11,0x63,0x61,0x71,0x91};
unsignedcharLED_value;//数码管显示值
unsignedcharDisBuff[4];
unsignedcharAD1_Res;//AD1转换结果
unsignedcharAD_buf[5];//AD1转换结果缓冲区
unsignedcharAD_value;//滤波后的AD值
unsignedcharold_AD_value;//上次的AD值
unsignedcharT_value;//信号测量值
unsignedcharBJnum;//报警次数
unsignedcharPC_Ctrl;
unsignedcharJD_Ctrl;
unsignedcharmaxADvalue;//最大AD值
unsignedcharminADvalue;//最小AD值
unsignedcharnowstatus;//当前状态
unsignedcharoldstatus;//上次状态
unsignedinttimer05scount;
unsignedchartimer05sok;
unsignedinttimer005scount;
unsignedchartimer005sok;
unsignedinttimer001scount;
unsignedchartimer001sok;
/************************************
功能:
延时的函