QES041-2011通讯从机程序设计规范-20110426.doc_第1页
QES041-2011通讯从机程序设计规范-20110426.doc_第2页
QES041-2011通讯从机程序设计规范-20110426.doc_第3页
QES041-2011通讯从机程序设计规范-20110426.doc_第4页
QES041-2011通讯从机程序设计规范-20110426.doc_第5页
已阅读5页,还剩3页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

Q/ES041-2011ICS: 备案号: Q/ES 深圳市XXXXXXXXXX企业标准Q/ES041-2011通讯从机程序设计规范2011-05-18发布 2011-06-01实施深圳市xxxxxx有限公司发布目 录前 言21 目的32 范围33从机分类34程序设计34.1模块化程序框架34.2数据定义34.2.1收发缓冲区及控制变量34.2.2串口状态控制变量44.3串口收发控制44.3.1数据接收44.3.2数据发送54.3.3 发送完成计时54.3.4接收超时计时65 协议模块65.1协议接口65.2协议实现与调度66 通讯测试要求7前 言历次修订说明版本V1.0,2011年04月26日,首次制订发行。本标准由深圳市xxxxxxx有限公司提出。本标准由深圳市深圳市xxxxxxx有限公司归口。本标准起草单位:深圳市深圳市xxxxxx有限公司。本标准起草人: 本标准于2011年04月首次发布。通讯从机程序设计规范1 目的统一本公司软件开发人员在设备通讯编程时的编程实现。2 范围适用于公司所有产品的软件源程序。3从机分类串行通讯的从机根据硬件电路不同分为:RS232方式RS485方式4程序设计4.1模块化程序框架通过标准化的协议接口和收发缓冲区及通讯控制变量,把串口收发中断和协议进行有效隔离。串口中断程序负责芯片物理寄存器到内存缓冲区的数据传递;协议负责接收帧的识别,接收帧的数据分析,应答帧的组织。通过协议接口标准化,在开发阶段中断程序模块和协议程序模块可以独立编程;在运行时中断程序及通讯响应程序通过对接口的调用使协议模块得到运行。收发缓冲区(内存)系统信息或任务(全局变量)芯片物理端口(寄存器)协议程序中断程序在协议中要注意控制接收帧数据分析程序的独立性,不能把命令的执行放在解析程序中进行,应把解析出来的命令或事件放在全局变量中,交由后续的监控任务或事件处理任务来执行处理。4.2数据定义串口中断和协议之间通过一组全局变量进行交互, 全局变量定义在一个公共模块中,其命名遵循了。需要的全局变量分为两类:收发缓冲区及控制变量和串口状态控制变量。4.2.1收发缓冲区及控制变量gauartx_rx_data: 接收缓冲区 gauartx_recive_count: 接收字节总数 gauartx_tx_data: 发送缓冲区 gauartx_send_count: 待发送字节总数 gauartx_send_indx: 要发送的缓冲区偏移指针说明:变量名称中的uartx用于区分多个串口,如串口1: gauart1_recive_size;对于单工的问答型通讯模式的串口来说,可以直接使用接收缓冲区作为发送缓冲区,以节省内存空间。4.2.2串口状态控制变量gnuartx_status: 串口状态,取值来自:ENUM COM_STATUS COM_IDLE, /空闲 COM_RECIVING, /接收中 COM_RECIVE_COMPLETED, /接收完成 COM_SEND_WAITING, /等待发送(应答帧组织完成) COM_SENDING, /发送中 COM_SEND_COMPLETED /发送完成 ;gnuartx_recive_timeout_tickcount: 接收超时计时,当串口状态gnuartx_status处于接收中COM_RECIVING时,对接收超时进行计数。用一个10MS以下定时器计数,在每次串口接收中断中对此计数变量清零,定时器中进行增1计数,并判断如果到达一定的量值(时间量取值一个典型通讯周期的一半左右)则判当前帧接收失败,并把串口状态gnuartx_status改为空闲COM_IDLE。gnchangeto_recive_tickcount:对于以485模式工作的串口,从把应答帧最后一个字节送到发送端口开始,到切换485总线状态之间的计时。4.3串口收发控制4.3.1数据接收1)由接收中断程序负责数据接收;接收中断触发时,中断程序把端口寄存器的数据转移到接收数据缓冲区(gauart_rx_data)中,接收字节总数gauart1_recive_count增1,且把接收超时计时gnuartx_recive_timeout_tickcount清零;在数据放入缓冲区前必须检查串口状态是否处于COM_IDLE或COM_RECIVING状态,否则不加入缓冲区;在数据放入缓冲区后,中断程序调用协议模块的接收帧状态判断函数xxx_reciveframe_status来判断是否接收到一个完整的帧;接收帧状态判断函数调用结束后串口状态:COM_RECIVE_COMPLETED: 一帧接收完成COM_RECIVING : 一帧接收未完成COM_IDLE : 接收的数据错误2)当调用接收帧状态判断时返回的结果为COM_RECIVE_COMPLETED时,如果需要在中断中直接应答,则串口中断调用协议模块中接收帧解析与应答函数xxx_reciveframe_analysis,进行帧校验、数据检查、命令分析、应答帧的组织。调用完成后,接收缓冲区gauart_rx_data清空、接收数据长度gauart1_recive_count 清零。协议接口函数调用结束后的串口状态说明:COM_SEND_WAITING:发送等待状态,协议对接收帧有应答,应答帧组织完成(待发送字节总数gauartx_send_count必须大于0, 发送偏移指针gauartx_send_indx等于0)COM_IDLE :空闲状态,协议对接收帧无应答。串口状态为COM_SEND_WAITING,采用485方式通讯,必须立即把总线切换到发送状态;然后启动发送中断;启动发送中断后见4.4.2数据发送控制。串口状态为COM_IDLE,则等待下一帧的接收。4.3.2数据发送数据发送必须采用中断方式进行。根据发送偏移指针gauartx_send_indx把发送缓冲区gauartx_tx_data中指定偏移位置的字节送到串口芯片的寄存器上,发送偏移指针gauartx_send_indx增1。发送前先检查发送偏移指针,当发送偏移指针达到待发送总数时,则不发送数据且把待发送总数和发送偏移指针全部清零,对于以RS232方式工作的串口,把串口状态置为COM_IDLE,对于以485方式工作的串口,把串口状态置为COM_SEND_COMPLETED,且发送完成计时gnuartx_changeto_recive_tickcount清零。发送中断处理程序必须先检查串口状态gnuartx_status是否处于发送中COM_SENDING状态,否则把发送总数和发送指针清0,且不发送数据。4.3.3 发送完成计时对RS485方式工作的串行通讯系统,需要在发送完最后一个字节后,进行一定时间的等待,才能把总数状态切换到接收状态,否则可能导致应答帧的最后一个字节无法被主机正确接收。在定时器的定时中断中,当串口状态为COM_SEND_COMPLETED时,在变量gnuartx_changeto_recive_tickcount进行增1计时,如果计时累计达到规定的时间量,则把串口状态置为空闲COM_IDLE,且把RS485总线切换到接收接收状态。计时时间量与通讯使用的波特率相关,时间量取值标准:(当前波特率)发送一个字节所需要的时间+3MS。例如:1200BPS: 11MS(8MS+3MS)2400BPS: 7MS (4MS+3MS)4800BPS: 5MS (2MS+3MS)9600BPS: 4MS (1MS+3MS) 19200BPS及以上: 3MS此计时不需要精确计时,但此计时的时间量不能太大,否则可能丢失通讯主机下一帧数据的头几个字节。4.3.4接收超时计时在串口状态为接收中COM_RECIVING时,定时器对接收帧中下一个字节到达的时间进行计时,两个字节之间的时间差不能超出一个规定的时间量(由协议给定),否则判接收超时。如果定时器判断发生接收超时,则把串口状态置为空闲,接收字节总数清零,重新开始接收。5 协议模块所有在协议中确定的内容,必须由协议模块完成。协议模块负责接收缓冲区的帧状态判断、帧数据校验、帧数据解析、应答帧组织工作。所有功能统一在两个接口中,由串口中断负责调度。5.1协议接口void xxx_reciveframe_status(); 接收帧状态判断void xxx_reciveframe_analysis(); 接收帧解析与应答说明:1.xxx代表协议的简称,例如:MODBUS协议modbus_reciveframe_status();2. 接口不使用返回值,直接修改全局变量和全局缓冲区5.2协议实现与调度接收帧状态判断函数实现了协议的帧格式的检查,由接收中断负责调度运行。帧格式检查取决于协议中对帧格式(协议的标准帧格式和命令帧格式)的定义,一般包括帧标识符的个数及内容是否正确,地址是否正确,功能码是否正确,帧长度是否正确,全部正确则把全局的串口状态置为接收完成COM_RECIVE_COMPLETED。其中一项错误,则把串口状态置为空闲COM_IDLE,并把接收总数清零。接收帧解析与应答函数实现协议的命令功能,函数需要先检查帧校验码,检查功能码及其他数据域的数据有效性,当数据错误时,根据协议规定针对不同的错误是否需要对主机进行错误应答。检查全部正确则进行命令解析,即把命令及所附带的数据转化到系统相关全局变量中或执行相关动作。如果命令需要应答,则根据命令要求从相关的全局变量中提取数据组织应答帧。如果无应答,则接收帧解析与应答函数把串口状态置为空闲状态COM_IDLE,如果有应答,则函数

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论