Tango Control System 之 自定义客户端

客户端

Tango Control System的客户端有很多形式,可以通过Taurus,Sardana等插件来实现,也可以通过web端实现。
1.插件形式实现客户端可以参考如下文章:
Tango Control System 使用(五):简易客户端测试Device Server
2.网页客户端可以参考:
Tango demo
3.自定义客户端

自定义客户端

通过QT来自定义客户端界面,然后通过API实现与Device Server连接。
1.通过QT自定义客户端界面结构
在这里插入图片描述
2.完善客户端代码,以下是当前示例代码。
QT文件必须和代码文件在同一目录下

from taurus.external.qt import Qt
import taurus
import tango
import sys
import os
from taurus.qt.qtgui.util.ui import UILoadable
from taurus.qt.qtgui.application import TaurusApplication
from taurus.qt.qtgui.panel import TaurusForm

data=0
a = 0


@UILoadable(with_ui="_ui")
class panel(Qt.QMainWindow):

    def __init__(self, parent=None):
        Qt.QWidget.__init__(self, parent)
        path = os.path.join(os.path.dirname(__file__))
        self.loadUi(filename="HV_motor.ui", path=path)
        
        #taurusForm模块放到Qt圈好的widget里
        layout3 = Qt.QHBoxLayout()
        panel = TaurusForm()
        layout3.addWidget(panel)
        props = [ 'state', 'Position', 'Rotation', 'LimitMin', 'LimitMax', 'speed', 'target' ]
        model = [ 'tango://127.0.0.1:10000/test/HV_motor/1/%s' % p for p in props ]
        panel.setModel(model)
        #panel.removeModels(model)  # removeModels to releas rom
        self._ui.widget_3.setLayout(layout3) 
        
        #绑定button的信号和槽
        motor = 'tango://127.0.0.1:10000/test/HV_motor/1'
        hvmotor = tango.DeviceProxy(motor)
        self._ui.move_button.clicked.connect(lambda:self.update_target(hvmotor,int(self._ui.target_data.text())))
        self._ui.speed_button.clicked.connect(lambda:self.write_speed(hvmotor,int(self._ui.speed_data.text())))
        self._ui.limitmin_button.clicked.connect(lambda:self.write_limitmin(hvmotor,int(self._ui.limitmin_data.text())))
        self._ui.limitmax_button.clicked.connect(lambda:self.write_limitmax(hvmotor,int(self._ui.limitmax_data.text())))
    def update(self, label,data):
        if label == 'tango://DESKTOP-DEPQL70.localdomain:10000/test/HV_motor/1/Position':
            self._ui.position1.setText(data)
            self._ui.rotation1.setText(data)
           # self._ui.position2.setText(data)
        elif label == 'tango://DESKTOP-DEPQL70.localdomain:10000/test/HV_motor/1/target':
            self._ui.target1.setText(data)
        elif label == 'tango://DESKTOP-DEPQL70.localdomain:10000/test/HV_motor/1/speed':
            self._ui.speed1.setText(data)
        elif label == 'tango://DESKTOP-DEPQL70.localdomain:10000/test/HV_motor/1/LimitMin':
            self._ui.limitimin1.setText(data)
        elif label == 'tango://DESKTOP-DEPQL70.localdomain:10000/test/HV_motor/1/LimitMax' :
            self._ui.limitmax1.setText(data)
    def update_target(self, device,data):
        device.target = data
        device.command_inout('move')
    def write_speed(self, device , data) :
        device.speed = data
    def write_limitmin(self, device , data) :
        device.LimitMin = data
    def write_limitmax(self, device , data) :
        device.LimitMax = data

    #重写 窗口关闭事件
    def closeEvent(self, event):        #窗口关闭 移除监听器
        props = [ 'Position', 'LimitMin', 'LimitMax', 'speed', 'target' ]
        model = [ 'tango://127.0.0.1:10000/test/HV_motor/1/%s' % p for p in props ]
        for m in model:
            taurus.Attribute(m).removeListener(myListener)  #移除轮询
        
        
def myListener(evt_src, evt_type, evt_value):
    #print 'myListener: entering…'
    print 'evt_src = ', evt_src
    #print 'evt_type = ', evt_type
    #print 'evt_value = ', evt_value
    print 'evt_value = ', evt_value.rvalue
    #print '\n'
    a = evt_value.rvalue
    pe.update(str(evt_src),str(a))   
    #return a
if __name__ == "__main__":
    app = TaurusApplication(sys.argv)
    pe = panel()
    props = [ 'Position', 'LimitMin', 'LimitMax', 'speed', 'target' ]
    model = [ 'tango://192.168.119.131:10000/test/HV_motor/1/%s' % p for p in props ]
    for m in model:
        taurus.Attribute(m).addListener(myListener)  #轮询
    pe.show()
    
    sys.exit(app.exec_())

3.运行结果
在这里插入图片描述
通过与ATKPanel进行比较,发现所有数据正常,命令执行正常。
在这里插入图片描述

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值