6875 lines
224 KiB
C++
6875 lines
224 KiB
C++
#include "mainwidgetfunction.h"
|
||
|
||
MainWidgetFunction::MainWidgetFunction(QObject *parent) :
|
||
QObject(parent),
|
||
m_pPromptDlg(NULL),
|
||
m_pSystemManageDlg(NULL),
|
||
m_pBrokenLineDialog(NULL),
|
||
m_pDebugInfoDlg(NULL)
|
||
{
|
||
initialize();
|
||
initializeLotData();//初始化物联网数据
|
||
|
||
m_pPromptDlg = new PromptDialog();
|
||
m_pPromptDlg->hide();
|
||
|
||
connect(m_pPromptDlg, SIGNAL(siEmbSpindleAction(int)),this, SLOT(slotEmbSpindleAction(int)));
|
||
connect(m_pPromptDlg, SIGNAL(siEmbSpindleRotate(int)),this, SLOT(slotEmbSpindleRotate(int)));
|
||
connect(m_pPromptDlg, SIGNAL(siElasticCtrlPos(int)),this, SLOT(slotElasticCtrlPos(int)));
|
||
connect(m_pPromptDlg, SIGNAL(siLiftMotorCtrl(int)),this, SLOT(slotLiftMotorCtrl(int)));
|
||
|
||
//测试电位器的标志
|
||
//connect(this, SIGNAL(siTestADC(int)),m_pPromptDlg, SLOT(slotTestADC(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(siFileInfoChange()), this, SLOT(slotFileInfoChange()));
|
||
|
||
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_pBrokenLineDialog = new BrokenLineDialog();
|
||
connect(m_pBrokenLineDialog,SIGNAL(siSetHeadData(u8*)),this,SLOT(slotSetQuiHeadBuf(u8*)));
|
||
m_pBrokenLineDialog->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()));
|
||
|
||
#if(IFOPENGATEWAY)
|
||
//物联网
|
||
m_pLotTimer = new QTimer(this);
|
||
connect(m_pLotTimer, SIGNAL(timeout()), this, SLOT(slotSendLotData()));
|
||
m_pLotTimer->setInterval(5000);
|
||
m_pLotTimer->start();
|
||
#endif
|
||
}
|
||
|
||
MainWidgetFunction::~MainWidgetFunction()
|
||
{
|
||
if(m_pPromptDlg != NULL)
|
||
{
|
||
delete m_pPromptDlg;
|
||
}
|
||
if(m_pSystemManageDlg != NULL)
|
||
{
|
||
delete m_pSystemManageDlg;
|
||
}
|
||
if(m_pBrokenLineDialog != NULL)
|
||
{
|
||
delete m_pBrokenLineDialog;
|
||
}
|
||
if(m_pDebugInfoDlg != NULL)
|
||
{
|
||
delete m_pDebugInfoDlg;
|
||
}
|
||
}
|
||
|
||
void MainWidgetFunction::initialize()
|
||
{
|
||
//初始化机头断线次数
|
||
memset(&m_embHeadBreakLine,0,sizeof(EmbHeadBreakLine));
|
||
memset(&m_coilHeadBreakLine,0,sizeof(CoilHeadBreakLine));
|
||
memset(&m_chenHeadBreakLine,0,sizeof(ChenHeadBreakLine));
|
||
|
||
memset((char*)&m_mcStatus,0,sizeof(MCStatus));
|
||
|
||
QDir apppath(qApp->applicationDirPath());
|
||
QString breakFilePath = apppath.path() + apppath.separator() + BREAKINFOFILE;
|
||
QFile breakFile(breakFilePath);
|
||
|
||
if(!breakFile.open(QIODevice::ReadOnly))
|
||
{
|
||
qDebug() << "open breakFile fail when read";
|
||
}
|
||
else
|
||
{
|
||
QByteArray array = breakFile.readAll();
|
||
if((u32)array.length() >= sizeof(EmbHeadBreakLine))
|
||
{
|
||
for(s32 i = 0; i < HEADNUM; i++)
|
||
{
|
||
for(s32 j = 0; j < NEEDLENUM; j++)
|
||
{
|
||
memcpy(&m_embHeadBreakLine.headNeedleBreakNum[i][j], array.data()+(i*NEEDLENUM+j)*sizeof(s32),sizeof(s32));
|
||
}
|
||
}
|
||
}
|
||
|
||
if((u32)array.length() >= (sizeof(EmbHeadBreakLine)+sizeof(CoilHeadBreakLine)))
|
||
{
|
||
for(s32 i = 0; i < HEADNUM; i++)
|
||
{
|
||
for(s32 j = 0; j < NEEDLENUM; j++)
|
||
{
|
||
if((i*NEEDLENUM+j)*sizeof(s32) < (u32)array.size())
|
||
{
|
||
memcpy(&m_coilHeadBreakLine.headNeedleBreakNum[i][j], array.data()+sizeof(EmbHeadBreakLine)+(i*NEEDLENUM+j)*sizeof(s32),sizeof(s32));
|
||
}
|
||
}
|
||
}
|
||
}
|
||
|
||
if((u32)array.length() >= (sizeof(EmbHeadBreakLine)+sizeof(CoilHeadBreakLine)+sizeof(ChenHeadBreakLine)))
|
||
{
|
||
for(s32 i = 0; i < HEADNUM; i++)
|
||
{
|
||
for(s32 j = 0; j < NEEDLENUM; j++)
|
||
{
|
||
if((i*NEEDLENUM+j)*sizeof(s32) < (u32)array.size())
|
||
{
|
||
memcpy(&m_chenHeadBreakLine.headNeedleBreakNum[i][j], array.data()+sizeof(EmbHeadBreakLine)+sizeof(CoilHeadBreakLine)+(i*NEEDLENUM+j)*sizeof(s32),sizeof(s32));
|
||
}
|
||
}
|
||
}
|
||
}
|
||
breakFile.close();
|
||
}
|
||
|
||
memset(&m_mcStatus,0,sizeof(MCStatus));
|
||
m_curFileID = 1;// 当前文件ID
|
||
m_beginX = 0;
|
||
m_beginY = 0;
|
||
m_noseHead = FLATEMB;//三个机头的选择,默认是平绣
|
||
m_potValue = 0;//电位器值
|
||
m_gearValue = 0;//档位值
|
||
m_workNoseHead = 0; //当前工作机头(从主控中读到的/界面下方显示的当前机头)
|
||
m_adcFlag = -1;
|
||
m_filePath.clear();
|
||
m_fileName.clear();
|
||
m_getScore = 0;
|
||
m_totalScore = 0;
|
||
m_camColorChange = 0;//凸轮换色
|
||
m_camColorChange = g_pSettings->readFromInHMIiFile("HMI/camColorChange").toInt();
|
||
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();
|
||
|
||
s16 towel = g_pSettings->readFromInHMIiFile("HMI/towel").toInt();//是否有毛巾功能
|
||
s16 coil = g_pSettings->readFromInHMIiFile("HMI/coil").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;
|
||
if(type == CSV_MC_TYPE_02 && towel != 0)//带毛巾
|
||
{
|
||
score = strlist.at(COLUMN_SCORE).toInt();
|
||
}
|
||
else if(type == CSV_MC_TYPE_03 && coil != 0)//带缠绕
|
||
{
|
||
score = strlist.at(COLUMN_SCORE).toInt();
|
||
}
|
||
else if(type == 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;
|
||
m_HMILotData.workState = S0505;
|
||
|
||
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, int paraType, u8 protocol, u8 nodeid, u8 nodeType)
|
||
{
|
||
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 == MC_UPDATA)//主控升级
|
||
{
|
||
for (int var = 0; var < fileList.size(); var++)
|
||
{
|
||
if( fileList.at(var).suffix().toUpper() == "RNPU")
|
||
{
|
||
m_pSystemManageDlg->addItem(fileList.at(var).fileName());
|
||
}
|
||
}
|
||
qDebug()<<"update 3";
|
||
}
|
||
else if(type == EXBOARD_UPDATA)//外围板升级
|
||
{
|
||
for (int var = 0; var < fileList.size(); var++)
|
||
{
|
||
if( fileList.at(var).suffix().toUpper() == "RNPU")
|
||
{
|
||
m_pSystemManageDlg->addItem(fileList.at(var).fileName());
|
||
}
|
||
}
|
||
qDebug()<<"update 5";
|
||
}
|
||
else if(type == PARA_IMPORT ||
|
||
type == WKPARA_IMPORT)//参数导入或工作参数导入
|
||
{
|
||
QString fileSuffix;
|
||
fileSuffix.clear();
|
||
|
||
if(paraType == 0)
|
||
{
|
||
fileSuffix = "PARADAT";
|
||
}
|
||
else
|
||
{
|
||
if (paraType == PARA_TYPE_HEADPARAMETER)
|
||
{
|
||
fileSuffix = "FHDPARADAT";
|
||
}
|
||
else if (paraType == PARA_TYPE_TOWELHEADPARAMETER)
|
||
{
|
||
fileSuffix = "THDPARADAT";
|
||
}
|
||
else if (paraType == PARA_TYPE_COILHEADPARAMETER)
|
||
{
|
||
fileSuffix = "CHDPARADAT";
|
||
}
|
||
else if (paraType == PARA_TYPE_HCPSPARAMETER)//平绣换色板
|
||
{
|
||
fileSuffix = "FHSPARADAT";
|
||
}
|
||
else if ( paraType == PARA_TYPE_TOWELHCPSPARAMETER)//毛巾换色板
|
||
{
|
||
fileSuffix = "CHSPARADAT";
|
||
}
|
||
}
|
||
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";
|
||
}
|
||
else if(type == FRAMEPARA_IMPORT)//动框参数导入
|
||
{
|
||
for (int var = 0; var < fileList.size(); var++)
|
||
{
|
||
if( fileList.at(var).suffix().toUpper() == "FRAMEPARADAT")
|
||
{
|
||
m_pSystemManageDlg->addItem(fileList.at(var).fileName());
|
||
}
|
||
}
|
||
}
|
||
//点击了确认按钮
|
||
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;
|
||
|
||
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;
|
||
|
||
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 ) //中文语言包 //XPlatForm-SEW-RP-LAG-ZH-V220511.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";
|
||
QString tPath2 = targetDir + fileName;
|
||
|
||
qDebug()<<"Language Update";
|
||
qDebug()<<"sPath"<<sPath; //sPath "F:/chinese.qm"
|
||
qDebug()<<"tPath"<<tPath; //tPath "D:/work/workQT/XPlatform/Windows/debug\\chinese.qm"
|
||
qDebug()<<"tPath1"<<tPath1; //tPath1 "D:/work/workQT/XPlatform/Windows/debug\\language.qm"
|
||
|
||
QFile::remove(tPath);
|
||
QFile::remove(tPath1);
|
||
QFile::remove(tPath2);
|
||
|
||
#ifdef Q_OS_LINUX
|
||
system("sync");
|
||
#endif
|
||
QFile::copy(sPath , tPath);//sPath复制到tPath
|
||
QFile::copy(sPath , tPath1);
|
||
QFile::copy(sPath , tPath2);
|
||
|
||
#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(".RNPU") != -1)
|
||
{
|
||
QString uPath = usbPath + fileName;
|
||
|
||
qDebug()<<"RNPU 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 == EXBOARD_UPDATA)//外围板升级
|
||
{
|
||
if(fileName.toUpper().indexOf(".RNPU") != -1)
|
||
{
|
||
QString uPath = usbPath + fileName;
|
||
|
||
qDebug()<<"RNPU update";
|
||
qDebug()<<"uPath"<<uPath;
|
||
|
||
BoardFileHead boardHead ;
|
||
memset(&boardHead , 0 , sizeof(boardHead));
|
||
QFile file(uPath);
|
||
|
||
u8 * pBuff = (u8 *) malloc( file.size());
|
||
qDebug() << "file.size()" << file.size();
|
||
|
||
file.open(QIODevice::ReadOnly);
|
||
file.read( (char *)pBuff , file.size()) ;
|
||
file.close();
|
||
|
||
int nameSize = uPath.toUtf8().size() ;
|
||
if( nameSize > 32 )
|
||
{
|
||
nameSize = 32;
|
||
}
|
||
memcpy(boardHead.fileName , uPath.toUtf8().data() , nameSize);
|
||
boardHead.dataSize = file.size();
|
||
boardHead.dataChecksum = calcCheckSum32(pBuff , file.size());
|
||
boardHead.protocol = protocol;
|
||
boardHead.nodeid = nodeid;
|
||
boardHead.nodeType = nodeType;
|
||
boardHead.fileType = FILE_TYPE_PGM;
|
||
|
||
static int nID = 0;
|
||
|
||
if( g_pMachine->isConnected() == 3)
|
||
{
|
||
g_pMachine->sendBoardFileProc(FILE_TYPE_BOARD,
|
||
0,
|
||
nID++,
|
||
boardHead ,
|
||
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(¶FileStruct,0,sizeof(ParaFile));
|
||
|
||
HeadInfo headParaValues;
|
||
memset(&headParaValues,0,sizeof(HeadInfo));
|
||
|
||
HcpsInfo hcpsParaValues;
|
||
memset(&hcpsParaValues,0,sizeof(HcpsInfo));
|
||
|
||
int paraSize = 0;
|
||
|
||
if(paraType != 0)
|
||
{
|
||
//换色板
|
||
if(paraType == PARA_TYPE_TOWELHCPSPARAMETER ||
|
||
paraType == PARA_TYPE_HCPSPARAMETER)
|
||
{
|
||
readSize = paraFile.read((char*)&hcpsParaValues,sizeof(HcpsInfo));
|
||
paraSize = sizeof(HcpsInfo);
|
||
}
|
||
else
|
||
{
|
||
readSize = paraFile.read((char*)&headParaValues,sizeof(HeadInfo));
|
||
paraSize = sizeof(HeadInfo);
|
||
}
|
||
paraFile.close();
|
||
}
|
||
else
|
||
{
|
||
readSize = paraFile.read((char*)¶FileStruct,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(paraType == 0)
|
||
{
|
||
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;
|
||
}
|
||
}
|
||
else if(paraType != 0)
|
||
{
|
||
if(paraType == PARA_TYPE_HEADPARAMETER)
|
||
{
|
||
g_pMachine->setHeadBoardPara(&headParaValues, FLATEMB);
|
||
}
|
||
else if(paraType == PARA_TYPE_TOWELHEADPARAMETER)
|
||
{
|
||
g_pMachine->setHeadBoardPara(&headParaValues, TOWEL);
|
||
}
|
||
else if(paraType == PARA_TYPE_COILHEADPARAMETER)
|
||
{
|
||
g_pMachine->setHeadBoardPara(&headParaValues, COIL);
|
||
}
|
||
else if(paraType == PARA_TYPE_TOWELHCPSPARAMETER ||
|
||
paraType == PARA_TYPE_HCPSPARAMETER)
|
||
{
|
||
g_pMachine->setHcpsBoardPara(&hcpsParaValues,1);
|
||
}
|
||
|
||
emit siHeadParaImportFinish(paraType);
|
||
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 if (type == WKPARA_IMPORT) //工作参数导入
|
||
{
|
||
QString uPath = usbPath + fileName;
|
||
QFile paraFile(uPath);
|
||
if(!paraFile.exists())
|
||
{
|
||
return;
|
||
}
|
||
|
||
paraFile.open(QIODevice::ReadOnly);
|
||
|
||
if(paraFile.size() != 0)
|
||
{
|
||
// 将文件 读取成结构体
|
||
ParaFile paraFileStruct;
|
||
memset(¶FileStruct,0,sizeof(ParaFile));
|
||
int readSize = paraFile.read((char*)¶FileStruct,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 != sizeof(ParaFile) )
|
||
{
|
||
//文件大小不匹配,无效的参数文件
|
||
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 ) ;
|
||
|
||
QString str;
|
||
g_pMachine->setWkPara((ParaStruct *) work_config);
|
||
|
||
m_pPromptDlg->initDialog(PromptDialog::BTN_OK);
|
||
m_pPromptDlg->setTitleStr(tr("Prompt"));
|
||
|
||
str = (tr("Work 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;
|
||
}
|
||
}
|
||
}
|
||
else if(type == FRAMEPARA_IMPORT)//动框参数导入
|
||
{
|
||
QString uPath = usbPath + fileName;
|
||
QFile paraFile(uPath);
|
||
if(!paraFile.exists())
|
||
{
|
||
return;
|
||
}
|
||
|
||
paraFile.open(QIODevice::ReadOnly);
|
||
if(paraFile.size() != 0)
|
||
{
|
||
// 将文件 读取成结构体
|
||
ParaFile paraFileStruct;
|
||
memset(¶FileStruct,0,sizeof(ParaFile));
|
||
int readSize = paraFile.read((char*)¶FileStruct,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 != sizeof(ParaFile) )
|
||
{
|
||
//文件大小不匹配,无效的参数文件
|
||
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 frame1_config [1024] ;
|
||
//unsigned char frame2_config [1024] ;
|
||
unsigned char pre_frame1_config [1024] ;
|
||
// unsigned char pre_frame2_config [1024] ;
|
||
|
||
// 清空
|
||
memset( frame1_config , 0 , 1024 ) ;
|
||
//memset( frame2_config , 0 , 1024 ) ;
|
||
memset( pre_frame1_config , 0 , 1024 ) ;
|
||
//memset( pre_frame2_config , 0 , 1024 ) ;
|
||
|
||
memcpy( frame1_config , paraFileStruct.s_para_buff , 1024 ) ;
|
||
// memcpy( frame2_config , ((char*)paraFileStruct.s_para_buff) + 1024 , 1024 ) ;
|
||
memcpy( pre_frame1_config , ((char*)paraFileStruct.s_para_buff) + 1024 , 1024 ) ;
|
||
//memcpy( pre_frame2_config , ((char*)paraFileStruct.s_para_buff) + 3072 , 1024 ) ;
|
||
|
||
QString str;
|
||
|
||
g_pMachine->setFrameAnglePara((EmbMvAng *) frame1_config);
|
||
// g_pMachine->setWkPara((ParaStruct *) frame2_config);
|
||
g_pMachine->setFrameAnglePara((EmbMvAng *) pre_frame1_config);
|
||
// g_pMachine->setWkPrePara((ParaStruct *) pre_frame2_config);
|
||
|
||
m_pPromptDlg->initDialog(PromptDialog::BTN_OK);
|
||
m_pPromptDlg->setTitleStr(tr("Prompt"));
|
||
|
||
str = (tr("Frame 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;
|
||
}
|
||
}
|
||
}
|
||
}
|
||
}
|
||
|
||
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::funImportWkParameter(QString tStyle)
|
||
{
|
||
m_pSystemManageDlg->setTypeLogo(tStyle);
|
||
m_pSystemManageDlg->setMainTitle(tr("WkParameter Import"));
|
||
m_pSystemManageDlg->setSubTitle(tr("Auxiliary Function > WkParameter Import"));
|
||
m_pSystemManageDlg->initDialog();
|
||
systemUpgrade(WKPARA_IMPORT);
|
||
}
|
||
|
||
//参数导入
|
||
void MainWidgetFunction::funImportParameter(QString tStyle)
|
||
{
|
||
m_pSystemManageDlg->setTypeLogo(tStyle);
|
||
m_pSystemManageDlg->setMainTitle(tr("Parameter Import"));
|
||
m_pSystemManageDlg->setSubTitle(tr("Auxiliary Function > Parameter Import"));
|
||
m_pSystemManageDlg->initDialog();
|
||
systemUpgrade(PARA_IMPORT);
|
||
}
|
||
|
||
//主控升级
|
||
void MainWidgetFunction::funMCUpgrade(QString tStyle)
|
||
{
|
||
m_pSystemManageDlg->setTypeLogo(tStyle);
|
||
m_pSystemManageDlg->setMainTitle(tr("MC Upgrade"));
|
||
m_pSystemManageDlg->setSubTitle(tr("Auxiliary Function > MC Upgrade"));
|
||
m_pSystemManageDlg->initDialog();
|
||
systemUpgrade(MC_UPDATA);
|
||
}
|
||
|
||
//界面升级
|
||
void MainWidgetFunction::funHMIUpgrade(QString tStyle)
|
||
{
|
||
m_pSystemManageDlg->setTypeLogo(tStyle);
|
||
m_pSystemManageDlg->setMainTitle(tr("HMI Upgrade"));
|
||
m_pSystemManageDlg->setSubTitle(tr("Auxiliary Function > HMI Upgrade"));
|
||
m_pSystemManageDlg->initDialog();
|
||
|
||
systemUpgrade(HMI_UPDATA);
|
||
}
|
||
|
||
void MainWidgetFunction::funEXBUpgrade(QString tStyle, u8 protocol, u8 nodeid , u8 nodeType)
|
||
{
|
||
m_pSystemManageDlg->setTypeLogo(tStyle);
|
||
m_pSystemManageDlg->setMainTitle(tr("EXB Upgrade"));
|
||
m_pSystemManageDlg->setSubTitle(tr("Auxiliary Function > EXB Upgrade"));
|
||
m_pSystemManageDlg->initDialog();
|
||
|
||
systemUpgrade(EXBOARD_UPDATA, 0, protocol, nodeid, nodeType);
|
||
}
|
||
|
||
void MainWidgetFunction::funWIFI(QString tStyle)
|
||
{
|
||
QStringList wifiStrList;
|
||
wifiStrList.clear();
|
||
s16 rel = refreshWifiList(wifiStrList);//加载wifi列表
|
||
if(rel > 0)
|
||
{
|
||
m_pSystemManageDlg->setTypeLogo(tStyle);
|
||
m_pSystemManageDlg->setMainTitle(tr("WIFI"));
|
||
m_pSystemManageDlg->setSubTitle(tr("Auxiliary Function > 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(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;
|
||
}
|
||
if (g_pMachine != NULL)
|
||
{
|
||
if(g_pMachine->isConnected() != 3)
|
||
{
|
||
m_pPromptDlg->initDialog(PromptDialog::BTN_OK);
|
||
m_pPromptDlg->setTitleStr(tr("Prompt"));
|
||
m_pPromptDlg->setContentStr(tr("No connection"));
|
||
m_pPromptDlg->exec();
|
||
return;
|
||
}
|
||
}
|
||
// MCInfo info1 = g_pMachine->getMcInfo();
|
||
//QString software_ver;
|
||
//software_ver.sprintf("%s",info1.softwareVerStr);
|
||
//QStringList i_sof = software_ver.split("-");//读取空格之前的版本信息
|
||
//QString i_info = i_sof[1]+"-"+ i_sof[2]; //Epara_231019_092812//之前的主控版本 列表会溢出
|
||
QString i_para = "Epara";
|
||
|
||
QString paradat;
|
||
paradat.clear();
|
||
|
||
if(type == 0)
|
||
{
|
||
paradat = ".paradat";
|
||
}
|
||
else
|
||
{
|
||
if (type == PARA_TYPE_HEADPARAMETER)
|
||
{
|
||
paradat = ".fhdparadat";
|
||
}
|
||
else if (type == PARA_TYPE_TOWELHEADPARAMETER)
|
||
{
|
||
paradat = ".thdparadat";
|
||
}
|
||
else if (type == PARA_TYPE_COILHEADPARAMETER)
|
||
{
|
||
paradat = ".chdparadat";
|
||
}
|
||
else if (type == PARA_TYPE_HCPSPARAMETER)//平绣换色板
|
||
{
|
||
paradat = ".fhsparadat";
|
||
}
|
||
else if ( type == PARA_TYPE_TOWELHCPSPARAMETER)//毛巾换色板
|
||
{
|
||
paradat = ".chsparadat";
|
||
}
|
||
}
|
||
|
||
QString i_time = QDateTime::currentDateTime().toString("_yyMMdd_hhmmss");//时间日期
|
||
|
||
//QString strName = i_para + i_info + i_time + paradat;
|
||
QString strName = i_para + i_time + paradat;
|
||
QString paraFileName = usbPath + strName;
|
||
QFile::remove (paraFileName);
|
||
|
||
#ifdef Q_OS_LINUX
|
||
system("sync");
|
||
#endif
|
||
|
||
m_pPromptDlg->initDialog(PromptDialog::BTN_OK);
|
||
m_pPromptDlg->setTitleStr(tr("Prompt"));
|
||
QString str;
|
||
|
||
if(type == 0)
|
||
{
|
||
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(¶FileStruct,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);
|
||
bool bl = file.open(QIODevice::ReadWrite | QIODevice::Truncate);
|
||
if(bl == false)
|
||
{
|
||
//参数导出失败!
|
||
str = tr("Parameters exported failed!");//参数导出失败!
|
||
m_pPromptDlg->setContentStr(str);
|
||
m_pPromptDlg->exec();
|
||
file.close();
|
||
return;
|
||
}
|
||
|
||
bl = file.write((char*)¶FileStruct,sizeof(ParaFile));
|
||
if(bl == false)
|
||
{
|
||
//参数导出失败!
|
||
str = tr("Parameters exported failed!");//参数导出失败!
|
||
m_pPromptDlg->setContentStr(str);
|
||
m_pPromptDlg->exec();
|
||
file.close();
|
||
return;
|
||
}
|
||
file.flush();
|
||
file.close();
|
||
}
|
||
else
|
||
{
|
||
HeadInfo headParaValues;
|
||
HcpsInfo hcpsParaValues;
|
||
|
||
QFile file(paraFileName);
|
||
bool bl = file.open(QIODevice::ReadWrite | QIODevice::Truncate);
|
||
if(bl == false)
|
||
{
|
||
//参数导出失败!
|
||
str = tr("Parameters exported failed!");//参数导出失败!
|
||
m_pPromptDlg->setContentStr(str);
|
||
m_pPromptDlg->exec();
|
||
file.close();
|
||
return;
|
||
}
|
||
|
||
if (type == PARA_TYPE_HEADPARAMETER)
|
||
{
|
||
if(g_pMachine->getHeadPara(0,FLATEMB) != NULL)
|
||
{
|
||
memcpy(&headParaValues, g_pMachine->getHeadPara(0,FLATEMB), sizeof(HeadInfo));
|
||
bl = file.write((char*)&headParaValues,sizeof(HeadInfo));
|
||
}
|
||
}
|
||
else if (type == PARA_TYPE_TOWELHEADPARAMETER)
|
||
{
|
||
if(g_pMachine->getHeadPara(0,TOWEL) != NULL)//找到的数据包不是空
|
||
{
|
||
memcpy(&headParaValues, g_pMachine->getHeadPara(0,TOWEL), sizeof(HeadInfo));
|
||
bl = file.write((char*)&headParaValues,sizeof(HeadInfo));
|
||
}
|
||
}
|
||
else if (type == PARA_TYPE_COILHEADPARAMETER)
|
||
{
|
||
if(g_pMachine->getHeadPara(0,COIL) != NULL)//找到的数据包不是空
|
||
{
|
||
memcpy(&headParaValues, g_pMachine->getHeadPara(0,COIL), sizeof(HeadInfo));
|
||
bl = file.write((char*)&headParaValues,sizeof(HeadInfo));
|
||
}
|
||
}
|
||
else if (type == PARA_TYPE_HCPSPARAMETER)//平绣换色板
|
||
{
|
||
memcpy(&hcpsParaValues, &g_pMachine->getHcpsPara(0), sizeof(HcpsInfo));
|
||
bl = file.write((char*)&hcpsParaValues,sizeof(HcpsInfo));
|
||
}
|
||
else if ( type == PARA_TYPE_TOWELHCPSPARAMETER)//毛巾换色板
|
||
{
|
||
memcpy(&hcpsParaValues, &g_pMachine->getHcpsPara(1), sizeof(HcpsInfo));
|
||
bl = file.write((char*)&hcpsParaValues,sizeof(HcpsInfo));
|
||
}
|
||
if(bl == false)
|
||
{
|
||
//参数导出失败!
|
||
str = tr("Parameters exported failed!");//参数导出失败!
|
||
m_pPromptDlg->setContentStr(str);
|
||
m_pPromptDlg->exec();
|
||
file.close();
|
||
return;
|
||
}
|
||
// 保存文件 开始
|
||
file.flush();
|
||
file.close();
|
||
}
|
||
// 保存文件 结束
|
||
|
||
#ifdef Q_OS_LINUX
|
||
system("sync");
|
||
#endif
|
||
|
||
//参数导出成功
|
||
str = tr("Parameters exported successfully!");//参数导出成功!
|
||
m_pPromptDlg->setContentStr(str);
|
||
m_pPromptDlg->exec();
|
||
return;
|
||
}
|
||
|
||
//动框参数导出
|
||
void MainWidgetFunction::funExportFrameParameter()
|
||
{
|
||
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);
|
||
|
||
// QStringList i_sof = software_ver.split("-");
|
||
// QString i_info = i_sof[1]+"-" + i_sof[2];
|
||
QString i_para = "FrameEpara";
|
||
QString paradat = ".frameparadat";
|
||
QString i_time = QDateTime::currentDateTime().toString("_yyMMdd_hhmmss");//时间日期
|
||
|
||
// QString strName = i_para + i_info + i_time + paradat;
|
||
QString strName = i_para + i_time + paradat;
|
||
QString paraFileName = usbPath + strName;
|
||
QFile::remove (paraFileName) ;
|
||
|
||
#ifdef Q_OS_LINUX
|
||
system("sync");
|
||
#endif
|
||
|
||
char para_frame1 [ 1024 ];
|
||
//char para_frame2 [ 1024 ];
|
||
|
||
char pre_para_frame1 [ 1024 ];
|
||
// char pre_para_frame2 [ 1024 ];
|
||
|
||
memcpy(para_frame1 , (u8*) (&(g_pMachine->getFrameAnglePara())) , 1024 );
|
||
//memcpy(para_frame2 , (u8*) (&(g_pMachine->getWkPara())) , 1024 );
|
||
|
||
memcpy(pre_para_frame1 , (u8*) (&(g_pMachine->getFrameAnglePara())) , 1024 );
|
||
//memcpy(pre_para_wk , (u8*) (&(g_pMachine->getPreWkPara())) , 1024 );
|
||
|
||
|
||
//两个缓冲区,输出成一个参数文件
|
||
// 转换结构体 开始
|
||
ParaFile paraFileStruct ;
|
||
memset(¶FileStruct,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_frame1 , 1024 );
|
||
//memcpy( (char *) (paraFileStruct.s_para_buff) + 1024 , para_mc , 1024 );
|
||
memcpy( (char *) (paraFileStruct.s_para_buff) + 1024 , pre_para_frame1 , 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*)¶FileStruct,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("Frame 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)
|
||
{
|
||
g_pMachine->allToReset();
|
||
}
|
||
}
|
||
}
|
||
|
||
//平绣勾线
|
||
void MainWidgetFunction::funFlatEmbHook()
|
||
{
|
||
m_pPromptDlg->initDialog(PromptDialog::BTN_OK_CANCEL);
|
||
m_pPromptDlg->setTitleStr(tr("Flat embroidery hook"));//平绣勾线
|
||
|
||
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->manualAction(EMB_HOOK_THREAD);
|
||
}
|
||
}
|
||
}
|
||
|
||
//主轴点动
|
||
void MainWidgetFunction::funSpindleJog()
|
||
{
|
||
int towel = g_pSettings->readFromInHMIiFile("HMI/towel").toInt();//是否有毛巾功能
|
||
int coil = g_pSettings->readFromInHMIiFile("HMI/coil").toInt();//是否有缠绕功能
|
||
if(g_emMacType == MACHINE_EMB && (towel == 1 || coil == 1)) //-rq
|
||
{
|
||
m_pPromptDlg->initDialog(PromptDialog::BTN_NOSEHESD);
|
||
m_pPromptDlg->setTitleStr(tr("Spindle jog"));//主轴点动
|
||
m_pPromptDlg->setNoseHeadStrVisible(false);//当前针杆label是否可见
|
||
if(m_pPromptDlg->exec() == 1)
|
||
{
|
||
int noseHesdJog = m_pPromptDlg->getNoseHead();
|
||
m_pPromptDlg->initDialog(PromptDialog::BTN_OK_CANCEL);
|
||
QString str;
|
||
if(noseHesdJog == TOWEL)//毛巾
|
||
{
|
||
m_pPromptDlg->setTitleStr(tr("Chenille Spindle jog"));//毛巾主轴点动
|
||
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->chenilleJog();
|
||
}
|
||
}
|
||
}
|
||
else if(noseHesdJog == COIL)//缠绕
|
||
{
|
||
m_pPromptDlg->setTitleStr(tr("Winding spindle jog"));//缠绕主轴点动
|
||
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->manualAction(COIL_MS_JOG);
|
||
}
|
||
}
|
||
}
|
||
else if(noseHesdJog == FLATEMB)
|
||
{
|
||
m_pPromptDlg->setTitleStr(tr("Emb Spindle jog"));//平绣主轴点动
|
||
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->embJog();
|
||
}
|
||
}
|
||
}
|
||
slotCalMachineProgress(CSV_00_CODE_1);
|
||
}
|
||
}
|
||
else if(g_emMacType == MACHINE_EMB && g_emProductType == PRODUCT_CHEN)//纯毛巾
|
||
{
|
||
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->chenilleJog();
|
||
}
|
||
}
|
||
}
|
||
else
|
||
{
|
||
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->embJog();
|
||
}
|
||
}
|
||
}
|
||
|
||
}
|
||
|
||
//主轴旋转
|
||
void MainWidgetFunction::funSpindleRotate()
|
||
{
|
||
int towel = g_pSettings->readFromInHMIiFile("HMI/towel").toInt();//是否有毛巾功能
|
||
int coil = g_pSettings->readFromInHMIiFile("HMI/coil").toInt();//是否有缠绕功能
|
||
if(g_emMacType == MACHINE_EMB && (towel == 1 || coil == 1)) //-rq
|
||
{
|
||
m_pPromptDlg->initDialog(PromptDialog::BTN_NOSEHESDTHREE);
|
||
m_pPromptDlg->setTitleStr(tr("Spindle rotate angle"));//主轴旋转角度
|
||
if(m_pPromptDlg->exec() == 1)
|
||
{
|
||
m_noseHead = m_pPromptDlg->getNoseHead();
|
||
m_pPromptDlg->initDialog(PromptDialog::BTN_SPINDLE_ROTATE);
|
||
if(m_noseHead == TOWEL)
|
||
{
|
||
m_pPromptDlg->setTitleStr(tr("Chenille Spindle rotate angle"));//毛巾主轴旋转角度
|
||
}
|
||
else if(m_noseHead == COIL)
|
||
{
|
||
m_pPromptDlg->setTitleStr(tr("Winding Spindle rotate angle"));//缠绕主轴旋转角度
|
||
}
|
||
else if(m_noseHead == FLATEMB)
|
||
{
|
||
m_pPromptDlg->setTitleStr(tr("Emb Spindle rotate angle"));//平绣主轴旋转角度
|
||
}
|
||
m_pPromptDlg->exec();
|
||
}
|
||
}
|
||
|
||
else if(g_emMacType == MACHINE_EMB && g_emProductType == PRODUCT_CHEN)//纯毛巾
|
||
{
|
||
m_noseHead = TOWEL;
|
||
m_pPromptDlg->initDialog(PromptDialog::BTN_SPINDLE_ROTATE);
|
||
m_pPromptDlg->setTitleStr(tr("Spindle rotate angle"));//主轴旋转角度
|
||
m_pPromptDlg->exec();
|
||
}
|
||
|
||
else
|
||
{
|
||
m_noseHead = FLATEMB;
|
||
m_pPromptDlg->initDialog(PromptDialog::BTN_SPINDLE_ROTATE);
|
||
m_pPromptDlg->setTitleStr(tr("Spindle rotate angle"));//主轴旋转角度
|
||
m_pPromptDlg->exec();
|
||
}
|
||
#if(0)
|
||
if (m_pPromptDlg->exec() == 1)
|
||
{
|
||
s32 val = m_pPromptDlg->getSpindleRotateAngle();
|
||
|
||
if(g_pMachine != NULL)
|
||
{
|
||
g_pMachine->manualAction(EMB_SPINDLE_TO_ANGLE,val);
|
||
}
|
||
}
|
||
#endif
|
||
}
|
||
|
||
|
||
//回工作点
|
||
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::funBackToOrigin()
|
||
{
|
||
m_pPromptDlg->initDialog(PromptDialog::BTN_OK_CANCEL);
|
||
m_pPromptDlg->setTitleStr(tr("Back to origin"));//回原点
|
||
|
||
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::funResetStartPoint(QString filePath,DataFilePos pos)
|
||
{
|
||
int st = 1;
|
||
if(filePath.length() <= 0)
|
||
{
|
||
return;
|
||
}
|
||
|
||
u32 workNoseHead = 1;
|
||
s32 beginX,beginY;
|
||
beginX = beginY = 0;
|
||
|
||
beginX = pos.beginX;
|
||
beginY = pos.beginY;
|
||
|
||
if(g_pMachine != NULL)
|
||
{
|
||
workNoseHead = g_pMachine->getMcStatus().workNoseHead;
|
||
}
|
||
|
||
if(g_pCurEmbData != NULL)
|
||
{
|
||
g_pCurEmbData->setStartPosition(beginX,beginY,st,workNoseHead);
|
||
}
|
||
|
||
//边框检查后自动定起绣点总是不成功(数据发送失败),所以加了延时已临时解决
|
||
QDateTime oldTime = QDateTime::currentDateTime();
|
||
while(1)
|
||
{
|
||
QDateTime curTime = QDateTime::currentDateTime();
|
||
if(oldTime.msecsTo(curTime) > 100)
|
||
{
|
||
break;
|
||
}
|
||
}
|
||
|
||
sendPatternHead(filePath);
|
||
//将新的起始点写回到文件中
|
||
writePonitToFile(filePath,START_POINT,beginX,beginY,st,workNoseHead);
|
||
|
||
m_beginX = beginX;
|
||
m_beginY = beginY;
|
||
|
||
//流程复位
|
||
g_pMachine->allToReset();
|
||
}
|
||
|
||
//定偏移点
|
||
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::funSetStartPoint(QString filePath)
|
||
{
|
||
int st = 1;
|
||
m_pPromptDlg->initDialog(PromptDialog::BTN_OK_CANCEL);
|
||
m_pPromptDlg->setTitleStr(tr("Set start point"));//定起始点
|
||
|
||
QString str;
|
||
str = tr("Whether to set the current point as the start point?");//是否将当前点设置为起始点?
|
||
m_pPromptDlg->setContentStr(str);
|
||
|
||
if(m_pPromptDlg->exec() == 1)
|
||
{
|
||
s32 x,y;
|
||
u32 workNoseHead;
|
||
x = y = 0;
|
||
workNoseHead =0;
|
||
|
||
if(g_pMachine != NULL)
|
||
{
|
||
m_mcStatus = g_pMachine->getMcStatus();
|
||
x = m_mcStatus.xPos;
|
||
y = m_mcStatus.yPos;
|
||
workNoseHead = m_mcStatus.workNoseHead;
|
||
}
|
||
|
||
if(g_pCurEmbData != NULL)
|
||
{
|
||
g_pCurEmbData->setStartPosition(x,y,st,workNoseHead);
|
||
}
|
||
|
||
sendPatternHead(filePath);
|
||
|
||
//将新的起始点写回到文件中
|
||
writePonitToFile(filePath,START_POINT,x,y,st,workNoseHead);
|
||
|
||
m_beginX = x;
|
||
m_beginY = y;
|
||
|
||
//流程复位
|
||
g_pMachine->allToReset();
|
||
}
|
||
}
|
||
|
||
//回起始点
|
||
void MainWidgetFunction::funBackStartPoint()
|
||
{
|
||
m_pPromptDlg->initDialog(PromptDialog::BTN_OK_CANCEL);
|
||
m_pPromptDlg->setTitleStr(tr("Back embroidery poin"));//回起始点
|
||
|
||
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::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::funWorkState()
|
||
{
|
||
if(g_emMacType == MACHINE_EMB)
|
||
{
|
||
if(g_pMachine != NULL)
|
||
{
|
||
if ((m_mcStatus.workStatus & WORK_STA_SIMULATE) == WORK_STA_SIMULATE) //模拟工作
|
||
{
|
||
//正常工作
|
||
g_pMachine->setNormalWork();
|
||
}
|
||
else //正常工作
|
||
{
|
||
//模拟工作
|
||
g_pMachine->setSimulateWork();
|
||
}
|
||
}
|
||
}
|
||
else if(g_emMacType == QUIMACHINE_EMB)
|
||
{
|
||
m_pPromptDlg->initDialog(PromptDialog::BTN_OK_CANCEL);
|
||
m_pPromptDlg->setTitleStr(tr("Switching working status"));//切换工作状态
|
||
|
||
QString str;
|
||
str = tr("Do you want to switch the simulation working state?");//是否切换模拟工作状态?
|
||
m_pPromptDlg->setContentStr(str);
|
||
|
||
if(m_pPromptDlg->exec() == 1)
|
||
{
|
||
if(g_pMachine != NULL)
|
||
{
|
||
if ((m_mcStatus.workStatus & WORK_STA_SIMULATE) == WORK_STA_SIMULATE) //模拟工作
|
||
{
|
||
//正常工作
|
||
g_pMachine->setNormalWork();
|
||
}
|
||
else //正常工作
|
||
{
|
||
//模拟工作
|
||
g_pMachine->setSimulateWork();
|
||
}
|
||
}
|
||
}
|
||
|
||
}
|
||
|
||
}
|
||
|
||
//手动剪线(平绣,毛巾剪线)
|
||
void MainWidgetFunction::funManualTrim()
|
||
{
|
||
int towel = g_pSettings->readFromInHMIiFile("HMI/towel").toInt();//是否有毛巾功能
|
||
int coil = g_pSettings->readFromInHMIiFile("HMI/coil").toInt();//是否有缠绕功能
|
||
|
||
if(g_emMacType == MACHINE_EMB && (towel == 1 || coil == 1)) //-rq
|
||
{
|
||
m_pPromptDlg->initDialog(PromptDialog::BTN_NOSEHESD);
|
||
m_pPromptDlg->setTitleStr(tr("Trim"));//剪线
|
||
m_pPromptDlg->setNoseHeadStrVisible(false);//当前针杆label是否可见
|
||
if(m_pPromptDlg->exec() == 1)
|
||
{
|
||
int noseHesdTrim = m_pPromptDlg->getNoseHead();
|
||
if(noseHesdTrim == TOWEL)//毛巾
|
||
{
|
||
m_pPromptDlg->initDialog(PromptDialog::BTN_OK_CANCEL);
|
||
m_pPromptDlg->setTitleStr(tr("Chenille 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->chenilleCutThread();
|
||
}
|
||
}
|
||
}
|
||
else if(noseHesdTrim == COIL)//缠绕
|
||
{
|
||
funCoilManualTrim();
|
||
}
|
||
else if(noseHesdTrim == FLATEMB)//平绣
|
||
{
|
||
m_pPromptDlg->initDialog(PromptDialog::BTN_OK_CANCEL);
|
||
m_pPromptDlg->setTitleStr(tr("Emboriey 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->embCutThread();
|
||
}
|
||
}
|
||
}
|
||
}
|
||
}
|
||
else if(g_emMacType == MACHINE_EMB && g_emProductType == PRODUCT_CHEN)//纯毛巾
|
||
{
|
||
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->chenilleCutThread();
|
||
}
|
||
}
|
||
}
|
||
else
|
||
{
|
||
m_pPromptDlg->initDialog(PromptDialog::BTN_OK_CANCEL);
|
||
m_pPromptDlg->setTitleStr(tr("Emboriey 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->embCutThread();
|
||
}
|
||
}
|
||
}
|
||
}
|
||
|
||
//毛巾剪线 (单独的一个快捷功能,黄色的按钮)//目前没用到
|
||
void MainWidgetFunction::funTowelTrim()
|
||
{
|
||
m_pPromptDlg->initDialog(PromptDialog::BTN_OK_CANCEL);
|
||
m_pPromptDlg->setTitleStr(tr("Chenille 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->chenilleCutThread();
|
||
}
|
||
}
|
||
}
|
||
|
||
//切换机头(毛巾,平绣)
|
||
void MainWidgetFunction::funSwitchHead()
|
||
{
|
||
m_pPromptDlg->initDialog(PromptDialog::BTN_NOSEHESD);
|
||
m_pPromptDlg->setTitleStr(tr("Switch Head"));//切换机头
|
||
m_pPromptDlg->setNoseHeadStrVisible(false);//当前针杆label是否可见
|
||
if(m_pPromptDlg->exec() == 1)
|
||
{
|
||
int noseHesdSwitch = m_pPromptDlg->getNoseHead();
|
||
if(noseHesdSwitch == TOWEL)//毛巾
|
||
{
|
||
m_pPromptDlg->initDialog(PromptDialog::BTN_OK_CANCEL);
|
||
m_pPromptDlg->setTitleStr(tr("Switch Head"));//切换机头
|
||
QString str;
|
||
str = tr("Whether to switch to chenille head!");//是否切换为毛巾机头!
|
||
m_pPromptDlg->setContentStr(str);
|
||
if(m_pPromptDlg->exec() == 1)
|
||
{
|
||
if(g_pMachine != NULL)
|
||
{
|
||
g_pMachine->headSwitch(5);
|
||
}
|
||
}
|
||
}
|
||
else if(noseHesdSwitch == FLATEMB)
|
||
{
|
||
m_pPromptDlg->initDialog(PromptDialog::BTN_OK_CANCEL);
|
||
m_pPromptDlg->setTitleStr(tr("Switch Head"));//切换机头
|
||
QString str;
|
||
str = tr("Whether to switch to emb head!");//是否切换为平绣机头!
|
||
m_pPromptDlg->setContentStr(str);
|
||
if(m_pPromptDlg->exec() == 1)
|
||
{
|
||
if(g_pMachine != NULL)
|
||
{
|
||
g_pMachine->headSwitch(1);
|
||
}
|
||
}
|
||
}
|
||
//缠绕
|
||
else if(noseHesdSwitch == COIL)
|
||
{
|
||
m_pPromptDlg->initDialog(PromptDialog::BTN_OK_CANCEL);
|
||
m_pPromptDlg->setTitleStr(tr("Switch Head"));//切换机头
|
||
QString str;
|
||
str = tr("Whether to switch to coil head!");//是否切换为缠绕机头!
|
||
m_pPromptDlg->setContentStr(str);
|
||
if(m_pPromptDlg->exec() == 1)
|
||
{
|
||
if(g_pMachine != NULL)
|
||
{
|
||
g_pMachine->headSwitch(4);
|
||
}
|
||
}
|
||
}
|
||
}
|
||
}
|
||
|
||
void MainWidgetFunction::funMSpindleRotate()
|
||
{
|
||
int towel = g_pSettings->readFromInHMIiFile("HMI/towel").toInt();//是否有毛巾功能
|
||
int coil = g_pSettings->readFromInHMIiFile("HMI/coil").toInt();//是否有缠绕功能
|
||
if(g_emMacType == MACHINE_EMB && towel == 1 && coil == 1) //-rq
|
||
{
|
||
m_pPromptDlg->initDialog(PromptDialog::BTN_MSPINDLE_ROTATE);
|
||
m_pPromptDlg->setTitleStr(tr("M axis rotation angle"));//M轴旋转角度
|
||
if(m_pPromptDlg->exec() == 1)
|
||
{
|
||
m_noseHead = m_pPromptDlg->getNoseHead();
|
||
m_pPromptDlg->initDialog(PromptDialog::BTN_SPINDLE_ROTATE);
|
||
if(m_noseHead == TOWELM)
|
||
{
|
||
m_pPromptDlg->setTitleStr(tr("Chenille M axis rotate angle"));//毛巾M轴旋转角度
|
||
}
|
||
else if(m_noseHead == COILM)
|
||
{
|
||
m_pPromptDlg->setTitleStr(tr("Winding M axis rotate angle"));//缠绕M轴旋转角度
|
||
}
|
||
m_pPromptDlg->exec();
|
||
}
|
||
}
|
||
else if(g_emMacType == MACHINE_EMB && towel == 1)
|
||
{
|
||
m_noseHead = TOWELM;
|
||
m_pPromptDlg->initDialog(PromptDialog::BTN_SPINDLE_ROTATE);
|
||
m_pPromptDlg->setTitleStr(tr("Chenille M axis rotate angle"));//毛巾M轴旋转角度
|
||
m_pPromptDlg->exec();
|
||
}
|
||
else if(g_emMacType == MACHINE_EMB && coil == 1)
|
||
{
|
||
m_noseHead = COILM;
|
||
m_pPromptDlg->initDialog(PromptDialog::BTN_SPINDLE_ROTATE);
|
||
m_pPromptDlg->setTitleStr(tr("Winding M axis rotate angle"));//缠绕M轴旋转角度
|
||
m_pPromptDlg->exec();
|
||
}
|
||
}
|
||
|
||
//毛巾设置可工作区域
|
||
void MainWidgetFunction::funChenWorkArea()
|
||
{
|
||
m_pPromptDlg->initDialog(PromptDialog::BTN_WORK_AREA);
|
||
m_pPromptDlg->setTitleStr(tr("Chenille setting workable area"));//毛巾设置可工作区域
|
||
int areaValue = m_pPromptDlg->getArea();
|
||
if(m_pPromptDlg->exec() == 1)
|
||
{
|
||
if(g_pMachine != NULL)
|
||
{
|
||
g_pMachine->manualAction(EMB_CUT_ONOFF,TOWEL,areaValue);
|
||
}
|
||
}
|
||
}
|
||
//平绣设置可工作区域
|
||
void MainWidgetFunction::funEmbWorkArea()
|
||
{
|
||
m_pPromptDlg->initDialog(PromptDialog::BTN_WORK_AREA);
|
||
m_pPromptDlg->setTitleStr(tr("Flat embroidery setting workable area"));//平绣设置可工作区域
|
||
int areaValue = m_pPromptDlg->getArea();
|
||
if(m_pPromptDlg->exec() == 1)
|
||
{
|
||
if(g_pMachine != NULL)
|
||
{
|
||
g_pMachine->manualAction(EMB_CUT_ONOFF,FLATEMB,areaValue);
|
||
}
|
||
}
|
||
}
|
||
|
||
//剪刀开合
|
||
void MainWidgetFunction::funCutterOpenAndClose()
|
||
{
|
||
int coil = g_pSettings->readFromInHMIiFile("HMI/coil").toInt();//是否有缠绕功能
|
||
if(g_emMacType == MACHINE_EMB && coil == 1)
|
||
{
|
||
m_pPromptDlg->initDialog(PromptDialog::BTN_TRIMDOWN);
|
||
m_pPromptDlg->setTitleStr(tr("Lower cutter"));//下剪线
|
||
m_pPromptDlg->setNoseHeadStrVisible(false);//当前针杆label是否可见
|
||
|
||
if(m_pPromptDlg->exec() == 1)
|
||
{
|
||
int noseHesdColor = m_pPromptDlg->getNoseHead();
|
||
if(noseHesdColor == COIL)//缠绕
|
||
{
|
||
funCoilCutterOpenAndClose();
|
||
}
|
||
else if (noseHesdColor == FLATEMB)
|
||
{
|
||
m_pPromptDlg->initDialog(PromptDialog::BTN_OK_CANCEL);
|
||
m_pPromptDlg->setTitleStr(tr("Emb Lower cutter"));//平绣下剪线
|
||
QString str;
|
||
str = tr("Emb scissors are about to move, please pay attention to safety!");//平绣剪刀即将动作,请注意安全!
|
||
m_pPromptDlg->setContentStr(str);
|
||
if(m_pPromptDlg->exec() == 1)
|
||
{
|
||
if(g_pMachine != NULL)
|
||
{
|
||
g_pMachine->manualAction(EMB_CUT_ONOFF);
|
||
}
|
||
}
|
||
}
|
||
}
|
||
}
|
||
else
|
||
{
|
||
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)
|
||
{
|
||
g_pMachine->manualAction(EMB_CUT_ONOFF);
|
||
}
|
||
}
|
||
}
|
||
}
|
||
|
||
//手动换色
|
||
void MainWidgetFunction::funManualChangeColor()
|
||
{
|
||
if(m_camColorChange == 1)
|
||
{
|
||
if(g_pMachine != NULL)
|
||
{
|
||
g_pMachine->testADC(1);
|
||
m_adcFlag = 1;
|
||
//测试电位器的标志
|
||
}
|
||
}
|
||
int towel = g_pSettings->readFromInHMIiFile("HMI/towel").toInt();//是否有毛巾功能
|
||
if(g_emMacType == MACHINE_EMB && towel == 1)
|
||
{
|
||
m_pPromptDlg->initDialog(PromptDialog::BTN_NOSEHESD);
|
||
m_pPromptDlg->setTitleStr(tr("Manual color change"));//手动换色
|
||
m_pPromptDlg->setNoseHeadStrVisible(false);//当前工作机头label是否可见
|
||
if(m_pPromptDlg->exec() == 1)
|
||
{
|
||
int noseHesdColor = m_pPromptDlg->getNoseHead();
|
||
if(noseHesdColor == TOWEL)//毛巾
|
||
{
|
||
m_pPromptDlg->initDialog(PromptDialog::BTN_M_C_C);
|
||
m_pPromptDlg->setTitleStr(tr("Chenille color change"));
|
||
m_pPromptDlg->setCurNeedleStrVisible(true);//当前针杆label是否可见
|
||
// m_pPromptDlg->setCurNeedleStr(value);//显示当前针杆
|
||
m_pPromptDlg->initNeedleBar(PRODUCT_TOWEL);
|
||
if (m_pPromptDlg->exec() == 1)
|
||
{
|
||
s32 val = m_pPromptDlg->getNeedleSelectIdx();//获取所选针杆的索引值
|
||
if(g_pMachine != NULL)
|
||
{
|
||
g_pMachine->chenilleSwitchNeedle(val);// 毛巾换色
|
||
}
|
||
}
|
||
}
|
||
else
|
||
{
|
||
m_pPromptDlg->initDialog(PromptDialog::BTN_M_C_C);
|
||
m_pPromptDlg->setTitleStr(tr("Emb color change"));
|
||
m_pPromptDlg->setCurNeedleStrVisible(true);//当前针杆label是否可见
|
||
//m_pPromptDlg->setCurNeedleStr(value);//显示当前针杆
|
||
m_pPromptDlg->initNeedleBar(PRODUCT_EMB);
|
||
|
||
if (m_pPromptDlg->exec() == 1)
|
||
{
|
||
s32 val = m_pPromptDlg->getNeedleSelectIdx();//获取所选针杆的索引值
|
||
|
||
if(g_pMachine != NULL)
|
||
{
|
||
g_pMachine->embSwitchNeedle(val);// 平绣换色
|
||
}
|
||
}
|
||
}
|
||
}
|
||
|
||
}
|
||
else if(g_emMacType == MACHINE_EMB && g_emProductType == PRODUCT_CHEN)//纯毛巾
|
||
{
|
||
m_pPromptDlg->initDialog(PromptDialog::BTN_M_C_C);
|
||
m_pPromptDlg->setTitleStr(tr("Color change"));
|
||
m_pPromptDlg->setCurNeedleStrVisible(true);//当前针杆label是否可见
|
||
// m_pPromptDlg->setCurNeedleStr(value);//显示当前针杆
|
||
m_pPromptDlg->initNeedleBar(PRODUCT_TOWEL);
|
||
if (m_pPromptDlg->exec() == 1)
|
||
{
|
||
s32 val = m_pPromptDlg->getNeedleSelectIdx();//获取所选针杆的索引值
|
||
if(g_pMachine != NULL)
|
||
{
|
||
g_pMachine->chenilleSwitchNeedle(val);// 毛巾换色
|
||
}
|
||
}
|
||
}
|
||
else
|
||
{
|
||
m_pPromptDlg->initDialog(PromptDialog::BTN_M_C_C);
|
||
m_pPromptDlg->setTitleStr(tr("Manual change color"));
|
||
m_pPromptDlg->setCurNeedleStrVisible(true);//当前针杆label是否可见
|
||
//m_pPromptDlg->setCurNeedleStr(value);//显示当前针杆
|
||
m_pPromptDlg->initNeedleBar(PRODUCT_EMB);
|
||
|
||
if (m_pPromptDlg->exec() == 1)
|
||
{
|
||
s32 val = m_pPromptDlg->getNeedleSelectIdx();//获取所选针杆的索引值
|
||
|
||
if(g_pMachine != NULL)
|
||
{
|
||
g_pMachine->embSwitchNeedle(val);// 平绣换色
|
||
}
|
||
}
|
||
}
|
||
slotCalMachineProgress(CSV_00_CODE_5);
|
||
if (m_adcFlag == 1)//弹窗界面显示,点击了取消按钮,弹窗关闭
|
||
{
|
||
if(g_pMachine != NULL)
|
||
{
|
||
g_pMachine->testADC(0);//点击关闭按钮,发退出测试电位器命令,para2=0
|
||
m_adcFlag = -1;
|
||
}
|
||
}
|
||
}
|
||
|
||
//毛巾换色 -rq (单独的一个快捷功能,黄色的按钮)//目前没用到
|
||
void MainWidgetFunction::funTowelChangeColor()
|
||
{
|
||
m_pPromptDlg->initDialog(PromptDialog::BTN_M_C_C);
|
||
m_pPromptDlg->setTitleStr(tr("Towel color change"));
|
||
m_pPromptDlg->setCurNeedleStrVisible(false);//当前针杆label是否可见
|
||
m_pPromptDlg->initNeedleBar(PRODUCT_TOWEL);
|
||
if (m_pPromptDlg->exec() == 1)
|
||
{
|
||
s32 val = m_pPromptDlg->getNeedleSelectIdx();//获取所选针杆的索引值
|
||
if(g_pMachine != NULL)
|
||
{
|
||
g_pMachine->chenilleSwitchNeedle(val);// 毛巾换色
|
||
}
|
||
}
|
||
}
|
||
//线迹偏移
|
||
void MainWidgetFunction::funTraceOffset()
|
||
{
|
||
if(g_pMachine == NULL)
|
||
{
|
||
return;
|
||
}
|
||
|
||
m_pPromptDlg->initDialog(PromptDialog::BTN_LINE_OFFSET);
|
||
m_pPromptDlg->setTitleStr(tr("Trace offset"));//线迹偏移
|
||
|
||
if(m_pPromptDlg->exec() == 1)
|
||
{
|
||
s16 val = m_pPromptDlg->getTraceOffsetType();
|
||
if (val == 1)//线迹偏移
|
||
{
|
||
g_pMachine->traceOffset();
|
||
}
|
||
else if (val == 2)//线迹偏移数据复位
|
||
{
|
||
g_pMachine->resetTraceOffset();
|
||
}
|
||
else if (val == 3)//清除当前索引的线迹偏移数据
|
||
{
|
||
g_pMachine->clearCurTraceOffset();
|
||
}
|
||
}
|
||
}
|
||
|
||
//绗绣机 工作暂停功能
|
||
void MainWidgetFunction::funWorkPause()
|
||
{
|
||
m_pPromptDlg->initDialog(PromptDialog::BTN_OK_CANCEL);
|
||
m_pPromptDlg->setTitleStr(tr("Work Pause"));//工作暂停
|
||
|
||
QString str;
|
||
str = tr("Work Pause, please pay attention to safety!");//工作暂停,请注意安全!
|
||
m_pPromptDlg->setContentStr(str);
|
||
|
||
if(m_pPromptDlg->exec() == 1)
|
||
{
|
||
if(g_pMachine != NULL)
|
||
{
|
||
g_pMachine->pauseWork();
|
||
}
|
||
}
|
||
}
|
||
|
||
//缠绕剪刀开合
|
||
void MainWidgetFunction::funCoilCutterOpenAndClose()
|
||
{
|
||
m_pPromptDlg->initDialog(PromptDialog::BTN_OK_CANCEL);
|
||
m_pPromptDlg->setTitleStr(tr("Winding and cut the thread"));//缠绕下剪线
|
||
QString str;
|
||
str = tr("Winding scissors are about to move, please pay attention to safety!");//缠绕剪刀即将动作,请注意安全!
|
||
m_pPromptDlg->setContentStr(str);
|
||
if(m_pPromptDlg->exec() == 1)
|
||
{
|
||
if(g_pMachine != NULL)
|
||
{
|
||
g_pMachine->manualAction(COIL_CUT_ONOFF);
|
||
}
|
||
}
|
||
|
||
}
|
||
void MainWidgetFunction::funCoilManualTrim()
|
||
{
|
||
m_pPromptDlg->initDialog(PromptDialog::BTN_OK_CANCEL);
|
||
m_pPromptDlg->setTitleStr(tr("Coil Trim"));//缠绕剪线
|
||
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)
|
||
{
|
||
g_pMachine->manualAction(COIL_CUT_THREAD);
|
||
}
|
||
}
|
||
}
|
||
void MainWidgetFunction::funCoilSpindleJog()
|
||
{
|
||
m_pPromptDlg->initDialog(PromptDialog::BTN_OK_CANCEL);
|
||
m_pPromptDlg->setTitleStr(tr("Coil 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->manualAction(COIL_MS_JOG);
|
||
}
|
||
}
|
||
}
|
||
|
||
//缠绕主轴旋转
|
||
void MainWidgetFunction::funCoilSpindleRotate()
|
||
{
|
||
m_noseHead = COIL;
|
||
m_pPromptDlg->initDialog(PromptDialog::BTN_SPINDLE_ROTATE);
|
||
m_pPromptDlg->setTitleStr(tr("Coil Spindle rotate angle"));//旋转角度
|
||
m_pPromptDlg->exec();
|
||
}
|
||
|
||
//缠绕M轴旋转
|
||
void MainWidgetFunction::funCoilMSpindleRotate()
|
||
{
|
||
m_noseHead = COILM;
|
||
m_pPromptDlg->initDialog(PromptDialog::BTN_SPINDLE_ROTATE);
|
||
m_pPromptDlg->setTitleStr(tr("Coil M Spindle rotate angle"));//旋转角度
|
||
m_pPromptDlg->exec();
|
||
}
|
||
|
||
//亮片换色,sq 0代表左亮片,1代表右亮片
|
||
void MainWidgetFunction::funSequinChangeColor(s16 sq)
|
||
{
|
||
m_pPromptDlg->initDialog(PromptDialog::BTN_M_C_C);
|
||
QString str = tr("Left sequin change color");//左亮片换色
|
||
if(sq == 1)
|
||
{
|
||
str = tr("Right sequin change color");//右亮片换色
|
||
}
|
||
m_pPromptDlg->setTitleStr(str);
|
||
m_pPromptDlg->setCurNeedleStrVisible(false);
|
||
|
||
#if(0)
|
||
int sequinNum = 0;
|
||
if(g_pMachine != NULL)
|
||
{
|
||
ParaStruct mcParaValues;
|
||
mcParaValues = g_pMachine->getMcPara();
|
||
if(sq == 0)
|
||
{
|
||
sequinNum = 8;
|
||
//sequinNum = mcParaValues.buf[48];//左亮片规格
|
||
}
|
||
else if(sq == 1)
|
||
{
|
||
sequinNum = 8;
|
||
//sequinNum = mcParaValues.buf[49];//右亮片规格
|
||
}
|
||
//sequinNum = 10;//亮片规格
|
||
}
|
||
#endif
|
||
//亮片换色界面现在是固定的8个针杆,改成和针杆设置中设置的亮片针杆 -rq
|
||
m_pPromptDlg->initNeedleBar(RODUCT_SEQUIN);
|
||
// m_pPromptDlg->initSequinNeedleBar(sequinNum);//亮片默认就是8个针杆
|
||
|
||
if (m_pPromptDlg->exec() == 1)
|
||
{
|
||
s32 val = m_pPromptDlg->getNeedleSelectIdx();//获取所选针杆的索引值
|
||
|
||
if(g_pMachine != NULL)
|
||
{
|
||
g_pMachine->sequinSwitchNeedle(val,sq);
|
||
}
|
||
}
|
||
}
|
||
|
||
//定量移框
|
||
void MainWidgetFunction::funQuantityMoveFrame()
|
||
{
|
||
m_pPromptDlg->initDialog(PromptDialog::BTN_MOVE_FRAME);
|
||
m_pPromptDlg->setTitleStr(tr("Quantity move frame"));//定量移框
|
||
|
||
if (m_pPromptDlg->exec() == 1)
|
||
{
|
||
s32 x = m_pPromptDlg->getMoveX();
|
||
s32 y = m_pPromptDlg->getMoveY();
|
||
|
||
if(g_pMachine != NULL)
|
||
{
|
||
g_pMachine->quantityMoveFrame(x,y);
|
||
}
|
||
}
|
||
}
|
||
|
||
//针杆定位
|
||
void MainWidgetFunction::funNeedleRodPosition()
|
||
{
|
||
m_pPromptDlg->initDialog(PromptDialog::BTN_OK_CANCEL);
|
||
m_pPromptDlg->setTitleStr(tr("Needle rod position"));//针杆定位
|
||
|
||
QString str;
|
||
str = tr("The needle pole is about to drop, please pay attention to safety!");//针杆即将下降,请注意安全!
|
||
m_pPromptDlg->setContentStr(str);
|
||
|
||
if(m_pPromptDlg->exec() == 1)
|
||
{
|
||
if(g_pMachine != NULL)
|
||
{
|
||
g_pMachine->manualAction(EMB_NEEDLE_POS);
|
||
}
|
||
}
|
||
}
|
||
|
||
//空走边框
|
||
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::funTowelCable()
|
||
{
|
||
m_pPromptDlg->initDialog(PromptDialog::BTN_OK_CANCEL);
|
||
m_pPromptDlg->setTitleStr(tr("Towel cable"));//毛巾拉线
|
||
|
||
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->manualAction( CHENILLE_LINE_UP);
|
||
}
|
||
}
|
||
}
|
||
//流程复位
|
||
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();
|
||
}
|
||
}
|
||
}
|
||
//定上料点 -rq
|
||
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::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::funResetRepeatNum()
|
||
{
|
||
m_pPromptDlg->initDialog(PromptDialog::BTN_OK_CANCEL);
|
||
m_pPromptDlg->setTitleStr(tr("Reset Repeat Num"));//重置反复次数
|
||
|
||
QString str;
|
||
str = tr("Reset Repeat Num!");//重置反复次数!
|
||
m_pPromptDlg->setContentStr(str);
|
||
|
||
if(m_pPromptDlg->exec() == 1)
|
||
{
|
||
if(g_pMachine != NULL)
|
||
{
|
||
g_pMachine->resetRepeatNum();
|
||
}
|
||
}
|
||
}
|
||
|
||
//梭盘计数复位
|
||
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)
|
||
{
|
||
g_pMachine->setWorkRange();
|
||
}
|
||
}
|
||
}
|
||
|
||
void MainWidgetFunction::sendPatternHead(QString filePath)
|
||
{
|
||
int fileMode = g_pSettings->readFromInHMIiFile("HMI/fileMode").toInt();
|
||
|
||
if(fileMode == DATA_DS16)//ds16
|
||
{
|
||
//获取文件头并重新发送文件头
|
||
DataDs16FileHead *pDs16Head = g_pCurEmbData->getDsDatHead();
|
||
g_pMachine->setFilePara(0, m_curFileID, (DataFilePara&)*pDs16Head);
|
||
}
|
||
else if(fileMode == DATA_DS8)//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;
|
||
memcpy(pDs8Head->switchTable,pDs16Head->switchTable,sizeof(pDs8Head->switchTable));
|
||
|
||
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::sendPatternPatchHeadData(QString filePath,int type)
|
||
{
|
||
//发送隔头机头设置
|
||
u8 headBuf[HEADBUF];
|
||
memset(headBuf,0,sizeof(headBuf));
|
||
|
||
QFile file(filePath + ".fcg");
|
||
if(file.exists())//存在fcg文件
|
||
{
|
||
if(file.open(QIODevice::ReadOnly))
|
||
{
|
||
QByteArray ary = file.readAll();
|
||
int totalSize = sizeof(DataFileHead)+HEADBUF;
|
||
if(ary.size() >= totalSize)
|
||
{
|
||
memcpy(headBuf,ary.data()+sizeof(DataFileHead),sizeof(headBuf));
|
||
}
|
||
}
|
||
file.close();
|
||
}
|
||
|
||
if(type == FILE_TYPE_FRAME)//边框刺绣时隔头绣数据清空
|
||
{
|
||
memset(headBuf,0,sizeof(headBuf));
|
||
}
|
||
|
||
//发送buf给下位机,包总共8192,因为每次只能发1024,所以分8次发下去
|
||
if(g_pMachine != NULL)
|
||
{
|
||
for(u16 i = 0; i < sizeof(headBuf)/MAX_EXDP_LEN; i++)
|
||
{
|
||
g_pMachine->setHeadPara((ParaStruct*)(headBuf+i*MAX_EXDP_LEN),i);
|
||
}
|
||
}
|
||
|
||
//发送贴布绣参数设置
|
||
u16 patchColorBuf[PATCHCOLORBUF];
|
||
memset(patchColorBuf,0,sizeof(patchColorBuf));
|
||
|
||
NeedlePatch patchNeedleBuf[PATCHNEEDLEBUF];
|
||
memset(patchNeedleBuf,0,sizeof(patchNeedleBuf));
|
||
|
||
if(file.exists())//存在fcg文件
|
||
{
|
||
if(file.open(QIODevice::ReadOnly))
|
||
{
|
||
QByteArray ary = file.readAll();
|
||
int totalSize = sizeof(DataFileHead)+HEADBUF+PATCHCOLORBUF*sizeof(u16);
|
||
if(ary.size() >= totalSize)
|
||
{
|
||
memcpy(patchColorBuf,ary.data()+sizeof(DataFileHead)+HEADBUF,sizeof(patchColorBuf));
|
||
}
|
||
|
||
totalSize = sizeof(DataFileHead)+HEADBUF+PATCHCOLORBUF*sizeof(u16)+PATCHNEEDLEBUF*sizeof(NeedlePatch);
|
||
if(ary.size() >= totalSize)
|
||
{
|
||
memcpy(patchNeedleBuf,ary.data()+sizeof(DataFileHead)+HEADBUF+PATCHCOLORBUF*sizeof(u16),sizeof(patchNeedleBuf));
|
||
}
|
||
}
|
||
file.close();
|
||
}
|
||
|
||
if(type == FILE_TYPE_FRAME)//边框刺绣时隔头绣数据清空
|
||
{
|
||
memset(patchColorBuf,0,sizeof(patchColorBuf));
|
||
memset(patchNeedleBuf,0,sizeof(patchNeedleBuf));
|
||
}
|
||
|
||
//发送buf给下位机
|
||
if(g_pMachine != NULL)
|
||
{
|
||
g_pMachine->setPatchColorPara((ParaStruct*)(patchColorBuf));
|
||
g_pMachine->setPatchNeedlePara((ParaStruct*)(patchNeedleBuf));
|
||
}
|
||
}
|
||
|
||
void MainWidgetFunction::sendPatternTowelHeightData(QString filePath)
|
||
{
|
||
u8 dataBuf[TOWELHIGHBUF];
|
||
memset(dataBuf,0,sizeof(dataBuf));
|
||
|
||
QFile file(filePath + ".fcg");
|
||
if(file.exists())//存在fcg文件
|
||
{
|
||
if(file.open(QIODevice::ReadOnly))
|
||
{
|
||
QByteArray ary = file.readAll();
|
||
int totalSize = sizeof(DataFileHead)+HEADBUF+PATCHCOLORBUF*sizeof(u16)+PATCHNEEDLEBUF*sizeof(NeedlePatch)+TOWELHIGHBUF;
|
||
if(ary.size() >= totalSize)
|
||
{
|
||
int size = sizeof(DataFileHead)+HEADBUF+PATCHCOLORBUF*sizeof(u16)+PATCHNEEDLEBUF*sizeof(NeedlePatch);
|
||
memcpy(dataBuf,ary.data()+size,sizeof(dataBuf));
|
||
}
|
||
}
|
||
file.close();
|
||
}
|
||
|
||
//发送buf给下位机,总共1024个字节
|
||
if(g_pMachine != NULL)
|
||
{
|
||
g_pMachine->setTowelHeightPara((ParaStruct*)(dataBuf));
|
||
}
|
||
}
|
||
|
||
//选择花样后发送数据并显示大图
|
||
void MainWidgetFunction::sendPatternData(QString filePath,int type)
|
||
{
|
||
m_filePath = filePath;
|
||
|
||
sendPatternPatchHeadData(filePath,type);
|
||
|
||
int towel = g_pSettings->readFromInHMIiFile("HMI/towel").toInt();//是否有毛巾功能
|
||
if(towel == 1)//有毛巾功能
|
||
{
|
||
sendPatternTowelHeightData(filePath);
|
||
}
|
||
|
||
//保存最后一次绣作的花样路径到配置文件中
|
||
if(g_pSettings != NULL)
|
||
{
|
||
g_pSettings->writeToInHMIiFile("Pattern/name",filePath);
|
||
}
|
||
|
||
int fileMode = g_pSettings->readFromInHMIiFile("HMI/fileMode").toInt();
|
||
|
||
if(fileMode == DATA_DS16)
|
||
{
|
||
sendDs16PatternData(type);//发送ds16数据
|
||
}
|
||
else if(fileMode == DATA_DS8)
|
||
{
|
||
convertDs16ToDs8AndSend(filePath,type);//将ds16数据转换为ds8数据并发送
|
||
}
|
||
}
|
||
|
||
void MainWidgetFunction::funBottomDetect(int headType)
|
||
{
|
||
m_pPromptDlg->initDialog(PromptDialog::BTN_BOTTOM);
|
||
m_pPromptDlg->setHeadType(headType);
|
||
m_pPromptDlg->setTitleStr(tr("Bottom line detection"));
|
||
//m_pPromptDlg->setCurNeedleStr(value);//显示当前针杆
|
||
//m_pPromptDlg->setCurNeedleStrVisible(true);//当前针杆label是否可见
|
||
if(headType == FLATEMB)
|
||
{
|
||
m_pPromptDlg->initNeedleBar(PRODUCT_EMB);
|
||
m_pPromptDlg->setCurNeedleStrVisible(true);//当前针杆label是否可见
|
||
}
|
||
else if(headType == COIL)
|
||
{
|
||
m_pPromptDlg->initNeedleBar(PRODUCT_COIL);
|
||
m_pPromptDlg->setCurNeedleStrVisible(false);//当前针杆label是否可见
|
||
}
|
||
m_pPromptDlg->exec();
|
||
}
|
||
|
||
void MainWidgetFunction::funFaceDetect(int headType)
|
||
{
|
||
m_pPromptDlg->initDialog(PromptDialog::BTN_FACE);
|
||
m_pPromptDlg->setHeadType(headType);
|
||
m_pPromptDlg->setTitleStr(tr("Face line detection"));
|
||
|
||
//m_pPromptDlg->setCurNeedleStr(value);
|
||
if(headType == FLATEMB)
|
||
{
|
||
m_pPromptDlg->initNeedleBar(PRODUCT_EMB);
|
||
m_pPromptDlg->setCurNeedleStrVisible(true);//当前针杆label是否可见
|
||
}
|
||
else if(headType == COIL)
|
||
{
|
||
m_pPromptDlg->initNeedleBar(PRODUCT_COIL);
|
||
m_pPromptDlg->setCurNeedleStrVisible(false);//当前针杆label是否可见
|
||
}
|
||
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::funAgingTest()
|
||
{
|
||
m_pPromptDlg->initDialog(PromptDialog::BTN_OK_CANCEL);//有确定和取消按钮
|
||
m_pPromptDlg->setTitleStr(tr("Aging test"));//老化测试
|
||
QString str;
|
||
if(g_pMachine != NULL)
|
||
{
|
||
//老化测试 m_mcStatus 读的是第一个主板
|
||
if ((m_mcStatus.workStatus & WORK_STA_SIMULATE) == WORK_STA_SIMULATE) //模拟工作
|
||
{
|
||
str = tr("Whether to turn off the aging test?");//是否关闭老化测试?
|
||
}
|
||
else
|
||
{
|
||
str = tr("Whether to carry out aging test?");//是否进行老化测试?
|
||
}
|
||
}
|
||
m_pPromptDlg->setContentStr(str);
|
||
|
||
if(m_pPromptDlg->exec() == 1)
|
||
{
|
||
if(g_pMachine != NULL)//第一个主板的g_pMachine指针 //指针必须不为空才能去调用
|
||
{ //每次只判断第一个主板的机器状态
|
||
if ((m_mcStatus.workStatus & WORK_STA_SIMULATE) == WORK_STA_SIMULATE) //模拟工作
|
||
{
|
||
//正常工作
|
||
if(g_pMachine != NULL)
|
||
{
|
||
g_pMachine->setNormalWork();
|
||
}
|
||
}
|
||
else //正常工作
|
||
{
|
||
//模拟工作
|
||
if(g_pMachine != NULL)
|
||
{
|
||
g_pMachine->setSimulateWork();
|
||
}
|
||
}
|
||
}
|
||
}
|
||
|
||
}
|
||
void MainWidgetFunction::funGetEXBVersionInfo(QString tStyle)
|
||
{
|
||
m_pSystemManageDlg->setTypeLogo(tStyle);
|
||
m_pSystemManageDlg->setMainTitle(tr("EXB system info"));
|
||
m_pSystemManageDlg->setSubTitle(tr("Auxiliary Function > EXB system info"));
|
||
m_pSystemManageDlg->initDialog();
|
||
|
||
m_pSystemManageDlg->exec(-1);
|
||
}
|
||
|
||
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 > 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 > 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 > 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 >Debug Info"));//辅助功能 > 调试信息
|
||
m_pSystemManageDlg->initDialog();
|
||
addJournalInfoDebug();
|
||
//m_pSystemManageDlg->exec(JOURNALBREAKAGE);//显示窗体
|
||
}
|
||
|
||
void MainWidgetFunction::slotCounterPrompt(s16 flag)
|
||
{
|
||
QString str;
|
||
|
||
if(flag == 0)
|
||
{
|
||
str = tr("Generating pattern profile file...");//正在生成花样轮廓文件...
|
||
m_pPromptDlg->initDialog(PromptDialog::BTN_NONE);
|
||
m_pPromptDlg->setTitleStr(tr("Prompt"));
|
||
m_pPromptDlg->setContentStr(str);
|
||
m_pPromptDlg->show();
|
||
QCoreApplication::processEvents(QEventLoop::AllEvents);
|
||
}
|
||
else
|
||
{
|
||
m_pPromptDlg->initDialog(PromptDialog::BTN_OK);
|
||
str = tr("The pattern contour file has been generated!");//花样轮廓文件已生成!
|
||
m_pPromptDlg->setContentStr(str);
|
||
}
|
||
}
|
||
|
||
//错误日志
|
||
void MainWidgetFunction::funJournalError(QString tStyle)
|
||
{
|
||
m_pSystemManageDlg->setTypeLogo(tStyle);
|
||
m_pSystemManageDlg->setMainTitle(tr("ErrorLog"));//错误日志
|
||
m_pSystemManageDlg->setSubTitle(tr("Auxiliary Function > 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();
|
||
}
|
||
|
||
void MainWidgetFunction::funHeadEmb(QString filePath)
|
||
{
|
||
int headNum = 0;
|
||
|
||
if(g_pMachine != NULL)
|
||
{
|
||
ParaStruct mcParaValues;
|
||
mcParaValues = g_pMachine->getMcPara();
|
||
headNum = mcParaValues.buf[2];//机头个数
|
||
//qDebug()<<"headNum"<<headNum;
|
||
//headNum =30;//机头个数
|
||
}
|
||
|
||
int colorOrderNum = g_pCurEmbData->getColorNums();//总颜色数
|
||
m_pPromptDlg->initDialog(PromptDialog::BTN_HEAD_EMB);
|
||
m_pPromptDlg->setTitleStr(tr("Head embroidery"));
|
||
m_pPromptDlg->initEmbHead(headNum,colorOrderNum,filePath);
|
||
|
||
if (m_pPromptDlg->exec() == 1)
|
||
{
|
||
u8 headBuf[HEADBUF];
|
||
memset(headBuf,0,sizeof(headBuf));
|
||
|
||
memcpy(headBuf,m_pPromptDlg->getHeadBuf(),sizeof(headBuf));
|
||
|
||
//保存buf到配置文件中
|
||
QFile file(filePath+".fcg");
|
||
|
||
QByteArray fileAry;
|
||
fileAry.resize(sizeof(DataFileHead)+HEADBUF+PATCHCOLORBUF*sizeof(u16)+PATCHNEEDLEBUF*sizeof(NeedlePatch)+TOWELHIGHBUF);
|
||
memset(fileAry.data(),0,fileAry.length());
|
||
|
||
if(file.exists())//存在fcg文件
|
||
{
|
||
if(file.open(QIODevice::ReadOnly))
|
||
{
|
||
QByteArray ary = file.readAll();
|
||
memcpy(fileAry.data(),ary.data(),ary.length());
|
||
}
|
||
file.close();
|
||
}
|
||
|
||
if(!file.open(QIODevice::WriteOnly | QIODevice::Truncate))
|
||
{
|
||
qDebug() << "open file fail when wirte";
|
||
return;
|
||
}
|
||
else
|
||
{
|
||
if((u32)fileAry.length() >= (sizeof(DataFileHead)+sizeof(headBuf)))
|
||
{
|
||
memcpy(fileAry.data()+sizeof(DataFileHead),(char*)headBuf,sizeof(headBuf));
|
||
file.write(fileAry.data(),fileAry.length());
|
||
}
|
||
file.close();
|
||
}
|
||
|
||
emit siHeadBuf(headBuf);//发送隔头绣数据,为了改变色序设定中的隔头绣数据
|
||
|
||
//发送buf给下位机,包总共8192,因为每次只能发1024,所以分8次发下去
|
||
if(g_pMachine != NULL)
|
||
{
|
||
for(u16 i = 0; i < sizeof(headBuf)/MAX_EXDP_LEN; i++)
|
||
{
|
||
g_pMachine->setHeadPara((ParaStruct*)(headBuf+i*MAX_EXDP_LEN),i);
|
||
}
|
||
}
|
||
}
|
||
}
|
||
|
||
void MainWidgetFunction::funQuiHeadEmb(QString filePath)
|
||
{
|
||
m_filePath = filePath;
|
||
|
||
int headNum = 0;
|
||
int showHead = 0;
|
||
|
||
if(g_pMachine != NULL)
|
||
{
|
||
ParaStruct mcParaValues;
|
||
mcParaValues = g_pMachine->getMcPara();
|
||
headNum = mcParaValues.buf[2];//机头个数
|
||
//qDebug()<<"headNum"<<headNum;
|
||
//headNum = 120;//机头个数
|
||
}
|
||
|
||
if(g_emProductType == PRODUCT_QUI_SINGLE)//单排
|
||
{
|
||
showHead = headNum;
|
||
}
|
||
else if(g_emProductType == PRODUCT_QUI_DOUBLE)//双排
|
||
{
|
||
showHead = headNum / 2;
|
||
}
|
||
|
||
int colorOrderNum = g_pCurEmbData->getColorNums();//总颜色数
|
||
m_pBrokenLineDialog->initDialog(BrokenLineDialog::BTN_HEADEMB);
|
||
m_pBrokenLineDialog->setTitleStr(tr("Head embroidery"));
|
||
m_pBrokenLineDialog->initEmbHead(showHead,colorOrderNum,filePath);
|
||
m_pBrokenLineDialog->show();
|
||
}
|
||
|
||
void MainWidgetFunction::funSendPatchEmb(QString filePath,u16* patchColorBuf,NeedlePatch* patchNeedleBuf)
|
||
{
|
||
//保存buf到配置文件中
|
||
QFile file(filePath+".fcg");
|
||
|
||
QByteArray fileAry;
|
||
fileAry.resize(sizeof(DataFileHead)+HEADBUF+PATCHCOLORBUF*sizeof(u16)+PATCHNEEDLEBUF*sizeof(NeedlePatch)+TOWELHIGHBUF);
|
||
memset(fileAry.data(),0,fileAry.length());
|
||
|
||
if(file.exists())//存在fcg文件
|
||
{
|
||
if(file.open(QIODevice::ReadOnly))
|
||
{
|
||
QByteArray ary = file.readAll();
|
||
memcpy(fileAry.data(),ary.data(),ary.length());
|
||
}
|
||
file.close();
|
||
}
|
||
|
||
if(!file.open(QIODevice::WriteOnly | QIODevice::Truncate))
|
||
{
|
||
qDebug() << "open file fail when wirte";
|
||
return;
|
||
}
|
||
else
|
||
{
|
||
u32 size = fileAry.length();
|
||
if(size >= sizeof(DataFileHead)+HEADBUF+PATCHCOLORBUF*sizeof(u16))
|
||
{
|
||
memcpy(fileAry.data()+sizeof(DataFileHead)+HEADBUF,(char*)patchColorBuf,PATCHCOLORBUF*sizeof(u16));
|
||
}
|
||
if(size >= sizeof(DataFileHead)+HEADBUF+PATCHCOLORBUF*sizeof(u16)+PATCHNEEDLEBUF*sizeof(NeedlePatch))
|
||
{
|
||
memcpy(fileAry.data()+sizeof(DataFileHead)+HEADBUF+PATCHCOLORBUF*sizeof(u16),(char*)patchNeedleBuf,PATCHNEEDLEBUF*sizeof(NeedlePatch));
|
||
}
|
||
file.write(fileAry.data(),size);
|
||
file.close();
|
||
}
|
||
|
||
//发送buf给下位机
|
||
if(g_pMachine != NULL)
|
||
{
|
||
g_pMachine->setPatchColorPara((ParaStruct*)(patchColorBuf));
|
||
g_pMachine->setPatchNeedlePara((ParaStruct*)(patchNeedleBuf));
|
||
}
|
||
}
|
||
|
||
void MainWidgetFunction::funColorOrderChange(QString filePath,u8* buf,s16 combineMode)
|
||
{
|
||
sendPatternHead(filePath);//发送头文件
|
||
|
||
//组合模式发送机头工作缓存
|
||
if(combineMode != 0)
|
||
{
|
||
u8 headBuf[HEADBUF];
|
||
memset(headBuf,0,sizeof(headBuf));
|
||
|
||
memcpy(headBuf,buf,sizeof(headBuf));
|
||
|
||
//保存buf到配置文件中
|
||
QFile file(filePath+".fcg");
|
||
|
||
QByteArray fileAry;
|
||
fileAry.resize(sizeof(DataFileHead)+HEADBUF+PATCHCOLORBUF*sizeof(u16)+PATCHNEEDLEBUF*sizeof(NeedlePatch)+TOWELHIGHBUF);
|
||
memset(fileAry.data(),0,fileAry.length());
|
||
|
||
if(file.exists())//存在fcg文件
|
||
{
|
||
if(file.open(QIODevice::ReadOnly))
|
||
{
|
||
QByteArray ary = file.readAll();
|
||
memcpy(fileAry.data(),ary.data(),ary.length());
|
||
}
|
||
file.close();
|
||
}
|
||
|
||
if(!file.open(QIODevice::WriteOnly | QIODevice::Truncate))
|
||
{
|
||
qDebug() << "open file fail when wirte";
|
||
return;
|
||
}
|
||
else
|
||
{
|
||
if((u32)fileAry.length() >= sizeof(DataFileHead)+sizeof(headBuf))
|
||
{
|
||
memcpy(fileAry.data()+sizeof(DataFileHead),(char*)headBuf,sizeof(headBuf));
|
||
file.write(fileAry.data(),fileAry.length());
|
||
}
|
||
file.close();
|
||
}
|
||
|
||
//发送buf给下位机,包总共8192,因为每次只能发1024,所以分8次发下去
|
||
if(g_pMachine != NULL)
|
||
{
|
||
for(u16 i = 0; i < sizeof(headBuf)/MAX_EXDP_LEN; i++)
|
||
{
|
||
g_pMachine->setHeadPara((ParaStruct*)(headBuf+i*MAX_EXDP_LEN),i);
|
||
}
|
||
}
|
||
}
|
||
}
|
||
//报错信息
|
||
int MainWidgetFunction::funErrorPrompt(u32 errcode,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)
|
||
{
|
||
if(m_adcFlag == 1)//错误信息弹窗,点击确认按钮后,退出电位器测试
|
||
{
|
||
if(g_pMachine != NULL)
|
||
{
|
||
g_pMachine->testADC(0);//点击关闭按钮,发退出测试电位器命令,para2=0
|
||
m_adcFlag= -1;
|
||
}
|
||
}
|
||
if(g_emMacType == MACHINE_EMB||
|
||
g_emMacType == QUIMACHINE_EMB)
|
||
{
|
||
if(errcode == ERR_CHANGE_BOBBIN)
|
||
{
|
||
g_pMachine->resetBobbinCounter();// 底线计数复位
|
||
}
|
||
}
|
||
g_pMachine->cleanError();
|
||
}
|
||
return ret;
|
||
}
|
||
|
||
//信号异常报错弹窗
|
||
int MainWidgetFunction::funDetectSignalStatus(int type)
|
||
{
|
||
m_pBrokenLineDialog->initDialog(BrokenLineDialog::BTN_BROKEN);
|
||
int headState = m_mcStatus.potval;
|
||
|
||
QString headNumStr;//机头号
|
||
headNumStr.clear();
|
||
QString headTypeStr;//机头类型
|
||
headTypeStr.clear();
|
||
|
||
int ret = 0;
|
||
u32 headNum = 0;
|
||
u32 headType = 0;
|
||
if(headState >0)
|
||
{
|
||
ret = 1;
|
||
headType = (headState & 0xffff0000)>> 16;//高16位
|
||
headNum = headState&0xFFFF;//低16位
|
||
|
||
if(headType == FLATEMB)
|
||
{
|
||
headTypeStr = tr("Emb Head");//平绣机头
|
||
}
|
||
else if(headType == COIL)
|
||
{
|
||
headTypeStr = tr("Coil Head");//缠绕机头
|
||
}
|
||
else if(headType == TOWEL)
|
||
{
|
||
headTypeStr = tr("Chenille upper Head");//毛巾上机头
|
||
}
|
||
else if(headType == TOWEL_DOWN_HEAD)
|
||
{
|
||
headTypeStr = tr("Chenille lower Head");//毛巾下机头
|
||
}
|
||
if(type == 1)//ZP信号异常
|
||
{
|
||
m_pBrokenLineDialog->setTitleStr(tr("ZP signal abnormality:")+headTypeStr);
|
||
}
|
||
else//0 MP信号异常
|
||
{
|
||
m_pBrokenLineDialog->setTitleStr(tr("MP signal abnormality:")+headTypeStr);
|
||
}
|
||
m_pBrokenLineDialog->setContentStr(QString::number(headNum));//设置数字显示内容
|
||
m_pBrokenLineDialog->show(1);
|
||
}
|
||
return ret;
|
||
}
|
||
int MainWidgetFunction::funDetectBreakHeadStatus(int type)
|
||
{
|
||
m_pBrokenLineDialog->initDialog(BrokenLineDialog::BTN_BROKEN);
|
||
int headState = m_mcStatus.potval;
|
||
|
||
QString allStr;
|
||
allStr.clear();
|
||
QString headStr;
|
||
headStr.clear();
|
||
|
||
int ret = 0;
|
||
if(headState >0)
|
||
{
|
||
ret = 1;
|
||
if(type == 1)
|
||
{
|
||
m_pBrokenLineDialog->setTitleStr(tr("Lifting motor movement timeout"));
|
||
}
|
||
else
|
||
{
|
||
m_pBrokenLineDialog->setTitleStr(tr("Towel lifting motor position error"));
|
||
}
|
||
m_pBrokenLineDialog->setContentStr(QString::number(headState));//设置数字显示内容
|
||
m_pBrokenLineDialog->show(1);
|
||
}
|
||
return ret;
|
||
}
|
||
|
||
int MainWidgetFunction::funDetectBreakHeadStatusBit(int type)
|
||
{
|
||
m_pBrokenLineDialog->initDialog(BrokenLineDialog::BTN_BROKEN);
|
||
int headState = m_mcStatus.potval;
|
||
|
||
QString allStr;
|
||
allStr.clear();
|
||
QString headStr;
|
||
headStr.clear();
|
||
|
||
int ret = 0;
|
||
for(int i = 0; i < 32; i++)
|
||
{
|
||
if(((headState >> (i%32)) & 1) == 1)
|
||
{
|
||
ret = 1;
|
||
headStr += QString::number(i + 1)+"-";
|
||
}
|
||
}
|
||
if (ret == 1)
|
||
{
|
||
if(type == 1)
|
||
{
|
||
m_pBrokenLineDialog->setTitleStr(tr("Towel scissors movement timeout"));
|
||
}
|
||
else if(type == 2)
|
||
{
|
||
m_pBrokenLineDialog->setTitleStr(tr("Flat embroidery cutter is not returning"));
|
||
}
|
||
else
|
||
{
|
||
m_pBrokenLineDialog->setTitleStr(tr("Towel scissors not returned"));
|
||
}
|
||
if(headStr.length() > 0)
|
||
{
|
||
allStr += headStr;
|
||
allStr = allStr.left(allStr.length() - 1);
|
||
}
|
||
m_pBrokenLineDialog->setContentStr(allStr);//设置数字显示内容
|
||
m_pBrokenLineDialog->show(1);
|
||
}
|
||
return ret;
|
||
}
|
||
|
||
int MainWidgetFunction::funDetectBreakLineStatus()
|
||
{
|
||
m_pBrokenLineDialog->initDialog(BrokenLineDialog::BTN_BROKEN);
|
||
int allState = 0;
|
||
//用于绗缝机断线提醒
|
||
int allfState = 0;
|
||
int allbState = 0;
|
||
|
||
int fState1 = m_mcStatus.UThreadBkSta;//面线检测状态
|
||
int bState1 = m_mcStatus.DThreadBkSta;//底线检测状态
|
||
int allState1 = fState1 | bState1;//把底线的变量和面线变量或一下,然后再判断每位(机头)
|
||
// int allState = 45056; //1 -6 -11
|
||
|
||
//断线状态 33-64
|
||
int fState2 = m_mcStatus.tempdat1[0];//面线检测状态
|
||
int bState2 = m_mcStatus.tempdat1[1];//底线检测状态
|
||
int allState2 = fState2 | bState2;//把底线的变量和面线变量或一下,然后再判断每位(机头)
|
||
|
||
//断线状态 65-96
|
||
int fState3 = m_mcStatus.UThreadBkSta1[0];//面线检测状态
|
||
int bState3 = m_mcStatus.tempdat4[0];//底线检测状态
|
||
int allState3 = fState3 | bState3;//把底线的变量和面线变量或一下,然后再判断每位(机头)
|
||
|
||
//断线状态 97-128
|
||
int fState4 = m_mcStatus.UThreadBkSta1[1];//面线检测状态
|
||
int bState4 = m_mcStatus.tempdat4[1];//底线检测状态
|
||
int allState4 = fState4 | bState4;//把底线的变量和面线变量或一下,然后再判断每位(机头)
|
||
|
||
//断线状态 128-160
|
||
int fState5 = m_mcStatus.UThreadBkSta1[2];//面线检测状态
|
||
int bState5 = m_mcStatus.tempdat4[2];//底线检测状态
|
||
int allState5 = fState5 | bState5;//把底线的变量和面线变量或一下,然后再判断每位(机头)
|
||
|
||
allfState = fState1 | fState2 | fState3 | fState4 | fState5;
|
||
allbState = bState1 | bState2 | bState3 | bState4 | bState5;
|
||
|
||
QString allStr;
|
||
allStr.clear();
|
||
QString headStr;
|
||
headStr.clear();
|
||
|
||
QString quiHeadStr;//用于绗绣机断线提示
|
||
quiHeadStr.clear();
|
||
|
||
QString infoStr;//记录到csv的内容
|
||
infoStr.clear();
|
||
|
||
int ret = 0;
|
||
int chenHeadNum = 0;
|
||
int embHeadNum = 0;
|
||
int coilHeadNum = 0;
|
||
s16 type = 0;
|
||
|
||
if(g_pMachine != NULL)
|
||
{
|
||
ParaStruct mcParaValues;
|
||
mcParaValues = g_pMachine->getMcPara();
|
||
embHeadNum = mcParaValues.buf[2];//平绣机头个数
|
||
chenHeadNum = mcParaValues.buf[8];//毛巾机头个数
|
||
coilHeadNum = mcParaValues.buf[7];//缠绕机头个数
|
||
//如果为绗绣机读一下单双排
|
||
if(g_emMacType == QUIMACHINE_EMB)
|
||
{
|
||
type = (((mcParaValues.buf[15]>>(14-1))) & 0x01); //单排还是双排
|
||
}
|
||
}
|
||
int needDispNum = 0; // 需要显示的数字个数
|
||
int canDispNum = 3; // 能够显示的数字个数
|
||
int num = 0;
|
||
//当前工作机头
|
||
if(m_workNoseHead==1)//平绣
|
||
{
|
||
if (embHeadNum <= 1)
|
||
{
|
||
canDispNum = 0;
|
||
}
|
||
infoStr = tr("EmbBrokenLine Head:");
|
||
}
|
||
else if (m_workNoseHead==2)//毛巾
|
||
{
|
||
if (chenHeadNum <= 1)
|
||
{
|
||
canDispNum = 0;
|
||
}
|
||
infoStr = tr("ChenBrokenLine Head:");
|
||
}
|
||
else if (m_workNoseHead==3)//缠绕
|
||
{
|
||
if (coilHeadNum <= 1)
|
||
{
|
||
canDispNum = 0;
|
||
}
|
||
infoStr = tr("CoilBrokenLine Head:");
|
||
}
|
||
|
||
for(int i = 0; i < 160; i++)//支持160个机头
|
||
{
|
||
if(i >= 0 && i <32)
|
||
{
|
||
allState = allState1;
|
||
}
|
||
else if(i >= 32 && i <64)
|
||
{
|
||
allState = allState2;
|
||
}
|
||
else if(i >= 64 && i <96)
|
||
{
|
||
allState = allState3;
|
||
}
|
||
else if(i >= 96 && i <128)
|
||
{
|
||
allState = allState4;
|
||
}
|
||
else if(i >= 128 && i <160)
|
||
{
|
||
allState = allState5;
|
||
}
|
||
|
||
if(((allState >> (i%32)) & 1) == 1)//把底线的变量和面线变量或一下,然后再判断机头
|
||
{
|
||
ret = 1;
|
||
|
||
if(type == 0)//绗绣机单排或绣花机
|
||
{
|
||
headStr += QString::number(i+1)+"-";
|
||
}
|
||
else//绗绣机双排
|
||
{
|
||
if(i >= embHeadNum/2)
|
||
{
|
||
s16 cidx = i - embHeadNum/2;
|
||
headStr += "S"+QString::number(cidx+1)+"-";
|
||
}
|
||
else
|
||
{
|
||
headStr += QString::number(i+1)+"-";
|
||
}
|
||
}
|
||
|
||
if(m_workNoseHead==1)
|
||
{
|
||
num = m_embHeadBreakLine.headNeedleBreakNum[i][m_mcStatus.needleIdx-1];
|
||
m_embHeadBreakLine.headNeedleBreakNum[i][m_mcStatus.needleIdx-1]++;
|
||
}
|
||
else if(m_workNoseHead==2)
|
||
{
|
||
num = m_chenHeadBreakLine.headNeedleBreakNum[i][m_mcStatus.needleIdx-1];
|
||
m_chenHeadBreakLine.headNeedleBreakNum[i][m_mcStatus.needleIdx-1]++;
|
||
}
|
||
else if(m_workNoseHead==3)
|
||
{
|
||
num = m_coilHeadBreakLine.headNeedleBreakNum[i][m_mcStatus.needleIdx-1];
|
||
m_coilHeadBreakLine.headNeedleBreakNum[i][m_mcStatus.needleIdx-1]++;
|
||
}
|
||
|
||
//记录每个针位的断线
|
||
infoStr += QString::number(i+1)+" "+tr("NeedleIdx:")+QString::number(m_mcStatus.needleIdx)+" "+tr("break line num:") + QString::number(num);
|
||
if (i < 9)
|
||
{
|
||
needDispNum++;
|
||
}
|
||
else
|
||
{
|
||
needDispNum += 2;
|
||
}
|
||
}
|
||
}
|
||
|
||
|
||
if (ret == 1)
|
||
{
|
||
if(g_emMacType == QUIMACHINE_EMB)
|
||
{
|
||
if(allfState >0)
|
||
{
|
||
quiHeadStr = tr("face break line")+"\n";
|
||
}
|
||
if(allbState >0)
|
||
{
|
||
quiHeadStr += tr("bottom break line");
|
||
}
|
||
|
||
m_pPromptDlg->initDialog(PromptDialog::BTN_OK);
|
||
m_pPromptDlg->setTitleStr(tr("Alarm"));
|
||
m_pPromptDlg->setStrColor(quiHeadStr);
|
||
m_pPromptDlg->exec();
|
||
}
|
||
else
|
||
{
|
||
if (needDispNum > canDispNum)
|
||
{
|
||
if(m_workNoseHead==1)
|
||
{
|
||
m_pBrokenLineDialog->setContentInfoStr(tr("EmbHead BrokenLine"));//平绣断线
|
||
}
|
||
else if(m_workNoseHead==2)
|
||
{
|
||
m_pBrokenLineDialog->setContentInfoStr(tr("Chenille BrokenLine"));//毛巾断线
|
||
}
|
||
else if(m_workNoseHead==3)
|
||
{
|
||
m_pBrokenLineDialog->setContentInfoStr(tr("Coil BrokenLine"));//缠绕断线
|
||
}
|
||
|
||
m_pBrokenLineDialog->show(0);
|
||
}
|
||
else
|
||
{
|
||
if(headStr.length() > 0)
|
||
{
|
||
allStr += headStr;
|
||
allStr = allStr.left(allStr.length() - 1);
|
||
}
|
||
m_pBrokenLineDialog->setContentStr(allStr);
|
||
m_pBrokenLineDialog->show(0);
|
||
}
|
||
}
|
||
|
||
}
|
||
|
||
writeBreakageInfoToFile();
|
||
g_pSettings->writeToCsv(infoStr,TYPE_BREAK);//保存到csv
|
||
|
||
return ret;
|
||
}
|
||
|
||
void MainWidgetFunction::funSetPromptDlgVisibleFalse()
|
||
{
|
||
if(m_pPromptDlg->isVisible())
|
||
{
|
||
m_pPromptDlg->done(1);
|
||
}
|
||
if(m_pBrokenLineDialog->isVisible())//断线检测弹窗消失
|
||
{
|
||
m_pBrokenLineDialog->hide();
|
||
}
|
||
}
|
||
|
||
//底线计数复位
|
||
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::getPatternHeadConfig(QString path,DataFileHead & head)
|
||
{
|
||
memset(&head,0,sizeof(DataFileHead));
|
||
|
||
QString filePath = path + ".fcg";
|
||
QFile file(filePath);
|
||
if(file.exists())//存在fcg文件
|
||
{
|
||
if(file.open(QIODevice::ReadOnly))
|
||
{
|
||
QByteArray ary = file.readAll();
|
||
if((u32)ary.size() > sizeof(DataFileHead))
|
||
{
|
||
memcpy(&head,ary.data(),sizeof(DataFileHead));
|
||
}
|
||
}
|
||
file.close();
|
||
}
|
||
}
|
||
|
||
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::setCodecForLocale(QTextCodec::codecForName("GBK"));
|
||
|
||
QByteArray array;
|
||
array.clear();
|
||
for(int j = 0; j < m_csvFileStrList.size(); j++)
|
||
{
|
||
QString str = m_csvFileStrList[j];
|
||
array.append(str.toLocal8Bit());
|
||
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"));
|
||
}
|
||
}
|
||
|
||
void MainWidgetFunction::slotHeadParaImport(QString tStyle, int type)
|
||
{
|
||
m_pSystemManageDlg->setTypeLogo(tStyle);
|
||
m_pSystemManageDlg->setMainTitle(tr("Head Parameter Import"));//机头板参数导入
|
||
m_pSystemManageDlg->setSubTitle(tr("Root > Head Parameter Import"));//超级用户 > 机头板参数导入
|
||
m_pSystemManageDlg->initDialog();
|
||
systemUpgrade(PARA_IMPORT,type);
|
||
}
|
||
|
||
void MainWidgetFunction::slotHeadParaExport(int type)
|
||
{
|
||
funExportParameter(type);
|
||
}
|
||
|
||
void MainWidgetFunction::setPatternHeadConfig(QString path, DataFileHead head)
|
||
{
|
||
QByteArray fileAry;
|
||
fileAry.resize(sizeof(DataFileHead)+HEADBUF+PATCHCOLORBUF*sizeof(u16)+PATCHNEEDLEBUF*sizeof(NeedlePatch)+TOWELHIGHBUF);//数组大小
|
||
memset(fileAry.data(),0,fileAry.length());//清空数组
|
||
|
||
QFile file(path+".fcg");//path当前选择的花样路径//创建 QFile 对象,同时指定要操作的文件
|
||
//QFile file("D:/demo.txt");
|
||
|
||
if(file.exists())//存在fcg文件
|
||
{
|
||
if(file.open(QIODevice::ReadOnly))//只能对文件进行读操作
|
||
{
|
||
QByteArray ary = file.readAll();
|
||
memcpy(fileAry.data(),ary.data(),ary.length());
|
||
}
|
||
file.close();
|
||
}
|
||
|
||
DataFileHead wHead;
|
||
memcpy(&wHead,&head,sizeof(wHead));
|
||
|
||
//WriteOnly:只能对文件进行写操作,如果目标文件不存在,会自行创建一个新文件。
|
||
//Truncate:以重写模式打开,写入的数据会将原有数据全部清除。注意,此打开方式不能单独使用,通常会和 ReadOnly 或 WriteOnly 搭配。
|
||
if(!file.open(QIODevice::WriteOnly | QIODevice::Truncate))
|
||
{
|
||
qDebug() << "open file fail when wirte, path =" << path;//文件打开失败
|
||
return;
|
||
}
|
||
else
|
||
{
|
||
memcpy(fileAry.data(),(char*)&wHead,sizeof(DataFileHead));
|
||
file.write(fileAry.data(),fileAry.length());
|
||
#ifdef Q_OS_LINUX
|
||
system("sync");
|
||
#endif
|
||
file.close();
|
||
}
|
||
}
|
||
|
||
void MainWidgetFunction::getPatternTowelHeightFcg(QString path,QByteArray & datBuf)
|
||
{
|
||
QString filePath = path + ".fcg";
|
||
QFile file(filePath);
|
||
if(file.exists())//存在fcg文件
|
||
{
|
||
if(file.open(QIODevice::ReadOnly))
|
||
{
|
||
QByteArray ary = file.readAll();
|
||
s16 size = sizeof(DataFileHead)+HEADBUF+PATCHCOLORBUF*sizeof(u16)+PATCHNEEDLEBUF*sizeof(NeedlePatch)+TOWELHIGHBUF;
|
||
if(ary.size() >= size)
|
||
{
|
||
s16 oft = sizeof(DataFileHead)+HEADBUF+PATCHCOLORBUF*sizeof(u16)+PATCHNEEDLEBUF*sizeof(NeedlePatch);
|
||
memcpy(datBuf.data(),ary.data()+oft,datBuf.length());
|
||
}
|
||
}
|
||
file.close();
|
||
}
|
||
}
|
||
|
||
void MainWidgetFunction::setPatternTowelHeightFcg(QString path,QByteArray datBuf)
|
||
{
|
||
QByteArray fileAry;
|
||
fileAry.resize(sizeof(DataFileHead)+HEADBUF+PATCHCOLORBUF*sizeof(u16)+PATCHNEEDLEBUF*sizeof(NeedlePatch)+TOWELHIGHBUF);//数组大小
|
||
memset(fileAry.data(),0,fileAry.length());//清空数组
|
||
|
||
QFile file(path+".fcg");//path当前选择的花样路径//创建 QFile 对象,同时指定要操作的文件
|
||
//QFile file("D:/demo.txt");
|
||
|
||
if(file.exists())//存在fcg文件
|
||
{
|
||
if(file.open(QIODevice::ReadOnly))//只能对文件进行读操作
|
||
{
|
||
QByteArray ary = file.readAll();
|
||
memcpy(fileAry.data(),ary.data(),ary.length());
|
||
}
|
||
file.close();
|
||
}
|
||
|
||
//WriteOnly:只能对文件进行写操作,如果目标文件不存在,会自行创建一个新文件。
|
||
//Truncate:以重写模式打开,写入的数据会将原有数据全部清除。注意,此打开方式不能单独使用,通常会和 ReadOnly 或 WriteOnly 搭配。
|
||
if(!file.open(QIODevice::WriteOnly | QIODevice::Truncate))
|
||
{
|
||
qDebug() << "open file fail when wirte, path =" << path;//文件打开失败
|
||
return;
|
||
}
|
||
else
|
||
{
|
||
s32 size = fileAry.length();
|
||
s16 totalSize = sizeof(DataFileHead) + HEADBUF + PATCHCOLORBUF*sizeof(u16) +PATCHNEEDLEBUF*sizeof(NeedlePatch) +TOWELHIGHBUF;
|
||
if(size >= totalSize)
|
||
{
|
||
s16 oft = sizeof(DataFileHead) + HEADBUF + PATCHCOLORBUF*sizeof(u16) +PATCHNEEDLEBUF*sizeof(NeedlePatch);
|
||
memcpy(fileAry.data()+oft,datBuf.data(),datBuf.length());
|
||
}
|
||
file.write(fileAry.data(),size);
|
||
file.close();
|
||
}
|
||
}
|
||
|
||
//发送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()<<"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));
|
||
|
||
#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)
|
||
{
|
||
#if(IFDYSENDMODE)
|
||
{
|
||
//只有花样文件是动态传输,其他(边框刺绣、轮廓刺绣、开位线绣)还是非动态传输模式
|
||
if(type == FILE_TYPE_DAT)
|
||
{
|
||
g_pMachine->dySendFileProc(type, 0, m_curFileID, pDs16Head, (u8*)pData);//动态传输文件
|
||
}
|
||
else
|
||
{
|
||
g_pMachine->sendFileProc(type, 0, m_curFileID, pDs16Head, (u8*)pData);
|
||
}
|
||
}
|
||
#else
|
||
{
|
||
g_pMachine->sendFileProc(type, 0, m_curFileID, pDs16Head, (u8*)pData);
|
||
}
|
||
#endif
|
||
}
|
||
|
||
m_beginX = pDs16Head->beginX;
|
||
m_beginY = pDs16Head->beginY;
|
||
}
|
||
|
||
//将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);
|
||
|
||
//边框刺绣不保存ds8数据,避免边框刺绣完成后自动加载花样获得ds8文件头不对(还是边框刺绣的文件头)
|
||
if(type != FILE_TYPE_FRAME)
|
||
{
|
||
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);
|
||
|
||
m_beginX = pDs8Head->beginX;
|
||
m_beginY = pDs8Head->beginY;
|
||
|
||
#if(1)
|
||
//边框刺绣不保存ds8数据,避免边框刺绣完成后自动加载花样获得ds8文件头不对(还是边框刺绣的文件头)
|
||
if(type != FILE_TYPE_FRAME)
|
||
{
|
||
if(!file.open(QIODevice::WriteOnly | QIODevice::Truncate))
|
||
{
|
||
qDebug() << "open file fail when wirte, path =" << filePath;
|
||
return;
|
||
}
|
||
else
|
||
{
|
||
file.write(ds8dat);
|
||
file.close();
|
||
}
|
||
}
|
||
#endif
|
||
}
|
||
|
||
void MainWidgetFunction::addProductStatisInfo(int patternBreakLineNum)
|
||
{
|
||
//刷新生产统计信息
|
||
m_pSystemManageDlg->initDialog();
|
||
QString itemStr;
|
||
itemStr.clear();
|
||
if(g_emMacType == QUIMACHINE_EMB)//绗绣机
|
||
{
|
||
double num = (m_mcStatus.outCounter)/10.0;
|
||
itemStr = tr("Production Count: ") + QString::number(num,'f',1)+tr("cm");//产量计数:
|
||
}
|
||
else
|
||
{
|
||
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.embNeedleNum);//总刺绣针数:
|
||
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 embHeadNum = mcParaValues.buf[2];//平绣机头个数
|
||
int chenHeadNum = mcParaValues.buf[8];//毛巾机头个数
|
||
int coilHeadNum = mcParaValues.buf[7];//缠绕机头个数
|
||
|
||
for(int i= 0; i < embHeadNum; i++)
|
||
{
|
||
int needleBreakNum = 0;
|
||
for(int j = 0; j < NEEDLENUM; j++)
|
||
{
|
||
needleBreakNum += m_embHeadBreakLine.headNeedleBreakNum[i][j];
|
||
}
|
||
//机头断线次数:
|
||
itemStr = tr("Head ") + QString::number(i+1) + tr(" break line num: ") + QString::number(needleBreakNum);// 机头断线次数:
|
||
m_pSystemManageDlg->addItem(itemStr);
|
||
}
|
||
|
||
for(int i= 0; i < chenHeadNum; i++)
|
||
{
|
||
int needleBreakNum = 0;
|
||
for(int j = 0; j < NEEDLENUM; j++)
|
||
{
|
||
needleBreakNum += m_chenHeadBreakLine.headNeedleBreakNum[i][j];
|
||
}
|
||
//机头断线次数:
|
||
itemStr = tr("Head ") + QString::number(i+1) + tr(" break line num: ") + QString::number(needleBreakNum);// 机头断线次数:
|
||
m_pSystemManageDlg->addItem(itemStr);
|
||
}
|
||
|
||
for(int i= 0; i < coilHeadNum; i++)
|
||
{
|
||
int needleBreakNum = 0;
|
||
for(int j = 0; j < NEEDLENUM; j++)
|
||
{
|
||
needleBreakNum += m_coilHeadBreakLine.headNeedleBreakNum[i][j];
|
||
}
|
||
//机头断线次数:
|
||
itemStr = tr("Head ") + QString::number(i+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[12] = __DATE__; // 取编译日期
|
||
|
||
int i;
|
||
int month, year, day;
|
||
month = year = day = 0;
|
||
for(i = 0; i < 12; i++)
|
||
{
|
||
if(memcmp(date, pMonth[i], 3) == 0)
|
||
{
|
||
month = i + 1;
|
||
break;
|
||
}
|
||
}
|
||
year = (unsigned char)atoi(date + 9); // date[9]为2位年份, date[7]为完整年份
|
||
day = (unsigned char)atoi(date + 4); // 日期
|
||
|
||
QString str;
|
||
str.sprintf("%02d%02d%02d", year, month, day);
|
||
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()); // 版本信息
|
||
//lotFata.fileName = m_fileName;
|
||
//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::writeBreakageInfoToFile()
|
||
{
|
||
//将断线信息重新写回文件
|
||
//各机头针杆断线信息
|
||
QDir apppath(qApp->applicationDirPath());
|
||
QString breakFilePath = apppath.path() + apppath.separator() + BREAKINFOFILE;
|
||
QFile breakFile(breakFilePath);
|
||
if(!breakFile.open(QIODevice::WriteOnly | QIODevice::Truncate))
|
||
{
|
||
qDebug() << "open breakFile fail when wirte";
|
||
return;
|
||
}
|
||
else
|
||
{
|
||
QByteArray array;
|
||
array.clear();
|
||
for(s32 i = 0; i < HEADNUM; i++)
|
||
{
|
||
for(s32 j = 0; j < NEEDLENUM; j++)
|
||
{
|
||
QByteArray arr;
|
||
arr.resize(sizeof(s32));
|
||
memcpy(arr.data(), &m_embHeadBreakLine.headNeedleBreakNum[i][j], sizeof(s32));
|
||
array.append(arr);
|
||
}
|
||
}
|
||
|
||
for(s32 i = 0; i < HEADNUM; i++)
|
||
{
|
||
for(s32 j = 0; j < NEEDLENUM; j++)
|
||
{
|
||
QByteArray arr;
|
||
arr.resize(sizeof(s32));
|
||
memcpy(arr.data(), &m_coilHeadBreakLine.headNeedleBreakNum[i][j], sizeof(s32));
|
||
array.append(arr);
|
||
}
|
||
}
|
||
|
||
for(s32 i = 0; i < HEADNUM; i++)
|
||
{
|
||
for(s32 j = 0; j < NEEDLENUM; j++)
|
||
{
|
||
QByteArray arr;
|
||
arr.resize(sizeof(s32));
|
||
memcpy(arr.data(), &m_chenHeadBreakLine.headNeedleBreakNum[i][j], sizeof(s32));
|
||
array.append(arr);
|
||
}
|
||
}
|
||
|
||
breakFile.write(array);
|
||
breakFile.close();
|
||
}
|
||
return;
|
||
}
|
||
|
||
//发送数据到物联网
|
||
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->readFromInHMIiFile("HMI/towel").toInt();//是否有毛巾功能
|
||
s16 coil = g_pSettings->readFromInHMIiFile("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个小时
|
||
timeStr = QString::number(QDateTime::currentDateTime().toMSecsSinceEpoch());
|
||
#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 + ":{\"timestamp" + mStr + ":" + timeStr + ",\"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)
|
||
{
|
||
memcpy((char*)&m_mcStatus,(char*)&mcStatus,sizeof(MCStatus));
|
||
|
||
m_gearValue = m_mcStatus.tempdat3;//档位值和松紧线位置
|
||
m_pPromptDlg->setGearValueStr(m_gearValue);//提升电机控制界面显示档位值
|
||
|
||
m_potValue = m_mcStatus.potval;
|
||
float potValue = m_potValue*0.01;
|
||
QString potValueStr;
|
||
potValueStr.sprintf("%.2f",potValue);
|
||
m_pPromptDlg->setPosValueStr(potValueStr);//电位器值
|
||
|
||
m_workNoseHead = m_mcStatus.workNoseHead;
|
||
m_pPromptDlg->setNoseHeadValueStr(m_workNoseHead);//机头切换,当前工作机头
|
||
m_pPromptDlg->setCurNeedleStr(m_workNoseHead,QString("%1").arg(m_mcStatus.needleIdx),potValueStr);//当前针杆
|
||
}
|
||
|
||
QString MainWidgetFunction::getVersionStr()
|
||
{
|
||
// int towel = g_pSettings->readFromInHMIiFile("HMI/towel").toInt();//是否有毛巾功能
|
||
// int coil = g_pSettings->readFromInHMIiFile("HMI/coil").toInt();//是否有缠绕功能
|
||
QString str;
|
||
#if(0)
|
||
if(g_emMacType == QUIMACHINE_EMB)//绗绣机
|
||
{
|
||
if(g_emProductType == PRODUCT_QUI_SINGLE)//单排绗绣
|
||
{
|
||
str.sprintf("RPQE-SFE-XPlatformF-LAUTO-V");
|
||
}
|
||
else if(g_emProductType == PRODUCT_QUI_DOUBLE)//双排
|
||
{
|
||
str.sprintf("RPQE-DFE-XPlatformF-LAUTO-V");
|
||
}
|
||
}
|
||
else if(g_emMacType == MACHINE_EMB && g_emProductType !=PRODUCT_CHEN)//绣花机
|
||
{
|
||
str.sprintf("RPCE-FE-XPlatformF-LAUTO-V");
|
||
if(towel==1&& coil !=1)
|
||
{
|
||
str.sprintf("RPCE-FECC-XPlatformF-LAUTO-V");//平绣+毛巾
|
||
}
|
||
else if(towel!=1&&coil ==1)
|
||
{
|
||
str.sprintf("RPCE-FECT-XPlatformF-LAUTO-V");//平绣+缠绕
|
||
}
|
||
else if(towel==1&&coil ==1)
|
||
{
|
||
str.sprintf("RPCE-FECTCC-XPlatformF-LAUTO-V");//平绣+缠绕+毛巾
|
||
}
|
||
}
|
||
else if(g_emMacType == MACHINE_EMB && g_emProductType ==PRODUCT_CHEN)//纯毛巾
|
||
{
|
||
str.sprintf("RPCE-CC-XPlatformF-LAUTO-V");//毛巾
|
||
}
|
||
#endif
|
||
if(g_emMacType == QUIMACHINE_EMB)//绗绣机
|
||
{
|
||
str.sprintf("RPQE-ALL-XPlatformF-LAUTO-V");
|
||
}
|
||
else if(g_emMacType == MACHINE_EMB)
|
||
{
|
||
str.sprintf("RPCE-ALL-XPlatformF-LAUTO-V");
|
||
}
|
||
str += getCompileDateTime();
|
||
return str;
|
||
}
|
||
|
||
//将起绣点写回到文件中
|
||
void MainWidgetFunction::writePonitToFile(QString filePath,u8 type, int x, int y, int st ,u8 workHead)
|
||
{
|
||
QFileInfo fileInfo(filePath);
|
||
QString suffix = fileInfo.suffix().toUpper();//后缀大写
|
||
|
||
if(suffix == "DST")
|
||
{
|
||
DataFileDst dst;
|
||
dst.initFile(filePath);
|
||
dst.loadFile();
|
||
dst.writePointToFile(type,x,y,st,workHead);
|
||
}
|
||
else if(suffix == "DSR")
|
||
{
|
||
DataFileDsr dsr;
|
||
dsr.initFile(filePath);
|
||
dsr.loadFile();
|
||
dsr.writePointToFile(type,x,y,st,workHead);
|
||
}
|
||
}
|
||
|
||
//机器信息改变
|
||
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::slotFileInfoChange()
|
||
{
|
||
DataDs16FileHead ds16HeadSend;
|
||
memcpy(&ds16HeadSend,(char*)g_pCurEmbData->getDsDatHead(),sizeof(DataDs16FileHead));
|
||
|
||
DataDs16FileHead ds16HeadMC;
|
||
memset((char*)&ds16HeadMC,0,sizeof(DataDs16FileHead));
|
||
|
||
ds16HeadMC = g_pMachine->getFileInfo();
|
||
|
||
u32 fileIdMc = ds16HeadMC.fileid;
|
||
u32 fileIdSend = ds16HeadSend.fileid;
|
||
|
||
//发送的文件头fileid和机器接收的文件头fileid不一致,文件发送失败,提示重新发送
|
||
if(fileIdMc != fileIdSend)
|
||
{
|
||
m_pPromptDlg->initDialog(PromptDialog::BTN_OK);
|
||
m_pPromptDlg->setTitleStr(tr("Prompt"));
|
||
m_pPromptDlg->setContentStr(tr("File sending failed, please reselect and send!"));//文件发送失败,请重新选择并发送!
|
||
m_pPromptDlg->exec();
|
||
return;
|
||
}
|
||
}
|
||
|
||
//给主控发查询机器信息
|
||
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();
|
||
//密码不能小于8位(一般密码不允许少于8位),如果写入小于8位的密码,系统文件会写入失败造成文件内容丢失,会造成wifi列表获取失败
|
||
//wifi不需要密码登录的时候,也可以点击确认按钮,连接wifi
|
||
if(psd.length() < 8 && psd.length() > 0)
|
||
{
|
||
m_pPromptDlg->initDialog(PromptDialog::BTN_OK);
|
||
m_pPromptDlg->setTitleStr(tr("Prompt"));
|
||
|
||
QString str;
|
||
str = tr("The password cannot be less than 8 digits, please check!");//密码不能小于8位,请检查!
|
||
m_pPromptDlg->setContentStr(str);
|
||
m_pPromptDlg->exec();
|
||
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","");
|
||
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::slotSetQuiHeadBuf(u8 *buf)
|
||
{
|
||
//保存buf到配置文件中
|
||
QFile file(m_filePath+".fcg");
|
||
|
||
QByteArray fileAry;
|
||
fileAry.resize(sizeof(DataFileHead)+HEADBUF+PATCHCOLORBUF*sizeof(u16)+PATCHNEEDLEBUF*sizeof(NeedlePatch)+TOWELHIGHBUF);
|
||
memset(fileAry.data(),0,fileAry.length());
|
||
|
||
if(file.exists())//存在fcg文件
|
||
{
|
||
if(file.open(QIODevice::ReadOnly))
|
||
{
|
||
QByteArray ary = file.readAll();
|
||
memcpy(fileAry.data(),ary.data(),ary.length());
|
||
}
|
||
file.close();
|
||
}
|
||
|
||
if(!file.open(QIODevice::WriteOnly | QIODevice::Truncate))
|
||
{
|
||
qDebug() << "open file fail when wirte";
|
||
return;
|
||
}
|
||
else
|
||
{
|
||
if((u32)fileAry.length() >= (sizeof(DataFileHead)+HEADBUF))
|
||
{
|
||
memcpy(fileAry.data()+sizeof(DataFileHead),(char*)buf,HEADBUF);
|
||
file.write(fileAry.data(),fileAry.length());
|
||
}
|
||
file.close();
|
||
}
|
||
|
||
emit siHeadBuf(buf);//发送隔头绣数据,为了改变色序设定中的隔头绣数据
|
||
|
||
//发送buf给下位机,包总共8192,因为每次只能发1024,所以分8次发下去
|
||
if(g_pMachine != NULL)
|
||
{
|
||
for(u16 i = 0; i < HEADBUF/MAX_EXDP_LEN; i++)
|
||
{
|
||
g_pMachine->setHeadPara((ParaStruct*)(buf+i*MAX_EXDP_LEN),i);
|
||
}
|
||
}
|
||
}
|
||
|
||
//接收到主板的物联网数据
|
||
void MainWidgetFunction::slotSendLotData()
|
||
{
|
||
QString mStr="\"";//引号的字符串
|
||
QString lotStr;
|
||
lotStr.clear();
|
||
|
||
QString timeStr;
|
||
timeStr.clear();
|
||
|
||
#ifdef Q_OS_LINUX
|
||
//imeStr = QString::number(QDateTime::currentDateTime().toMSecsSinceEpoch() - 28800000);//mcgs下时间差8个小时
|
||
timeStr = QString::number(QDateTime::currentDateTime().toMSecsSinceEpoch());
|
||
#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();
|
||
|
||
keyStr = compositionJson(U00054, m_fileName); //文件名称
|
||
lotStr += keyStr;
|
||
|
||
m_mcStatus = g_pMachine->getMcStatus();
|
||
|
||
if(g_pLotMachine != NULL)
|
||
{
|
||
if(g_pMachine == NULL)
|
||
{
|
||
return;
|
||
}
|
||
|
||
if(m_HMILotData.workState == S0505)
|
||
{
|
||
m_HMILotData.workState = S0507;
|
||
|
||
qint64 time = 0;
|
||
#ifdef Q_OS_LINUX
|
||
time = QDateTime::currentDateTime().toMSecsSinceEpoch() ;//mcgs下时间差8个小时
|
||
#endif
|
||
|
||
#ifdef Q_OS_WIN
|
||
time = QDateTime::currentDateTime().toMSecsSinceEpoch();
|
||
#endif
|
||
m_HMILotData.endTime = time;
|
||
m_HMILotData.startTime = time;
|
||
}
|
||
|
||
if((m_mcStatus.workStatus & WORK_STA_WORKING) == WORK_STA_WORKING)
|
||
{
|
||
if(m_HMILotData.workState != S0506)
|
||
{
|
||
qint64 time = 0;
|
||
#ifdef Q_OS_LINUX
|
||
time = QDateTime::currentDateTime().toMSecsSinceEpoch() ;//mcgs下时间差8个小时
|
||
#endif
|
||
|
||
#ifdef Q_OS_WIN
|
||
time = QDateTime::currentDateTime().toMSecsSinceEpoch();
|
||
#endif
|
||
m_HMILotData.workState = S0506;
|
||
m_HMILotData.startTime = time;
|
||
}
|
||
keyStr = compositionJson(U00048, QString::number(S0506)); //设备状态
|
||
lotStr += keyStr;
|
||
|
||
keyStr = compositionJson(U00053, QString::number(m_mcStatus.runSpeed)); //工作速度
|
||
lotStr += keyStr;
|
||
}
|
||
else
|
||
{
|
||
if(m_HMILotData.workState != S0507)
|
||
{
|
||
qint64 time = 0;
|
||
#ifdef Q_OS_LINUX
|
||
time = QDateTime::currentDateTime().toMSecsSinceEpoch() ;//mcgs下时间差8个小时
|
||
#endif
|
||
|
||
#ifdef Q_OS_WIN
|
||
time = QDateTime::currentDateTime().toMSecsSinceEpoch();
|
||
#endif
|
||
m_HMILotData.endTime = time;
|
||
m_HMILotData.workState = S0507;
|
||
}
|
||
keyStr = compositionJson(U00049, QString::number(m_HMILotData.startTime)); //开始时间
|
||
lotStr += keyStr;
|
||
keyStr = compositionJson(U00050, QString::number(m_HMILotData.endTime)); //结束时间
|
||
lotStr += keyStr;
|
||
int pins = m_HMILotData.endPins - m_HMILotData.startPins;
|
||
keyStr = compositionJson(U00051, QString::number(pins)); //区间针数
|
||
lotStr += keyStr;
|
||
keyStr = compositionJson(U00048, QString::number(S0507)); //设备状态
|
||
lotStr += keyStr;
|
||
keyStr = compositionJson(U00052, QString::number(m_mcStatus.outCounter)); //产量统计
|
||
lotStr += keyStr;
|
||
}
|
||
|
||
keyStr = compositionJson("ts", timeStr); //时间戳
|
||
lotStr += keyStr;
|
||
|
||
if(lotStr.at(lotStr.length()-1) == ',')//去除最后一个逗号
|
||
{
|
||
lotStr.chop(1); //删除字符串右边n个字符
|
||
}
|
||
lotStr += "}}]}";
|
||
//qDebug()<<lotStr;
|
||
//发送物联数据到网关
|
||
g_pLotMachine->sendLotDataToGateway(lotStr);
|
||
}
|
||
}
|
||
|
||
//执行网关数据动作
|
||
void MainWidgetFunction::slotRunLotDataAction(QString str)
|
||
{
|
||
int cmd = str.toInt();
|
||
if(cmd == 1)//点动
|
||
{
|
||
funSpindleJog();
|
||
}
|
||
else if(cmd == 2)//剪线
|
||
{
|
||
funManualTrim();
|
||
}
|
||
}
|
||
|
||
#if(0)
|
||
//当界面与网关建立连接时需要向网关发送固定的键值对
|
||
void MainWidgetFunction::slotSendJsonToMqtt()
|
||
{
|
||
QString mStr="\"";//引号的字符串
|
||
QString lotStr;
|
||
lotStr.clear();
|
||
lotStr += "{" + mStr + "device" + mStr + ":" + mStr + QString::number(m_HMILotData.machineNumber) + "#" + mStr + "}";
|
||
if(g_pLotMachine != NULL)
|
||
{
|
||
g_pLotMachine->sendLotDataToGateway(lotStr);
|
||
}
|
||
}
|
||
#endif
|
||
|
||
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("MC Upgrade"));//主控升级
|
||
//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("MC Upgrade"));//主控升级
|
||
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("MC Upgrade"));//主控升级
|
||
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_BOARD)//外围板升级文件
|
||
{
|
||
m_pPromptDlg->setTitleStr(tr("EXB Upgrade"));//外围板升级
|
||
//m_pPromptDlg->setButtonUCancelStr(tr("Close"));//关闭
|
||
m_pPromptDlg->setContentProcessStr(tr("Perparalboard system upgrade failed!")); //外围板系统升级失败!
|
||
}
|
||
else if(fileType == FILE_TYPE_DAT || fileType == FILE_TYPE_FRAME)//花样数据文件(边框刺绣文件)
|
||
{
|
||
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_BOARD)//外围板升级文件
|
||
{
|
||
// 成功
|
||
m_pPromptDlg->initDialog(PromptDialog::BTN_OK);
|
||
m_pPromptDlg->setTitleStr(tr("EXB Upgrade"));//外围板升级
|
||
//外围板系统升级成功!
|
||
m_pPromptDlg->setContentProcessStr(tr("The external board system is upgraded!"));
|
||
}
|
||
else if(fileType == FILE_TYPE_DAT || fileType == FILE_TYPE_FRAME)//花样数据文件(边框刺绣文件)
|
||
{
|
||
// 成功
|
||
m_pPromptDlg->initDialog(PromptDialog::BTN_OK);
|
||
m_pPromptDlg->setTitleStr(tr("Prompt"));
|
||
m_pPromptDlg->setContentProcessStr(tr("The data file is send successfully!")); //数据文件发送成功!
|
||
}
|
||
m_pPromptDlg->hide();
|
||
|
||
//发送完成,获取文件信息,判断文件发送是否成功
|
||
if(fileType == FILE_TYPE_DAT || fileType == FILE_TYPE_FRAME)//花样数据文件或边框刺绣文件
|
||
{
|
||
if(g_pMachine != NULL)
|
||
{
|
||
g_pMachine->getFileInfoFromMachine();
|
||
}
|
||
}
|
||
}
|
||
else if(send >= 0 && send <= total)
|
||
{
|
||
m_pPromptDlg->initDialog(PromptDialog::BTN_UCANCEL);
|
||
if(fileType == FILE_TYPE_BOARD)//外围板升级文件
|
||
{
|
||
m_pPromptDlg->setTitleStr(tr("EXB Upgrade"));//外围板升级
|
||
m_pPromptDlg->setContentProcessStr(tr("The external board system upgrade...")); //外围板系统升级中...
|
||
}
|
||
else if(fileType == FILE_TYPE_DAT || fileType == FILE_TYPE_FRAME)//花样数据文件(边框刺绣文件)
|
||
{
|
||
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/XPlatform/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);//清空文件日志内容,但文件还在
|
||
|
||
memset(&m_embHeadBreakLine,0,sizeof(EmbHeadBreakLine));
|
||
memset(&m_coilHeadBreakLine,0,sizeof(CoilHeadBreakLine));
|
||
memset(&m_chenHeadBreakLine,0,sizeof(ChenHeadBreakLine));
|
||
|
||
writeBreakageInfoToFile();
|
||
|
||
// 刷新文件日志界面信息
|
||
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();//清除产量统计(主控计数)
|
||
}
|
||
|
||
//清空花版断线计数和机头断线计数
|
||
memset(&m_embHeadBreakLine,0,sizeof(EmbHeadBreakLine));
|
||
memset(&m_chenHeadBreakLine,0,sizeof(ChenHeadBreakLine));
|
||
memset(&m_coilHeadBreakLine,0,sizeof(CoilHeadBreakLine));
|
||
|
||
writeBreakageInfoToFile();
|
||
|
||
emit siClearPatternBreakLineNum();
|
||
|
||
addProductStatisInfo(0);//花版断线次数清零
|
||
m_pSystemManageDlg->refreshUi();
|
||
}
|
||
|
||
//平绣主轴动作
|
||
void MainWidgetFunction::slotEmbSpindleAction(int action)
|
||
{
|
||
if(g_pMachine != NULL)
|
||
{
|
||
if(m_noseHead == TOWEL)
|
||
{
|
||
g_pMachine->motoMove(MT_LTM, action, 0);
|
||
}
|
||
else if(m_noseHead == TOWELM)
|
||
{
|
||
g_pMachine->motoMove(MT_LTMM, action, 0);
|
||
}
|
||
else if(m_noseHead == FLATEMB)
|
||
{
|
||
g_pMachine->motoMove(MT_LEM, action, 0);
|
||
}
|
||
else if(m_noseHead == COIL)
|
||
{
|
||
g_pMachine->motoMove(MT_LCM2, action, 0);
|
||
}
|
||
else if(m_noseHead == COILM)
|
||
{
|
||
g_pMachine->motoMove(MT_LCMM, action, 0);
|
||
}
|
||
}
|
||
}
|
||
|
||
//平绣,毛巾主轴旋转
|
||
void MainWidgetFunction::slotEmbSpindleRotate(int angle)
|
||
{
|
||
if(g_pMachine != NULL)
|
||
{
|
||
// int towel = g_pSettings->readFromInHMIiFile("HMI/towel").toInt();//是否有毛巾功能.
|
||
// int coil = g_pSettings->readFromIniFile("HMI/coil").toInt();//是否有缠绕功能
|
||
if(m_noseHead == TOWEL)
|
||
{
|
||
g_pMachine->manualAction(CHENILLE_SPINDLE_TO_ANGLE,angle);
|
||
}
|
||
else if(m_noseHead == TOWELM)
|
||
{
|
||
g_pMachine->manualAction(CHENILLE_M_TO_ANGLE,angle);
|
||
}
|
||
else if(m_noseHead == FLATEMB)
|
||
{
|
||
g_pMachine->manualAction(EMB_SPINDLE_TO_ANGLE,angle);
|
||
}
|
||
else if(m_noseHead == COIL)
|
||
{
|
||
g_pMachine->manualAction(COIL_SPINDLE_TO_ANGLE,angle);
|
||
}
|
||
else if(m_noseHead == COILM)
|
||
{
|
||
g_pMachine->manualAction(COIL_M_TO_ANGLE,angle);
|
||
}
|
||
}
|
||
}
|
||
|
||
void MainWidgetFunction::slotElasticCtrlPos(int elasticPos)
|
||
{
|
||
if(g_pMachine != NULL)
|
||
{
|
||
g_pMachine->elasticCtrl(elasticPos);//点击确认按钮,发松紧线控制的命令,para2=松紧线位置
|
||
}
|
||
}
|
||
void MainWidgetFunction::slotLiftMotorCtrl(int gearValue)
|
||
{
|
||
if(g_pMachine != NULL)
|
||
{
|
||
g_pMachine->hoistCtrl(gearValue);;//点击确认按钮,发提升电机制的命令,para2=档位值
|
||
}
|
||
}
|
||
//用户登录
|
||
void MainWidgetFunction::slotUserLogin(s16 user)
|
||
{
|
||
// QTextCodec *cod = QTextCodec::codecForLocale();
|
||
PassWordDialog passWordDlg;
|
||
QString str("");
|
||
if(user == repair)
|
||
{
|
||
passWordDlg.setTitleStr(tr("Password input *"));//密码输入
|
||
}
|
||
else if(user == factory)
|
||
{
|
||
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 == g_passwordOne)
|
||
{
|
||
g_emUser = repair;
|
||
emit siSetButtonUserLogo(1);
|
||
if(g_emMacType == MACHINE_EMB)
|
||
{
|
||
m_pPromptDlg->initDialog(PromptDialog::BTN_OK);
|
||
m_pPromptDlg->setTitleStr(tr("Prompt"));
|
||
m_pPromptDlg->setContentStr(tr("Primary password successfully logged in!"));//一级密码成功登入!
|
||
m_pPromptDlg->exec();
|
||
}
|
||
}
|
||
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 == factory)
|
||
{
|
||
if (str == PASSWORD_TWO)
|
||
{
|
||
g_emUser = factory;
|
||
emit siSetButtonUserLogo(2);
|
||
if(g_emMacType == MACHINE_EMB)
|
||
{
|
||
m_pPromptDlg->initDialog(PromptDialog::BTN_OK);
|
||
m_pPromptDlg->setTitleStr(tr("Prompt"));
|
||
m_pPromptDlg->setContentStr(tr("Root successfully logged in!"));//超级用户成功登入!
|
||
m_pPromptDlg->exec();
|
||
}
|
||
}
|
||
else if (str == PASSWORD_THREE)
|
||
{
|
||
g_emUser = root;
|
||
emit siSetButtonUserLogo(2);//设置超级用户图标
|
||
if(g_emMacType == MACHINE_EMB)
|
||
{
|
||
m_pPromptDlg->initDialog(PromptDialog::BTN_OK);
|
||
m_pPromptDlg->setTitleStr(tr("Prompt"));
|
||
m_pPromptDlg->setContentStr(tr("Three-level password successfully logged in!"));//三级密码成功登入!
|
||
m_pPromptDlg->exec();
|
||
}
|
||
}
|
||
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::slotHookTest()
|
||
{
|
||
m_pPromptDlg->initDialog(PromptDialog::BTN_HOOK_TEST);
|
||
m_pPromptDlg->setTitleStr(tr("Hook test"));//平绣勾刀
|
||
|
||
QString str;
|
||
str = tr("Hook the knife is about to move, please pay attention to safety!");//勾刀即将动作,请注意安全!
|
||
m_pPromptDlg->setContentStr(str);
|
||
m_pPromptDlg->exec();
|
||
}
|
||
|
||
void MainWidgetFunction::slotFootTest()
|
||
{
|
||
m_pPromptDlg->initDialog(PromptDialog::BTN_FOOT_TEST);
|
||
m_pPromptDlg->setTitleStr(tr("Foot test"));//独立压脚测试
|
||
|
||
QString str;
|
||
str = tr("Foot is about to move, please pay attention to safety!");//压脚即将动作,请注意安全!
|
||
m_pPromptDlg->setContentStr(str);
|
||
m_pPromptDlg->exec();
|
||
}
|
||
|
||
//自动定软限位
|
||
void MainWidgetFunction::slotAutoSetSoftLimit()
|
||
{
|
||
m_pPromptDlg->initDialog(PromptDialog::BTN_OK_CANCEL);
|
||
m_pPromptDlg->setTitleStr(tr("Auto set softlimit"));//自动定软限位
|
||
|
||
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->autoSetSoftLimit();
|
||
slotCalMachineProgress(CSV_00_CODE_8);
|
||
}
|
||
}
|
||
}
|
||
|
||
//平绣主轴齿轮比测试
|
||
void MainWidgetFunction::slotEMBSpindleTest()
|
||
{
|
||
m_pPromptDlg->initDialog(PromptDialog::BTN_OK_CANCEL);
|
||
m_pPromptDlg->setTitleStr(tr("Emb Spindle Gear Ratio Test"));//平绣主轴齿轮比测试
|
||
|
||
QString str;
|
||
str = tr("Whether to test the gear ratio of the flat embroidery spindle?");//是否测试平绣主轴齿轮比?
|
||
m_pPromptDlg->setContentStr(str);
|
||
|
||
if(m_pPromptDlg->exec() == 1)
|
||
{
|
||
if(g_pMachine != NULL)
|
||
{
|
||
g_pMachine->embSpindleTest();
|
||
}
|
||
}
|
||
}
|
||
|
||
//毛巾主轴齿轮比测试
|
||
void MainWidgetFunction::slotChenSpindleTest()
|
||
{
|
||
m_pPromptDlg->initDialog(PromptDialog::BTN_OK_CANCEL);
|
||
m_pPromptDlg->setTitleStr(tr("Chenille Spindle Gear Ratio Test"));//毛巾主轴齿轮比测试
|
||
|
||
QString str;
|
||
str = tr("Whether to test the gear ratio of the flat chenille spindle?");//是否测试平绣主轴齿轮比?
|
||
m_pPromptDlg->setContentStr(str);
|
||
|
||
if(m_pPromptDlg->exec() == 1)
|
||
{
|
||
if(g_pMachine != NULL)
|
||
{
|
||
g_pMachine->chenSpindleTest();
|
||
}
|
||
}
|
||
}
|
||
//测试平绣主轴编码器宽度
|
||
void MainWidgetFunction::slotEcdWidthTest()
|
||
{
|
||
m_pPromptDlg->initDialog(PromptDialog::BTN_OK_CANCEL);
|
||
m_pPromptDlg->setTitleStr(tr("Flat Ecd Width Test"));//测试平绣主轴编码器宽度
|
||
|
||
QString str;
|
||
str = tr("Is the width of the flat spindle encoder tested?");//是否测试平绣主轴编码器宽度?
|
||
m_pPromptDlg->setContentStr(str);
|
||
|
||
if(m_pPromptDlg->exec() == 1)
|
||
{
|
||
if(g_pMachine != NULL)
|
||
{
|
||
g_pMachine->ecdWidthTest();
|
||
}
|
||
}
|
||
}
|
||
//动框参数导入
|
||
void MainWidgetFunction::slotFrameParaImport()
|
||
{
|
||
m_pPromptDlg->initDialog(PromptDialog::BTN_OK_CANCEL);
|
||
m_pPromptDlg->setTitleStr(tr("Moving frame parameter import"));//动框参数导入
|
||
|
||
QString str;
|
||
str = tr("Whether to import movable frame parameters?");//是否动框参数导入?
|
||
m_pPromptDlg->setContentStr(str);
|
||
|
||
if(m_pPromptDlg->exec() == 1)
|
||
{
|
||
m_pSystemManageDlg->setTypeLogo("");
|
||
m_pSystemManageDlg->setMainTitle(tr("Frame parameter Import"));
|
||
m_pSystemManageDlg->setSubTitle(tr("Root > Frame Parameter Import"));
|
||
m_pSystemManageDlg->initDialog();
|
||
systemUpgrade(FRAMEPARA_IMPORT);
|
||
}
|
||
}
|
||
//动框参数导出
|
||
void MainWidgetFunction::slotFrameParaExport()
|
||
{
|
||
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;
|
||
}
|
||
}
|
||
m_pPromptDlg->initDialog(PromptDialog::BTN_OK_CANCEL);
|
||
m_pPromptDlg->setTitleStr(tr("Moving frame parameter export"));//动框参数导出
|
||
|
||
QString str;
|
||
str = tr("Whether to export moving frame parameters?");//是否动框参数导出?
|
||
m_pPromptDlg->setContentStr(str);
|
||
|
||
if(m_pPromptDlg->exec() == 1)
|
||
{
|
||
funExportFrameParameter();
|
||
}
|
||
}
|
||
//机头板总线检测
|
||
void MainWidgetFunction::slotHeadBoardBusDetect()
|
||
{
|
||
m_pPromptDlg->initDialog(PromptDialog::BTN_OK_CANCEL);
|
||
m_pPromptDlg->setTitleStr(tr("Head board bus detect"));//机头板总线检测
|
||
|
||
QString str;
|
||
str = tr("Do you perform head board bus detection?");//是否进行机头板总线检测?
|
||
m_pPromptDlg->setContentStr(str);
|
||
|
||
if(m_pPromptDlg->exec() == 1)
|
||
{
|
||
if(g_pMachine != NULL)
|
||
{
|
||
g_pMachine->headBoardBusDetect();
|
||
}
|
||
}
|
||
}
|
||
|
||
//超级用户退出程序
|
||
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->writeToIniFile("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::setCodecForLocale(QTextCodec::codecForName("GBK"));
|
||
|
||
QByteArray array;
|
||
array.clear();
|
||
for(int j = 0; j < m_csvFileStrList.size(); j++)
|
||
{
|
||
QString str = m_csvFileStrList[j];
|
||
array.append(str.toLocal8Bit());
|
||
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();
|
||
}
|
||
|
||
//毛巾提升电机控制
|
||
void MainWidgetFunction::slotLiftMotor()
|
||
{
|
||
int chenilleHeadNum = 0;
|
||
if(g_pMachine != NULL)
|
||
{
|
||
ParaStruct mcParaValues;
|
||
mcParaValues = g_pMachine->getMcPara();
|
||
chenilleHeadNum = mcParaValues.buf[8];//毛巾机头个数
|
||
}
|
||
m_pPromptDlg->initDialog(PromptDialog::BTN_LIFTMOTORCONTROL);
|
||
m_pPromptDlg->setTitleStr(tr("Lift Motor Control"));
|
||
m_pPromptDlg->initChenilleHead(chenilleHeadNum);
|
||
|
||
|
||
if (m_pPromptDlg->exec() == 0)//弹窗界面显示,点击了取消按钮,弹窗关闭
|
||
{
|
||
if(g_pMachine != NULL)
|
||
{
|
||
g_pMachine->testADC(0);//点击关闭按钮,发退出测试电位器命令,para2=0
|
||
}
|
||
}
|
||
}
|
||
//毛巾松紧线控制
|
||
void MainWidgetFunction::slotLElasticCtrl()
|
||
{
|
||
if(g_pMachine != NULL)
|
||
{
|
||
g_pMachine->testADC(2);
|
||
m_adcFlag = 1;
|
||
// emit siTestADC(m_adcFlag);
|
||
//测试电位器的标志
|
||
}
|
||
m_pPromptDlg->initDialog(PromptDialog::BTN_ELASTICCONTROL);
|
||
m_pPromptDlg->setTitleStr(tr("Slack Wire Control"));
|
||
if (m_pPromptDlg->exec() == 0)//弹窗界面显示,点击了取消按钮,弹窗关闭
|
||
{
|
||
if(g_pMachine != NULL)
|
||
{
|
||
g_pMachine->testADC(0);//点击关闭按钮,发退出测试电位器命令,para2=0
|
||
}
|
||
}
|
||
}
|
||
//毛巾换色调试
|
||
void MainWidgetFunction::slotChenilleColorDebug()
|
||
{
|
||
m_pPromptDlg->initDialog(PromptDialog::BTN_M_C_C);
|
||
m_pPromptDlg->setTitleStr(tr("Chenille Color Change Debug"));
|
||
m_pPromptDlg->setCurNeedleStrVisible(true);//当前针杆label是否可见
|
||
m_pPromptDlg->initNeedleBar(PRODUCT_TOWEL);
|
||
if (m_pPromptDlg->exec() == 1)
|
||
{
|
||
s32 val = m_pPromptDlg->getNeedleSelectIdx();//获取所选针杆的索引值
|
||
if(g_pMachine != NULL)
|
||
{
|
||
g_pMachine->chenilleColorDebug(val);// 毛巾换色
|
||
}
|
||
}
|
||
}
|
||
|
||
//界面调试模式,调试模式时不需要密码 -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->writeToInHMIiFile("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::slotPatternFcgClear()
|
||
{
|
||
m_pPromptDlg->initDialog(PromptDialog::BTN_OK_CANCEL);
|
||
m_pPromptDlg->setTitleStr(tr("Prompt"));//提示
|
||
QString str;
|
||
str = tr("Is the pattern Fcg clear?");//是否删除花样fcg文件?
|
||
m_pPromptDlg->setContentStr(str);
|
||
//清除所有的fcg,花样参数点了确认按钮,才会生成新的fcg文件,没有fcg文件时,花样参数是默认值
|
||
if(m_pPromptDlg->exec() == 1)
|
||
{
|
||
//删除文件
|
||
QDir apppath(qApp->applicationDirPath());
|
||
QString targetDir = apppath.absolutePath() + apppath.separator();
|
||
QString tPath = targetDir + PATTERNPATH;
|
||
QDir dir(tPath);//项目中所保存的路径
|
||
dir.setFilter(QDir::AllEntries | QDir::NoDotAndDotDot);//设置过滤
|
||
QFileInfoList fileList = dir.entryInfoList(QStringList()<<"*.fcg");// 获取.fcg的文件列表
|
||
foreach (QFileInfo file,fileList)//遍历文件信息
|
||
{
|
||
if (file.isFile()) //是文件,删除
|
||
{
|
||
file.dir().remove(file.fileName());
|
||
}
|
||
else //递归删除
|
||
{
|
||
// deleteDir(file.absoluteFilePath());
|
||
}
|
||
}
|
||
//检测是否删除
|
||
QDir dir1(tPath);
|
||
dir1.setFilter(QDir::AllEntries | QDir::NoDotAndDotDot);//设置过滤
|
||
QFileInfoList fileList_1 = dir1.entryInfoList(QStringList()<<"*.fcg");//获取.fcg的文件信息
|
||
if(fileList_1.size() == 0)
|
||
{
|
||
m_pPromptDlg->initDialog(PromptDialog::BTN_OK);
|
||
m_pPromptDlg->setTitleStr(tr("Prompt"));
|
||
m_pPromptDlg->setContentStr(tr("Delete complete,please reselect the file!"));//删除完成,请重新选择文件!
|
||
m_pPromptDlg->exec();
|
||
emit siClearPatternFcg();//清空当前选择的花样
|
||
return;
|
||
}
|
||
else
|
||
{
|
||
m_pPromptDlg->initDialog(PromptDialog::BTN_OK);
|
||
m_pPromptDlg->setTitleStr(tr("Prompt"));
|
||
m_pPromptDlg->setContentStr(tr("Not cleaned up!"));//未清理完成!
|
||
m_pPromptDlg->exec();
|
||
return;
|
||
}
|
||
}
|
||
}
|
||
|
||
void MainWidgetFunction::slotPatternFcgClearFileid()
|
||
{
|
||
m_pPromptDlg->initDialog(PromptDialog::BTN_OK_CANCEL);
|
||
m_pPromptDlg->setTitleStr(tr("Prompt"));//提示
|
||
QString str;
|
||
str = tr("If reset the pattern Fcg data?");//是否重置花样fcg文件数据?
|
||
m_pPromptDlg->setContentStr(str);
|
||
//重置所有的fcg数据
|
||
if(m_pPromptDlg->exec() == 1)
|
||
{
|
||
QDir apppath(qApp->applicationDirPath());
|
||
QString targetDir = apppath.absolutePath() + apppath.separator();
|
||
QString tPath = targetDir + PATTERNPATH;
|
||
QDir dir(tPath);//项目中所保存的路径
|
||
dir.setFilter(QDir::AllEntries | QDir::NoDotAndDotDot);//设置过滤
|
||
QFileInfoList fileList = dir.entryInfoList(QStringList()<<"*.fcg");// 获取.fcg的文件列表
|
||
foreach (QFileInfo file,fileList)//遍历文件信息
|
||
{
|
||
if (file.isFile()) //是文件,重置
|
||
{
|
||
//优化,不删除,将影响fileid的属性置为默认
|
||
qDebug() <<"fileList=" <<file.filePath();
|
||
QString getTemp_filePath = file.filePath().left(file.filePath().length() - 4);
|
||
QString setTemp_filePath = file.filePath().left(file.filePath().length() - 4);
|
||
{
|
||
//xcy 20230223
|
||
DataFileHead temp_fileHead;
|
||
getPatternHeadConfig(getTemp_filePath,temp_fileHead);
|
||
temp_fileHead.rotateStyle = 0;
|
||
temp_fileHead.horizontalStyle = 0;
|
||
temp_fileHead.verticalStyle = 0;
|
||
temp_fileHead.rotateAngle = 0;
|
||
temp_fileHead.xZoom = 100;
|
||
temp_fileHead.yZoom = 100;
|
||
temp_fileHead.repeatStyle = 0;
|
||
temp_fileHead.priority = 0;
|
||
temp_fileHead.xRepeatNum = 1;
|
||
temp_fileHead.yRepeatNum = 1;
|
||
temp_fileHead.xRepeatSpace = 0;
|
||
temp_fileHead.yRepeatSpace = 0;
|
||
temp_fileHead.stepCompensation = 0;
|
||
temp_fileHead.xCompensate = 20;
|
||
temp_fileHead.yCompensate = 20;
|
||
temp_fileHead.lockNeedlesNum = 2;
|
||
temp_fileHead.lockNeedlesStepNum = 1;
|
||
temp_fileHead.lockNeedlesStepLength = 100;
|
||
temp_fileHead.minStep = 0;
|
||
setPatternHeadConfig(setTemp_filePath,temp_fileHead);
|
||
}
|
||
}
|
||
else //递归删除
|
||
{
|
||
// deleteDir(file.absoluteFilePath());
|
||
}
|
||
}
|
||
|
||
m_pPromptDlg->initDialog(PromptDialog::BTN_OK);
|
||
m_pPromptDlg->setTitleStr(tr("Prompt"));
|
||
m_pPromptDlg->setContentStr(tr("Reset complete,please reselect the file!"));//重置完成,请重新选择文件!
|
||
m_pPromptDlg->exec();
|
||
emit siAfterDeleteFileid();//清空当前选择的花样
|
||
return;
|
||
}
|
||
}
|
||
|
||
|
||
//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::moveDlgPos(void)
|
||
{
|
||
switch (g_emResolut)
|
||
{
|
||
case resolution1910:
|
||
m_pPromptDlg->move((1920-m_pPromptDlg->width())/2+g_mainWidgetPos.x(),(1080-m_pPromptDlg->height())/2+g_mainWidgetPos.y());
|
||
m_pBrokenLineDialog->move(192+g_mainWidgetPos.x(),62+g_mainWidgetPos.y());
|
||
m_pSystemManageDlg->move(g_mainWidgetPos.x(),g_mainWidgetPos.y());
|
||
m_pDebugInfoDlg->move(192+g_mainWidgetPos.x(),65+g_mainWidgetPos.y());
|
||
break;
|
||
case resolution1006:
|
||
m_pPromptDlg->move((1024-m_pPromptDlg->width())/2+g_mainWidgetPos.x(),(600-m_pPromptDlg->height())/2+g_mainWidgetPos.y());
|
||
m_pBrokenLineDialog->move(100+g_mainWidgetPos.x(),30+g_mainWidgetPos.y());
|
||
m_pSystemManageDlg->move(g_mainWidgetPos.x(),g_mainWidgetPos.y());
|
||
m_pDebugInfoDlg->move(101+g_mainWidgetPos.x(),36+g_mainWidgetPos.y());
|
||
default:
|
||
break;
|
||
}
|
||
|
||
}
|
||
|
||
|
||
#if(0)
|
||
void MainWidgetFunction::testBreakLineNeedle()
|
||
{
|
||
QTime randtime;
|
||
randtime = QTime::currentTime();
|
||
qsrand(randtime.msec()+randtime.second()*1000); //以当前时间ms为随机种子
|
||
|
||
int i = qrand() % 32; //产生32以内的随机整数
|
||
//float fn = float(n)/10; //产生10以内的随机浮点数,精度为小数点后1位
|
||
int m_needleIdx = qrand() % 16; //产生32以内的随机整数
|
||
|
||
QString infoStrtest ;
|
||
infoStrtest.clear();
|
||
|
||
//xcy 0314 机头针位断线
|
||
//for(int i = 0; i < 32; i++)
|
||
{
|
||
if(m_needleIdx >= 1 && m_needleIdx <= 15)
|
||
{
|
||
int j = m_needleIdx - 1;
|
||
g_pSettings->writeToIniFile(("Head" + QString::number(i+1) + "NeedleBreakLine/needle" + QString::number(j+1)),m_headBreakLine.headNeedleBreakLine[i][j]++);
|
||
infoStrtest = tr("EmbBrokenLine Head :")+QString::number(i+1)+tr(";")+tr("")+tr("NeedleIdx:")+QString::number(m_needleIdx)+tr(" break line num: ") + QString::number(m_headBreakLine.headNeedleBreakLine[i][j]);//平绣断线机头:6 ; 针位 :2
|
||
}
|
||
}
|
||
|
||
g_pSettings->writeToCsv(infoStrtest,TYPE_BREAK);//保存到csv
|
||
}
|
||
#endif
|
||
|