单片机原理与应用课程论文
单片机原理与应用课程论文
指导老师:
授课班号:
姓 名:
学 号:
摘要
单片机以其高可靠性、高性价比、低电压、低功耗等一系列优点,近几年得到迅猛发展和大范围推广,广泛应用于工业控制系统,数据采集系统、智能化仪器仪表,及通讯设备、日常消费类产品、玩具等。并且已经深入到工业生产的各个环节以及人民生活的各层次中,如车间流水线控制、自动化系统等、智能型家用电器等。
Modbus 协议是应用于电子控制器上的一种通用语言。通过此协议,控制器相互之间、控制器经由网络(例如以太网)和其它设备之间可以通信。标准的Modbus口是使用一RS-232C兼容串行接口,它定义了连接口的针脚、电缆、信号位、传输波特率、奇偶校验。当控制器在Modbus网络上以ASCII模式通信,在消息中的每个8Bit字节都作为两个ASCII字符发送。这种方式的主要优点是字符发送的时间间隔可达到1秒而不产生错误。
本次任务的内容是用ASCII模式在单片机上实现Modbus协议部分内容(1,5,15,3,6,16)。
关键字:单片机 modbus ASCII
需求分析
Modbus 协议是应用于电子控制器上的一种通用语言。通过此协议,控制器相互之间、控制器经由网络(例如以太网)和其它设备之间可以通信。它已经成为一通用工业标准。有了它,不同厂商生产的控制设备可以连成工业网络,进行集中监控。此协议定义了一个控制器能认识使用的消息结构,而不管它们是经过何种网络进行通信的。它描述了一控制器请求访问其它设备的过程,如果回应来自其它设备的请求,以及怎样侦测错误并记录。它制定了消息域格局和内容的公共格式。当在一Modbus网络上通信时,此协议决定了每个控制器须要知道它们的设备地址,识别按地址发来的消息,决定要产生何种行动。如果需要回应,控制器将生成反馈信息并用Modbus协议发出。在其它网络上,包含了Modbus协议的消息转换为在此网络上使用的帧或包结构。这种转换也扩展了根据具体的网络解决节地址、路由路径及错误检测的方法。
全国工业过程测量和控制标准化技术委员会(SAC/TC124)于2008年4月9日上午,在北京钓鱼台国宾馆举行了国家标准GB/T 19582-2008基于Modbus协议的工业自动化网络规范发布会。会中隆重宣布GB/Z 19582基于
Modbus协议的工业自动化网络规范指导性文件正式成为国家标准GB/T 19582-2008,Modbus正式成为工业通讯领域现场总线技术国家标准。
Modbus在工业上的应用本身就是很成熟的,虽然速率较低,但基本够用,想要彻底淘汰也是比较难的一件事,需求量也是很大的。
系统设计
一.设计目标
实现Modbus协议部分内容
用ASCII模式完成以上功能是本设计的基本要求。
二.方案的确定
通过对modbus协议的仔细阅读大致了解整个程序的设计方向和模块划分,确定基本功能模块。
1、 在Modbus网络上转输 标准的Modbus口是使用一RS-232C兼容串行接
口,它定义了连接口的针脚、电缆、信号位、传输波特率、奇偶校验。控制器能直接或经由Modem组网。控制器通信使用主-从技术,即仅一设备(主设备)能初始化传输(查询)。其它设备(从设备)根据主设备查询提供的数据做出相应反应。典型的主设备:主机和可编程仪表。典型
的从设备:可编程控制器。主设备可单独和从设备通信,也能以广播方式和所有从设备通信。如果单独通信,从设备返回一消息作为回应,如果是以广播方式查询的,则不作任何回应。Modbus协议建立了主设备查询的格式:设备(或广播)地址、功能代码、所有要发送的数据、一错误检测域。从设备回应消息也由Modbus协议构成,包括确认要行动的域、任何要返回的数据、和一错误检测域。如果在消息接收过程中发生一错误,或从设备不能执行其命令,从设备将建立一错误消息并把它作为回应发送出去。
2、在其它类型网络上转输 在其它网络上,控制器使用对等技术通信,故任何控制都能初始和其它控制器的通信。这样在单独的通信过程中,控制器既可作为主设备也可作为从设备。提供的多个内部通道可允许同时发生的传输进程。在消息位,Modbus协议仍提供了主-从原则,尽管网络通信方法是"对等"。如果一控制器发送一消息,它只是作为主设备并期望从设备得到回应。同样,当控制器接收到一消息,它将建立一从设备回应格式并返回给发送的控制器。
3、查询-回应周期
(1)查询 查询消息中的功能代码告之被选中的从设备要执行何种功能。数据段包含了从设备要执行功能的任何附加信息。例如功能代码03是要求从设备读保持寄存器并返回它们的内容。数据段必须包含要告之从设备的信息:从何寄存器开始读及要读的寄存器数量。错误检测域为从设备提供了一种验证消息内容是否正确的方法。
(2)回应 如果从设备产生一正常的回应,在回应消息中的功能代码是在查询消息中的功能代码的回应。数据段包括了从设备收集的数据:象寄存器值或状态。如果有错误发生,功能代码将被修改以用于指出回应消息是错误的,同时数据段包含了描述此错误信息的代码。错误检测域允许主设备确认消息内容是否可用。
二、两种传输方式 控制器能设置为两种传输模式(ASCII或RTU)中的任何一种在标准的Modbus网络通信。用户选择想要的模式,包括串口通信参数(波特率、校验方式等),在配置每个控制器的时候,在一个Modbus网络上的所有设备都必须选择相同的传输模式和串口参数。
1.ASCII模式地址 功能代码 数据数量 数据1 .. 数据n LRC高字节 LRC低字节 回车 换行
2.RTU模式地址 功能代码 数据数量 数据1 ... 数据n CRC高字节 CRC低字节 所选的ASCII或RTU方式仅适用于标准的Modbus网络,它定义了在
这些网络上连续传输的消息段的每一位,以及决定怎样将信息打包成消息域和如何解码。
三、Modbus消息帧 两种传输模式中(ASCII或RTU),传输设备以将Modbus消息转为有起点和终点的帧,这就允许接收的设备在消息起始处开始工作,读地址分配信息,判断哪一个设备被选中(广播方式则传给所有设备),判知何时信息已完成。部分的消息也能侦测到并且错误能设置为返回结果。
ASCII帧:使用ASCII模式,消息以冒号(:)字符(ASCII码 3AH)开始,以回车换行符结束(ASCII码 0DH,0AH)。其它域可以使用的传输字符是十六进制的0...9,A...F。网络上的设备不断侦测":"字符,当有一个冒号接收到时,每个设备都解码下个域(地址域)来判断是否发给自己的。消息中字符间发送的时间间隔最长不能超过1秒,否则接收的设备将认为传输错误。
代码系统
十六进制,ASCII字符0...9,A...F
消息中的每个ASCII字符都是一个十六进制字符组成 每个字节的位
1个起始位;7个数据位,最小的有效位先发送 1个奇偶校验位,无校验则无 1个停止位(有校验时) 错误检测域
LRC(纵向冗长检测)
1.16进制与ASCII码转换模块 2.Lrc校验模块 3.中断模块 4.发送模块 5.读线圈模块 6.写线圈模块 7.写多个线圈模块 8.读寄存器模块 9.写寄存器模块
10.写多个寄存器模块 11.主函数
详细设计
一. 转换模块
最先编写的两个模块是ASCII码与16进制的转换模块,通过对输入值所在区间的判断经变换之后得到相对应的值。 二.LRC校验模块
LRC校验码就是对之前的16位数据求和取反得到的,用for循环累加即可(非asc码)。
三.发送及延迟模块 四.写单个线圈 与同学交流后得到 四.其他模块
通过对写单个线圈模仿可得到其余几个模块,需要注意的是返回值的区别。读线圈需要加入按键判断。
运行调试
一.调试步骤
先通过Keil编写程序,编译无误后将程序烧至单片机中,再利用mbpoll软件进行测试。
二.出现的问题与分析
1.CRC Error
因为周围的同学很多人遇到了这个问题,但是似乎又不影响测试,所以忽略不计……
2.unknown Error
这个真不知道…处理方式同上 3.关于寄存器
根据老师的解释寄存器是自己定义的,之前我是把和寄存器有关的口全部用P2.4~2.7表示,其实用什么无所谓。 4.无返回值
一般是赋值问题,偶尔会出现电脑问题,单片机问题等各种奇怪问题。
心得体会
通过这次课程设计,我对单片机和现场总线的认识上升到了一个新的高度。那些在课堂上学到的书本上的知识第一次和我们紧密联系了起来,这不仅帮助我们更好地理解了单片机和现场总线这两门课,更是让我们学会了最简单的程序编写,调试过程。
刚开始光看modbus协议没觉得什么,但是准备编写程序时才发现找不到头绪,我想还是因为基础不够扎实吧。后来参考了别人的一个功能模块,这才开始我的跨年编程之旅。这次虽然参考了别人的,虽然很多是照葫芦画瓢,但我还是从中学到了很多,别的或许过一年就忘了,但这第一个通宵我想我会永远记得,不过太冷了点…很多事看起来遥不可及,但是当你真正跨出第一步之后,你会发现其实并没那么可怕。编程最怕的是浮躁,尤其是一个小错误半天找不出来的时候,这相当锻炼人的耐心。但是只要找出来了,那种心情也是无法形容的,而我也就是在这种大喜大悲中度过了这段“黑暗”的日子。
这次课程设计是我人生中不可多得的一次经历,不管结果如何,对于我来说它都是成功的。