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 server
  server {
    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) AND
  r.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

查找并设置:

对于 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')),
]
  • 8
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

子龙烜

坦克大战系列,手把手带你实现

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值