通用单片机通讯协议ascii
基于ASCII的单片机与组态王通讯设计
命令格式可查阅组态王使用手册。
2 通 信 流 程 图 1 组态 王从 单 片机 读 数 据 过 程 如 图 1所 示 。 )
字 头 HE AD: 1字节 1个 AS I , 0 Cl码 4 H
设备 地 址 : 节 2个 A CI , ~ 5 ( 0 0 0f 1字 S l 0 2 5 即 ~ xf 码 H)
标志: 1字 节 2个 AS l , i bi bt 0:读 , i =1: Cl码 bt 0~ t i 7, 0= bt 0
写 。 i : : 打包 。 i b 2 0 , bt O 不 1 bt i = 0 数据 类 型 为字 节 。 i bt = 1 3 t bt i 0 , 3 2 数据 类 型为 字 。bt bt = X 数 据 类 型为 浮 点 数 。 i i 1, 3 2
单 片 机的 串行 通 信 , 建 监 控 系 统 。 文 完 成 了组 态 王 与 单 片 机 构 本
通 讯 正 常 时下 位 单 片 机 应 答 格 式 为
HA ED 设 备 地 址 # # 蚌或 CR l ( 式 5 格 )
的通 讯 设 汁 , 方 法 设 汁简 单 且 实 时 性 好 , 用 于一 般 用 户 。 该 适 1 组 态 王 与 单 片机 的通 信 协 议
HE AD 设备 地址 标 志 数据 地 址 数据 字 节数 数 据 异 或 CR
通 讯 不 正常 时下 位 单 片机 应 答 为
J A J设备地址 j { HE D 异或 c J( 6) R 格式
其 中
和 舟} 不 同 的数 值 , }为 具体 组 态 王 与 单 片机 通 讯 的
异 或 :异 或 从 设 备 地址 到异 或 字 节前 ,异 或 值 转 换 成 2个
通用单片机通讯协议(ASCII)
1、在单片机中定义从地址0开始的数据类型为BYTE型的变量:
则在组态王中定义相应的变量的寄存器为X0、X1、X2、X3、X4。。。。。。。。,数据类型为BYTE,每个变量占一个字节
2、在单片机中定义从地址100开始的数据类型为UINT型的变量:
则在组态王中定义相应的变量的寄存器为X100、X102、X104、X106、X108。。。。。。。。,数据类型UINT,每个变量占两个字节
bit3bit2 =1x,数据类型为浮点数。
数据地址:2字节4个ASCII码,0x0000~0xffff
数据字节数:1字节2个ASCII码,1—100,实际读写的数据的字节数。
数据…:为实际的数据转换为ASCII码,个数为字节数乘2。
异或:异或从设备地址到异或字节前,异或值转换成2个ASCII码
CR:0x0d。
46
30
30
30
46
30
34
31
30
46
46
46
46
30
30
字头
设备地址15
标志
写操作
浮点型
打包
数据地址15
数据字节数4
数据65535
30
30
0d
异或
若正确:
40
30
46
23
23
37
36
0d
字头
设备地址15
##
异或
若不正确:
40
30
46
2a
2a
37
36
0d
字头
设备地址15
**
异或
5.浮点数格式:
4字节浮点数=第一字节高4位ASCII码+第一字节低4位ASCII码
亚控科技公司提供的通用单片机通讯协议
组态王通用单片机协议(ASCII)概述通用单片机ASCII协议支持单片机与组态王通讯,用户只要按照我们的协议编写单片机通讯程序就可实现与组态王的通讯.组态王设置1、定义组态王设备定义组态王定义设备时请选择:智能模块\单片机\通用单片机ASCII\串口组态王的设备地址定义格式:##.#前面的两个字符是设备地址,范围为0-255,此地址为单片机的地址,由单片机中的程序决定;后面的一个字符是用户设定是否打包,"0"为不打包、"1"为打包,用户一旦在定义设备时确定了打包,组态王将处理读下位机变量时数据打包的工作,与单片机的程序无关.2、组态王通讯通讯方式:RS-232,RS-485,RS-422均可。
波特率:由单片机决定(2400,4800,9600and19200bps)。
注意:在组态王中设置的通讯参数如波特率,数据位,停止位,奇偶校验必须与单片机编程中的通讯参数一致组态王数据词典--变量定义在组态王中定义的寄存器数据格式(类型):由单片机决定。
斜体字dd代表数据地址,此地址与单片机的数据地址相对应.注意:在组态王中定义变量时,一个X寄存器根据所选数据类型(BYTE,USHORT,FLOAT)的不同,分别占用一个、两个,四个字节,定义不同的数据类型要注意寄存器后面的地址,同一数据区内不可交叉定义不同数据类型的变量。
为提高通讯速度建议用户使用连续的数据区。
例如,1、在单片机中定义从地址0开始的数据类型为BYTE型的变量: 则在组态王中定义相应的变量的寄存器为X0、X1、X2、X3、X4。
,数据类型为BYTE,每个变量占一个字节2、在单片机中定义从地址100开始的数据类型为USHORT型的变量: 则在组态王中定义相应的变量的寄存器为X100、X102、X104、X106、X108。
数据类型USHORT,每个变量占两个字节3、在单片机中定义从地址200开始的数据类型为FLOAT型的变量: 则在组态王中定义相应的变量的寄存器为X200、X204、X208、X212。
组态王通用单片机协议(ASCII)说明
组态王通用单片机协议(ASCII)说明概述通用单片机ASCII协议支持单片机与组态王通讯,用户只要按照我们的协议编写单片机通讯程序就可实现与组态王的通讯.组态王设置1、定义组态王设备定义组态王定义设备时请选择:智能模块\单片机\通用单片机ASCII\串口组态王的设备地址定义格式:##.#前面的两个字符是设备地址,范围为0-255,此地址为单片机的地址,由单片机中的程序决定;后面的一个字符是用户设定是否打包,"0"为不打包、"1"为打包,用户一旦在定义设备时确定了打包,组态王将处理读下位机变量时数据打包的工作,与单片机的程序无关.2、组态王通讯通讯方式:RS-232,RS-485,RS-422均可。
波特率:由单片机决定(2400,4800,9600and19200bps)。
注意:在组态王中设置的通讯参数如波特率,数据位,停止位,奇偶校验必须与单片机编程中的通讯参数一致3.组态王数据词典--变量定义在组态王中定义的寄存器数据格式(类型):由单片机决定。
斜体字dd代表数据地址,此地址与单片机的数据地址相对应.注意:在组态王中定义变量时,一个X寄存器根据所选数据类型(BYTE,USHORT,FLOAT)的不同,分别占用一个、两个,四个字节,定义不同的数据类型要注意寄存器后面的地址,同一数据区内不可交叉定义不同数据类型的变量。
为提高通讯速度建议用户使用连续的数据区。
例如,1、在单片机中定义从地址0开始的数据类型为BYTE型的变量: 则在组态王中定义相应的变量的寄存器为X0、X1、X2、X3、X4。
,数据类型为BYTE,每个变量占一个字节2、在单片机中定义从地址100开始的数据类型为USHORT型的变量: 则在组态王中定义相应的变量的寄存器为X100、X102、X104、X106、X108。
数据类型USHORT,每个变量占两个字节3、在单片机中定义从地址200开始的数据类型为FLOAT型的变量: 则在组态王中定义相应的变量的寄存器为X200、X204、X208、X212。
modbus ascii通信协议06功能码报文格式详解
modbus ascii通信协议06功能码报文格式详解Modbus ASCII通信协议是一种基于ASCII码的Modbus通信协议。
它使用ASCII字符来表示数据,以 ASCII 字节对数据进行传输。
Modbus ASCII协议支持常见的数据读取、写入、寄存器写入和寄存器写入多个值等操作。
Modbus ASCII协议的功能码06是用于写单个寄存器的功能码。
下面是该功能码的报文格式的详细解释:1. 起始符:每个Modbus ASCII报文以":"作为起始符,表示报文的开始。
2. 从站地址:接下来的两个ASCII字符表示从站的地址。
从站地址是指要接收或响应该报文的目标从站的地址。
3. 功能码:接下来的两个ASCII字符表示功能码,即06,表示写单个寄存器。
4. 寄存器地址:接下来的四个ASCII字符表示要写入的寄存器的地址。
该地址通常以十六进制表示。
5. 数据值:接下来的四个ASCII字符表示要写入到寄存器的数据值。
该值通常以十六进制表示。
6. 校验和:接下来的两个ASCII字符表示校验和。
校验和是用于检测数据的正确性的一种校验方法。
它是将从站地址到数据值的全部ASCII字符的二进制值相加,然后取结果的低8位。
7. 终止符:每个Modbus ASCII报文以回车符和换行符作为终止符。
表示报文的结束。
总结:Modbus ASCII通信协议的06功能码报文格式如下:起始符 + 从站地址 + 功能码 + 寄存器地址 + 数据值 + 校验和+ 终止符注意:在ASCII通信中,每个ASCII字符都由两个字节表示,因此每个十六进制数需要四个ASCII字符来表示。
Modbus通讯协议RTU-ASCII-TCP详细介绍
Modbus通讯协议RTU ASCII TCP详细介绍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网络协议发送出去即可。
单片机ASCⅡ码协议进行多机串行口通信解析
利用组态软件的单片机ASC II码协议进行多机串行口通信Using the SCM ASCII Protocol of Configuration Softwareto Proceed Multi-machine Serial Communication知娜(辽宁机电职业技术学院信息系,丹东市118002己沁Na(Information Department ofLiaoning Mechanicand Electronic Professional TechnologicalCollege,Dandong408000l摘蘸】本文舟鸳一种在绝态簌捧与进行多个荦片搬懑澈萄方法,不需要辩掬任露设备,矗接翻麓缝态软件中提供单片机ASCI1码协议来邀行通信。
本文给出了调试成功阁单片机程序及相应的PC机中软}牛曲接赣。
【关镰涌】组态鞔薛单旨礼多枫串{-通毯ASCII褥持泼Abstract:The paper introducesa multi—SCM serial communication method between configuration sol,rate and SCM.Itdo n’tneedtoattachanyfacilities,diI.ectlyH∞theSCMASCllprotocolprovidedbyconfigta'a60asoftware 埝colD/nuulcae.Thepaperalsogivesthe successfulprogram,ofSCM andthesolhvar 《configurationofPC.Key words:Configuration Software SCM Multi.SCM Serial Communication ASCII Protocolll富本文介绍的方法已应用于一个组态系统数据j}6=控系统,形成了网络艘擞仪表。
遮神通信方式只需器掌攘了组态软件中静ASCII协议,根据该游议来露单片机程序即可。
单片机与组态王基于ASCII型通讯程序设计
目前在工业控制现场的仪表较多,传统的数显仪表不能满足实际的需要,需要添加相应的A /D 或D /A 模块转换数据,上位机需要通过配套的下位机数据采集模块获取现场仪表数据,如PLC ,再通过相应通信协议来与下位机通讯进行数据交换,此法成本较高。
本文论述了通过单片机采集现场仪表数据,通过与组态软件提供的通用ASCII 型协议通讯。
实践表明:采用该方式通讯可靠、设计简单、代码可移植性高,实用性较强。
1组态王与单片机通讯协议概述单片机多用来采集现场的信息,如何实现单片机与组态软件进行数据交换?早期主要有DDE 方式、板卡方式等,最新版本组态王提供的单片机通用通讯协议支持HEX 型和ASCII 型,可通过串口直接与单片机通讯。
通讯方式为RS232、RS422、RS485,通讯波特率可达19200bps 。
蔚俊兰、赵学军等人介绍了采用HEX 型通讯协议来实现单片机与组态王通讯。
本文主要详细介绍ASCII 型通用通讯协议实现组态王与单片机通讯,该型具有设计简单,通俗易懂特点,具体参数可以查阅相关技术文档。
2组态王设备配置在实际开发过程中,组态王对ASCII 型通讯协议完全是封装好的。
在程序设计过程中可以采用相应串口监视软件来分析组态王向单片机发送的数据,便于程序设计。
为了实现单片机与组态王的通讯,在组态王中设置的通讯参数如波特率,数据位,停止位,奇偶校验必须与单片机编程中的通讯参数一致。
本文中采用通讯波特率9600bps ,8位数据位,1位停止位,无奇偶验证。
组态王中设置设备地址格式为:##.#。
前面两个字符是设备地址(0~255),此地址为单片机的地址;后面的一个字符是用户设定是否打包,“0”为不打包、“1”为打包。
体参数设定方法可以查阅相关技术文档。
3单片机通讯源程序设计本文的通讯程序采用C 语言设计,通过Keil 开发软件设计了单片机与组态王基于ASCII 码通用通讯程序。
3.1数据定义数据定义主要用于对单片机相关参数进行相应设定,如单片机地址,单片机与组态王通讯命令格式的字头、字尾。
基于ASCII的单片机与组态王通讯设计
组 态 王 提 供 的 与 单 片 机 的 通 信 协 议 可 以 支 持 HEX 和 ASCII,其中 ASCII 开发比较简单。 文献[1]是基于 HEX 的,本文 以 ASCII 为例开发单片机和组态王的通讯程序。
单片机ASCⅡ码协议进行多机串行口通信解析
利用组态软件的单片机ASC II码协议进行多机串行口通信Using the SCM ASCII Protocol of Configuration Softwareto Proceed Multi-machine Serial Communication知娜(辽宁机电职业技术学院信息系,丹东市118002己沁Na(Information Department ofLiaoning Mechanicand Electronic Professional TechnologicalCollege,Dandong408000l摘蘸】本文舟鸳一种在绝态簌捧与进行多个荦片搬懑澈萄方法,不需要辩掬任露设备,矗接翻麓缝态软件中提供单片机ASCI1码协议来邀行通信。
本文给出了调试成功阁单片机程序及相应的PC机中软}牛曲接赣。
【关镰涌】组态鞔薛单旨礼多枫串{-通毯ASCII褥持泼Abstract:The paper introducesa multi—SCM serial communication method between configuration sol,rate and SCM.Itdo n’tneedtoattachanyfacilities,diI.ectlyH∞theSCMASCllprotocolprovidedbyconfigta'a60asoftware 埝colD/nuulcae.Thepaperalsogivesthe successfulprogram,ofSCM andthesolhvar 《configurationofPC.Key words:Configuration Software SCM Multi.SCM Serial Communication ASCII Protocolll富本文介绍的方法已应用于一个组态系统数据j}6=控系统,形成了网络艘擞仪表。
遮神通信方式只需器掌攘了组态软件中静ASCII协议,根据该游议来露单片机程序即可。
Modbus通讯协议RTU-ASCII-TCP详细介绍
Modbus通讯协议RTU-ASCII-TCP 详细介绍Modbus通讯协议RTU ASCII TCP详细介绍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网络协议发送出去即可。
单片机通信协议
单片机通信协议
单片机通信协议是一种由多种电子设备共同组成的物理层面的数据交换协议。
它使用特定的编码标准来自动传输数据,这种编码技术被称为SPIM(Serial Peripheral Interface Module)。
单片机通信协议的主要目的是提供一种使多台设备之间的无缝通信和接收和发送数据的方法。
此外,它还能支持多种类型的传感器和外围设备,如计算机,打印机和存储设备。
单片机通信协议实现了两个多功能组件——传输控制和数据传输单元,它们与一台服务器(发送单元)相连接。
传输控制协议(TCP)负责指导数据传输,允许单片机连接到特定服务器,控制传输速率以及保证发送的数据的正确性和完整性。
数据传输单元(DTE)负责实际的数据传输,使用特定的SPIM编码传输数据。
传统的单片机通信协议支持两种不同的可靠性通信——半双工和全双工。
半双工协议是一种简单易用的通信协议,它使得单片机可以发送和接收数据,但只能在一个时间点发送或接收。
全双工协议允许单片机同时发送和接收数据,但需要更多的传输带宽。
单片机通信协议的使用可以大大提高电子设备的可靠性、效率和可维护性。
它允许多台设备之间的高速通信,保证数据的准确性,可以连接传感器设备和外围设备,使用户能够更快地收集和传输数据。
然而,由于它只支持特定的传输编码,当与外部接口不兼容时,单片机通信协议会导致设备运行效率受到抑制,可能会失去更多数据。
组态王软件与单片机串口ascii通讯的机制及实现方法
组态王软件与单片机串口ascii通讯的机制及实现方法作者:姜宝申组态软件广泛的应用于工农业生产的各个领域,是保证相关系统设备经济稳定安全运行的重要方式,是对传统控制方式的一次革命,得到了越来越广泛的应用。
很多工控及电子爱好者对这方面很感兴趣,都跃跃欲试,可苦于软件要想得到实际效果,就得连接设备,通过设备预设的寄存器与软件的变量进行连接,辅以命令语言,才能取得真正的体验。
软件支持的设备比如板卡、数字仪表、PLC、变频器等等都是属于工控设备,价格都比较昂贵,一般很难触及。
那是不是组态软件就不适合于我们用了呢,也不一定,比如国产的组态王组态软件支持单片机串口ascii 通讯,烧写了相应程序的单片机也可以当做组态软件的设备,和其他设备一样,也能完成诸如水位、行程等状态的监视及电机、阀门、灯泡、加热器等的启动停止,开与关,以及模拟量经AD转换后,通过串口以ascii码的形式传送给组态软件,只是这些功能的实现是依靠单片机的端口来完成,组态软件访问单片机,监视单片机所有端口状态,控制一部分端口的高低电平状态,辅以外部电气回路,同样能实现相应的功能。
例如:组态软件通过串口发送指令,控制单片机的某个输出端口的电平高低变化,端口通过驱动使继电器的触点闭合,电机转动,假如这个电机是带动水泵往水箱里面打水,水箱水位的预定位置装有触点,这个触点连接在单片机的另一个输入端口上,当水位到达触点位置,触点动作单片机的这个端口电平发生变化,这个变化通过同一个串口传回给组态软件,组态软件可以根据命令语言编写的程序酌情是自动还是手动停止电机运行,或者是调整电机的转速,保证水箱的水位在预设的范围内,这就是组态软件构成的控制系统的最基本应用。
图1相对而言,用单片机与组态软件实现的控制系统要比其他成品设备的组态稍微麻烦一些,不但需要了解掌握组态软件的工作机制,还需要单片机的软硬件及电路方面的知识,这里边的重点就是单片机的汇编或c语言编程,但掌握了组态软件的通讯协议,按协议编写,比较起来并不是很难。
单片机通信协议
单片机通信协议单片机通信协议是连接具有不同硬件和软件构成的电子设备之间的约定,是单片机系统中可靠的指令传输技术。
它可以让多个设备的不同厂家的不同型号的芯片共同运行,实现多机协同功能,实现多机交互数据传输。
近年来,随着单片机技术的普及,单片机通信协议的重要性也逐步受到重视。
本文主要介绍单片机通信协议的特点和详细过程,以及实现协议的不同技术。
1、单片机通信协议的特点单片机通信协议主要体现在以下几点:(1)标准化。
单片机通信协议是一种国际通用的标准,有利于不同厂家的不同型号的芯片之间进行高效的通信。
2)可靠性高。
单片机通信协议可以很好地保证传输数据的完整性和准确性,保障数据传输过程中不会出现错误和丢失。
(3)简单易懂。
单片机通信协议可以很容易的被大多数的程序员接受,使用更简单易懂的注释和编程模板,可以简化程序的编写,提高程序的可操作性。
2、单片机通信协议的详细过程单片机通信协议的详细过程可以分为以下四个步骤:(1)设定通信参数。
首先根据不同的通信场景,分析两个芯片之间的通信要求,设定好协议标准,包括串口号、波特率、数据长度等通信参数。
(2)建立数据链路。
建立数据链路时,应当使用可靠的连接模式,使两个芯片之间的通信更为可靠。
(3)数据传输。
在建立数据链路后,可以开始传输数据,包括发送端和接收端各自发送和接收不同指令和数据,在一次通信中完成系统运转。
(4)断开连接。
在数据传输完成后,应当及时断开连接,确保不会有其他人劫持或者更改数据。
3、单片机通信协议的实现技术单片机通信协议的实现技术包括以下几种:(1)串口通信。
串口通信的原理是通过一根线将串口两端的芯片连接,通过不断的发送和接收信号来实现数据的传输。
(2)并行通信。
通过将多个线同时连接,可以同时传输大量的数据,从而提高传输速度。
(3)无线通信。
无线通信可以实现远距离的传输,使芯片之间可以在任何地方进行通信。
4、结论综上所述,单片机通信协议是连接不同设备之间的约定,可以实现多机协同功能,有利于具有不同硬件和软件构成的电子设备之间进行高效可靠的通信。
单片机ASCⅡ码协议进行多机串行口通信
单片机ASCⅡ码协议进行多机串行口通信单片机ASCII码协议是一种常用的通信协议,用于实现多机串行口通信。
它通过将数据以ASCII码的形式进行传输,从而实现各个单片机之间的数据交换与通信。
在下面的1200字以上的文章中,我将详细介绍单片机ASCII码协议的原理、实现方法以及其在多机串行口通信中的应用。
首先,我们来了解一下单片机ASCII码协议的原理。
ASCII码是一种标准的字符编码方式,它将字符映射为7位或8位的二进制代码。
在单片机ASCII码协议中,使用一字节的数据进行传输,其中包含了一个ASCII码字符。
这种协议的优点是传输速度较快,且数据可靠传输,但是需要进行数据的解码和编码操作。
在实现单片机ASCII码协议的过程中,我们首先需要通过串行口将数据发送出去,并在接收端接收数据。
发送过程中,我们需要将要发送的数据进行ASCII码的转换,将字符转换成对应的ASCII码,并发送出去。
接收过程中,我们需要将接收到的ASCII码进行解码,将其转换为对应的字符。
通过解码后的数据,我们就可以进行后续的处理和分析。
在多机串行口通信中,单片机ASCII码协议扮演了重要的角色。
它能够实现多个单片机之间的数据交换和通信,可以用于传输各种类型的数据,如传感器数据、控制指令等。
具体的应用场景包括无线通信、物联网、嵌入式系统等。
单片机ASCII码协议在无线通信中的应用是一种常见的情况。
通过使用无线模块与单片机进行连接,可以实现距离较远的通信。
在通信的过程中,数据需要进行编码和解码操作。
发送端将要发送的数据进行ASCII码转换,并通过无线模块发送出去。
接收端接收到数据后,进行解码操作,并将解码后的数据进行处理或者显示。
在物联网领域,单片机ASCII码协议也有广泛的应用。
物联网系统中常常包含多个传感器和执行器,这些设备需要进行数据交换和通信。
通过使用单片机ASCII码协议,可以方便地实现各个设备之间的数据传输。
传感器可以将采集到的数据通过ASCII码协议进行编码,并发送给控制中心。
三种协议:ASCII协议-Modbus协议和自由协议。
串口通讯提供RS232与RS485串行口,以实现与上位机的通讯。
有三种协议:ASCII协议,Modbus协议和自由协议。
ASCII协议1、协议:数据格式:7位数据位,偶校验,1位停止位7位数据位,奇校验,1位停止位7位数据位,无校验,2位停止位8位数据位,偶校验,1位停止位8位数据位,奇校验,1位停止位Z8位数据位,无校验,1位停止位(默认)8位数据位,无校验,2位停止位传输速率:4800、9600(默认)、19200、38400、57600、115200、230400bps节、指令字节和内容字节,即除帧头和帧尾以外的剩余字节,CR LF为回车符号3、应答格式详细的指令集说明如下列章节所述。
5.1 握手指令格式::001CONNECT (001为放大器地址,客户根据自己设定的地址输入。
)返回格式::001OK握手指令主要用于判断设备是否上电初始化、通信是否正常和是否在线状态等。
※握手失败建议检查以下问题:1.线路是否连接正确;2.核实串口号是否与放大器连接串口号一致(放大器串口号怎么看,右击我的电脑,打开管理,选择设备管理器,双击端口,然后看到USB serial port+串口号),;3.电脑上波特率设置是否和放大器一致;4.数据格式是否正确;5.ASC码协议时不要选用十六进制;6.串口是否打开。
5.2地址设置客户可通过2种途径设置地址,一种是通过拨码开关设定,最多可设定63种,具体设置方法已在1.2.4中说明,拨码开关需在通电前拨好位置,第二种通过软件设置,将SW1到SW6的拨码开关都上拨到”off”档。
拨码开关通电前拨才有效。
指令格式::001ADDR=002(使用前需解锁)返回格式::001OK5.3波特率设置放大器出厂时默认波特率为9600,修改为115200,输入格式如下指令格式::001BAUD=7,手动发送指令后将系统波特率选择到115200(使用前需解锁)返回格式::001OK(应答的数据是在变送器切换成新的波特率后返回的,如果上位机未及时切换到新的波特率,则无法收到数据)5.4数据帧格式放大器出厂时默认为5(8位数据位,无校验,1位停止位)选项格式,修改为4(8位数据位,奇校验,1位停止位)选项时指令格式::001FRAME=4,手动发送指令后将校验位、数据位、停止位在上位机上设置成4中内容(使用前需解锁)返回格式::001OK(应答的数据是在变送器切换成新的数据帧格式后返回的,如果上位机未及时切换到新的数据帧格式,则无法收到数据)5.5协议类型设置协议可通过拨码开关设置,参考1.2.4,也可通过软件设置指令格式::001PROCOTOL=1返回格式::001OKPROCOTOL=N,N可以是0(自由协议),1(Modbus 协议),2(ASC协议),协议类型切换后,数字帧格式将恢复成默认值。
SiemensCP340模块与C8051F021单片机ASCII协议通信的实现
SiemensCP340模块与C8051F021单片机ASCII协议通信的实现作者:乔勇来源:《山东工业技术》2014年第24期摘要:本文详细介绍了Siemens公司的点到点通信处理器模块CP340如何与C8051F021单片机实现ASCII协议通信的。
文章给出了硬件电路连接,介绍了通信协议的制定方法,并给出了PLC与单片机的编程介绍。
关键词:PLC;点到点通信;ASCII协议;RS-4850 引言本文介绍了CP340在SIMATIC S7-300中,采用RS-485的接口协议与C8051F021单片机的通讯解决方案,本系统以PLC为核心控制单元,通过通讯模块CP340与单片机系统实现485通信,实现主控单元与单片机系统之间的指令、数据通讯;实现数据接收功能,最后由PLC负责将这些数据进行运算处理。
CP340通讯处理器模块可以在西门子 S7系列中使用,该模块可以实现ASCII码、打印机驱动和3964三种通讯协议,通过集成在STEP7中参数化工具进行设置。
并提供了三种通讯接口:RS232、模拟量20mA、RS422/485。
1 通讯接口设计CP340-RS422/485可配置RS422全双工模式和RS485半双工模式,方案设计中配置为RS485半双工模式,CP340模块提供一15针接头,在硬件连接上需要引出第4脚R(A)/T (A)和第11脚R(B)/T(B)两个数据线引脚;而C8051F021单片机只需配置一个全双工的串行口线,为了增强抗干拢能力,设计上选用了内部集成隔离电路的MAX1480芯片,将其转化成RS485信号。
2 通讯协议的制定CP340可以传输十六位进制的00-FF之间的任何数据,用户可以自己制定相关的传输协议,CP340的ASCII协议只有三种可选的波特率:2400bps、4800bps、9600bps。
制定通信协议:单片机作为从机,PLC作为主机,从机在建立与主机通信之前,一直处于对通信线路的监听状态,主机PLC通过CP340通讯模块向从机发送通讯指令,从机在接收到指令后对其进行识别,校验,判断是否主机呼叫从机,如果地址相符,确认呼叫从机。
ASCII码通讯协议
ASCII码通讯协议ASCII码通讯协议命令由下述各部份组成:(定界符)(地址)(内容)(常数)(数据)(校验核)(结束符)定界符每个命令必须以定界符开始。
有6种有效的定界符:#、$、%、&、’ 和”。
地址紧跟着定界符后面的是两位指定目标仪表的地址。
用“AA”表示内容用于指定仪表内部的数据地址或参数地址用“BB”表示常数用于指定命令常数用“DD”表示数据仅输出命令和设置参数命令有数据内容用“data”表示校验核可选择附上二字符的校验核用“CC”表示结束符每个命令必须用回车符(?)0DH结束命令集有10条命令:1,读版本号:#AA99CC?2,读主测量值:#AACC?3,读其它测量值:#AABBCC?4,读模拟量输出值及开关量输入输出状态:#AABBDDCC?5,输出主模拟量:&AA(data)CC?6,输出其它模拟量:&AABB(data)CC?7,输出开关量:&AABBDDCC?8,读仪表参数符号:’AABBCC?9,读仪表参数:$AABBCC?10,设置仪表参数:%AABB(data)CC?说明 1 上述命令中的CC表示可选择的二字符的校验核。
与本仪表相关的命令如下:#AA 读累积值#AA01 读温度测量值#AA02 读压力测量值#AA03 读补偿前瞬时流量值#AA04 读补偿后瞬时流量值#AA05 读流量密度值#AA0001 读第一路输出模拟量值(变送输出一)#AA0003 读开关量输出状态(报警输出)#AA99 读仪表版本号$AABB 读仪表参数数值%AABB(data) 设置仪表参数&AA(data) 输出第一路模拟量&AA01(data) 输出第二路模拟量&AABBDD 输出开关量。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
组态王与单片机协议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、X204、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,数据类型为字节,不打包。
组态王所若正确:若不正确:例2:读15号仪表,数据地址为15的数据。
其中数据为100,数据类型为字节,打包。
组态王所发数据为:若正确:若不正确:3.2.上位机发送写命令下位机应答:若正常:若不正常:例1:写15号仪表,数据地址为15。
写数据255,数据类型为字,不打包。
组态王所发数据为:若正确:若不正确:例2:写15号仪表,数据地址为15。
写数据65535,数据类型为浮点型,打包。
组态王所发数据为:若正确:若不正确:5.浮点数格式:4字节浮点数 = 第一字节高4位ASCII 码+第一字节低4位ASCII 码+第二字节高4位ASCII 码+第二字节低4位ASCII 码 +第三字节高4位ASCII 码+第三字节低4位ASCII 码 +第四字节高4位ASCII 码+第四字节低4位ASCII 码第1字节低4位 第2字节低4位 第3字节低4位 第4字节低4位XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX第1字节高4位 第2字节高4位 第3字节高4位 第4字节高4位四字节浮点数格式:(1)第一字节 (2)第二字节(3)第三字节(4)第四字节注:数符=0——正,数符=1——负阶符=0——正,阶符=1——负D7 D6 D5 ~ D0 ★ 浮点数可表示范围:-1×232~1×232★ 数符:1位 阶符:1位 阶码:6位 例:流量积算控制仪表瞬时流量测量值数据=100.210转换成浮点数:100.210=270.7828125=0716+C816+6616+6616=30ASCII +37ASCII +43ASCII +38ASCII +36ASCII +36ASCII +36ASCII +36ASCII 小数部份:0.7828125 0.7828125256=200.40.4256=102.40.4256=102.410进制: 第一字节第二字节 第三字节 第四字节数 符 阶 符 阶 码数 符阶 符阶 码小 数 部 分 小 数 部 分 小 数 部 分0 7200 102 102小数部分乘以256 整数部份为第二字节(200) 第二字节小数部分乘以256 整数部份为第三字节(102)第三字节小数部分乘以256 整数部份为第四字节(102)十六进制: ASCII 码: 第一字节第二字节 第三字节第四字节第1字节低4位 第2字节低4位 第3字节低4位 第4字节低4位第1字节高4位 第2字节高4位 第3字节高4位 第4字节高4位3、注:仪表内部数据为十六进制表示的十进制数。
如:实时测量值为500,则用十六进制表示为1F4H 。
仪表通讯传输是将上述十六进制数据转化为标准ASCII 码(即一字节的16进制数转化为2个ASCII 码──高4位ASCII 码+低4位ASCII 码)。
如:上述数据1F4H (16进制 ),传输时,转化为ASCII 码则为30H 、31H 、46H 、34H 。
6.此浮点数格式的转换: 1) ASCII 码到浮点数: /* in:char* c要转化的ASII 码字符,应为4个字符。
Return :转换后的浮点数。
*/float C4toD(char * c) { BYTE Hd[30], Jiema[30]; float DTc[30];float Decimal = 0;memset(Hd, 0, sizeof(Hd));memset(Jiema, 0, sizeof(Jiema));memset(DTc, 0, sizeof(DTc));float returnflo = 0;BOOL ShuFU = FALSE, JieFU = FALSE;if((c[7] > 0x40) && (c[7] < 0x47))Hd[7] = ((c[7] - 0x37) & 0x0f);else if((c[7] > 0x60) && (c[7] < 0x67))Hd[7] = ((c[7] - 0x57) & 0x0f);elseHd[7] = ((c[7] - 0x30) & 0x0f);if((c[6] > 0x40) && (c[6] < 0x47))Hd[6] = ((c[6] - 0x37) & 0x0f);else if((c[6] > 0x60) && (c[6] < 0x67))Hd[6] = ((c[6] - 0x57) & 0x0f);elseHd[6] = ((c[6] - 0x30) & 0x0f);DTc[2] = (float)(((float)(Hd[6] * 16.0) + (float)(Hd[7])) / 256.0); if((c[5] > 0x40) && (c[5] < 0x47))Hd[5] = ((c[5] - 0x37) & 0x0f);else if((c[5] > 0x60) && (c[5] < 0x67))Hd[5] = ((c[5] - 0x57) & 0x0f);elseHd[5] = ((c[5] - 0x30) & 0x0f);if((c[4] > 0x40) && (c[4] < 0x47))Hd[4] = ((c[4] - 0x37) & 0x0f);else if((c[4] > 0x60) && (c[4] < 0x67))Hd[4] = ((c[4] - 0x57) & 0x0f);elseHd[4] = ((c[4] - 0x30) & 0x0f);DTc[1] = (float)((((float)(Hd[4] * 16.0) + (float)Hd[5]) + DTc[2]) / 256.0); if((c[3] > 0x40) && (c[3] < 0x47))Hd[3] = ((c[3] - 0x37) & 0x0f);else if((c[3] > 0x60) && (c[3] < 0x67))Hd[3] = ((c[3] - 0x57) & 0x0f);elseHd[3] = ((c[3] - 0x30) & 0x0f);if((c[2] > 0x40) && (c[2] < 0x47))Hd[2] = ((c[2] - 0x37) & 0x0f);else if((c[2] > 0x60) && (c[2] < 0x67))Hd[2] = ((c[2] - 0x57) & 0x0f);elseHd[2] = ((c[2] - 0x30) & 0x0f);Decimal = (float)(((float)(Hd[2] * 16) + (float)(Hd[3]) + DTc[1])/ 256.0);if((c[1] > 0x40) && (c[1] < 0x47))Jiema[1] = ((c[1] - 0x37) & 0x0f);else if((c[1] > 0x60) && (c[1] < 0x67))Jiema[1] = ((c[1] - 0x57) & 0x0f);elseJiema[1] = ((c[1] - 0x30) & 0x0f);if((c[0] > 0x40) && (c[0] < 0x47))Jiema[0] = ((c[0] - 0x37) & 0x0f);else if((c[0] > 0x60) && (c[0] < 0x67))Jiema[0] = ((c[0] - 0x57) & 0x0f);elseJiema[0] = ((c[0] - 0x30) & 0x0f);ShuFU = ((Jiema[0] & 0x08) >> 3) > 0;JieFU = ((Jiema[0] & 0x04) >> 2) > 0;Jiema[2] = (Jiema[0] & 0x03) * 16 + Jiema[1];if(JieFU)returnflo = (float)pow(2, (-1) * Jiema[2]) * Decimal; elsereturnflo = (float)pow(2, Jiema[2]) * Decimal;if(ShuFU)returnflo = (-1) * returnflo;return returnflo;}2)浮点数到ASCII码:/*in:char * c:存储浮点数转换后的ASCII码字符。