要使用博图cmptp模块,需要进行如下步骤:
1. 下载和安装博图cmptp模块。可以从博图官网下载cmptp模块的安装包,并按照安装说明进行安装。
2. 创建协议栈。使用cmptp模块提供的API函数,可以创建符合标准的通信协议栈。协议栈是一组按照特定顺序排列的协议层,用于实现通信协议的不同功能。在创建协议栈时,需要定义协议层的类型、参数和顺序等信息。
3. 实现通信接口。使用cmptp模块提供的API函数,可以实现不同的通信接口,包括串口、网络、USB等。通信接口用于进行数据传输和处理,并提供了一些常用的通信接口函数,如发送数据、接收数据、打开连接、关闭连接等。
4. 调试和测试。在完成协议栈和通信接口的开发后,需要进行调试和测伏局试,以确保协议栈和通信接口的可靠性和稳定性。可以使用cmptp模块提供的调试工具和测试工具,对协议栈和通信接口进行测试和验证。
需要注意的是,博图cmptp模块是一种专业的通信协议开发工具,需要一定的专业知识和技能才能熟练使用。在使用该模块进行开发时,建议先了解相氏顷关的通信协议标准和开发流程,以确保开发效率和开发质量。
串口调试助手是PC端的软件,用来从PC的串口发送和接收数据的。我们调试PC和单片机之间通讯的时候用来模拟PC端应用软件给单片机发送数据和接收单片机发送的数据的。你调试的是单片机和单片机之间的通讯,不适合用串口调试助手的。但是单片机和单片机通讯不容易知道实祥宽际通讯的数据,所以存在很大的调试难度。如果条件允许的话,一般是通过单片机连PC串口,让PC模拟模块收发数据来验证串口通讯是否正常(PC端能够直接看到单片机发送的数据,从而判断程序是否符合同模块的通讯要求),再把PC换成模块进行通讯。这样调试比较方便。
你和模块通讯也是单纯的串口通讯。
我又仔细分析了一下你的系统,按你的意思应该是拿51单片机做上位机。习惯上我们把PC称为上位机,所以刚才没明白。
1、SMOD是用来给串口波特率硬件倍频的。在串口模式1,2,3下,如果SMOD=0波特率是4800,那么SMOD=1时波特率是9600。它存在的理由就是:如果要求的波特率非常快,在给定晶振条件下SMOD=0已经满足不了,才需要SMOD=1倍频。
比如你11.0592MHZ在SMOD=0时波特率最大28800bps达不到要求的57600bps,所以你要用SMOD=1倍频才能实现。
你串口要选择模式1,波特率是可变的,取决于定时器1的溢出速率:
波特率=(2SMOD÷32)×定时器1 溢出速率
通常会使用定时器1 工作在定时器工作模式2下,这时定时值中的TL1 做为计数,TH1 做为自动重装值 ,这个定时模式下,定时器溢出后,TH1 的值会自动装载到TL1,再次开始计数,这样可以不用软件去干预,使得定时更准确。在这个定时模式2 下定时器1 溢出速率的计算公式如下:
溢出速率=(计数速率)/(256-TH1) ;
计数速率= 11.0592M/12;
算了一下是TH1=255(#0FFH);就是计数器走一个计数周期。
2、你不用关心什么叫做数据包,只是一种形象的叫法。把一串数据作为一次通讯的内容,这一串数据就是一个包了。那个2位和4位只是写法上便于你理解的纯消,
如01H +0000H + 01H + 03H + 0005H
对应上面的包格式解释0000H是地址码保留字0005H是校验和。
而串口通讯一帧只能发送一个字节。发送的时候只能 01H + 00H +00H + 01H + 03H + 00H + 05H 依序发送。
用汇编写的话流程就是 写入第一个字节01H到SBUF,等待直到TI=1,发送第二个字节00H,等待直到TI=1,发送第三个字节00H,如此循环直到发送完05H为止。
3、类似发送,应答8181H也是81H+81H两个字节回复的。可以用中断,也可以用查询。例如2的发送通讯中05H发送完之后就要开始查询RI直到RI=1,然后就把 SBUF中的字节读出来,是81H,清RI后再查询RI直到RI=1,把 SBUF中的字节读出来,是81H,清RI。如果判断两个接收的都是81H那就表明收包正确。
4、串口通讯一帧只能发送一个字节。这个就不做宴知是问题了。
+我hi交流,不留Q,不留程序。
http://www.51c51.com/CAN全称为Controller Area Network,即控制器局域网,由德国Bosch公司最先提出,是国际上应用最广泛的现场总线之一。最初CAN 被设计作为汽车环境中的通讯,在汽车电子控制装置之间交换信息形成汽车电子控制网络。由于其卓越的性能、极高的可靠性和低廉的价格现已广泛应用于工业现场控制、医疗仪器等众多领域[1][2]。
CAN协议是建立在OSI 7层开放互连参考模型基础之上的。但CAN协议只定义了模型的最下面两层:数据链路层和物理层,仅保证了节点间无差错的数据传输。CAN的应用层协议必须由CAN 用户自行定义,或采用一些国际组织制订的标准协议。应用最为广泛的是DeviceNet和CANopen,分别灶贺配广泛应用于过程控制和机电控制领域。但此类协议一般结构比较复杂,更适合复杂大型系统的应用。笔者在研制一种基于CAN总线隐指的分布式高频开关电源充电机系统的过程中设计了一种适合于小型控制系统的CAN总线高层通信协议。
2 CAN的特点[3]
CAN 是一种多主方式的串行通讯总线,基本设计规范要求有高的位速率、抗电磁干扰性,而且要能够检测出总线的任何错误。当信号传输距离达10km时,CAN仍可提供高达50kbps 的数据传输速率。
CAN具有十分优越的特点:
(1) 较低的成本与极高的总线利用率
(2) 数据传输距离可长达10km,传输速率可高达1Mbps[7]
(3) 可靠的错误处理和检错机制,发送的信息遭到破坏后可自动重发
(4) 节点在错误严重的情况下具有自动退出总线的功能
(5) 报文不包含源地址或目标地址,仅用标志符来指示功能信息和优先级信息。
3 CAN的技术规范
(1) 帧类型
在CAN总线中,有四种不同的帧类型[4][5]:
·数据帧(Data Frame) 数据帧带有应用数据
·远程帧(Remote Frame) 通过发送远程帧可以向网络请求数据,启动其他资源节点传送他们各自的数据,远程帧包含6个不同的位域:帧起始、仲裁域、控制域、CRC域、应答域、帧结尾。仲裁域中的RTR位的隐极性表示为远程帧
·错误帧(Error Frame)错误帧能够报告每个节点的出错,由两个不同的域组成,第一个域是不同站提供的错误标志的叠加,第二个域是错误界定符
·过载帧(Overload Frame)如果节点的接收尚未准备好就会传送过载帧,由两个不同的域组成,第一个域是过载标志,第二个域是过载界定符。
(2) 数据帧结构
数据帧由以下7个不同的位域(Bit Field)组成:帧起始、仲裁域、控制域、数据域、CRC域、应答域、帧结尾。其标准帧结构如表1所示:
表1 数据帧的结构[4]
·帧起始:标志帧的开始,它由单个显性位构成,在总线空闲时发送,在总线上产生同步作用。
·仲裁域:由11位标识符(ID10-ID0)和远程发送请求位(RTR)组成,RTR位为显性表示该帧为数据帧,隐性表示该帧为远程帧标识符由高至低按次序发送,且前7位 (ID10-ID4)不能全为显性位。标识符ID用来描述数据的含义而不用于通信寻址,CAN总线的帧是没有寻址功能的。标识符还用于决定报文的优先权,ID值越低优先权越高,在竞争总线时,优先权高的报文优先发送,优先权低报文退出总线竞争。CAN总线竞争的算法效率很高,是一种非破坏性竞争。
·控制域:为数据长度码 (DLC3-DLC0),表示数据域中拍瞎数据的字节数,不得超过8。
·数据域:由被发送数据组成,数目与控制域中设定的字节数相等,第一个字节的最高位首先被发送。其长度在标准帧中不超过8个字节。
·CRC域:包括CRC(循环冗余码校验)序列(15位)和CRC界定符(1个隐性位),用于帧校验。
l应答域:由应答间隙和应答界定符组成,共两位发送站发送两个隐性位,接收站在应答间隙中发送显性位。应答界定符必须是隐性位。
·帧结束:由7位隐性位组成。
4 自订CAN高层协议
CAN的高层协议也可理解为应用层协议,是一种在现有的底层协议(物理层和数据链路层)之上实现的协议。由于充电机系统的结构比较简单,网络规模也比较小。因此我们自行制订了一种简单而有效的高层通信协议。
技术规范CAN2.0A规定标准的数据帧有11位标识符,用户可以自行规定其含义,将所需要的信息包含在内。在充电机系统中,每一个节点都有一个唯一的地址,地址码和模块一一对应,通过拨码开关设定,总线上数据的传送也是根据地址进行的。由于本系统规模较小,节点数少于32个,因此为每个模块分配一个5位的地址码,同一系统中地址码不得重复,系统初始化时由外部引脚读入。将标识符ID9-ID5定义为源地址,ID4-ID0定义为目的地址,本协议中从模块的目的地址全填0,表示数据是广播数据,所有节点都可接收,主模块中目的地址根据要进行通信目的模块的地址确定。本通信协议的数据帧格式详见表2。
表2 数据帧格式
理论上源地址和目的地址的范围都是0~31,但由于CAN协议中规定标识符前7位不能全为显性位,所以源地址不能为31,这时实际节点只有31个(0~30)。因此每个系统所含的模块不超过31个。所以源地址和目的地址的范围缩减到0~30。同时上位监控机也要占用一个地址,因此系统中的电源模块不超过30个,设计时根据节点的优先权高低从小到大分配节点地址。ID10位定义为主模块识别码,该位主模块为隐性位,从模块为显性位,以保证主模块通信优先。模块的地址码决定发送数据的优先级。主模块向总线发送的数据有两种:一种是目的地址全部填0的广播数据另一种是包含特定目的地址的非广播数据。
协议中一帧数据最多能传送8个字节,对于充电机控制系统来说已经足够用了,本系统只用到其中的前5个字节,其余3个节字可用于以后的扩展使用,因此未定义多帧传输方式。
从模块以广播形式向总线发送数据,同时回收自己发送的数据,若检测到所发送与所收到的数据不符,则立即重新发送上一帧数据。从模块发送信息的顺序由主模块的发出的指令决定,以免在总线通信繁忙时优先级较低的模块始终得不到总线通信权。指令的发送顺序按照各从模块的地址顺序进行,即地址较低的从模块首先获得指令,得以发送自己的地址码和电流、温度采样值。如发生冲突,则由CAN控制器自动根据模块的优先级调整发送顺序,在CAN的底层协议中有完善的优先级仲裁算法,因此应用层协议不必考虑此类问题。
对于每个模块,上电1s后若未收到任何通信信息,则按计算延时发送自身的地址码和温度电流采样值。延时时间的计算为[6]:
tdelay=T×ADD
其中:tdelay-为延时发送时间
T-为单位延时时间常数,该值根据通信速率定义可以取1个位周期,在波特率为100kHz时为10μs
ADD-为模块地址编码。
主模块是ID10=0的模块,因此具有最高的优先级。上电后主模块首先向总线广播发送自身的地址码和温度电流采样值,然后即按顺序向从机发送指令,等待从机的回答。主机1秒钟后若未收到任何通信信息则认为该模块出错,发出报警。同样从机1s后若未收到主机任何通信信息则认为主机出错,按照源地址优先级由其余模块中地址最低的模块充当主模块,并将其ID10由1改为0,以获得最高通信优先权。
各模块检测到自身故障时,将切断输出,退出通信,并向上位机报警,同时发出声光报警。
5 结束语
本文中所介绍的CAN高层通信协议,结构简单、使用灵活、可靠性极高,实现也比较容易。很适合在节点数不多、通信可靠性要求高、控制结构较简单的小型控制系统中应用,具有一定的实用价值
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)