2024-02-06 06:27:07 +00:00
# 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 ( & paraFileStruct , 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 * ) & paraFileStruct , sizeof ( ParaFile ) ) ;
paraSize = sizeof ( ParaFile ) ;
paraFile . close ( ) ;
}
if ( readSize ! = paraFile . size ( ) )
{
//文件大小不匹配,无效的参数文件
m_pPromptDlg - > initDialog ( PromptDialog : : BTN_OK ) ;
m_pPromptDlg - > setTitleStr ( tr ( " Prompt " ) ) ;
QString str ;
str = ( tr ( " File size not match, invalid file! " ) ) ; //文件大小不匹配,无效的参数文件!
m_pPromptDlg - > setContentStr ( str ) ;
m_pPromptDlg - > exec ( ) ;
return ;
}
if ( readSize ! = paraSize )
{
//文件大小不匹配,无效的参数文件
m_pPromptDlg - > initDialog ( PromptDialog : : BTN_OK ) ;
m_pPromptDlg - > setTitleStr ( tr ( " Prompt " ) ) ;
QString str ;
str = ( tr ( " File size not match, invalid file! " ) ) ; //文件大小不匹配,无效的参数文件!
m_pPromptDlg - > setContentStr ( str ) ;
m_pPromptDlg - > exec ( ) ;
return ;
}
// 参数被正确的读取
if ( 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 ( & paraFileStruct , 0 , sizeof ( ParaFile ) ) ;
int readSize = paraFile . read ( ( char * ) & paraFileStruct , 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 ( & paraFileStruct , 0 , sizeof ( ParaFile ) ) ;
int readSize = paraFile . read ( ( char * ) & paraFileStruct , 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 ( & paraFileStruct , 0 , sizeof ( ParaFile ) ) ;
paraFileStruct . s_head [ 0 ] = ' P ' ;
paraFileStruct . s_head [ 1 ] = ' A ' ;
paraFileStruct . s_head [ 2 ] = ' R ' ;
paraFileStruct . s_head [ 3 ] = ' A ' ;
paraFileStruct . s_type = 0 ;
paraFileStruct . s_len = 4096 ;
memcpy ( paraFileStruct . s_para_buff , para_wk , 1024 ) ;
memcpy ( ( char * ) ( paraFileStruct . s_para_buff ) + 1024 , para_mc , 1024 ) ;
memcpy ( ( char * ) ( paraFileStruct . s_para_buff ) + 2048 , pre_para_mc , 1024 ) ;
memcpy ( ( char * ) ( paraFileStruct . s_para_buff ) + 3072 , pre_para_wk , 1024 ) ;
paraFileStruct . s_crc = calcCrc16 ( ( u8 * ) paraFileStruct . s_para_buff , 4096 ) ;
// 转换结构体 结束
// 保存文件 开始
QFile file ( paraFileName ) ;
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 * ) & paraFileStruct , 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 ( & paraFileStruct , 0 , sizeof ( ParaFile ) ) ;
paraFileStruct . s_head [ 0 ] = ' P ' ;
paraFileStruct . s_head [ 1 ] = ' A ' ;
paraFileStruct . s_head [ 2 ] = ' R ' ;
paraFileStruct . s_head [ 3 ] = ' A ' ;
paraFileStruct . s_type = 0 ;
paraFileStruct . s_len = 4096 ;
memcpy ( paraFileStruct . s_para_buff , para_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 * ) & paraFileStruct , sizeof ( ParaFile ) ) ;
file . flush ( ) ;
file . close ( ) ;
// 保存文件 结束
# ifdef Q_OS_LINUX
system ( " sync " ) ;
# endif
//参数导出成功
m_pPromptDlg - > initDialog ( PromptDialog : : BTN_OK ) ;
m_pPromptDlg - > setTitleStr ( tr ( " Prompt " ) ) ;
QString str ;
str = tr ( " 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 ( ) ; // 发给下位机,空走边框
}
}
2024-03-26 00:15:38 +00:00
//毛巾拉线
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 ) ;
2024-02-06 06:27:07 +00:00
2024-03-26 00:15:38 +00:00
if ( m_pPromptDlg - > exec ( ) = = 1 )
{
if ( g_pMachine ! = NULL )
{
g_pMachine - > manualAction ( CHENILLE_LINE_UP ) ;
}
}
}
2024-02-06 06:27:07 +00:00
//流程复位
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 ( ) ) ; // 版本信息
2024-03-26 00:15:38 +00:00
//lotFata.fileName = m_fileName;
//memcpy(lotFata.fileName, m_fileName.data(), m_fileName.length()); // 文件名称
2024-02-06 06:27:07 +00:00
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 ( ) ;
2024-03-26 00:15:38 +00:00
keyStr = compositionJson ( U00054 , m_fileName ) ; //文件名称
lotStr + = keyStr ;
m_mcStatus = g_pMachine - > getMcStatus ( ) ;
2024-02-06 06:27:07 +00:00
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
2024-03-26 00:15:38 +00:00
time = QDateTime : : currentDateTime ( ) . toMSecsSinceEpoch ( ) ; //mcgs下时间差8个小时
2024-02-06 06:27:07 +00:00
# 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
2024-03-26 00:15:38 +00:00
time = QDateTime : : currentDateTime ( ) . toMSecsSinceEpoch ( ) ; //mcgs下时间差8个小时
2024-02-06 06:27:07 +00:00
# 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 ;
2024-03-26 00:15:38 +00:00
keyStr = compositionJson ( U00053 , QString : : number ( m_mcStatus . runSpeed ) ) ; //工作速度
lotStr + = keyStr ;
2024-02-06 06:27:07 +00:00
}
else
{
if ( m_HMILotData . workState ! = S0507 )
{
qint64 time = 0 ;
# ifdef Q_OS_LINUX
2024-03-26 00:15:38 +00:00
time = QDateTime : : currentDateTime ( ) . toMSecsSinceEpoch ( ) ; //mcgs下时间差8个小时
2024-02-06 06:27:07 +00:00
# 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