13 #include "qextserialenumerator.h"
23 m_Saver(new QcepSettingsSaver(this)),
24 m_Debug(
m_Saver, this,
"debug", 0,
"Debug Level"),
25 m_ControllerStatus(QcepSettingsSaverPtr(), this,
"controllerStatus",
Stopped,
"Controller Status?"),
26 m_Connected(QcepSettingsSaverPtr(), this,
"connected", false,
"Device Connected?"),
27 m_DefaultDeviceNumber(
m_Saver, this,
"defaultDeviceNumber", 0,
"Default Device Number"),
28 m_Temperature(QcepSettingsSaverPtr(), this,
"temperature",
nan(),
"Temperature"),
29 m_RampPoint(QcepSettingsSaverPtr(), this,
"rampPoint",
nan(),
"Ramp Point (current setpoint during ramp)"),
30 m_SetPoint (
m_Saver, this,
"setPoint",
nan(),
"Target Set Point"),
31 m_RampRate (
m_Saver, this,
"rampRate", 0,
"Set Point Ramping Rate (or 0 for no ramping) in degC/min"),
32 m_HeatSetPoint(
m_Saver, this,
"heatSetPoint", 0,
"Set Point for heating phase"),
33 m_HeatRampRate(
m_Saver, this,
"heatRampRate", 0,
"Ramp rate for heating phase"),
34 m_SoakTime(
m_Saver, this,
"soakTime", 0,
"Soak time"),
35 m_CoolRampRate(
m_Saver, this,
"coolRampRate", 0,
"Ramp rate for cooling phase"),
36 m_Proportional (
m_Saver, this,
"proportional", 0,
"Proportional term (%/degC)"),
37 m_Integral (
m_Saver, this,
"integral", 0,
"Integral term"),
38 m_Derivative (
m_Saver, this,
"derivative", 0,
"Derivative term"),
39 m_OutputLevel(QcepSettingsSaverPtr(), this,
"outputLevel",
nan(),
"Output Level (%)"),
40 m_Enabled(
m_Saver, this,
"enabled", false,
"Output Enabled?"),
41 m_LoopEnabled(
m_Saver, this,
"loopEnabled", false,
"PID Loop Enabled?"),
42 m_ColumnNames(
m_Saver, this,
"columnNames", QStringList(),
"Graph Column Names"),
43 m_SelectionCounter(
m_Saver, this,
"selectionCounter", 0,
"Dummy Property used to force settings to be saved"),
44 m_GraphLength(
m_Saver, this,
"graphLength", 100,
"Length of Temperature History"),
45 m_GraphInterval(
m_Saver, this,
"graphInterval", 5,
"Update Interval for Temperature History in sec"),
46 m_WindowGeometry(
m_Saver, this,
"windowGeometry", QByteArray(),
"Window Geometry Settings"),
47 m_WindowState(
m_Saver, this,
"windowState", QByteArray(),
"Window State Settings"),
48 m_SettingsPath(QcepSettingsSaverPtr(), this,
"settingsPath",
"",
"Settings saved in"),
51 connect(prop_DefaultDeviceNumber(), SIGNAL(valueChanged(
int,
int)),
this, SLOT(
onDefaultDeviceChanged(
int)));
60 return std::numeric_limits<double>::quiet_NaN();
101 connect(prop_Debug(), SIGNAL(valueChanged(
int,
int)),
this, SLOT(
debugChanged(
int)));
122 g_DebugLevel->setDebugLevel(dbg);
132 connect(dev.data(), SIGNAL(loggedChannelNames(QStringList)),
this, SLOT(
onLoggedChannelNames(QStringList)));
133 connect(dev.data(), SIGNAL(loggedChannelValues(QcepDoubleList)),
this, SLOT(
onLoggedChannelValues(QcepDoubleList)));
134 connect(dev.data(), SIGNAL(graphedChannelNames(QStringList)),
this, SLOT(
onGraphedChannelNames(QStringList)));
135 connect(dev.data(), SIGNAL(graphedChannelValues(QcepDoubleList)),
this, SLOT(
onGraphedChannelValues(QcepDoubleList)));
137 dev->set_RunState(
true);
148 dev->set_RunState(
false);
150 disconnect(dev.data(), SIGNAL(loggedChannelNames(QStringList)),
this, SLOT(
onLoggedChannelNames(QStringList)));
151 disconnect(dev.data(), SIGNAL(loggedChannelValues(QcepDoubleList)),
this, SLOT(
onLoggedChannelValues(QcepDoubleList)));
152 disconnect(dev.data(), SIGNAL(graphedChannelNames(QStringList)),
this, SLOT(
onGraphedChannelNames(QStringList)));
153 disconnect(dev.data(), SIGNAL(graphedChannelValues(QcepDoubleList)),
this, SLOT(
onGraphedChannelValues(QcepDoubleList)));
162 m_Devices[get_DefaultDeviceNumber()]->restart();
169 set_ControllerStatus(
Paused);
179 QString res =
"Unknown";
216 return m_Devices.value(get_DefaultDeviceNumber());
228 return m_ScriptEngine->newQObject(dev.data(), QScriptEngine::QtOwnership);
235 set_DefaultDeviceNumber(dev);
250 devp -> set_DeviceName(name);
267 return get_DefaultDeviceNumber();
272 if (get_SettingsPath() ==
"") {
283 if (qcepDebug(DEBUG_PREFS)) {
290 set_WindowGeometry(win->saveGeometry());
291 set_WindowState(win->saveState(2));
296 QcepProperty::writeSettings(
this, &staticMetaObject,
"controller", settings);
298 settings->beginWriteArray(
"selection");
303 while(iter.hasNext()) {
306 settings->setArrayIndex(i++);
307 settings->setValue(
"name", iter.key());
308 settings->setValue(
"selection",iter.value());
311 settings->endArray();
313 settings->beginWriteArray(
"devices");
315 for (
int i=0; i<
m_Devices.count(); i++) {
316 settings->setArrayIndex(i);
320 settings->setValue(
"type", dev->get_DeviceType());
321 settings->setValue(
"name", dev->get_DeviceName());
323 m_Devices.value(i)->writeSettings(settings,
"device");
327 settings->endArray();
330 m_Server->writeSettings(settings,
"socketServer");
334 m_Logger->writeSettings(settings,
"logger");
340 if (get_SettingsPath() ==
"") {
353 QcepProperty::readSettings(
this, &staticMetaObject,
"controller", settings);
355 int nd = settings->beginReadArray(
"devices");
357 for (
int i=0; i<nd; i++) {
358 settings->setArrayIndex(i);
360 int type = settings->value(
"type").toInt();
361 QString name = settings->value(
"name").toString();
368 dev->readSettings(settings,
"device");
372 settings->endArray();
375 m_Server->readSettings(settings,
"socketServer");
379 m_Logger->readSettings(settings,
"logger");
384 int sz = settings->beginReadArray(
"selection");
386 for (
int i=0; i<sz; i++) {
387 settings->setArrayIndex(i);
389 QString name = settings->value(
"name").toString();
390 int val = settings->value(
"selection").toInt();
395 settings->endArray();
400 QByteArray geometry = get_WindowGeometry();
401 QByteArray winstate = get_WindowState();
403 if (!win->restoreGeometry(geometry)) {
407 if (!win->restoreState(winstate,2)) {
438 return QDir::homePath();
477 while (devList.count()) {
503 set_Connected(newConnected);
505 if (!get_Connected()) {
506 set_Temperature(
nan());
507 set_OutputLevel(
nan());
508 set_RampPoint(
nan());
515 set_Temperature(newTemperature);
521 set_RampPoint(newRampPoint);
527 set_OutputLevel(newOutputLevel);
544 QMetaObject::invokeMethod(sess.data(),
"finishedCommand", Q_ARG(QScriptValue, result));
552 QList<QextPortInfo> ports = QextSerialEnumerator::getPorts();
554 for (
int i=0; i<ports.count(); i++) {
555 QextPortInfo port = ports.value(i);
568 if (get_SoakTime() > 0) {
571 if (get_HeatRampRate() > 0) {
572 soakTime += fabs((get_HeatSetPoint() - get_SetPoint())/get_HeatRampRate());
578 .arg(get_SetPoint()).arg(get_HeatSetPoint()).arg(get_HeatRampRate()));
592 .arg(get_HeatSetPoint()).arg(get_SetPoint()).arg(get_CoolRampRate()));
602 dev->sendCommand(cmd);
620 logger->logChannelNames(names);
629 logger->logChannelValues(values);
635 set_ColumnNames(names);
637 int n=names.length();
652 int n = values.length();
653 int np = get_GraphLength();
659 for (
int i=0; i<n; i++) {
678 QString name = get_ColumnNames().value(col);
682 return (sel & 1 ? Qt::Checked : Qt::Unchecked);
687 QString name = get_ColumnNames().value(col);
691 return (sel & 2 ? Qt::Checked : Qt::Unchecked);
696 QString name = get_ColumnNames().value(col);
701 if (state == Qt::Checked) {
703 }
else if (state == Qt::Unchecked) {
709 prop_SelectionCounter()->incValue(1);
715 QString name = get_ColumnNames().value(col);
720 if (state == Qt::Checked) {
722 }
else if (state == Qt::Unchecked) {
728 prop_SelectionCounter()->incValue(1);
void restoreSplitterState(QPidSettings *settings)
void onGraphedChannelNames(QStringList names)
void setYChecked(int col, Qt::CheckState state)
void setSettingsFilePath(QString filePath)
void executeServerCommand(QPidServerSessionWPtr wksess, QString cmd)
QVector< QPidDeviceThreadPtr > m_DeviceThreads
QPidLoggerThreadPtr m_LoggerThread
QSharedPointer< QPidDevice > QPidDevicePtr
QWeakPointer< QPidController > QPidControllerWPtr
QWeakPointer< QPidServerSession > QPidServerSessionWPtr
void onGraphedChannelValues(QcepDoubleList values)
QPidObjectNamer m_ObjectNamer
void saveSplitterState(QPidSettings *settings)
QSharedPointer< QPidLogger > QPidLoggerPtr
QPidMainWindowWPtr m_MainWindow
QcepSettingsSaverPtr saver()
QString settingsFilePath() const
QPidDevicePtr defaultDevice() const
QVector< QPidDevicePtr > m_Devices
void setDefaultDevice(int dev)
QSharedPointer< QPidScriptEngine > QPidScriptEnginePtr
Qt::CheckState yChecked(int col)
void graphChannelNames(QStringList names)
void onLoggedChannelValues(QcepDoubleList values)
QSharedPointer< QPidDeviceThread > QPidDeviceThreadPtr
void executeCommand(QString cmd)
QSharedPointer< QPidServerSession > QPidServerSessionPtr
void configurationDialog(int dev)
QString controllerStatusString(int status)
void setDeviceName(int dev, QString name)
void updateOutputLevel(double newOutputLevel)
void graphChannelValues(QcepDoubleList values)
void deleteDevices(QVector< int > devList)
QPidDevicePtr getDevice(int dev) const
QString m_SettingsFilePath
QScriptValue device(int i) const
void updateTemperature(double newTemperature)
void start(QPidMainWindowWPtr window, QPidControllerWPtr ctrl)
void onLoggedChannelNames(QStringList names)
void sendCommand(QString cmd)
QcepSettingsSaverPtr m_Saver
virtual ~QPidController()
void appendDevice(int deviceKind, QString deviceName)
QPidScriptEnginePtr m_ScriptEngine
void debugChanged(int dbg)
QSharedPointer< QPidLoggerThread > QPidLoggerThreadPtr
void criticalMessage(QString msg)
void updateRampPoint(double newRampPoint)
void saveSettings(QString filePath)
QMap< QString, int > m_ColumnSelections
void onDefaultDeviceChanged(int dev)
void cancelRampSoakCool()
void printMessage(QString msg, QDateTime dt=QDateTime::currentDateTime())
void setY2Checked(int col, Qt::CheckState state)
QList< QVector< double > > m_PlottedValues
void loadSettings(QString filePath)
void updateConnected(bool newConnected)
QPidController(QObject *parent=0)
int defaultDeviceNumber() const
QPidServerThreadPtr m_ServerThread
QSharedPointer< QPidServer > QPidServerPtr
static QPidDeviceThreadPtr createDevice(QPidControllerWPtr ctl, int deviceKind, QString deviceName)
Qt::CheckState y2Checked(int col)
QSharedPointer< QPidServerThread > QPidServerThreadPtr