当前位置: 首页 > news >正文

【Proteus仿真】【STM32单片机】智能语音家居陪护机器人

文章目录

  • 一、功能简介
  • 二、软件设计
  • 三、实验现象
  • 联系作者


一、功能简介

本项目使用Proteus8仿真STM32单片机控制器,使用OLED显示模块、红外传感器、蜂鸣器、DS18B20温度传感器,风扇LED、语音识别模块等。

主要功能:
系统运行后,OLED显示动画效果,一段时间后静止。当到达指定时间时开启闹钟,系统需感应到有人后,此时可通过K4键或语音关闭闹铃。系统感应到有人后,OLED显示测量的人体体温、时间、LED和风扇的开关状态;此时可通过语音开关LED和风扇;可通过按键K3进入闹钟设置界面,通过K3键切换不同时间位置,K1和K2键加减调节,设置后按下K4键保存并退出,返回测温和时钟显示界面。
语音识别指令(十六进制数):
开灯–>0X01
关灯–>0X02
开风扇–>0X11
关风扇–>0X12
关闹铃–>0X22


二、软件设计

/*
作者:嗨小易(QQ:3443792007)*///系统数据获取
void sys_data_get(void)
{static u8 i=0;static u8 oneflag=1;while(1){	//人体红外检测if(IRED==0){//温度获取i++;if(i%1==0){TIM_Cmd(TIM2,DISABLE); //关闭定时器sys_ctrl.temp=DS18B20_GetTemperture()*10;TIM_Cmd(TIM2,ENABLE); //打开定时器}sys_ctrl.man=1;}else sys_ctrl.man=0;//界面状态显示if(sys_ctrl.man==0){sys_ctrl.window=0;if(oneflag==0){oneflag=1;sys_open_show();//系统开机界面显示	}			}else {sys_ctrl.window=1;if(oneflag==1){oneflag=0;sys_parm_show();//系统数据参数显示界面	}		}		break;}
}//系统数据显示
void sys_data_show(void)
{u8 buf[9];while(1){	//显示数据界面if(sys_ctrl.window==1){	//正常模式下if(sys_ctrl.mode==0){//温度显示buf[0]=sys_ctrl.temp/100+0x30;buf[1]=sys_ctrl.temp%100/10+0x30;buf[2]='.';buf[3]=sys_ctrl.temp%100%10+0x30;buf[4]='C';buf[5]='\0';OLED_ShowString(3*16,0,buf,16);	//时间显示buf[0]=sys_ctrl.hour/10+0x30;buf[1]=sys_ctrl.hour%10+0x30;buf[2]=':';buf[3]=sys_ctrl.min/10+0x30;buf[4]=sys_ctrl.min%10+0x30;buf[5]=':';buf[6]=sys_ctrl.sec/10+0x30;buf[7]=sys_ctrl.sec%10+0x30;buf[8]='\0';OLED_ShowString(3*16,2,buf,16);//灯状态显示if(sys_ctrl.led==1)OLED_ShowString(2*16,4,"ON ",16);else OLED_ShowString(2*16,4,"OFF",16);//风扇状态显示if(sys_ctrl.motor==1)OLED_ShowString(6*16+8*1,4,"ON ",16);else OLED_ShowString(6*16+8*1,4,"OFF",16);}//时间设置模式下else{//吃药时间显示buf[0]=sys_ctrl.stime[0][0]/10+0x30;buf[1]=sys_ctrl.stime[0][0]%10+0x30;buf[2]=':';buf[3]=sys_ctrl.stime[0][1]/10+0x30;buf[4]=sys_ctrl.stime[0][1]%10+0x30;buf[5]=':';buf[6]=sys_ctrl.stime[0][2]/10+0x30;buf[7]=sys_ctrl.stime[0][2]%10+0x30;buf[8]='\0';OLED_ShowString(3*16,0,buf,16);//运动时间显示buf[0]=sys_ctrl.stime[1][0]/10+0x30;buf[1]=sys_ctrl.stime[1][0]%10+0x30;buf[2]=':';buf[3]=sys_ctrl.stime[1][1]/10+0x30;buf[4]=sys_ctrl.stime[1][1]%10+0x30;buf[5]=':';buf[6]=sys_ctrl.stime[1][2]/10+0x30;buf[7]=sys_ctrl.stime[1][2]%10+0x30;buf[8]='\0';OLED_ShowString(3*16,3,buf,16);//休息时间显示buf[0]=sys_ctrl.stime[2][0]/10+0x30;buf[1]=sys_ctrl.stime[2][0]%10+0x30;buf[2]=':';buf[3]=sys_ctrl.stime[2][1]/10+0x30;buf[4]=sys_ctrl.stime[2][1]%10+0x30;buf[5]=':';buf[6]=sys_ctrl.stime[2][2]/10+0x30;buf[7]=sys_ctrl.stime[2][2]%10+0x30;buf[8]='\0';OLED_ShowString(3*16,6,buf,16);switch(sys_ctrl.mode){case 1://吃药-时OLED_ShowString(3*16,0,"  ",16);delay_ms(50);buf[0]=sys_ctrl.stime[0][0]/10+0x30;buf[1]=sys_ctrl.stime[0][0]%10+0x30;buf[2]='\0';OLED_ShowString(3*16,0,buf,16);break;case 2://吃药-分OLED_ShowString(3*16+3*8,0,"  ",16);delay_ms(50);buf[0]=sys_ctrl.stime[0][1]/10+0x30;buf[1]=sys_ctrl.stime[0][1]%10+0x30;buf[2]='\0';OLED_ShowString(3*16+3*8,0,buf,16);break;case 3://吃药-秒OLED_ShowString(3*16+6*8,0,"  ",16);delay_ms(50);buf[0]=sys_ctrl.stime[0][2]/10+0x30;buf[1]=sys_ctrl.stime[0][2]%10+0x30;buf[2]='\0';OLED_ShowString(3*16+6*8,0,buf,16);break;case 4://运动-时OLED_ShowString(3*16,3,"  ",16);delay_ms(50);buf[0]=sys_ctrl.stime[1][0]/10+0x30;buf[1]=sys_ctrl.stime[1][0]%10+0x30;buf[2]='\0';OLED_ShowString(3*16,3,buf,16);break;case 5://运动-分OLED_ShowString(3*16+3*8,3,"  ",16);delay_ms(50);buf[0]=sys_ctrl.stime[1][1]/10+0x30;buf[1]=sys_ctrl.stime[1][1]%10+0x30;buf[2]='\0';OLED_ShowString(3*16+3*8,3,buf,16);break;case 6://运动-秒OLED_ShowString(3*16+6*8,3,"  ",16);delay_ms(50);buf[0]=sys_ctrl.stime[1][2]/10+0x30;buf[1]=sys_ctrl.stime[1][2]%10+0x30;buf[2]='\0';OLED_ShowString(3*16+6*8,3,buf,16);break;case 7://休息-时OLED_ShowString(3*16,6,"  ",16);delay_ms(50);buf[0]=sys_ctrl.stime[2][0]/10+0x30;buf[1]=sys_ctrl.stime[2][0]%10+0x30;buf[2]='\0';OLED_ShowString(3*16,6,buf,16);break;case 8://休息-分OLED_ShowString(3*16+3*8,6,"  ",16);delay_ms(50);buf[0]=sys_ctrl.stime[2][1]/10+0x30;buf[1]=sys_ctrl.stime[2][1]%10+0x30;buf[2]='\0';OLED_ShowString(3*16+3*8,6,buf,16);break;case 9://休息-秒OLED_ShowString(3*16+6*8,6,"  ",16);delay_ms(50);buf[0]=sys_ctrl.stime[2][2]/10+0x30;buf[1]=sys_ctrl.stime[2][2]%10+0x30;buf[2]='\0';OLED_ShowString(3*16+6*8,6,buf,16);break;}}	}break;		}
}//系统数据设置
void sys_data_set(void)
{u8 key=0;static u8 oneflag=0;//有人的时候if(sys_ctrl.window==1){key=KEY_Scan(1);//语音识别if(USART1_RX_BUF[0]==LED_ON_CMD)//开灯{USART1_RX_BUF[0]=0;LED=0;sys_ctrl.led=1;	}else if(USART1_RX_BUF[0]==LED_OFF_CMD)//关灯{USART1_RX_BUF[0]=0;LED=1;sys_ctrl.led=0;	}else if(USART1_RX_BUF[0]==MOTOR_ON_CMD)//开风扇{USART1_RX_BUF[0]=0;MOTOR=0;sys_ctrl.motor=1;	}else if(USART1_RX_BUF[0]==MOTOR_OFF_CMD)//关风扇{USART1_RX_BUF[0]=0;MOTOR=1;sys_ctrl.motor=0;}else if(USART1_RX_BUF[0]==ALARM_OFF_CMD)//关闹铃{USART1_RX_BUF[0]=0;sys_ctrl.alarm=0;OLED_ShowString(0,6,"        ",16);}	}	//模式设置if(key==KEY3_PRESS){sys_ctrl.mode++;if(sys_ctrl.mode>9)sys_ctrl.mode=1;	if(oneflag==0)//时间设置界面仅显示1次{oneflag=1;sys_time_set_show();//系统时间设置界面显示	}}//在设置模式下,加else if(key==KEY1_PRESS){switch(sys_ctrl.mode){case 1://吃药-时sys_ctrl.stime[0][0]++;if(sys_ctrl.stime[0][0]>23)sys_ctrl.stime[0][0]=0; break;case 2://吃药-分sys_ctrl.stime[0][1]++;if(sys_ctrl.stime[0][1]>59)sys_ctrl.stime[0][1]=0; break;case 3://吃药-秒sys_ctrl.stime[0][2]++;if(sys_ctrl.stime[0][2]>59)sys_ctrl.stime[0][2]=0; break;case 4://运动-时sys_ctrl.stime[1][0]++;if(sys_ctrl.stime[1][0]>24)sys_ctrl.stime[1][0]=0; break;case 5://运动-分sys_ctrl.stime[1][1]++;if(sys_ctrl.stime[1][1]>59)sys_ctrl.stime[1][1]=0; break;case 6://运动-秒sys_ctrl.stime[1][2]++;if(sys_ctrl.stime[1][2]>59)sys_ctrl.stime[1][2]=0; break;case 7://休息-时sys_ctrl.stime[2][0]++;if(sys_ctrl.stime[2][0]>24)sys_ctrl.stime[2][0]=0; break;case 8://休息-分sys_ctrl.stime[2][1]++;if(sys_ctrl.stime[2][1]>59)sys_ctrl.stime[2][1]=0; break;case 9://休息-秒sys_ctrl.stime[2][2]++;if(sys_ctrl.stime[2][2]>59)sys_ctrl.stime[2][2]=0; break;		}		}//在设置模式下,减else if(key==KEY2_PRESS){switch(sys_ctrl.mode){case 1://吃药-时sys_ctrl.stime[0][0]--;if(sys_ctrl.stime[0][0]<0)sys_ctrl.stime[0][0]=23; break;case 2://吃药-分sys_ctrl.stime[0][1]--;if(sys_ctrl.stime[0][1]<0)sys_ctrl.stime[0][1]=59; break;case 3://吃药-秒sys_ctrl.stime[0][2]--;if(sys_ctrl.stime[0][2]<0)sys_ctrl.stime[0][2]=59; break;case 4://运动-时sys_ctrl.stime[1][0]--;if(sys_ctrl.stime[1][0]<0)sys_ctrl.stime[1][0]=23; break;case 5://运动-分sys_ctrl.stime[1][1]--;if(sys_ctrl.stime[1][1]<0)sys_ctrl.stime[1][1]=59; break;case 6://运动-秒sys_ctrl.stime[1][2]--;if(sys_ctrl.stime[1][2]<0)sys_ctrl.stime[1][2]=59; break;case 7://休息-时sys_ctrl.stime[2][0]--;if(sys_ctrl.stime[2][0]<0)sys_ctrl.stime[2][0]=23; break;case 8://休息-分sys_ctrl.stime[2][1]--;if(sys_ctrl.stime[2][1]<0)sys_ctrl.stime[2][1]=59; break;case 9://休息-秒sys_ctrl.stime[2][2]--;if(sys_ctrl.stime[2][2]<0)sys_ctrl.stime[2][2]=59; break;		}	}//确定else if(key==KEY4_PRESS){	if(oneflag==1){sys_ctrl.mode=0;oneflag=0;sys_parm_show();//系统数据参数显示界面	}//闹铃if(sys_ctrl.alarm==1){sys_ctrl.alarm=0;OLED_ShowString(0,6,"        ",16);	}	}
}//应用控制系统
void appdemo_show(void)
{u8 i=10;KEY_Init();ctrl_pin_init();BEEP_Init();DS18B20_Init();//等待温度数据稳定while(i--){sys_ctrl.temp=DS18B20_GetTemperture()*10;delay_ms(100);	}OLED_Init();USART1_Init(9600);printf("USART1_Init OK\r\n");TIM2_Init(400-1,70);//定时10mssys_parm_init();//系统参数初始化sys_open_show();//系统初始界面显示TIM_Cmd(TIM2,ENABLE); //打开定时器while(1){sys_data_get();//系统数据获取sys_data_show();//系统数据显示sys_data_set();//系统数据设置sys_fun_ctrl();//系统功能控制		}
}

三、实验现象

B站演示视频:https://space.bilibili.com/444388619

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述


联系作者

视频地址:https://space.bilibili.com/444388619/video
专注于51单片机、STM32、国产32、DSP、Proteus、ardunio、ESP32、物联网软件开发,PCB设计,视频分享,技术交流。

相关文章:

【Proteus仿真】【STM32单片机】智能语音家居陪护机器人

文章目录 一、功能简介二、软件设计三、实验现象联系作者 一、功能简介 本项目使用Proteus8仿真STM32单片机控制器&#xff0c;使用OLED显示模块、红外传感器、蜂鸣器、DS18B20温度传感器&#xff0c;风扇LED、语音识别模块等。 主要功能&#xff1a; 系统运行后&#xff0c;…...

C#上位机序列10: 批量读写+点对点更新+数据类型处理

一、源码结构 二、运行效果 三、源码解析 PLC批量读写点对点更新数据类型处理 优点&#xff1a;根据数据类型&#xff0c;判定监听的地址范围&#xff08;40120_int 监听两个word&#xff1a;40120 40121&#xff1b;40130_long 监听四个word&#xff1a;40130 40131 40132 4…...

MySQL 概述 数据库表操作 数据增删改

目录 MySQL概述前言安装与配置MySQL登录与卸载 数据模型概述SQL简介SQL通用语法简介SQL分类 数据库设计(数据库操作)-DDL数据库操作查询数据库 show databases、select database()创建数据库 create database使用数据库 use删除数据库 drop database 图形化工具连接数据库操作数…...

存储器概述

一、存储系统基本概念...

Fabric.js 使用自定义字体

本文简介 点赞 关注 收藏 学会了 如果你使用 Fabric.js 做编辑类的产品&#xff0c;有可能需要给用户配置字体。 这次就讲讲在 Fabric.js 中创建文本时怎么使用自定义字体、在项目运行时怎么修改字体、以及推荐一个精简字体库的工具。 学习本文前&#xff0c;你必须有一点…...

【C++项目】高并发内存池第七讲性能分析

目录 1.测试代码2.代码介绍3.运行结结果 1.测试代码 #include"ConcurrentAlloc.h" #include"ObjectPool.h" #include"Common.h" void BenchmarkMalloc(size_t ntimes, size_t nworks, size_t rounds) {std::vector<std::thread> vthread(…...

【JavaScript】快速学习JS

JS区分大小写&#xff0c;后面的分号可有可无&#xff1b; 输出语句 window.alter() // 写入警告框&#xff1b;在浏览器中的警告弹窗输出 document.write() // 写入html输出&#xff1b;在html页面中输出 console.log() // 写入浏览器控制台&#xff1b;在控制台输出 变量…...

控制输入流,从控制台打印到文件中,更改输出的位置

public static void main(String[] args) throws IOException {PrintStream printStream System.out;//在默认情况下&#xff0c;PrintStream 输出数据的位置 标准输出&#xff0c;即显示器printStream.print("Tom,hello");/*public void print(String s) {if (s n…...

计算线阵相机 到 拍摄产品之间 摆放距离?(隐含条件:保证图像不变形)

一物体被放置在传送带上&#xff0c;转轴的直径为100mm。已知线阵相机4K7u&#xff08;一行共4096个像素单元&#xff0c;像素单元大小7um&#xff09;&#xff0c;镜头35mm&#xff0c;编码器2000脉冲/圈。保证图像不变形的条件下&#xff0c;计算相机到产品之间 摆放距离&…...

【网络】详解http协议

目录 一、认识URLurlencode和urldecode 二、HTTP协议HTTP协议格式HTTP的方法HTTP的状态码HTTP常见Header 一、认识URL URL叫做统一资源定位符&#xff0c;也就是我们平时俗称的网址&#xff0c;是因特网的万维网服务程序上用于指定信息位置的表示方法。 urlencode和urldecode …...

1819_ChibiOS的互斥信号与条件变量

全部学习汇总&#xff1a; GreyZhang/g_ChibiOS: I found a new RTOS called ChibiOS and it seems interesting! (github.com) 1. 关于会吃信号与条件变量的全局配置提供了4个配置信息&#xff0c;分别是互斥信号的使能、互斥信号的递归支持、条件变量的使能、条件变量的超时使…...

CSDN学院 < 华为战略方法论进阶课 > 正式上线!

目录 你将收获 适用人群 课程内容 内容目录 CSDN学院 作者简介 你将收获 提升职场技能提升战略规划的能力实现多元化发展综合能力进阶 适用人群 主要适合公司中高层、创业者、产品经理、咨询顾问&#xff0c;以及致力于改变现状的学员。 课程内容 本期课程主要介绍华为…...

电商接口api数据比价接口推荐

当前&#xff0c;受诸多因素的影响&#xff0c;经济下行&#xff0c;在日趋激烈的市场竞争中&#xff0c;很多企业也都面临着越来越大的生存压力&#xff0c;企业的盈利空间也逐渐被压缩。因此&#xff0c;越来越多的企业在控制成本方面更下功夫&#xff0c;这也就对企业采购提…...

读取Excel的工具类——ExcelKit

文章目录 ExcelKit工具类1、准备工作1.1、SheetInfoVo1.2、BizException 2、读取xlsx3、读取xls4、完整的ExcelKit.java源码 ExcelKit工具类 1、准备工作 1.1、SheetInfoVo import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor;import …...

vscode连接服务器一直retry

解决方法 打开vscode控制面板&#xff0c;输入命令remote-ssh: kill vs code server on host 选择一直连接不上的服务器端口 重新连接...

Spring Cloud Sentinel整合Nacos实现配置持久化

sentinel配置相关配置后无法持久化&#xff0c;服务重启之后就没了&#xff0c;所以整合nacos&#xff0c;在nacos服务持久化&#xff0c;sentinel实时与nacos通信获取相关配置。 使用上一章节Feign消费者服务实现整合。 版本信息&#xff1a; nacos:1.4.1 Sentinel 控制台 …...

STM32F4VGT6-DISCOVERY:uart1驱动

对于这款板子&#xff0c;官方并没有提供串口例程&#xff0c;只能自行添加。 一、PA9/PA10复用成串口1功能不可用 驱动测试代码如下&#xff1a; main.c: #include "main.h" #include <stdio.h>void usart1_init(void) {GPIO_InitTypeDef GPIO_InitStruct…...

C语言之 结构体,枚举,联合

目录 1.结构体 1.1结构的基础知识 1.2结构的声明 1.3 特殊的声明 1.4 结构的自引用 1.5 结构体变量的定义和初始化 1.6 结构体内存对齐 1.7 修改默认对齐数 1.8 结构体传参 2. 位段 2.1 什么是位段 2.2位段的内存分配 2.3 位段的跨平台问题 3. 枚举 3.1 枚举类型…...

红米电脑硬盘剪切

Redmi R14 2023版固态硬盘剪切 工具准备操作结尾语 首先要说明&#xff0c;本文所说的操作不一定适合你的电脑&#xff0c;因为电子产品更新换代过快&#xff0c;你的硬盘不一定能剪切&#xff0c;在操作前一定要仔细观察硬盘的型号&#xff0c;是否为同款&#xff0c;我上了图…...

微信小程序在线预览PDF文件

需求&#xff1a;微信小程序在线预览PDF合同文件&#xff0c;加载完成后强制阅读10秒才可点击同意按钮 H5代码&#xff1a; <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" cont…...

2025年能源电力系统与流体力学国际会议 (EPSFD 2025)

2025年能源电力系统与流体力学国际会议&#xff08;EPSFD 2025&#xff09;将于本年度在美丽的杭州盛大召开。作为全球能源、电力系统以及流体力学领域的顶级盛会&#xff0c;EPSFD 2025旨在为来自世界各地的科学家、工程师和研究人员提供一个展示最新研究成果、分享实践经验及…...

【位运算】消失的两个数字(hard)

消失的两个数字&#xff08;hard&#xff09; 题⽬描述&#xff1a;解法&#xff08;位运算&#xff09;&#xff1a;Java 算法代码&#xff1a;更简便代码 题⽬链接&#xff1a;⾯试题 17.19. 消失的两个数字 题⽬描述&#xff1a; 给定⼀个数组&#xff0c;包含从 1 到 N 所有…...

Objective-C常用命名规范总结

【OC】常用命名规范总结 文章目录 【OC】常用命名规范总结1.类名&#xff08;Class Name)2.协议名&#xff08;Protocol Name)3.方法名&#xff08;Method Name)4.属性名&#xff08;Property Name&#xff09;5.局部变量/实例变量&#xff08;Local / Instance Variables&…...

电脑插入多块移动硬盘后经常出现卡顿和蓝屏

当电脑在插入多块移动硬盘后频繁出现卡顿和蓝屏问题时&#xff0c;可能涉及硬件资源冲突、驱动兼容性、供电不足或系统设置等多方面原因。以下是逐步排查和解决方案&#xff1a; 1. 检查电源供电问题 问题原因&#xff1a;多块移动硬盘同时运行可能导致USB接口供电不足&#x…...

新能源汽车智慧充电桩管理方案:新能源充电桩散热问题及消防安全监管方案

随着新能源汽车的快速普及&#xff0c;充电桩作为核心配套设施&#xff0c;其安全性与可靠性备受关注。然而&#xff0c;在高温、高负荷运行环境下&#xff0c;充电桩的散热问题与消防安全隐患日益凸显&#xff0c;成为制约行业发展的关键瓶颈。 如何通过智慧化管理手段优化散…...

现代密码学 | 椭圆曲线密码学—附py代码

Elliptic Curve Cryptography 椭圆曲线密码学&#xff08;ECC&#xff09;是一种基于有限域上椭圆曲线数学特性的公钥加密技术。其核心原理涉及椭圆曲线的代数性质、离散对数问题以及有限域上的运算。 椭圆曲线密码学是多种数字签名算法的基础&#xff0c;例如椭圆曲线数字签…...

实现弹窗随键盘上移居中

实现弹窗随键盘上移的核心思路 在Android中&#xff0c;可以通过监听键盘的显示和隐藏事件&#xff0c;动态调整弹窗的位置。关键点在于获取键盘高度&#xff0c;并计算剩余屏幕空间以重新定位弹窗。 // 在Activity或Fragment中设置键盘监听 val rootView findViewById<V…...

华为云Flexus+DeepSeek征文|DeepSeek-V3/R1 商用服务开通全流程与本地部署搭建

华为云FlexusDeepSeek征文&#xff5c;DeepSeek-V3/R1 商用服务开通全流程与本地部署搭建 前言 如今大模型其性能出色&#xff0c;华为云 ModelArts Studio_MaaS大模型即服务平台华为云内置了大模型&#xff0c;能助力我们轻松驾驭 DeepSeek-V3/R1&#xff0c;本文中将分享如何…...

Springboot社区养老保险系统小程序

一、前言 随着我国经济迅速发展&#xff0c;人们对手机的需求越来越大&#xff0c;各种手机软件也都在被广泛应用&#xff0c;但是对于手机进行数据信息管理&#xff0c;对于手机的各种软件也是备受用户的喜爱&#xff0c;社区养老保险系统小程序被用户普遍使用&#xff0c;为方…...

水泥厂自动化升级利器:Devicenet转Modbus rtu协议转换网关

在水泥厂的生产流程中&#xff0c;工业自动化网关起着至关重要的作用&#xff0c;尤其是JH-DVN-RTU疆鸿智能Devicenet转Modbus rtu协议转换网关&#xff0c;为水泥厂实现高效生产与精准控制提供了有力支持。 水泥厂设备众多&#xff0c;其中不少设备采用Devicenet协议。Devicen…...