-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathModSlaveMBData.py
More file actions
157 lines (139 loc) · 7.21 KB
/
Copy pathModSlaveMBData.py
File metadata and controls
157 lines (139 loc) · 7.21 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
#-------------------------------------------------------------------------------
# Name: ModSlaveMBDataWindow
# Purpose:
#
# Author: elbar
#
# Created: 28/08/2012
# Copyright: (c) elbar 2012
# Licence: <your licence>
#-------------------------------------------------------------------------------
#!/usr/bin/env python
from PyQt4 import QtGui,QtCore
from Ui_mbdata import Ui_MBData
from ModSlaveMBDataModel import ModSlaveMBDataModel
from ModSlaveMBDataItemDelegate import ModSlaveMBDataItemDelegate
#add logging capability
import logging
#-------------------------------------------------------------------------------
class ModSlaveMBDataWindow(QtGui.QMainWindow):
""" Class wrapper for modbus data """
def __init__(self):
super(ModSlaveMBDataWindow,self).__init__()
#data models
self.coils = None
self.dis_inputs = None
self.input_regs = None
self.hold_regs = None
self._logger = logging.getLogger("modbus_tk")
#setu UI
self.setupUI()
def setupUI(self):
#create window from ui
self.ui=Ui_MBData()
self.ui.setupUi(self)
#signals-slots
self.ui.chkSimCoils.stateChanged.connect(self._sim_coils_changed)
self.ui.chkSimDisInputs.stateChanged.connect(self._sim_dis_inputs_changed)
self.ui.chkSimInputRegs.stateChanged.connect(self._sim_input_regs_changed)
self.ui.chkSimHoldRegs.stateChanged.connect(self._sim_hold_regs_changed)
self.ui.cmbInputRegsType.currentIndexChanged.connect(self._input_regs_data_type_changed)
self.ui.cmbHoldRegsType.currentIndexChanged.connect(self._hold_regs_data_type_changed)
self.ui.pbResetDO.clicked.connect(self._reset_DO)
self.ui.pbResetDI.clicked.connect(self._reset_DI)
self.ui.pbResetAO.clicked.connect(self._reset_AO)
self.ui.pbResetAI.clicked.connect(self._reset_AI)
#read only table views
self.ui.tvCoilsData.setEditTriggers(QtGui.QAbstractItemView.NoEditTriggers)
self.ui.tvDiscreteInputsData.setEditTriggers(QtGui.QAbstractItemView.NoEditTriggers)
self.ui.tvHoldingRegistersData.setEditTriggers(QtGui.QAbstractItemView.NoEditTriggers)
self.ui.tvInputRegistersData.setEditTriggers(QtGui.QAbstractItemView.NoEditTriggers)
#item delegates
self.ui.tvCoilsData.setItemDelegate(ModSlaveMBDataItemDelegate(True))
self.ui.tvDiscreteInputsData.setItemDelegate(ModSlaveMBDataItemDelegate(True))
self.ui.tvHoldingRegistersData.setItemDelegate(ModSlaveMBDataItemDelegate(False))
self.ui.tvInputRegistersData.setItemDelegate(ModSlaveMBDataItemDelegate(False))
def set_data_models(self, coils, dis_inputs, input_regs, hold_regs):
self.coils = coils
self.dis_inputs = dis_inputs
self.input_regs = input_regs
self.hold_regs = hold_regs
#table views models
#coils
self.ui.tvCoilsData.setModel(self.coils.model)
self.connect(self.coils, QtCore.SIGNAL("update_view"), self._models_data_changed)
self.connect(self.ui.tvCoilsData.itemDelegate(), QtCore.SIGNAL("update_data"), self.coils.update_item)
self._sim_coils_changed()
#discrete inputs
self.ui.tvDiscreteInputsData.setModel(self.dis_inputs.model)
self.connect(self.dis_inputs, QtCore.SIGNAL("update_view"), self._models_data_changed)
self.connect(self.ui.tvDiscreteInputsData.itemDelegate(), QtCore.SIGNAL("update_data"), self.dis_inputs.update_item)
self._sim_dis_inputs_changed()
#input regs
self.ui.tvInputRegistersData.setModel(self.input_regs.model)
self.connect(self.input_regs, QtCore.SIGNAL("update_view"), self._models_data_changed)
self.input_regs.set_data_type(self.ui.cmbInputRegsType.currentIndex())
self.connect(self.ui.tvInputRegistersData.itemDelegate(), QtCore.SIGNAL("update_data"), self.input_regs.update_item)
self._sim_input_regs_changed()
#holding regs
self.ui.tvHoldingRegistersData.setModel(self.hold_regs.model)
self.connect(self.hold_regs, QtCore.SIGNAL("update_view"), self._models_data_changed)
self.hold_regs.set_data_type(self.ui.cmbHoldRegsType.currentIndex())
self.connect(self.ui.tvHoldingRegistersData.itemDelegate(), QtCore.SIGNAL("update_data"), self.hold_regs.update_item)
self._sim_hold_regs_changed()
#update table views
self._models_data_changed()
def _sim_coils_changed(self):
self.coils.sim = self.ui.chkSimCoils.isChecked()
self.ui.pbResetDO.setDisabled(self.coils.sim)
if (self.coils.sim):
self.ui.tvCoilsData.setEditTriggers(QtGui.QAbstractItemView.NoEditTriggers)
else:
self.ui.tvCoilsData.setEditTriggers(QtGui.QAbstractItemView.AnyKeyPressed)
def _sim_dis_inputs_changed(self):
self.dis_inputs.sim = self.ui.chkSimDisInputs.isChecked()
self.ui.pbResetDI.setDisabled(self.dis_inputs.sim)
if (self.dis_inputs.sim):
self.ui.tvDiscreteInputsData.setEditTriggers(QtGui.QAbstractItemView.NoEditTriggers)
else:
self.ui.tvDiscreteInputsData.setEditTriggers(QtGui.QAbstractItemView.AnyKeyPressed)
def _sim_input_regs_changed(self):
self.input_regs.sim = self.ui.chkSimInputRegs.isChecked()
self.ui.pbResetAI.setDisabled(self.input_regs.sim)
if (self.input_regs.sim):
self.ui.tvInputRegistersData.setEditTriggers(QtGui.QAbstractItemView.NoEditTriggers)
else:
self.ui.tvInputRegistersData.setEditTriggers(QtGui.QAbstractItemView.AnyKeyPressed)
def _sim_hold_regs_changed(self):
self.hold_regs.sim = self.ui.chkSimHoldRegs.isChecked()
self.ui.pbResetAO.setDisabled(self.hold_regs.sim)
if (self.hold_regs.sim):
self.ui.tvHoldingRegistersData.setEditTriggers(QtGui.QAbstractItemView.NoEditTriggers)
else:
self.ui.tvHoldingRegistersData.setEditTriggers(QtGui.QAbstractItemView.AnyKeyPressed)
def _models_data_changed(self):
self.ui.tvCoilsData.resizeColumnsToContents()
self.ui.tvDiscreteInputsData.resizeColumnsToContents()
self.ui.tvInputRegistersData.resizeColumnsToContents()
self.ui.tvHoldingRegistersData.resizeColumnsToContents()
def _input_regs_data_type_changed(self):
if (self.input_regs):
self.input_regs.set_data_type(self.ui.cmbInputRegsType.currentIndex())
(self.ui.tvInputRegistersData.itemDelegate()).set_data_type(self.ui.cmbInputRegsType.currentIndex())
def _hold_regs_data_type_changed(self):
if (self.hold_regs):
self.hold_regs.set_data_type(self.ui.cmbHoldRegsType.currentIndex())
(self.ui.tvHoldingRegistersData.itemDelegate()).set_data_type(self.ui.cmbHoldRegsType.currentIndex())
def _reset_DO(self):
self._logger.info("Reset DO")
self.coils.reset_data()
def _reset_DI(self):
self._logger.info("Reset DI")
self.dis_inputs.reset_data()
def _reset_AO(self):
self._logger.info("Reset AO")
self.hold_regs.reset_data()
def _reset_AI(self):
self._logger.info("Reset AI")
self.input_regs.reset_data()
#-------------------------------------------------------------------------------