文档库 最新最全的文档下载
当前位置:文档库 › CANOPEN从站协议在stm32f103zet6单片机上的实现-给人

CANOPEN从站协议在stm32f103zet6单片机上的实现-给人

多机通信协议规范

通信协议 来自中国工控网 所谓通信协议是指通信双方的一种约定。约定包括对数据格式、同步方式、传送速度、传送步骤、 检纠错方式以及控制字符定义等问题做出统一规定,通信双方必须共同遵守。因此,也叫做通信控制规程,或称传输控制规程,它属于ISO'S OSI七层参考模型中的数据链路层。 目前,采用的通信协议有两类:异步协议和同步协议。同步协议又有面向字符和面向比特以及面向 字节计数三种。其中,面向字节计数的同步协议主要用于DEC公司的网络体系结构中。 串行通讯简单认识 串行通讯的基本概念:与外界的信息交换称为通讯。基本的通讯方式有并行通讯和串行通讯两种。 一条信息的各位数据被同时传送的通讯方式称为并行通讯。并行通讯的特点是:各数据位同时传送,传送速度快、效率高,但有多少数据位就需多少根数据线,因此传送成本高,且只适用于近距离(相距 数米)的通讯。 一条信息的各位数据被逐位按顺序传送的通讯方式称为串行通讯。串行通讯的特点是:数据位传送,传按位顺序进行,最少只需一根传输线即可完成,成本低但送速度慢。串行通讯的距离可以从几米到几 千米。 根据信息的传送方向,串行通讯可以进一步分为单工、半双工和全双工三种。信息只能单向传送为 单工;信息能双向传送但不能同时双向传送称为半双工;信息能够同时双向传送则称为全双工。 串行通讯又分为异步通讯和同步通讯两种方式。在单片机中,主要使用异步通讯方式。 MCS_51单片机有一个全双工串行口。全双工的串行通讯只需要一根输出线和一根输入线。数据的输 出又称发送数据(TXD),数据的输入又称接收数据(RXD)。串行通讯中主要有两个技术问题,一个是数 据传送、另一个是数据转换。数据传送主要解决传送中的标准、格式及工作方式等问题。数据转换是指 数据的串并行转换。具体说,在发送端,要把并行数据转换为串行数据;而在接收端,却要把接收到的 串行数据转换为并行数据。 单工、半双工和全双工的定义 如果在通信过程的任意时刻,信息只能由一方A传到另一方B,则称为单工。 如果在任意时刻,信息既可由A传到B,又能由B传A,但只能由一个方向上的传输存在,称为半双工传输如果在任意时刻,线路上存在A到B和B到A的双向信号传输,则称为全双工。 电话线就是二线全双工信道。由于采用了回波抵消技术,双向的传输信号不致混淆不清。双工信道有时也发信道分开,采用分离的线路或频带传输相反方向的信号,如回线传输。 --------> <--------> --------> A---------B A----------B A---------B <-------- 单工半双工全双工

单片机串口通信协议程序

#include #include #define R55 101 #define RAA 202 #define RLEN 203 #define RDATA 104 #define RCH 105 //#define unsigned char gRecState=R55; unsigned char gRecLen; unsigned char gRecCount; unsigned char RecBuf[30]; unsigned char gValue; void isr_UART(void) interrupt 4 using 1 { unsigned char ch; unsigned char i; unsigned char temp; if (RI==1) { ch=SBUF; switch(gRecState) { case R55: // wait 0x55 if (ch==0x55) gRecState=RAA; break;

case RAA: if (ch==0xaa) gRecState=RLEN; else if (ch==0x55) gRecState=RAA; else gRecState=R55; break; case RLEN: gRecLen=ch; gRecCount=0; gRecState=RDATA; break; case RDATA: RecBuf[gRecCount]=ch; gRecCount++; if (gRecCount>=gRecLen) { gRecState=RCH; } break; case RCH: temp=0; for(i=0;i

设计单片机通讯协议论文(非常经典)

如何设计单片机常用通信 协议论文

目录 1.自定义数据通信协议 (3) 2.上位机和下位机中的数据发送 (3) 3.下位机中的数据接收和协议解析 (4) 4.上位机中的数据接收和命令处理 (8) 5.总结 (9)

单片机通信协议现在大部分的仪器设备都要求能过通过上位机软件来操作,这样方便调试,利于操作。其中就涉及到通信的过程。在实际制作的几个设备中,笔者总结出了通信程序的通用写法,包括上位机端和下位机端等。 1.自定义数据通信协议 这里所说的数据协议是建立在物理层之上的通信数据包格式。所谓通信的物理层就是指我们通常所用到的RS232、RS485、红外、光纤、无线等等通信方式。在这个层面上, 底层软件提供两个基本的操作函数:发送一个字节数据、接收一个字节数据。所有的数据协议全部建立在这两个操作方法之上。通信中的数据往往以数据包的形式进行传送的,我们把这样的一个数据包称作为一帧数据。类似于网络通信中的TCPIP协议一般,比较可靠的通信协议往往包含有以下几个组成部分:帧头、地址信息、数据类型、数据长度、数据块、校验码、帧尾。 帧头和帧尾用于数据包完整性的判别,通常选择一定长度的固定字节组成,要求是在整个数据链中判别数据包的误码率越低越好。减小固定字节数据的匹配机会,也就是说使帧头和帧尾的特征字节在整个数据链中能够匹配的机会最小。通常有两种做法,一、减小特征字节的匹配几率。二、增加特征字节的长度。通常选取第一种方法的情况是整个数据链路中的数据不具有随即性,数据可预测,可以通过人为选择帧头和帧尾的特征字来避开,从而减小特征字节的匹配几率。使用第二种方法的情况更加通用,适合于数据随即的场合。通过增加特征字节的长度减小匹配几率,虽然不能够完全的避免匹配的情况,但可以使匹配几率大大减小,如果碰到匹配的情况也可以由校验码来进行检测,因此这种情况在绝大多说情况下比较可靠。 地址信息主要用于多机通信中,通过地址信息的不同来识别不同的通信终端。在一对多的通信系统中,可以只包含目的地址信息。同时包含源地址和目的地址则适用于多对多的通信系统。 数据类型、数据长度和数据块是主要的数据部分。数据类型可以标识后面紧接着的是命令还是数据。数据长度用于指示有效数据的个数。 校验码则用来检验数据的完整性和正确性。通常对数据类型、数据长度和数据块三个部分进行相关的运算得到。最简单的做法可是对数据段作累加和,复杂的也可以对数据进行CR C运算等等,可以根据运算速度、容错度等要求来选取。 2.上位机和下位机中的数据发送 物理通信层中提供了两个基本的操作函数,发送一个字节数据则为数据发送的基础。数据 包的发送即把数据包中的左右字节按照顺序一个一个的发送数据而已。当然发送的方

CANopen协议讲解

根据DS301的内容进行介绍 1、CAN总线 CAN标准报文

2、CANopen应用层协议 CANopen 协议不针对某种特别的应用对象,具有较高的配置灵活性,高数据传输能力,较低的实现复杂度。同时,CANopen 完全基于CAN 标准报文格式,而无需扩展报文的支持,最多支持127个节点,并且协议开源。 一个标准的CANopen 节点(下图),在数据链路层之上,添加了应用层。该应用层一般由软件实现,和控制算法共同运行在实时处理单元内。 一个标准的CANopen 节点 CANopen 应用层协议细化了CAN 总线协议中关于标识符的定义。定义标准报文的11 比特标识符中高4 比特为功能码,后7 比特为节点号,重命名为通讯对象标识符(COB-ID)。功能码将所有的报文分为7个优先级,按照优先级从高至低依次为: 网络命令报文(NMT) 同步报文(SYNC) 紧急报文(EMERGENCY) 时间戳(TIME)

过程数据对象(PDO) 服务数据对象(SDO) 节点状态报文(NMT Err Control) 7 位的节点号则表明CANopen 网络最多可支持127个节点共存(0 号节点为主站)。 下表给出了各报文的COB-ID 范围。 NMT 命令为最高优先级报文,由CANopen 主站发出,用以更改从节点的运行状态。 SYNC 报文定期由CANopen 主站发出,所有的同步PDO 根据SYNC报文发送。 EMERGENCY报文由出现紧急状态的从节点发出,任何具备紧急事件监控与

处理能力的节点会接收并处理紧急报文。

TIME 报文由CANopen 主站发出,用于同步所有从站的内部时钟。 PDO 分为4 对发送和接收PDO,每一个节点默认拥有4对发送PDO 和接收PDO,用于过程数据的传递。 SDO 分为发送SDO 和接收SDO,用于读写对象字典。 MT Error Control报文由从节点发出,用以监测从节点的运行状态。 状态机 CANopen 的每一个节点都维护了一个状态机。该状态机的状态决定了该节点当前支持的通讯方式以及节点行为。 初始化时,节点将自动设置自身参数和CANopen 对象字典,发出节点启动报文,并不接收任何网络报文。 初始化完成后,自动进入预运行状态。在该状态,节点等待主站的网络命令,接收主站的配置请求,因此可以接收和发送除了PDO 以外的所有报文。 运行状态为节点的正常工作状态,接收并发送所有通讯报文。 停止状态为一种临时状态,只能接收主站的网络命令,以恢复运行或者重新启动。

51单片机通信协议

单片机通信协议 现在大部分的仪器设备都要求能过通过上位机软件来操作,这样方便调试,利于操作。其中就涉及到通信的过程。在实际制作的几个设备中,笔者总结出了通信程序的通用写法,包括上位机端和下位机端等。 1.自定义数据通信协议 这里所说的数据协议是建立在物理层之上的通信数据包格式。所谓通信的物理层就是指我们通常所用到的RS232、RS485、红外、光纤、无线等等通信方式。在这个层面上,底层软件提供两个基本的操作函数:发送一个字节数据、接收一个字节数据。所有的数据协议全部建立在这两个操作方法之上。 通信中的数据往往以数据包的形式进行传送的,我们把这样的一个数据包称作为一帧数据。类似于网络通信中的TCPIP协议一般,比较可靠的通信协议往往包含有以下几个组成部分:帧头、地址信息、数据类型、数据长度、数据块、校验码、帧尾。 帧头和帧尾用于数据包完整性的判别,通常选择一定长度的固定字节组成,要求是在整个数据链中判别数据包的误码率越低越好。减小固定字节数据的匹配机会,也就是说使帧头和帧尾的特征字节在整个数据链中能够匹配的机会最小。通常有两种做法,一、减小特征字节的匹配几率。二、增加特征字节的长度。通常选取第一种方法的情况是整个数据链路中的数据不具有随即性,数据可预测,可以通过人为选择帧头和帧尾的特征字来避开,从而减小特征字节的匹配几率。使用第二种方法的情况更加通用,适合于数据随即的场合。通过增加特征字节的长度减小匹配几率,虽然不能够完全的避免匹配的情况,但可以使匹配几率大大减小,如果碰到匹配的情况也可以由校验码来进行检测,因此这种情况在绝大多说情况下比较可靠。 地址信息主要用于多机通信中,通过地址信息的不同来识别不同的通信终端。在一对多的通信系统中,可以只包含目的地址信息。同时包含源地址和目的地址则适用于多对多的通信系统。 数据类型、数据长度和数据块是主要的数据部分。数据类型可以标识后面紧接着的是命令还是数据。数据长度用于指示有效数据的个数。 校验码则用来检验数据的完整性和正确性。通常对数据类型、数据长度和数据块三个部分进行相关的运算得到。最简单的做法可是对数据段作累加和,复杂的也可以对数据进行CRC运算等等,可以根据运算速度、容错度等要求来选取。 2.上位机和下位机中的数据发送 物理通信层中提供了两个基本的操作函数,发送一个字节数据则为数据发送的基础。数据包的发送即把数据包中的左右字节按照顺序一个一个的发送数据而已。当然发送的方法也有不同。 在单片机系统中,比较常用的方法是直接调用串口发送单个字节数据的函数。这种方法的缺点是需要处理器在发送过程中全程参与,优点是所要发送的数据能够立即的出现在通信线路上,能够立即被接收端接收到。另外一种方法是采用中断发送的方式,所有需要发送的数据被送入一个缓冲区,利用发送中断将缓冲区中的数据发送出去。这种方法的优点是占用处理器资源小,但是可能出现需要发送的数据不能立即被发送的情况,不过这种时延相当的小。对于51系列单片机,比较倾向于采用直接发送的方式,采用中断发送的方式比较占用RAM资源,而且对比直接发送来说也没有太多的优点。以下是51系列单片机中发送单个字节的函数。 v oid SendBy te(unsigned char ch) { SBUF = ch; while(TI == 0); TI = 0; }

modbus 协议 及 modbus RTU 的 C51 单片机 程序

modbus 协议及modbus RTU 的C51 单片机程序 Modbus通讯协议 Modbus协议最初由Modicon公司开发出来,在1979年末该公司成为施耐德自动化(Schneider Automation)部门的一部分,现在Modbus已经是工业领域全球最流行的协议。此协议支持传统的RS-232、RS-422、RS-485和以太网设备。许多工业设备,包括PLC,DCS,智能仪表等都在使用Modbus协议作为他们之间的通讯标准。有了它,不同厂商生产的控制设备可以连成工业网络,进行集中监控。 当在网络上通信时,Modbus协议决定了每个控制器须要知道它们的设备地址,识别按地址发来的消息,决定要产生何种行动。如果需要回应,控制器将生成应答并使用Modbus协议发送给询问方。 Modbus 协议包括ASCII、RTU、TCP等,并没有规定物理层。此协议定义了控制器能够认识和使用的消息结构,而不管它们是经过何种网络进行通信的。标准的Modicon控制器使用RS232C实现串行的Modbus。Modbus的ASCII、RTU协议规定了消息、数据的结构、命令和就答的方式,数据通讯采用Maser/Slave方式,Master端发出数据请求消息,Slave端接收到正确消息后就可以发送数据到Master端以响应请求;Master端也可以直接发消息修改Slave端的数据,实现双向读写。 Modbus 协议需要对数据进行校验,串行协议中除有奇偶校验外,ASCII模式采用LRC校验,RTU模式采用16位CRC校验,但TCP模式没有额外规定校验,因为TCP协议是一个面向连接的可靠协议。另外,Modbus采用主从方式定时收发数据,在实际使用中如果某Slave 站点断开后(如故障或关机),Master端可以诊断出来,而当故障修复后,网络又可自动接通。因此,Modbus协议的可靠性较好。 下面我来简单的给大家介绍一下,对于Modbus的ASCII、RTU和TCP协议来说,其中TCP 和RTU协议非常类似,我们只要把RTU协议的两个字节的校验码去掉,然后在RTU协议的开始加上5个0和一个6并通过TCP/IP网络协议发送出去即可。所以在这里我仅介绍一下Modbus的ASCII和RTU协议。 下表是ASCII协议和RTU协议进行的比较: 协议 开始标记 结束标记

51串口通信协议(新型篇)

51串口通信协议(新型篇) C51编程:这是网友牛毅编的一个C51串口通讯程序! //PC读MCU指令结构:(中断方式,ASCII码表示) //帧:帧头标志|帧类型|器件地址|启始地址|长度n|效验和|帧尾标志 //值: 'n' 'y'| 'r' | 0x01 | x | x | x |0x13 0x10 //字节数: 2 | 1 | 1 | 1 | 1 | 1 | 2 //求和: ///////////////////////////////////////////////////////////////////// //公司名称:*** //模块名:protocol.c //创建者:牛毅 //修改者: //功能描述:中断方式:本程序为mcu的串口通讯提供(贞结构)函数接口,包括具体协议部分 //其他说明:只提供对A T89c51具体硬件的可靠访问接口 //版本:1.0 //信息:QQ 75011221 ///////////////////////////////////////////////////////////////////// #include #include //预定义 //帧 #define F_ST1 0x6e //帧头标志n #define F_ST2 0x79 //帧头标志y #define F_R 0x72 //帧类型读r #define F_W 0x77 //帧类型写w #define F_D 0x64 //帧类型数据帧d #define F_B 0x62 //帧类型写回应帧b #define F_C 0x63 //帧类型重发命令帧c #define F_Q 0x71 //帧类型放弃帧q #define F_ADDR 0x31 //器件地址0-9 #define F_END 0x7a //帧尾标志z #define F_SPACE 0x30 //空标志0 #define F_ERR1 0x31 //错误标志1,flagerr 1 #define F_ERR2 0x32 //错误标志2 2 //常数 #define S_MAXBUF 16 //接收/发送数据的最大缓存量 #define FIELD_MAXBUF 48 //最小场缓存,可以大于48字节,因为协议是以20字节为

CANopen协议介绍

CANopen ?????????CAN-bus????

?? 1??? (1) 2?CAL ?? (2) 3?CANopen (3) 3ˊ1 ????OD (3) 3ˊ2 CANopen?? (4) 3ˊ3 CANopen8?Н??▊ (6) 3ˊ4 CANopen????? (8) 3ˊ5 CANopen boot-up?? (8) 3ˊ6 CANopen?????? (9) 4??? (18) 5??? (19)

1??? ?OSI????????????????????????1???ˊ????2??????????7?????????????????????????????3????????4???????г????5???????6?????????? CAN?Controller Area Network????????Н??1???2???ISO11898?????┉??Ё????????????????????????????Software?????Firmware????????????? ???CAN??Н?ˊ?????????????????????????????????НCAN??Ё?11/29?????8?????????????CAN??????????Ё?????????????????????????????CAN??????????????????CAN ??Ё????????????????????????????????ˊ???z ????Application layer?????Ё??????????????????????? z ?????Communication profile???????????????Н??Н???????z ?????Device proflile?????????????????? ??????????CAN??????CAL?????CAL?????CANopen???CANopen ???CAN-in-Automation(CiA)?Н???П?????????Й?????????????????CANopen?????????CAN?????Ё?:??????????????????????????????????????????????????????????????ā????ā???Ё?????ā????ā?Н????????????????????CANopen????????????????????????? ?OSI??Ё?CAN???CANopen??П?????????? C iA DS P-401C iA DS P-404 CiA DSP-xxx Application C hip Data Link Physical Layer ?1.1 CAN?CANopen???OSI????Ё?????

单片机协议

单片机通信协议 通讯参数数据传输格式数据通讯举例说明协议说明 一、通讯参数 通讯参数包括数据位,停止位,波特率、校验方式。 数据位、停止位、波特率由单片机决定。组态软件中的设定和单片机一致即可。校验方式为和校验。 二、数据传输格式 格式1、组态软件读数据命令格式: 格式2、单片机应答读数据格式(正确): 格式3、组态软件写数据命令格式: 格式4、组态软件位操作写数据命令格式: 格式5、单片机应答读数据格式 三、数据通讯举例说明 1、读数据 组态软件:发送读数据命令(格式1) 单片机:响应读数据命令 正确:返回(格式2) 2、写数据 组态软件:发送写数据命令(格式3)

组态软件:发送开关量写命令(格式4) 单片机:响应写数据命令 正确:返回(格式5) 四、协议说明 数据传输:所有数据均为16进制数 Sta: 设备地址1字节 R:读标志1字节(0x52) W:写标志1字节(0x57) B:位操作写标志1字节(0x42) DataType:需要交换的数据类型,1字节。1,字节;2,字,3,浮点型。 DataNum:要读取的数据的数量,1字节。 DataAddr:为数据偏移地址2字节,低字节在前,高字节在后。数据偏移地址以字节为单位。 Data:实际传输的数据,低字节在前,高字节在后。 DataLong: 单片机返回Data的字节数,2字节,低字节在前,高字节在后。 BitOffset:位操作写命令时,在字节中的位的偏移(0~7)。 LRC:为从第一个字节至LRC前的所有字节的异或值,1字节。 EndCode:

如果结束码EndCode为异常值,则该数据侦的数据无效。

单片机通信协议处理解析

单片机通信协议处理 现在大部分的仪器设备都要求能过通过上位机软件来操作,这样方便调试,利于操作。其中就涉及到通信的过程。在实际制作的几个设备中,笔者总结出了通信程序的通用写法,包括上位机端和下位机端等 1. 自定义数据通信协议 这里所说的数据协议是建立在物理层之上的通信数据包格式。所谓通信的物理层就是指我们通常所用到的 RS232、 RS485、红外、光纤、无线等等通信方式。在这个层面上,底层软件提供两个基本的操作函数:发送一个字节数据、接收一个字节数据。所有的数据协议全部建立在这两个操作方法之上。 通信中的数据往往以数据包的形式进行传送的,我们把这样的一个数据包称作为一帧数据。类似于网络通信中的 TCPIP 协议一般,比较可靠的通信协议往往包含有以下几个组成部分:帧头、地址信息、数据类型、数据长度、数据块、校验码、帧尾。 帧头和帧尾用于数据包完整性的判别,通常选择一定长度的固定字节组成,要求是在整个数据链中判别数据包的误码率越低越好。减小固定字节数据的匹配机会,也就是说使帧头和帧尾的特征字节在整个数据链中能够匹配的机会最小。通常有两种做法,一、减小特征字节的匹配几率。二、增加特征字节的长度。通常选取第一种方法的情况是整个数据链路中的数据不具有随即性,数据可预测,可以通过人为选择帧头和帧尾的特征字来避开,从而减小特征字节的匹配几率。使用第二种方法的情况更加通用,适合于数据随即的场合。通过增加特征字节的长度减小匹配几率,虽然不能够完全的避免匹配的情况,但可以使匹配几率大大减小,如果碰到匹配的情况也可以由校验码来进行检测,因此这种情况在绝大多说情况下比较可靠。 地址信息主要用于多机通信中,通过地址信息的不同来识别不同的通信终端。在一对多的通信系统中,可以只包含目的地址信息。同时包含源地址和目的地址则适用于多对多的通信系统。

十二.PC 机与单片机通信(RS232 协议)

十二.PC 机与单片机通信(RS232 协议) [实验任务] 单片机串口通信的应用,通过串口,我们的个人电脑和单片机系统进行通信。个人电脑作为上位机,向下位机单片机系统发送十六进制或者ASCLL码,单片机 系统接收后,用LED显示接收到的数据和向上位机发回原样数据。 [硬件电路图] [实验原理] RS-232是美国电子工业协会正式公布的串行总线标准,也是目前最常用的串 行接口标准,用来实现计算机与计算机之间、计算机与外设之间的数据通讯。RS-232串行接口总线适用于:设备之间的通讯距离不大于15m,传输速率最大为 20kBps。RS-232协议以-5V-15V表示逻辑1;以+5V-15V 表示逻辑0。我们是 用MAX232芯片将RS232电平转换为TTL电平的。一个完整的RS-232接口有22 根线,采用标准的25芯插头座。我们在这里使用的是简化的9芯插头座。 注意我们在这里使用的晶振是11.0592M的,而不是12M。因为波特率的设置 需要11.0592M的。 “串口调试助手V2.1.exe”软件的使用很简单,只要将串口选择‘CMO1’波特率设置为‘9600’数据位为8 位。打开串口(如果关闭)。然后在发送区里输入要发送的数据,单击手动发送就将数据发送出去了。注意,如果选中‘十六进制发送’那么发送的数据是十六进制的,必须输入两位数据。如果没有选中, 数字二进制Px0~Px7 Abcdefg p 十六进制 0 00111111 00000011 11111100 0xco 1 00000110 10011111 01100000 0xf9

[C语言源程序] #include "reg52.h" //包函8051 内部资源的定义 unsigned char dat; //用于存储单片机接收发送缓冲寄存器SBUF里面的内容 sbit gewei=P2^6; //个位选通定义 sbit shiwei=P2^5; //十位选通定义 sbit baiwei=P2^4; unsigned char code table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1, 0x86,0x8e,0x40,}; void Delay(unsigned int tc) //延时程序 { while( tc != 0 ) {unsigned int i; for(i=0; i<100; i++); tc--;} } void LED() //LED显示接收到的数据(十进制) { shiwei=0; P0=table[dat/10]; Delay(10); shiwei=1; gewei=0; P0=table[dat%10]; Delay(10); gewei=1; baiwei=0; P0=table[dat/100]; Delay(10); baiwei=1; } ///////功能:串口初始化,波特率9600,方式1///////// void Init_Com(void) { TMOD = 0x20; PCON = 0x00; SCON = 0x50; TH1 = 0xFd;

通用单片机通讯协议ascii

组态王与单片机协议 1.通讯口设置: 通讯方式:RS-232,RS-485,RS-422均可。 波特率:由单片机决定(2400,4800,9600and19200bps)。 字节数据格式:由单片机决定。 注意:在组态王中设置的通讯参数如波特率,数据位,停止位,奇偶校验必须与单片机编程中的通讯参数一致 2.在组态王中定义设备地址的格式 格式:##.# 前面的两个字符是设备地址,范围为0-255,此地址为单片机的地址,由单片机中的程序决定; 后面的一个字符是用户设定是否打包,“0”为不打包、“1”为打包,用户一旦在定义设备时确定了打包,组态王将处理读下位机变量时数据打包的工作。 3.在组态王中定义的寄存器格式 注意:在组态王中定义变量时,一个X寄存器根据所选数据类型(BYTE,UINT,FLOAT)的不同分别占用一个、两个,四个字节,定义不同的数据类型要注意寄存器后面的地址,同一数据区内不可交叉定义不同数据类型的变量。为提高通讯速度建议用户使用连续的数据区。 例如, 1、在单片机中定义从地址0开始的数据类型为BYTE型的变量: 则在组态王中定义相应的变量的寄存器为X0、X1、X2、X3、X4。。。。。。。。,数据类型为BYTE,每个变量占一个字节 2、在单片机中定义从地址100开始的数据类型为UINT型的变量: 则在组态王中定义相应的变量的寄存器为X100、X102、X104、X106、X108。。。。。。。。,数据类型UINT,每个变量占两个字节

3、在单片机中定义从地址200开始的数据类型为FLOAT 型的变量: 则在组态王中定义相应的变量的寄存器为X200、X20 4、X208、X212。。。。。。。, 数据类型FLOAT ,每个变量占四个字节 3.组态王与单片机通讯的命令格式: 字头:1字节1个ASCII 码,40H 设备地址: 1字节2个ASCII 码,0—255(即0---0x0ffH ) 标志:1字节2个ASCII 码,bit0~bit7, bit0= 0:读,bit0= 1:写。 bit1= 0:不打包。 bit3bit2 = 00,数据类型为字节。 bit3bit2 = 01,数据类型为字。 bit3bit2 = 1x,数据类型为浮点数。 数据地址: 2字节4个ASCII 码,0x0000~0xffff 数据字节数:1字节2个ASCII 码,1—100,实际读写的数据的字节数。 数据…:为实际的数据转换为ASCII 码,个数为字节数乘2。 异或:异或从设备地址到异或字节前,异或值转换成2个ASCII 码 CR :0x0d 。 通讯尝试恢复命令(COMERROR ),请求地址为0的一个BYTE 数据 3.1.上位机发送读命令 下位机应答:若正常: 若不正常: 100,数据类型为字节,不打包。组态王所 若正确:

CAN总线与CANopen协议

CAN总线与CANOpen协议 一CAN总线简介 1.1 引言 在20世纪90年代的汽车研究领域,采用总线分布式控制获得了很大的成功。用户要求汽车的控制系统具有优越的性能以保证汽车的安全性和舒适性,因此越来越多的具有超强计算能力的电子设备加载在汽车上。这就要求不同的电子设备之间能够进行通信和数据交换,以达到信息共享协调工作的目的。德国的博世公司(Bosch)率先将CAN总线(Controller Area Network)应用于汽车电子控制系统,解决了控制系统的部件之间的以及控制系统与测试设备主机的数据交换问题,替代了原有网络(用于车体控制的LIN网络、用于厂内环境控制的MOST 网络及原有车内通信的Flecray网络等)实现的功能。由于其独特的设计思想和高可靠性,在不同总线标准的竞争中获得了广泛的认可,并逐渐成为汽车最基本的控制网络,广泛应用于火车、机器人、楼宇控制、机械制造、数字机床、医疗器械、自动化仪表等领域。 图1.1 早期的ECU(汽车电子控制单元)通信 CAN总线是一种串行通信协议,具有较高的通信速率的和较强的抗干扰能力,可以作为现场总线应用于电磁噪声较大的场合。由于CAN总线本身只定义ISO/OSI模型中的第一层(物理层)和第二层(数据链路层),通常情况下CAN 总线网络都是独立的网络,所以没有网络层。在实际使用中,用户还需要自己定义应用层的协议,因此在CAN总线的发展过程中出现了各种版本的CAN应用

层协议,现阶段最流行的CAN应用层协议主要有CANopen、DeviceNet和J1939等协议。 图1.2 基于总线(CAN)的ECU通信 1.2 CAN总线的特点 CAN总线并不采用物理地址的模式传送数据,而是每个消息有自己的标识符用来识别总线上的节点。标识符主要有2个功能:消息滤波和消息优先级确定。节点利用标识符确定是否接收总线上的传送的消息当有2个或更多节点需要传送数据时,根据标识符确定消息的优先级。总线访问采用多主原则,所有节点都可以作为主节点占用总线。CAN总线相对于Ethernet具有非破坏性避免总线冲突的特点(CSMA/CA协议,与CSMA/CD协议相似),这种方式可以保证在产生总线冲突的情况下,具有更高优先级的信息没有被延时传输。 其物理传输层详细和高效的定义,使得CAN总线具有其它总线无法达到的优势,注定其在工业现场总线中占有不可动摇的地位,CAN总线通信主要具有如下所示的优势和特点: (1)CAN总线上任意节点均可在任意时刻主动的向其它节点发起通信,节点没有主从之分,但在同一时刻优先级高的节点能获得总线的使用权,在高优先级的节点释放总线后,任意节点都可使用总线; (2)CAN总线传输波特率为5Kbps~1Mbps,在5Kbps的通信波特率下最远传输距离可以达到10Km,即使在1Mbps的波特率下也能传输40m的距离。在1Mbps波特率下节点发送一帧数据最多需要134μs; (3)CAN总线采用载波监听多路访问、逐位仲裁的非破坏性总线仲裁技术。在节点需要发送信息时,节点先监听总线是否空闲,只有节点监听到总线空

基于Modbus协议实现单片机与PLC之间的通讯

基于Modbus协议实现单片机与PLC之间的通讯 来源:PLC&FA 作者:蔡晓燕赵兴群万遂人董鹏云 关键词:可编程控制器 Modbus 通讯协议 1 引言 HMI(人机界面)以其体积小,高性能,强实时等特点,越来越多的应用于工业自动化系统和设备中。它有字母、汉字、图形和图片等不同的显示,界面简单友好。配有长寿命的薄膜按钮键盘,操作简单。它一般采用具有集成度高、速度快、高可靠且价格低等优点的单片机[1]作为其核心控制器,以实现实时快速处理。PLC和单片机结合不仅可以提PLC的数据处理能力,还可以给用户带来友好简洁的界面。本文以Modbus通讯协议为例,详细讨论了一个人机系统中,如何用C51实现单片机和PLC之间通讯的实例。 2 Modbus通讯协议[4] Modbus协议是应用于电子控制器上的一种通用语言。通过此协议,控制器相互之间、控制器经由网络和其它设备之间可以通信。 Modbus协议提供了主—从原则,即仅一设备(主设备)能初始化传输(查询)。其它设备(从设备)根据主设备查询提供的数据作出相应反应。主设备查询的格式:设备地址(或广播,此时不需要回应)、功能代码、所有要发送的数据、和一错误检测域。从设备回应消息包括确认地址、功能码、任何要返回的数据、和一错误检测域。如果在消息接收过程中发生一错误,或从设备不能执行其命令,从设备将建立一错误消息并把它作为回应发送出去。 控制器能设置为两种传输模式:ASCII和RTU,在同样的波特率下,RTU可比ASCII方式传送更多的数据,所以采用KTU模式。 (1) 典型的RTU消息帧 典型的RTU消息帧如表1所示。

RTU消息帧的地址域包含8bit。可能的从设备地址是0...127(十进制)。其中地址0是用作广播地址,以使所有的从设备都能认识。主设备通过将要联络的从设备的地址放入消息中的地址域来选通从设备。当从设备发送回应消息时,它把自己的地址放入回应的地址域中,以便主设备知道是哪一个设备作出回应。 RTU消息帧中的功能代码域包含了8bits,当消息从主设备发往从设备时,功能代码域将告之从设备需要执行哪些行为;当从设备回应时,它使用功能代码域来指示是正常回应(无误)还是有某种错误发生(称作异议回应,一般是将功能码的最高位由0改为1)。 从主设备发给从设备消息的数据域包含附加的信息:从设备必须用于进行执行由功能代 码所定义的行为。这包括了像不连续的寄存器地址,要处理项的数目,域中实际数据字节数。如果没有错误发生,从从设备返回的数据域包含请求的数据。如果有错误发生,此域包含一异议代码,主设备应用程序可以用来判断采取下一步行动。 当选用RTU模式作字符帧时,错误检测域包含一16Bits值(用两个8位的字符来实现)。错误检测域的内容是通过对消息内容进行循环冗长检测(CRC)方法得出的。CRC域附加在消息的最后,添加时先是低字节然后是高字节。 (2) 所有的Modbus功能码 Modbus的功能码定义如表2所示。

手把手教你学51单片机之十八RS485通信与Modbus协议

在工业控制、电力通讯、智能仪表等领域,通常情况下是采用串口通信的方式 进行数据交换。最初采用的方式是 RS232 接口,由于工业现场比较复杂,各 种电气设备会在环境中产生比较多的电磁干扰,会导致信号传输错误。除此之外, RS232 接口只能实现点对点通信,不具备联网功能,最大传输距离也只能达到 几十米,不能满足远距离通信要求。而 RS485 则解决了这些问题,数据信号采用 差分传输方式,可以有效的解决共模干扰问题,最大距离可以到1200 米,并且 允许多个收发设备接到同一条总线上。随着工业应用通信越来越多, 1979 年施耐 德电气制定了一个用于工业现场的总线协议 Modbus 协议,现在工业中使用 RS485 通信场合很多都采用 Modbus 协议,本节课我们要讲解一下 RS485 通信和Modbus 协议。 单单使用一块KST-51 开发板是不能够进行RS485 实验的,应很多同学的要求,把这节课作为扩展课程讲一下,如果要做本课相关实验,需要自行购买USB 转 485 通信模块。 18.1 RS485通信 实际上在 RS485 之前 RS232 就已经诞生,但是RS232 有几处不足的地方: 1、接口的信号电平值较高,达到十几V ,容易损坏接口电路的芯片,而且和TTL 电平不兼容,因此和单片机电路接起来的话必须加转换电路。 2、传输速率有局限,不可以过高,一般到几十Kb/s 就到极限了。 3、接口使用信号线和GND 与其他设备形成共地模式的通信,这种共地模式传输容易产生 干扰,并且抗干扰性能也比较弱。 4、传输距离有限,最多只能通信几十米。 5、通信的时候只能两点之间进行通信,不能够实现多机联网通信。 针对 RS232 接口的不足,就不断出现了一些新的接口标准,RS485 就是其中之一,他具备 以下的特点: 1、我们在讲A/D 的时候,讲过差分信号输入的概念,同时也介绍了差分输入的好处,最大 的优势是可以抑制共模干扰。尤其工业现场的环境比较复杂,干扰比较多,所以通信如果采用的是差分方式,就可以有效的抑制共模干扰。而RS485 就是一种差分通信方式,它的通 信线路是两根,通常用 A 和B 或者D+ 和 D- 来表示。逻辑“ 1”以两线之间的电压差为+(0.2~6)V 表示,逻辑“0”以两线间的电压差为-(0.2~6)V来表示,是一种典型的差分通信。 2、 RS485通信速度快,最大传输速度可以达到10Mb/s以上。 3、RS485 内部的物理结构,采用的是平衡驱动器和差分接收器的组合,抗干扰能力也大大 增加。 4、传输距离最远可以达到1200 米左右,但是他的传输速率和传输距离是成反比的,只有 在100Kb/s 以下的传输速度,才能达到最大的通信距离,如果需要传输更远距离可以使用中继。

(合同制定方法)单片机与上位机通信协议的制定

(合同制定方法)单片机与上位机通信协议的制定

单片机和上位机通信协议的制定 单片机和上位机的串口通信协议分为上行协议和下行协议,要分别制定!上行协议,即由单片机向上位机发送数据。 下行协议,即由上位机向单片机发送数据。 而通信协议又要分固定长度和不定长度俩种 本文所介绍的协议属于简单的固定字长的通信协议! 下行协议由四个字节构成

上表是简单的上位机对单片机的控制指令 下述函数是C#中封装的串口通信类中的发送函数的封装publicvoidSerSendCommu(byteorderDef,bytedata)//参数1为命令字,参数二为要发送的数 //据,需要时可直接调用 { Byte[]BSendTemp=newByte[SEND_LENTH]; BSendTemp[0]=PRE; BSendTemp[1]=orderDef; BSendTemp[2]=data; BSendTemp[3]=END; this.serialPort1.Write(BSendTemp,0,SEND_LENTH); } 下位机中用中断方式接收字符,本文用的是GCC语言,下面是串口接收数据中断 ISR(USART_RXC_vect)//串口接收中断

{ unsignedcharstatus,data; status=UCSRA;//**首先读取UCSRA的值,再读取UDR值,顺序不能颠倒,否则读取UDR后的UCSRA的 //值即会改变** data=UDR; if(!Uart_RecvFlag)//判断缓存中的数据是否读完,读完则接收指令 { if((status&((1<

can总线与canopen协议

竭诚为您提供优质文档/双击可除can总线与canopen协议 篇一:?canopen协议讲解 根据ds301的内容进行介绍 1、can总线 can标准报文 2、canopen应用层协议 canopen协议不针对某种特别的应用对象,具有较高的配置灵活性,高数据传输能力,较低的实现复杂度。同时,canopen完全基于can标准报文格式,而无需扩展报文的支持,最多支持127个节点,并且协议开源。 一个标准的canopen节点(下图),在数据链路层之上,添加了应用层。该应用层一般由软件实现,和控制算法共同运行在实时处理单元内。 一个标准的canopen节点 canopen应用层协议细化了can总线协议中关于标识符的定义。定义标准报文的11比特标识符中高4比特为功能码,后7比特为节点号,重命名为通讯对象标识符(cob-id)。功能码将所有的报文分为7个优先级,按照优先级从高至低

依次为: 网络命令报文(nmt) 同步报文(sync) 紧急报文(emeRgency) 时间戳(time) 过程数据对象(pdo) 服务数据对象(sdo) 节点状态报文(nmterrcontrol) 7位的节点号则表明canopen网络最多可支持127个节点共存(0号节点为主站)。 下表给出了各报文的cob-id范围。 nmt命令为最高优先级报文,由canopen主站发出,用以更改从节点的运行状态。 sync报文定期由canopen主站发出,所有的同步pdo根据sync报文发送。 emeRgency报文由出现紧急状态的从节点发出,任何具备紧急事件监控与处理能力的节点会接收并处理紧急报文。 time报文由canopen主站发出,用于同步所有从站的内部时钟。 pdo分为4对发送和接收pdo,每一个节点默认拥有4 对发送pdo和接收pdo,用于过程数据的传递。 sdo分为发送sdo和接收sdo,用于读写对象字典。

相关文档
相关文档 最新文档