使用IOT-Tree Server制作一个边缘计算设备(Arm Linux)

最近实现了一个小项目,现场有多个不同厂家的设备,用户需要对此进行简单的整合,并实现一些联动控制。

我使用了IOT-Tree Server这个软件轻松实现了,不外乎有如下过程:

1)使用Modbus协议对接现有设备,一些设备由于是模拟量信号,通过AD模块做转换,然后也输出Modbus RTU的协议数据。所有设备通过串口服务器模块转换成了以太网接口。最终整合到一个总的控制设备——这个设备就是IOT-Tree Server运行的边缘设备。

2)本项目使用了一个巴掌大小的嵌入式Arm Linux模块,这个模块使用RK3568主控芯片,主频达2GHz,内存容量有2G/4G大小,Linux是Debian版本。可以轻松跑起IOT-Tree Server使用的Java运行环境。

上面对接设备过程本文就不细讲了,你如果不了解可以参考本系列文章中的以下文章,里面包含项目完成整个过程:

机房自动化监控手把手分享给你 - 10 项目完成总结

这篇文章讲的非常详细,基本上你是0基础都可以通过这个文章慢慢掌握整个过程。

本文想给你分享的是,我如何安装配置这个Linux设备的,并且是如何实现现场多个设备联动的

1 Arm Linux设备及安装配置

我使用的Arm Linux设备是正点原子AtomPi-CA1卡片电脑,主要这个带有一个小外壳,很方便现场安装。这板子长成这样,竟然有两个网口,特别方便现场使用——两个网口一个可以对接现场设备,另一个可以接入用户办公环境,不仅可以实现现场控制,也方便办公人员查看设备监控画面,还保证了设备网络和办公网络的隔离。

相关资料可以到正点原子网站上去查看。

注意,此板子没有时钟保持功能,感觉限制了很多功能,特别是做数据记录的时候。你如果现场需要的功能比较复杂,不建议你使用这个板子。我使用这个做现场实时调度,不需要精确记录时间。

1.1 IOT-Tree的安装配置

由于GitHub上面提供下载release版本,自带的java环境版本都是windows,因此我下载的是iot-tree-xxx.zip文件。文件内部没有对应的java环境,需要自己下载安装。

我使用的是oracle官方网站提供的Linux Arm64对应的压缩包

当前用户登录之后,直接通过ftp把iot-tree和jdk都解压放到了当前用户目录下,如下图:

进入iot-tree目录,修改文件iot-tree.sh。只需要修改一行,设置JAVA_HOME为你解压之后的对应jdk目录。

然后运行命令,使这个文件可运行

chmod +x iot-tree.sh

 然后,你就可以直接通过 ./iot-tree.sh命令启动IOT-Tree Server了。但是,我的应用要求设备通电启动之后,IOT-Tree能够自动运行。因此,使用su账号,新增了如下文件:

/usr/lib/systemd/system/iot-tree.service

文件内容如下:

[Unit]
Description=IOT-Tree Server
After=network.target[Service]
ExecStart=/home/atom/iot-tree/iot-tree.sh linux_nohup
WorkingDirectory=/home/atom/iot-tree
Restart=always
StandardOutput=append:/home/atom/iot-tree/log/syslog.log
StandardError=append:/home/atom/iot-tree/log/syslog.log
SyslogIdentifier=iot-tree[Install]
WantedBy=multi-user.target

这样,IOT-Tree Server就被配置成了Linux后台运行的服务 。你可以使用如下命令进行服务的管理;

重载系统服务:systemctl daemon-reload设置开机启动:systemctl enable iot-tree启动服务:systemctl start iot-tree停止服务:systemctl stop iot-tree重启服务:systemctl restart iot-tree

通过以上配置,IOT-Tree在ARM Linux环境就可以随着设备的启动而自动启动了。

2 设备接入配置和监控画面制作

这个还是参考我的系列文章吧。相关内容都类似,我在这里再写都没有下面这些文章详细了。

机房自动化监控手把手分享给你 - 7 监控画面制作

3 使用消息流实现现场设备联动控制

本项目的联动控制非常简单,通过一个Modbus通道,获取厂家1提供的设备数据,根据一定的规则,对厂家2提供的设备做控制输出,以达到节能降耗的目的。

我使用了IOT-Tree的消息流控制机制实现,感觉这个具体控制过程还不如IOT-Tree提供的demo例程,还是参考这个吧:使用消息流程实现控制逻辑

4 总结

现在的Arm Linux系统,配置稍微高一些就可以运行java虚拟机,那么也就可以运行IOT-Tree Server。一旦你的设备安装并运行了IOT-Tree Server,设备就可以有IOT-Tree的大部分能力,你的设备会成为一个功能强大的边缘处理中心。

你如果给设备配置一个HDMI屏+键盘+鼠标,甚至可以直接替代中控室的PC。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/54882.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

无人机侦测:手提式无线电侦测设备技术详解

手提式无线电侦测设备在无人机侦测中扮演着重要角色,它主要通过侦测无人机与遥控器或地面站之间的无线电信号来实现对无人机的监测和定位。以下是对手提式无线电侦测设备技术的详细解析: 一、技术原理 手提式无线电侦测设备通过无线电侦测技术&#xf…

steam上传游戏问题汇总

问题 首先是Library Logo 必须是png图片,还必须带上游戏名字你的宣传图不能使用游戏内部的截图。Library_Hero必须是空白的,不能有任何文字。他是和Library_logo合并在一起的。这个法律其实没必要填写。然后我错误的把EULA填写在这里了也报错了 如果你在…

C++刷怪笼(7)string类

目录 1.前言 2.正文 2.1标准库中的string类 2.1.1string类 2.1.2auto和范围for 2.1.3string类的常用接口说明 2.2string类的模拟实现 2.2.1经典的string类问题 2.2.2浅拷贝 2.2.3深拷贝 ​编辑 2.2.4写时拷贝 3.小结 1.前言 前面我们对C的封装这一大特性进行了详细…

题目:圆桌会议

Problem - 1214 (hdu.edu.cn) 解题思路: 结果的顺序就是原序列的逆序,例如12345就是54321为结果顺序。同时将一个顺序序列(非环)变成逆序需要的次数为。想要的得到最短的交换次数,只需要将环尽量对半分,然后…

【万字长文】Word2Vec计算详解(三)分层Softmax与负采样

【万字长文】Word2Vec计算详解(三)分层Softmax与负采样 写在前面 第三部分介绍Word2Vec模型的两种优化方案。 【万字长文】Word2Vec计算详解(一)CBOW模型 markdown行 9000 【万字长文】Word2Vec计算详解(二&#xff0…

Chromium 中chrome.cookies扩展接口c++实现分析

chrome.cookies 使用 chrome.cookies API 查询和修改 Cookie,并在 Cookie 发生更改时收到通知。 更多参考官网定义:chrome.cookies | API | Chrome for Developers (google.cn) 本文以加载一个清理cookies功能扩展为例 https://github.com/Google…

针对考研的C语言学习(循环队列-链表版本以及2019循环队列大题)

题目 【注】此版本严格按照数字版循环队列的写法,rear所代表的永远是空数据 图解 1.初始化部分和插入部分 2出队 3.分部代码解析 初始化 void init_cir_link_que(CirLinkQue& q) {q.rear q.front (LinkList)malloc(sizeof(LNode));q.front->next NULL…

Ansible 工具从入门到使用

1. Ansible概述 Ansible是一个基于Python开发的配置管理和应用部署工具,现在也在自动化管理领域大放异彩。它融合了众多老牌运维工具的优点,Pubbet和Saltstack能实现的功能,Ansible基本上都可以实现。 Ansible能批量配置、部署、管理上千台主…

基于Zynq SDIO WiFi移植一(支持2.4/5G)

基于SDIO接口的WIFI&#xff0c;在应用上&#xff0c;功耗低于USB接口&#xff0c;且无须USB Device支持&#xff0c;满足某些应用场景 1 硬件连接 2 Vivado工程配置 3 驱动编译 3.1 KERNRL CONFIG (build ENV) 修改 export KERNELPATH<path of kernel header>export T…

一种压缩QRCode矩阵以用于存储的方法

通常QRCode由服务器生成&#xff0c;以图片格式发送到客户端&#xff0c;由客户端直接展示&#xff0c;也可以由客户端使用javascript或其他内置的SDK直接生成。 0、需求 QRCode生成过程中往往是先生成矩阵&#xff0c;然后使用矩阵生成图片&#xff0c;矩阵就是由01组成的一…

[单master节点k8s部署]35.ingress 反向代理(二)

成功部署ingress controller [rootmaster 35ingress]# kubectl get pods -n kube-system NAME READY STATUS RESTARTS AGE calico-kube-controllers-7dc5458bc6-fpv96 1/1 Running 10 (4d16h ago) 9d calico-…

自动化测试selenium篇(二)

1. 操作测试对象 1.1 普通操作 测试代码如下所示&#xff1a; private static void Test03() throws InterruptedException {//创建一个驱动WebDriver webDriver new ChromeDriver();//打开百度首页webDriver.get("https://www.baidu.com");//找到百度搜索输入框…

通过AI技术克服自动化测试难点(下)

前面的文章里我们对可以应用到测试中的AI技术做了整体介绍&#xff0c;详细介绍了OpenCV技术、OCR技术和神经网络&#xff0c;本文我们继续为大家介绍卷积神经网络、数据集以及AI技术在其他方面和测试相关的创新。 卷积神经网络整体上的原理是这样的&#xff0c;首先在底层特征…

【linux系统】进程

文章目录 进程和PCBlinux与进程的相关命令PS linux下的PCB进程标识符父子进程fork 进程状态磁盘睡眠 -- D暂停和跟踪暂停 -- T和t僵尸进程 -- Z孤儿进程 进程优先级 进程地址空间再谈fork进程地址空间分布虚拟地址和页表mm_struct 进程控制进程终止进程退出码信号 进程等待进程…

【翻译】在 Python 应用程序中使用Qt Designer的UI文件

原文地址&#xff1a;Using a Designer UI File in Your Qt for Python Application 直接上图&#xff0c;上代码 将UI文件转为Python 为了演示&#xff0c;我们使用 Qt Widgets 简单示例说明。 这个应用程序由一个源文件 easing.py、一个 UI 文件 form.UI、一个资源文件 ea…

考研笔记之操作系统(四) - 文件管理

文件管理 1. 简介1.1 前情回顾1.2 文件的属性1.3 文件内部数据的组织方式1.4 操作系统向上提供的文件功能1.5 文件应如何放在外存 2. 文件的逻辑结构2.1 无结构文件2.2 有结构文件2.2.1 顺序文件2.2.2 索引文件2.2.3 索引顺序文件2.2.4 多级索引顺序文件 3. 文件目录3.1 基本概…

1422. 分割字符串的最大得分【字符串】

文章目录 1422. 分割字符串的最大得分解题思路Go代码 1422. 分割字符串的最大得分 1422. 分割字符串的最大得分 给你一个由若干 0 和 1 组成的字符串 s &#xff0c;请你计算并返回将该字符串分割成两个 非空 子字符串&#xff08;即 左 子字符串和 右 子字符串&#xff09;所…

使用3080ti运行blip2的

使用3080ti运行blip2的案例 注意&#xff01;blip2很吃显存&#xff0c;需要大于80GB显存的卡。我最后安装的所有包的版本信息&#xff08;python 3.9 &#xff09;以供参考&#xff1a; 首先&#xff0c;我在运行blip2的demo的时候显存用了80G以上&#xff0c;所以大家卡的显存…

moectf-Web题解

1、弗拉格之地的入口 2、垫刀之路01: MoeCTF&#xff1f;启动&#xff01; 3、ez_http 4、ProveYourLove 5、弗拉格之地的挑战 6、ImageCloud前置 7、垫刀之路02: 普通的文件上传 8、垫刀之路03: 这是一个图床 9、垫刀之路05: 登陆网站 10、垫刀之路06: pop base mini …

Java值传递、序列化详解

Java 值传递详解 说到参数&#xff0c;我们先来搞懂一下这两个概念 形参&实参 值传递&引用传递 形参&实参 方法的定义可能会用到 参数&#xff08;有参的方法&#xff09;&#xff0c;参数在程序语言中分为&#xff1a; 实参&#xff08;实际参数&#xff0c;…