can串口通信协议.docx
《can串口通信协议.docx》由会员分享,可在线阅读,更多相关《can串口通信协议.docx(14页珍藏版)》请在冰豆网上搜索。
can串口通信协议
竭诚为您提供优质文档/双击可除
can串口通信协议
篇一:
can总线与pc机串口通信适配器设计与实现
引言
can总线(controllerareanetwork,控制器局域网)具有高性能、高可靠性、高性价比、连接方便、实时性好及其独特的设计等突出优点应用于许多工业部门,目前已成为比较流行的一种现场总线,广泛应用于控制系统中的各检测和执行机构之间的数据通信。
而实际应用中pc机与can总线的人机交互设计尤为重要,它直接影响系统的运行和结果,其连接方法也成为系统设计的重点,通常采取3种连接方式:
Rs-232串行口通信、pci卡、usb口通信,由于串行通信端口在系统控制领域中一直扮演着极为重要的角色,以其开发简单,资源丰富,成本低,无需驱动程序等诸多优点,不仅没有被淘汰,反而在规格上更先进,故应用广泛。
结合设计中at89c51单片机有串行通信口且接口简单的特点,选用Rs-232作为can总线与pc机之间的连接方式。
将就这一基于can控制器sja1000与at89c51的具有通用性的工业测控系统设计的软硬件设计方案作详细介绍。
can总线及can控制器sja1000简介
can总线最初是德国bosch公司在1986年为解决现代汽车中众多的控制与测试仪器之间的数据交换而开发的一种支持分布式实时控制系统的串行数据通讯总线。
can总线与其它通信网的显著不同之处在于:
(1)报文传送中不包含目标地址,它是以全网广播为基础,各接收站根据报文中反映数据性质的标识符过滤报文,该收的收下,不收的弃用。
其好处是可线上网下网、即插即用和多站接收。
(2)特别强化了对数据安全性的关注,满足控制系统及其它较高数据要求的系统需求。
另外can总线采用短帧结构,借助接收滤波的多地址帧传送,受干扰概率低,每帧信息都有cRc校验及其它检错措施。
响应远程数据请求,配置灵活,具有全系统的数据相容性。
节点数主要取决于总线驱动电路,目前最多可达110个节点。
can总线符合iso11898标准,通信速率高,最大传输速率可达1mbit/s,最大传输距离为10km,传输介质可为双绞线。
基于can总线以上的特点,把它应用于系统分布比较分散且需要在同一总线上挂接多个节点的场合是非常适合的。
目前广泛流行的can总线器件有两大类:
一类是独立的can控制器,如philips公司的pca82c200,sja1000及intel82256/82257等;另一类是带有在片can的微控制器,如p8xc582等。
其中philips公司的pca82c200是符合can2.0a协议的总线控制器,sja1000是它的替代产品,它是应用于汽车和一般工业环境的独立can总线控制器。
具有完成can通信协议所要求的全部特性。
经过简单总线连接的sja1000可完成can总线的物理层和数据链路层的所有功能。
其硬件与软件设计和pca82c200的基本can模式(basiccan)兼容。
同时,新增加的增强can模式(pelican)还可支持can2.0b协议。
根据当前市场开发工具和课题的实际需要,选用sja1000作为can控制器,同时使用了can控制器接口芯片pca82c250。
sja1000有两种工作模式:
基本模式和增强模式。
在基本模式下,sja1000只可收发标准数据帧(标准数据帧的标识符为11位),且错误报警的极限值不能修改;在增强模式下,sja1000既可接收标准数据帧,也可接收扩展数据帧(扩展数据帧的标识符为29位),可修改错误报警的极限值,并且sja1000具有更加灵活的滤波方式,能够根据数据帧的标识符有选择地接收一些数据帧。
另外,增强模式下的sja1000能够进行自检,即可通过自发自收一组报文来判断该控制节点是否正常地挂在can总线上。
使用者所要做的主要工作是sja1000的初始化,收发报文的处理以及对节点脱离总线的检测量与处理。
Rs-232标准
串行通信由于接线少、成本低,在数据采集和控制系统中得到了广泛的应用,1969年,美国电子工业协会(eia)公布了Rs-232c作为串行通信接口的电气标准,该标准定义了数据终端设备(dte)和数据通信设备(dce)间按位串行传输的接口信息,合理安排了接口的电气信号和机械要求,在世界范围内得到了广泛的应用。
系统总体结构原理及设计
该适配器利用Rs-232串行通信口及can总线进行数据通信,实现上位机与各智能节点间的通信任务,包括控制台(上位机)向下传输命令和下位机数据的返回,以完成对下层设备的监控。
图1为系统结构框图。
pc机通过Rs-232与can控制器sja1000通信,实现信息在can总线上的发送与接收。
底层各智能节点根据应用的不同具有不同功能,但都具有与can总线通信能力可以上传数据和接收数据。
can总线接口硬件设计
图2为can总线通信接口适配器硬件设计简图。
pca82c250提供对总线的差动发送和对can控制器的差动接收功能,也增大了通信距离,提高了系统的瞬间抗干扰能力,保护总线,降低射频干扰(RFi),实现了热防护等功能。
系统软件设计
软件设计分pc机Visualbasic编程和at89c51单片机c语言编程2部分。
pc机部分
采用Vb6.0编程,这样界面非常直观,人机交互效果好。
Vb提供了具有通讯功能的mscomm.ocx控件,该控件可设置串行通信的数据发送和接收,对串口状态及串口通信的信息格式和协议进行设置。
mscomm控件提供2种处理通讯的方式:
(1)事件驱动通讯,即发送或接收数据过程中触发oncomm事件,通过编程访问commevent属性了解通信事件的类型,分别进行各自的处理;
(2)查询方式,通过检查commevent属性的值来查询事件和错误。
采取查询方式。
控件mscomm是将Rs-232的初级操作予以封装,用户以高级的basic语法即可利用Rs-232与外界通信并不需要了解其他有关的初级操作,因此使用方便。
mscomm控件初始化:
mport=2设置串口2
mscomm1.settings=“9600,n,8,1”设定工作方式
mscomm1.inbuffersize=10根据1次传1个can帧,设置输入缓冲区大小
mscomm1.inputmode=1二进制形式接收
mscomm1.inputlen=0一次读出输入缓冲区中的所有数据
mscomm1.utbuffersize=10输出缓冲区大小的设置
mscomm1.utbuffercount=0清空输出缓冲区
mscomm1.portopen=true打开串口
pc机与单片机msc51之间的通信约定如下:
一般情况下pc与多个msc51单片机系统进行主从式通信,其方案是msc51采用串口工作方式3,即11位异步接收/发送方式,有效数据为9位,其中第9位为地址/数据信息的标志位,以此区分各从机。
但现在pc机采用Vb编程,其mscomm控件为标准的
10位串口通信,包括8位标准数据和数据的起始位和停止位。
将单片机串口设为工作方式1,即改为10位异步接收/发送方式,通讯流程如下:
通讯时首先发通信开始标志,接着发送各下位机单片机的地址信号和芯片的片选信号,然后发送单片机的工作命令字。
再往下即进行数据处理,转入相应的处理功能模块,最后对数据进行效验。
这个通讯流程非常简便,实现了pc机与单片机之间的主从式通讯。
以下为Vb的发送接收程序:
privatesubcmdsendàclick()使用按钮控件
mscomm1.utput=txtsend.text将传送区内的字符串以output属性送出
endsub
privatesubFormàload()窗体的加载事件
mscomm1.portopen=true将通讯断口开启,通讯参数也可以在开启前先设定
mscomm1.Rthreshold=Val(txtthreshold.text)设定引发接收事件的接收阈值,使程序一执行便开启通讯端口,将接收的阈值设定为阈值,设定文本框内的值。
endsub
privatesubmscomm1.oncomm()通讯控件的oncomm事件。
引发接收事件后,将字符收进来并放在接收的文本框中
mevent根据下面每一个case语句处理每个事件和错误事件casecomevcdcd线的状态发生变化
casecommevReceive收到Rthreshold#of
txtReceive.text=txtReceive.text+trim(mscomm1.input)
ea=1;//开中断
es=1;//允许串口中断
tR1=1;//启动定时器t1
spechaR=0xff;//设定通讯开始标志
程序采用中断接收,查询发送的方式。
串口中断服务程序流程图如图3所示。
sja1000控制器部分
初始化子程序caninit()
选用can2.0协议构建can总线控制网络,对sja1000的初始化主要包括工作方式的设置、验收代码寄存器acR、验收屏蔽寄存器amR、波特率的参数设置等。
voidcanàinit(void)/*sja1000的初始化子函数*/
{control=1;/*禁止超载、出错及接收中断,并置复位请求位使其进入复位状态*/
while(control
acceptanceàcode=0x01;/*验收码寄存器(存机号1号)*/
acceptanceàmask=0xfe;/*验收屏蔽码寄存器*/
busàtimingà0=0x03;/*总线定时寄存器0,同步跳转宽度
t0=t,bps=125k*/
busàtimingà1=0x18;/*总线定时寄存器1,t1=9t,t2=2t,波特率为500kbit/s*/
outputàcontrol=0x1a;/*正常输出方式,tx1引脚悬浮*/
clockàdivider=0x40;/*basiccan模式,Rx1接固定电平*/
control=0x1a;/*清复位请求,使其进入工作状态*/
}
发送canàsend()
发送子程序负责节点报文的发送,由can控制器sja1000独立完成,将命令寄存器里的发送请求标志置位,即可发送sja1000发送缓冲区中的报文。
voidcanàsend(unsignedcharid,char*xdata)/*该子函数完成一帧数据的发送*/
{while((status
transmitbuffer1=id;
transmitbuffer2=0x08;
transmitbuffer3=txdata[0];
transmitbuffer10=txdata[7];
command=0x05;/*发送请求*/
while((status
}
接收子程序canàreceive()
接收子程序负责节点报文的接收。
sja1000自动接收发往该节点的数据并将收到的数据放到它的接收缓冲器中。
sja1000的报文接收主要有2种方式:
中断接收方式和查询接收方式。
系统采用的是中断接收方式。
{unsignedcharir;
ir=interrupt;/*获得sja1000的中断状态*/
ea=0;
if((ir}
Rxid[0]=Receivebuffer1;
Rxid[0]=Receivebuffer2;
if(((Receivebuffer2
.
Rxdata[7]=Receivebuffer10;
command=0x04;/*sja1000的接收缓存器被释放*/
}
elseif(((Receivebuffer2
}
}
结束语
介绍了一种低成本、高可靠性、快捷的通用型can总线与pc机通过Rs-232串口互连方案。
该互连方案很好地保证了管理监控层和现场生产测控层之间的连接,方便了上下层信息交流,满足工厂、变电站等工业场合的应用要求。
篇二:
串口通信协议
1串口
串口是计算机上一种非常通用设备通信的协议(不要与通用串行总线universalserialbus或者usb混淆)。
2串行通信的传输方向
2.1单工
单工是指数据传输仅能沿一个方向,不能实现反向传输。
2.2半双工
半双工是指数据传输可以沿两个方向,但需要分时进行。
2.3全双工
全双工是指数据可以同时进行双向传输。
单工半双工全双工
3重要参数
串口通信最重要的参数是波特率、数据位、停止位和奇偶校验。
对于两个进行通行的端口,这些参数必须匹配。
3.1波特率
这是一个衡量通信速度的参数。
它表示每秒钟传送的bit的个数。
例如300波特表示每秒钟发送300个bit。
当我们提到时钟周期时,我们就是指波特率例如如果协议需要4800波特率,那么时钟是4800hz。
这意味着串口通信在数据线上的采样率为4800hz。
通常电话线的波特率为14400,28800和36600。
波特率可以远远大于这些值,但是波特率和距离成反比。
高波特率常常用于放置的很近的仪器间的通信,典型的例子就是gpib设备的通信。
常用的波特率有,1200,2400,4800,9600,19200,38400,115200等。
3.2数据位
这是衡量通信中实际数据位的参数。
当计算机发送一个信息包,实际的数据不会是8位的,标准的值是5、7和8位。
如何设置取决于你想传送的信息。
比如,标准的ascii码是0~127(7位)。
扩展的ascii码是0~255(8位)。
如果数据使用简单的文本(标准ascii码),那么每个数据包使用7位数据。
每个包是指一个字节,包括开始/停止位,数据位和奇偶校验位。
由于实际数据位取决于通信协议的选取,术语“包”指任何通信的情况。
3.3停止位
用于表示单个包的最后一位。
典型的值为1,1.5和2位。
由于数据是在传输线上定时的,并且每一个设备有其自己的时钟,很可能在通信中两台设备间出现了小小的不同步。
因此停止位不仅仅是表示传输的结束,并且提供计算机校正时钟同步的机会。
适用于停止位的位数越多,不同时钟同步的容忍程度越大,但是数据传输率同时也越慢。
3.4奇偶校验位
在串口通信中一种简单的检错方式。
有四种检错方式:
偶、奇、高和低。
当然没有校验位也是可以的。
对于偶和奇校验的情况,串口会设置校验位(数据位后面的一位),用一个值确保传输的数据有偶个或者奇个逻辑高位。
例如,如果数据是011,那么对于偶校验,校验位为0,保证逻辑高的位数是偶数个。
如果是奇校验,校验位位1,这样就有3个逻辑高位。
高位和低位不真正的检查数据,简单置位逻辑高或者逻辑低校验。
这样使得接收设备能够知道一个位的状态,有机会判断是否有噪声干扰了通信或者是否传输和接收数据是否不同步。
4Rs-232/422/485标准
Rs-232、Rs-422与Rs-485最初都是由电子工业协会(eia)制订并发布的。
Rs-232在1962年发布,命名为eia-232-e,作为工业标准,以保证不同厂家产品之间的兼容。
Rs-422是由Rs-232发展而来,它是为弥补Rs-232之不足而提出的。
为改进Rs-232通信距离短、速率低的缺点,Rs-422定义了一种平衡通信接口,将传输速率提高到10mbps,传输距离延长到4000英尺(速率低于100kbps时),并允许在一条平衡总线上连接最多10个接收器。
Rs-422是一种单机发送、多机接收的单向、平衡传输规范,被命名为tia/eia-422-a标准。
为扩展应用范围,eia又于1983年在Rs-422基础上制定了Rs-485标准,增加了多点、双向通信能力,即允许多个发送器连接到同一条总线上,同时增加了发送器的驱动能力和冲突保护特性,扩展了总线共模范围,后命名为tia/eia-485-a标准。
由于eia提出的建议标准都是以“Rs”作为前缀,所以在通讯工业领域,仍然习惯将上述标准以Rs作前缀称谓。
Rs-232、Rs-422与Rs-485标准只对接口的电气特性做出规定,而不涉及接插件、电缆或协议,在此基础上用户可以建立自己的高层通信协议。
但由于pc上的串行数据通讯是通过uaRt芯片(较老版本的pc采用i8250芯片或z8530芯片)来处理的,其通讯协议也规定了串行数据单元的格式(8-n-1格式):
1位逻辑0的起始位,6/7/8位数据位,1位可选择的奇(odd)/偶(eVen)校验位,1/2位逻辑1的停止位。
基于pc的Rs-232、Rs-422与Rs-485标准均采用同样的通讯协议。
4.1Rs-232标准
Rs-232被定义为一种在低速率、近距离串行通讯的单端标准。
Rs-232采取不平衡传输方式,即所谓单端通讯。
Rs-232的电气标准:
电平为逻辑“0”时:
+3V~+15V;
电平为逻辑“1”时:
-3V~-15V;
未定义区:
-3V~+3V。
在此区域内的信号处理将由通讯接口的Rs-232收发器决定。
4.2Rs-485标准
电子工业协会(eia)于1983年制订并发布Rs-485标准,并经通讯工业协会(tia)修订后命名为tia/eia-485-a,习惯地称之为Rs-485标准。
Rs-485标准是为弥补Rs-232通信距离短、速率低等缺点而产生的。
Rs-485标准只规定了平衡发送器和接收器的电特性,而没有规定接插件、传输电缆和应用层通信协议。
Rs-485标准与Rs-232不一样,数据信号采用差分传输方式(differentialdrivermode),也称作平衡传输,它使用一对双绞线,将其中一线定义为a,另一线定义为b,如图所示。
发送器示意图
通常情况下,发送发送器a、b之间的正电平在+2~+6V,是一个逻辑状态;负电平在-2~-6V,是另一个逻辑状态。
另有一个信号地c。
在Rs-485器件中,一般还有一个“使能”控制信号。
“使能”信号用于控制发送发送器与传输线的切断与连接,当“使能”端起作用时,发送发送器处于高阻状态,称作“第三态”,它是有别于逻辑“1”与“0”的第三种状态。
对于接收发送器,也作出与发送发送器相对的规定,收、发端通过平衡双绞线将a-a与b-b对应相连。
当在接收端a-b之间有大于+200mV的电平时,输出为正逻辑电平;小于-200mV时,输出为负逻辑电平。
在接收发送器的接收平衡线上,电平范围通常在200mV至6V之间。
参见下图所示。
接收器示意图
定义逻辑1(正逻辑电平)为b>a的状态,逻辑0(负逻辑电平)为a>b的状态,a、b之间的压差不小于200mV。
5接线方式
5.1Rs232通讯连接方式示意图
5.2Rs485通讯连接方式示意图
2台连接方式:
多台连接组成主从网络:
6通信方式演示
6.1Rs232通信演示
通过串口助手实现演示全双工串口设置
6.2Rs485通信演示
通过485助手和地址表软件模拟演示半双工串口设置地址表从机地址modbus上层协议
7Rs485通讯协议
Rs-485标准只对接口的电气特性做出规定,而不涉及接插件、电缆或协议;因此,用户需要在Rs-485应用网络的基础上建立自己的应用层通信协议。
很多具有Rs-485接口电路的用户设备采用自己制定的简单通讯协议,或是直接取自modbus协议(ascii/Rtu模式)中的一部分功能;
7.1modbus通讯协议
modbus协议已经成为一种通用工业标准。
modbus在串行链路上的协议帧格式如下所示:
modbusadu
modbuspdu
modbus协议帧格式
pdu:
modbus的一个简单协议数据单元;
adu:
modbus在总线或者网络上的应用数据单元。
modbus协议使用主从通信技术,采用查询-回应形式实现通信,主机可对各从机寻址,发出广播信息,从机返回信息作为对查询的响应,具体过程如下所示:
modbus查询-回应形式通信
当通信或者操作出错的时候,从机同样会给主机回应异常帧,其格式和正常响应的数据格式相似,只是回应时的功能码和数据响应区域变成modbus定义的异常功能码和异常码。
篇三:
串口通讯协议
串口通信的概念非常简单,串口按位(bit)发送和接收字节。
尽管比按字节(byte)的并行通信慢,但是串口可以在使用一根线发送数据的同时用另一根线接收数据。
目录1什么是串口
2什么是Rs-232
3什么是Rs-422
4什么是Rs-485
5什么是握手
b,数据位:
这是衡量通信中实际数据位的参数。
当计算机发送一个信息包,实际的数据不会是8位的,标准的值是5、7和8位。
如何设置取决于你想传送的信息。
比如,标准的ascii码是0~127(7位)。
扩展的ascii码是0~255(8位)。
如果数据使用简单的文本(标准ascii码),那么每个数据包使用7位数据。
每个包是指一个字节,包括开始/停止位,数据位和奇偶校验位。
由于实际数据位取决于通信协议的选取,术语“包”指任何通信的情况。
c,停止位:
用于表示单个包的最后一位。
典型的值为1,1.5和2位。
由于数据是在传输线上定时的,并且每一个设备有其自己的时钟,很可能在通信中两台设备间出现了小小的不同步。
因此停止位不仅仅是表示传输的结束,并且提供计算机校正时钟同步的机会。
适用于停止位的位数越多,不同时钟同步的容忍程度越大,但是数据传输率同时也越慢。
d,奇偶校验位:
在串口通信中一种简单的检错方式。
有四种检错方式:
偶、奇、高和低。
当然没有校验位也是可以的。
对于偶和奇校验的情况,串口会设置校验位(数据位后面的一位),用一个值确保传输的数据有偶个或者奇个逻辑高位。
例如,如果数据是011,那么对于偶校验,校验位为0,保证逻辑高的位数是偶数个。
如果是奇校验,校验位为1,这样就有3个逻辑高位。
高位和低位不真正的检查数据,简单置位逻辑高或者逻辑低校验。
这样使得接收设备能够知道一个位的状态,有机会判断是否有噪声干扰了通信或者是否传输和接收数据是否不同步。
2什么是Rs-232
Rs-232(ansi/eia-232标准)是ibm-pc及其兼容机上的串行连接标准。
可用于许多用途,比如连接鼠标、打印机或者modem,同时也可以接工业仪器仪表。
用于驱动和连线的改进,实际应用中Rs-232的传输长度或者速度常常超过标准的值。
Rs-232只限于pc串口和设备间点对点的通信。
Rs-232串口通信最远距离是50英尺。
db-9针连接头
9针串口连接口顺序图
从计算机连出的线的截面。
Rs-232针脚的功能:
数据:
txd(pin3):
串口数据输出(transmitdata)
Rxd(pin2):
串口数据输入(Receivedata)
握手:
Rts(pin7):
发送数据请求(Requesttosend)
cts(pin8):
清除发送(cleartosend)
dsR(pin6):
数据发送就绪(datasendReady)
dcd(pin1):
数据载波检测(datacarrierdetect)
dtR(pin4):
数据终端就绪(dataterminalReady)
地线:
gnd(pin5):
地线
其他
Ri(pin9):
铃声指示