基于Modbus协议的上位机与单片机通信的实现与仿真

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

66
Instrum ent T echn ique and Sensor
Jun 2011
表 1 ASCII协议和 RTU协议的比较
协议wenku.baidu.com
开始 标记
结束 校验 效率
标记
程序 处理
A SC II : ( 冒号 ) CR, LF LRC

RTU


CRC

直观, 简单 不直观, 复杂
2. 1 系统初始化
系统初始化主要 完成对单片机相关通 讯参数进 行设置, 文 中采用通讯参数 为波 特率 9 600 bps, 8位 数据 位, 1位 停止 位, 无奇偶验证, 单片机设备地址为 1, 并且上位机的相关通 讯参数 也必须与此相同才能 保证正常通讯。
单片机基于 M odbus协议通讯的程 序开发采 用当前最 流行 的开发工具 C51来进行, 其任务主要是完成 系统初始化, M odb u s报文接收、解析、打包和发送。
如表 1所示, 在 M odbus协议模 式选 择方 面, ASC II协议 模 式有开始和结束 标记, 在进 行程 序处理 时更 方便, 而且 传输 的 都是可见的 A SC II字符, 调 试时就 更加 直观, 另外 它的 LRC 校 验也比较容易。但是因为它传 输的都 是 A SCII字 符, RTU 传输 的数据每一个字节 A SC II都要 用 2个 字节来传 输, 它的传 输的 效率就比较低。为了有较高的传输效率, 文中采用 RTU 协议模 式。
0 引言 目前大量的测 控系统 是由 上位机 与以 单片 机为 核心 的测
控装置组成, 单片机把采 集的数 据 (模 拟量, 数字 量 ) 通过 串口 传送到上位机进行分 析、处理、显示和存储, 同时 上位机的 数据 或命令也通过串口传 送到单片机, 从 而实现控制 设备间数 据交 换, 保证了控制系统的正常运行。
中图分类号: TP274
文献标识码: B
文章编号: 1002- 1841( 2011) 06- 0065- 04
Implem entation and Sim ulation of Commun ication betw een H ost Computer and M CU Based on M odbus P rotocol
表 2 M odbu s( RTU )数据帧格式
开始位
地址 功能 数据 CRC 校验
结束位
T1 - T2- T3- T4 8 位 8 位 N 8位 16位 T1- T2 - T3- T4
其报文接收的相关程 序如下: vo id recive( ) interrupt 4 /* 串口中断* / { if( R I) /* 接收中断* / { R ecBuf[ receCoun t] = SBU F; /* 数据接收数组* / receC ount+ + ; /* 接收地址偏移寄存器加 1* / receT im eO u t= 4; /* 开始和结束字符间隔时间* / if( receC ount > = 8) rece_ok= 1; R I = 0; /* 接收中断复位, 准备接收下一帧* / } }
收稿日期: 2010 - 09- 16 收修改稿日期: 2011- 03- 17
图 1 M odbus(RTU )硬件连接
有奇偶校验外, ASCII模式采用 LRC校验, RTU模 式采用 16位 CRC校验; 此外, M odbus采用 主从 方式 定时 收发 数 据, 在实 际 使用中如果某从站点断开后 ( 如故障或关机 ), 主站端可 以诊断 出来, 而当故障修复后, 网络又可自动接通。因此, M odbus协议 的可靠性较好。 2 基于 M odbu s协议的程序设计
图 2 M odbus(RTU )报文解析 表 3 M odbus协议常用功能码
功能码
01 02 03 04 05 06
名称
读取线圈状态 读取输入状态获 读取保持寄存器 读取输入寄存器 强制单线圈 预置单寄存器
功能
获取逻辑线圈的当前状态 取开关输入的当前状态 获取保持寄存器当前值 获取输入寄存器当前值 强制单个线圈的通断 数值装入某一寄存器
议。采用 P ro teus软件对测控设备的外围电路进行设计, 并用虚拟串口驱动 ( VSPD )将 P roteus与上 位机虚拟 链接, 实 现通
讯仿真。它无需建立物理 模型, 节约了开发成本, 有效提高开发效率, 为智能测控设备的 开发提供了参考。
关键词: P roteus; 单片机; 仿真; M odbus协议
V oid Package( ) /* 数据打包* / { uns igned ch ar ;i
第 6期
朱小超等: 基于 M odbus协议的上位机与单片机通信的实现 与仿真
67
uns igned in t R eadB it_num, R eadChar_num, CRC _D ata; R eadB it_num = R ecBuf[ 4] * 256+ R ecbuf[ 5] ; R eadC har_num = R eadB it_num /8; /* 单片机返回字节数* / if( R eadB it_num% 8! = 0 ) R eadC har_num += 1; SendBuf[ 0] = 0x01; /* 返回单片机地址码* / SendBuf[ 1] = R ecBu f[ 1] ; /* 返回功能码* / SendBuf[ 2] = R eadC har_num; /* 返回字节数* / for( i= 0; i< R ead cCh ar_num; i++ ) SendBuf[ i+ 3] = D at_Co il[ i] ; /* 调用函数计算 CRC 校验码* / CRC _D ata = crc16 ( S endBu ,f 3+ R eadChar_num ) ; /* CRC 校验码高 8位* / SendBuf[ 3+ R eadChar_num ] = CRC _D ata >> 8; /* CRC 校验码低 8位* / SendBuf[ 4+ R eadChar_num ] = CRC _D ata & 0 xf;f Send _D ata( S endBu f[ ] , R eadChar_num + 5) ; /* 发送数据* / } 2. 5 M odbus报文发送 单片机 M odbus报文的发送需要 将 TTL 电平经 M AX232芯 片转换后通过的串口 来实现, 每次把 发送的一个 字节写入 发送 缓冲寄存器 SBU F中, 等该字节发送完后产生一个发送中断 ( T I = 1), 产生中断后 , 软 件进 行中 断复位, 准 备发 送下一 个字 节, 直到单片机相应报文 发送完毕。
2. 3 M odbus报文解析 当单片机接收到 上位机发送过来一完 整数据帧 时, 应 对其
进行解析, 然后根据报文的控制指令 , 执行 相关的动 作, 返 回响
应, 如图 2所示。对报文 的解 析首先 对地 址进 行解 析, 单片 机 通过预设或者 拨码开 关来 确定自 身的 地址。若 接收到 的报 文 中的地址与单片 机的 地址相 同则 接收报 文, 反之 则抛弃; 其 次 为了防止 传 送 过 程 中 的 传 输 错误 需 要 进 行 CRC 校 验, 调 用 CRC校验函 数 计算 报 文 的 校验 码 是 否 与上 位 机 发 送过 来 的 CRC校验码相同, 若相同则继续解 析报文, 否则 生成 CRC 错误 报文发送给上位机并且停止解析 。当 报文的地 址码、CRC 校验 正确, 则分析主 机功 能码。 M odbus协议 常 用功 能 码如 表 3 所 示, 这样单片机与上位机之间的数据通 过相应的 功能码和 地址 就可以实现读写操作。
M odbus协议支持传统的 RS- 232、RS - 422、RS- 485和以 太网设备。许多工 业设 备都在 使用 该协议 作为 他们 之间 的通 讯标准, 图 1为根据 M odbus协议连成的工业网络。
在标准的 M odbus网络上有 2种发送模式: A SCII、RTU。它 规定了消息、数据 的结构、命 令和 就答的 方式。 数据 通讯 采用 主 /从方式, 双向读写。同 时, M odbus协议 对数据 进行 校验, 除
实现单片机与上 位机进行通讯而进行 数据, 早期主要 有动 态数据交换 ( DDE) 、板 卡等 方 式。但 这些 方 式 具有 一 定局 限 性, 如 DDE方 式 增加 了 系统 的 不可 靠 性, 降 低 了系 统 的实 时 性, 同时对开发 人员 的 要求 也更 高 [ 1]。 M odbus通信 协 议 [ 2] 的 出现, 使得单片机通过串口即可以 实现与上位 机通讯。通 过开 发支持 M odbus通信 协议 的测 控设 备 [ 3- 5], 它们 就可 以与 上位 机互连成 工 业 网 络, 实 现 集 中 管 理, 分 散 控 制。文 中 阐 述 了 M odbus通信协议报文的接 收、解析、打包、发送 的原理, 并 给出 其部分源程序, 介 绍如 何使 用 P roteus 软件 对单 片机 外围 测控 电路仿真及与上位机 进行通信测试。 1 M odbu s协议概述
void Serial_in it( ) { SCON = 0x50; /* 模式 1, 8位, 接收使能* / TM OD = 0x20; /* 定时器 1, 模式 2 * / TH 1= 0xfd; /* 波特率为 9 600, 11 059 2 MH z* / TL1= 0x fd; TR1 = 1; /* 启动定时器 * / EA = 1; /* 中断使能* / ES= 1; /* 串口中断使能 * / SM 2= 1; /* 接收到停止位后 R I才置 1* / M yA dd= 1; /* 定义该单片机地址* / } 2. 2 M odbus报文接收 M ODBU S协议中, RTU 模 式没 有开 始 和结 束标 注, 如 表 2 所示, 消息发送至少要以 3 5个字符时间 ( T 1- T2- T 3- T 4)的 停顿间隔开 始, 同 样消 息结 束 也必 须 至少 以 3 5字 符 时间 结 束。开始和结束间 隔时 间采用 单片 机定时 器 0 中断 来计 实现 3 5字符计时。当单片机每接收到一数据时后立即检测 与上一 数据的间隔是否大于 3. 5字符时 间, 若大 于则说 明该报文 发送 已经结束, 单片机准备接收到下一报文。
2. 4 M odbus报文 打包 完成 M odbus报文解 析后, 生成 返回 报文 响应。首 先将 单
片机地址码, 与上位 机发送 报文 中一致 的功 能码 加入数 据中 ; 其次将单片机应答上位机的相 关数据也加 到该数据 中; 最 后再 调用 CRC函数生成 2个字节的校验码放在 数据报文最末端, 这 样就完成了一帧报文打包。例如 上位机读取 离散量 时, 单 片机 应答的是以 8位的数据为单位, 每个数据 表示 8个 开关量 的值 ( 0表示断开, 1表示闭合 ) , 如果上位机询问 的开关量不 是 8的 整倍数, 那么最后一个字节 的高位 部分无 意义, 置为 0, 其 相关 打包代码如下:
20 11 年 第 6期
仪表技术与 传感器
Instrum ent T echn ique and Sensor
20 11 No 6
基于 M odbus协议的上位机与单片机通信的实现与仿真
朱小超, 徐雪春
( 南昌大学理学院, 江西南昌 330001)
摘要: 介绍了以单片机 (M CU )为核心处理器的测 控设备 与上位 机进行 通信的实 现过程, 详 细分析 了 M odbus通 信协
ZHU X iao chao, XU X ue chun ( S choo l of Sciences, NanChan g Un iversity, N anchang 330031, Ch ina)
Abstract: The im plem enta tion o f the commun ica tion betw een the host com pute r and the con tro l equ ipm ent w as in troduced, in w hich the m icro contro ller (M CU ) w as em ployed as the core processor. T he M odbus comm un ica tion protoco l was analyzed acco rd ing ly. T he ex ternal c ircu it o f the contro l equ ipm entw as designed by using the P roteus so ftw are, and the communication simu lation, w hich linked the P roteus and the host com puter, w as achieved v ia u tilizing v irtua l se rial port dr iver ( V SPD ). It is unnecessa ry to establish the physical model in the process, so the deve lopm ent efficiency can be improved. K ey word s: P roteus; M CU; simu la tion; M odbus protocol
相关文档
最新文档