Quilting-lw/mctype/mainwidgetfunction.cpp
2026-01-23 16:37:18 +08:00

5568 lines
173 KiB
C++
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#include "mainwidgetfunction.h"
MainWidgetFunction::MainWidgetFunction(QObject *parent) :
QObject(parent),
m_pPromptDlg(NULL),
m_pSystemManageDlg(NULL),
m_pDebugInfoDlg(NULL)
{
initialize();
initializeLotData();//初始化物联网数据
m_pPromptDlg = new PromptDialog();
m_pPromptDlg->hide();
connect(m_pPromptDlg, SIGNAL(siSpindleAction(int)),this, SLOT(slotSpindleAction(int)));
connect(m_pPromptDlg, SIGNAL(siSpindleRotate(int)),this, SLOT(slotSpindleRotate(int)));
connect(m_pPromptDlg, SIGNAL(siRotateRotate(int)),this, SLOT(slotRotateRotate(int)));
connect(m_pPromptDlg, SIGNAL(siAutoPull(int)),this, SLOT(slotAutoPull(int)));
connect(m_pPromptDlg, SIGNAL(siSpindleTime(int,int)),this, SLOT(slotSpindleResearch(int,int)));
connect(m_pPromptDlg, SIGNAL(siUpdataCancel()),g_pMachine, SLOT(breakFileTrans()));
connect(g_pMachine, SIGNAL(siTransProgress(u8,int,int)),this, SLOT(slotTransProgress(u8,int,int)));//升级主控进度条
// connect(g_pLotMachine,SIGNAL(siConnectToMqtt()),this,SLOT(slotSendJsonToMqtt()));
connect(g_pLotMachine,SIGNAL(siRunLotDataAction(QString)),this,SLOT(slotRunLotDataAction(QString)));
//机器信息改变
connect(g_pMachine, SIGNAL(siMcInfoChange()), this, SLOT(slotMCInfoChange()));
//接收物联数据
// connect(g_pMachine, SIGNAL(siReceiveLotData()), this, SLOT(slotReceiveLotData()));
//物联网
QTimer* pLotTimer = new QTimer(this);
connect(pLotTimer, SIGNAL(timeout()), this, SLOT(slotReceiveLotData()));
pLotTimer->setInterval(5000);
pLotTimer->start();
m_shuttleDlg = new shuttlebottomlineDialog();
m_shuttleDlg->hide();
m_pSystemManageDlg = new SystemManageDialog();
connect(m_pSystemManageDlg,SIGNAL(siClearProductStatis()),this,SLOT(slotClearProductStatis()));
connect(m_pSystemManageDlg,SIGNAL(siCsvExport(int)),this,SLOT(slotCsvExport(int)));
connect(m_pSystemManageDlg,SIGNAL(siCsvChangeErro( )),this,SLOT(slotJournalError( )));
connect(m_pSystemManageDlg,SIGNAL(siCsvChangeBrea( )),this,SLOT(slotJournalBreakage( )));
connect(m_pSystemManageDlg,SIGNAL(siCsvChangeDebug( )),this,SLOT(slotCsvChangeDebug()));
connect(m_pSystemManageDlg,SIGNAL(siClearJournal()),this,SLOT(slotClearJournal()));
connect(m_pSystemManageDlg,SIGNAL(siRefreshWifiList()),this,SLOT(slotRefreshWifiList()));
connect(m_pSystemManageDlg,SIGNAL(siSetDynamicIP(QString)),this,SLOT(slotSetDynamicIP(QString)));
connect(m_pSystemManageDlg,SIGNAL(siSetStaticIP(QString,QString,QString)),this,SLOT(slotSetStaticIP(QString,QString,QString)));
m_pSystemManageDlg->hide();
m_pDebugInfoDlg = new DebugInfoDialog();
m_pDebugInfoDlg->hide();
m_pTipsTimer = new QTimer(this);
m_pTipsTimer->setInterval(14400000);//设置定时器时间间隔 4小时
connect(m_pTipsTimer, SIGNAL(timeout()), this, SLOT(onTipsTimer()));
// 测试物联网用
// connect(&timer, SIGNAL(timeout()), this, SLOT(slotReceiveLotData()));
// timer.setInterval(1000);
// timer.start();
}
MainWidgetFunction::~MainWidgetFunction()
{
if(m_pPromptDlg != NULL)
{
delete m_pPromptDlg;
}
if(m_shuttleDlg != NULL)
{
delete m_shuttleDlg;
}
if(m_pSystemManageDlg != NULL)
{
delete m_pSystemManageDlg;
}
if(m_pDebugInfoDlg != NULL)
{
delete m_pDebugInfoDlg;
}
}
void MainWidgetFunction::initialize()
{
memset(&m_mcStatus,0,sizeof(MCStatus));
m_curFileID = 1;// 当前文件ID
m_filePath.clear();
m_fileName.clear();
m_getScore = 0;
m_totalScore = 0;
initializeLotInfo();
}
void MainWidgetFunction::initializeLotInfo()
{
QDir apppath(qApp->applicationDirPath());
QString iniPath = apppath.path() + apppath.separator() + "config.ini";
QSettings setting(iniPath, QSettings::IniFormat); //QSettings能记录一些程序中的信息下次再打开时可以读取出来
m_getScore = setting.value("Progress/getScore").toInt();
QString path = apppath.path() + apppath.separator() + CSV_PROGRESS;
QFile file(path);
if(!file.open(QIODevice::ReadOnly | QIODevice::Text))
{
qDebug() << "Open CSV file failed!";
return;
}
QStringList strlist;
strlist.clear();
QTextStream out(&file);
out.setCodec("GB2312"); //支持读取中文信息
//遍历行
for(int i = 0; !out.atEnd(); i++)
{
QString strLine = out.readLine();
if(strLine.size() <= 0)
{
continue;
}
m_csvFileStrList.append(strLine);
strlist = strLine.split(",", QString::SkipEmptyParts); //根据","分隔开每行的列
if(i > 0) //第一行不执行操作
{
if (strlist.size() > COLUMN_SCORE)
{
QString code = strlist.at(COLUMN_CODE);
QStringList strlist1 = code.split("_", QString::SkipEmptyParts); //根据"_"分隔开每行的列
int type = 0;
if(strlist1.size() > 0)
{
char *buf = strdup(strlist1[1].toLatin1().data());
sscanf (buf, "%x", &type);
}
s16 score = 0;
score = strlist.at(COLUMN_SCORE).toInt();
m_totalScore += score;
}
}
}
file.close();//关闭文件
}
//初始化物联网数据
void MainWidgetFunction::initializeLotData()
{
memset(&m_mcLotData,0,sizeof(McLotData));
memset(&m_HMILotData,0,sizeof(HMILotData));
QString verStr = getVersionStr();
memcpy(m_HMILotData.HMIVerStr, verStr.data(), verStr.length()); // 版本号
u32 rackNum = g_pSettings->readFromIniFile("IOT/rackNumber").toInt();//机架号
m_HMILotData.machineNumber = rackNum; // 机架号
u16 dProgress = g_pSettings->readFromIniFile("IOT/debugProgress").toInt();//调试进度
m_HMILotData.debugProgress = dProgress; //调试进度
QString deliveryTime = g_pSettings->readFromIniFile("IOT/deliveryTime").toString();//工厂预计交货时间
QByteArray arr = deliveryTime.toLocal8Bit();
memcpy(m_HMILotData.deliveryTime, arr.data(), arr.size()); //交货日期
//电机总数-先固定写为4个如果后续变动较大可把电机个数写为全局变量或从其他cpp中传参
m_HMILotData.motorNum = 4;
QString fileName = m_fileName;
memcpy(m_HMILotData.fileName, fileName.data(), fileName.length()); // 文件名称
}
//优盘检测
QString MainWidgetFunction::detectUsb()
{
QString usbPath = "";
#ifdef Q_OS_LINUX
QDir dir(LINUXUSBPATH);
if(!dir.exists())
{
usbPath = "";
}
else
{
usbPath = LINUXUSBPATH;
}
#endif
#ifdef Q_OS_WIN
QFileInfoList list = QDir::drives();
for(int i = 0; i<list.count(); i++)
{
UINT ret = GetDriveType((WCHAR *) list.at(i).filePath().utf16());
if(ret == DRIVE_REMOVABLE)
{
usbPath = list.at(i).filePath();
break;
}
}
#endif
return usbPath;
}
s16 MainWidgetFunction::detectWifiConnect()
{
s16 value = -1;
#ifdef Q_OS_LINUX
QProcess cmd;
QString cmdStr;
cmdStr.clear();
QString strCmdOut;
strCmdOut.clear();
QStringList lineStrList;
lineStrList.clear();
cmdStr = "wpa_cli -i wlan0 status";//查询wifi连接状态
cmd.start(cmdStr);
cmd.waitForStarted();
cmd.waitForFinished();
strCmdOut=QString::fromLocal8Bit(cmd.readAllStandardOutput());
//qDebug()<<"strCmdOut"<<strCmdOut;
lineStrList = strCmdOut.split("\n", QString::SkipEmptyParts); //换行符
//qDebug()<<"lineStrList.size()"<<lineStrList.size();
for(int i = 0; i < lineStrList.size(); i++)
{
QStringList lineStr = lineStrList[i].split("=", QString::SkipEmptyParts);
if(lineStr.size() >= 2)
{
QString str1 = lineStr[0];
//qDebug()<<lineStrList[i];
if(str1.indexOf("wpa_state") != -1)
{
QString str2 = lineStr[1];
//qDebug()<<str2;
if(str2.indexOf("COMPLETED") == -1)
{
cmd.close();
value = -1;
}
}
if(str1.indexOf("ip_address") != -1)
{
cmd.close();
value = 1;
break;
}
}
}
cmd.close();
#endif
return value;
}
void MainWidgetFunction::systemUpgrade(int type)
{
QString usbPath = detectUsb();
if(usbPath.length() <= 0)
{
//优盘不存在
m_pPromptDlg->initDialog(PromptDialog::BTN_OK);
m_pPromptDlg->setTitleStr(tr("Prompt"));
QString str;
str = tr("USB flash drive is not detected!");//未检测到优盘!
m_pPromptDlg->setContentStr(str);
m_pPromptDlg->exec();
return;
}
QDir apppath(qApp->applicationDirPath());
QString targetDir = apppath.absolutePath() + apppath.separator();
QDir dir (usbPath);
dir.setFilter(QDir::Files | QDir::NoSymLinks); // 设置类型过滤器,只为文件格式
QFileInfoList fileList = dir.entryInfoList();
if(type == HMI_UPDATA)//界面升级
{
qDebug()<<"update 1";
//界面文件、语言文件、RCC资源文件、打包的AUT文件
for (int var = 0; var < fileList.size(); var++)
{
#ifdef Q_OS_WIN
if((fileList.at(var).fileName().toUpper().indexOf(APPNAME) != -1 &&
fileList.at(var).suffix().toUpper() == "EXE") ||
fileList.at(var).fileName().toUpper().indexOf(".QM") != -1 ||
fileList.at(var).fileName().toUpper().indexOf(".RCC") != -1 ||
fileList.at(var).fileName().toUpper().indexOf(".AUT") != -1)
{
m_pSystemManageDlg->addItem(fileList.at(var).fileName());
}
#endif
#ifdef Q_OS_LINUX
if((fileList.at(var).fileName().toUpper().indexOf(APPNAME) != -1 &&
fileList.at(var).suffix().toUpper().length() == 0) ||
fileList.at(var).fileName().toUpper().indexOf(".QM") != -1 ||
fileList.at(var).fileName().toUpper().indexOf(".RCC") != -1 ||
fileList.at(var).fileName().toUpper().indexOf(".AUT") != -1)
{
m_pSystemManageDlg->addItem(fileList.at(var).fileName());
}
#endif
}
qDebug()<<"update 2";
}
else if(type == BACKUPS_UPDATA)//界面还原 ---------coco
{
//界面文件、语言文件、RCC资源文件、打包的AUT文件
for (int var = 0; var < fileList.size(); var++)
{
#ifdef Q_OS_WIN
if((fileList.at(var).fileName().toUpper().indexOf(APPNAME) != -1 &&
fileList.at(var).suffix().toUpper() == "EXE") ||
fileList.at(var).fileName().toUpper().indexOf(".QM") != -1 ||
fileList.at(var).fileName().toUpper().indexOf(".RCC") != -1 ||
fileList.at(var).fileName().toUpper().indexOf(".AUT") != -1)
{
m_pSystemManageDlg->addItem(fileList.at(var).fileName());
}
#endif
#ifdef Q_OS_LINUX
if((fileList.at(var).fileName().toUpper().indexOf(APPNAME) != -1 &&
fileList.at(var).suffix().toUpper().length() == 0) ||
fileList.at(var).fileName().toUpper().indexOf(".QM") != -1 ||
fileList.at(var).fileName().toUpper().indexOf(".RCC") != -1 ||
fileList.at(var).fileName().toUpper().indexOf(".AUT") != -1)
{
m_pSystemManageDlg->addItem(fileList.at(var).fileName());
}
#endif
}
} // -------------coco
else if(type == MC_UPDATA)//主控升级
{
for (int var = 0; var < fileList.size(); var++)
{
if( fileList.at(var).suffix().toUpper() == "GNPU" || fileList.at(var).suffix().toUpper() == "GAUF" )
{
m_pSystemManageDlg->addItem(fileList.at(var).fileName());
}
}
qDebug()<<"update 3";
}
else if(type == PARA_IMPORT)//参数导入
{
QString fileSuffix = "PARADAT";
for (int var = 0; var < fileList.size(); var++)
{
if( fileList.at(var).suffix().toUpper() == fileSuffix)
{
m_pSystemManageDlg->addItem(fileList.at(var).fileName());
}
}
qDebug()<<"update 4";
}
//点击了确认按钮
if(m_pSystemManageDlg->exec(type) == 1)
{
QString fileName = m_pSystemManageDlg->getCurFile();
if(type == HMI_UPDATA)//界面升级
{
QString sPath,tPath;
#ifdef Q_OS_WIN
if(fileName.toUpper().indexOf(APPNAME) != -1 &&
fileName.toUpper().indexOf(".EXE") != -1)
{
sPath = usbPath + fileName;
tPath = targetDir + WIN_APPNAME;
// ----- coco
QString nowPath,oldPath,nPath;
nowPath = targetDir +"QUILTING.exe";
oldPath = targetDir + "version";
QDir dir(oldPath);
// 打开文件所在的路径
if(!dir.exists())
{
dir.mkdir(oldPath);//
}
//将文件复制到新建的version文件夹下
nPath = targetDir + "/" + "version" + "/" + QFileInfo(tPath).fileName();
QFile::copy( nowPath , nPath);
// 获取当前日期和时间
QDateTime currentDateTime = QDateTime::currentDateTime();
QString formattedDateTime = currentDateTime.toString("yyyyMMdd_hhmmss");
// 构造新的文件名
// QString baseName = QFileInfo(nPath).baseName();
QString newName = "QUILTING";
QString suffix = QFileInfo(nPath).suffix();
QString newFileName = newName + "_" + formattedDateTime + "." + suffix;
QString newFilePath = QFileInfo(nPath).absolutePath() + "/" + newFileName;
// 重命名文件
if (QFile::rename(nPath, newFilePath))
{
qDebug() << "File renamed successfully from" << nPath << "to" << newFilePath;
}
else
{
qDebug() << "Failed to rename file from" << nPath << "to" << newFilePath;
}
// ----- coco
qDebug()<<"HMI Update";
qDebug()<<"sPath"<<sPath;
qDebug()<<"tPath"<<tPath;
QFile::remove(tPath);
QFile::copy( sPath , tPath);
qApp->exit();
}
#endif
#ifdef Q_OS_LINUX
if(fileName.toUpper().indexOf(APPNAME) != -1 &&
fileName.toUpper().indexOf(".EXE") == -1 &&
fileName.toUpper().indexOf(".AUT") == -1)//非aut打包文件
{
sPath = usbPath + fileName;
tPath = targetDir + LINUX_APPNAME;
//--------------coco
QString nowPath,oldPath,nPath;
nowPath = targetDir + LINUX_APPNAME;
oldPath = targetDir + "version";
QDir dir(oldPath);
// 打开文件所在的路径
if(!dir.exists())
{
dir.mkdir(oldPath);//
}
//将文件复制到新建的version文件夹下
nPath = targetDir + "/" + "version" + "/" + QFileInfo(tPath).fileName();
QFile::copy( nowPath , nPath);
// 获取当前日期和时间
QDateTime currentDateTime = QDateTime::currentDateTime();
QString formattedDateTime = currentDateTime.toString("yyyyMMdd_hhmmss");
// 构造新的文件名
QString newName = "QUILTING";
QString newFileName = newName + "_" + formattedDateTime;
QString newFilePath = QFileInfo(nPath).absolutePath() + "/" + newFileName;
// 重命名文件
if (QFile::rename(nPath, newFilePath))
{
qDebug() << "File renamed successfully from" << nPath << "to" << newFilePath;
}
else
{
qDebug() << "Failed to rename file from" << nPath << "to" << newFilePath;
}
//--------------coco
qDebug()<<"HMI Update";
qDebug()<<"sPath"<<sPath;
qDebug()<<"tPath"<<tPath;
QFile::remove(tPath);
system("sync");
QFile::copy( sPath , tPath);
system("sync");
system("reboot");
qDebug()<<"reboot";
}
#endif
else if(fileName.toUpper().indexOf(".QM") != -1 )
{
//增加语言包选择日期
QString tPath;// 目标文件
if(fileName.toUpper().indexOf("LAG-ZH") != -1 ) //中文语言包 //*.qm
{
tPath = targetDir + "chinese.qm"; // 目标文件
}
else if(fileName.toUpper().indexOf("LAG-EN") != -1 ) // 英语
{
tPath = targetDir + "english.qm";
}
else if(fileName.toUpper().indexOf("LAG-ES") != -1 ) // 西班牙语
{
tPath = targetDir + "spanish.qm";
}
else if(fileName.toUpper().indexOf("LAG-TK") != -1 ) // 土耳其语
{
tPath = targetDir + "turkey.qm";
}
else if(fileName.toUpper().indexOf("LAG-RQ") != -1 ) // 葡萄牙语
{
tPath = targetDir + "portugal.qm";
}
else if(fileName.toUpper().indexOf("LAG-FR") != -1 ) // 法语
{
tPath = targetDir + "french.qm";
}
else
{
tPath = targetDir + fileName ;
}
QString sPath = usbPath + fileName ;//源文件
QString tPath1 = targetDir + "language.qm";
qDebug()<<"Language Update";
qDebug()<<"sPath"<<sPath; //sPath "F:/chinese.qm"
qDebug()<<"tPath"<<tPath; //tPath "D:/work/workQT/QUILTING/Windows/debug\\chinese.qm"
qDebug()<<"tPath1"<<tPath1; //tPath1 "D:/work/workQT/QUILTING/Windows/debug\\language.qm"
QFile::remove(tPath);
QFile::remove(tPath1);
#ifdef Q_OS_LINUX
system("sync");
#endif
QFile::copy(sPath , tPath);//sPath复制到tPath
QFile::copy(sPath , tPath1);
#ifdef Q_OS_WIN
qApp->exit();
#endif
#ifdef Q_OS_LINUX
system("sync");
system("reboot");
#endif
}
else if(fileName.toUpper().indexOf(".RCC") != -1 )
{
QString sPath = usbPath + fileName ;
QString tPath = targetDir + "nxcui.rcc";
qDebug()<<"RCC Update";
qDebug()<<"sPath"<<sPath;
qDebug()<<"tPath"<<tPath;
QFile::remove(tPath );
#ifdef Q_OS_LINUX
system("sync");
#endif
QFile::copy(sPath , tPath);
#ifdef Q_OS_WIN
qApp->exit();
#endif
#ifdef Q_OS_LINUX
system("sync");
system("reboot");
#endif
}
else if(fileName.toUpper().indexOf(".AUT") != -1)//界面打包文件(包括升级文件、语言包、RCC等)
{
QString strFile = usbPath + fileName;
QFile file(strFile);
file.open(QIODevice::ReadOnly);
QByteArray AllData = file.readAll();
HMIFileHead *fhead = (HMIFileHead*)(AllData.data());
int filenum = fhead->fileNum;
int bSize = 0;
for(int j = 0; j < filenum; j++)
{
int cSize = j*sizeof(HMIItemFileHead) + sizeof(HMIFileHead) + bSize;
HMIItemFileHead *ahead;
ahead = (HMIItemFileHead*)(AllData.data() + cSize);
QString fName = ahead->fileName;
int fileSize = ahead->fileSize;
if(fileSize <= 0)
{
return;
}
int sDataCheck = ahead->dataCheck;
cSize = cSize + sizeof(HMIItemFileHead);
QByteArray buf = AllData.mid(cSize,fileSize);
int tDataCheck = calcCheckSum32((u8*)buf.data(),fileSize);
bSize = bSize + fileSize;
//校验相同,查找相同的文件替换
if(sDataCheck == tDataCheck)
{
QString uFileName = targetDir + fName;
QFile uFile(uFileName);
QString cName = fName;
if(uFile.exists())//执行目录中存在U盘中的文件fileName
{
QString targetPath;
targetPath.clear();
#ifdef Q_OS_WIN
if(fName.toUpper().indexOf(APPNAME) != -1 &&
fName.toUpper().indexOf(".EXE") != -1)
{
targetPath = targetDir + WIN_APPNAME;
}
#endif
#ifdef Q_OS_LINUX
if(fName.toUpper().indexOf(APPNAME) != -1 &&
fName.toUpper().indexOf(".EXE") == -1)
{
targetPath = targetDir + LINUX_APPNAME;
cName = LINUX_APPNAME;
}
#endif
#if(0)
if(fName.toUpper().indexOf(APPNAME) != -1)
{
#ifdef Q_OS_WIN
targetPath = targetDir + WIN_APPNAME;
#endif
#ifdef Q_OS_LINUX
targetPath = targetDir + LINUX_APPNAME;
cName = LINUX_APPNAME;
#endif
}
#endif
else//其他文件
{
targetPath = uFileName;
}
QFile::remove(targetPath);
QFile tFile(targetPath);
if(tFile.open(QIODevice::WriteOnly) == false)
{
return;
}
tFile.write(buf);
qDebug()<<"AUT Update";
qDebug()<<"targetPath"<<targetPath;
#ifdef Q_OS_LINUX
QString str = "chmod 777 " + cName;
system(str.toLatin1());
#endif
}
else//不存在
{
QString targetPath;
targetPath.clear();
#ifdef Q_OS_WIN
if(fName.toUpper().indexOf(APPNAME) != -1 &&
fName.toUpper().indexOf(".EXE") != -1)
{
targetPath = targetDir + WIN_APPNAME;
}
#endif
#ifdef Q_OS_LINUX
if(fName.toUpper().indexOf(APPNAME) != -1 &&
fName.toUpper().indexOf(".EXE") == -1)
{
targetPath = targetDir + LINUX_APPNAME;
cName = LINUX_APPNAME;
}
#endif
#if(0)
if(fName.toUpper().indexOf(APPNAME) != -1)
{
#ifdef Q_OS_WIN
targetPath = targetDir + WIN_APPNAME;
#endif
#ifdef Q_OS_LINUX
targetPath = targetDir + LINUX_APPNAME;
cName = LINUX_APPNAME;
#endif
}
#endif
else//其他文件
{
#ifdef Q_OS_WIN
if(fName.toUpper().indexOf(APPNAME) != -1 &&
fName.toUpper().indexOf(".EXE") == -1)
{
continue;
}
#endif
#ifdef Q_OS_LINUX
if(fName.toUpper().indexOf(APPNAME) != -1 &&
fName.toUpper().indexOf(".EXE") != -1)
{
continue;
}
#endif
targetPath = uFileName;
}
QFile tFile(targetPath);
if(tFile.open(QIODevice::WriteOnly) == false)
{
return;
}
tFile.write(buf);
qDebug()<<"not exist"<<cName;
qDebug()<<"targetPath"<<targetPath;
#ifdef Q_OS_LINUX
QString str = "chmod 777 " + cName;
system(str.toLatin1());
#endif
}
}
else
{
m_pPromptDlg->initDialog(PromptDialog::BTN_OK);
m_pPromptDlg->setTitleStr(tr("Prompt"));
m_pPromptDlg->setContentStr(tr("The program is corrupted, please re-upgrade after replacing the program!")); //程序已损坏,请更换程序后重新升级!
m_pPromptDlg->exec();
return;
}
}
file.close();
#ifdef Q_OS_LINUX
qDebug()<<"reboot before";
system("sync");
system("reboot");
qDebug()<<"reboot end";
#endif
//需放在linux重启命令后面
#ifdef Q_OS_WIN
qDebug()<<"qApp->exit()";
qApp->exit();
#endif
}
else
{
//所选文件非升级文件
//文件格式错误,请重新选择!
m_pPromptDlg->initDialog(PromptDialog::BTN_OK);
m_pPromptDlg->setTitleStr(tr("Prompt"));
QString str;
str = tr("The file format is wrong, please select again!");//文件格式错误,请重新选择!
m_pPromptDlg->setContentStr(str);
m_pPromptDlg->exec();
}
}
else if(type == MC_UPDATA)//主控升级
{
if(fileName.toUpper().indexOf(".GNPU") != -1 || fileName.toUpper().indexOf(".GAUF") != -1)
{
QString uPath = usbPath + fileName;
qDebug()<<"GNPU update";
qDebug()<<"uPath"<<uPath;
AppFileHead appHead ;
memset(&appHead , 0 , sizeof(appHead));
QFile file(uPath);
u8 * pBuff = (u8 *) malloc(file.size());
qDebug() << "file.size()" << file.size();
if(file.size() <= 0)
{
//文件格式错误,请重新选择!
m_pPromptDlg->initDialog(PromptDialog::BTN_OK);
m_pPromptDlg->setTitleStr(tr("Prompt"));
QString str;
str = tr("File bytes are 0, please check the file!");//文件字节为0请检查文件!
m_pPromptDlg->setContentStr(str);
m_pPromptDlg->exec();
return;
}
file.open(QIODevice::ReadOnly);
file.read( (char *)pBuff , file.size()) ;
file.close();
int nameSize = uPath.toUtf8().size() ;
if( nameSize > 32 )
{
nameSize = 32;
}
memcpy(appHead.fileName , uPath.toUtf8().data() , nameSize);
appHead.dataSize = file.size();
appHead.dataChecksum = calcCheckSum32(pBuff , file.size());
static int nID = 0;
if( g_pMachine->isConnected() == 3)
{
g_pMachine->sendAPPFileProc(FILE_TYPE_PGM,
0,
nID++,
appHead ,
pBuff
);
}
free(pBuff);
}
}
else if(type == PARA_IMPORT)//参数导入
{
QString uPath = usbPath + fileName;
qDebug()<<"Para Import";
qDebug()<<"uPath"<<uPath;
QFile paraFile(uPath);
if(!paraFile.exists())
{
return;
}
paraFile.open(QIODevice::ReadOnly);
if(paraFile.size() != 0)
{
int readSize = 0;
// 将文件 读取成结构体
ParaFile paraFileStruct;
memset(&paraFileStruct,0,sizeof(ParaFile));
int paraSize = 0;
readSize = paraFile.read((char*)&paraFileStruct,sizeof(ParaFile));
paraSize = sizeof(ParaFile);
paraFile.close();
if(readSize != paraFile.size())
{
//文件大小不匹配,无效的参数文件
m_pPromptDlg->initDialog(PromptDialog::BTN_OK);
m_pPromptDlg->setTitleStr(tr("Prompt"));
QString str;
str = (tr("File size not match, invalid file!"));//文件大小不匹配,无效的参数文件!
m_pPromptDlg->setContentStr(str);
m_pPromptDlg->exec();
return;
}
if( readSize != paraSize)
{
//文件大小不匹配,无效的参数文件
m_pPromptDlg->initDialog(PromptDialog::BTN_OK);
m_pPromptDlg->setTitleStr(tr("Prompt"));
QString str;
str = (tr("File size not match, invalid file!"));//文件大小不匹配,无效的参数文件!
m_pPromptDlg->setContentStr(str);
m_pPromptDlg->exec();
return;
}
// 参数被正确的读取
if(
( paraFileStruct.s_head[0] == 'P' )
&& ( paraFileStruct.s_head[1] == 'A' )
&& ( paraFileStruct.s_head[2] == 'R' )
&& ( paraFileStruct.s_head[3] == 'A' )
&& ( paraFileStruct.s_type == 0 )
&& ( paraFileStruct.s_len == 4096 )
)
{
unsigned short i_crc = calcCrc16( (unsigned char *) paraFileStruct.s_para_buff , paraFileStruct.s_len);
if( paraFileStruct.s_crc != i_crc )
{
//数据校验错误,无效的参数文件
m_pPromptDlg->initDialog(PromptDialog::BTN_OK);
m_pPromptDlg->setTitleStr(tr("Prompt"));
QString str;
str = (tr("Data check error, invalid file!"));//数据校验错误,无效的参数文件!
m_pPromptDlg->setContentStr(str);
m_pPromptDlg->exec();
return;
}
//将 一个文件 拆分成两个 缓冲区
unsigned char mac_config [1024] ;
unsigned char work_config [1024] ;
unsigned char pre_mac_config [1024] ;
unsigned char pre_work_config [1024] ;
// 清空
memset( mac_config , 0 , 1024 ) ;
memset( work_config , 0 , 1024 ) ;
memset( pre_mac_config , 0 , 1024 ) ;
memset( pre_work_config , 0 , 1024 ) ;
memcpy( work_config , paraFileStruct.s_para_buff , 1024 ) ;
memcpy( mac_config , ((char*)paraFileStruct.s_para_buff) + 1024 , 1024 ) ;
memcpy( pre_mac_config , ((char*)paraFileStruct.s_para_buff) + 2048 , 1024 ) ;
memcpy( pre_work_config , ((char*)paraFileStruct.s_para_buff) + 3072 , 1024 ) ;
g_pMachine->setMcPara((ParaStruct *) mac_config);
g_pMachine->setWkPara((ParaStruct *) work_config);
g_pMachine->setMcPrePara((ParaStruct *) pre_mac_config);
g_pMachine->setWkPrePara((ParaStruct *) pre_work_config);
QString str;
m_pPromptDlg->initDialog(PromptDialog::BTN_OK);
m_pPromptDlg->setTitleStr(tr("Prompt"));
str = (tr("Parameters imported successfully!"));//参数导入成功!
m_pPromptDlg->setContentStr(str);
m_pPromptDlg->exec();
return;
}
else
{
//文件头不匹配,无效的参数文件!
m_pPromptDlg->initDialog(PromptDialog::BTN_OK);
m_pPromptDlg->setTitleStr(tr("Prompt"));
QString str;
str = (tr("File head not match, invalid file!"));//文件头不匹配,无效的参数文件!
m_pPromptDlg->setContentStr(str);
m_pPromptDlg->exec();
return;
}
}
}
}
}
// ---------coco
//备份升级
void MainWidgetFunction::systembackupUpgrade(int type)
{
QDir apppath(qApp->applicationDirPath());
QString targetDir = apppath.absolutePath() + apppath.separator();
QString localPath = targetDir + "version";
QDir dir(localPath);
// 打开文件所在的路径
if(!dir.exists())
{
dir.mkdir(localPath);//
}
dir.setFilter(QDir::Files | QDir::NoSymLinks); // 设置类型过滤器,只为文件格式
QFileInfoList fileList = dir.entryInfoList();
if(type == BACKUPS_UPDATA)//界面还原
{
for (int var = 0; var < fileList.size(); var++)
{
#ifdef Q_OS_WIN
if((fileList.at(var).fileName().toUpper().indexOf(APPNAME) != -1 &&
fileList.at(var).suffix().toUpper() == "EXE") ||
fileList.at(var).fileName().toUpper().indexOf(".QM") != -1 ||
fileList.at(var).fileName().toUpper().indexOf(".RCC") != -1 ||
fileList.at(var).fileName().toUpper().indexOf(".AUT") != -1)
{
m_pSystemManageDlg->addItem(fileList.at(var).fileName());
}
#endif
#ifdef Q_OS_LINUX
if((fileList.at(var).fileName().toUpper().indexOf(APPNAME) != -1 &&
fileList.at(var).suffix().toUpper().length() == 0) ||
fileList.at(var).fileName().toUpper().indexOf(".QM") != -1 ||
fileList.at(var).fileName().toUpper().indexOf(".RCC") != -1 ||
fileList.at(var).fileName().toUpper().indexOf(".AUT") != -1)
{
m_pSystemManageDlg->addItem(fileList.at(var).fileName());
}
#endif
}
}
//点击了确认按钮
if(m_pSystemManageDlg->exec(type) == 1)
{
QString fileName = m_pSystemManageDlg->getCurFile();
QString nowPath,oldPath,newPath;
if(type == BACKUPS_UPDATA)//界面还原
{
#ifdef Q_OS_WIN
if(fileName.toUpper().indexOf(APPNAME) != -1 &&
fileName.toUpper().indexOf(".EXE") != -1)
{
nowPath = targetDir + "QUILTING.exe";
oldPath = targetDir + "/" + "version" + "/" + fileName;
newPath = targetDir + fileName;
QFile::remove(nowPath);
QFile::copy(oldPath , newPath);//
// 构造新的文件名
QString newName = "QUILTING1"; //为做区分多加一个1
QString suffix = QFileInfo(newPath).suffix();
QString newFileName = newName + "." + suffix;
QString newFilePath = QFileInfo(newPath).absolutePath() + "/" + newFileName;
// 重命名文件
if (QFile::rename(newPath, newFilePath))
{
qDebug() << "File renamed successfully from" << newPath << "to" << newFilePath;
}
else
{
qDebug() << "Failed to rename file from" << newPath << "to" << newFilePath;
}
qApp->exit();
}
#endif
#ifdef Q_OS_LINUX
if(fileName.toUpper().indexOf(APPNAME) != -1 &&
QFileInfo(fileName).suffix().length() == 0)
{
nowPath = targetDir + LINUX_APPNAME;
oldPath = targetDir + "/" + "version" + "/" + fileName;
newPath = targetDir + fileName;
QFile::remove(nowPath);
system("sync");
QFile::copy(oldPath , newPath);//
system("sync");
// 构造新的文件名
QString newName = "OPRT_CP"; //
QString newFilePath = QFileInfo(newPath).absolutePath() + "/" + newName;
// 重命名文件
if (QFile::rename(newPath, newFilePath))
{
qDebug() << "File renamed successfully from" << newPath << "to" << newFilePath;
}
else
{
qDebug() << "Failed to rename file from" << newPath << "to" << newFilePath;
}
system("reboot");
qDebug()<<"reboot";
}
#endif
}
}
}
// -------coco window上原来的exe,在remove函数下无法移除,Linux没问题
s16 MainWidgetFunction::refreshWifiList(QStringList &wifiStrList,s16 scan)
{
if(scan == 0){}//为了去掉编译警告
wifiStrList.clear();
QProcess cmd;
QString cmdStr;
cmdStr.clear();
QString strCmdOut;
strCmdOut.clear();
QStringList lineStrList;
lineStrList.clear();
m_pPromptDlg->initDialog(PromptDialog::BTN_OK);
m_pPromptDlg->setTitleStr(tr("Prompt"));
#ifdef Q_OS_LINUX
cmdStr = "ifconfig";//查看wlan0初始化是否成功
cmd.start(cmdStr);
cmd.waitForStarted();
cmd.waitForFinished();
strCmdOut=QString::fromLocal8Bit(cmd.readAllStandardOutput());
lineStrList = strCmdOut.split("\n", QString::SkipEmptyParts); //换行符
int initFlag = 0;
for(int i = 0; i < lineStrList.size(); i++)
{
QString lineStr = lineStrList[i];
if(lineStr.indexOf("wlan0") != -1)
{
initFlag = 1;
break;
}
}
if(initFlag == 0)
{
m_pPromptDlg->setContentStr(tr("Failed to initialize wlan0!"));//初始化wlan0失败
m_pPromptDlg->exec();
return -1;
}
if(scan != 0)
{
cmdStr = "wpa_cli -i wlan0 scan";//搜索可见wifi
cmd.start(cmdStr);
cmd.waitForStarted();
cmd.waitForFinished();
strCmdOut=QString::fromLocal8Bit(cmd.readAllStandardOutput());
int flag = 0;
while(strCmdOut.toUpper().indexOf("OK") == -1)
{
cmdStr = "wpa_cli -i wlan0 scan";//搜索可见wifi
cmd.start(cmdStr);
cmd.waitForStarted();
cmd.waitForFinished();
strCmdOut=QString::fromLocal8Bit(cmd.readAllStandardOutput());
flag++;
if(flag>=100){
break;
}
}
}
cmdStr = "wpa_cli -i wlan0 scan_result";//获取搜索结果
cmd.start(cmdStr);
cmd.waitForStarted();
cmd.waitForFinished();
strCmdOut=QString::fromLocal8Bit(cmd.readAllStandardOutput());
lineStrList = strCmdOut.split("\n", QString::SkipEmptyParts);//换行符
for(int i = 0; i < lineStrList.size(); i++)
{
//qDebug()<<i<<lineStrList[i];
QStringList lineStr = lineStrList[i].split("\t", QString::SkipEmptyParts);//tap
if(lineStr.size() >= 2 && lineStr[lineStr.size()-1].indexOf("]") == -1)
{
QString str = lineStr[lineStr.size()-1].remove(QRegExp("^ +\\s*"));//正则表达式去掉空格
s16 ifExist = 0;
for(s16 m = 0; m < wifiStrList.size(); m++)
{
if(wifiStrList[m] == str)
{
ifExist = 1;
break;
}
}
if(ifExist == 0)
{
wifiStrList.append(str);
}
}
}
if(wifiStrList.size() <= 0)
{
m_pPromptDlg->setContentStr(tr("Failed to search for WiFi list. Please try again later!"));//搜索wifi列表失败请稍后重试
m_pPromptDlg->exec();
return -1;
}
#endif
return 1;
}
QString MainWidgetFunction::getIpSegment(bool bl)
{
m_pPromptDlg->initDialog(PromptDialog::BTN_OK);
m_pPromptDlg->setTitleStr(tr("Prompt"));
QString ipStr;
ipStr.clear();
if(bl == true){}//为了去掉编译警告
//linux下查询wifi连接状态
#ifdef Q_OS_LINUX
s16 value = -1;
QProcess cmd;
QString cmdStr;
cmdStr.clear();
QString strCmdOut;
strCmdOut.clear();
QStringList lineStrList;
lineStrList.clear();
cmdStr = "wpa_cli -i wlan0 status";//查询wifi连接状态
cmd.start(cmdStr);
cmd.waitForStarted();
cmd.waitForFinished();
strCmdOut=QString::fromLocal8Bit(cmd.readAllStandardOutput());
//qDebug()<<"strCmdOut"<<strCmdOut;
lineStrList = strCmdOut.split("\n", QString::SkipEmptyParts); //换行符
//qDebug()<<"lineStrList.size()"<<lineStrList.size();
for(int i = 0; i < lineStrList.size(); i++)
{
QStringList lineStr = lineStrList[i].split("=", QString::SkipEmptyParts);
if(lineStr.size() >= 2)
{
QString str1 = lineStr[0];
//qDebug()<<lineStrList[i];
if(str1.indexOf("wpa_state") != -1)
{
QString str2 = lineStr[1];
//qDebug()<<str2;
if(str2.indexOf("COMPLETED") == -1)
{
cmd.close();
}
}
if(str1.indexOf("ip_address") != -1)
{
ipStr = lineStr[1].remove(QRegExp("^ +\\s*"));//正则表达式去掉空格-IP
cmd.close();
value = 1;
break;
}
}
}
cmd.close();
if(value >= 0)
{
QString modeStr;
modeStr.clear();
if(bl == false)
{
modeStr = tr("dynamic");//动态
}
else if(bl == true)
{
modeStr = tr("static");//静态
}
ipStr = ipStr + "(" + modeStr + ")";
}
else
{
if(bl == true)
{
m_pPromptDlg->setContentStr(tr("Failed to obtain IP. Please check the settings!"));//获取IP失败请检查设置
m_pPromptDlg->exec();
}
}
#endif
return ipStr;
}
//参数导入
void MainWidgetFunction::funImportParameter(QString tStyle)
{
m_pSystemManageDlg->setTypeLogo(tStyle);
m_pSystemManageDlg->setMainTitle(tr("Parameter Import"));
m_pSystemManageDlg->setSubTitle(tr("Auxiliary Function") + " > " + tr(" Parameter Import"));
m_pSystemManageDlg->initDialog();
systemUpgrade(PARA_IMPORT);
}
//主控升级
void MainWidgetFunction::funMCUpgrade(QString tStyle)
{
m_pSystemManageDlg->setTypeLogo(tStyle);
m_pSystemManageDlg->setMainTitle(tr("MCUpgrade"));
m_pSystemManageDlg->setSubTitle(tr("Auxiliary Function") + " > " + tr(" MC Upgrade"));
m_pSystemManageDlg->initDialog();
systemUpgrade(MC_UPDATA);
}
//界面升级
void MainWidgetFunction::funHMIUpgrade(QString tStyle)
{
m_pSystemManageDlg->setTypeLogo(tStyle);
m_pSystemManageDlg->setMainTitle(tr("HMIUpgrade"));
m_pSystemManageDlg->setSubTitle(tr("Auxiliary Function") + " > " + tr(" HMI Upgrade"));
m_pSystemManageDlg->initDialog();
systemUpgrade(HMI_UPDATA);
}
//界面还原
void MainWidgetFunction::funHMIBackupsUpgrade(QString tStyle)
{
m_pSystemManageDlg->setTypeLogo(tStyle);
m_pSystemManageDlg->setMainTitle(tr("HMI backups Upgrade"));
m_pSystemManageDlg->setSubTitle(tr("Auxiliary Function") + " > " + tr("HMI backups Upgrade"));
m_pSystemManageDlg->initDialog();
systembackupUpgrade(BACKUPS_UPDATA);
}
void MainWidgetFunction::funWIFI(QString tStyle)
{
QStringList wifiStrList;
wifiStrList.clear();
s16 rel = refreshWifiList(wifiStrList);
if(rel > 0)
{
m_pSystemManageDlg->setTypeLogo(tStyle);
m_pSystemManageDlg->setMainTitle(tr("WIFI"));
m_pSystemManageDlg->setSubTitle(tr("Auxiliary Function") + ">" + tr("WIFI"));
bool mode = false;//动态获取IP方式
QString iniPath = WIFIINIPATH;
QSettings setting(iniPath,QSettings::IniFormat);
QString wifiName = QByteArray::fromBase64(setting.value("WIFI/default_ssid").toByteArray());
QString wifiPass = QByteArray::fromBase64(setting.value("WIFI/default_passwd").toByteArray());
mode = setting.value("WIFI/static_mode").toBool();
QString ip = getIpSegment(mode);
if(ip.length() > 0)//已连接
{
m_pSystemManageDlg->setWifiInfo(ip,wifiName,wifiPass,mode);
m_pSystemManageDlg->initDialog(1);
for(s16 i = 0; i < wifiStrList.size(); i++)
{
m_pSystemManageDlg->addItem(wifiStrList.at(i));
}
emit siWifiState(true);
}
else//未连接
{
m_pSystemManageDlg->initDialog(1);
for(s16 i = 0; i < wifiStrList.size(); i++)
{
m_pSystemManageDlg->addItem(wifiStrList.at(i));
}
emit siWifiState(false);
}
m_pSystemManageDlg->exec();
}
}
//参数导出
void MainWidgetFunction::funExportParameter()
{
QString usbPath = detectUsb();
if(usbPath.length() <= 0)
{
//优盘不存在
m_pPromptDlg->initDialog(PromptDialog::BTN_OK);
m_pPromptDlg->setTitleStr(tr("Prompt"));
QString str;
str = tr("USB flash drive is not detected!");//未检测到优盘!
m_pPromptDlg->setContentStr(str);
m_pPromptDlg->exec();
return;
}
MCInfo info1 = g_pMachine->getMcInfo();
QString software_ver;
software_ver.sprintf("%s",info1.softwareVerStr);
qDebug()<<info1.softwareVerStr;
qDebug()<<info1.buildInfoStr;
QStringList i_sof = software_ver.split(" ");//读取空格之前的版本信息
QString i_info = i_sof[0] ;
QString i_para = "Epara_";
QString paradat = ".paradat";
QString i_time = QDateTime::currentDateTime().toString("_yyMMdd_hhmmss");//时间日期
QString strName = i_para + i_info + i_time + paradat;
QString paraFileName = usbPath + strName;
QFile::remove (paraFileName) ;
#ifdef Q_OS_LINUX
system("sync");
#endif
char para_mc [ 1024 ];
char para_wk [ 1024 ];
char pre_para_mc [ 1024 ];
char pre_para_wk [ 1024 ];
memcpy(para_mc , (u8*) (&(g_pMachine->getMcPara())) , 1024 );
memcpy(para_wk , (u8*) (&(g_pMachine->getWkPara())) , 1024 );
memcpy(pre_para_mc , (u8*) (&(g_pMachine->getPreMcPara())) , 1024 );
memcpy(pre_para_wk , (u8*) (&(g_pMachine->getPreWkPara())) , 1024 );
//两个缓冲区,输出成一个参数文件
// 转换结构体 开始
ParaFile paraFileStruct ;
memset(&paraFileStruct,0,sizeof(ParaFile)) ;
paraFileStruct.s_head[0] = 'P';
paraFileStruct.s_head[1] = 'A';
paraFileStruct.s_head[2] = 'R';
paraFileStruct.s_head[3] = 'A';
paraFileStruct.s_type = 0 ;
paraFileStruct.s_len = 4096 ;
memcpy( paraFileStruct.s_para_buff , para_wk , 1024 );
memcpy( (char *) (paraFileStruct.s_para_buff) + 1024 , para_mc , 1024 );
memcpy( (char *) (paraFileStruct.s_para_buff) + 2048 , pre_para_mc , 1024 );
memcpy( (char *) (paraFileStruct.s_para_buff) + 3072 , pre_para_wk , 1024 );
paraFileStruct.s_crc = calcCrc16( (u8 * ) paraFileStruct.s_para_buff , 4096 ) ;
// 转换结构体 结束
// 保存文件 开始
QFile file(paraFileName);
file.open(QIODevice::ReadWrite | QIODevice::Truncate);
file.write((char*)&paraFileStruct,sizeof(ParaFile));
file.flush();
file.close();
// 保存文件 结束
#ifdef Q_OS_LINUX
system("sync");
#endif
//参数导出成功
m_pPromptDlg->initDialog(PromptDialog::BTN_OK);
m_pPromptDlg->setTitleStr(tr("Prompt"));
QString str;
str = tr("Parameters exported successfully!");//参数导出成功!
m_pPromptDlg->setContentStr(str);
m_pPromptDlg->exec();
return;
}
//全部归零
void MainWidgetFunction::funAllToZero()
{
m_pPromptDlg->initDialog(PromptDialog::BTN_OK_CANCEL);
m_pPromptDlg->setTitleStr(tr("All to zero"));//全部归零
QString str;
str = tr("The machine is about to move, please pay attention to safety!");//机器即将运动,请注意安全!
m_pPromptDlg->setContentStr(str);
if(m_pPromptDlg->exec() == 1)
{
if(g_pMachine != NULL)
{
g_pMachine->allToZero();
}
}
}
//产量清零
void MainWidgetFunction::funResetOutput()
{
m_pPromptDlg->initDialog(PromptDialog::BTN_OK_CANCEL);
m_pPromptDlg->setTitleStr(tr("All to reset"));//产量清零
QString str;
str = tr("Whether to reset the output?");//是否重置产量?
m_pPromptDlg->setContentStr(str);
if(m_pPromptDlg->exec() == 1)
{
if(g_pMachine != NULL)
{
g_pMachine->resetOutput();
}
}
}
//流程复位
void MainWidgetFunction::funAllToReset()
{
m_pPromptDlg->initDialog(PromptDialog::BTN_OK_CANCEL);
m_pPromptDlg->setTitleStr(tr("All to reset"));//流程复位
QString str;
str = tr("If all process to reset?");//是否全部流程复位?
m_pPromptDlg->setContentStr(str);
if(m_pPromptDlg->exec() == 1)
{
if(g_pMachine != NULL)
{
qDebug()<<"MainWidgetFunction::funAllToReset() >>>>>>>>>>>>>>>> g_pMachine->allToReset();";
g_pMachine->allToReset();
}
}
}
//主轴点动
void MainWidgetFunction::funSpindleJog()
{
m_pPromptDlg->initDialog(PromptDialog::BTN_OK_CANCEL);
m_pPromptDlg->setTitleStr(tr("Spindle jog"));//主轴点动
QString str;
str = tr("The machine is about to move, please pay attention to safety!");//机器即将运动,请注意安全!
m_pPromptDlg->setContentStr(str);
if(m_pPromptDlg->exec() == 1)
{
if(g_pMachine != NULL)
{
g_pMachine->sewJog();
}
}
}
//主轴旋转
void MainWidgetFunction::funSpindleRotate()
{
m_pPromptDlg->initDialog(PromptDialog::BTN_SPINDLE_ROTATE);
m_pPromptDlg->setTitleStr(tr("Spindle rotate angle"));//主轴旋转角度
m_pPromptDlg->exec(); // coco
// if (m_pPromptDlg->exec() == 1)
// {
// s32 val = m_pPromptDlg->getSpindleRotateAngle();
// if(g_pMachine != NULL)
// {
// }
// }
}
//旋转电机旋转
void MainWidgetFunction::funRotateRotate()
{
m_pPromptDlg->initDialog(PromptDialog::BTN_ROTATE_ROTATE);
m_pPromptDlg->setTitleStr(tr("Rotating motor rotation angle"));//旋转电机旋转角度
m_pPromptDlg->exec();
// if (m_pPromptDlg->exec() == 1)
// {
// //s32 val = m_pPromptDlg->getSpindleRotateAngle();
// if(g_pMachine != NULL)
// {
// }
// }
}
//回工作点
void MainWidgetFunction::funBackWorkPoint()
{
m_pPromptDlg->initDialog(PromptDialog::BTN_OK_CANCEL);
m_pPromptDlg->setTitleStr(tr("Back work point"));//回工作点
QString str;
str = tr("The machine is about to move, please pay attention to safety!");//机器即将运动,请注意安全!
m_pPromptDlg->setContentStr(str);
if(m_pPromptDlg->exec() == 1)
{
if(g_pMachine != NULL)
{
g_pMachine->gotoWorkPos();
}
}
}
//工作机头允许设置
void MainWidgetFunction::funWorkHeadSet()
{
m_pPromptDlg->initDialog(PromptDialog::BTN_WORKHEADSET);
m_pPromptDlg->setTitleStr(tr("Work Head Set"));
m_pPromptDlg->exec();
}
//回原点(回零点(回绣框原点))
void MainWidgetFunction::funBackToOrigin()
{
m_pPromptDlg->initDialog(PromptDialog::BTN_OK_CANCEL);
m_pPromptDlg->setTitleStr(tr("Back to zero"));//回原点
QString str;
str = tr("The machine is about to move, please pay attention to safety!");//机器即将运动,请注意安全!
m_pPromptDlg->setContentStr(str);
if(m_pPromptDlg->exec() == 1)
{
if(g_pMachine != NULL)
{
g_pMachine->gotoZeroPos();
}
}
}
//定起始点
void MainWidgetFunction::funSetStartPoint(QString filePath,int x,int y,int showFlag, bool allToReset, bool isSendPatternHead)
{
if(filePath.length() <= 0)
{
return;
}
m_pPromptDlg->initDialog(PromptDialog::BTN_OK_CANCEL);
m_pPromptDlg->setTitleStr(tr("Set start point"));//定起始点
QString str = tr("Whether to set the current point as the start point?");//是否将当前点设置为起始点?
m_pPromptDlg->setContentStr(str);
int setFlag = 1;
if(showFlag == 1)
{
setFlag = m_pPromptDlg->exec();
}
if(g_pCurEmbData == NULL)
{
return;
}
if(setFlag == 1)
{
writeFilePoint(filePath,x,y);
g_pCurEmbData->setStartPosition(x,y);
if(isSendPatternHead)
sendPatternHead(filePath);//发送花样ds16头文件
//流程复位
if(allToReset)
g_pMachine->allToReset();
}
}
void MainWidgetFunction::funSetLeftFrontPoint(QString filePath, int left, int front, bool allToReset, bool isSendPatternHead)
{
if(filePath.length() <= 0)
{
return;
}
if(g_pCurEmbData == NULL)
{
return;
}
int x,y;
x = y = 0;
writeFileLeftFrontPoint(filePath,x,y,left,front);
g_pCurEmbData->setStartPositionFromLeftFront(left,front);
//g_pCurEmbData->setStartPosition(x,y);
if(isSendPatternHead)
sendPatternHead(filePath);//发送花样ds16头文件
//流程复位
if(allToReset)
g_pMachine->allToReset();
}
void MainWidgetFunction::funSetLeftFrontPointDoubleHead(QString filePath, int left, int front, int showFlag, bool allToReset, bool isSendPatternHead)
{
if(filePath.length() <= 0)
{
return;
}
m_pPromptDlg->initDialog(PromptDialog::BTN_OK_CANCEL);
m_pPromptDlg->setTitleStr(tr("Set left front point"));//定左前点
QString str = tr("Whether to set the current point as the left front point?");//是否将当前点设置为左前点?
m_pPromptDlg->setContentStr(str);
int setFlag = 1;
if(showFlag == 1)
{
setFlag = m_pPromptDlg->exec();
}
if(g_pCurEmbData == NULL)
{
return;
}
if(setFlag == 1)
{
writeFileLeftFrontPointDoubleHead(filePath,left,front);
g_pCurEmbData->setStartPositionDoubleHead(left,front);
if(isSendPatternHead)
sendPatternHead(filePath);//发送花样ds16头文件
//流程复位
if(allToReset)
g_pMachine->allToReset();
}
}
//定上料点
void MainWidgetFunction::funSetFeedPoint()
{
m_pPromptDlg->initDialog(PromptDialog::BTN_OK_CANCEL);
m_pPromptDlg->setTitleStr(tr("set feeding point"));//定上料点
QString str;
str = tr("Whether to set the current point as the feeding point?");//是否将当前点设置为上料点?
m_pPromptDlg->setContentStr(str);
if(m_pPromptDlg->exec() == 1)
{
if(g_pMachine != NULL)
{
g_pMachine->setFeedPos();
}
}
}
//回上料点
void MainWidgetFunction::funBackFeedPoint()
{
m_pPromptDlg->initDialog(PromptDialog::BTN_OK_CANCEL);
m_pPromptDlg->setTitleStr(tr("Back feed point"));//回上料点
QString str;
str = tr("The machine is about to move, please pay attention to safety!");//机器即将运动,请注意安全!
m_pPromptDlg->setContentStr(str);
if(m_pPromptDlg->exec() == 1)
{
if(g_pMachine != NULL)
{
g_pMachine->gotoFeedPos();
}
}
}
// 回起针点
void MainWidgetFunction::funBackStartPoint()
{
m_pPromptDlg->initDialog(PromptDialog::BTN_OK_CANCEL);
m_pPromptDlg->setTitleStr(tr("Back start point"));//回起针点
QString str;
str = tr("The machine is about to move, please pay attention to safety!");//机器即将运动,请注意安全!
m_pPromptDlg->setContentStr(str);
if(m_pPromptDlg->exec() == 1)
{
if(g_pMachine != NULL)
{
g_pMachine->gotoStartPos();
}
}
}
void MainWidgetFunction::funGotoFinish()
{
m_pPromptDlg->initDialog(PromptDialog::BTN_OK_CANCEL);
m_pPromptDlg->setTitleStr(tr("goto Finish"));//回结束点
QString str;
str = tr("The machine is about to move, please pay attention to safety!");//机器即将运动,请注意安全!
m_pPromptDlg->setContentStr(str);
if(m_pPromptDlg->exec() == 1)
{
if(g_pMachine != NULL)
{
g_pMachine->gotoFinish();
}
}
}
//定偏移点
void MainWidgetFunction::funSetOffsetPoint()
{
m_pPromptDlg->initDialog(PromptDialog::BTN_OK_CANCEL);
m_pPromptDlg->setTitleStr(tr("Set offset point"));//定偏移点
QString str;
str = tr("Whether to set the current point as the offset point?");//是否将当前点设置为偏移点?
m_pPromptDlg->setContentStr(str);
if(m_pPromptDlg->exec() == 1)
{
if(g_pMachine != NULL)
{
g_pMachine->setOffsetPos();
}
}
}
//回偏移点
void MainWidgetFunction::funBackOffsetPoint()
{
m_pPromptDlg->initDialog(PromptDialog::BTN_OK_CANCEL);
m_pPromptDlg->setTitleStr(tr("Back offset point"));//回偏移点
QString str;
str = tr("The machine is about to move, please pay attention to safety!");//机器即将运动,请注意安全!
m_pPromptDlg->setContentStr(str);
if(m_pPromptDlg->exec() == 1)
{
if(g_pMachine != NULL)
{
g_pMachine->gotoOffsetPos();
}
}
}
//边框检查
void MainWidgetFunction::funBorderCheck()
{
m_pPromptDlg->initDialog(PromptDialog::BTN_OK_CANCEL);
m_pPromptDlg->setTitleStr(tr("Border check"));//边框检查
QString str;
str = tr("The machine is about to move, please pay attention to safety!");//机器即将运动,请注意安全!
m_pPromptDlg->setContentStr(str);
if(m_pPromptDlg->exec() == 1)
{
if((m_mcStatus.workStatus & WORK_STA_BUSY) != 0) // 下位机在执行动作
{
return;
}
g_pMachine->checkFrame(); // 发给下位机,边框检查
slotCalMachineProgress(CSV_00_CODE_4);
}
}
//手动剪线
void MainWidgetFunction::funManualTrim()
{
m_pPromptDlg->initDialog(PromptDialog::BTN_OK_CANCEL);
m_pPromptDlg->setTitleStr(tr("Trim"));//剪线
QString str;
str = tr("The machine is about to cut the thread, please pay attention to safety!");//机器即将剪线,请注意安全!
m_pPromptDlg->setContentStr(str);
if(m_pPromptDlg->exec() == 1)
{
if(g_pMachine != NULL)
{
//g_pMachine->sewCutThread();
}
}
}
//设置可工作区域
void MainWidgetFunction::funSetWorkArea()
{
m_pPromptDlg->initDialog(PromptDialog::BTN_WORK_AREA);
m_pPromptDlg->setTitleStr(tr("Setting workable area"));//设置可工作区域
//int areaValue = m_pPromptDlg->getArea();
if(m_pPromptDlg->exec() == 1)
{
if(g_pMachine != NULL)
{
}
}
}
//剪刀开合
void MainWidgetFunction::funCutterOpenAndClose()
{
m_pPromptDlg->initDialog(PromptDialog::BTN_OK_CANCEL);
m_pPromptDlg->setTitleStr(tr("Lower cutter"));//下剪线
QString str;
str = tr("The scissors are about to move, please pay attention to safety!");//剪刀即将动作,请注意安全!
m_pPromptDlg->setContentStr(str);
if(m_pPromptDlg->exec() == 1)
{
if(g_pMachine != NULL)
{
}
}
}
//空走边框
void MainWidgetFunction::funSimulateFrame()
{
m_pPromptDlg->initDialog(PromptDialog::BTN_OK_CANCEL);
m_pPromptDlg->setTitleStr(tr("Simulate frame"));//空走边框
QString str;
str = tr("The machine is about to move, please pay attention to safety!");//机器即将运动,请注意安全!
m_pPromptDlg->setContentStr(str);
if(m_pPromptDlg->exec() == 1)
{
if((m_mcStatus.workStatus & WORK_STA_BUSY) != 0) // 下位机在执行动作
{
return;
}
g_pMachine->simulateFrame(); // 发给下位机,空走边框
}
}
//流程复位
void MainWidgetFunction::funProcessReset()
{
m_pPromptDlg->initDialog(PromptDialog::BTN_OK_CANCEL);
m_pPromptDlg->setTitleStr(tr("Process reset"));//流程复位
QString str;
str = tr("The machine is about to reset, please pay attention to safety!");//机器即将流程复位,请注意安全!
m_pPromptDlg->setContentStr(str);
if(m_pPromptDlg->exec() == 1)
{
if(g_pMachine != NULL)
{
g_pMachine->allToReset();
}
}
}
//手动加油
void MainWidgetFunction::funManualOil()
{
m_pPromptDlg->initDialog(PromptDialog::BTN_OK_CANCEL);
m_pPromptDlg->setTitleStr(tr("Manual oil"));//手动加油
QString str;
str = tr("The machine is about to oil!");//机器即将加油!
m_pPromptDlg->setContentStr(str);
if(m_pPromptDlg->exec() == 1)
{
if(g_pMachine != NULL)
{
g_pMachine->manualOil(1);
}
slotCalMachineProgress(CSV_00_CODE_6);
}
}
//梭盘计数复位
void MainWidgetFunction::funShuttleChange()
{
m_pPromptDlg->initDialog(PromptDialog::BTN_OK_CANCEL);
m_pPromptDlg->setTitleStr(tr("Shuttle count reset"));//梭盘计数复位
QString str;
str = tr("The machine is about to change the shuttle automatically!");//机器即将自动换梭!
m_pPromptDlg->setContentStr(str);
if(m_pPromptDlg->exec() == 1)
{
if(g_pMachine != NULL)
{
g_pMachine->shuttleCounter();
}
}
}
//框架归零
void MainWidgetFunction::funGotoZeroPos()
{
m_pPromptDlg->initDialog(PromptDialog::BTN_OK_CANCEL);
m_pPromptDlg->setTitleStr(tr("Goto zero pos"));//框架归零
QString str;
str = tr("The machine is about to move, please pay attention to safety!");//机器即将运动,请注意安全!
m_pPromptDlg->setContentStr(str);
if(m_pPromptDlg->exec() == 1)
{
if(g_pMachine != NULL)
{
g_pMachine->gotoZeroPos();
}
}
}
//定工作范围
void MainWidgetFunction::funSetWorkRange()
{
m_pPromptDlg->initDialog(PromptDialog::BTN_OK_CANCEL);
m_pPromptDlg->setTitleStr(tr("Set work range"));//定工作范围
QString str;
str = tr("If automatically set work range?");//是否自动定工作范围?
m_pPromptDlg->setContentStr(str);
if(m_pPromptDlg->exec() == 1)
{
if(g_pMachine != NULL)
{
}
}
}
void MainWidgetFunction::sendPatternHead(QString filePath)
{
if(DATA_FORMATE == DATA_DS16)
{
//获取文件头并重新发送文件头
DataDs16FileHead *pDs16Head = g_pCurEmbData->getDsDatHead();
qDebug()<< "m_curFileID" <<m_curFileID;
g_pMachine->setFilePara(0, m_curFileID, (DataFilePara&)*pDs16Head);
}
else if(DATA_FORMATE == DATA_DS8)
{
QString ds8FilePath = filePath + ".ds8";
QFile file(ds8FilePath);
if(file.exists())//存在ds8文件
{
if(!file.open(QIODevice::ReadOnly))
{
qDebug() << "open file fail when read";
return;
}
QByteArray ary = file.readAll();
DataDs16FileHead *pDs8Head = (DataDs16FileHead *)(ary.data());
DataDs16FileHead *pDs16Head = g_pCurEmbData->getDsDatHead();
pDs8Head->anchorX = pDs16Head->anchorX;
pDs8Head->anchorY = pDs16Head->anchorY;
pDs8Head->beginX = pDs16Head->beginX;
pDs8Head->beginY = pDs16Head->beginY;
pDs8Head->beginR = pDs16Head->beginR;
//pDs8Head->combineMode = pDs16Head->combineMode;
pDs8Head->maxX = pDs16Head->maxX;
pDs8Head->maxY = pDs16Head->maxY;
pDs8Head->minX = pDs16Head->minX;
pDs8Head->minY = pDs16Head->minY;
g_pMachine->setFilePara(0, m_curFileID, (DataFilePara&)*pDs8Head);
file.close();
}
else
{
QByteArray ds16dat = g_pCurEmbData->getDsDat();//获得ds16数据
QByteArray ds8dat;
ds8dat.clear();
// ds16数据
int size = ds16dat.size();
if (size <= (int)sizeof(DataDs16FileHead))
{
qDebug("data less then head size");
return;
}
DataDs16FileHead * pDs16Head = (DataDs16FileHead *)(ds16dat.data());
ds8dat.append((char*)pDs16Head,sizeof(DataDs16FileHead));
int datasize = size - sizeof(DataDs16FileHead);
if (datasize <= 0)
{
qDebug("ds16 dataBegin err");
return;
}
int stepsize = datasize/sizeof(Ds16Item);
if (stepsize <= 0)
{
qDebug("ds16 data size err");
return;
}
Ds16Item *pData = (Ds16Item *)(ds16dat.data() + sizeof(DataDs16FileHead));
Ds16Item * dataPtr = pData;
u8 ctrl,attr;
s16 dx,dy,dr;
Ds8Item ds8Item;
for (int i = 0; i < stepsize; i++)
{
ctrl = dataPtr->ctrl;
attr = dataPtr->attr;
dx = dataPtr->dx;
dy = dataPtr->dy;
dr = dataPtr->dr;
ds8Item.ctrl = ctrl;
ds8Item.attr = attr;
ds8Item.dx = dx;
ds8Item.dy = dy;
ds8Item.dr = dr;
ds8dat.append((char*)&ds8Item,sizeof(Ds8Item));
dataPtr++;
}
//发送ds8数据
DataDs16FileHead * pDs8Head = (DataDs16FileHead *)(ds8dat.data());
Ds8Item *tData = (Ds8Item *)(ds8dat.data() + sizeof(DataDs16FileHead));
//重新生成文件头
pDs8Head->dataSize = pDs8Head->itemNums*sizeof(Ds8Item); // 数据字节数
pDs8Head->bytesPerItem = sizeof(Ds8Item); // 每项占的字节数
pDs8Head->dataChecksum = calcCheckSum32((u8 *)(tData) , pDs8Head->dataSize);; // 数据累加校验和
pDs8Head->checkCrc = calcCrc16((u8 *)(pDs8Head), HEAD_FIX_INFO_LEN); // 前面6个字段的CRC校验6个字段分别为文件名称字节数项个数每项字节数每块字节数数据累加和的CRC校验值
g_pMachine->setFilePara(0, m_curFileID, (DataFilePara&)*pDs8Head);
}
}
}
//选择花样后发送数据并显示大图
void MainWidgetFunction::sendPatternData(QString filePath,int type)
{
m_filePath = filePath;
//保存最后一次绣作的花样路径到配置文件中
if(g_pSettings != NULL)
{
g_pSettings->writeOneToIniFile("Pattern/name",filePath);
}
if(DATA_FORMATE == DATA_DS16)
{
sendDs16PatternData(type);//发送ds16数据
}
else if(DATA_FORMATE == DATA_DS8)
{
convertDs16ToDs8AndSend(filePath,type);//将ds16数据转换为ds8数据并发送
}
}
void MainWidgetFunction::funBottomDetect()
{
m_pPromptDlg->initDialog(PromptDialog::BTN_BOTTOM);
m_pPromptDlg->setTitleStr(tr("Bottom line detection"));
m_pPromptDlg->exec();
}
void MainWidgetFunction::funFaceDetect()
{
m_pPromptDlg->initDialog(PromptDialog::BTN_FACE);
m_pPromptDlg->setTitleStr(tr("Face line detection"));
m_pPromptDlg->exec();
}
void MainWidgetFunction::funExitRoot()
{
m_pPromptDlg->initDialog(PromptDialog::BTN_OK);
m_pPromptDlg->setTitleStr(tr("Prompt"));
g_emUser = operate;
m_pPromptDlg->setContentStr(tr("Exit successfully!"));//成功退出!
m_pPromptDlg->exec();
}
void MainWidgetFunction::funGetMCVersionInfo()
{
m_pPromptDlg->initDialog(PromptDialog::BTN_OK);
m_pPromptDlg->setTitleStr(tr("System info"));
m_pPromptDlg->setContentInfoShow();
m_pPromptDlg->exec();
}
void MainWidgetFunction::funProductStatistics(QString tStyle,QString filePath,int patternBreakLineNum)
{
m_pSystemManageDlg->setTypeLogo(tStyle);
m_pSystemManageDlg->setMainTitle(tr("Production statistics"));//生产统计
m_pSystemManageDlg->setSubTitle(tr("Auxiliary Function") + " > " + tr(" Production statistics"));//辅助功能 > 生产统计
m_pSystemManageDlg->initDialog();
m_filePath = filePath;
QFileInfo file(m_filePath);
QString fileName = file.fileName();
m_fileName = fileName;
addProductStatisInfo(patternBreakLineNum);
m_pSystemManageDlg->exec(PRODUCTSTATIS);
}
//错误日志
void MainWidgetFunction::slotJournalError()
{
//m_pSystemManageDlg->setTypeLogo(tStyle);
m_pSystemManageDlg->setMainTitle(tr("Error Log"));//错误日志
m_pSystemManageDlg->setSubTitle(tr("Auxiliary Function") + " > " + tr(" Error Log"));//辅助功能 > 错误日志
m_pSystemManageDlg->initDialog();
addJournalInfoError();
//m_pSystemManageDlg->exec(JOURNALERROR);//显示窗体
}
//断线日志
void MainWidgetFunction::slotJournalBreakage()
{
//m_pSystemManageDlg->setTypeLogo(tStyle);
m_pSystemManageDlg->setMainTitle(tr("Breakage Log"));//断线日志
m_pSystemManageDlg->setSubTitle(tr("Auxiliary Function") + " > " + tr(" Breakage Log"));//辅助功能 > 断线日志
m_pSystemManageDlg->initDialog();
addJournalInfoBreakage();
//m_pSystemManageDlg->exec(JOURNALBREAKAGE);//显示窗体
}
void MainWidgetFunction::slotCsvChangeDebug()
{
//m_pSystemManageDlg->setTypeLogo(tStyle);
m_pSystemManageDlg->setMainTitle(tr("Debug Info"));//调试信息
m_pSystemManageDlg->setSubTitle(tr("Auxiliary Function") + " > " + tr("Debug Info"));//辅助功能 > 调试信息
m_pSystemManageDlg->initDialog();
addJournalInfoDebug();
//m_pSystemManageDlg->exec(JOURNALBREAKAGE);//显示窗体
}
//错误日志
void MainWidgetFunction::funJournalError(QString tStyle)
{
m_pSystemManageDlg->setTypeLogo(tStyle);
m_pSystemManageDlg->setMainTitle(tr("ErrorLog"));//错误日志
m_pSystemManageDlg->setSubTitle(tr("Auxiliary Function") + " > " + tr(" ErrorLog"));//辅助功能 > 错误日志
m_pSystemManageDlg->initDialog();
addJournalInfoError();
m_pSystemManageDlg->exec(JOURNAL);//显示窗体
}
void MainWidgetFunction::funDebugInfo()
{
m_pDebugInfoDlg->initDialog();
m_pDebugInfoDlg->addListInfo();
m_pDebugInfoDlg->exec();//显示窗体
}
void MainWidgetFunction::funSoftwareAuthor()
{
if (g_pMachine != NULL)
{
if(g_pMachine->isConnected() == 3)
{
g_pMachine->getInfoFromMachine();
}
else
{
m_pPromptDlg->initDialog(PromptDialog::BTN_OK);
m_pPromptDlg->setTitleStr(tr("Prompt"));
m_pPromptDlg->setContentStr(tr("No connection"));
m_pPromptDlg->exec();
return;
}
}
// 设置板卡ID值的显示
m_pPromptDlg->initDialog(PromptDialog::BTN_WARRANT);
m_pPromptDlg->setTitleStr(tr("Warrant"));
m_pPromptDlg->setContentWarrantShow();
m_pPromptDlg->exec();
}
//报错信息
int MainWidgetFunction::funErrorPrompt(QString info)
{
int ret = 0;
m_pPromptDlg->initDialog(PromptDialog::BTN_OK);
m_pPromptDlg->setTitleStr(tr("Prompt"));
//QString errInfo= errcode+info;
m_pPromptDlg->setContentStr(info);
if(m_pPromptDlg->exec() == 1)
{
g_pMachine->cleanError();
}
return ret;
}
int MainWidgetFunction::funDetectBreakLineStatus()
{
//断线状态
QString allStr;
allStr.clear();
QString headStr;
headStr.clear();
QString infoStr;//记录到csv的内容
infoStr.clear();
int ret = 0;
if(g_pMachine != NULL)
{
ParaStruct mcParaValues;
mcParaValues = g_pMachine->getMcPara();
}
g_pSettings->writeToCsv(infoStr,TYPE_BREAK);//保存到csv
return ret;
}
void MainWidgetFunction::funSetPromptDlgVisibleFalse()
{
if(m_pPromptDlg->isVisible())
{
m_pPromptDlg->done(1);
}
}
//底线计数复位
void MainWidgetFunction::funBottomLineCountReset()
{
m_pPromptDlg->initDialog(PromptDialog::BTN_OK_CANCEL);
m_pPromptDlg->setTitleStr(tr("Prompt"));
m_pPromptDlg->setContentStr(tr("Is the bottom line count reset?")); //是否底线计数复位?
if(m_pPromptDlg->exec() == 1)
{
g_pMachine->resetBobbinCounter(); // 底线计数复位
}
}
//手自动工作状态切换 0:手动 1:自动
void MainWidgetFunction::funManualOrAutoSwitch(s16 val)
{
m_pPromptDlg->initDialog(PromptDialog::BTN_OK_CANCEL);
m_pPromptDlg->setTitleStr(tr("Prompt"));
if(val == 0)
{
m_pPromptDlg->setContentStr(tr("Are you sure to ManualSwitch?")); //是否手动工作状态切换?
if(m_pPromptDlg->exec() == 1)
{
g_pMachine->setToManualWork();
}
}
else if( val ==1)
{
m_pPromptDlg->setContentStr(tr("Are you sure to AutoSwitch?")); //是否自动工作状态切换?
if(m_pPromptDlg->exec() == 1)
{
g_pMachine->setToAutoWork();
}
}
}
void MainWidgetFunction::slotCalMachineProgress(s16 csvCode,s16 type)
{
int per = 0;
int ifPress = 0;
for(int i = 1; i < m_csvFileStrList.size(); i++)
{
QStringList strlist = m_csvFileStrList[i].split(",", QString::SkipEmptyParts); //根据","分隔开每行的列
if(strlist.size() > 0)
{
QString code = strlist.at(COLUMN_CODE);
QStringList strlist1 = code.split("_", QString::SkipEmptyParts); //根据"_"分隔开每行的列
int infoCode = 0;
int csvType = 0;
if(strlist1.size() >= 2)
{
char *bufCode = strdup(strlist1[2].toLatin1().data());
sscanf (bufCode, "%x", &infoCode);
char *bufType = strdup(strlist1[1].toLatin1().data());
sscanf (bufType, "%x", &csvType);
}
if(infoCode == csvCode && type == csvType)
{
QStringList strlist2 = m_csvFileStrList[i].split(",", QString::SkipEmptyParts); //根据","分隔开每行的列
if(COLUMN_PRESSNUM < strlist2.size())
{
ifPress = strlist2.at(COLUMN_PRESSNUM).toInt()+1;
strlist2[COLUMN_PRESSNUM] = QString::number(ifPress);
QString str;
for(int m = 0; m < strlist2.size(); m++)
{
str.append(strlist2[m]);
if(m != strlist2.size() - 1)
{
str.append(",");
}
}
m_csvFileStrList[i] = str;
//如果按钮没被点击过就加入百分比的计算
if(ifPress == 1)
{
per += strlist2.at(COLUMN_SCORE).toInt();
}
}
m_getScore += per;
if(per != 0)
{
if(m_totalScore == 0)
{
m_totalScore = 1;
}
sendDataToGateway(csvCode,type);
}
break;
}
}
}
if(ifPress == 1)
{
QTextCodec * gbkCodec = QTextCodec::codecForName("GBK");
QByteArray array;
array.clear();
for(int j = 0; j < m_csvFileStrList.size(); j++)
{
QString str = m_csvFileStrList[j];
QByteArray ary;
if (gbkCodec != NULL)
{
ary = gbkCodec->fromUnicode(str);
}
else
{
ary = str.toLocal8Bit();
}
array.append(ary);
if(j != m_csvFileStrList.size() - 1)
{
array.append('\n');
}
}
QDir apppath(qApp->applicationDirPath());
QString path = apppath.path() + apppath.separator() + CSV_PROGRESS;
QFile file(path);
if (file.open(QIODevice::WriteOnly | QIODevice::Truncate | QIODevice::Text))
{
file.write(array);
#ifdef Q_OS_LINUX
system("sync");
#endif
}
file.close();
QString iniPath = apppath.path() + apppath.separator() + "config.ini";
QSettings setting(iniPath, QSettings::IniFormat); //QSettings能记录一些程序中的信息下次再打开时可以读取出来
setting.setValue("Progress/getScore",m_getScore); //记录路径到QSetting中保存
QTextCodec::setCodecForLocale(QTextCodec::codecForName("UTF-8"));
}
}
//发送ds16花样数据
void MainWidgetFunction::sendDs16PatternData(int type)
{
QByteArray & ds16dat = g_pCurEmbData->getDsDat();
// ds16数据转换的
int size = ds16dat.size();
if (size <= (int)sizeof(DataDs16FileHead))
{
qDebug("data less then head size");
return;
}
DataDs16FileHead * pDs16Head = (DataDs16FileHead *)(ds16dat.data());
qDebug()<< __FUNCTION__ <<"fileid 2==========================="<<pDs16Head->fileid;
int datasize = size - sizeof(DataDs16FileHead);
if (datasize <= 0)
{
qDebug("ds16 dataBegin err");
return;
}
int stepsize = datasize/sizeof(Ds16Item);
if (stepsize <= 0)
{
qDebug("ds16 data size err");
return;
}
Ds16Item *pData = (Ds16Item *)(ds16dat.data() + sizeof(DataDs16FileHead));
// int x = 0;
// int y = 0;
// for (int j = 0; j < stepsize; j++)
// {
// x += pData->dx;
// y += pData->dy;
// qDebug()<<"dx"<<pData->dx<<"dy"<<pData->dy;
// pData++;
// }
// qDebug()<<"x"<<x<<"y"<<y;
#if(0)
Ds16Item item;
item.dx = pData->dx;
item.dy = pData->dy;
item.dr = pData->dr;
if(item.dx == 0 && item.dy == 0)
{
ds16dat.remove(0,sizeof(Ds16Item));
pData = (Ds16Item *)(ds16dat.data() + sizeof(DataDs16FileHead));
}
#endif
//发送ds16数据
m_curFileID++;
if ((m_curFileID & 0xffff) == 0)
{
m_curFileID = 1;
}
if(g_pMachine != NULL)
{
qDebug()<< "sendFileProc m_curFileID" << m_curFileID;
g_pMachine->sendFileProc(type, 0, m_curFileID, pDs16Head, (u8*)pData);
}
}
//将ds16数据转换为ds8数据并发送
void MainWidgetFunction::convertDs16ToDs8AndSend(QString filePath,int type)
{
QByteArray ds16dat = g_pCurEmbData->getDsDat();//获得ds16数据
QByteArray ds8dat;
ds8dat.clear();
// ds16数据
int size = ds16dat.size();
if (size <= (int)sizeof(DataDs16FileHead))
{
qDebug("data less then head size");
return;
}
DataDs16FileHead * pDs16Head = (DataDs16FileHead *)(ds16dat.data());
ds8dat.append((char*)pDs16Head,sizeof(DataDs16FileHead));
int datasize = size - sizeof(DataDs16FileHead);
if (datasize <= 0)
{
qDebug("ds16 dataBegin err");
return;
}
int stepsize = datasize/sizeof(Ds16Item);
if (stepsize <= 0)
{
qDebug("ds16 data size err");
return;
}
Ds16Item *pData = (Ds16Item *)(ds16dat.data() + sizeof(DataDs16FileHead));
Ds16Item * dataPtr = pData;
u8 ctrl,attr;
s16 dx,dy,dr;
Ds8Item ds8Item;
for (int i = 0; i < stepsize; i++)
{
ctrl = dataPtr->ctrl;
attr = dataPtr->attr;
dx = dataPtr->dx;
dy = dataPtr->dy;
dr = dataPtr->dr;
ds8Item.ctrl = ctrl;
ds8Item.attr = attr;
ds8Item.dx = dx;
ds8Item.dy = dy;
ds8Item.dr = dr;
ds8dat.append((char*)&ds8Item,sizeof(Ds8Item));
dataPtr++;
}
#if(1)
//保存成ds8文件
QString ds8FilePath = filePath + ".ds8";
QFile file(ds8FilePath);
if(file.exists())//存在ds8文件
{
QFile::remove(ds8FilePath);
}
#endif
//发送ds8数据
DataDs16FileHead * pDs8Head = (DataDs16FileHead *)(ds8dat.data());
Ds8Item *tData = (Ds8Item *)(ds8dat.data() + sizeof(DataDs16FileHead));
//重新生成文件头
pDs8Head->dataSize = pDs8Head->itemNums*sizeof(Ds8Item); // 数据字节数
pDs8Head->bytesPerItem = sizeof(Ds8Item); // 每项占的字节数
pDs8Head->dataChecksum = calcCheckSum32((u8 *)(tData) , pDs8Head->dataSize);; // 数据累加校验和
pDs8Head->checkCrc = calcCrc16((u8 *)(pDs8Head), HEAD_FIX_INFO_LEN); // 前面6个字段的CRC校验6个字段分别为文件名称字节数项个数每项字节数每块字节数数据累加和的CRC校验值
m_curFileID++;
if ((m_curFileID & 0xffff) == 0)
{
m_curFileID = 1;
}
g_pMachine->sendFileProc(type, 0, m_curFileID, pDs8Head, (u8*)tData);
if(!file.open(QIODevice::WriteOnly | QIODevice::Truncate))
{
qDebug() << "open file fail when wirte, path =" << filePath;
return;
}
else
{
file.write(ds8dat);
file.close();
}
}
void MainWidgetFunction::addProductStatisInfo(int patternBreakLineNum)
{
//刷新生产统计信息
m_pSystemManageDlg->initDialog();
QString itemStr = tr("Total number of patterns processed: ") + QString::number(m_mcStatus.outCounter);//总共加工花样数量:
m_pSystemManageDlg->addItem(itemStr);
itemStr = tr("Total number of embroidery: ") + QString::number(m_mcStatus.needleNum);//总刺绣针数:
m_pSystemManageDlg->addItem(itemStr);
itemStr = tr("Pattern name: ") + m_fileName;//花样名称:
m_pSystemManageDlg->addItem(itemStr);
itemStr = tr("Pattern break line num: ") + QString::number(patternBreakLineNum);//花样断线次数:
m_pSystemManageDlg->addItem(itemStr);
ParaStruct mcParaValues;
mcParaValues = g_pMachine->getMcPara();
int needleBreakNum = 0;
//机头断线次数:
itemStr = tr("Head ") + QString::number(1) + tr(" break line num: ") + QString::number(needleBreakNum);// 机头断线次数:
m_pSystemManageDlg->addItem(itemStr);
}
void MainWidgetFunction::addJournalInfoError()
{
//刷新信息
m_pSystemManageDlg->initDialog();
m_pSystemManageDlg->addListError();//读取csv列表
}
void MainWidgetFunction::addJournalInfoBreakage()
{
//刷新信息
m_pSystemManageDlg->initDialog();
m_pSystemManageDlg->addListBreakage();//读取csv列表
}
void MainWidgetFunction::addJournalInfoDebug()
{
//刷新信息
m_pSystemManageDlg->initDialog();
m_pSystemManageDlg->addListDebug();//读取csv列表
}
QString MainWidgetFunction::getCompileDateTime()
{
const char *pMonth[] = {"Jan", "Feb", "Mar", "Apr", "May", "Jun",
"Jul", "Aug", "Sep", "Oct", "Nov", "Dec"};
const char *date = __DATE__; // "mm dd yyyy" 例如: "Oct 31 2025"
const char *time = __TIME__; // "hh:mm:ss" 例如: "08:30:45"
int month = 0, year = 0, day = 0;
int hour = 0, minute = 0, second = 0;
// 解析月份
for (int i = 0; i < 12; i++) {
if (memcmp(date, pMonth[i], 3) == 0) {
month = i + 1; // 1~12
break;
}
}
// 解析日期
day = atoi(date + 4); // 日期从第4个字符开始如 " 31"
year = atoi(date + 9); // 年份从第9个字符开始如 "25"
// 解析时间
hour = atoi(time + 0); // 小时: "hh"
minute = atoi(time + 3); // 分钟: "mm"
second = atoi(time + 6); // 秒: "ss"
// 格式化输出:你可以根据需要调整格式
QString str;
str.sprintf("%02d%02d%02d.%02d%02d%02d", year, month, day, hour, minute, second);
// 输出示例: 251031.083045
return str;
}
//组成json键值对
QString MainWidgetFunction::compositionJson(QString key, QString value)
{
QString mStr="\"";//引号的字符串
QString str = mStr + key + mStr + ":" + mStr + value + mStr + ",";
return str;
}
HMILotData MainWidgetFunction::getHMILotData()
{
HMILotData lotFata;
memset(&lotFata, 0, sizeof(HMILotData));
memcpy(lotFata.HMIVerStr, getVersionStr().data(), getVersionStr().length()); // 版本信息
memcpy(lotFata.fileName, m_fileName.data(), m_fileName.length()); // 文件名称
u32 rackNum = g_pSettings->readFromIniFile("IOT/rackNumber").toInt();//机架号
lotFata.machineNumber = rackNum; // 机架号
QString deliveryTime = g_pSettings->readFromIniFile("IOT/deliveryTime").toString();//工厂预计交货时间
QByteArray arr = deliveryTime.toLocal8Bit();
memcpy(lotFata.deliveryTime, arr.data(), arr.size()); //交货日期
u16 debugProgress = g_pSettings->readFromIniFile("IOT/debugProgress").toInt();//调试进度
lotFata.debugProgress = debugProgress; //调试进度
//电机总数-先固定写为4个如果后续变动较大可把电机个数写为全局变量或从其他cpp中传参
lotFata.motorNum = 4;
return lotFata;
}
//发送数据到物联网
void MainWidgetFunction::sendDataToGateway(s16 code,s16 type)
{
QString mStr="\"";//引号的字符串
QString mcType = mStr+U00016+mStr+":"+mStr+"Emb"+mStr+",";
QString mcStr1;
mcStr1.clear();
QString mcStr2;
mcStr2.clear();
mcStr1 = mStr+"Towel"+mStr+":0,";
mcStr2 = mStr+"Coil"+mStr+":0,";
s16 towel = g_pSettings->readFromIniFile("HMI/towel").toInt();//是否有毛巾功能
s16 coil = g_pSettings->readFromIniFile("HMI/coil").toInt();//是否有缠绕功能
if(towel == 1)
{
mcStr1 = mStr+"Towel"+mStr+":1,";
}
if(coil == 1)
{
mcStr2 = mStr+"Coil"+mStr+":1,";
}
QString sensorMotorStr;
sensorMotorStr.clear();
sensorMotorStr = mStr+S00000+mStr+":1,"+mStr+S00010+mStr+":1,"+mStr+S00070+mStr+":1,"+mStr+S01000+mStr+":1,";
if(type == 0)
{
switch (code)
{
case CSV_00_CODE_1:
sensorMotorStr += mStr+S00020+mStr+":1,";
sensorMotorStr += mStr+M0003+mStr+":1,";
break;
case CSV_00_CODE_4://边框检查
case CSV_00_CODE_8://自动定软限位
sensorMotorStr += mStr+S00200+mStr+":1,";
sensorMotorStr += mStr+S00201+mStr+":1,";
sensorMotorStr += mStr+S00220+mStr+":1,";
sensorMotorStr += mStr+S00221+mStr+":1,";
sensorMotorStr += mStr+S00230+mStr+":1,";
sensorMotorStr += mStr+S00231+mStr+":1,";
sensorMotorStr += mStr+M0001+mStr+":1,";
sensorMotorStr += mStr+M0002+mStr+":1,";
break;
case CSV_00_CODE_5:
sensorMotorStr += mStr+M0004+mStr+":1,";
break;
default:
break;
}
}
else if(type == CSV_MC_TYPE_02)
{
switch (code)
{
case CSV_02_CODE_1://毛巾M轴零位
sensorMotorStr += mStr+S01020+mStr+":1,";
sensorMotorStr += mStr+M0005+mStr+":1,";
sensorMotorStr += mStr+M0006+mStr+":1,";
break;
case CSV_02_CODE_2://毛巾打环轴归零
sensorMotorStr += mStr+S01021+mStr+":1,";
sensorMotorStr += mStr+M0007+mStr+":1,";
break;
default:
break;
}
}
else if(type == CSV_MC_TYPE_03)
{
switch (code)
{
case CSV_03_CODE_1://缠绕压脚电机归零
sensorMotorStr += mStr+M0008+mStr+":1,";
sensorMotorStr += mStr+M0009+mStr+":1,";
sensorMotorStr += mStr+M0010+mStr+":1,";
break;
case CSV_03_CODE_2://缠绕锯齿电机归零
sensorMotorStr += mStr+M0011+mStr+":1,";
break;
default:
break;
}
}
int val = ((double)m_getScore / (double)m_totalScore) * 100;
//emit siShowPercentage(val);//测试物联网用
QString timeStr;
timeStr.clear();
#ifdef Q_OS_LINUX
timeStr = QString::number(QDateTime::currentDateTime().toMSecsSinceEpoch() - 28800000);//mcgs下时间差8个小时
#endif
#ifdef Q_OS_WIN
timeStr = QString::number(QDateTime::currentDateTime().toMSecsSinceEpoch());
#endif
QString lotStr;
lotStr.clear();
lotStr = "{" + mStr + QString::number(m_HMILotData.machineNumber) + "#" + mStr + ":[{" +
mStr + "ts" + mStr + ":" + timeStr + "," +
mStr + "values" + mStr + ":{\"RackNumber\":\"" + QString::number(m_HMILotData.machineNumber) + "#\"" + ","
+ mcType + mcStr1 + mcStr2 + sensorMotorStr;
QString keyStr = compositionJson(U00001, QString::number(val));
lotStr += keyStr;
lotStr.chop(1);
lotStr += "}}]}";
//qDebug()<<lotStr;
g_pLotMachine->sendLotDataToGateway(lotStr);
}
void MainWidgetFunction::setErrorCodeAndStateList(QList<ErrorCodeStateItem> list)
{
m_errorCodeAndStateItemList.clear();
m_errorCodeAndStateItemList.append(list);
}
//上电计算 关机时间 并发送给主控
void MainWidgetFunction::setShutDownTime()
{
int oldSecond = g_pSettings->readFromIniFile("DateTime/second").toInt();//上次上电的系统时间
QDateTime dateTime = QDateTime::currentDateTime(); //当前时间
int curSecond = dateTime.toTime_t();//单位为秒 //新的时间
int diff = curSecond - oldSecond;//关机秒数
if (diff >= 0)
{
}
else//小于0
{
diff = 5000*3600;
}
qDebug()<<"shutdown second"<<diff;
if(g_pMachine != NULL && oldSecond != 0)
{
g_pMachine->setShutDownTime(0, diff);//可能这个diff太大了
}
}
//设置机器状态
void MainWidgetFunction::setMcStates(MCStatus mcStatus)
{
memset((char*)&m_mcStatus,0,sizeof(MCStatus));
memcpy((char*)&m_mcStatus,(char*)&mcStatus,sizeof(MCStatus));
}
QString MainWidgetFunction::getVersionStr()
{
QString str;
if(g_emMacType == MACHINE_CUTTINGWALK
|| g_emMacType == MACHINE_GLASSFIBRE)
{
str.sprintf("GOA-CUT-V%s",VERSIONNO);
}
else
{
str.sprintf("GOA-QUI-V%s",VERSIONNO);
}
return str;
}
//将定位点或起绣点写回到文件中
void MainWidgetFunction::writePonitToFile(QString filePath,int x, int y, int flag)
{
QFileInfo fileInfo(filePath);
QString suffix = fileInfo.suffix().toUpper();//后缀大写
if(suffix == "DST")
{
DataFileDst dst;
dst.initFile(filePath);
dst.loadFile();
dst.writePointToFile(x,y,flag);
}
else if(suffix == "DSR")
{
DataFileDsr dsr;
dsr.initFile(filePath);
dsr.loadFile();
dsr.writePointToFile(x,y,flag);
}
else if(suffix == "QUI")
{
}
else if(suffix == "QUIX")
{
}
else if(suffix == "PLT")
{
}
else if(suffix == "DXF")
{
}
}
void MainWidgetFunction::writeFilePoint(QString filePath, int curX, int curY)
{
QFileInfo fileInfo(filePath);
QString suffix = fileInfo.suffix().toUpper();//后缀大写
if(suffix == "DST")
{
if(g_pCurEmbData == NULL)
{
return;
}
DataFileDst dst;
dst.initFile(filePath);
dst.loadFile();
DstHead *head = dst.getDstHead();
if(head == NULL)
{
return;
}
int left = head->left;
int front = head->front;
//旧的起始点坐标
int oldStartX = g_pCurEmbData->getBeginX();
int oldStartY = g_pCurEmbData->getBeginY();
int cx = curX - oldStartX;
int cy = curY - oldStartY;
left += cx;
front += cy;
dst.writeFileLL(left,front);
dst.writeStartPointToFile(curX,curY);
}
else if(suffix == "DSR")
{
if(g_pCurEmbData == NULL)
{
return;
}
DataFileDsr dsr;
dsr.initFile(filePath);
dsr.loadFile();
DsrHead *head = dsr.getDsrHead();
if(head == NULL)
{
return;
}
int left = head->left;
int front = head->front;
//旧的起始点坐标
int oldStartX = g_pCurEmbData->getBeginX();
int oldStartY = g_pCurEmbData->getBeginY();
int cx = curX - oldStartX;
int cy = curY - oldStartY;
left += cx;
front += cy;
dsr.writeFileLL(left,front);
dsr.writeStartPointToFile(curX,curY);
}
else if(suffix == "QUI")
{
if(g_pCurEmbData == NULL)
{
return;
}
DataFileQui qui;
qui.initFile(filePath);
qui.loadFile();
QuiFileHead *head = qui.getQuiHead();
if(head == NULL)
{
return;
}
int left = head->left*100;//因为存储时除以100了所以这里乘以100
int front = head->front*100;
//旧的起始点坐标
int oldStartX = g_pCurEmbData->getBeginX();
int oldStartY = g_pCurEmbData->getBeginY();
int cx = curX - oldStartX;
int cy = curY - oldStartY;
left += cx;
front += cy;
qui.writeFileLL(left, front, curX, curY);
}
else if(suffix == "QUIX")
{
if(g_pCurEmbData == NULL)
{
return;
}
DataFileQuix quix;
quix.initFile(filePath);
quix.loadFile();
QuixFileHead *head = quix.getQuixHead();
if(head == NULL)
{
return;
}
int left = head->left*10;
int front = head->front*10;
//旧的起始点坐标
int oldStartX = g_pCurEmbData->getBeginX();
int oldStartY = g_pCurEmbData->getBeginY();
int cx = curX - oldStartX;
int cy = curY - oldStartY;
left += cx;
front += cy;
quix.writeFileLL(left,front,curX,curY);
}
else if(suffix == "PLT")
{
}
else if(suffix == "DXF")
{
}
}
void MainWidgetFunction::writeFileLeftFrontPoint(QString filePath, int &x, int &y, int left, int front)
{
QFileInfo fileInfo(filePath);
QString suffix = fileInfo.suffix().toUpper();//后缀大写
if(suffix == "DST")
{
DataFileDst dst(filePath);
x = left + dst.getFirstPoint().x();
y = front + dst.getFirstPoint().y();
dst.writeFileLL(left,front);
dst.writeStartPointToFile(x,y);
}
else if(suffix == "DSR")
{
DataFileDsr dsr(filePath);
x = left + dsr.getFirstPoint().x();
y = front + dsr.getFirstPoint().y();
dsr.writeFileLL(left,front);
dsr.writeStartPointToFile(x,y);
}
else if(suffix == "QUI")
{
DataFileQui qui(filePath);
//第一点坐标
int firstAX = qui.getFirstPoint().x();
int firstAY = qui.getFirstPoint().y();
int minX = qui.getMinX();
int minY = qui.getMinY();
x = left + (firstAX - minX);
y = front + (firstAY - minY);
qui.writeFileLL(left,front,x,y);
}
else if(suffix == "QUIX")
{
DataFileQuix quix(filePath);
//第一点坐标
int firstAX = quix.getFirstPoint().x();
int firstAY = quix.getFirstPoint().y();
int minX = quix.getMinX();
int minY = quix.getMinY();
// int maxX = quix.getMaxX();
// int maxY = quix.getMaxY();
x = left + (firstAX - minX);
y = front + (firstAY - minY);
quix.writeFileLL(left,front,x,y);
}
else if(suffix == "PLT")
{
}
else if(suffix == "DXF")
{
}
}
void MainWidgetFunction::writeFileLeftFrontPointDoubleHead(QString filePath,int left,int front)
{
QFileInfo fileInfo(filePath);
QString suffix = fileInfo.suffix().toUpper();//后缀大写
if(suffix == "QUIX")
{
DataFileQuix quix;
//将左边前边写入数据区
quix.writeLeftFrontToFileDoubleHead(filePath,left,front);
}
}
//机器信息改变
void MainWidgetFunction::slotMCInfoChange()
{
static int fID = 0;
m_mcStatus = g_pMachine->getMcStatus();
//可使用时长
int workTime = m_mcStatus.workableTimer;
if( workTime > 0 && workTime < INT_MAX )
{
QString strTime;
QString strDay;
QString strHour;
QString strSec;
int day = workTime/(60 *24);
//使用时长不足5天就主动提示用户
if(day < 5 && fID == 0)
{
m_pPromptDlg->initDialog(PromptDialog::BTN_OK);
m_pPromptDlg->setTitleStr(tr("Prompt"));
QString str;
strDay = QString::number(workTime/(60 *24) , 10);
strHour = QString::number((workTime%(60 *24))/60 , 10) ;
strSec = QString::number(workTime%60 , 10);
strTime = strDay + " " + tr("Day") + " " + strHour + " " + tr("Hour") + " " + strSec + " " + tr("Minutes") ; // 天 小时 分钟
//机器剩余可用时间为
str = tr("The remaining available time of the machine is ") + strTime;
m_pPromptDlg->setContentStr(str);
m_pPromptDlg->exec();
//开启一个定时器隔4个小时就发一次查询机器状态
m_pTipsTimer->start();
fID++;
}
}
}
//给主控发查询机器信息
void MainWidgetFunction::onTipsTimer()
{
if (g_pMachine != NULL)
{
g_pMachine->getInfoFromMachine();
}
m_pTipsTimer->stop(); //关定时器
}
void MainWidgetFunction::slotSetDynamicIP(QString ssid)
{
if(ssid.length() <= 0)
{
m_pPromptDlg->initDialog(PromptDialog::BTN_OK);
m_pPromptDlg->setTitleStr(tr("Prompt"));
m_pPromptDlg->setContentStr(tr("ssid is empty!"));//ssid为空
m_pPromptDlg->exec();
return;
}
WordsInputDialog wordInputDlg;
wordInputDlg.wifiClean();
wordInputDlg.setTitleStr(tr("Password input"));//密码输入
wordInputDlg.setOldWordsStr("");
if(wordInputDlg.exec() == 1)
{
#ifdef Q_OS_LINUX
QString psd = wordInputDlg.getInputStr();
//base64解密
//向配置文件写入加密结果设置动态IP
QString iniPath = WIFIINIPATH;
QSettings setting(iniPath,QSettings::IniFormat);
setting.beginGroup("WIFI");
setting.setValue("default_passwd",psd.toLatin1().toBase64());
setting.setValue("default_ssid",ssid.toLatin1().toBase64());
setting.setValue("static_ip","");
setting.setValue("static_mask","");
setting.setValue("static_mode","false");
setting.endGroup();
system("sync");
m_pPromptDlg->initDialog(PromptDialog::BTN_OK_CANCEL);
m_pPromptDlg->setTitleStr(tr("Prompt"));
QString str;
str = tr("Settings require screen restart to take effect!");//设置需要重启屏幕才生效!
m_pPromptDlg->setContentStr(str);
if(m_pPromptDlg->exec() == 1)
{
system("reboot");
}
#endif
}
}
void MainWidgetFunction::slotSetStaticIP(QString ssid, QString psd,QString dnip)
{
if(ssid.length() <= 0)
{
m_pPromptDlg->initDialog(PromptDialog::BTN_OK);
m_pPromptDlg->setTitleStr(tr("Prompt"));
m_pPromptDlg->setContentStr(tr("ssid is empty!"));//ssid为空
m_pPromptDlg->exec();
return;
}
if(psd.length() <= 0){}//为了去掉编译警告
PassWordDialog passWordDlg;
QString ip;
ip.clear();
passWordDlg.setTitleStr(tr("IP input"),-1);//IP输入
passWordDlg.setShowIfVisible(true);
passWordDlg.setIpStr(dnip);
int rslt = passWordDlg.exec();
if(rslt == 1)
{
ip = passWordDlg.getInputStr();
}
#ifdef Q_OS_LINUX
if(ip.length() <= 0)
{
return;
}
//base64解密
//向配置文件写入加密结果设置静态IP
QString iniPath = WIFIINIPATH;
QSettings setting(iniPath,QSettings::IniFormat);
setting.beginGroup("WIFI");
setting.setValue("default_passwd",psd.toLatin1().toBase64());
setting.setValue("default_ssid",ssid.toLatin1().toBase64());
setting.setValue("static_ip",ip);
setting.setValue("static_mask","255.255.255.0");
setting.setValue("static_mode","true");
setting.endGroup();
system("sync");
m_pPromptDlg->initDialog(PromptDialog::BTN_OK_CANCEL);
m_pPromptDlg->setTitleStr(tr("Prompt"));
QString str;
str = tr("Settings require screen restart to take effect!");//设置需要重启屏幕才生效!
m_pPromptDlg->setContentStr(str);
if(m_pPromptDlg->exec() == 1)
{
system("reboot");
}
return;
#endif
}
void MainWidgetFunction::slotSpindleAction(int action)
{
if(g_pMachine != NULL)
{
g_pMachine->motoMove(MT_LM, action, 0);
}
}
void MainWidgetFunction::slotSpindleRotate(int angle)
{
if(g_pMachine != NULL)
{
if(g_emMacType == MACHINE_THICK_WIRING)
{
g_pMachine->manualAction(MS_TO_ANGLE,angle);
}
else
{
g_pMachine->manualAction(MT_LM,angle);
}
}
}
void MainWidgetFunction::slotRotateRotate(int angle)
{
if(g_pMachine != NULL)
{
if(g_emMacType == MACHINE_THICK_WIRING)
{
g_pMachine->manualAction(ROT_TO_ANGLE,angle);
}
else
{
g_pMachine->manualAction(MT_LRR,angle);
}
}
}
void MainWidgetFunction::slotAutoPull(int length)
{
if(g_pMachine != NULL)
{
if(g_emMacType == MACHINE_THICK_WIRING)
{
g_pMachine->manualAction(AUTO_PULL,length);
}
}
}
void MainWidgetFunction::slotSpindleResearch(int spindleTime , int spindleSpeed)
{
if(g_pMachine != NULL)
{
if(g_emMacType == MACHINE_THICK_WIRING)
{
g_pMachine->manualAction(WIRE_MS_RUN,spindleTime,spindleSpeed);
}
}
}
void MainWidgetFunction::slotReceiveLotData()
{
static int nID = 0;
//因为串口模式打开串口成功在连接的信号和槽之前,所以写以下代码表示刚建立连接就向网关发送连接符
//网口连接方式不会有此问题串口转wifi又不能检测wifi断开所以每次都发送连接符
QString mStr="\"";//引号的字符串
QString lotStr;
lotStr.clear();
#if 0
if(nID % 2 == 0)//为了让两条间隔分开,用取余做判断,否则网关收到键值对错误
{
lotStr += "{" + mStr + "device" + mStr + ":" + mStr + QString::number(m_HMILotData.machineNumber) + "#" + mStr + "}";
//如果物联网Machine 不是空
if(g_pLotMachine != NULL)
{
//相当于Machine给主板发数据
g_pLotMachine->sendLotDataToGateway(lotStr);//发送物联数据(机器编号)到网关
}
nID++;
return;
}
#endif
//emit siReceiveLotDat(); //测试物联网用
//qDebug()<<"slotReceiveLotData"; //测试物联网用
McLotData nMcLotData = g_pMachine->getMcLotData();//得到下位机的物联网数据
HMILotData nHMILotData = getHMILotData(); //得到界面要发给网关的物联网数据
QString timeStr;
timeStr.clear();
#ifdef Q_OS_LINUX
timeStr = QString::number(QDateTime::currentDateTime().toMSecsSinceEpoch() - 28800000);//mcgs下时间差8个小时
#endif
#ifdef Q_OS_WIN
timeStr = QString::number(QDateTime::currentDateTime().toMSecsSinceEpoch());
#endif
lotStr.clear();
lotStr = "{" + mStr + QString::number(m_HMILotData.machineNumber)
+ mStr + ":[{"
+ mStr + "ts" + mStr + ":" + timeStr + ","
+ mStr + "values" + mStr + ":{\"RackNumber\":\""
+ QString::number(m_HMILotData.machineNumber) + "\"" + ",";
QString keyStr;
keyStr.clear();
if(g_pLotMachine != NULL)
{
if(nID == 0)
{
keyStr = compositionJson(U00033, S0504);
}
else
{
if ((m_mcStatus.workStatus & WORK_STA_BUSY) != 0) // 下位机在执行动作
{
keyStr = compositionJson(U00033, S0505);
}
else
{
keyStr = compositionJson(U00033, S0504);
}
}
lotStr += keyStr;
//机器版本
// 界面上存的下位机数据 下位机里的数据
if(memcmp(&m_mcLotData.mBoardVerStr, &nMcLotData.mBoardVerStr, sizeof(nMcLotData.mBoardVerStr)) != 0)
{
keyStr = compositionJson(U00022, QString::fromLocal8Bit(nMcLotData.mBoardVerStr));
lotStr += keyStr;
}
//报警信息
// 界面上存的下位机数据 不等于 下位机里的数据
//这种情况应该就是主控里的数据和界面上存的不一样了
if(m_mcLotData.errorCode != nMcLotData.errorCode)
{
if ((nMcLotData.errorCode > 0 && nMcLotData.errorCode < 0x100) || nMcLotData.errorCode > 0x200)
{
QString info;
info.clear();
info = getErrStr(nMcLotData.errorCode);
//如果不是通用错误(即info为空)就从机型cpp中的错误代码查找
if(info.length() <= 0)
{
for(int i = 0; i < m_errorCodeAndStateItemList.size(); i++)
{
if(nMcLotData.errorCode == m_errorCodeAndStateItemList[i].m_code)
{
info = m_errorCodeAndStateItemList[i].m_name;
break;
}
}
}
//如果不是通用错误也不是机型cpp中的错误代码就显示未定义错误
if(info.length() <= 0)
{
QString errorCode;
errorCode.sprintf("CODE 0x%x", nMcLotData.errorCode);
info.append(tr("Undefined error,") + errorCode);//未定义错误,
}
keyStr = compositionJson(U00023, QString::number(nMcLotData.errorCode));// 原来为info,lxs修改
lotStr += keyStr;
}
}
//授权剩余时间(min)
if(m_mcLotData.workableTimer != nMcLotData.workableTimer)
{
keyStr = compositionJson(U00025, QString::number(nMcLotData.workableTimer));
lotStr += keyStr;
}
//开机时间(min)
if(m_mcLotData.bootTimer != nMcLotData.bootTimer)
{
keyStr = compositionJson(U00026, QString::number(nMcLotData.bootTimer));
lotStr += keyStr;
}
//工作时间(min)
if(m_mcLotData.workTimer != nMcLotData.workTimer)
{
keyStr = compositionJson(U00027, QString::number(nMcLotData.workTimer));
lotStr += keyStr;
}
//工作转速
if(m_mcLotData.workRpm != nMcLotData.workRpm)
{
keyStr = compositionJson(U00004, QString::number(nMcLotData.workRpm));
lotStr += keyStr;
}
//当前产量
keyStr = compositionJson(U00028, QString::number(m_mcStatus.outCounter));
lotStr += keyStr;
//累计产量
if(m_mcLotData.totalOutCounter != nMcLotData.totalOutCounter)
{
keyStr = compositionJson(U00014, QString::number(nMcLotData.totalOutCounter));
lotStr += keyStr;
}
//产量设定
if(m_mcLotData.expectedOutput != nMcLotData.expectedOutput)
{
keyStr = compositionJson(U00029, QString::number(nMcLotData.expectedOutput));
lotStr += keyStr;
}
//设备(机器)ID
if(memcmp(&m_mcLotData.boardId, &nMcLotData.boardId, sizeof(nMcLotData.boardId)) != 0)
{
keyStr = compositionJson(U00017, QString::fromLocal8Bit(nMcLotData.boardId));
lotStr += keyStr;
}
//主轴零位
if(m_mcLotData.spindleZeroSta != nMcLotData.spindleZeroSta)
{
keyStr = compositionJson(U00034, QString::number(nMcLotData.spindleZeroSta));
lotStr += keyStr;
}
//主轴角度
if(m_mcLotData.spindleAngle != nMcLotData.spindleAngle)
{
keyStr = compositionJson(U00035, QString::number(nMcLotData.spindleAngle));
lotStr += keyStr;
}
//电机1坐标(绣框X坐标)
if(m_mcLotData.motosPos[1] != nMcLotData.motosPos[1])
{
keyStr = compositionJson(U00036, QString::number(nMcLotData.motosPos[1]));
lotStr += keyStr;
}
//电机2坐标(绣框Y坐标)
if(m_mcLotData.motosPos[2] != nMcLotData.motosPos[2])
{
keyStr = compositionJson(U00037, QString::number(nMcLotData.motosPos[2]));
lotStr += keyStr;
}
//8对应m_mcLotData.sensorSignal的数量
s16 sensorNum = 0;
for(int i = 0; i < 8; i++)
{
for(int j = 0; j < 32; j++)//一个u32是32位
{
if(((m_mcLotData.sensorSignal[i] >> j) & 1) != ((nMcLotData.sensorSignal[i] >> j) & 1))
{
QString sensorName;
sensorName.clear();
switch (i*32+j)
{
case 0:sensorName = U00038;break;//启动按钮1
case 1:sensorName = U00039;break;//暂停按钮1
case 2:sensorName = U00040;break;//点动按钮1
case 3:sensorName = U00041;break;//主框架X零位
case 4:sensorName = U00042;break;//主框架Y零位
case 5:sensorName = U00043;break;//主框架X负限位
case 6:sensorName = U00044;break;//主框架Y负限位
case 7:sensorName = U00045;break;//主框架X正限位
case 8:sensorName = U00046;break;//主框架Y正限位
case 9:sensorName = U00047;break;//剪刀回位
default:sensorName.clear();break;
}
if(sensorName.length() > 0)
{
keyStr = compositionJson(sensorName, QString::number((nMcLotData.sensorSignal[i] >> j) & 1));
lotStr += keyStr;
sensorNum++;
}
}
}
}
//传感器总数
// keyStr = compositionJson(U000103, QString::number(nMcLotData.sensonNumbers));//原为Qstring::number(sensorNum)
// lotStr += keyStr;
// 机器配置
// if(m_mcLotData.machinecfg != nMcLotData.machinecfg)
// {
// keyStr = compositionJson(U000120, QString::number((nMcLotData.machinecfg >> 0) & 1)+ "#");//勾线模式
// lotStr += keyStr;
// keyStr = compositionJson(U000121, QString::number((nMcLotData.machinecfg >>1) & 1)+ "#");//锁头模式
// lotStr += keyStr;
// }
// 缝纫机头个数
if(m_mcLotData.sewHeadNumbers != nMcLotData.sewHeadNumbers)
{
keyStr = compositionJson(U000122, QString::number(nMcLotData.sewHeadNumbers)+ "#");
lotStr += keyStr;
}
// 绣花机头个数
if(m_mcLotData.embHeadNumbers != nMcLotData.embHeadNumbers)
{
keyStr = compositionJson(U000123, QString::number(nMcLotData.embHeadNumbers));
lotStr += keyStr;
}
//绣花机针个数
if(m_mcLotData.embneedleNumbers != nMcLotData.embneedleNumbers)
{
keyStr = compositionJson(U000124, QString::number(nMcLotData.embneedleNumbers));
lotStr += keyStr;
}
//冲孔机头个数
if(m_mcLotData.punchHeadNumbers != nMcLotData.punchHeadNumbers)
{
keyStr = compositionJson(U000125, QString::number(nMcLotData.punchHeadNumbers));
lotStr += keyStr;
}
//冲孔机针个数
if(m_mcLotData.punchneedleNumbers != nMcLotData.punchneedleNumbers)
{
keyStr = compositionJson(U000126, QString::number(nMcLotData.punchneedleNumbers));
lotStr += keyStr;
}
//界面版本
//memcmp(s1,s2,n)就是比较s1和s2的前n个字节的ascII码值
if(memcmp(&m_HMILotData.HMIVerStr, &nHMILotData.HMIVerStr, sizeof(nHMILotData.HMIVerStr)) != 0)
{
keyStr = compositionJson(U00030, QString::fromLocal8Bit(nHMILotData.HMIVerStr));
lotStr += keyStr;
}
//机架号
if(m_HMILotData.machineNumber != nHMILotData.machineNumber)
{
keyStr = compositionJson(U00018, QString::number(nHMILotData.machineNumber) + "#");
lotStr += keyStr;
}
//电机总数
//界面上存的电机数 不等于 界面上存的电机数 的时候就往下发数据
if(m_HMILotData.motorNum != nHMILotData.motorNum)
{
keyStr = compositionJson(U000102, QString::number(nHMILotData.motorNum));
lotStr += keyStr;
}
//调试进度
if(m_HMILotData.debugProgress != nHMILotData.debugProgress)
{
keyStr = compositionJson(U000119, QString::number(nHMILotData.debugProgress));
lotStr += keyStr;
}
//交付日期
if(memcmp(&m_HMILotData.deliveryTime, &nHMILotData.deliveryTime, sizeof(nHMILotData.deliveryTime)) != 0)
{
keyStr = compositionJson(U000118, QString::fromLocal8Bit(nHMILotData.deliveryTime));
lotStr += keyStr;
}
// workProgress = ;
// //机器工作进度 -rq
// if(m_HMILotData.workProgress != nHMILotData.workProgress)
// {
// keyStr = compositionJson(U000118, QString::numbert(nHMILotData.workProgress));
// lotStr += keyStr;
// }
#if(0)
//当前加工文件名称
if(memcmp(&m_HMILotData.fileName, &nHMILotData.fileName, sizeof(nHMILotData.fileName)) != 0)
{
keyStr = compositionJson(U00031, QString::fromLocal8Bit(nHMILotData.fileName));
lotStr += keyStr;
}
#endif
if(lotStr.at(lotStr.length()-1) == ',')//去除最后一个逗号
{
lotStr.chop(1); //删除字符串右边n个字符
}
lotStr += "}}]}";
// qDebug()<< "g_pLotMachine->sendLotDataToGateway:" <<lotStr;
//发送物联数据到网关
g_pLotMachine->sendLotDataToGateway(lotStr);
}
m_mcLotData = nMcLotData;
m_HMILotData = nHMILotData;
nID++;
}
//执行网关数据动作
void MainWidgetFunction::slotRunLotDataAction(QString str)
{
int cmd = str.toInt();
if(cmd == 1)//点动
{
funSpindleJog();
}
else if(cmd == 2)//剪线
{
funManualTrim();
}
}
void MainWidgetFunction::slotTransProgress(u8 fileType, int send, int total)
{
int csend = 0;
int ctotal = 0;
if(fileType == FILE_TYPE_PGM)//主控升级文件
{
csend += g_pMachine->getTotalSendNum();
ctotal += g_pMachine->getTotalPacketNum();
if (csend < 0 && ctotal < 0)
{
// 失败
m_pPromptDlg->initDialog(PromptDialog::BTN_UCANCEL);
m_pPromptDlg->setTitleStr(tr("MCUpgrade"));//主控升级
//m_pPromptDlg->setButtonUCancelStr(tr("Close"));//关闭
m_pPromptDlg->setContentProcessStr(tr("Failed to upgrade the main control system!")); //主控系统升级失败!
}
else if (csend == 0 && ctotal == 0)
{
// 成功
m_pPromptDlg->initDialog(PromptDialog::BTN_RESTART);
m_pPromptDlg->setTitleStr(tr("MCUpgrade"));//主控升级
m_pPromptDlg->setContentProcessStr(tr("The main control system has been successed, waiting until machine restart"));
int seconds = 10;//界面重启时间改成10秒
for(int i = 0; i < seconds; i++)
{
QString str = QString(tr("System will restart %1 s later")).arg(seconds-i);//系统将在 %1 秒后重启
m_pPromptDlg->setContentProcessStr(str);
g_pMachine->sleep(1);
}
#ifdef Q_OS_WIN
qApp->exit();
#endif
#ifdef Q_OS_LINUX
system("reboot");
#endif
m_pPromptDlg->hide();
}
else if(csend >= 0 && csend <= ctotal)
{
m_pPromptDlg->initDialog(PromptDialog::BTN_UCANCEL);
m_pPromptDlg->setTitleStr(tr("MCUpgrade"));//主控升级
m_pPromptDlg->setContentProcessStr(tr("Main control system is being upgraded...")); //主控系统升级中...
//m_pPromptDlg->setButtonUCancelStr(tr("Cancel"));//取消
m_pPromptDlg->setRange(0, total);
m_pPromptDlg->setValue(send);
m_pPromptDlg->show();
QCoreApplication::processEvents(QEventLoop::AllEvents);
}
else
{
m_pPromptDlg->hide();
}
}
else
{
if (send < 0 && total < 0)
{
// 失败
m_pPromptDlg->initDialog(PromptDialog::BTN_UCANCEL);
if(fileType == FILE_TYPE_DAT)//花样数据文件(边框刺绣文件)
{
m_pPromptDlg->setTitleStr(tr("Prompt"));
//m_pPromptDlg->setButtonUCancelStr(tr("Close"));//关闭
m_pPromptDlg->setContentStr(tr("Failed to send data file!")); //发送数据文件失败!
}
}
else if (send == 0 && total == 0)
{
if(fileType == FILE_TYPE_DAT)//花样数据文件
{
// 成功
m_pPromptDlg->initDialog(PromptDialog::BTN_OK);
m_pPromptDlg->setTitleStr(tr("Prompt"));//主控升级
m_pPromptDlg->setContentProcessStr(tr("The data file is send successfully!")); //数据文件发送成功!
}
m_pPromptDlg->hide();
}
else if(send >= 0 && send <= total)
{
m_pPromptDlg->initDialog(PromptDialog::BTN_UCANCEL);
if(fileType == FILE_TYPE_DAT)//花样数据文件
{
m_pPromptDlg->setTitleStr(tr("Prompt"));
m_pPromptDlg->setContentProcessStr(tr("Data file sending...")); //数据文件发送中...
}
//m_pPromptDlg->setButtonUCancelStr(tr("Cancel"));//取消
m_pPromptDlg->setRange(0, total);
m_pPromptDlg->setValue(send);
m_pPromptDlg->show();
QCoreApplication::processEvents(QEventLoop::AllEvents);
}
else
{
m_pPromptDlg->hide();
}
}
}
//导出csv文件到U盘
void MainWidgetFunction::slotCsvExport(int logType)
{
QString usbPath = detectUsb();//U盘路径
if(usbPath.length() <= 0)
{
//优盘不存在
m_pPromptDlg->initDialog(PromptDialog::BTN_OK);
m_pPromptDlg->setTitleStr(tr("Prompt"));
QString str;
str = tr("USB flash drive is not detected!");//未检测到优盘!
m_pPromptDlg->setContentStr(str);
m_pPromptDlg->exec();
return;
}
QDir apppath(qApp->applicationDirPath());//D:/work/workQT/QUILTING/Windows/debug
QString newName = usbPath + apppath.separator();//G
QString timeStr = QDateTime::currentDateTime().toString("_yyMMdd_hhmmss");//时间日期 _230215_144121
QString astr;
if(logType == TYPE_ERROR)
{
astr = "error";
}
else if(logType == TYPE_BREAK)
{
astr = "break";
}
else if(logType == TYPE_DEBUGINFO)
{
astr = "debuginfo";
}
QString newFileName = newName+astr+timeStr+".csv";
//csv文件路径
QString csvfile;
if(logType == TYPE_ERROR)
{
csvfile = apppath.path() + apppath.separator() + CSV_ERROR;
}
else if(logType == TYPE_BREAK)
{
csvfile = apppath.path() + apppath.separator() + CSV_BREAK;
}
else if(logType == TYPE_DEBUGINFO)
{
csvfile = apppath.path() + apppath.separator() + CSV_DEBUGINFO;
}
QString csvfilePath = QDir(csvfile).absolutePath();//为了将"\"变为"/"
bool bl = QFile::copy(csvfilePath,newFileName);
//强制写入
//linux下写入文件或者拷贝、删除文件的情况
#ifdef Q_OS_LINUX
system("sync");
#endif
QString str;
if(bl == true)
{
str = tr("Journal exported successfully!");//文件日志导出成功!
}
else
{
str = tr("Journal exported failed!");//文件日志导出失败!
}
m_pPromptDlg->initDialog(PromptDialog::BTN_OK);
m_pPromptDlg->setTitleStr(tr("Prompt"));
m_pPromptDlg->setContentStr(str);
m_pPromptDlg->exec();
return;
}
void MainWidgetFunction::slotClearJournal()
{
QDir apppath(qApp->applicationDirPath());
QString csvfile = apppath.path() + apppath.separator();
g_pSettings->fileClear(csvfile+CSV_ERROR);//清空文件日志内容,但文件还在
g_pSettings->fileClear(csvfile+CSV_BREAK);//清空文件日志内容,但文件还在
// 刷新文件日志界面信息
m_pSystemManageDlg->initDialog();
m_pSystemManageDlg->exec(JOURNAL);//显示窗体
}
void MainWidgetFunction::slotRefreshWifiList()
{
QStringList wifiStrList;
wifiStrList.clear();
s16 rel = refreshWifiList(wifiStrList,1);
if(rel > 0)
{
m_pSystemManageDlg->setItemList(wifiStrList);
}
}
//清空产量统计
void MainWidgetFunction::slotClearProductStatis()
{
if(g_pMachine != NULL)
{
g_pMachine->resetOutput();//清除产量统计(主控计数)
}
emit siClearPatternBreakLineNum();
addProductStatisInfo(0);//花版断线次数清零
m_pSystemManageDlg->refreshUi();
}
//用户登录
void MainWidgetFunction::slotUserLogin(s16 user)
{
// QTextCodec *cod = QTextCodec::codecForLocale();
PassWordDialog passWordDlg;
QString str("");
if(user == repair)
{
passWordDlg.setTitleStr(tr("Password input *"));//密码输入
}
else if(user == root)
{
passWordDlg.setTitleStr(tr("Password input **"));//密码输入
}
else if(user == resetpara)
{
passWordDlg.setTitleStr(tr("Password input ****"));//密码输入
}
int rslt = passWordDlg.exec();
if(rslt == 1)
{
str = passWordDlg.getInputStr();
if(user == repair)
{
if (str == PASSWORD_ONE)
{
g_emUser = repair;
emit siSetButtonUserLogo(1);
}
else
{
m_pPromptDlg->initDialog(PromptDialog::BTN_OK);
m_pPromptDlg->setTitleStr(tr("Prompt"));
m_pPromptDlg->setContentStr(tr("The password is wrong,please re-enter!"));//密码错误,请重新输入密码!
m_pPromptDlg->exec();
return;
}
}
else if(user == root)
{
if (str == PASSWORD_TWO)
{
g_emUser = root;
emit siSetButtonUserLogo(2);
}
else
{
m_pPromptDlg->initDialog(PromptDialog::BTN_OK);
m_pPromptDlg->setTitleStr(tr("Prompt"));
m_pPromptDlg->setContentStr(tr("The password is wrong,please re-enter!"));//密码错误,请重新输入密码!
m_pPromptDlg->exec();
return;
}
}
else if(user == resetpara)
{
if (str == PASSWORD_RESETPARA)
{
m_pPromptDlg->initDialog(PromptDialog::BTN_OK);
m_pPromptDlg->setTitleStr(tr("Prompt"));
g_emUser = resetpara;
m_pPromptDlg->setContentStr(tr("reset parameters password successfully logged in!"));//重置参数密码成功登入!
m_pPromptDlg->exec();
emit siSetButtonUserLogo(2);
}
else
{
m_pPromptDlg->initDialog(PromptDialog::BTN_OK);
m_pPromptDlg->setTitleStr(tr("Prompt"));
m_pPromptDlg->setContentStr(tr("The password is wrong,please re-enter!"));//密码错误,请重新输入密码!
m_pPromptDlg->exec();
return;
}
}
}
}
//界面解密
void MainWidgetFunction::slotHMIDecrypt(QString id)
{
// 获取网卡号并输入序列号
m_pPromptDlg->initDialog(PromptDialog::BTN_HMI_DECRYPT);
m_pPromptDlg->setTitleStr(tr("HMI decrypt"));
m_pPromptDlg->setContentHMIDecryptShow(id);
if(m_pPromptDlg->exec() == 1)
{
QString inputStr = m_pPromptDlg->getInputPassword();
QByteArray inputAry = inputStr.toLatin1();
QString idStr = m_pPromptDlg->getNetworkCardID();
QByteArray idAry = idStr.toLatin1();
char inputBuf[20]; //输入的注册码
u8 idBuf[12]; //id号16进制字符串
memset(inputBuf,0,sizeof(inputBuf));
memset(idBuf,0,sizeof(idBuf));
memcpy(inputBuf,inputAry.data(),inputStr.toLatin1().length());
memcpy(idBuf,idAry.data(),idStr.toLatin1().length());
char outputBuf[20]; //生成的注册码
int num,i;
u8 anBuf[16],chanBuf[16];
memset(anBuf,0,sizeof(anBuf));
memset(chanBuf,0,sizeof(chanBuf));
memset(outputBuf,0,sizeof(outputBuf));
for(i = 0; i < 4; i++)
{
if((inputBuf[i] >= '0') && (inputBuf[i] <= '9'))
anBuf[i]=inputBuf[i] - '0';
else if((inputBuf[i] >= 'a') && (inputBuf[i] <= 'f'))
anBuf[i]=inputBuf[i] - 'a' + 10;
else if((inputBuf[i] >= 'A') && (inputBuf[i] <= 'F'))
anBuf[i]=inputBuf[i] - 'A' + 10;
else
break;
}
for(u16 i = 0; i < sizeof(idBuf);)
{
if((idBuf[i] >= '0') && (idBuf[i] <= '9'))
idBuf[i]=idBuf[i] - '0';
else if((idBuf[i] >= 'a') && (idBuf[i] <= 'f'))
idBuf[i]=idBuf[i] - 'a' + 10;
else if((idBuf[i] >= 'A') && (idBuf[i] <= 'F'))
idBuf[i]=idBuf[i] - 'A' + 10;
if((idBuf[i+1] >= '0') && (idBuf[i+1] <= '9'))
idBuf[i+1]=idBuf[i+1] - '0';
else if((idBuf[i+1] >= 'a') && (idBuf[i+1] <= 'f'))
idBuf[i+1]=idBuf[i+1] - 'a' + 10;
else if((idBuf[i+1] >= 'A') && (idBuf[i+1] <= 'F'))
idBuf[i+1]=idBuf[i+1] - 'A' + 10;
i += 2;
}
num=((u8)(anBuf[0]*16 + anBuf[1]))*256 + (u8)(anBuf[2]*16 + anBuf[3]);
anBuf[4]=(u8)(((idBuf[0] << 4) | idBuf[1]) + num) >> 4;
anBuf[5]=(u8)(((idBuf[0] << 4) | idBuf[1]) + num) & 0x0f;
anBuf[6]=(u8)(((idBuf[2] << 4) | idBuf[3]) + num) >> 4;
anBuf[7]=(u8)(((idBuf[2] << 4) | idBuf[3]) + num) & 0x0f;
anBuf[8]=(u8)(((idBuf[4] << 4) | idBuf[5]) + num) >> 4;
anBuf[9]=(u8)(((idBuf[4] << 4) | idBuf[5]) + num) & 0x0f;
anBuf[10]=(u8)(((idBuf[6] << 4) | idBuf[7]) + num) >> 4;
anBuf[11]=(u8)(((idBuf[6] << 4) | idBuf[7]) + num) & 0x0f;
anBuf[12]=(u8)(((idBuf[8] << 4) | idBuf[9]) + num) >> 4;
anBuf[13]=(u8)(((idBuf[8] << 4) | idBuf[9]) + num) & 0x0f;
anBuf[14]=(u8)(((idBuf[10] << 4) | idBuf[11]) + num) >> 4;
anBuf[15]=(u8)(((idBuf[10] << 4) | idBuf[11]) + num) & 0x0f;
chanBuf[0]=(u8)(anBuf[0]*16 + anBuf[1]);
chanBuf[1]=(u8)(anBuf[2]*16 + anBuf[3]);
chanBuf[2]=(u8)(anBuf[7]*16 + anBuf[9]);
chanBuf[3]=(u8)(anBuf[6]*16 + anBuf[8]);
chanBuf[4]=(u8)(anBuf[10]*16 + anBuf[15]);
chanBuf[5]=(u8)(anBuf[5]*16 + anBuf[11]);
chanBuf[6]=(u8)(anBuf[13]*16 + anBuf[4]);
chanBuf[7]=(u8)(anBuf[14]*16 + anBuf[12]);
//id号长度大于12以此类推
//chanbuf[8]=(u8)(anbuf[17]*16 + anbuf[16]);
//chanbuf[9]=(u8)(anbuf[19]*16 + anbuf[18]);
//chanbuf[10]=(u8)(anbuf[21]*16 + anbuf[20]);
sprintf(outputBuf,"%02x%02x%02x%02x%02x%02x%02x%02x",chanBuf[0],
chanBuf[1],chanBuf[2],chanBuf[3],chanBuf[4],chanBuf[5],chanBuf[6],chanBuf[7]);
QDir apppath(qApp->applicationDirPath());
QString HMIDecryptConfigfile;
HMIDecryptConfigfile = apppath.path() + apppath.separator() + "HMIDecryptConfig.ini";
QSettings iniSetting(HMIDecryptConfigfile, QSettings::IniFormat);
if( 0 == memcmp(inputBuf, outputBuf, sizeof(inputBuf)) ) // 比较两个缓存区内容是否相同(等于0相等)
{
m_pPromptDlg->initDialog(PromptDialog::BTN_OK);
m_pPromptDlg->setTitleStr(tr("Prompt"));
QString str;
str = tr("The interface program is licensed, and then take effect after restarting, please restart manually!");//界面程序授权成功,重启后生效,请手动重启!
m_pPromptDlg->setContentStr(str);
m_pPromptDlg->exec();
iniSetting.setValue("HMIDecrypt/ifdecrypt",1);
return;
}
else
{
m_pPromptDlg->initDialog(PromptDialog::BTN_OK);
m_pPromptDlg->setTitleStr(tr("Prompt"));
QString str;
str = tr("Password error, interface program authorization failed!");//密码错误,界面程序授权失败!
m_pPromptDlg->setContentStr(str);
m_pPromptDlg->exec();
//iniSetting.setValue("HMIDecrypt/ifdecrypt",0);
return;
}
}
}
//超级用户退出程序
void MainWidgetFunction::slotExitApp()
{
//是否退出程序
m_pPromptDlg->initDialog(PromptDialog::BTN_OK_CANCEL);
m_pPromptDlg->setTitleStr(tr("Prompt"));//提示
QString str;
str = tr("Whether to exit the program?");//是否退出程序?
m_pPromptDlg->setContentStr(str);
if(m_pPromptDlg->exec() == 1)
{
QApplication* app;
app->exit(0);
}
}
//超级用户版本恢复
void MainWidgetFunction::slotVerRecovery()
{
//是否版本恢复
m_pPromptDlg->initDialog(PromptDialog::BTN_OK_CANCEL);
m_pPromptDlg->setTitleStr(tr("Prompt"));//提示
QString str;
str = tr("Is the version restored?");//是否版本恢复?
m_pPromptDlg->setContentStr(str);
if(m_pPromptDlg->exec() == 1)
{
}
}
//超级用户修改一级密码
void MainWidgetFunction::slotChangePassword()
{
m_pPromptDlg->initDialog(PromptDialog::BTN_CHANGE_PASSWORD);//修改一级密码界面
m_pPromptDlg->setTitleStr(tr("Modify the first level password"));
m_pPromptDlg->setContentChangePasswordShow();
if(m_pPromptDlg->exec() == 1)//点击确认按钮,确认修改密码
{
/*点击确定,首先检查编辑框中是否为空,然后检查两次输入的密码是否一致,
一致就将原密码和新密码*/
QString n_pwd = m_pPromptDlg->getInputNewPassword();//新密码
QString rn_pwd = m_pPromptDlg->getInputConfirmPassword();//确认新密码
if(n_pwd != rn_pwd)
{
//新密码和确认密码不一致
m_pPromptDlg->initDialog(PromptDialog::BTN_OK);
m_pPromptDlg->setTitleStr(tr("Prompt"));
QString str;
str = tr("The two passwords are inconsistent!");//新密码和确认密码不一致!
m_pPromptDlg->setContentStr(str);
m_pPromptDlg->exec();
}
else
{
g_passwordOne = n_pwd;//新的密码变成一级密码
m_pPromptDlg->initDialog(PromptDialog::BTN_OK);
m_pPromptDlg->setTitleStr(tr("Prompt"));
QString str;
str = tr("Password reset complete!");//密码修改成功!
m_pPromptDlg->setContentStr(str);
m_pPromptDlg->exec();
g_pSettings->writeOneToIniFile("HMI/passwordOne",g_passwordOne);
}
}
}
//删除执行目录下的config.ini
void MainWidgetFunction::slotDeleteIni()
{
m_pPromptDlg->initDialog(PromptDialog::BTN_OK_CANCEL);
m_pPromptDlg->setTitleStr(tr("Prompt"));//提示
QString str;
str = tr("Do you delete the configuration file?");//是否删除配置文件?
m_pPromptDlg->setContentStr(str);
if(m_pPromptDlg->exec() == 1)
{
QDir apppath(qApp->applicationDirPath());
//配置文件路径
QString configfile;
configfile = apppath.path() + apppath.separator() + "config.ini";
QFile::remove(configfile);
QString HMIConfigfile;
HMIConfigfile = apppath.path() + apppath.separator() + "HMIConfig.ini";
QFile::remove(HMIConfigfile);
m_pPromptDlg->initDialog(PromptDialog::BTN_OK_CANCEL);
m_pPromptDlg->setTitleStr(tr("Prompt"));
QString str;
str = tr("The settings take effect after restarting the interface!");//重启界面后设置生效!
m_pPromptDlg->setContentStr(str);
if(m_pPromptDlg->exec() == 1)
{
#ifdef Q_OS_WIN
qApp->exit();
#endif
#ifdef Q_OS_LINUX
system("reboot");
#endif
}
}
}
//导入csv文件
void MainWidgetFunction::slotImportCSV()
{
QString usbPath = detectUsb();
if(usbPath.length() <= 0)
{
//优盘不存在
m_pPromptDlg->initDialog(PromptDialog::BTN_OK);
m_pPromptDlg->setTitleStr(tr("Prompt"));
QString str;
str = tr("USB flash drive is not detected!");//未检测到优盘!
m_pPromptDlg->setContentStr(str);
m_pPromptDlg->exec();
return;
}
QString sPath = usbPath + CSV_PROGRESS;
QDir apppath(qApp->applicationDirPath());
QString tPath= apppath.absolutePath() + apppath.separator() + CSV_PROGRESS;
QFile::remove(tPath);
QFile::copy(sPath,tPath);
#ifdef Q_OS_LINUX
system("sync");
#endif
//成功导入csv文件
m_pPromptDlg->initDialog(PromptDialog::BTN_OK);
m_pPromptDlg->setTitleStr(tr("Prompt"));
QString str;
str = tr("Import csv file successful!");//成功导入csv文件
m_pPromptDlg->setContentStr(str);
m_pPromptDlg->exec();
}
//删除csv文件
void MainWidgetFunction::slotDeleteCSV()
{
m_pPromptDlg->initDialog(PromptDialog::BTN_OK_CANCEL);
m_pPromptDlg->setTitleStr(tr("Prompt"));//提示
QString str;
str = tr("Do you delete the csv file?");//是否删除csv文件
m_pPromptDlg->setContentStr(str);
if(m_pPromptDlg->exec() == 1)
{
QDir apppath(qApp->applicationDirPath());
//配置文件路径
QString csvfile;
csvfile = apppath.path() + apppath.separator() + CSV_PROGRESS;
QFile::remove(csvfile);
#ifdef Q_OS_LINUX
system("sync");
#endif
}
}
//重置csv文件
void MainWidgetFunction::slotResetCSV()
{
m_csvFileStrList.clear();
QDir apppath(qApp->applicationDirPath());
QString path = apppath.path() + apppath.separator() + CSV_PROGRESS;
QFile file(path);
if(!file.open(QIODevice::ReadOnly | QIODevice::Text))
{
qDebug() << "Open file failed!";
return;
}
QTextStream out(&file);
out.setCodec("GB2312"); //支持读取中文信息
//遍历行
for(int i = 0; !out.atEnd(); i++)
{
QString strLine = out.readLine();
if(strLine.size() <= 0)
{
continue;
}
QStringList strlist = strLine.split(",", QString::SkipEmptyParts); //根据","分隔开每行的列
if(COLUMN_PRESSNUM < strlist.size())
{
if(i != 0)
{
strlist[COLUMN_PRESSNUM] = "0";
}
QString str;
for(int m = 0; m < strlist.size(); m++)
{
str.append(strlist[m]);
if(m != strlist.size() - 1)
{
str.append(",");
}
}
m_csvFileStrList.append(str);
}
}
file.close();
QTextCodec * gbkCodec = QTextCodec::codecForName("GBK");
QByteArray array;
array.clear();
for(int j = 0; j < m_csvFileStrList.size(); j++)
{
QString str = m_csvFileStrList[j];
QByteArray ary;
if (gbkCodec != NULL)
{
ary = gbkCodec->fromUnicode(str);
}
else
{
ary = str.toLocal8Bit();
}
array.append(ary);
if(j != m_csvFileStrList.size() - 1)
{
array.append('\n');
}
}
QFile wfile(path);
if (wfile.open(QIODevice::WriteOnly | QIODevice::Truncate | QIODevice::Text))
{
wfile.write(array);
#ifdef Q_OS_LINUX
system("sync");
#endif
}
wfile.close();
QTextCodec::setCodecForLocale(QTextCodec::codecForName("UTF-8"));
QString iniPath = apppath.path() + apppath.separator() + "config.ini";
QSettings setting(iniPath, QSettings::IniFormat);
setting.setValue("Progress/getScore",0);
m_getScore = 0;
//成功导入csv文件
m_pPromptDlg->initDialog(PromptDialog::BTN_OK);
m_pPromptDlg->setTitleStr(tr("Prompt"));
QString str;
str = tr("Reset succeeded!");//重置成功!
m_pPromptDlg->setContentStr(str);
m_pPromptDlg->exec();
}
//界面调试模式,调试模式时不需要密码 -rq
void MainWidgetFunction::slotDebugMode()
{
m_pPromptDlg->initDialog(PromptDialog::BTN_OK_CANCEL);
m_pPromptDlg->setTitleStr(tr("Prompt"));//提示
QString str;
if (g_emDebugMode == nodebugMode)
{
str = tr("Whether to enter debug mode?");//是否进入调试模式?
}
else
{
str = tr("whether to exit debug mode?");//是否退出调试模式?
}
m_pPromptDlg->setContentStr(str);
if(m_pPromptDlg->exec() == 1)
{
if (g_emDebugMode == nodebugMode)
{
g_emDebugMode = debugMode;
}
else //退出了调试模式
{
g_emDebugMode = nodebugMode;//全局的
m_pPromptDlg->initDialog(PromptDialog::BTN_OK);
m_pPromptDlg->setTitleStr(tr("Prompt"));//提示
QString str2;
str2 = tr("Please log in to super user again!");//请重新登录超级用户!
m_pPromptDlg->setContentStr(str2);
if(m_pPromptDlg->exec() == 1) //退出超级用户界面
{
emit siCloseRootPara();//关闭超级用户参数界面
}
}
g_pSettings->writeOneToIniFile("HMI/debugMode",g_emDebugMode);//写入配置文件
emit siDebugState();//主界面接收信号,调试模式时,界面不需要密码,界面标题变红
}
}
//超级用户花样总清
void MainWidgetFunction::slotPatternClear()
{
//是否花样总清
m_pPromptDlg->initDialog(PromptDialog::BTN_OK_CANCEL);
m_pPromptDlg->setTitleStr(tr("Prompt"));//提示
QString str;
str = tr("Is the pattern clear?");//是否花样总清?
m_pPromptDlg->setContentStr(str);
if(m_pPromptDlg->exec() == 1)
{ //删除文件
QDir apppath(qApp->applicationDirPath());
QString targetDir = apppath.absolutePath() + apppath.separator();
QString tPath = targetDir + PATTERNPATH;
deleteDir(tPath);
}
}
void MainWidgetFunction:: deleteDir(QString tPath)
{
QDir dir(tPath);//项目中所保存的路径
dir.setFilter(QDir::AllEntries | QDir::NoDotAndDotDot);//设置过滤
QFileInfoList fileList = dir.entryInfoList();// 获取所有的文件信息
foreach (QFileInfo file,fileList)//遍历文件信息
{
if (file.isFile()) //是文件,删除,文件夹也要删除
{
file.dir().remove(file.fileName());
}
else //递归删除
{
deleteDir(file.absoluteFilePath());
}
}
dir.rmpath(dir.absolutePath());
//检测是否删除
QDir dir1(tPath);
dir1.setFilter(QDir::AllEntries | QDir::NoDotAndDotDot);//设置过滤
QFileInfoList fileList_1 = dir1.entryInfoList();//获取所有的文件信息
if(fileList_1.size() == 0)
{
m_pPromptDlg->initDialog(PromptDialog::BTN_OK);
m_pPromptDlg->setTitleStr(tr("Prompt"));
m_pPromptDlg->setContentStr(tr("Delete complete!"));//删除完成!
m_pPromptDlg->exec();
emit siClearPattern();//清空当前选择的花样
return;
}
else
{
deleteDir(tPath);
// m_pPromptDlg->initDialog(PromptDialog::BTN_OK);
// m_pPromptDlg->setTitleStr(tr("Prompt"));
// m_pPromptDlg->setContentStr(tr("Not cleaned up!"));//未清理完成!
// m_pPromptDlg->exec();
// return;
}
}
void MainWidgetFunction::funSimulatedSewing()
{
if(g_pMachine == NULL)
{
return;
}
m_pPromptDlg->initDialog(PromptDialog::BTN_OK_CANCEL);
m_pPromptDlg->setTitleStr(tr("Simulated working"));//模拟工作
QString str = tr("Whether to switch working status");//是否切换工作状态
m_pPromptDlg->setContentStr(str);
u32 workStatus = g_pMachine->getMcStatus().workStatus;
if ((workStatus & WORK_STA_SIMULATE) == WORK_STA_SIMULATE) //模拟工作
{
if(m_pPromptDlg->exec() == 1)
{
g_pMachine->setNormalWork();
}
}
else
{
if(m_pPromptDlg->exec() == 1)
{
g_pMachine->setSimulateWork();
}
}
}
void MainWidgetFunction::manualThreadCutting()
{
m_pPromptDlg->initDialog(PromptDialog::BTN_OK_CANCEL);
m_pPromptDlg->setTitleStr(tr("Manual thread cutting"));//手动剪线
QString str;
str = tr("The machine is about to move, please pay attention to safety!");//机器即将运动,请注意安全!
m_pPromptDlg->setContentStr(str);
if(m_pPromptDlg->exec() == 1)
{
if(g_pMachine != NULL)
{
g_pMachine->cutThreadByhand();
}
}
}
void MainWidgetFunction::makeup(int mode)
{
m_pPromptDlg->initDialog(PromptDialog::BTN_OK_CANCEL);
m_pPromptDlg->setTitleStr(tr("makeup sewing"));//补缝
QString str;
str = tr("The machine is about to move, please pay attention to safety!");//机器即将运动,请注意安全!
m_pPromptDlg->setContentStr(str);
if(m_pPromptDlg->exec() == 1)
{
if(g_pMachine != NULL)
{
g_pMachine->makeup(mode);
}
}
}
void MainWidgetFunction::headLiftUpDown()
{
PromptDialog promptDialog;
promptDialog.initDialog(PromptDialog::BTN_OK_CANCEL);
promptDialog.setTitleStr(tr("Head lifting and lowering"));//机头升降
QString str;
str = tr("The machine is about to move, please pay attention to safety!");//机器即将运动,请注意安全!
promptDialog.setContentStr(str);
if(promptDialog.exec() == 1)
{
if(g_pMachine != NULL)
{
//粗线布线机
if(g_emMacType == MACHINE_THICK_WIRING)
{
g_pMachine->ThicklineSewHeadLiftUpDown();
}
else
{
g_pMachine->sewHeadLiftUpDown();
}
}
}
}
void MainWidgetFunction::headLifting()
{
PromptDialog promptDialog;
promptDialog.initDialog(PromptDialog::BTN_OK_CANCEL);
promptDialog.setTitleStr(tr("Head lifting"));//机头上升
QString str;
str = tr("The machine is about to move, please pay attention to safety!");//机器即将运动,请注意安全!
promptDialog.setContentStr(str);
if(promptDialog.exec() == 1)
{
if(g_pMachine != NULL)
{
g_pMachine->sewHeadLiftUp();
}
}
}
void MainWidgetFunction::headLowering()
{
PromptDialog promptDialog;
promptDialog.initDialog(PromptDialog::BTN_OK_CANCEL);
promptDialog.setTitleStr(tr("Head lowering"));//机头下降
QString str;
str = tr("The machine is about to move, please pay attention to safety!");//机器即将运动,请注意安全!
promptDialog.setContentStr(str);
if(promptDialog.exec() == 1)
{
if(g_pMachine != NULL)
{
g_pMachine->sewHeadLiftDown();
}
}
}
void MainWidgetFunction::headLifting2()
{
PromptDialog promptDialog;
promptDialog.initDialog(PromptDialog::BTN_OK_CANCEL);
promptDialog.setTitleStr(tr("Head lifting") + "2");//机头上升2
QString str;
str = tr("The machine is about to move, please pay attention to safety!");//机器即将运动,请注意安全!
promptDialog.setContentStr(str);
if(promptDialog.exec() == 1)
{
if(g_pMachine != NULL)
{
g_pMachine->sewHeadLiftUp2();
}
}
}
void MainWidgetFunction::headLowering2()
{
PromptDialog promptDialog;
promptDialog.initDialog(PromptDialog::BTN_OK_CANCEL);
promptDialog.setTitleStr(tr("Head lowering") + "2");//机头下降2
QString str;
str = tr("The machine is about to move, please pay attention to safety!");//机器即将运动,请注意安全!
promptDialog.setContentStr(str);
if(promptDialog.exec() == 1)
{
if(g_pMachine != NULL)
{
g_pMachine->sewHeadLiftDown2();
}
}
}
void MainWidgetFunction::sewNeedlesShuttleReset()
{
PromptDialog promptDialog;
promptDialog.initDialog(PromptDialog::BTN_OK_CANCEL);
promptDialog.setTitleStr(tr("Sewing needle and shuttle reset"));//缝纫针梭复位
QString str;
str = tr("The machine is about to move, please pay attention to safety!");//机器即将运动,请注意安全!
promptDialog.setContentStr(str);
if(promptDialog.exec() == 1)
{
if(g_pMachine != NULL)
{
g_pMachine->msReset();
}
}
}
void MainWidgetFunction::funSetAnchorPoint(QString filePath,int x,int y,int showFlag, bool allToReset, bool isSendPatternHead)
{
if(filePath.length() <= 0)
{
return;
}
m_pPromptDlg->initDialog(PromptDialog::BTN_OK_CANCEL);
m_pPromptDlg->setTitleStr(tr("Set anchor point"));//定定位点
QString str = tr("Whether to set the current point as the start point?");//是否将当前点设置为定位点?
m_pPromptDlg->setContentStr(str);
int setFlag = 1;
if(showFlag == 1)
{
setFlag = m_pPromptDlg->exec();
}
if(setFlag == 1)
{
if(g_pCurEmbData != NULL)
{
g_pCurEmbData->setAnchorPosition(x,y);//将主控当前机头存在ds16头文件里
//改变中间数据ds16的头文件
}
if(isSendPatternHead)
sendPatternHead(filePath);//发送花样ds16头文件
//每次点击选择花样的时候才会生成ds16数据其他时候就是给下位机发头文件
//dsr,dst整个文件->中间数据->ds16
writePonitToFile(filePath,x,y,1); //将新的起始点机头写回到dstdsr源文件中
//流程复位
if(allToReset)
g_pMachine->allToReset();
slotCalMachineProgress(CSV_00_CODE_2);
}
}
//边走边裁
void MainWidgetFunction::funSetAnchorPointForCut(QString filePath,int x, int y,s16 showFlag,s16 saveFlag)
{
if(showFlag == 1)
{
m_pPromptDlg->initDialog(PromptDialog::BTN_OK_CANCEL);
m_pPromptDlg->setTitleStr(tr("Set anchor point"));//定定位点
QString str = tr("Whether to set the current point as the anchor point?");//是否将当前点设置为定位点?
m_pPromptDlg->setContentStr(str);
if(m_pPromptDlg->exec() != 1)
return;
}
if(saveFlag != 0)
{
//写入配置文件
g_pSettings->writeOneToIniFile("FlatPanel/AnchorPointX", x);
g_pSettings->writeOneToIniFile("FlatPanel/AnchorPointY", y);
}
if(g_pCurEmbData != NULL && filePath.length() > 0)
{
g_pCurEmbData->setAnchorPosition(x,y);//设置定位点
g_pCurEmbData->setStartPositionFromLeftFront(x,y);
#if(0)
//根据定位点计算起始点
int maxX = g_pCurEmbData->getMaxX();
//int minX = g_pCurEmbData->getMinX();
int begX = g_pCurEmbData->getBeginX();
int cx = x - (maxX - begX);
int maxY = g_pCurEmbData->getMaxY();
//int minY = g_pCurEmbData->getMinY();
int begY = g_pCurEmbData->getBeginY();
int cy = y - (maxY - begY);
g_pCurEmbData->setStartPosition(cx,cy);//设置起始点
#endif
sendPatternHead(filePath);//发送花样ds16头文件
}
}
void MainWidgetFunction::funBackAnchorPoint()
{
m_pPromptDlg->initDialog(PromptDialog::BTN_OK_CANCEL);
m_pPromptDlg->setTitleStr(tr("Back anchor point"));//回定位点
QString str;
str = tr("The machine is about to move, please pay attention to safety!");//机器即将运动,请注意安全!
m_pPromptDlg->setContentStr(str);
if(m_pPromptDlg->exec() == 1)
{
if(g_pMachine != NULL)
{
g_pMachine->gotoAnchor();
slotCalMachineProgress(CSV_00_CODE_3);
}
}
}
void MainWidgetFunction::funBackShuttlePos()
{
m_pPromptDlg->initDialog(PromptDialog::BTN_OK_CANCEL);
m_pPromptDlg->setTitleStr(tr("Back shuttle pos"));//回换梭位
QString str;
str = tr("The machine is about to move, please pay attention to safety!");//机器即将运动,请注意安全!
m_pPromptDlg->setContentStr(str);
if(m_pPromptDlg->exec() == 1)
{
if(g_pMachine != NULL)
{
g_pMachine->gotoShuttlePos();
}
}
}
void MainWidgetFunction::funNeedleShuttleReset()
{
m_pPromptDlg->initDialog(PromptDialog::BTN_OK_CANCEL);
m_pPromptDlg->setTitleStr(tr("Needle shuttle adjust"));//针梭校对
QString str;
str = tr("The machine is about to move, please pay attention to safety!");//机器即将运动,请注意安全!
m_pPromptDlg->setContentStr(str);
if(m_pPromptDlg->exec() == 1)
{
if(g_pMachine != NULL)
{
if(g_emMacType == MACHINE_GLASSFIBRE || g_emMacType == MACHINE_CUTTINGWALK)
g_pMachine->msAdjust(MAINSHAFT_ADJUST_GLASS, 0);
else
g_pMachine->msAdjust(MAINSHAFT_ADJUST, 0);
}
}
}
void MainWidgetFunction::funKnifeCollect()
{
PromptDialog PromptDlg;
PromptDlg.initDialog(PromptDialog::BTN_OK_CANCEL);
PromptDlg.setTitleStr(tr("Knife pressure collection"));//刀压采集
QString str;
str = tr("The machine is about to move, please pay attention to safety!");//机器即将运动,请注意安全!
PromptDlg.setContentStr(str);
if(PromptDlg.exec() == 1)
{
if(g_pMachine != NULL)
{
g_pMachine->manualAction(KNIFE_COLLECT);
}else
{
qDebug()<<"erro no machine";
}
}
}
void MainWidgetFunction::funKnifeTest()
{
m_pPromptDlg->initDialog(PromptDialog::BTN_KNIFE_PRESSURE);
m_pPromptDlg->setTitleStr(tr("Knife pressure test"));//刀压测试
m_pPromptDlg->exec();
}
void MainWidgetFunction::funSetKnifeTestPos()
{
if(promptBox(tr("Set the position for tool pressure detection")) != 1)//设置刀压检测位置
return;
if(g_pMachine != NULL)
{
g_pMachine->manualAction(SET_KNIFETEST_POS);
}
}
void MainWidgetFunction::funCrossCut()
{
if(promptBox(tr("Cross cutting")) != 1)//横切
return;
if(g_pMachine != NULL)
{
g_pMachine->manualAction(CROSS_CUT);
}
}
void MainWidgetFunction::funFanArea()
{
m_pPromptDlg->initDialog(PromptDialog::BTN_FAN_AREA);
m_pPromptDlg->setTitleStr(tr("Fan area"));//风机区域
m_pPromptDlg->exec();
}
void MainWidgetFunction::funPenUpOrDown(int def, s16 val)
{
if(val == 0)
{
if(g_pMachine != NULL)
{
g_pMachine->outputCtrl(def, DOWN_CLOSE_OFF, 0);
}
}
else if(val == 1)
{
if(g_pMachine != NULL)
{
g_pMachine->outputCtrl(def, UP_OPEN_ON, 0);
}
}
}
void MainWidgetFunction::funBackToCuttringPoint()
{
m_pPromptDlg->initDialog(PromptDialog::BTN_OK_CANCEL);
m_pPromptDlg->setTitleStr(tr("Back to Cuttring"));//回切割点
QString str;
str = tr("The machine is about to move, please pay attention to safety!");//机器即将运动,请注意安全!
m_pPromptDlg->setContentStr(str);
if(m_pPromptDlg->exec() != 1) return;
if(g_pMachine !=NULL)
{
//从配置文件中读取切割点
int x = g_pSettings->readFromIniFile("FlatPanel/AnchorPointX").toInt();
int y = g_pSettings->readFromIniFile("FlatPanel/AnchorPointY").toInt();
g_pMachine->moveFrameTo(x,y);
}
}
void MainWidgetFunction::funResetAnchorPoint(QString filePath, DataFilePos pos)
{
if(filePath.length() <= 0)
{
return;
}
funSetAnchorPointForCut(filePath,pos.anchorX,pos.anchorY,-1,1);
}
void MainWidgetFunction::funBoardLowPosition()
{
if(!promptBox(tr("Flip board low position")))// 翻板到低位
return;
if(g_pMachine != NULL)
{
g_pMachine->manualAction(MOTO_LOW_POS);
}
}
void MainWidgetFunction::funBoardCenterPosition()
{
if(!promptBox(tr("Flip board center position")))// 翻板到中位
return;
if(g_pMachine != NULL)
{
g_pMachine->manualAction(MOTO_MID_POS);
}
}
void MainWidgetFunction::funResetAll()
{
if(!promptBox(tr("Reset All")))// 翻板到中位
return;
if(g_pMachine != NULL)
{
g_pMachine->manualAction(MT_MANUAL_A1);
}
}
void MainWidgetFunction::funOneClickMaterialPulling()
{
if(!promptBox(tr("One click material pulling")))// 一键拉料
return;
if(g_pMachine != NULL)
{
g_pMachine->manualAction(MT_MANUAL_A2);
}
}
void MainWidgetFunction::funOneClickCrossCutting()
{
if(!promptBox(tr("One click cross cutting")))// 一键横切
return;
if(g_pMachine != NULL)
{
g_pMachine->manualAction(MT_MANUAL_A3);
}
}
void MainWidgetFunction::funBottomLineClearingCount()
{
if(!promptBox(tr("Bottom line clearing count")))// 底线清空计数
return;
if(g_pMachine != NULL)
{
g_pMachine->manualAction(MT_MANUAL_A4);
}
}
void MainWidgetFunction::funPullSta()
{
if(!promptBox(tr("Enter the material pulling state")))// 进入拉料状态
return;
if(g_pMachine != NULL)
{
g_pMachine->manualAction(CTB_INTO_PULL_STA);
}
}
void MainWidgetFunction::funFullAutoCrossCutting()
{
if(!promptBox(tr("One click cross cutting")))// 一键横切
return;
if(g_pMachine != NULL)
{
g_pMachine->manualAction(CTB_ONEKEY_CROSSCUT);
}
}
void MainWidgetFunction::funSewSta()
{
if(!promptBox(tr("Enter the material pulling state")))// 进入拉料状态
return;
if(g_pMachine != NULL)
{
g_pMachine->manualAction(CTB_INTO_SEW_STA);
}
}
void MainWidgetFunction::funThickWiringmac(int funEnum)
{
QString str;
int funType = -1;
switch (funEnum) {
case FUN_MS_TO_ANGLE:
str = tr("Spindle to specified angle");//主轴去指定角度
funType = MS_TO_ANGLE;
break;
case FUN_WIRE_MS_RUN:
str = tr("Spindle grinding machine");//主轴研车
funType = WIRE_MS_RUN;
break;
case FUN_ROT_TO_ANGLE:
str = tr("Rotate the motor to the specified angle");//旋转电机去指定角度
funType = ROT_TO_ANGLE;
break;
case FUN_AUTO_PULL:
str = tr("Automatic material pulling");//自动拉料
funType = AUTO_PULL;
break;
case FUN_CUT_UD:
str = tr("Cut the bottom surface line");//剪底面线
funType = CUT_UD;
break;
case FUN_CUT_WIRE:
str = tr("Cutting resistance wire");//剪电阻丝
funType = CUT_WIRE;
break;
case FUN_GOTO_PULLPOS:
str = tr("Starting point of pull back material");//回拉料起始点
funType = GOTO_PULLPOS;
break;
case FUN_JAW_WORK:
str = tr("Working status of fabric clamping");//夹布工作状态
funType = JAW_WORK;
break;
case FUN_JAW_FEED:
str = tr("Cloth loading status");//夹布上料状态
funType = JAW_FEED;
break;
case FUN_ZIGZAG_POS1:
str = tr("To swing position 1");//去摆动位1
funType = ZIGZAG_POS1;
break;
case FUN_ZIGZAG_POS2:
str = tr("Go to swing position 2");//去摆动位2
funType = ZIGZAG_POS2;
break;
case FUN_YPB_MOVE:
str = tr("Manual material pulling");//手动拉料
funType = YPB_MOVE;
break;
case FUN_AUTO_CHANGE_ONE_SHUT:
str = tr("Automatically switch to another shuttle");//自动换一个梭
funType = AUTO_CHANGE_ONE_SHUT;
break;
case FUN_INSTALL_FIRST_BOBBIN:
str = tr("Install the first shuttle shell");//安装第一个梭壳
funType = INSTALL_FIRST_BOBBIN;
break;
case FUN_SHUT_FROM_PLATE_TO_HEAD:
str = tr("Take the rotary shuttle from the machine head to the shuttle disc");//将旋梭从机头拿到梭盘
funType = SHUT_FROM_PLATE_TO_HEAD;
break;
case FUN_SHUT_FROM_HEAD_TO_PLATE:
str = tr("Take the rotary shuttle from the machine head to the shuttle disc");//将旋梭从机头拿到梭盘
funType = SHUT_FROM_HEAD_TO_PLATE;
break;
case FUN_SHUT_INTO_TAKE_PLATE:
str = tr("Entering the state of replacing the shuttle disk");//进入更换梭盘状态
funType = SHUT_INTO_TAKE_PLATE ;
break;
case FUN_SHUT_INTO_INDX_STA:
str = tr("Entering sewing mode");//进入缝纫状态
funType = SHUT_INTO_INDX_STA;
break;
case FUN_SHUT_FEED_STATE:
str = tr("Entering feed mode");//进入送料状态
funType = SHUT_FEED_STATE;
break;
case FUN_SHUT_BACK_STATE:
str = tr("Entering take back mode");//进入收料状态
funType = SHUT_BACK_STATE;
break;
default:
break;
}
if(promptBox(str) != 1)//设置被动刀旋转位置
return;
if((g_pMachine != NULL) && (funType != -1))
{
g_pMachine->manualAction(funType);
}
}
/**
* @brief 机器运动提示框
* @param title
* @return
*/
int MainWidgetFunction::promptBox(QString title)
{
m_pPromptDlg->initDialog(PromptDialog::BTN_OK_CANCEL);
m_pPromptDlg->setTitleStr(title);
QString str;
str = tr("The machine is about to move, please pay attention to safety!");//机器即将运动,请注意安全!
m_pPromptDlg->setContentStr(str);
return m_pPromptDlg->exec();
}
//win下关机按钮
void MainWidgetFunction::funShutDown()
{
//是否关闭计算机
m_pPromptDlg->initDialog(PromptDialog::BTN_OK_CANCEL);
m_pPromptDlg->setTitleStr(tr("Prompt"));//提示
QString str;
str = tr("Whether to shut down the computer?");//是否关闭计算机?
m_pPromptDlg->setContentStr(str);
if(m_pPromptDlg->exec() == 1)
{
system("shutdown -s -t 00");//电脑关机
}
}
//自动换一个梭
void MainWidgetFunction::funChangeOneShuttle()
{
m_pPromptDlg->initDialog(PromptDialog::BTN_OK_CANCEL);
m_pPromptDlg->setTitleStr(tr("Prompt"));//提示
QString str;
str = tr("Whether to set to change a shuttle automatically?");//是否设置自动换一个梭?
m_pPromptDlg->setContentStr(str);
if(m_pPromptDlg->exec() == 1)
{
if(g_pMachine != NULL)
{
g_pMachine->changeOneShuttle();
}
}
}
// 安装第一个梭壳
void MainWidgetFunction::InstallTheFirstShuttleShell()
{
m_pPromptDlg->initDialog(PromptDialog::BTN_OK_CANCEL);
m_pPromptDlg->setTitleStr(tr("Prompt"));//提示
QString str;
str = tr("Whether to set to the first shuttle shell installed?");//是否安装第一个梭壳?
m_pPromptDlg->setContentStr(str);
if(m_pPromptDlg->exec() == 1)
{
if(g_pMachine != NULL)
{
g_pMachine->installShuttle();
}
}
}
// 将旋梭从梭盘拿到机头
void MainWidgetFunction::ShuttleFromTrayToHead()
{
m_pPromptDlg->initDialog(PromptDialog::BTN_OK_CANCEL);
m_pPromptDlg->setTitleStr(tr("Prompt"));//提示
QString str;
str = tr("Whether to take the rotary shuttle from the shuttle tray to the machine head?");//是否将旋梭从梭盘拿到机头?
m_pPromptDlg->setContentStr(str);
if(m_pPromptDlg->exec() == 1)
{
if(g_pMachine != NULL)
{
g_pMachine->shuttleToHead();
}
}
}
// 将旋梭从机头拿到梭盘
void MainWidgetFunction::ShuttleFromHeadToTray()
{
m_pPromptDlg->initDialog(PromptDialog::BTN_OK_CANCEL);
m_pPromptDlg->setTitleStr(tr("Prompt"));//提示
QString str;
str = tr("Whether to take the rotary shuttle from the machine head to the shuttle tray?");//是否将旋梭从机头拿到梭盘?
m_pPromptDlg->setContentStr(str);
if(m_pPromptDlg->exec() == 1)
{
if(g_pMachine != NULL)
{
g_pMachine->headToShuttle();
}
}
}
// 改变弹窗位置
void MainWidgetFunction::moveDlgPos(void)
{
m_pPromptDlg->move((GLB_SCR_WIGHT*getFactoryX()-m_pPromptDlg->width())/2+g_mainWidgetPos.x(),(GLB_SCR_HEIGHT*getFactoryY()-m_pPromptDlg->height())/2+g_mainWidgetPos.y());
m_pSystemManageDlg->move(g_mainWidgetPos.x(),g_mainWidgetPos.y());
m_pDebugInfoDlg->move(101*getFactoryX()+g_mainWidgetPos.x(),36*getFactoryX()+g_mainWidgetPos.y());
}
void MainWidgetFunction::funAllMtZero()
{
m_pPromptDlg->initDialog(PromptDialog::BTN_OK_CANCEL);
m_pPromptDlg->setTitleStr(tr("Spindle motor to zero"));//主轴电机归零
QString str = tr("The machine is about to move, please pay attention to safety!");//机器即将运动,请注意安全!
m_pPromptDlg->setContentStr(str);
if((m_pPromptDlg->exec() == 1) && (g_pMachine != NULL))
{
g_pMachine->motoToZero(MT_LM);
}
}
//启动工作
void MainWidgetFunction::funStartWork()
{
m_pPromptDlg->initDialog(PromptDialog::BTN_OK_CANCEL);
m_pPromptDlg->setTitleStr(tr("Start work"));//启动工作
QString str = tr("The machine is about to move, please pay attention to safety!");//机器即将运动,请注意安全!
m_pPromptDlg->setContentStr(str);
if((m_pPromptDlg->exec() == 1) && (g_pMachine != NULL))
{
g_pMachine->startWork();
}
}
//暂停工作
void MainWidgetFunction::funPauseWork()
{
if(g_pMachine != NULL)
{
g_pMachine->pauseWork();
}
}
//主轴去勾线位
void MainWidgetFunction::funHookPos()
{
m_pPromptDlg->initDialog(PromptDialog::BTN_OK_CANCEL);
m_pPromptDlg->setTitleStr(tr("Hook position"));//主轴去勾线位
QString str = tr("The machine is about to move, please pay attention to safety!");//机器即将运动,请注意安全!
m_pPromptDlg->setContentStr(str);
if((m_pPromptDlg->exec() == 1) && (g_pMachine != NULL))
{
g_pMachine->spindleHookPos(MAIN_TO_CUSP);
}
}
//主轴去停车位
void MainWidgetFunction::funParkPos()
{
m_pPromptDlg->initDialog(PromptDialog::BTN_OK_CANCEL);
m_pPromptDlg->setTitleStr(tr("Park position"));//主轴去停车位
QString str = tr("The machine is about to move, please pay attention to safety!");//机器即将运动,请注意安全!
m_pPromptDlg->setContentStr(str);
if((m_pPromptDlg->exec() == 1) && (g_pMachine != NULL))
{
g_pMachine->spindleParkPos(MAIN_TO_STOP);
}
}
void MainWidgetFunction::funAllMtG()
{
m_pPromptDlg->initDialog(PromptDialog::BTN_OK_CANCEL);
m_pPromptDlg->setTitleStr(tr("AllSpindleHookLines"));//所有主轴勾线
QString str = tr("The machine is about to move, please pay attention to safety!");//机器即将运动,请注意安全!
m_pPromptDlg->setContentStr(str);
if((m_pPromptDlg->exec() == 1) && (g_pMachine != NULL))
{
g_pMachine->motoToZero(MT_ALLG);
}
}
void MainWidgetFunction::funAllMtM()
{
m_pPromptDlg->initDialog(PromptDialog::BTN_OK_CANCEL);
m_pPromptDlg->setTitleStr(tr("AllSpindleJogs"));//所有主轴点动
QString str = tr("The machine is about to move, please pay attention to safety!");//机器即将运动,请注意安全!
m_pPromptDlg->setContentStr(str);
if((m_pPromptDlg->exec() == 1) && (g_pMachine != NULL))
{
g_pMachine->motoToZero(MT_ALLM);
}
}
void MainWidgetFunction::funAllMainShaftRun()
{
if(g_emMacType == MACHINE_THICK_WIRING)
{
m_pPromptDlg->initDialog(PromptDialog::BTN_SPINDLE_GRANDE);
m_pPromptDlg->setTitleStr(tr("AllMainShaftRun"));//所有主轴研车
m_pPromptDlg->exec();
}
else
{
m_pPromptDlg->initDialog(PromptDialog::BTN_OK_CANCEL);
m_pPromptDlg->setTitleStr(tr("AllMainShaftRun")); // 所有主轴研车
QString str = tr("The machine is about to move, please pay attention to safety!");//机器即将运动,请注意安全!
m_pPromptDlg->setContentStr(str);
if((m_pPromptDlg->exec() == 1) && (g_pMachine != NULL))
{
g_pMachine->manualAction(ALL_MS_RUN);
}
}
}
// 粗线布线机针梭校对
void MainWidgetFunction::ThicklinefunMainshaftAdjust()
{
m_pPromptDlg->initDialog(PromptDialog::BTN_OK_CANCEL);
m_pPromptDlg->setTitleStr(tr("NeedleShuttleProofreading")); // 针梭校对
QString str = tr("The machine is about to move, please pay attention to safety!");//机器即将运动,请注意安全!
m_pPromptDlg->setContentStr(str);
if((m_pPromptDlg->exec() == 1) && (g_pMachine != NULL))
{
g_pMachine->manualAction(MAINSHAFT_ADJUST);
}
}
//自动拉料
void MainWidgetFunction::AutomaticMaterialPull()
{
m_pPromptDlg->initDialog(PromptDialog::BTN_AUTOMATIC_PULLMA);
m_pPromptDlg->setTitleStr(tr("Automatic material pulling"));//自动拉料
m_pPromptDlg->exec();
// m_pPromptDlg->initDialog(PromptDialog::BTN_OK_CANCEL);
// m_pPromptDlg->setTitleStr(tr("Automatic material pulling")); // 自动拉料
// QString str = tr("The machine is about to move, please pay attention to safety!");//机器即将运动,请注意安全!
// m_pPromptDlg->setContentStr(str);
// if((m_pPromptDlg->exec() == 1) && (g_pMachine != NULL))
// {
// g_pMachine->manualAction(AUTO_PULL);
// }
}
//剪底面线
void MainWidgetFunction::CutBottomLine()
{
m_pPromptDlg->initDialog(PromptDialog::BTN_OK_CANCEL);
m_pPromptDlg->setTitleStr(tr("Cut the bottom surface line")); // 剪底面线
QString str = tr("The machine is about to move, please pay attention to safety!");//机器即将运动,请注意安全!
m_pPromptDlg->setContentStr(str);
if((m_pPromptDlg->exec() == 1) && (g_pMachine != NULL))
{
g_pMachine->manualAction(CUT_UD);
}
}
//剪电阻丝
void MainWidgetFunction::CutResistanceWire()
{
m_pPromptDlg->initDialog(PromptDialog::BTN_OK_CANCEL);
m_pPromptDlg->setTitleStr(tr("Cutting resistance wire")); // 剪电阻丝
QString str = tr("The machine is about to move, please pay attention to safety!");//机器即将运动,请注意安全!
m_pPromptDlg->setContentStr(str);
if((m_pPromptDlg->exec() == 1) && (g_pMachine != NULL))
{
g_pMachine->manualAction(CUT_WIRE);
}
}
//回拉料起始点
void MainWidgetFunction::StartPointOfBackMaterial()
{
m_pPromptDlg->initDialog(PromptDialog::BTN_OK_CANCEL);
m_pPromptDlg->setTitleStr(tr("Starting point of pull back material")); // 回拉料起始点
QString str = tr("The machine is about to move, please pay attention to safety!");//机器即将运动,请注意安全!
m_pPromptDlg->setContentStr(str);
if((m_pPromptDlg->exec() == 1) && (g_pMachine != NULL))
{
g_pMachine->manualAction(GOTO_PULLPOS);
}
}
// 夹布工作状态
void MainWidgetFunction::WorkStatusOfClamp()
{
m_pPromptDlg->initDialog(PromptDialog::BTN_OK_CANCEL);
m_pPromptDlg->setTitleStr(tr("Working status of fabric clamping")); // 夹布工作状态
QString str = tr("The machine is about to move, please pay attention to safety!");//机器即将运动,请注意安全!
m_pPromptDlg->setContentStr(str);
if((m_pPromptDlg->exec() == 1) && (g_pMachine != NULL))
{
g_pMachine->manualAction(JAW_WORK);
}
}
// 夹布上料状态
void MainWidgetFunction::ClothStatus()
{
m_pPromptDlg->initDialog(PromptDialog::BTN_OK_CANCEL);
m_pPromptDlg->setTitleStr(tr("Cloth loading status")); // 夹布上料状态
QString str = tr("The machine is about to move, please pay attention to safety!");//机器即将运动,请注意安全!
m_pPromptDlg->setContentStr(str);
if((m_pPromptDlg->exec() == 1) && (g_pMachine != NULL))
{
g_pMachine->manualAction(JAW_FEED);
}
}
// 去摆动位1
void MainWidgetFunction::SwingPositionOne()
{
m_pPromptDlg->initDialog(PromptDialog::BTN_OK_CANCEL);
m_pPromptDlg->setTitleStr(tr("To swing position 1")); // 去摆动位1
QString str = tr("The machine is about to move, please pay attention to safety!");//机器即将运动,请注意安全!
m_pPromptDlg->setContentStr(str);
if((m_pPromptDlg->exec() == 1) && (g_pMachine != NULL))
{
g_pMachine->manualAction(ZIGZAG_POS1);
}
}
// 去摆动位2
void MainWidgetFunction::SwingPositionTwo()
{
m_pPromptDlg->initDialog(PromptDialog::BTN_OK_CANCEL);
m_pPromptDlg->setTitleStr(tr("To swing position 2")); // 去摆动位2
QString str = tr("The machine is about to move, please pay attention to safety!");//机器即将运动,请注意安全!
m_pPromptDlg->setContentStr(str);
if((m_pPromptDlg->exec() == 1) && (g_pMachine != NULL))
{
g_pMachine->manualAction(ZIGZAG_POS2);
}
}
// 手动拉料
void MainWidgetFunction::ManualMaterial()
{
m_pPromptDlg->initDialog(PromptDialog::BTN_OK_CANCEL);
m_pPromptDlg->setTitleStr(tr("Manual material pulling")); // 手动拉料
QString str = tr("The machine is about to move, please pay attention to safety!");//机器即将运动,请注意安全!
m_pPromptDlg->setContentStr(str);
if((m_pPromptDlg->exec() == 1) && (g_pMachine != NULL))
{
g_pMachine->manualAction(YPB_MOVE);
}
}
// 进入更换梭盘状态
void MainWidgetFunction::ShuttleState()
{
m_pPromptDlg->initDialog(PromptDialog::BTN_OK_CANCEL);
m_pPromptDlg->setTitleStr(tr("Prompt"));//提示
QString str;
str = tr("Whether to entering the state of replacing the shuttle disk?");
m_pPromptDlg->setContentStr(str);
if(m_pPromptDlg->exec() == 1)
{
if(g_pMachine != NULL)
{
g_pMachine->manualAction(SHUT_INTO_TAKE_PLATE);
}
}
}
// 进入缝纫状态
void MainWidgetFunction::SewState()
{
m_pPromptDlg->initDialog(PromptDialog::BTN_OK_CANCEL);
m_pPromptDlg->setTitleStr(tr("Prompt"));//提示
m_pPromptDlg->setContentStr(tr("Whether to entering the state of sewing mode?"));//是否进入进入缝纫状态?
if(m_pPromptDlg->exec() == 1)
{
if(g_pMachine != NULL)
{
g_pMachine->manualAction(SHUT_INTO_TAKE_PLATE);
}
}
}
// 进入送料状态
void MainWidgetFunction::FeedState()
{
m_pPromptDlg->initDialog(PromptDialog::BTN_OK_CANCEL);
m_pPromptDlg->setTitleStr(tr("Prompt"));//提示
m_pPromptDlg->setContentStr(tr("Have you entered the feeding state?"));//是否进入进入送料状态?
if(m_pPromptDlg->exec() == 1)
{
if(g_pMachine != NULL)
{
g_pMachine->manualAction(SHUT_FEED_STATE);
}
}
}
// 进入收料状态
void MainWidgetFunction::BackState()
{
m_pPromptDlg->initDialog(PromptDialog::BTN_OK_CANCEL);
m_pPromptDlg->setTitleStr(tr("Prompt"));//提示
QString str;
str = tr("Have you entered the receiving state?");//是否进入收料状态?
m_pPromptDlg->setContentStr(str);
if(m_pPromptDlg->exec() == 1)
{
if(g_pMachine != NULL)
{
g_pMachine->manualAction(SHUT_BACK_STATE);
}
}
}
// 梭芯底线显示
//根据换梭芯提醒功能来决定具体使用哪个参数,如果选择1或3,按针数计数,当前梭芯底线剩余量就等于底线长度计数/换梭针数计数得到的百分比
//如果选择2按片数计数,当前梭芯底线剩余量就等于底线片数计数/换梭片数计数得到的百分比
//如果选择0不提醒,就按照1按针数计数处理
void MainWidgetFunction::ShuttleBottemLine()
{
int funtion = g_pMachine->getWkPara().buf[70]; //换梭芯提醒功能, 0, 不启用该功能; 1, 按针度计数延迟提醒; 2, 按片数计数; 3, 按长度立刻提醒; 默认0
int quantityNeedle = g_pMachine->getWkPara().buf[71]; //换梭针数计数
int quantityPiece = g_pMachine->getWkPara().buf[72]; //换梭片数计数
int bottomLength = m_mcStatus.btrdLength; // 底线长度计数
int bottomPiece = m_mcStatus.btrdPics; // 底线片数计数
int remainShuttle = m_mcStatus.motosPos4; //剩余梭芯数量
int NowBottom = 0; //梭芯底线剩余量
//除数不能为零,如果其中有一个为零则返回
if(quantityPiece == 0 || quantityNeedle == 0)
{
return ;
}
else
{
if(remainShuttle > 8 || remainShuttle < 0)
{
return ;
}
else
{
if(funtion == 2)
{
NowBottom = (bottomPiece*100)/quantityPiece;
}
else
{
NowBottom = (bottomLength*100)/quantityNeedle;
}
}
}
m_shuttleDlg->showShuttlenumber(remainShuttle, NowBottom);
if(m_shuttleDlg->exec() == 1)
{
if(g_pMachine != NULL)
{
}
}
// m_pPromptDlg->initDialog(PromptDialog::BTN_OK_CANCEL);
// m_pPromptDlg->setTitleStr(tr("Prompt"));//提示
// QString str;
// str = tr("Whether to entering the state of back mode?");//是否进入收料状态?
// m_pPromptDlg->setContentStr(str);
// if(m_pPromptDlg->exec() == 1)
// {
// if(g_pMachine != NULL)
// {
// g_pMachine->manualAction(SHUT_BACK_STATE);
// }
// }
}