qpidctrl  0.7.1
qeurothermdevice.cpp
Go to the documentation of this file.
1 #include "qeurothermdevice.h"
2 #include "qpidcommport.h"
3 #include "QTcpSocket"
4 #include "QTimer"
5 #include "QThread"
6 #include "qpiddevicethread.h"
7 
8 QEurothermDevice::QEurothermDevice(QPidControllerWPtr ctrl, QcepSettingsSaverWPtr saver, QString deviceName) :
9  QPidDevice(ctrl, saver, EurothermDevice, deviceName, 1000, 2000),
10  m_ObjectNamer(this, "eurotherm"),
11  m_Test2State(0),
12  m_Test2Count(0)
13 {
14 }
15 
17 {
18 }
19 
21 {
22 }
23 
25 {
26 }
27 
28 void QEurothermDevice::writeSettings(QSettings *set, QString section)
29 {
30  QPidDevice::writeSettings(set, section+"/eurotherm");
31 
32  QcepProperty::writeSettings(this, &staticMetaObject, section+"/eurotherm", set);
33 }
34 
35 void QEurothermDevice::readSettings(QSettings *set, QString section)
36 {
37  QPidDevice::readSettings(set, section+"/eurotherm");
38 
39  QcepProperty::readSettings(this, &staticMetaObject, section+"/eurotherm", set);
40 }
41 
43 {
44  if (m_DeviceDialog == NULL) {
46  }
47 
48  if (m_DeviceDialog) {
49  m_DeviceDialog->show();
50  m_DeviceDialog->raise();
51  }
52 }
53 
54 void QEurothermDevice::sendCommand(QString /*cmd*/)
55 {
56 }
57 
58 void QEurothermDevice::changeSetPoint(double /*setPoint*/)
59 {
61 
62  if (ctl) {
63 // sendCryoCommand(CSCOMMAND_RAMP, cryoRate(ctl->get_RampRate())+cryoTemperature(setPoint));
64  }
65 }
66 
67 void QEurothermDevice::changeRampRate(double /*rate*/)
68 {
69 }
70 
72 {
73 }
74 
75 void QEurothermDevice::changeIntegral(double /*integ*/)
76 {
77 }
78 
79 void QEurothermDevice::changeDerivative(double /*deriv*/)
80 {
81 }
82 
84 {
85  if (on) {
86 // sendCryoCommand(CSCOMMAND_RESTART);
87  } else {
88 // sendCryoCommand(CSCOMMAND_STOP);
89  }
90 }
91 
93 {
94  return false;
95 }
96 
98 {
99 }
100 
101 QByteArray QEurothermDevice::invertByteArray(QByteArray arr)
102 {
103  QByteArray res;
104 
105  foreach(int ch, arr) {
106  res.append(ch ^ -1);
107  }
108 
109  return res;
110 }
111 
113 {
114  printMessage("Run test 1");
115 
116  QByteArray modbusCommand = QByteArray::fromHex("010741E2");
117  QByteArray modbusInverted = invertByteArray(modbusCommand);
118 
119  QByteArray bisyncCommand = encodeBiSyncPollCommand(0, 1, 1, "PV");
120  QByteArray bisyncInverted = invertByteArray(bisyncCommand);
121 
122  int avail;
123 
124  for (int i=0; i<50; i++) {
125  printMessage(tr("Send iteration %1").arg(i));
126 
127  for (int j=0; j<i; j++) {
128  commPort()->write(" ");
129  }
130 
131  commPort()->write(bisyncCommand);
132  printMessage(tr("Sent %1").arg(QString(bisyncCommand.toHex())));
133  commPort()->waitForBytesWritten();
135 
136  for (int j=0; j<i; j++) {
137  commPort()->write(" ");
138  }
139 
140  commPort()->write(bisyncInverted);
141  printMessage(tr("Sent %1").arg(QString(bisyncInverted.toHex())));
142  commPort()->waitForBytesWritten();
144 
145  commPort()->waitForBytesWritten();
146 
147  avail = commPort()->bytesAvailable();
148 
149  printMessage(tr("%1 bytes of input are available").arg(avail));
150 
151  QByteArray res = commPort()->readAll();
152 
153  printMessage(tr("Data read - %1").arg(QString(res.toHex())));
154  }
155 
156  QByteArray inp = commPort()->read(avail);
157 }
158 
160 {
161  printMessage("Run test 2");
162 
163  if (m_Test2State == 0) {
164  connect(&m_Test2Timer, SIGNAL(timeout()), this, SLOT(test2Tick()));
165 
166  m_Test2State = 1;
167  m_Test2Count = 100;
168 
169  m_Test2Timer.start(1000);
170  } else {
171  m_Test2Timer.stop();
172 
173  disconnect(&m_Test2Timer, SIGNAL(timeout()), this, SLOT(test2Tick()));
174 
175  m_Test2State = 0;
176  }
177 }
178 
180 {
181  if (m_Test2State != 0) {
182  if (true) {
183  printMessage(tr("Iteration %1").arg(m_Test2Count));
184 
185  QByteArray bisyncCommand;
186 
187  if (m_Test2Count & 2) {
188  bisyncCommand = encodeBiSyncPollCommand(0, 1, 1, "PV");
189  } else {
190  bisyncCommand = encodeBiSyncSelectCommand(0, 1, 1, "SL", "22.0");
191  }
192 
193  if (m_Test2Count & 1) {
194  bisyncCommand = invertByteArray(bisyncCommand);
195  }
196 
197  commPort()->write(bisyncCommand);
198 
199  commPort()->waitForBytesWritten();
200  printMessage(tr("Sent %1").arg(QString(bisyncCommand.toHex())));
201 
202  m_Test2Count--;
203  }
204  }
205 
206  int avail = commPort()->bytesAvailable();
207 
208  printMessage(tr("%1 bytes of input are available").arg(avail));
209 
210  QByteArray res = commPort()->readAll();
211 
212  printMessage(tr("Data read - %1").arg(QString(res.toHex())));
213 }
214 
216  (int /*addr*/, int /*cmd*/, QByteArray /*args*/)
217 {
218  QByteArray res;
219 
220  return res;
221 }
222 
224  (int gid, int uid, int chan, QString mne)
225 {
226  QByteArray res;
227 
228  res.append(4); // EOT
229 
230  QString gidstr = tr("%1").arg(gid,1);
231  QString uidstr = tr("%1").arg(uid,1);
232  QString chanstr = tr("%1").arg(chan,1);
233 
234  res.append(gidstr);
235  res.append(gidstr);
236  res.append(uidstr);
237  res.append(uidstr);
238 // res.append(chanstr);
239  res.append(mne.left(2));
240 
241  res.append(5); // ENQ
242 
243  return res;
244 }
245 
247  (int gid, int uid, int chan, QString mne, QString val)
248 {
249  QByteArray res;
250 
251  res.append(4); // EOT
252 
253  QString gidstr = tr("%1").arg(gid,1);
254  QString uidstr = tr("%1").arg(uid,1);
255  QString chanstr = tr("%1").arg(chan,1);
256 
257  res.append(gidstr);
258  res.append(gidstr);
259  res.append(uidstr);
260  res.append(uidstr);
261 
262  res.append(2); // STX
263 // res.append(chanstr);
264  res.append(mne.left(2));
265  res.append(val);
266  res.append(3); // ETX
267 
268  quint32 sum = 0;
269 
270  for (int i=6; i<res.length(); i++) {
271  sum ^= res[i];
272  }
273 
274  res.append(sum & 0xff);
275 
276  return res;
277 }
void changeDerivative(double deriv)
void changeSetPoint(double setPoint)
QPidControllerWPtr controller() const
Definition: qpiddevice.cpp:316
virtual void writeSettings(QSettings *set, QString section)
Definition: qpiddevice.cpp:366
QWeakPointer< QPidController > QPidControllerWPtr
static void msleep(unsigned long msecs)
void changeIntegral(double integ)
virtual void readSettings(QSettings *set, QString section)
QSharedPointer< QPidController > QPidControllerPtr
QEurothermDeviceDialogPtr m_DeviceDialog
void enable(bool on)
void changeRampRate(double rate)
QSharedPointer< QEurothermDevice > QEurothermDevicePtr
QByteArray invertByteArray(QByteArray arr)
virtual void writeSettings(QSettings *set, QString section)
QSharedPointer< QEurothermDeviceDialog > QEurothermDeviceDialogPtr
QByteArray encodeModbusCommand(int addr, int cmd, QByteArray args)
QPidCommPortPtr commPort()
Definition: qpiddevice.cpp:121
QEurothermDevice(QPidControllerWPtr ctrl, QcepSettingsSaverWPtr saver, QString deviceName)
virtual void readSettings(QSettings *set, QString section)
Definition: qpiddevice.cpp:375
QByteArray encodeBiSyncPollCommand(int gid, int uid, int chan, QString mne)
QPidObjectNamer m_ObjectNamer
void sendCommand(QString cmd)
void printMessage(QString msg, QDateTime ts=QDateTime::currentDateTime())
Definition: qpiddevice.cpp:321
QByteArray encodeBiSyncSelectCommand(int gid, int uid, int chan, QString mne, QString val)
QString deviceName
Definition: qpiddevice.h:133
void changeProportional(double prop)