基于树莓派的设备可视控制系统的设计与实现
2022-12-10谭仕钊陆光照刘唐勇
谭仕钊 陆光照 刘唐勇 韦 泉 韦 标
目前,广西壮族自治区广播电视无线发射台站(以下简称“台站”)的绝大多数设备均已接入远程监控系统,设备的运行状态出现异常时可以通过复位等方式解决。但维护人员在对台站的日常维护过程中发现,部分设备故障只能由维护人员前往台站,在设备面板上手动操作解决。出现此类故障的原因往往是参数异常,只需调整参数即可恢复正常,但无法通过现有方式进行远程参数调整。而维护人员则需花费数小时奔赴台站进行手动调整,效率低下且费时费力。因此,设计一种易用、安全的远程控制系统以实现对部分设备的调整操作是十分有必要的。本文以三级台站所使用的德芯300W数字电视发射机系统(型号:DUT-8322)为例,设计一个可视化的基于树莓派的WEB控制系统。
一、设计思路
德芯300W数字电视发射机系统由监控单元、功率放大器、前级推动单元、激励器和供电模块五部分组成。前级推动单元的功能是通过调节激励器输入的信号电平值衰减来控制整机输出功率,将其控制在300W左右进行播出。由于环境温度、天气等外部因素的变化,偶尔会出现前级推动单元设定的衰减值不变,但发射机却无法正常播出的现象,具体表现为前级推动单元面板亮红灯,提示激励器功率过高或过低。针对此类故障,复位发射机是无效的,但只需在前级推动单元的面板上调整衰减数值,根据告警提示增大或减小衰减值即可恢复正常播出。
在硬件设计方面,如需实现面板上的按钮点击操作,需改造面板内部控制板,于按钮两侧引脚引出导线接入继电器,通过继电器的分断与闭合、两次动作的间隔时间来模拟按钮点击动作。同时,为了更方便地实现统一控制,应当选用支持高级语言编程功能、网络接入功能、继电器控制功能的开发板。本系统选用树莓派开发板来实现,该开发板具有功耗低、体积小、拓展接口齐全、使用Linux系统方便编程、带有GPIO引脚等诸多优点。同时,为了让操作者更直观地观察到机器面板上各项参数及状态指示灯的变化,避免可能的误操作导致停播事故,应使用一个USB摄像头对面板进行实时视频监测。同时,得益于人工机器视觉等技术的日渐发展,也可以通过软件编程对摄像头采集的画面进行分析比较,得到设备指示灯的状态,并将其反馈表现于系统操作面板上。
在软件设计方面,由于各个台站的主控电脑的软件环境、硬件配置不一致,如采用传统的C/S模式,编写的应用程序可能存在兼容性问题,哪怕采用跨平台的开发语言也可能因为系统环境变量配置、开发语言版本等产生各种异常。为了实现高度兼容性,本系统采用B/S方式编程。B/S架构的全称为Browser/Server,即浏览器/服务器结构。Browser指的是Web浏览器,极少数事务逻辑在前端实现,但主要事务逻辑在服务器端实现。Browser客户端、WebApp服务器端和DB端构成所谓的三层架构。B/S架构的系统无需特别安装,只需通过浏览器打开相应页面即可使用。因涉及跨平台WEB编程,计划使用Python作为开发语言。Python具有语法简洁、开源跨平台、自带丰富且强大的库、开发效率高等优点,在开发过程中可以节约大量时间成本。
二、实现过程
本系统的软硬件环境如下:
CPU:Broadcom ARM Corte×A53×4 Cores;
RAM:1GB LPDDR2 SDRAM;
LAN:10/100/1000Mbps自适应;
操作系统:基于32位Linux的Debian 10;
Python版本:Python 2.7及 Python 3.7。
(一)系统框架
系统框架如图1所示。
图1 系统框架图
(二)WEB前端布局设计
为了便于操作者理解与使用,本系统的前端布局应尽可能还原实际操作体验,因此在编写前端网页时直接绘制与实际机器面板相同的网页背景与按钮,并在下方增加图像预览区,用于展示USB摄像头所拍摄的画面。具体如图2所示。
图2 网页前端设计布局
(三)硬件设计
硬件设计方面,计划采用带有GPIO接口的8路5V继电器控制板。该控制板体积小巧,无需独立供电,能够方便地与树莓派开发板连接,从开发板的GPIO接口获得电源供给和控制信号。如图3所示。
图3 8路5V继电器控制板
GPIO(General-purpose input/output),又称为通用型之输入输出,用于电信号在电路中的输入输出,可以通过程序控制电路部件。该控制板主要通过右侧的GPIO接口连接树莓派开发板,并通过开发板输出高低电平来对继电器进行控制。设计原理为继电器的常开端通过导线连接目标按钮的两端,当继电器动作时,常开端闭合,导通回路,经过约0.5秒后恢复为常开状态,即可认为产生了一次有效的点击动作。在对开发板进行编程时,只需控制分断闭合的间隔时间即可。
树莓派开发板拥有4个板载USB接口,可以方便地接入USB摄像头并直接使用,只需该摄像头符合UVC协议(USB Video Class)即可。目前,市面上绝大多数免驱动USB摄像头采用该协议。同时,该开发板亦支持CSI接口摄像头,该接口是基于MIPI的一种传输方式,直接使用GPU进行图形处理,相对于使用CPU处理的UVC协议USB连接方式,CSI方式的系统资源占用率较低,但USB连接方式更为灵活且兼容性较好。如有特殊需求也可以采用CSI接口的摄像头。本系统采用海康威视DS-E12a摄像头,使用USB接口连接树莓派开发板。
(四)软件设计
Python作为一种流行的开发语言,其一大特点便是拥有强大的标准库及第三方库,从这些库里可以找到实现自己所需功能的模块且能够快捷方便地进行调用,无需从零开发,极大程度地缩减了开发成本。得益于Python丰富的库,本系统能轻松、高效地实现上文所提到的功能。
1.软件流程图
该系统软件流程如图4所示。
图4 系统软件流程图
2.WEB框架选择
WEB框架选用轻量的Flask微框架。该框架是使用Python基于Werkzeug和Jinja2开发的微型框架,具有高灵活性、易于扩展、轻量化、易于部署等优点,其功能对于本系统这类小型WEB开发项目来说绰绰有余。
3.网页设计
网页采用HTML(超文本标记语言)编写,采用JavaScrip作为脚本语言,并采用CSS样式表外置的方式以方便后期维护。JavaScrip是一种高级的、解释型的编程语言,主要作为客户端脚本语言在用户的浏览器上运行,不需要服务器的支持。通过JavaScrip可以方便地把表单数据提交到服务器端,在服务器端监听到数据后即可进行对应的操作。
4.部分功能实现过程及伪代码、代码
通过调用Python库中的RPi.GPIO模块对Raspberry Pi开发板的GPIO引脚进行控制操作,Flask模块实现WEB服务的前端搭建及后端转发,Opencv模块实现摄像头的调用、编码及后期拓展功能。
(1)网页button按钮通过JavaScrip脚本提交表单数据到后端
伪代码:
代码:
该JavaScrip代码块实现的功能为将网页内不同按钮的点击动作与其定义的状态提交至后台监听服务。
(2)调用RPi.GPIO模块控制开发板GPIO接口
伪代码:
代码:
该Python代码块的功能为将指定地址的GPIO插针设置为指定高电平,继电器接收到高电平信号后即开始动作。
(3)Flask接收前端数据
伪代码:
代码:
该Python代码块为Flask接收JavaScrip所提交的表单数据,并将变量值设置为所接收到的值。
(4)通过Opencv模块调用摄像头并输出
伪代码:
代码:
该Python代码块实现的功能为调用Opencv模块采集摄像头图像,并将视频流转换为网页使用的图像格式输出至前端页面,避免部分平台无法解码视频流的问题。
三、系统测试
经过在某三级台站进行实机测试后,该系统可以正常运行并对该台站内数字电视发射机的前级推动单元进行正常控制。首先,需要配置开发板的固定IP地址以便于台站主控电脑进行访问。其次,开发板IP地址的选择不能与台站设备的IP地址存在冲突。在配置完毕后,使用网线将开发板接入台站华为路由交换一体机,并将控制网页快捷方式发送到电脑桌面即可。该型号数字电视发射机前级推动单元模块的后面板有冗余开口,延伸控制线可以从开口引出并接入8路继电器控制板。图像采集方面,需要将摄像头固定于推动单元前面板正前方一定距离处,确保其画面能看到LCD显示屏、状态指示灯等。最后,在台站主控电脑上使用Chrome内核的浏览器(应避免使用过时的IE内核浏览器)打开对应的控制页面,即可通过网页对该数字电视发射机系统的前级推动单元进行控制,且可实时观察面板状态和参数,避免盲目调整。系统测试时运行效果如图5所示。
图5 系统运行效果
四、结语
该系统经过长时间的台站试运行后,控制功能正常有效,未发现异常状况,极大地减少了维护人员的出勤次数,同时在出现相关故障时的响应时间、处理速度也更短、更快。随着时代的发展和进步,计算机网络技术与我们的工作生活变得愈加密不可分。我们作为新时代的广电人,更应该将新技术、新方法融入日常维护工作中,提高工作效率,通过技术创新确保安全播出工作的顺利进行。