一、说明
Pyscada是scada的python实现,需要学习一下,以备不时之需,目前我的想法是用他来模拟opc数据,毕竟我准备做的项目需要系统与scada通过opc进行通信,正好做一个简单的scada系统
是一个开源的SCADA(Supervisory Control and Data Acquisition)系统,它利用Python语言的强大功能,为工业自动化和数据采集提供了一个灵活、可扩展且易于使用的解决方案。该项目旨在简化SCADA系统的开发,使开发者能够快速构建自己的监控和控制应用。
网上资料不多,但是介绍还是有很多的,大家可以了解一下
二、建立项目
目前windows 10下面安装的python 3.11.9,后续我们将在ubuntu上部署一遍
1、建虚拟环境
# 进入工作目录
cd D:\jkp\work
# 建立项目目录(也可以不建)
mkdir pyscada_prj
cd pyscada_prj
# 没有安装virtualenv的,安装下
pip install virtualenv
pip install virtualenvwrapper
#建立虚拟环境
python -m venv ./.env
#激活进入虚拟环境
cd .env/Scripts/
activate
2、安装django
pip install django==4.2
3、创建项目
查看pyscada源码,我们参考下图的两个文件来建立项目,将.zip拷贝到项目目录中去
注意前面和后面都要参考test.sh里的过程来建立
# 建项目
django-admin startproject PyScadaServer --template project_template_with_plugins.zip
# log目录
cd PyScadaServer/
mkdir log
4、利用vscode 打开项目,选择编译器
5、创建requirements.txt文件
Django==4.2
#mysqlclient
channels
channels-redis
#Pyscada
#PyScada-Modbus
#PyScada-Onewire
# PyScada-Phant
#PyScada-VISA
#PyScada-SMBus
#PyScada-SystemStat
#pyscada-opcua
6、配置settings.py
邮箱配置
# 配置email
# settings.py
EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'
EMAIL_HOST = 'smtp.qq.com' # QQ邮箱的SMTP服务器地址
EMAIL_PORT = 587 # QQ邮箱的SMTP服务器端口号,通常是465或587
EMAIL_HOST_USER = 'your-qq-email@qq.com' # 你的QQ邮箱
EMAIL_HOST_PASSWORD = 'your-email-password' # 你的QQ邮箱密码(授权码)
EMAIL_USE_TLS = True # 使用TLS安全连接
# EMAIL_USE_SSL = True # 如果端口是465,则取消注释这行
# 如果你希望在邮件中看到你的邮箱地址而不是服务器的地址,可以设置以下配置
DEFAULT_FROM_EMAIL = EMAIL_HOST_USER
# 确保将your-qq-email@qq.com替换为你的QQ邮箱地址,将your-email-password替换为你的QQ邮箱授权码。
# 授权码获取方式:
# 登录到你的QQ邮箱网页版。
# 进入“设置” -> “账户”。
# 下滑到“POP3/IMAP/SMTP/Exchange/CardDAV/CalDAV服务”部分。
# 开启“SMTP服务”,并获取授权码。
# 配置完成后,你可以使用Django的send_mail函数来发送邮件
# 例子
from django.core.mail import send_mail
send_mail(
'Subject here',
'Here is the message.',
'your-qq-email@qq.com',
['recipient@example.com'],
fail_silently=False,
)
# 确保在实际部署时,不要将邮箱密码或授权码硬编码在代码中,而是使用环境变量或者安全的配置文件来管理敏感信息
redis配置
if importlib.util.find_spec('channels') is not None:
INSTALLED_APPS += [
'channels',
]
# 2986a11b50b2.c.methodot.com:31261七天有效期
CHANNEL_LAYERS = {
'default': {
'BACKEND': 'channels_redis.core.RedisChannelLayer',
'CONFIG': {
"hosts": [('2986a11b50b2.c.methodot.com', 31261)],
},
},
}
mysql配置
DATABASES = {
# 'default': {
# 'ENGINE': 'django.db.backends.sqlite3',
# 'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
# }
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'victor',
'USER': 'victor',
'PASSWORD': '自己的密码',
'HOST': 'mysql.sqlpub.com',
'PORT': '3306',
}
}
INSTALLED_APPS添加
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'pyscada',
'pyscada.core',
'pyscada.hmi',
'pyscada.export',
'pyscada.modbus',
'pyscada.systemstat',
'pyscada.phant',
'pyscada.smbus',
'pyscada.onewire',
'pyscada.visa',
'pyscada.opcua',
]
三、安装插件
本来想直接从pip安装pipy上面的,结果应该是版本问题,才0.80,安装新版测试出错了,我们只有自己编译了
贴张目录结构图,都是git下载的,最后一个时我们建的项目,其它都是插件,.env是虚拟环境,说明目前是在windows 10环境下
每个插件安装过程中出现下列错误(有几个插件有这个错误),直接注释掉,# from pyscada import core
ImportError: cannot import name 'core' from 'pyscada' (D:\jkp\work\pyscada_prj\PyScada-Phant\pyscada\__init__.py)
1、安装PyScada
进入目录,大概就是下面的样子,注意最后的点(.)要加喔
(.env) D:\jkp\work\pyscada_prj\PyScada-main>pip install .
2、PyScada-Modbus
(.env) D:\jkp\work\pyscada_prj\PyScada-Modbus>pip install .
3、PyScada-Onewire
(.env) D:\jkp\work\pyscada_prj\PyScada-Onewire>pip install .
4、PyScada-OPCUA
(.env) D:\jkp\work\pyscada_prj\PyScada-OPCUA>pip install .
5、PyScada-Phant
(.env) D:\jkp\work\pyscada_prj\PyScada-Phant>pip install .
6、PyScada-SMBus
(.env) D:\jkp\work\pyscada_prj\PyScada-SMBus>pip install .
7、PyScada-SystemStat
(.env) D:\jkp\work\pyscada_prj\PyScada-SystemStat>pip install .
8、PyScada-VISA
(.env) D:\jkp\work\pyscada_prj\PyScada-VISA>pip install .
四、运行项目
# 安装库
pip install -r requirements.txt
# 迁移
python manage.py migrate
# 收集静态数据,staic目录下
python manage.py collectstatic
# 初始化数据
python manage.py loaddata color
python manage.py loaddata units
python manage.py pyscada_daemon init
# 创建超级用户
python manage.py createsuperuser --username admin --email pyscada@pyscada.org
#修改密码
python manage.py changepassword admin
# 运行
python manage.py runserver --insecure
测试地址:
Site administration | Django site adminhttp://127.0.0.1:8000/pyscada_admin/