构建用户 HMI(前端)的简短说明
在后端HMI部分:
- 图表,添加新图表
- 页面,添加页面
- Widget,添加一个 Widget,在 Page 下选择您在 2 中添加的页面,并在Content下选择1 中的图表。
- 小部件控制页面上每个元素的位置。设置小部件的位置(行、列)和宽度。
- 查看,添加视图并从 2 中选择页面。
- (可选)GroupDisplayPermissions,添加新的 GroupDisplayPermission,(如果需要添加新组并将您的用户添加到该组,请选择您在 1. 至 4 中创建的所有项目。)
- 打开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')), ]