首 页文档资料下载资料维修视频包年699元
请登录  |  免费注册
当前位置:精通维修下载 > 文档资料 > 家电技术 > 维修教程知识 > 单片机栏
自动摊铺机通信模块的设计
来源:本站整理  作者:佚名  2009-09-11 09:43:58



下面为实现串口的通信程序:

#include

unsigned int a;

interrupt(0x2B) void S0RINT(void) //接收中断服务子程序

{

a=S0RBUF; //将接收数据保存

}

void putchar(unsigned char tdata) //串行发送程序

{

while(!S0TBIR){;} //等待发送缓冲区清空

S0TBIR=0; //复位发送缓冲区中断请求标志

S0TBUF=tdata; //装载发送缓冲寄存器

}

void ASC_vInit(void) //串行通信初始化

{

S0CON=0x8011; //定义控制寄存器:SOR=1;SOREM=1;串行方式1

S0BG=0x0040; //定义波特率9 600Bd

S0RIC=0x0062; //定义接收中断控制寄存器

S0TBIC=0x0080; //定义发送缓冲控制寄存器

P3 |=0x0400; //定义P3.10引脚为输出锁存(TXD0)

DP3 |=0x0400; //定义P3.10方向控制(TXD0为输出)

Dp3 &=0xF7FF; //定义P3.11方向控制(RXD0为输入)

IEN=1; //开中断

}

void main(void)

{

………………;

ASC_vInit(); //串口初始化

putchar(‘…..’); //串行发送

………………;

}

6.CAN总线通信软件设计

6.1 C164CI的CAN模块概述

C164CI的CAN模块特点如下:

(1)遵循CAN V2.0B规定(符号标准和扩展功能)。

(2)最大CAN通信速率为1MB/S。

(3)完全的CAN装置:

l 15个信息体,带有自己的识别器和状态控制位;

l 每个信息体可以定义为发送或接收。

(4)通过在片内部XBUS(16位独立方式)与主CPU相连(C166-内核)。

(5)接收滤波器用可编程屏蔽寄存器:

l 全域屏蔽输入信息体(全CAN功能);

l 信息体15有附加屏蔽(基本CAN功能);

l 灵活的中断事件控制;

l 带有两个接收缓冲器;

l 用自己的全域屏蔽寄存器进行接接收滤波。

6.2 CAN总线通信软件设计

自动摊铺机系统CAN总线通信软件设计的任务是:在选定通信规程CAN2.0B以后,规定各计算机传送数据的格式和约定;协调各计算机之间的通信;统一考虑通信中的可靠性措施。

6.2.1 数据发送模式

由于要传送数据的重要程度、传送周期不同,在本系统的通信中采用两种不同的数据发送模式:

(1)发送模式0:即发送一次,不检测接收是否正确,发送结束返回。接收方接收到此类数据包后,不必发送应答信息包。该数据包的特点是:按照一定周期定时发送,用于主操作面板上的状态显示,所以偶尔的传送失败不会影响系统的正常运行与操作。

(2)发送模式1:即一定要将数据包正确发送给接收方。采用重发机制,等待接收方应答,若没有接收到应答则重发。5次发送均失败,则返回FALSE,由发送方做出相应的处理动作,如报警、停机等;成功则返回TRUE。该数据包的特点是:由相应事件触发发送,如果传送失败,将影响系统的正常运行。

6.2.2 数据发送模式

对于自动摊铺机系统来说,其CAN网络中节点数量较少,而每种数据包只需要一部分节点来接收,因此在通信设计中利用数据帧标识符来实现定址组播。为避免接收不必要的数据包,对接收节点按位编址,每个节点对应验收滤波中的一位。若一个报文标识符高8位中对应位为1,则接收;否则忽略。因此只要在发送节点根据数据包内容设置合适的报文标识符,数据包即可被相关节点正确接收,而被无关节点忽略。

6.2.3 校验

CAN结构的MAC层中已经实现了循环冗余码〔CRC〕校验。但自动摊铺机工作环境恶劣,工作条件复杂,为了系统通信的可靠性,在控制程序级的通信中也进行校验。为减轻系统负担及降低程序复杂性,控制程序级的校验采用了比较简单的求和取模校验方式,每个数据帧的最后一个数据字节作为校验和,其值是之前所有数据字节求和后对256取模的值。各节点的接收接口中以相同方法计算校验和,若校验正确则将数据包压入接收队列,否则抛弃该包。

6.2.4 数据包格式及内容

其中:L取值为2—8:采用CAN2.0B标准,使用29位标识符。

ID28—ID21:确定此帧的接收节点,每位代表1个节点,可以广播。

ID20—IDl7:此帧的顺序号,每发一个帧增1,用于区分不同数据帧与重发数据帧。

IDl6:应答标志位:为1表示此帧需要应答,为0表示此帧不需应答。

IDl5—IDl3:指定此帧的发送节点,0—3分别代表左交互机、右交互机、车体行驶测控机和找平输分料测控机。

ID12—ID0:无意义。

6.3 CAN总线通信编程

CAN总线通信编程是一个比较烦琐的事情,主要是涉及诸多的CAN寄存器,但只要掌握其规律和技术关键,就会变得容易起来。下面是CAN总线通信编程的实现步骤:

(1)CAN模量初始化;

(2)定义每一个信息体;

(3)装载信息体数据(仅针对发送信息体);

(4)接收信息体接收数据;

(5)发送一个信息体;

(6)检查一个信息体;

(7)检查是否关闭CAN总线。

为便于进行模块化编程,将CAN通信功能封装成一个个子程序,并且生成一个专用的程序库,供不同的程序员调用,这样就提高了编程效率,并易于功能扩展。下面给出其中的两个子程序。

下面为发送一个信息体的CAN通信程序:

#include //C164寄存器定义

#include //CAN控制寄存器定义

void send_mo_16x(unsigned char a) //发送信息体“a”(1..14)

{

if((a<15)&&(a))*msgctrl_ptr_16x[a]=0xefff; //置位TXRQ

}

下面为检查是否关闭CAN总线的CAN通信程序:

#include //CAN控制寄存器定义

unsigned char check_busoff_16x(void) //检查总线是否关闭,并在必要时恢复

{

unsigned char busoff_var=0;

if(SR&0x80) //如果BOFF=1

{

busoff_var=1;

CR=CR&0xfe; //恢复关闭的总线(清零INIT)

}

}

7.结论

由于摊铺机的功能繁多,运作复杂,工作环境十分恶劣,因此控制系统的工作可靠性问题就是自动摊铺机设计的关键。在本系统中,利用RS232C实现了主交互机与移动电话之间的串行通信;采用带CAN总线的单片机完成不同模块各自的功能,又通过CAN总线传送数据或命令,实现了功能分散又集中监视,危险分散。因此,很适合于自动摊铺机中分布式控制系统的实现。现场实验结果表明:该通信模块具有良好的可靠性、稳定性和安全性。

上一页  [1] [2] 

关键词:

文章评论评论内容只代表网友观点,与本站立场无关!

   评论摘要(共 0 条,得分 0 分,平均 0 分)

推荐阅读

图文阅读

热门阅读

Copyright © 2007-2017 down.gzweix.Com. All Rights Reserved .
页面执行时间:257,382.80000 毫秒