874 lines
24 KiB
C++
874 lines
24 KiB
C++
#include "serialdevicetest.h"
|
|
#include <QSettings>
|
|
#include <QString>
|
|
#include <QDebug>
|
|
#include "deviceinfo.h"
|
|
#include "deviceproxy.h"
|
|
#include "rs_settings.h"
|
|
#include <QFile>
|
|
bool bReadApFlag{false};
|
|
struct PID_PARAM {
|
|
|
|
float SetValue; //定义设定值
|
|
|
|
float ActualValue; //定义实际值
|
|
|
|
float err; //定义偏差值
|
|
|
|
float err_last; //定义上一个偏差值
|
|
|
|
float Kp, Ki, Kd; //定义比例、积分、微分系数
|
|
|
|
//float voltage; //定义电压值(控制执行器的变量)
|
|
float err_next;
|
|
|
|
|
|
};
|
|
PID_PARAM gtPid = { 0 };
|
|
|
|
SerialDeviceTest::SerialDeviceTest(QWidget *parent):
|
|
QFrame(parent),
|
|
ui(new Ui::SerialDeviceTest)
|
|
{
|
|
ui->setupUi(this);
|
|
// 获取文本光标(不是鼠标光标)
|
|
int brightness;
|
|
|
|
|
|
RS_SETTINGS->beginGroup("device/LightSource");
|
|
brightness = RS_SETTINGS->readNumEntry("/brightnessFind");
|
|
//Strobe = RS_SETTINGS->readNumEntry("/StrobeFind");
|
|
RS_SETTINGS->endGroup();
|
|
|
|
|
|
|
|
ui->spBrightness->setValue(brightness);
|
|
//ui->spStrobe->setValue(Strobe);
|
|
LIGHTSOURCEFIND->getSerialSet("lightsource");
|
|
LIGHTSOURCEFIND->getChnId("lightsource");
|
|
MODBUSTCP->getModbusPara("ModbusTCP");
|
|
//POWERMATT->getSerialSet("gonglvshuaijianqi");
|
|
POWERMETERLIGHT->getSerialSet("guanglugonglvji");
|
|
POWERMETERMACH->getSerialSet("jiagonggonglvji");
|
|
if (POWERMETERMACH->m_hComm == nullptr)
|
|
{
|
|
POWERMETERMACH->OpenComm();
|
|
}
|
|
if (POWERMETERLIGHT->m_hComm == nullptr)
|
|
{
|
|
POWERMETERLIGHT->OpenComm();
|
|
}
|
|
// if (POWERMATT->m_hComm == nullptr)
|
|
// {
|
|
// POWERMATT->OpenComm();
|
|
// }
|
|
// POWERMATT->setPos(-5485);
|
|
// gtPid.Kp = POWERMATT->pidP;
|
|
// gtPid.SetValue = POWERMATT->dstPower;
|
|
IPGLASER->getIPGLaerPara("IPGLaser");
|
|
if (IPGLASER->m_hComm == nullptr)
|
|
{
|
|
IPGLASER->OpenComm();
|
|
IPGLASER->SetParam(1);
|
|
}
|
|
|
|
HeartBeat();
|
|
HeartBeat_fl();
|
|
ReadApValue();
|
|
//PID_proc();
|
|
ui->grpCuHeightFind->setHidden(true);
|
|
connect(DEV,SIGNAL(PowerMeterValueSGL(float,float)),this,SLOT(updatePowerMeterValue(float,float)));
|
|
}
|
|
|
|
|
|
SerialDeviceTest::~SerialDeviceTest()
|
|
{
|
|
delete ui;
|
|
}
|
|
void SerialDeviceTest::updatePowerMeterValue(float value,float average_value)
|
|
{
|
|
QString strValue = QString::number(static_cast<double>(value),'f', 3) + " " + QString::number(static_cast<double>(average_value),'f', 3);
|
|
ui->lbPowerValue->setText(strValue);
|
|
}
|
|
|
|
|
|
void SerialDeviceTest::on_pbPowerRead_clicked()
|
|
{
|
|
float value = 0;
|
|
if (ui->cmbPowerMeterID->currentText() == "加工功率计")
|
|
{
|
|
// if (POWERMETERMACH->m_hComm == nullptr)
|
|
// {
|
|
// POWERMETERMACH->getSerialSet("jiagonggonglvji");
|
|
// bool ret = POWERMETERMACH->OpenComm();
|
|
// if (!ret)
|
|
// {
|
|
// showExceptionInfoDialog("加工功率计串口打开错误!");
|
|
// DEVICE_INFO->printDeviceSystemInfo("加工功率计串口打开错误!");
|
|
// return;
|
|
// }
|
|
|
|
// }
|
|
// int ret = POWERMETERMACH->GetValue(&value);
|
|
// if (ret != 0)
|
|
// {
|
|
// showExceptionInfoDialog("加工功率计数据读取失败!");
|
|
// DEVICE_INFO->printDeviceSystemInfo("加工功率计数据读取失败!");
|
|
// return;
|
|
// }
|
|
// POWERMETERMACH->CloseComm();
|
|
bReadApFlag = true;
|
|
}
|
|
if (ui->cmbPowerMeterID->currentText() == "光路功率计")
|
|
{
|
|
if (POWERMETERLIGHT->m_hComm == nullptr)
|
|
{
|
|
POWERMETERLIGHT->getSerialSet("guanglugonglvji");
|
|
bool ret = POWERMETERLIGHT->OpenComm();
|
|
if (!ret)
|
|
{
|
|
showExceptionInfoDialog("光路功率计串口打开错误!");
|
|
DEVICE_INFO->printDeviceSystemInfo("光路功率计串口打开错误!");
|
|
return;
|
|
}
|
|
|
|
}
|
|
int ret = POWERMETERLIGHT->GetValue(&value);
|
|
if (ret != 0)
|
|
{
|
|
showExceptionInfoDialog("光路功率计数据读取失败!");
|
|
DEVICE_INFO->printDeviceSystemInfo("光路功率计数据读取失败!");
|
|
return;
|
|
}
|
|
}
|
|
QString strValue = QString::number(static_cast<double>(value),'f', 4);
|
|
ui->lbPowerValue->setText(strValue);
|
|
}
|
|
|
|
void SerialDeviceTest::on_pbBarometer_clicked()
|
|
{
|
|
short value = 0;
|
|
if (BAROMETER->m_hComm == nullptr)
|
|
{
|
|
BAROMETER->getSerialSet("barometer");
|
|
bool ret = BAROMETER->OpenComm();
|
|
if (!ret)
|
|
{
|
|
showExceptionInfoDialog("气压计串口打开错误!");
|
|
DEVICE_INFO->printDeviceSystemInfo("气压计串口打开错误!");
|
|
return;
|
|
}
|
|
}
|
|
int ret = BAROMETER->GetHeightValue(18,1,&value);
|
|
if (ret != 0)
|
|
{
|
|
showExceptionInfoDialog("气压计数据读取失败!");
|
|
DEVICE_INFO->printDeviceSystemInfo("气压计数据读取失败!");
|
|
return;
|
|
}
|
|
double tmp = value / 10.0;
|
|
QString strValue = QString::number(tmp,'f', 4);
|
|
ui->lbBarometer->setText(strValue+ " Kpa");
|
|
}
|
|
|
|
void SerialDeviceTest::on_pbCuHeightFind_clicked()
|
|
{
|
|
double value = 0;
|
|
if (PANHEIGHTFIND->m_hComm == nullptr)
|
|
{
|
|
PANHEIGHTFIND->getSerialSet("cucegaotou");
|
|
bool ret = PANHEIGHTFIND->OpenComm();
|
|
if (!ret)
|
|
{
|
|
showExceptionInfoDialog("粗测高头串口打开错误!");
|
|
return;
|
|
}
|
|
}
|
|
int ret = PANHEIGHTFIND->GetHeightValue(1,&value);
|
|
if (ret != 0)
|
|
{
|
|
showExceptionInfoDialog("粗测高头数据读取失败!");
|
|
return;
|
|
}
|
|
|
|
QString strValue = QString::number(value,'f', 4);
|
|
ui->lbCuHeightFind->setText(strValue);
|
|
}
|
|
void SerialDeviceTest::showExceptionInfoDialog(const QString& text,QMessageBox::Icon value)
|
|
{
|
|
QMessageBox msg(this);
|
|
DEVICE_INFO->printDeviceSalamInfo(text);
|
|
msg.setWindowTitle("异常提示");
|
|
msg.setText(text);
|
|
msg.setIcon(value);
|
|
msg.exec();
|
|
return;
|
|
}
|
|
float PID_increment(float temp_val)
|
|
{
|
|
/*传入目标值*/
|
|
gtPid.ActualValue = temp_val;
|
|
/*计算目标值与实际值的误差*/
|
|
gtPid.err = (gtPid.SetValue - gtPid.ActualValue);
|
|
if (fabs(gtPid.err) < 0.001)
|
|
{
|
|
return 0;
|
|
}
|
|
/*PID算法实现*/
|
|
//float increment_val = gtPid.Kp*(gtPid.err - gtPid.err_next) + gtPid.Ki*gtPid.err + gtPid.Kd*(gtPid.err - 2 * gtPid.err_next + gtPid.err_last);
|
|
/*累加*/
|
|
/*传递误差*/
|
|
gtPid.err_last = gtPid.err_next;
|
|
gtPid.err_next = gtPid.err;
|
|
/*返回当前实际值*/
|
|
//return increment_val;
|
|
return gtPid.err * gtPid.Kp;
|
|
}
|
|
int writepidfile(QString strFileName, float power,int pos,float apValue)
|
|
{
|
|
QFile filePid(strFileName);
|
|
|
|
if(filePid.open(QFile::WriteOnly|QFile::Append))
|
|
{
|
|
QTextStream filePidOut(&filePid);
|
|
|
|
filePidOut << power<<","<<pos<<","<<apValue;
|
|
filePidOut << "\n";
|
|
|
|
}
|
|
|
|
filePid.close();
|
|
}
|
|
|
|
|
|
int writePowerfile(QString strFileName, float powerP1,float powerP2)
|
|
{
|
|
QFile filePid(strFileName);
|
|
|
|
QDateTime datetime = QDateTime::currentDateTime();
|
|
QString timestr = datetime.toString("yyyy-MM-dd HH:mm:ss");
|
|
if(filePid.open(QFile::WriteOnly|QFile::Append))
|
|
{
|
|
QTextStream filePidOut(&filePid);
|
|
|
|
filePidOut << timestr<<","<<powerP1<<","<<powerP2;
|
|
filePidOut << "\n";
|
|
}
|
|
filePid.close();
|
|
}
|
|
//void myPidProc()
|
|
//{
|
|
|
|
// int ret;
|
|
// float power = 0;
|
|
// float ApValue;
|
|
// int count = 0;
|
|
// int sts;
|
|
// QString filename;
|
|
// QDateTime datetime = QDateTime::currentDateTime();
|
|
// QString timestr = datetime.toString("ddHHmmzzz");
|
|
|
|
// RS_SETTINGS->beginGroup("device/SSCS");
|
|
// QString path = RS_SETTINGS->readEntry("/dataSavePath");
|
|
// RS_SETTINGS->endGroup();
|
|
|
|
// if(path.right(1)!=QString("/"))
|
|
// {
|
|
// path+=QString("/");
|
|
// }
|
|
// filename = path+"LookupTable_"+timestr+"_pid.csv";
|
|
|
|
|
|
// while (1)
|
|
// {
|
|
// if ((DEV->PidFlag) && (DEV->devLaserState == 1))
|
|
// {
|
|
// count++;
|
|
// if (count > 2)
|
|
// {
|
|
// ret = POWERMATT->GetSts(&sts);
|
|
// if (sts == 0)
|
|
// {
|
|
|
|
// POWERMETERLIGHT->GetValue(&power);
|
|
|
|
// if (power > 0.05)
|
|
// {
|
|
// ApValue = PID_increment(power);
|
|
// int pos;
|
|
// POWERMATT->GetPos(&pos);
|
|
// writepidfile(filename, power,pos,ApValue);
|
|
// if(fabs((pos + 5485) / 5485) > 0.2)
|
|
// {
|
|
// POWERMATT->setPos(-5485);
|
|
// }
|
|
// else
|
|
// POWERMATT->setRPos(ApValue);
|
|
// }
|
|
// else
|
|
// {
|
|
// count = 0;
|
|
// }
|
|
|
|
|
|
// }
|
|
// }
|
|
|
|
// Sleep(5000);
|
|
|
|
|
|
// }
|
|
// else
|
|
// {
|
|
// count = 0;
|
|
// Sleep(200);
|
|
// }
|
|
|
|
// }
|
|
//}
|
|
#include "deviceproxy.h"
|
|
void myReadPowerValue()
|
|
{
|
|
|
|
float power = 0;
|
|
float powerP2 = 0;
|
|
|
|
QString filename;
|
|
QDateTime datetime = QDateTime::currentDateTime();
|
|
QString timestr = datetime.toString("yyyyMMddHHmmss");
|
|
//QString timestr = datetime.toString("ddHHmmzzz");
|
|
|
|
RS_SETTINGS->beginGroup("device/SSCS");
|
|
QString path = RS_SETTINGS->readEntry("/dataSavePath");
|
|
RS_SETTINGS->endGroup();
|
|
|
|
if(path.right(1)!=QString("/"))
|
|
{
|
|
path+=QString("/");
|
|
}
|
|
filename = path+DEV->ingotNumber+"_LookupTable_"+timestr+"_laser_test.csv";
|
|
|
|
RS_SETTINGS->beginGroup("device/Rposition");
|
|
double p1k = RS_SETTINGS->readNumDEntry("/p1k");
|
|
double p1b = RS_SETTINGS->readNumDEntry("/p1b");
|
|
RS_SETTINGS->endGroup();
|
|
|
|
RS_SETTINGS->beginGroup("device/SSCS");
|
|
double PowerThreshold = RS_SETTINGS->readNumDEntry("/PowerThreshold");
|
|
RS_SETTINGS->endGroup();
|
|
|
|
unsigned int checkCount = 0;
|
|
while (1)
|
|
{
|
|
if ((DEV->PidFlag) && (DEV->devLaserState == 1) && (DEV->devLaserCheck))
|
|
{
|
|
if (checkCount > 6)
|
|
{
|
|
POWERMETERLIGHT->GetValue(&power);
|
|
if (DEV->LaserApValueP1 > 0.005)
|
|
{
|
|
double piancha = (DEV->ApPercentage*p1k + p1b - power) / (DEV->ApPercentage*p1k + p1b) * 100;//lihongchang
|
|
if ((abs(piancha) > PowerThreshold))
|
|
//if (DEV->PidFlag) 这里自动调节?还是报警。调节范围是多少?这里要记录成文件。怎么调节,调节要关激光的!?下一次调节?
|
|
{
|
|
|
|
emit DEV->AutoExceptSGL(MyException(QString("P1光路异常 ")+ QString::number(piancha,'f', 3)+QString(",是否停止当前加工激光偏差提示?")));
|
|
|
|
if (DEV->DataCheckFlag)
|
|
{
|
|
DEV->devLaserCheck = false;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
checkCount++;
|
|
Sleep(5000);
|
|
|
|
|
|
}
|
|
else
|
|
{
|
|
Sleep(200);
|
|
checkCount = 0;
|
|
}
|
|
|
|
}
|
|
}
|
|
|
|
|
|
void myPidProc()
|
|
{
|
|
|
|
float power = 0;
|
|
float powerP2 = 0;
|
|
|
|
QString filename;
|
|
QDateTime datetime = QDateTime::currentDateTime();
|
|
QString timestr = datetime.toString("yyyyMMddHHmmss");
|
|
//QString timestr = datetime.toString("ddHHmmzzz");
|
|
|
|
RS_SETTINGS->beginGroup("device/SSCS");
|
|
QString path = RS_SETTINGS->readEntry("/dataSavePath");
|
|
RS_SETTINGS->endGroup();
|
|
|
|
if(path.right(1)!=QString("/"))
|
|
{
|
|
path+=QString("/");
|
|
}
|
|
filename = path+DEV->ingotNumber+"_LookupTable_"+timestr+"_laser_test.csv";
|
|
|
|
RS_SETTINGS->beginGroup("device/Rposition");
|
|
double p1kt = RS_SETTINGS->readNumDEntry("/p1k_t");
|
|
double p1bt = RS_SETTINGS->readNumDEntry("/p1b_t");
|
|
double p1ks = RS_SETTINGS->readNumDEntry("/p1k_s");
|
|
double p1bs = RS_SETTINGS->readNumDEntry("/p1b_s");
|
|
RS_SETTINGS->endGroup();
|
|
|
|
RS_SETTINGS->beginGroup("device/SSCS");
|
|
double PowerThreshold = RS_SETTINGS->readNumDEntry("/PowerThreshold");
|
|
RS_SETTINGS->endGroup();
|
|
|
|
unsigned int checkCount = 0;
|
|
while (1)
|
|
{
|
|
if ((DEV->PidFlag) && (DEV->devLaserState == 1) && (DEV->devLaserCheck))
|
|
{
|
|
if (checkCount > 6)
|
|
{
|
|
POWERMETERLIGHT->GetValue(&power);
|
|
if (DEV->LaserApValueP1 > 0.005)
|
|
{
|
|
double piancha;
|
|
|
|
if (DEV->Mach_T_S_flag == 1)
|
|
{
|
|
power = p1kt * power + p1bt;
|
|
piancha = abs((DEV->R_detection_pt - power) * 100);//lihongchang
|
|
}
|
|
else
|
|
{
|
|
power = p1ks * power + p1bs;
|
|
piancha = abs((DEV->R_detection_ps - power) * 100);//lihongchang
|
|
}
|
|
|
|
|
|
if ((abs(piancha) > PowerThreshold))
|
|
//if (DEV->PidFlag) 这里自动调节?还是报警。调节范围是多少?这里要记录成文件。怎么调节,调节要关激光的!?下一次调节?
|
|
{
|
|
|
|
emit DEV->AutoExceptSGL(MyException(QString("P1光路异常 ")+ QString::number(piancha,'f', 3)+QString(",是否停止当前加工激光偏差提示?")));
|
|
|
|
if (DEV->DataCheckFlag)
|
|
{
|
|
DEV->devLaserCheck = false;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
checkCount++;
|
|
Sleep(5000);
|
|
|
|
|
|
}
|
|
else
|
|
{
|
|
Sleep(200);
|
|
checkCount = 0;
|
|
}
|
|
|
|
|
|
// if ((DEV->PidFlag) && (DEV->devLaserState == 1) && (DEV->devLaserCheck))
|
|
// {
|
|
// //if (checkCount > 2)
|
|
// {
|
|
// POWERMETERMACH->GetValue(&powerP2);
|
|
// POWERMETERLIGHT->GetValue(&power);
|
|
// writePowerfile(filename, power,powerP2);
|
|
// }
|
|
// checkCount++;
|
|
// Sleep(2000);
|
|
|
|
|
|
// }
|
|
// else
|
|
// {
|
|
// Sleep(2000);
|
|
// checkCount = 0;
|
|
// }
|
|
|
|
}
|
|
}
|
|
|
|
int readPowerValueThread()
|
|
{
|
|
float value = 0;
|
|
float average_value = 0;
|
|
float average[10];
|
|
int index = 0;
|
|
while(1)
|
|
{
|
|
if (bReadApFlag)
|
|
{
|
|
if (POWERMETERMACH->m_hComm == nullptr)
|
|
{
|
|
POWERMETERMACH->getSerialSet("jiagonggonglvji");
|
|
bool ret = POWERMETERMACH->OpenComm();
|
|
if (!ret)
|
|
{
|
|
DEVICE_INFO->printDeviceSystemInfo("加工功率计串口打开错误!");
|
|
emit DEV->AutoExceptSGL(MyException(QString("加工功率计串口打开错误, ")+QString(",是否停止当前功率计读取?")));
|
|
|
|
if (DEV->DataCheckFlag)
|
|
{
|
|
bReadApFlag = false;
|
|
}
|
|
}
|
|
|
|
}
|
|
int ret = POWERMETERMACH->GetValue(&value);
|
|
if (ret != 0)
|
|
{
|
|
DEVICE_INFO->printDeviceSystemInfo("加工功率计数据读取失败!");
|
|
emit DEV->AutoExceptSGL(MyException(QString("加工功率计数据读取失败, ")+QString(",是否停止当前功率计读取?")));
|
|
|
|
if (DEV->DataCheckFlag)
|
|
{
|
|
bReadApFlag = false;
|
|
}
|
|
//return -1;
|
|
}
|
|
average[index] = value;
|
|
index++;
|
|
if (index >= 10) index = 0;
|
|
average_value = 0;
|
|
for (int i=0;i<10;i++)
|
|
{
|
|
average_value = average_value + average[i];
|
|
}
|
|
average_value = average_value / 10;
|
|
emit DEV->PowerMeterValueSGL(value,average_value);
|
|
|
|
}
|
|
else
|
|
{
|
|
memset(average,0,10*4);
|
|
index = 0;
|
|
}
|
|
|
|
Sleep(500);
|
|
}
|
|
|
|
|
|
}
|
|
|
|
void myHeartBeat()
|
|
{
|
|
MODBUSTCP->Heartbeat();
|
|
}
|
|
void myReadApValue()
|
|
{
|
|
readPowerValueThread();
|
|
}
|
|
|
|
void myHeartBeat_fl()
|
|
{
|
|
MODBUSTCP->Heartbeat_fl();
|
|
}
|
|
|
|
void SerialDeviceTest::readPowerValue()
|
|
{
|
|
//HeartBeat();
|
|
CreateThread(nullptr,
|
|
0,
|
|
(LPTHREAD_START_ROUTINE)myReadPowerValue,
|
|
this,
|
|
0,
|
|
NULL);
|
|
}
|
|
void SerialDeviceTest::PID_proc()
|
|
{
|
|
//HeartBeat();
|
|
CreateThread(nullptr,
|
|
0,
|
|
(LPTHREAD_START_ROUTINE)myPidProc,
|
|
this,
|
|
0,
|
|
NULL);
|
|
}
|
|
void SerialDeviceTest::HeartBeat()
|
|
{
|
|
//HeartBeat();
|
|
CreateThread(nullptr,
|
|
0,
|
|
(LPTHREAD_START_ROUTINE)myHeartBeat,
|
|
this,
|
|
0,
|
|
NULL);
|
|
}
|
|
void SerialDeviceTest::ReadApValue()
|
|
{
|
|
//HeartBeat();
|
|
CreateThread(nullptr,
|
|
0,
|
|
(LPTHREAD_START_ROUTINE)myReadApValue,
|
|
this,
|
|
0,
|
|
NULL);
|
|
}
|
|
void SerialDeviceTest::HeartBeat_fl()
|
|
{
|
|
//HeartBeat();
|
|
CreateThread(nullptr,
|
|
0,
|
|
(LPTHREAD_START_ROUTINE)myHeartBeat_fl,
|
|
this,
|
|
0,
|
|
NULL);
|
|
}
|
|
|
|
void ShangProc()
|
|
{
|
|
int ret;
|
|
// if (MODBUSTCP->TransferPLCSts != 0)
|
|
// {
|
|
// DEVICE_INFO->printDeviceSystemInfo("横移模块已在上下料中,上料失败!");
|
|
// DEV->lastTaskIsFinish= true;
|
|
// DEV->ShangLiaoFSGL(false);
|
|
// return;
|
|
// }
|
|
DEVICE_INFO->printDeviceSystemInfo("上料开始...");
|
|
if(1)
|
|
{
|
|
ret = DEV->ShangProc();
|
|
}
|
|
if (ret == 0)
|
|
{
|
|
DEVICE_INFO->printDeviceSystemInfo("上料完成");
|
|
DEV->ShangLiaoFSGL(true);
|
|
|
|
}
|
|
else
|
|
{
|
|
DEVICE_INFO->printDeviceSystemInfo("上料失败!");
|
|
DEV->ShangLiaoFSGL(false);
|
|
}
|
|
DEV->lastTaskIsFinish= true;
|
|
return;
|
|
}
|
|
void XiaProc()
|
|
{
|
|
int ret;
|
|
// if (MODBUSTCP->TransferPLCSts != 0)
|
|
// {
|
|
// DEVICE_INFO->printDeviceSystemInfo("横移模块已在上下料中,下料失败!");
|
|
// DEV->XiaLiaoFSGL(false);
|
|
// DEV->lastTaskIsFinish= true;
|
|
// return;
|
|
// }
|
|
DEVICE_INFO->printDeviceSystemInfo("下料开始...");
|
|
if(1)
|
|
{
|
|
ret = DEV->XiaProc();
|
|
}
|
|
if (ret == 0)
|
|
{
|
|
DEVICE_INFO->printDeviceSystemInfo("下料完成");
|
|
DEV->XiaLiaoFSGL(true);
|
|
}
|
|
else
|
|
{
|
|
DEV->XiaLiaoFSGL(false);
|
|
DEVICE_INFO->printDeviceSystemInfo("下料失败!");
|
|
}
|
|
|
|
DEV->lastTaskIsFinish= true;
|
|
return;
|
|
}
|
|
void SerialDeviceTest::on_pbXiaLiao_clicked()
|
|
{
|
|
DWORD ThreadID;
|
|
HANDLE thrdHandle;
|
|
if(!DEV->getDevIsReset())
|
|
{
|
|
DEV->emit exceptSGL(MyException(QString("设备未初始化,未复位,无法执行寻边定位。请先完成复位。"),MY_WARN));
|
|
return;
|
|
}
|
|
if(!DEV->getLastTaskIsFinish())
|
|
{
|
|
DEV->emit exceptSGL(MyException(QString("任务执行中,无法执行寻边定位。请先停止运动或等待任务结束。"),MY_WARN));
|
|
return;
|
|
}
|
|
if(DEV->bRunning)
|
|
{
|
|
DEV->emit exceptSGL(MyException(QString("自动运行执行中,请等待运行结束。"),MY_WARN));
|
|
return;
|
|
}
|
|
DEV->lastTaskIsFinish=false;
|
|
DEV->lastTaskName="下料";
|
|
thrdHandle = CreateThread(nullptr,
|
|
0,
|
|
(LPTHREAD_START_ROUTINE)XiaProc,
|
|
this,
|
|
0,
|
|
&ThreadID);
|
|
}
|
|
|
|
void SerialDeviceTest::on_pbShangLiao_clicked()
|
|
{
|
|
DWORD ThreadID;
|
|
HANDLE thrdHandle;
|
|
//这里是不是应该先运行到上下料位?
|
|
if(!DEV->getDevIsReset())
|
|
{
|
|
DEV->emit exceptSGL(MyException(QString("设备未初始化,未复位,无法执行寻边定位。请先完成复位。"),MY_WARN));
|
|
return;
|
|
}
|
|
if(!DEV->getLastTaskIsFinish())
|
|
{
|
|
DEV->emit exceptSGL(MyException(QString("任务执行中,无法执行寻边定位。请先停止运动或等待任务结束。"),MY_WARN));
|
|
return;
|
|
}
|
|
if(DEV->bRunning)
|
|
{
|
|
DEV->emit exceptSGL(MyException(QString("自动运行执行中,请等待运行结束。"),MY_WARN));
|
|
return;
|
|
}
|
|
DEV->lastTaskIsFinish=false;
|
|
DEV->lastTaskName="上料";
|
|
thrdHandle = CreateThread(nullptr,
|
|
0,
|
|
(LPTHREAD_START_ROUTINE)ShangProc,
|
|
this,
|
|
0,
|
|
&ThreadID);
|
|
}
|
|
|
|
void SerialDeviceTest::on_spBrightness_valueChanged(int value)
|
|
{
|
|
if (ui->cmbCameraID->currentIndex() == 0)
|
|
{
|
|
RS_SETTINGS->beginGroup("device/LightSource");
|
|
RS_SETTINGS->writeEntry("/brightnessFind", value);
|
|
RS_SETTINGS->endGroup();
|
|
DEVICE_INFO->printDeviceSystemInfo(QString("相机亮度设置完成,当前亮度为:%1/s").arg(value));
|
|
}
|
|
else
|
|
{
|
|
RS_SETTINGS->beginGroup("device/LightSource");
|
|
RS_SETTINGS->writeEntry("/brightnessGlobal", value);
|
|
RS_SETTINGS->endGroup();
|
|
DEVICE_INFO->printDeviceSystemInfo(QString("相机亮度设置完成,当前亮度为:%1/s").arg(value));
|
|
}
|
|
|
|
}
|
|
|
|
void SerialDeviceTest::on_cmbCameraID_currentIndexChanged(int index)
|
|
{
|
|
int brightness;
|
|
//int Strobe;
|
|
if (index == 0)
|
|
{
|
|
RS_SETTINGS->beginGroup("device/LightSource");
|
|
brightness = RS_SETTINGS->readNumEntry("/brightnessFind");
|
|
//Strobe = RS_SETTINGS->readNumEntry("/StrobeFind");
|
|
RS_SETTINGS->endGroup();
|
|
|
|
}
|
|
else
|
|
{
|
|
RS_SETTINGS->beginGroup("device/LightSource");
|
|
brightness = RS_SETTINGS->readNumEntry("/brightnessGlobal");
|
|
//Strobe = RS_SETTINGS->readNumEntry("/StrobeGlobal");
|
|
RS_SETTINGS->endGroup();
|
|
}
|
|
ui->spBrightness->setValue(brightness);
|
|
//ui->spStrobe->setValue(Strobe);
|
|
}
|
|
|
|
|
|
|
|
void SerialDeviceTest::on_pbBrightness_clicked()
|
|
{
|
|
if (LIGHTSOURCEFIND->m_hComm == nullptr)
|
|
{
|
|
bool ret = LIGHTSOURCEFIND->OpenComm();
|
|
if (!ret)
|
|
{
|
|
showExceptionInfoDialog("光源串口打开错误!");
|
|
DEVICE_INFO->printDeviceSystemInfo("光源串口打开错误!");
|
|
return;
|
|
}
|
|
}
|
|
|
|
int ret = LIGHTSOURCEFIND->LightOn(ui->cmbCameraID->currentIndex()+1);
|
|
if (ret != 0)
|
|
{
|
|
showExceptionInfoDialog("光源打开失败!");
|
|
DEVICE_INFO->printDeviceSystemInfo("光源打开失败!");
|
|
return;
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
void SerialDeviceTest::on_pbLightOff_clicked()
|
|
{
|
|
if (LIGHTSOURCEFIND->m_hComm == nullptr)
|
|
{
|
|
bool ret = LIGHTSOURCEFIND->OpenComm();
|
|
if (!ret)
|
|
{
|
|
showExceptionInfoDialog("光源串口打开错误!");
|
|
DEVICE_INFO->printDeviceSystemInfo("光源串口打开错误!");
|
|
return;
|
|
}
|
|
}
|
|
|
|
int ret = LIGHTSOURCEFIND->LightOff(ui->cmbCameraID->currentIndex()+1);
|
|
if (ret != 0)
|
|
{
|
|
showExceptionInfoDialog("光源关闭失败!");
|
|
DEVICE_INFO->printDeviceSystemInfo("光源关闭失败!");
|
|
return;
|
|
}
|
|
}
|
|
|
|
void SerialDeviceTest::on_spBrightness_editingFinished()
|
|
{
|
|
if(!ui->spBrightness->hasFocus()) return;
|
|
// ui->spBrightness->text();
|
|
// int value = ui->spBrightness->text().toInt();
|
|
if (LIGHTSOURCEFIND->m_hComm == nullptr)
|
|
{
|
|
bool ret = LIGHTSOURCEFIND->OpenComm();
|
|
if (!ret)
|
|
{
|
|
showExceptionInfoDialog("光源串口打开错误!");
|
|
DEVICE_INFO->printDeviceSystemInfo("光源串口打开错误!");
|
|
return;
|
|
}
|
|
}
|
|
|
|
int ret = LIGHTSOURCEFIND->LightOn(ui->cmbCameraID->currentIndex()+1);
|
|
if (ret != 0)
|
|
{
|
|
showExceptionInfoDialog("光源打开失败!");
|
|
DEVICE_INFO->printDeviceSystemInfo("光源打开失败!");
|
|
return;
|
|
}
|
|
}
|
|
|
|
void SerialDeviceTest::on_pbStopRead_clicked()
|
|
{
|
|
bReadApFlag = false;
|
|
}
|
|
|
|
void SerialDeviceTest::on_cmbPowerMeterID_currentTextChanged(const QString &arg1)
|
|
{
|
|
if (ui->cmbPowerMeterID->currentText() == "光路功率计")
|
|
{
|
|
bReadApFlag = false;
|
|
}
|
|
}
|