手机APP物联网远程控制开关

姓 名 孟嘉磊

摘 要

随着物联网技术应用到了楼宇自动化建设和工业现场控制之中,远程控制开关有着十分广阔的应用前景,因此物联网开关成为了智慧楼宇的核心组成部分。在工业4.0的推动下,这就要求普通的开关不仅只用于控制开关,还要对现场或者恶劣环境的数据进行采集和上传。因此,本设计在物联网的基础技术上设计一款远程开关实现对工业远程控制和智能家居远程控制的研究工作。
本设计将在传统RTU远程终端单元的基础上,另行设计一款可以有线直连、无线连接、远程公网访问、带采集功能的一组开关设备。结合RTU优点使其可以应用于物联网行业,包括工业测控、智慧家居、智慧农业
目 录
1 绪论 1

1.1 课题背景 1
1.2 国内外研究情况 1
1.3 研究意义 2 2 系统总体方案设计 3
2.1 设计主要工作及基本要求 3
2.2 方案论证与选择 3
2.3 系统框图分析 5
2.4 系统总体方案设计 7 3 系统的硬件设计及系统流程 9
3.1 单片机核心电路 9
3.2 电源模块电路 10
3.3 模拟输入电路 11
3.4 数字输入电路 12
3.5 安信可A9模块 13
3.6 485通信模块 14
3.7 数字输出模块 14
3.8 串转并和扩展模块 15
3.9 串口转以太网模块 16 4 系统的软件设计及其流程 19
4.1 下位机主要程序 19
4.2 上位机和web网页 26 5 设计过程中遇到的问题和解决方案 36
5.1 硬件问题和解决方案 36
5.2 软件问题和解决方案 37 6 结论 39

1 绪论

跟随着物联网的发展,物联网无线传输技术和产品在智能电网领域、民用商用公共计量领域、工业现场控制领域、智能家居和智慧农业领域得以应用和发展。其可以作为物理系统信息本地数据采集、传输和分析的载体,联网而实现数据的物联网化。并且新兴的物联网产业链则是受到了全世界各个国家和各个技术领域的高度重视,并作为战略性新兴产业关注和发展。基于物联网的智慧服务和产品将成为下一代互联网时代的特征。物联网远程开关的设计诞生在这个物联网潮流下,其可以实现跨空间对设备进行开关控制,有利于快速及时对设备进行开关控制、提高设备控制效率和节省人力。除了对现场设备的开关控制,在作为智慧楼宇,智慧家居中也起到智能远程控制的作用。同样,基于这种开关设备,对于轻量级的工业现场还具备数据采集传输的功能。这种物联网设备成功应用于智慧楼宇、工业控制和智慧农业等各个领域。本次设计通过设计一款物联网远程控制开关,为今后工业4.0,智慧楼宇的兴起都起到了一些推动作用。
1.1 课题背景
物联网远程开关作为一种联网数据采集控制设备,在其设计及制造过程需要的技术理论知识涵盖了数字电路、模拟电路、传感器、控制算法、滤波算法、电磁兼容、通信技术和计算机科学等众多学科[1]。其联网控制及数据采集上传的方案作为工业控制领域和今后智慧楼宇的发展有着较为广泛的应用前景,会逐渐成为国内外高科技术企业和众多高校院所的研究方向和热点。
1.2 国内外研究情况
全球的物联网市场发展势头迅猛,随着2020工业4.0概念的提出,全球各个发达国家包括德国、美国、俄罗斯等国的远程控制技术和物联网技术的标准、应用、服务都还处于初步发展阶段。其中德国工业4.0概念与国内相近,成竞争趋势。在21世纪亦或者未来几年,物联网技术的应用市场规模会出现快速增长,包括其分支工业控制、智慧农业、智慧楼宇等等也相继普及。到2023年预计全球物联网市场规模将会达到2.8万亿美圆。对此,全球各个发达国家相继出台政策对于物联网的研究进行战略布局,抢占新一轮信息技术革命的先机。例如,美国就有了“智慧地球”计划以物联网技术为核心、欧盟的十四点行动计划、日本的“U-Japan计划”、韩国的“IT839战略”和“u-Korea”战略、新加坡的“下一代I-Hub”计划、台湾的U-Taiwan计划等等都将物联网技术作为当前的战略目标;前瞻产业研究院发布的《2018-2023年中国物联网行业细分市场需求与投资机会分析报告》大致预计,2017年全球物联网设备的数量到达84亿,比2016年的64亿增长了31%,预计2020年全球物联网设备数量将达到204亿[2]。
我国国内方面,得到技术和人才引进的受益和政府企业资金的响应支持,在互联网+和双创等带动下,国内物联网虽然起步较晚,在工业控制领域和智慧楼宇方面的物联网技术应用和研究也取得了一定的成果。在企业、高校、科研院所各界共同努力之下,国内逐步形成了一套芯片、元器件、软件、电器、物联网服务业等较为完善的物联网产业链,能够基本实现基于移动通信网络部署到机器。生态体系逐渐完善。截至到如今,国内的电信企业也开始启动NB-IoT网络建设即窄带物联网,截至2017年全国网络基站数量规模远超40万站,商用网络也进入了部分省市。很多地方政府都支持NB-IoT发展,例如江西鹰潭等地,都在推进超过十万台的基于NB-IoT的智能水表的安装;西藏还将尝试将NB-IoT物联网技术引进到牦牛市场。在工业级远程控制领域,有人物联网、大唐电信等公司也相继设计了一系列GPRS远程控制器[3]。
1.3 研究意义
物联网远程开关的设计可以应用在智慧楼宇的建设当中,实现对灯具,动力,插座的控制[4]。不仅仅用在智慧楼宇当中,同样这种控制方案及方法可以应用于工业控制领域、智慧农业的建设当中,实现了对工业操作现场的数据进行采集和远程传输,实现直连、局域网、远程都得以应用,解放大量人力资源,减少了生产成本,而且设计的电路板体积小,便于安装和操作。物联网远程控制开关是物联网应用的一个分支,其发展对将对国内外物联网技术和产业,工业控制领域起到推动的作用,完整的控制技术最终将实现互联网、物联网服务行业的智能化,同时也能奠定一个国家在该领域的地位。

2 系统总体方案设计

2.1 技术指标 本次毕业设计的主要任务是通过设计软硬件以及相应手机app程序、上位机软件和网页实现一款物联网远程终端控制开关系统,针对较长距离和工业现场环境恶劣,增加远程数据采集和通信的功能。其中,包括对设备的数字量或开关量的输出与输入,模拟量的输入还有远程通讯模块的设计,以及设备运行状态指示灯,预留出响应扩展口用以应对工业现场复杂环境。
主要工作包括:硬件部分主要包括:主控芯片单片机、网络通信芯片、稳压芯片、串口通信芯片、GPRS通信芯片、隔离芯片以及其它元器件的选型;原理图和PCB的设计和绘制;元器件检测和焊接;软件部分包括:手机APP的编写;GPRS通信调试;继电器算法编写;ADC采集算法编写;串口通信算法编;上位机软件编写;网页制作及其相应参数调试;最后整体测试联调。
基本要求: (1)手机APP、上位机; (2)网络通信带网口、GPRS或NB_IoT通信[5]; (3)内置8路数字输入、8路数字输出;
(4)一路RS485/232接口,通信协议为标准MODBUS; (5)四路420mA或者05V模拟输入;支持外部IO接口扩展。

2.2 方案论证

2.2.1 GPRS模块 方案一:SIM800C模块,可做TCP/UDP客户端与服务器端[6];支持Unicode,UTF8;可以发送JPG图片;接收彩信的标题、文本和图像数据时我,可以自建一个MMS文件,用户可以通过设置MMS目的地是电话号码或是电子邮件;软件支持录音、DTMF检测、SSL、蓝牙3.0.根据需求,SIM公司的SIM800C模块完全满足设计性需求。
方案二: 安信可A9,是安信可公司最新出的 GPRS
数据传输模块,主要应用于物联网、车载、电力环境检测等工业现场和领域。主要功能有:具有标准的AT和TCP/IP命令接口;数字音频和模拟音频以及语音编码;支持GSM/GPRS四个频段,包括850/900/1800/1900MHz;GPRS
Class 10;支持SMS短信和语音通话。
在方案一和方案二两种不同模块进行对比之后,发现从功能上两者都能满足设计开发需求。通过调研发现SIM800C的单价普遍比安信可A9高出12元;从功耗方面比较,SIM800C多了个蓝牙功能,普通功耗将会上升100200mA。所以最终考虑选择国产安信可A9模块。模块54个引脚,比之前42脚的A和SIM800C多出12个引脚,对后期二次开发奠定了硬件基础。
2.2.2串口转以太网模块 由于STM32F103C8T6内部没有串口转以太网外设,完成设计功能需要一个串口转以太网模块。 方案一:卓岚1003物联网芯片,单芯片设计方案,能够把TTL/USART串口单片机连接至以太网;支持自动协商功能,支持自动交叉线检测;并且ZLAN1003内部固化TCP/IP协议栈,不需要我们再做TCP/IP协议移植的二次开发;支持发送连接上的芯片或者设备的MAC地址功能。ZLAN1003内部具有一个10M/100M的以太网接口,并且芯片内部已经集成PHY功能,应用的时候不需要外加PHY芯片,完全满足设计需求。
方案二:
W5500,其拥有全球唯一的全硬件TCP/IP协议栈专利技术,能解决部分嵌入式以太网的接入网络的难题,开发简单好用,安全和性能稳定,是物联网设备的主要解决方案。同样具有TCP/IP协议栈;支持以太网MAC。支持嵌入式操作系统:Linux和RTOS等等实时操作系统。
尽管方案一方案二功能都能实现,方案二的W5500芯片性价比高。但我们选择了方案一的卓岚1003.同样从成本考虑,卓岚1003的成本,开发成本相对于W5500来说低一点。ZLAN1003的产品公司已经开发出一套自定义的web,可以通过web的方式设置IP地址和波特率等参数,还具有Modbus网关功能,更加适合应用于工业现场。
2.2.3继电器驱动 方案一:通过STM32管脚直接控制输出继电器 方案二:利用串口转并口芯片74H164驱动继电器 方案一用单片机管脚直接控制输出继电器方便程序开发,软件容易实现,但是会过分占用单片机资源。本设计输出八个继电器,用方案一就会占用单片机八个引脚。而使 用串转并芯片,有效的避免了单片机管脚的资源浪费。通过两个引脚就可以控制74H164输出八位并行信号,从而控制继电器吸合。物联网远程控制开关采用方案二作为驱动继电器的工作方式。
2.2.4下位机开发工具 方案一:使用德国Keil公司的Keil5 for ARM 方案二:使用IAR Systems的IAR Embedded Workbench
作为主流的嵌入式软件开发环境KEIL和IAR都具备各自的优点和缺点,本次设计主要采用KEIL来编译程序。主要是由于IAR生成的工程文件用其它版本或者低版本的IAR打开会出现一些意想不到的错误,存在相当严重的版本不兼容问题,KEIL虽然编译速度与IAR相比稍逊一筹,但是KEIL不存在这种版本不兼容的严重问题,因此,考虑到下位机程序后期不断的更新和迭代过程出现程序频繁移植的情况,所以程序编译环境选择KEIL。并且keil5学习资料较为丰富,因此选用方案一。
2.2.5库函数 方案一:使用标准库函数开发 方案二:使用HAL库函数开发 ST公司为其STM32系列单片机开发提供以上两种开发库。对比而言,标准库较HAL库出现的更早,两者结构和调用接口的方式大致相似但是却不兼容;由于标准库出现较早,因此标准库使用者更多,并且广泛使用与STM32F1系列的单片机的开发中;使用和学习资源丰富。HAL库,需要搭配ST公司最新推出的STM32
CubeMX图像化代码编辑生成软件,为开发者提供了很大程度上的方便,其能够实现大跨度的不同产品之间的移植性问题。但主要原因是在程序初期开发阶段,HAL会对开发程序员存在一些小问题,出于设计的稳定安全可靠,此次设计使用标准库函数开发。
2.3 系统框图分析 物联网远程控制开关的系统硬件框图如图2-1所示。电源模块由外部+12V电源输入直接给继电器供电,一路经过LDO芯片将电压转化为+5V,给485芯片、串转并芯片提供电压;另一路经过低功耗大电流驱动的电压转换芯片MIC29302将电压转化为+4V,为GPRS模块提供电压;+5V再经过LDO芯片转化为+3.3V为单片机和串口转以太网芯片提供电压;还有一路+3.3V转化为+1.8V为串口转以太网芯片提供外部电压。通信模块主要是安信可A9模块、485/232模块和串口转以太网模块。下载和调试模块为SWD模式,节省了不少硬件成本。输入模块有按键复位、八路光耦输入和四路模拟输入,全部直接由单片机管脚输入。板载输出部分是继电器输出,相应做了输入保护和输出隔离电路,防止漏电事故发生。
物联网远程控制开关系统的主要功能框图如图2-2所示,由单片机作为控制器通过IO组件采集到设备的数据并通过485进行传输,通过GPRS通信或者TCP/IP协议上传到云端服务器,用户端可以通过云下设备对控制器发送指令来控制远端的设备和仪器。

**

2.4 总体方案设计

**
> 2.4.1 芯片 主控芯片:主控制器选择STM32F103C8T6这款32位单片机,该单片机是一款基于ARM Cortex-M3内核的32位控制器,工作电压为+3.3V,速度72MHz,具有三个串口,2路12位的AD转换器,功能齐全,完全满足设计需求。并且资源相当丰富,便于开发。比起其他同类型的32位单片机成本更低。非常适合工业领域[7]。
> RS485通信芯片:选用的是美信公司的一款市面上最常见的RS485芯片,MAX485。开发简单,只需要一个滤波电容和两个保护二级管就可构成完整模块。可以直接接入单片机管脚控制和收发数据。经过大量实验测试,其抗干扰能力比较强,适合作为工业领域的远程传输芯片。
> RS232通信芯片:美信公司的MAX3232,它是具有两路输出驱动器和两路输出接收器的芯片,意味着拥有两路输出RS232信号电平,具有低压差发送器输出及,硬件电路简单,仅需要四个104电荷泵电容即可,其功耗比MAX232低,一般用于工业和航空领域,而MAX232一般用于商用或者民用级别的产品开发。
> 2.4.2 电源 电源芯片:具体电路主要采用的是1117系列芯片,低压差线性电压调节器系列芯片,在LDO系列芯片中占据主要地位。例如,ASM1117、BL1117、LM1117等。输出电流一般都在11.5A之间。体积小,成本低,方案选择ASM1117系列。选用ASM1117-5.0,ASM1117-3.3,ASM1117-1.8作为主要电源芯片。对于有功率要求的GPRS模块,选择主流的GPRS供电方案,用MIC29302芯片提供电源转换。GPRS模块要求输入电压在3.6V4.2V之间,电流峰峰值可达2A。MIC29302也是一款低压差稳压器,与1117系列不同的是其输出电压可调,能够稳定输出电流3A,到达了驱动GPRS模块的能力。
> 电源供电方案主要由四部分组成:一是+12V电压直接供给继电器,另一部分+12V电压经过ASM1117-5.0转化为+5V给485芯片、232芯片和74H164供电;二是+5V经过ASM1117-3.3将电压转化成+3.3V供给单片机和串口转以太网芯片ZLAN1003;三是一路+12V经过MIC29302转换成+4V供给GPRS模块;四是+3.3V经过ASM1117-1.8转化成+1.8V给串口转以太网芯片ZLAN1003提供外部电压。
> 2.4.3 下载调试电路 作为STM32单片机的主要几种下载方式:ISP下载(即串口下载)、JLINK和STLINK。但是串口下载不能在线仿真和调试。其调试方式主要有J-TAG和SWD两种。由于串口下载方式不能在线调试和仿真,因此会对后期的调试造成不便,所以不选择它作为主要下载方式。JLINK下载方式和STLINK下载方式都支持在线仿真调试且支持市面上的大部分ARM内核芯片,而且都支持和具备J-TAG和SWD两种调试模式。但是两者存在不同的是J-TAG仿真需要下载工具有20个引脚,而SWD只需4个引脚,对成本控制的考虑,选择使用SWD调试模式对主芯片进行程序下载和仿真调试。
> 2.4.4 模拟信号采集 为降低成本和增加设备的稳定性,电流信号由大功率采样电阻将其转化成电压信号,再经过分压电阻输入单片机管脚。
> 2.4.5 数字信号采集 数字信号采集方案用的是光耦隔离的特性,用两组光耦芯片作为数字输入,输入范围为0~10V,并带输入保护功能,光耦芯片通过输出开关量判断导通与否,单片机直接判断开关量的输入。
> 2.4.6数字信号输出 输出采用继电器方案,利用继电器小电流可以控制大电流的特性来控制输出开关量,本次设计采用的是+12V 5A的八组常闭继电器,输出用TVS做阴极和阳极之间的保护,可以直接控制功率小的电器设备。成本低,而且自带隔离功能,非常适合开关场景设备的开发。
>
>
>
>

3 系统的硬件设计

> 3.1 单片机核心电路 整个硬件部分核心电路是以ARM公司推出的 Cortex-M 系列微处理器 STM32F103C8T6及其最小系统作为核心电路。该芯片性能稳定,开发简单,芯片制造厂商ST公司提供了相当丰富的标准库函数,大大缩减了开发工作量,该单片机的工作环境符合工业级芯片标准,环境温度-40~+105℃,非常适合工业领域的开发。它的最小系统电路主要由以下电路组成:
> 复位电路:由阻容器件组成阻容复位方式,高电平复位,通过复位按键接入单片机复位脚,按键复位。
> BOOT模式选择电路:STM32单片机的每块芯片上都有两个管脚BOOT0和BOOT1,这两个管脚在芯片复位时的高低电平状态决定了芯片复位后程序开始从哪个区域执行。这里我们将B00T0置低,BOOT1用作指示灯控制。
> 外部晶振电路:晶振选用8MHz,用1M电阻做阻抗匹配。
> 单片机电源的滤波电路:简单滤波电路就是在单片机的每个VCC管脚接上0.1uF的滤波电容。要注意的是,电容在电路上尽可能的接近电源脚,否则会失去滤波效果,导致单片机运行效果不佳。
> 下载与调试电路:下载和调试模块选择的是四线SWD下载模式,该模式支持在线仿真,比J-TAG模式节省硬件资源。
> 运行灯电路:两组电源指示灯,一组状态指示灯。

3.2 电源模块电路
电源电路如下图所示,+12V供电分成两路,一路经过MIC29302转换成+4V,一路经ASM1117-5.0转换成+5V,再经过ASM1117-3.3转化成+3.3V,再经过ASN1117-1.8转化成+1.8V。参考相应数据手册可以计算出滤波电容和带负载电容大小。MIC29302输出可调电压公式为:
Vo=1.24*(1+R7/R8) 式(3-1)
本设计中R7选为750欧,R8选为330欧,对应输出+4V电压。

图3-2  电源模块电路

3.3 模拟输入电路
板载四路模拟输入原理图如下所示,阻容搭建模拟采集电路转换成STM32单片机可以识别出来的电压信号,再进行解码转换。当输入模拟电压信号0+5V时,电压不会被采样电阻分压,经过后面两个精密分压电阻分压,转换成0+3.3V电压,直接送给单片机,单片机由12位ADC转换器转换解码。当输入的是电流信号4~20mA时,经过大功率的采样电阻转换成电压信号,再由分压电阻转换成电压。不管什么信号都必须经过滤波电容滤波才能进入分压电路,当电流信号进入时,在单片机输入管脚接入1uF的电容,处理掉输入电流信号带来的干扰信号[8]。

图3-3 模拟输入电路电路

3.4 数字输入电路
数字输入电路如下图所示,由外部输入0~10的逻辑电平送给光耦芯片,通过光耦隔离的特性判断是否有信号输入。光耦隔离芯片选用的是东芝公司的TLP532-4。电路之间的信号输出,使输入端与负载完全隔离。输入模式为AC/DC输入,适合应用于工业现车。有输入电压时二极管端发光三极管被导通,上拉+3.3V电压经过限流电阻直接给单片机,单片机接收到高电平信号便完成一次数字式输入。此处应该注意的是三极管两端必须加上1uF电容,防止电路电压突变直接进入单片机,烧毁芯片。

图3-4 数字输入电路

3.5安信可A9模块
此模块电路在整个系统中其着主要的通讯作用,模块主要由A9芯片、GPRS天线、开关电路、状态指示灯电路和SIM卡座电路组成。原理图如下所示。
1)天线:作为高速信号的输出,在进行天线的PCB设计时要求考虑阻抗匹配,天线单层走线,用地线包围,防止外部信号进行干扰。也可以与地接入0.1F的滤波电容和0欧电阻。
2)开关模块:该部分电路参考安信可A9用户手册A9开关的方案设计,将其设计为软件进行开关操作。此电路用的是NPN三极管8050,主要利用三级管的开关特性搭载开关电路。当三极管基极输入低电平时,A9模块V_IO和IO29输入电平信号,使三极管导通,导通信号进入A9模块PW脚,PW脚高电平2秒以上A9开机。
3)SIM卡座:安信可A9模块支持SIM卡,不需要外加驱动电路,设计采用Nano卡座,减少了电路板的体积,节省成本。
4)状态指示灯:模块上分别设置两组状态指示灯,一组指示A9模块运行状态,另一组指示A9模块通讯模式。分别接在A9芯片的IO27和IO28。

图3-5   安信可A9模块电路

3.6 485通讯模块
该电路模块为串行通信接口电路,RS485通信方式为半双工通讯方式[9],模块采用MAX485芯片构成简单的自动收发电路,MAX485芯片只需要在电源处加上滤波电容就可以构成两线制的485通讯模块。通过切换PC15-OSC32_OUT的电平的方式来达到485收发状态的切换。PC15-OSC32_OUT低电平时作为接收状态,PC15-OSC32_OUT高电平时作为发送状态。在输出差分线上用TVS做保护,如果工业现场需要远距离布线,则将120欧电阻R2焊接在电路板上,如果实验室短距离测试,则不用焊接R2。485差分信号线匹配电阻为120欧。原理图如下所示。

图3-6 485通讯模块电路

3.7 数字输出模块
板子上设计有八路数字输出模块,原理如下图示。用一组常开继电器作为大电流触电输出器件。通常选择三极管做驱动器件,MOS管是驱动电压器件,我们这里用功率型NMOS,当Ug>Us时,MOS管导通,即继电器阴极被导通,电流流过线圈,继电器吸合,实现控制目的。注意的是阴极和阳极用二极管保护器起来。这里二极管用1N4001即可。继电器的控制是通过74H164这个串转并芯片扩展IO,单片机通过控制74H164,从而实现控制继电器。实现了仅使用两个单片机管脚实现控制八路继电器,节省了六个单片机IO资源。

图3-7 数字输出模块电路

3.8 串转并和扩展模块
1)串转并电路模块:74H164芯片是串行输入数据,然后并行输出,数据由两个输入端A,B其中一个输入,控制其时钟信号脚,便可以输出8位并行数据[10]。输出的八个数据口直接接在8个继电器驱动的MOS管上,通过软件可实现任意控制。这个方案节省了单片机的六个管脚资源,使用两个管脚别可以控制8个继电器。
2)扩展模块:设计中将没有用到的单片机管脚资源,分别通过排针引出来,一共九个,PA和PB可做ADC通道采集通道。扩展口留在板子接口处,以方便后续功能升级开发,测试使用,无需配置,方便使用。

图3-8 串转并和扩展模块电路

3.9 串口转以太网模块
ZLAN1003是一款针对物联网应用设计的芯片。他内部集成PHY功能,因此该模块不需要单独添加PHY芯片。芯片的主要功能就是实现单片机的串口到TCP/IP的协议转化,即能将USART收到的数据传到云端/服务器,云端/服务器下发的数据发送到USART。实现这些功能,不用在额外开发底层驱动程序,ZLAN1003已经固化好TCP/IP协议栈程序,通过配置就可以使用。物联网远程控制开关串口转以太网的电路原理图如下所示:

图3-9串口转以太网模块电路

1)复位电路:芯片的核心电路之一,官网手册上给的最新参考电路为芯片复位,考虑到成本和PCB板面积大小问题,复位电路采用阻容复位。经过多次实验,在模块上电之前只需手动复位一次即可,模块便可以长期工作。
2)电源滤波:同大多数芯片一样,先要对电源进行滤波处理。ZLAN有两个电源,可以外部提供+3.3V和+1.8V电压。+1.8V电压也可以芯片自给,但是这种供电方案会导致芯片发热严重,于是便采取外部提供+1.8V电压的方案。即通过一个 ASM1117-1.8 稳压芯片将 VCC3.3V 转化为+1.8V,然后接入芯片的+1.8V引脚供芯片使用。此时,VCC33VI 和 VCC18O 都接外部 ASM1117-1.8 出来的 +1.8V 电源即可。
3)网口模块电路:我们选择的是集成好的带有网络变压器的HR911105A接口,它的 LINK 和 ACT 引脚连接到 RJ45 的发光LED灯上,用来指示 TCP 连接状态。这里 4 个 49.9 电阻为%1 精度的精密电阻。
4)速度选择电路:该模块一般有两个工作速度,高速和低速。高速设置方法:SPD0 和 SPD1上拉。图3-9中焊接R79电阻,不焊接 R80电阻。此时模块最高波特率能够达到 115200bps。模块选择高速设置,如原理图所示,方案选择高速。
5)布线及其降低功耗设计:因芯片内部集成PHY芯片,工作起来后会产生大量的热,为加快散热做以下处理:
外部供电:即采用外部 ASM1117-1.8 的稳压芯片提供 +1.8V 电源,而不用芯片内部稳压器。原因在于 ASM1117-1.8 的散热性能好于内部带有PHY芯片的模块。但是这个方式将会增加设计一个 +1.8V 稳压器的成本。
PCB布线时注意晶振应该尽量靠近芯片引脚,并且晶振原理电路板的边沿。不要将网络线 RX-、RX+、TX-、TX+通过晶振附近;RX-、RX+为一对差分线,TX-、TX+为一对差分线,一对差分线应该一起走线,避免以分离走不通的路线;ZLAN1003芯片PCB设计时,如果条件允许可以在底下增加 5 个大的导孔,这样可以增加散热。如下图所示:

4 系统的软件设计

4.1 下位机主要程序
下位机即STM32单片机嵌入式的开发使用的工具是Keil Software公司的MDK5 for ARM;开发语言是C语言;使用标准库函数开发,BOOT模式选择位为BOOT0置低,BOOT1不配置,后面将他扩展成IO口,即程序是从从主闪存存储器区域启动;使用的下载工具是STLINK-V2。
下位机中主要的程序是:STM32F103C8T6对外部输入420mA、05V信号的采集;A9的开关机和初始化,以及拨打电话和收发短信,GPRS联网操作;ZLAN1003的配置与联网;RS485/232通信操作;控制八路继电器输出的操作。其中单片机的主要作用是:处理ADC采集的数据将其通过A9、串口转以太网上传至服务器或者上位机;判断逻辑输入,读取被控制设备的状态并上传;解析通过RS485/232或者网络传过来的协议,从而控制继电器输出。
4.1.1 下位机主要程序流程图
下位机程序是不带操作系统的STM32官方标准库函数程序,主要包括各个模块的初始化:A9初始化、ZLAN1003串口转以太网模块初始化、STM32ADC初始化、USART串口初始化、时钟初始化、GPIO初始化、定时器初始化等。首先A9模块、ZLAN1003模块、时钟、GPIO、定时器在主函数while(1)外面初始化一次即可。在主循环while(1)中主要运行:ADC等待中断程序,一直等待外部信号输入触发ADC中断;光耦模块输入请求程序,将光耦模块程序封装在Data_8number()函数中,用来检测外部是否有数字信号的输入;USART串口中断触发和处理程序,A9、ZLAN1003和RS485/232都是串口通信,实时监测串口是否接受到信号,然后采取,断帧,解析协议处理,通过串口将接收到的上位机信号处理完成之后再做出相应回复或者控制动作,通信协议为标准Modbus协议;状态指示灯驱动程序,指示灯实时显示板子运行状态。
所有的控制都在串口中断程序里面进行处理,串口中断全部由串口接收事件触发。各个模块具体流程图及其功能如下所示:
74H164驱动程序:
这部分程序主要实现将驱动信号转换成驱动电平驱动继电器,单片机将信号比如0x55发送给74H164芯片,程序判断是否从高位开始拆解,这块可以人为设置; 下面以大数开始拆解为例,信号到来芯片DA脚拉高,等待时钟跳变,说明一位数据被164内部寄存器处理完成,开始移位进行下一位,直到八位全部输出,大数据在前移位方向向小数据移位,小数据在前处理,移位向前移位。

A9模块程序:
此模块的功能是GPRS收发,单片机通过串口发送AT指令与模块通信,该模块内部集成TCP/IP、GPRS不需要做单独的驱动,单片机直接通过AT指令控制即可。上电初始化检测是否存在SIM卡,然后主动请求TCP连接,连接上TCP服务器后发送测试指令,然后等待单片机指令,或者等待服务器指令。该模块的开关机和复位都由单片机软件控制。

串口转以太网模块程序:
此模块是集成好的串口转以太网通信模块。单片机通过USART串口与该模块通信为主要程序,该模块同样支持AT指令。以太网模块上电之后需要配置,可以手动通过串口或者WEB配置,配置完成后向TCP服务器发送数据包检测通讯,完成后向虚拟发送指令测试,最后通过指令测试Modbus TCP。如果上述步骤出现问题则需要重新配置参数。完成后,等待服务器发送数据包或者等待单片机串口发送指令。

数字输入模块程序:
数字输入模块程序在主循环中已经封装好,直接调用等待触发即可,有信号输入,单片机管脚直接检测到电平变化,做出判断与处理,并上传至服务器或者上位机。

图4-1-4  数字输入模块程序流程图

模拟输入模块程序:
模拟输入不用软件判断是否电压输入,硬件将其处理完成直接送给单片机ADC采集通道,然后单片机通过处理,分析上传到服务器或者上位机。

图4-1-5  模拟输入模块程序流程图
4.1.2 主要算法和指令介绍
断帧处理算法:断帧的意思是在串口收到一帧数据后,发生的中断处理。一帧数据可以理解为给单片机一次发来的数据,一个字节或者八个字节,这一个字节或者八个字节的数据就叫做一帧数据。判断一帧数据是否结束就是断帧处理。
常用如下两种断帧处理方法:时间断帧和协议断帧,设计主要采用时间断帧,主要介绍一下时间断帧法。
时间断帧法,通过在定时器里对两帧数据的时间进行比较,在一帧数据里面前后的两个数据之间的时间差很短,通过判断这个时间,如果在一个时间段内或者超过一定时间没有数据被接收,基本上可以判断为一帧数据已经结束。定时器处理函数如下:
串口中断处理函数


```c
void USART3_IRQHandler(void)							
	{
    
    
  	if(USART_GetITStatus(USART3, USART_IT_RXNE) != RESET) 
  	  {
    
    
     	USART_ClearITPendingBit(USART3, USART_IT_RXNE); //清除空闲中断标志
     	USART3_RBuf[USART3_RBuf_CNT]=USART_ReceiveData(USART3);
     	USART3_RBuf_CNT++;
     	if(USART3_RBuf_CNT>=100) USART3_RBuf_CNT=0;
    	    MBMasterTimersEnable(1);                //开启定时器断帧
    }
  if(USART_GetFlagStatus(USART3, USART_FLAG_ORE) != RESET) 
   {
    
    
     USART_ClearFlag(USART3,USART_FLAG_ORE);    //读SR
     USART_ReceiveData(USART3);     
   }
   } 
定时器中断处理函数
void TIM3_IRQHandler(void)  
{
    
    
   if (RESET != TIM_GetITStatus(TIM3, TIM_IT_Update))
    {
    
    
     TIM_ClearITPendingBit(TIM3, TIM_IT_Update);  //清除定时器中断标志
     MBMasterTimersEnable(0);               //关闭定时器
     mb_rtu_Fram.MB_CNT=USART3_RBuf_CNT;       //获取接收到的数据
     USART3_RBuf_CNT=0;                           //清零
     mb_rtu_Fram.MB_PORT_STA = 1;           //串口接收到数据置位
    }
} 

AT指令:AT指令的简单介绍:Attention,行业简称AT。主要功能是从终端设备或者数据终端设备向终端适配器或者数据电路终端设备发送的[11]。通过终端适配器,终端的设备发送AT指令来控制移动台的功能,与GSM 网络业务进行交互。AT指令格式是以“AT”字母作为开始,字符结束的字符串。对应的每条AT指令执行成功与否都会有相应的返回字符串[12]。
本设计中GPRS安信可A9模块中主要使用的AT指令如下所示:
ATDxxxxxx;              //xxx为电话号码
AT+CMGL=4/ALL		     //查看短信列表 PUD格式下读取参数为4
AT+CMGD=1		        //删除短信。 
AT+CMGF=1             //发送短信,文本方式发送  
AT+CMGS="xxx(电话号码)"          //返回>,然后输入要发送的txt内容并且以	CTRL-Z(16进制为1a)结束即可 
AT+CCID				 //查询CCID,确定是否有SIM卡
AT+CREG?				 //查询是否上网注册
AT+CSQ					 //查询信号质量
AT+GMR					 //返回固件版本信息
AT+CIPSTART="TCP","122.114.122.174",33836  //连接服务器域名或IP
Modbus协议:简单介绍Modbus:该协议是应用于工业电子控制器、PLC以及工业数据传输的的一种广泛应用的通用语言[13]。通过该协议,各个存在控制器的设备之间、设备或者控制器经过局域网或者以太网和其它设备和控制器之间可以进行远距离的通信。随着该协议的广泛使用和时间的验证,已经成为了一项工业标准协议。可以使不同厂商生产的不同的设备之间可以连接成工业控制网络,达到集中监控的效果。 
Modbus的消息结构,是不用管它们是经过何种网络进行通信的,它自身定义了一种能够识别和认识的消息结构。协议的主要内容描述了一控制器或者设备请求和访问其它设备的完整过程,如何回复其它设备发送的请求,以及检测出错误并记录。在使用Modbus协议进行网络通信时,协议内容会决定每个设备各自的设备地址,传输的协议内容会识别按地址发来的消息,从而决定做出什么动作。同样作为回应,该设备会产生回复消息并用同样的协议格式发出。
本次设计主要采用该协议的一个主要原因是由于标准的Modbus使用一组RS-232C兼容串行接口,该项内容定义了连接管脚、线缆、信号位、传输波特率、奇偶校验位。设备之间采用主从通信的方式,即从设备发出请求命令,主设备响应并回复从设备,一般采用一主多从或者多主多从组网方式连接设备。例如PLC和可编程仪表之间的网络。
介绍一下两种传输方式:
ASCII模式:
当设备之间采用的是ASCII通信模式时,那么消息中的每个8Bit字节被当作两个ASCII字符发送。
代码位为:十六进制,一个起始位,七个数据位,一个奇偶校验位,一个停止位,错误校验位,一般为LRC
RTU模式:
当设备之间采用的是RTU即远程终端单元通信模式时,那么每段消息的格式变成每个8Bit字节包含两个4Bit的十六进制字符。目前大多数工业现场的设备采用这种通信模式,他的优点主要是:在相同的波特率下,传输速率会比ASCII通信模式快。
代码位为八位二进制,一个起始位,八个数据位,一个奇偶检验位,一个停止位,错误校验位,一般为CRC
设计主要采用RTU模式,主要介绍一下RTU帧:
RTU通信模式规定,从消息发送出去之后间隔3.5个字符时间开始。传输的第一个8Bit数据是设备地址。从机设备收到地址之后开始解析判断是否是发给自己的,从而进行下一步解析。结束也是3.5个字符时间的停顿,下一条消息可在停顿完成之后进行。 一个完整的消息帧必须被作为是连续的流转输[14]。一典型的消息帧如下所示:
 
图4-1-6 RTU消息帧

4.2 上位机和Web网页
上位机开发语言选择的是C#语言,windows的.Net Framework框架,是.Net平台上的编程语言。Windows上的窗体上位机和web网页都由C#语言编写,用的开发工具是Visual studio 2017,这是一款集成各种语言开发环境,微软官方提供技术文档支持,适合入门级的开发。
上位机主要实现的功能是,通过串口与下位机通信,可视化下位机采集的数据,包括控制下位机指令,后期还可以用来调试下位机。Web网页的主要功能是作为网页服务器,实时接收下位机采集的信息,并且拥有可视化控制界面,有良好的交互功能。
4.2.1 桌面上位机
整个上位机界面和功能包括:串口设置,打开和关闭串口,端口选择和设置波特率;消息区主要负责接收下位机消息或者数据,并且向下位机发送指令或者消息;实时监测设备状态,开关量或者数字量的设备状态还有继电器控制的设备状态;窗口带有清除和退出功能,使用过程中防止卡顿。上位机界面如下图所示:
各部分模块都由GroupBox这个容器控件封装,使界面功能模块化。具体功能和实现:
1、串口设置
如图中标红的1所示,该处主要设置串口的端口、波特率,实现关闭和打开串口的功能。串口未打开时,button控件显示“打开串口”,textbox1背景色为红色,当串口打开时,button控件显示“关闭串口”textbox1背景色会变为绿色。打开串口的事件由button单击触发。具体实现代码如下:

```csharp
private void button1_Click(object sender, EventArgs e) 
{
if (serialPort1.IsOpen)
{
try
{
              serialPort1.Close();
           }
       catch { }
       button1.Text = "打开串口";
}
else
   {
       try
          {
             serialPort1.PortName = comboBox1.Text;
             serialPort1.Open();
             button1.Text = "关闭串口";
          }
       catch
{
          MessageBox.Show("打开失败","错误");
           }
      }
   }
private void SearchAndAddSerialToComboBox(SerialPort MyPort, ComboBox MyBox)
 {     //将可用端口号添加到ComboBox
      string[] MyString = new string[20];                         
    string Buffer;                                              						 //缓存
      MyBox.Items.Clear();                                        				
     for (int i = 1; i < 20; i++)                                						   //循环
     {
        try                                                     				
       {
          Buffer = "COM" + i.ToString();
          MyPort.PortName = Buffer;
          MyPort.Open();               										
          MyString[i - 1] = Buffer;
          MyBox.Items.Add(Buffer);                            				
          MyPort.Close();       //关闭
       }
       catch
       {
       }
     }
     MyBox.Text = MyString[0];  
 }

2、消息接收与发送
消息的发送由发送按钮单击事件触发,具体代码如下:
发送数据函数:

private void SendDataToSerialPort(Serial	PortMyPort,byte	DataToSend)                               
        {
    
    
            byte[]DatasToWrite=new	byte[]{
    
    DataToSend};                                               //数据包
            if (serialPort1.IsOpen)
            {
    
    
                try
                {
    
    
                    MyPort.Write(DatasToWrite,0,1);                                                  //发数据
                    timer1.Interval=3*1000;                                                        //设定超时时间
                    timer1.Start();                                                                    //定时器
                }
                catch
                {
    
    
                    MessageBox.Show("数据错误", "error");
                }
            }
        }

//读取串口函数:

 private void SerialPortDataReceived(object sender, SerialDataReceivedEventArgs 	e)
        {
    
    
           Byte	DataReceived=(byte)(serialPort1.ReadByte());                                           			  //单字节读取
           SetTextShape(DataReceived);
        }

3、设备状态
界面中标红3处为采集和控制下位机以及设备的状态,设备1~设备8为继电器控制设备,无设备控制时label控件背景色为红色,有设备接入被控制时,label背景色变成绿色显示已被控制,textbox控件OFF表示开关量无采集,有采集数据时,消息框显示并且状态变为ON。状态采集的变量由数据接收函数实现完成。

4.2.2 网络配置与Web页面介绍
本次设计预留两种网络通信配置,通过A9模块透传以及ZLAN1003芯片提供的局域网内直连达到物联网的方案。
安信可A9模块通过其内部TCP协议栈与安信可透传云构成客户端与TCP服务器连接。安信可透传云V1.0提供的TCP服务器地址为122.114.122.174,端口为45057。设备可以通过串口调试助手,通过发送AT指令AT+CIPSTART=”TCP”,”122.114.122.174”,45057配置A9进入透传模式。下图为具体操作:

图4-2-2  A9配置透传模式

ZLAN1003联网配置利用厂家提供的虚拟串口软件ZLVicom,将电路板的RJ45连接到计算机所在的网络中,在设备管理中可以看见当前在线的设备

在这个界面中,用户可以设定设备的参数,然后点击“修改设置”,参数不会掉电丢失。这里主要配置的参数有:串口设置中的波特率、数据位、校验位;网络设置 中的 IP 地址、子网掩码、网关;有的时候根据计算机软件,还需要配置串口服 务器的工作模式。
在配置完设备参数后,可以用串口工具、TCP 调试工具进行TCP 连接通讯测试。如下图所示:即为连接成功,完成测试。

关于Web配置,卓岚厂家提供web方式配置设备参数。在浏览器中输入串口服务器的 IP 地址,例如 http://192.168.1.200

然后在配置界面进行参数配置即可

4.2.3 APP以及使用说明
手机APP在安卓端开发应用,通过Java语言简单实现socket通信,利用TCP/IP协议进行简单的传输功能[15]。
手机APP界面如下图所示,能够实现对IP地址和端口的设置,以及打开各路继电器的按钮,和同时打开所有继电器和同时关闭所有继电器的按钮。使用的时候直接打开APP设置对应的IP即可,连接成功即可控制下位机。

5关键技术问题及解决方案

5.1 硬件问题和解决方案

1)第一个遇到的问题就是选型难的问题,各类芯片都存在多种生产厂家,各个型号,以及国产和进口、最终成本和售后决定了选型问题。
2)在进行第一版原理图设计的时候,单片机引脚直接控制继电器,使得输出模块占用了八个引脚资源,后来改成串入并出方案,节省了六个单片机引脚资源。
3)在样板焊接调试的时候,由于技术的问题,单片机管脚焊接不到位,导致每次烧写程序困难,单片机运行会自动复位,在第三板调试的时候避免了这个问题。
4)电源芯片供电能力不足的问题,以太网模块耗能较大,单个电源芯片供电会导致电源芯片发热发烫,从而频繁断电保护导致单片机不断复位重启,解决办法是,用两块电源芯片分担功耗。
5)RS485通信乱码问题,第二板485芯片接地管脚没有接地,导致485串口测试乱码。将接地脚接地,并且与电源串入0.1uF的滤波电容即可。
6)上电后A9不能开机的问题,驱动A9的三级管基级电阻过大,导致三极管不导通,A9没能开机,将之前10K的电阻换成1K即可。
7)串口转以太网模块ZLAN1003模块不停自动复位的问题,从电源芯片过来的带负载电容过小,将22uF电容换成100uF电容即可。
***

***5.2 软件问题和解决方案

1)A9模块不能开机问题,模块为低电平信号驱动开机,与硬件相互调试。
2)用74H164驱动继电器的函数中延时程序要达到继电器能反映的界限,否则继电器反应不过来,只有电平并不动作,目前认为是200ms。
3)数字输入模块的函数应封装在STM32单片机的I/O口中断处理函数中,尽量不在主函数中循环,避免占用CPU资源。
4)程序编写无误之后不运行的问题,在主函数里没有初始化定时器函数。
5)关于Modbus协议网STM32中移植的问题,一定要定义好各种寄存器,应为该协议主要是操作寄存器。发生主机的查询从机正确收到,并做出了正常响应,但从机返回的响应丢失或者被干扰产生了帧错误,主机等待超时这种情况,问题在从机,应该迅速找到并修改下位机程序,避免造成因传输不可靠带来的损失。
6)由于初次接触C#编程语言,刚开始进行上位机制作的时候,没有经过基础的学习,导致很多语法错误,经过后期突击,弥补上了这一缺项。
7)SWD程序下载找不到FLASH的问题,看看是不是J-TAG的对应管脚在程序中被使用了,导致管脚冲突,下载时,要复用该引脚。
8)进入Debug模式的时候下位机一定要上电,否则会引起keil5卡顿甚至崩溃。
9)关于AS配置的相关问题:
a.配置jdk,jdk配置环境变量容易出现问题,区分64位和32位,64位path无法区分%JAVA_HONE%去掉%即可,若还是失败,将变量值配置在用户变量,关机重启,在失败,重装系统。
b. sdk,配置环境变量Android_sdk_home,保存安装路径,不能有中文路径。
c. AS安装,上述配置完成无误后,安装AS,一定要取消勾选sdk,上述已经配置过了,等待安装完成。完成之后,一定要试一试建一个简单的工程,否则无法判断AS是否完成配置。双击运行AS,可能会蹦出来错误,无法找到JAVA_HONE路径,明明配置好了,这时候说明环境还是有问题,将jdk,tools。jar复制到Android的lib下,看看能否解决,如果还是不行,后面试试把路径里的冒号去掉即可。作为手机APP的开发工具AS完成配置还是比较重要的。
***

6 结论
本次设计在硬件方面完成了第三套板子的设计到焊接调试,实现了STM32单片机用I/O口中断处理完成了对数字信号的采集,利用Modbus协议完成了对数据解析的处理,ADC对模拟信号的采集,以及对八路继电器的控制。利用串口完成了和安信可A9模块的通信,实现了GPRS远程通信,串口和以太网模块的通信,实现了串口转TCP/IP,在局域网内实现直连,以及RS485/232总线的通信方式。本次设计主要应用的STM32F103C8T6的主要外设有通用I/O口、USART串口、定时器、NVIC中断系统、ADC。
软件部分完成了下位机的编程和上位机的设计以及Android的app的简单设计。下位机主要程序完成了ADC采集程序、串口收发和断帧程序、Modbus协议的移植、对继电器的逻辑判断以及控制。上位机实现了对下位机采集的数据进行实时的可视化显示以及通过串口对下位机的实时控制操作。Web服务器和网页完成了对以太网模块的参数配置与简单的通信测试。以及完成了通过手机短信的方式对设备信息的查询和管理,通过手机app的简单socket通信,实现了对下位机的操作。经过长时间实验室实验和数据分析以及逻辑的修改和补充,基本完成设计要求。
本次毕业设计的特点就是物联网系统功能的完善,产品用途的广泛,本设计不仅适用于智慧家居,包括工业物联网的透传,智慧农业,远程控制的各个领域都可以应用。程序模块化设计,移植简单方便。硬件设计上电源模块应用合理,采用不同型号的LDO针对不同的电路模块,各个模块之间的信号不会产生干扰。使用了比较热门的开发环境Keil5、VS2017、Android studio后续开发升级维护的延展性比较好。板载九个扩展通用I/O端口,以便日后升级开发。

7 总结
未来随着技术的不断进步,物联网行业将日益兴起,同时各个学科之间的深度融合给未来的工业市场,物联网行业打下了坚实的理论基础。随着智慧家居走人们的生活,对家具的管理控制都将转移到移动设备,便携设备上来,各种手机app控制终端将应运而生。让人机交互变得更见简单,方便,功能更加强大。相信随着物联网行业的崛起,物联网远程开关控制系统即将带领业界进入“无人时代”。
本次毕业设计实现联网功能,在应用方向上会继续朝着以测量和控制的方向进步,本次设计简单的将数据传到云端进行处理与可视化,数据量远远达不到“大数据”,实验室实验局限性也体现出来,现场的环境和布局布线仍旧值得研究,显得略有美中不足。但是在行业、专业、技术发展如此之快的二十一世纪,相信物联网远程控制开关也能进入云端,进入到运输“大数据”的道路上。

参考文献
[1] 李佳.基于物联网的远程控制技术在校园中的应用研究[J].电脑编程技巧与维护,2019(12):48-50
[2] 中国产业信息网,2018~2024年中国物联网行业市场供需预测及发展前景预测报告[EB/OL],2018
[3] The Switch Opens Remote Production Facility in California[J]. Satellite Today,2019.23-24
[4] 覃桢.基于单片机的智能家居远程控制系统的设计路径[J].电子技术,2018:72-73
[5] 王河.基于GPRS的远程控制系统方案设计[J].河南科技,2011(12):37
[6] 吴卓葵,曾涛.基于GSM的远程开关控制装置设计[J].自动化与仪器仪表,2014(08):47-49
[7] 刘军, 张洋, 严汉宇. 例说 STM32[M].2版. 北京航空航天大学出版社,2014
[8] 童诗白.模拟电子技术基础[M].高等教育出版社,2006.09
[9] 李翠翠.基于RS-485总线的远程开关门控制系统设计[J].自动化应用,2016(12):36-37
[10] 阎石,王红.数字电子技术基础[M].高等教育出版社,2006.10
[11] 羌小龙.基于Modbus通讯在智能物料架中的应用[J].南方农机,2020.51(05):209-210
[12] 邓婷,范润宇.远程电力抄表系统的网关通信设计与实现[J].软件工程,2020.23(03):60-62+52.
[13] 杜芳芳,李佳.基于单片机的无线远程开关控制系统设计[J].电脑知识与技术,2009,5(09):2240-2241
[14] 蒋震.基于NB-Iot的信息采集系统设计与实现[D].东南大学,2019
[15] Chao Liu,Pingyu Jiang,Wenlei Jiang. Web-based digital twin modeling and remote control of cyber-physical production systems[J].Robotics and Computer-Integrated Manufacturing,2020,:64-65

附带下载链接:里面有硬件软件和论文资料
https://download.csdn.net/download/qq_41600018/12018989

猜你喜欢

转载自blog.csdn.net/qq_41600018/article/details/108522911