STM32单片机仿真开发实例 课件 6.3 远程IO模块的设计.pptx

STM32单片机仿真开发实例 课件 6.3 远程IO模块的设计.pptx

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多

;能力目标:

认知工业自动化产品中的远程I/O模块,在理解的基础上掌握其主要功能,并完成产品主要功能的设计。

任务要求:

绘制远程I/O模块的仿真电路,并完成STM32单片机程序的设计,要求实现如下功能:

(1)模块具备4个数字量输入和4个数字量输出;

(2)能与组态软件(比如MCGS)、支持Modbus_RTU通信协议的PLC(比如三菱FX3U)配合实现远程I/O控制。;6.3.1远程I/O模块简介

远程I/O模块也叫分布式I/O模块,顾名思义是一种能够实现远距离I/O控制的自动化装置。如下图所示,PLC和远程I/O挂在同一个总线上。

远程I/O模块无需编写程序,只需要设定好通信参数即可使用,可以看成是对PLC的I/O点的延伸或者扩充。;国外品牌的远程I/O模块,出于商业利益,只支持自家自动化产品,兼容型较差。

国产品牌的远程I/O模块,由于起步较晚,为了争夺市场份额,采用通用型通信协议,兼容型较好。;6.3.2CRC校验

数据在传递过程中,由于环境干扰等因素收发数据的一致性往往得不到保证,因此常用的做法是对数据包进行校验,如果通不过校验,则将整个数据包丢弃。;CRC(CyclicRedundancyCheck,循环冗余校验)校验是一种主流的数据校验技术,常用的CRC校验有如下六种版本:

●CRC-8

●CRC-12

●CRC-16(?)

●CRC-CCITT

●CRC-32

●CRC-32C

在接下来介绍的Modbus_RTU通信协议中,我们会用到CRC-16校验方式。

由于CRC校验算法原理十分复杂,因此本课程不做深入介绍,仅提供校验程序,读者直接调用校验码生成函数即可。

(演示CRC校验相关程序的使用方法)

;6.3.3Modbus_RTU概述

Modbus协议是由美国modicon公司(现已被施耐德公司收购)于1979年提出的一种可用于工业现场的总线协议。Modbus协议仅定义了数据链路层协议,可用于RS-232、RS-422、RS-485等串行总线。Modbus协议分为Modbus_RTU(√本次任务选择)、Modbus_ASCII(×不讲)两种,本教材仅介绍Modbus_RTU协议。

Modbus协议采用如图所示一主多从式拓扑结构,主站对从站主动轮询,从站被动应答。;Modbus通信数据包格式如图所示,其中ADU(ApplicationDataUnit,应用数据单元)即完整数据包,由1个字节的地址域、PDU(ProtocolDataUnit,协议数据单元)和2个字节的差错校验码构成。地址域即从站地址,差错校验码即CRC-16校验码。

Modbus协议的功能本质上就是主站对从站存储单元的读写,从站存储单元有两类:

◆线圈(Coil),即布尔变量(Bit)

◆寄存器(register),即十六位无符号数据(Word)

(P.S:实际上,布尔变量还分为离散输入(DiscretesInput,只读)和线圈(Coil,读写)两种,寄存器变量还分为输入寄存器(InputRegister,只读)和保持寄存

器(HoldingRegister,读写)两种,这里仅介绍线圈和保持寄存器两种);功能码代表了主站对从站存储单元不同的读写行为,长度1个字节,如下表所示。;“读(多个)线圈”指令,完整的指令格式如表所示。

说明:

◆地址域,由1个字节构成,即Modbus从站地址,范围0~247(248~255保留);

◆起始地址,由2个字节构成,即第一个线圈的地址,范围0000H~FFFFH;

◆线圈数量,由2个字节构成,即从第一个线圈开始连续若干个线圈,范围1~2000;

◆校验码,由两个字节构成,即CRC校验码;

◆字节数,由1个字节构成,即后面记录线圈状态的字节的个数;

◆线圈状态,由N个字节构成,每个字节记录了8个线圈状态,“0”代表“OFF”状态,“1”代表“ON”状态。

;下面是一个请求“读线圈”20-38(Hex:0013H~0025H)的实例:

其中:

将输出27~20的状态表示为十六进制字节值CDH,或二进制11001101B;

在最后的数据字节中,将输出状态38-36表示为十六进制字节值05H,或二进制00000101B。;“写单

您可能关注的文档

文档评论(0)

balala11 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档