PyScada(四)构建用户 HMI

构建用户 HMI(前端)的简短说明

在后端HMI部分:

  1. 图表,添加新图表
  2. 页面,添加页面
  3. Widget,添加一个 Widget,在 Page 下选择您在 2 中添加的页面,并在Content下选择1 中的图表。
  4. 小部件控制页面上每个元素的位置。设置小部件的位置(行、列)和宽度。
  5. 查看,添加视图并从 2 中选择页面。
  6. (可选)GroupDisplayPermissions,添加新的 GroupDisplayPermission,(如果需要添加新组并将您的用户添加到该组,请选择您在 1. 至 4 中创建的所有项目。)
  7. 打开http://IP/,您应该看到新的视图,如果 DAQ 正在运行并且数据库中已有数据,您应该看到最近 2 小时的数据和当前数据。

前端结构:

+-View------------------------------------+
|                                         |
| +-Page--------------------------------+ |
| |                                     | |
| | +-Widget--------+ +-Widget--------+ | |
| | |               | |               | | |
| | | Row 1, Col 1  | | Row 1, Col 2  | | |
| | | Width 1/2     | | Width 1/2     | | |
| | | +-Chart-----+ | | +-Chart-----+ | | |
| | | |           | | | |           | | | |
| | | +-----------+ | | +---------- + | | |
| | +---------------+ +---------------+ | |
| +-------------------------------------+ |
+-----------------------------------------+

设备协议 ID ¶


  • 1:保留(调度程序)
    2:系统统计
    3:Modbus
    4:BAC网络
    5:签证
    6:1线
    7:潘特
    8:SMBus
    9:保留(Jofra350)
    10:GPIO
    11:保留(PT104)
    12:OPC-UA
    13:SML(智能电表语言)
    14:文件
    15:仪表总线(MBus)
    16:通用虚拟设备
    17:特快专递
    18:运营
    19:聚合
    8X:定制工人
    93:保留(串行)
    94:保留(Web 服务)
    95:保留(脚本)
    96:保留(事件)
    97:保留(邮件)
    98:保留(报告)
    99:保留(导出)
    100+:保留用于动态

使用 Grafana

mysql

添加用户并授予 SELECT 权限:

sudo mysql -uroot -p -e "GRANT SELECT ON PyScada_db.* TO 'Grafana-user'@'localhost' IDENTIFIED BY 'Grafana-user-password';"

nginx

在/etc/nginx/nginx.conf后添加:http { ... }

include /etc/nginx/grafana-access.conf;

使用以下命令创建/etc/nginx/grafana-access.conf:

stream {# MySQL serverserver {listen     3305;proxy_pass 127.0.0.1:3306;proxy_timeout 60s;proxy_connect_timeout 30s;}
}

重新启动 Nginx :

sudo systemctl restart nginx

Grafana

添加MySQL数据源:

  • 主持人 :
    • 本地:/run/mysqld/mysqld.sock
    • 远程:SERVER_WITH_NGINX_IP:3305
  • 数据库 :PyScada_db
  • 用户:Grafana-user
  • 密码 :Grafana-user-password

创建仪表板:

  • 或者导入示例仪表板。
  • 或者例如,添加这些变量:set和:refresh on dashboard load``multi-value``all option
    • 添加 mysql 数据源变量(类型 Datasource)。
    • 使用类型查询添加变量$Datasource:
      • 协议:SELECT protocol AS __text, id AS __value FROM pyscada_deviceprotocol
      • 设备 :SELECT d.short_name AS __text, d.id AS __value FROM pyscada_device d WHERE d.protocol_id IN (${Protocols}) AND d.active = 1
      • 单位 :SELECT u.unit AS __text, u.id AS __value FROM pyscada_unit u
      • 变量:SELECT v.name AS __text, v.id AS __value FROM pyscada_variable v WHERE v.device_id IN (${Devices}) AND v.unit_id IN (${Units}) AND v.active = 1
      • 时间组(类型Interval):1s,10s,1m,10m,30m,1h,6h,12h,1d,7d,14d,30d,1M
      • 空为(自定义类型):0, NULL, previous
  • 查询示例:
SELECT$__timeGroupAlias(r.date_saved,$time_group),avg(IFNULL(r.value_float64, 0.0) + IFNULL(r.value_int64, 0.0) + IFNULL(r.value_int32, 0.0) + IFNULL(r.value_int16, 0.0) + IFNULL(r.value_boolean, 0.0)),v.name AS metric
FROM pyscada_recordeddata as r
JOIN pyscada_variable v ON r.variable_id = v.id
WHERE$__timeFilter(r.date_saved) ANDr.variable_id IN (${Variables})
GROUP BY time, metric
ORDER BY $__timeGroup(r.date_saved,$time_group,$null_as)

嵌入 pyscada HMI

编辑 Grafana 配置文件:

sudo nano /etc/grafana/grafana.ini

查找并设置:

  • 允许嵌入= true
  • 对于本地主机 grafana : root_url = http://localhost:3000/grafana/

对于 localhost grafana 添加/etc/nginx/sites-enabled/pyscada.conf:

location /grafana/ {proxy_pass http://127.0.0.1:3000/;
}

重新启动 Grafana 服务器:

sudo systemctl restart grafana-server.service

使用仪表板中的代码或 grafana 中共享选项的面板创建自定义 html 面板

其他

使用ssl:http://www.turbogeek.co.uk/2020/09/30/grafana-how-to-configure-ssl-https-in-grafana/

对于开发人员

激活PyScada虚拟环境

source /home/pyscada/.venv/bin/activate

克隆存储库

git clone git@github.com:pyscada/PyScada.git

对于像 PyScada-Modbus 这样的插件:

git clone git@github.com:pyscada/PyScada-Modbus.git

Pip 可编辑安装

激活虚拟环境后:

sudo -u pyscada -E env PATH=${PATH} pip3 install -e ./PyScada

对于像 PyScada-Modbus 这样的插件:

sudo -u pyscada -E env PATH=${PATH} pip3 install -e ./PyScada-Modbus

重新启动应用程序

激活虚拟环境后,要应用更改(根据更改的情况),可能需要:

创建迁移

python3 /var/www/pyscada/PyScadaServer/manage.py makemigrations

应用它们

python3 /var/www/pyscada/PyScadaServer/manage.py migrate

复制静态文件(answer yes)

sudo -u pyscada -E env PATH=${PATH} python3 /var/www/pyscada/PyScadaServer/manage.py collectstatic

然后你可以 :

对于 URL、视图或管理员更改,请重新启动 Gunicorn

sudo systemctl restart gunicorn

否则重新启动 PyScada

sudo systemctl restart pyscada

覆盖路线

当您希望重写现有视图(以及现有路线)时会遇到此用例。

PyScada 项目的urls.py文件用于加载软件的路由(请参阅此处)。

  • python虚拟环境安装:位于/var/www/pyscada/PyScadaServer/PyScadaServer
  • Docker 安装:位于/src/pyscada/PyScadaServer/PyScadaServer

默认情况下,项目的urls.py文件仅加载urls.py来自pyscada.core. 该文件以随机顺序pyscada.core.urls加载所有其他模块文件。urls.py

使用的路由是遇到的第一个有效路由,因此如果您想替换现有路由,则必须在其他路由之前加载您的路由,即在加载pyscada.core.urls文件之前。

为此,您需要修改项目的urls.py文件。

对于非 Docker 安装:

sudo -u pyscada nano /var/www/pyscada/PyScadaServer/PyScadaServer/urls.py

并在 pyscada.core.urls 之前包含您的路线

urlpatterns = [
path('', include('pyscada.yourPlugin.urls')), #Routing file yourPlugin
path('', include('pyscada.core.urls')),
]

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

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

相关文章

【M1/M2】详细说明Parallels Desktop虚拟机的安装使用

希望文章能给到你启发和灵感~ 如果觉得有帮助的话,点赞+关注+收藏支持一下博主哦~ 阅读指南 开篇说明什么是Paralles Desktop一、基础环境说明1.1 硬件环境1.2 软件环境二、安装Parallels DeskTop2.1 下载软件安装包三、Parallels 下配置Windows 11 系统3.1 Windows 11安装3…

PostgreSQL 简介与基础(一)

1. 什么是 PostgreSQL 1.1 概述 PostgreSQL(常简称为Postgres)是一种功能强大的开源关系型数据库管理系统(RDBMS)。它以其可靠性、强大的功能和符合标准的特性著称。PostgreSQL 支持大部分 SQL 标准,并且具有许多现代…

护网面试内容

1.自我介绍 2.如何判断是不是误判 分析请求、响应内容,判断是否攻击成功首先看告警事件名称判断是网络攻击事件还是web攻击事件,网络攻击事件:定位五元组信息(源IP、目的IP、源端口、目的端口、协议),对整…

Docker系列之安全

Docker的安全前言一、Docker 容器与虚拟机的区别 1. 隔离与共享 2. 性能与损耗二、Docker 存在的安全问题 1.Docker 自身漏洞 2.Docker 源码问题三、 Docker 架构缺陷与安全机制 1. 容器之间的局域网攻击 2. DDoS 攻击耗尽资源 3. 有漏…

Vue_cli搭建过程项目创建

概述 vue-cli 官方提供的一个脚手架,用于快速生成一个 vue 的项目模板;预先定义 好的目录结构及基础代码,就好比咱们在创建 Maven 项目时可以选择创建一个 骨架项目,这个骨架项目就是脚手架,我们的开发更加的快速&am…

uni-app的showModal提示框,进行删除的二次确认,可自定义确定或取消操作

实现效果: 此处为删除的二次确认示例,点击删除按钮时出现该提示,该提示写在js script中。 实现方式: 通过uni.showModal进行提示,success为确认状态下的操作自定义,此处调用后端接口进行了删除操作&#…

【Android】App设置开机自启动之后但是无效的原因之一

问题描述 通过监听开机广播,然后启动App,但是在系统开机之后,App并没有启动。 问题原因 当一个App在安装之后,必须要先启动一次,然后这个开机启动的功能才可以正常使用。 但是由于我的这个App是一个服务类的App&am…

如何成为专业的 .NET 开发人员

如今,网上有大量信息,找到正确的信息并非易事。当你开始编程之旅并希望获得全面的指南时,最好寻找一个可以指导你完成整个过程的指南。 本文将帮助您制定一份路线图,告诉您什么是重要的以及什么是需要学习的. 一.一切从软件基础…

【JavaScript】BOM编程

目录 一、BOM编程是什么 二、window对象的常用方法 1、弹窗API方法 2、计时器任务方法 三、window对象的属性对象常用方法 1、history网页浏览历史 2、location地址栏 3、数据存储属性对象 4、console控制台 一、BOM编程是什么 当我们使用浏览器打开一个网页窗口时,…

Volatility 内存取证【信安比赛快速入门】

一、练习基本命令使用 1、获取镜像信息 ./volatility -f Challenge.raw imageinfo 一般取第一个就可以了 2、查看用户 ./volatility -f Challenge.raw --profileWin7SP1x64 printkey -K "SAM\Domains\Account\Users\Names" 3、获取主机名 ./volatility -f Challenge…

探索QCS6490目标检测AI应用开发(二):摄像头视频的拉取和解码

作为《探索QCS6490目标检测AI应用开发》文章,紧接上一期,我们介绍如何在应用程序中拉取视频流,并且用硬件解码,得到逐帧的图像画面。我们使用了高通的Intelligent Multimedia SDK(IM SDK)完成视频的拉流和硬…

Linux杀僵尸进程

ps -A -o stat,ppid,pid,cmd | grep -e ^[Zz] | awk {print $2}1、查看系统是否有僵尸进程 使用Top命令查找,当zombie前的数量不为0时,即系统内存在相应数量的僵尸进程。 2、定位僵尸进程 使用命令 ps -A -ostat,ppid,pid,cmd |grep -e [Zz]定位僵尸…

Kafka入门-分区及压缩

一、生产者消息分区 Kafka的消息组织方式实际上是三级结构:主题-分区-消息。主题下的每条消息只会保存在某一个分区中,而不会在多个分区中被保存多份。 分区的作用就是提供负载均衡的能力,或者说对数据进行分区的主要原因,就是为…

数据库与表的基本操作:构建数据世界的基石(三)

引言:从零构建数据结构的艺术 在上一章节《安装与配置》中,我们成功地在不同的操作系统上安装并配置了MySQL,为实战数据库管理奠定了坚实的基础。本章节,我们将深入探索数据库与表的基本操作,包括如何创建、删除数据库…

RandLA-Net语义分割

项⽬地址: GitHub - tsunghan-wu/RandLA-Net-pytorch: :four_leaf_clover: Pytorch Implementation of RandLA-Net (https://arxiv.org/abs/1911.11236) 搭建环境并配置RandLA-Net 根据Environment Setup 搭建环境(除了requirements.txt中的库&#xf…

畅谈GPT-5

前言 ChatGBT(Chat Generative Bidirectional Transformer)是一种基于自然语言处理技术的对话系统,它的出现是人工智能和自然语言处理技术发展的必然趋势。随着技术的更新和进步,GPT也迎来了一代代的更新迭代。 1.GPT的回顾 1.1 GPT-3的介绍 GPT-3(Gen…

门店客流统计)

门店客流统计 代码部分效果 代码部分 import cv2 import numpy as np from tracker import * import cvzone import timebg_subtractor cv2.createBackgroundSubtractorMOG2(history200, varThreshold140)# Open a video capture video_capture cv2.VideoCapture(r"sto…

昇思25天学习打卡营第3天|数据集与数据变换

数据集 数据集(Dataset)操作shufflemapbatch 数据变换(Transforms)Vision TransformsText TransformsLambda Transforms 总结 数据集(Dataset) 数据是深度学习的基础,深度神经网络的效果对数据…

力扣377 组合总和Ⅳ Java版本

文章目录 题目描述代码 题目描述 给你一个由 不同 整数组成的数组 nums ,和一个目标整数 target 。请你从 nums 中找出并返回总和为 target 的元素组合的个数。 题目数据保证答案符合 32 位整数范围。 示例 1: 输入:nums [1,2,3], targe…

algorithm中常见算法

1、前言 C的<algorithm>库是C标准库中的一个重要组成部分&#xff0c;它提供了一系列的函数&#xff0c;用于执行各种常见的算法操作&#xff0c;比如排序、查找、替换、合并等。这些算法函数通常以模板函数的形式提供&#xff0c;可以用于任何符合特定条件的容器类型。 …