STM32单片机仿真开发实例 课件 6.3 远程IO模块的设计_第1页
STM32单片机仿真开发实例 课件 6.3 远程IO模块的设计_第2页
STM32单片机仿真开发实例 课件 6.3 远程IO模块的设计_第3页
STM32单片机仿真开发实例 课件 6.3 远程IO模块的设计_第4页
STM32单片机仿真开发实例 课件 6.3 远程IO模块的设计_第5页
已阅读5页,还剩15页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

6.3远程I/O模块的设计能力目标:

认知工业自动化产品中的远程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”状态。

主站命令:地址域功能码0x01起始地址H起始地址L线圈数量H线圈数量L校验码H校验码L从站响应:地址域功能码0x01字节数线圈状态(N个字节)校验码H校验码L

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

其中:

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

在最后的数据字节中,将输出状态38-36表示为十六进制字节值05H,或二进制00000101B。线圈地址2726252423222120线圈状态11001101线圈地址×××××383736线圈状态00000101注意,这里不是从0014H~0026H“写单个线圈”指令,完整的指令格式如表所示。说明:◆地址域,由1个字节构成,即Modbus从站地址,范围0~247(248~255保留);◆线圈地址,由2个字节构成,即地址范围为0x0000~0xFFFF;◆线圈状态,由2个字节构成,0x0000代表“OFF”状态,0xFF00代表“ON”状态;◆校验码,由2个字节构成,即CRC校验码。值得注意的是,“写单个线圈”指令的从站响应数据包格式与主站命令数据包格式完全相同。主站命令:地址域功能码0x05线圈地址H线圈地址L线圈状态H线圈状态L校验码H校验码L从站响应:地址域功能码0x05线圈地址H线圈地址L线圈状态H线圈状态L校验码H校验码L

下面是一个请求“写单个线圈”

173(Hex:00ACH)的实例:

注意,这里不是00ADH6.3.4仿真电路的绘制为了保护单片机,远程I/O模块的输入与输出接口与单片机的GPIO引脚需要进行隔离设计,下面两张图分别是1路输入隔离电路(左)和1路输出隔离电路(右)。

为了提高电路仿真执行效率,仿真时必须将隔离电路简化。如下图所示,仿真电路中,用按钮模拟数字量输入,用LED模拟数字量输出。6.3.5任务程序的编写

本次任务需要用到的新的API函数有:①HAL_UART_Transmit_IT

串口发送函数(带中断)例程://将数组dat中的第一个元素通过串口1发送并开中断if(HAL_UART_Transmit_IT(&huart1,dat,1)!=HAL_OK){Error_Handler();}

HAL_UART_TxCpltCallback

串口发送完毕回调函数例程://串口1发送完毕回调voidHAL_UART_TxCpltCallback(UART_HandleTypeDef*huart){ if(huart==&huart1){…}}

本次任务中,需要用到两个软件:组态软件“MCGS嵌入版”、“凌一”PLC模拟器

(1)MCGS嵌入版

MCGS嵌入版是用来组态“昆仑通态”触摸屏的软件,软件使用免费,软件自带模拟器,因此可以利用模拟器来模拟触摸屏的运行。没有学过的同学,可以直接调用笔者配置好的工程文件,值得注意的是,MCGS中Modbus线圈的地址不是从0开始,而是从0x0001开始,存在一个偏移量,如下图所示。

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论