TANGO Controls学习

|
#tango
最后更新于


预计 7 min read


环境安装

安装包

  1. JDK 8 环境
  2. mysql 下载版本为 5.7 版本,后续版本会执行报错
  3. tango
  4. NSSM

环境搭建

JDK 安装

  1. 安装 JDK 环境,正常操作,下一步
    1. 配置在 PATH 中配置 JDK 环境,选择 JDK 的 bin 包内
    2. 在 cmd 中使用 java -version 查看是否环境配置及安装成功

MySQL 安装

  1. 解压 mysql 压缩包
  2. 配置环境变量,类似 jdk,到 bin 目录下即可
  3. 在系统变量中添加两个 MYSQL_USER = tangoMYSQL_PASSWORD = 123456
  4. 在解压的文件中创建 my.ini 文件,文件内容 mysql 路径切换自己的路径
1
[mysqld]
2
#端口号
3
port = 3306
4
#mysql-5.7.35-winx64的路径
5
basedir=D:\\Tango\\mysql\\mysql-5.7.30-winx64
6
#mysql-5.7.27-winx64的路径+\data
7
datadir=D:\\Tango\\mysql\\mysql-5.7.30-winx64\\data
8
#最大连接数
9
max_connections=200
10
#编码
11
character-set-server=utf8
12
default-storage-engine=INNODB
13
sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES
14
skip-grant-tables
15
[mysql]
16
#编码
17
default-character-set=utf8
  1. 输入安装命令:mysqld -install,若出现 Service successfully installed,证明安装成功;如出现 Install of the Service Denied,则说明没有以管理员权限来运行 CMD.

  2. 然后继续输入命令:mysqld --initialize --user=mysql,此时不会有任何提示。

  3. 输入启动命令:net start mysql

    1. 使用管理员 cmd 进入 mysql 文件的 bin 路径
    2. 以管理员的方式进入到安装目录的 bin 目录
    3. 执行 mysqld --initialize --console 命令,记录下初始化密码
    4. 输入 mysqld -install 将 mysql 安装为 Windows 的服务,提示安装成功。
    5. 继续执行命令:net start mysql, 启动 mysql
    6. 输入 mysql -u root -p 来登陆数据库,并输入前面记录的临时密码
    7. 输入 alter user 'root'@'localhost' identified by '123456'; 修改自己的密码
    8. 最后 commit 提交一下即可退出
  4. mysql 中创建创建具有 DB Admin 权限的专用用户

    1. 使用命令进入 mysql,mysql -u root -p,输入密码即可进入
    2. 使用 CREATE USER 'tango'@'localhost' IDENTIFIED BY '123456'; 创建 tango 新用户
    3. 使用 GRANT ALL PRIVILEGES ON *.* TO 'tango'@'localhost' WITH GRANT OPTION; 为用户 tango 在 MySQL 中授予所有权限,并允许该用户将这些权限授予其他用户
      • GRANT ALL PRIVILEGES:表示授予所有权限。
      • ON *.*:表示这些权限适用于所有数据库和所有表。
      • TO 'tango'@'localhost':指定要授予权限的用户和主机。这里的 tango 是用户名,localhost 表示从本地连接。
      • WITH GRANT OPTION:允许用户 tango 将其获得的权限授予其他用户
    4. 执行命令 FLUSH PRIVILEGES; 刷新权限

Tango 安装

  1. 下载 tango 安装包,双击执行
  2. 安装 tango 至指定路径,之后下一步即可
  3. 待安装成功后会显示 Edit MySQL user/password,勾选上配置 mysql 账号和密码为 tango123456
  4. 在系统变量中添加两个参数 TANGO_HOST = localhost:10000,,如果没有 TANGO_ROOT, 需要自己增加至对应路径。
    path
    path
  5. tango\share\tango\db 路径下打开 cmd,执行 create_db. bat, 运行不报错即为成功
  6. 可输入 mysqlcheck -u root --auto-repair --check --all-databases 查看 tango 数据库
    database
    database
  7. 切换路径至 bin 目录下,执行 start-db.bat,出现 ready to accept request 且没有退出即为成功
    success
    success

NSSM 安装与配置

  1. 去官网下载
  2. 下载完解压文件,将文件解包到某个方便的位置。建议将合适的(32 位或 64 位)版本拷贝到 Tango bin 文件夹。
  3. 在 Tango 中的 bin 路径下执行命令 nssm.exe install Tango
  4. 在 argument 填入 2 -ORBendPoint giop:tcp::10000
  5. 在 Environment 选项卡中提供用于访问 MySQL 的凭据变量 (剩余查看官网,内容都是一致的)

PyTango 安装使用

建议使用 conda 安装的方法使用,这种方法可以在不干扰当前 python 环境下并且可以创建多个 python 环境更便于管理及使用

安装包

在 Conda 下安装

  • Win 系统下搜索 anaconda 命令框如图
    anaconda
    anaconda
  • 执行命令创建新环境并且安装 pytango 库 conda create --channel conda-forge --name pytango-env python=3.11 pytango
  • 切换 python 环境至 pytango-env,执行命令 conda activate pytango-env
  • 执行命令 python -c "import tango; print(tango.Release.version)" 查看 tango 是否安装成功
    check
    check

参考文档

1
from time import time
2
from numpy.random import random_sample
3
4
from tango import AttrQuality, AttrWriteType, DevState, DispLevel, tReqType
5
from tango.server import Device, attribute, command
6
from tango.server import class_property, device_property
7
8
9
class PowerSupply(Device):
10
_my_current = 2.3456
11
_my_range = 0.0
12
_my_compliance = 0.0
13
_output_on = False
14
15
host = device_property(dtype=str)
16
port = class_property(dtype=int, default_value=9788)
17
18
def init_device(self):
19
super().init_device()
20
self.info_stream(f"Power supply connection details: elf.host}:{self.port}")
21
self.set_state(DevState.ON)
22
self.set_status("Power supply is ON")
23
24
current = attribute(
25
label="Current",
26
dtype=float,
27
display_level=DispLevel.EXPERT,
28
access=AttrWriteType.READ_WRITE,
29
unit="A",
30
format="8.4f",
31
min_value=0.0,
32
max_value=8.5,
33
min_alarm=0.1,
34
max_alarm=8.4,
35
min_warning=0.5,
36
max_warning=8.0,
37
fget="get_current",
38
fset="set_current",
39
doc="the power supply current",
40
)
41
42
noise = attribute(
43
label="Noise",
44
dtype=((float,),),
45
max_dim_x=1024,
46
max_dim_y=1024,
47
fget="get_noise",
48
)
49
50
@attribute
51
def voltage(self):
52
return 10.0
53
54
def get_current(self):
55
return self._my_current
56
def set_current(self, current):
57
print("Current set to %f" % current)
58
self._my_current = current
59
60
def get_noise(self):
61
return random_sample((1024, 1024))
62
63
range = attribute(label="Range", dtype=float)
64
65
@range.setter
66
def range(self, new_range):
67
self._my_range = new_range
68
69
@range.getter
70
def current_range(self):
71
return self._my_range, time(), AttrQuality.ATTR_WARNING
72
73
@range.is_allowed
74
def can_range_be_changed(self, req_type):
75
if req_type == AttReqType.WRITE_REQ:
76
return not self._output_on
77
return True
78
79
compliance = attribute(label="Compliance", dtype=float)
80
81
@compliance.read
82
def compliance(self):
83
return self._my_compliance
84
85
@compliance.write
86
def new_compliance(self, new_compliance):
87
self._my_compliance = new_compliance
88
89
@command(dtype_in=bool, dtype_out=bool)
90
def output_on_off(self, on_off):
91
self._output_on = on_off
92
return self._output_on
93
94
95
if __name__ == "__main__":
96
PowerSupply.run_server()
   
评论