PunchHMI/sharedviews/parametersetdialog.cpp
huahaiyan b9438b59c4 20240219
1、修改配置文件名称;
2、修改花样文件夹路径,并删除fcg文件;
3、合并任晴的代码;
2024-02-19 11:33:47 +08:00

2623 lines
87 KiB
C++
Raw Blame History

This file contains ambiguous Unicode characters

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

#include "parametersetdialog.h"
#include "ui_parametersetdialog.h"
ParameterSetDialog::ParameterSetDialog(QWidget *parent) :
QDialog(parent),
ui(new Ui::ParameterSetDialog),
m_itemPerPage(12)
{
ui->setupUi(this);
setWindowFlags (Qt::Window | Qt::FramelessWindowHint);
setWindowModality(Qt::ApplicationModal);
this->move(0,0);
m_curPage = 0;
m_rootCurPage = 0;
//获取网卡ID
m_networkCardID.clear();
QList<QNetworkInterface> interfaces = QNetworkInterface::allInterfaces();
if(interfaces.size() == 1)
{
QNetworkInterface item = interfaces.at(0);
m_networkCardID = item.hardwareAddress();
}
else
{
int nCnt = interfaces.count();
for(int i = 0; i < nCnt; i++)
{
//QNetworkInterface item = interfaces.at(i);
//m_networkCardID = item.hardwareAddress();
// 如果此网络接口被激活并且正在运行并且不是回环地址则就是我们需要找的Mac地址
if(interfaces[i].flags().testFlag(QNetworkInterface::IsUp) &&
interfaces[i].flags().testFlag(QNetworkInterface::IsRunning) &&
!interfaces[i].flags().testFlag(QNetworkInterface::IsLoopBack))
{
m_networkCardID = interfaces[i].hardwareAddress();
qDebug()<<m_networkCardID;
break;
}
}
}
initData();
initControl();
refreshUi();
}
ParameterSetDialog::~ParameterSetDialog()
{
delete ui;
}
//初始化窗体控件,包括位置、尺寸、样式
void ParameterSetDialog::initControl()
{
m_itemBtnList.clear();
m_itemBtnList.append(ui->button1);
m_itemBtnList.append(ui->button2);
m_itemBtnList.append(ui->button3);
m_itemBtnList.append(ui->button4);
m_itemBtnList.append(ui->button5);
ui->button6->setVisible(false);//隐藏
ui->button7->setVisible(false);
ui->button8->setVisible(false);
ui->button9->setVisible(false);
ui->button10->setVisible(false);
ui->button11->setVisible(false);
ui->button12->setVisible(false);
if(g_emResolut == resolution1910)//1920x1080的分辨率每页显示12个条目
{
ui->button6->setVisible(true);
ui->button7->setVisible(true);
ui->button8->setVisible(true);
ui->button9->setVisible(true);
ui->button10->setVisible(true);
ui->button11->setVisible(true);
ui->button12->setVisible(true);
m_itemBtnList.append(ui->button6);
m_itemBtnList.append(ui->button7);
m_itemBtnList.append(ui->button8);
m_itemBtnList.append(ui->button9);
m_itemBtnList.append(ui->button10);
m_itemBtnList.append(ui->button11);
m_itemBtnList.append(ui->button12);
}
else if(g_emResolut == resolution1006)//1024x600的分辨率每页显示8个条目
{
ui->button6->setVisible(true);//显示
ui->button7->setVisible(true);
ui->button8->setVisible(true);
m_itemBtnList.append(ui->button6);
m_itemBtnList.append(ui->button7);
m_itemBtnList.append(ui->button8);
}
//根据不同分辨率设置控件的位置和尺寸
switch (g_emResolut)
{
case resolution1910:
initResolution1910();
break;
case resolution1006:
initResolution1006();
break;
default:
this->resize(1920,1080);
break;
}
initControlStyle();//初始化窗体控件样式
}
//初始化窗体控件为1920x1080分辨率
void ParameterSetDialog::initResolution1910()
{
this->resize(1920,1080);
ui->frameBack->setGeometry(0,0,1920,1080);
ui->buttonTypeLogo->setGeometry(128,66,78,78);
ui->labelMainTitle->setGeometry(226,60,1000,48);
ui->labelSubTitle->setGeometry(302,112,1000,36);
ui->frameRightUp->setGeometry(1468,92,406,72);
ui->buttonHeadParaImport->setGeometry(76,0,66,66);
ui->buttonHeadParaExport->setGeometry(164,0,66,66);
ui->buttonEXBParaRestore->setGeometry(252,0,66,66);
ui->buttonReturn->setGeometry(340,0,66,66);
QRect rectName(40,0,925,58);
QRect rectValue(1040,0,272,58);
for(int i = 0; i < m_itemPerPage; i++)
{
m_itemBtnList[i]->setGeometry(295,180 + i * 64,1340,58);
m_itemBtnList[i]->initLeftNameRightValue(rectName,rectValue,1);
}
ui->framePageBtn->setGeometry(1120,990,800,70);
ui->labelPage->setGeometry(32,1008,400,40);
ui->buttonPgUp->setGeometry(0,0,168,70);
ui->buttonPgDn->setGeometry(200,0,168,70);
ui->buttonOk->setGeometry(400,0,168,70);
ui->buttonCancel->setGeometry(600,0,168,70);
}
//初始化窗体控件为1024x600分辨率
void ParameterSetDialog::initResolution1006()
{
m_itemPerPage = m_itemPerPage - 4;
this->resize(1024,600);
ui->frameBack->setGeometry(0,0,1024,600);
ui->buttonTypeLogo->setGeometry(25,30,60,60);
ui->labelMainTitle->setGeometry(100,30,200,24);
ui->labelSubTitle->setGeometry(130,64,240,21);
ui->frameRightUp->setGeometry(746,40,800,61);
ui->buttonHeadParaImport->setGeometry(22,0,50,50);
ui->buttonHeadParaExport->setGeometry(86,0,50,50);
ui->buttonEXBParaRestore->setGeometry(150,0,50,50);
ui->buttonReturn->setGeometry(214,0,50,50);
//内容的位置
QRect rectName(40,-1,400,53);
QRect rectValue(460,-1,220,53);
for(int i = 0; i < m_itemPerPage; i++)//白色按下的效果
{
m_itemBtnList[i]->setGeometry(153,96 + i * 53,718,53);
m_itemBtnList[i]->initLeftNameRightValue(rectName,rectValue,1);
}
ui->framePageBtn->setGeometry(595,545,600,45);
ui->labelPage->setGeometry(20,550,102,45);
ui->buttonPgUp->setGeometry(0,0,96,40);
ui->buttonPgDn->setGeometry(106,0,96,40);
ui->buttonOk->setGeometry(212,0,96,40);
ui->buttonCancel->setGeometry(318,0,96,40);
}
//初始化窗体控件样式
void ParameterSetDialog::initControlStyle()
{
SetControlStyle setControlStyle;
setControlStyle.setUiName(this->objectName());
//背景图
QString frameBackImgPath = setControlStyle.getSharedStyleSheet();
ui->frameBack->setStyleSheet(frameBackImgPath);
ui->labelMainTitle->setFont(fontBold_1);
ui->labelMainTitle->setStyleSheet(LABELWHITESTYLE);
ui->labelSubTitle->setFont(fontNormal_1);
ui->labelSubTitle->setStyleSheet(LABELWHITESTYLE);
ui->labelPage->setFont(fontNormal_1);
ui->labelPage->setStyleSheet(LABELWHITESTYLE);
//右上方
ui->frameRightUp->setStyleSheet(TRANSPARENTSTYLE);
ui->buttonEXBParaRestore->setGreenGradientBottomStyle(BORDER_RADIUS1);
ui->buttonEXBParaRestore->setTopImage(setControlStyle.getTopStyleSheet(ui->buttonEXBParaRestore->objectName()));
ui->buttonReturn->setGreenGradientBottomStyle(BORDER_RADIUS1);
ui->buttonReturn->setTopImage(setControlStyle.getTopStyleSheet(ui->buttonReturn->objectName()));
ui->buttonHeadParaImport->setGreenGradientBottomStyle(BORDER_RADIUS1);
ui->buttonHeadParaImport->setTopImage(setControlStyle.getTopStyleSheet(ui->buttonHeadParaImport->objectName()));
ui->buttonHeadParaExport->setGreenGradientBottomStyle(BORDER_RADIUS1);
ui->buttonHeadParaExport->setTopImage(setControlStyle.getTopStyleSheet(ui->buttonHeadParaExport->objectName()));
//条目
for(int i = 0; i < m_itemPerPage; i++)
{
m_itemBtnList[i]->setLabelFont(fontNormal_1);
}
//四个按钮样式表一样
ui->buttonPgUp->setOrangeGradientBottomStyle(BORDER_RADIUS2);
ui->buttonPgUp->setTopImage(setControlStyle.getSharedTopStyleSheet(ui->buttonPgUp->objectName()),12);
ui->buttonPgDn->setOrangeGradientBottomStyle(BORDER_RADIUS2);
ui->buttonPgDn->setTopImage(setControlStyle.getSharedTopStyleSheet(ui->buttonPgDn->objectName()),12);
ui->buttonOk->setOrangeGradientBottomStyle(BORDER_RADIUS2);
ui->buttonOk->setTopImage(setControlStyle.getSharedTopStyleSheet(ui->buttonOk->objectName()),12);
ui->buttonCancel->setOrangeGradientBottomStyle(BORDER_RADIUS2);
ui->buttonCancel->setTopImage(setControlStyle.getSharedTopStyleSheet(ui->buttonCancel->objectName()),12);
}
void ParameterSetDialog::refreshUi()
{
ui->buttonOk->setVisible(true);//再进入界面时,刷新界面确认按钮就显示
if(m_paraType == PARA_TYPE_HMICONFIGURATION)//等于界面配置
{
refreshProductType();//刷新产品类型
}
if (m_itemList.size() <= 0)//参数列表
{
for (int i = 0; i < m_itemPerPage; i++)
{
m_itemBtnList.at(i)->hide();
}
ui->labelPage->setText("PageNum: 0/0");
ui->buttonPgUp->setEnabled(false);
ui->buttonPgDn->setEnabled(false);
ui->buttonOk->setEnabled(false);
ui->frameRightUp->setVisible(false);
return;//下边的代码不执行
}
if(m_itemPerPage <= 0)
{
return;
}
ui->buttonOk->setEnabled(true);
QString split1 = ":";
QString split2 = ";";
QString str;
//-----------
int itemNum, pageNums;
itemNum = m_itemList.size();//列表总个数
pageNums = (itemNum+m_itemPerPage-1) / m_itemPerPage;//一共有的页数
if(m_paraType == PARA_TYPE_ROOT)//等于超级用户界面
{
if (m_rootCurPage > pageNums) // 当前页
{
m_rootCurPage = pageNums;
}
if (m_rootCurPage <= 1)
{
m_rootCurPage = 1;
}
}
else
{
if (m_curPage > pageNums) // 当前页
{
m_curPage = pageNums;
}
if (m_curPage <= 1)
{
m_curPage = 1;
}
}
// 条目信息
int i, itemidx;
if(m_paraType == PARA_TYPE_ROOT)//等于超级用户界面
{
itemidx = (m_rootCurPage-1) * m_itemPerPage;
}
else
{
itemidx = (m_curPage-1) * m_itemPerPage;
}
for (i = 0; i < m_itemPerPage; i++)
{
if (itemidx < m_itemList.size())
{
const ParaItem & item = m_itemList.at(itemidx);
if (item.readonly != 0) // 只读,不能设置
{
m_itemBtnList.at(i)->show();
m_itemBtnList.at(i)->setEnabled(false);
if(item.paraTypeSort == PARA_TYPE_MACH)//机器参数
{
m_itemList[i].value = m_mcParaValues.buf[HEADNUMBERIDX];//机头个数
//indexInPara 参数的索引
// m_itemList[i].value = m_mcParaValues.buf[item.indexInPara];
}
if(item.paraTypeSort == ROOT_SORT_HEADSENSOR)//信号参数
{
int w = m_itemBtnList[i]->labelName->width()+m_itemBtnList[i]->labelValue->width();
int h = m_itemBtnList[i]->labelName->height();
//重新设置宽度整行都显示遍历状态信号无value
m_itemBtnList[i]->labelName->resize(w,h);
}
}
else
{
//超级用户选择工作参数开关型后回到遍历设置会显示开关,以下代码隐藏开关
if(item.valueType == PARA_VALUE_TYPE_CLICK)
{
m_itemBtnList.at(i)->setLabelValueImage("");
}
m_itemBtnList.at(i)->show();
m_itemBtnList.at(i)->setEnabled(true);
}
m_itemBtnList.at(i)->setLabelName(item.paraName);
if (item.valueType == PARA_VALUE_TYPE_INT) // = 1, 数字输入型
{
str = getValueStr(item.value, item.afterPoint);//显示的是默认参数
str += " " + item.unitStr;
// qDebug()<< item.value << item.afterpoint << item.unitstr;
m_itemBtnList.at(i)->setLabelValue(str);//设置参数显示的值,没连上就显示的默认参数
m_itemBtnList.at(i)->show();
}
else if (item.valueType == PARA_VALUE_TYPE_SW) // = 2, 开关选择型
{
SetControlStyle setControlStyle;
setControlStyle.setUiName(this->objectName());
QString path;
path = setControlStyle.getBottomStyleSheet1("");
if (item.value != 0)//打开
{
path += "switchOn_logo.png";
}
else
{
path += "switchOff_logo.png";
}
m_itemBtnList.at(i)->setLabelValueImage(path);
}
else if (item.valueType == PARA_VALUE_TYPE_LIST) // = 3, 列表选择型
{
QStringList vallist;
if(item.selList.indexOf(split1) == -1)
{
// 没找到 二级分割
vallist = item.selList.split(split2, QString::SkipEmptyParts);
if (vallist.size() <= 0)
{
str = "";
}
else
{
int selIdx = item.selIdx;
if (selIdx < 0)
{
selIdx = 0;
}
if (selIdx >= vallist.size())
{
selIdx = vallist.size() - 1;
}
str = vallist.at(selIdx);
}
}
else
{
// 二级分割
vallist = item.selList.split(split2, QString::SkipEmptyParts);
if (vallist.size() <= 0)
{
str = "";
}
else
{
int miniIndex = vallist.first().split(split1, QString::SkipEmptyParts).at(1).toInt();
int maxIndex = vallist.last().split(split1, QString::SkipEmptyParts).at(1).toInt();
//int selIdx = item.value;
int selIdx = item.selIdx;
if (selIdx < miniIndex)
{
selIdx = miniIndex;
}
if (selIdx >= maxIndex)
{
selIdx = maxIndex;
}
for (int var = 0; var < vallist.size(); ++var)
{
QStringList sublist = vallist.at(var).split(split1, QString::SkipEmptyParts);
if(sublist.at(1).toInt() == selIdx)
{
str = sublist.at(0);
}
}
}
}
if((m_paraType == PARA_TYPE_PATTERN && item.indexInPara == SET_ROTATESTYLE))//旋转式样
{
//旋转式样加载P的图片
SetControlStyle setControlStyle;
setControlStyle.setUiName(this->objectName());
QString path = setControlStyle.getSharedBottomStyleSheet("") + str + "_logo.png";
m_itemBtnList.at(i)->setLabelValueImage(path);
}
else
{
m_itemBtnList.at(i)->setLabelValue(str);
}
}
else if (item.valueType == PARA_VALUE_TYPE_STRINPUT) // = 4, 字符串输入型
{
str = item.valueStr;
m_itemBtnList.at(i)->setLabelValue(str);
m_itemBtnList.at(i)->show();
}
else // = 0, 无值
{
m_itemBtnList.at(i)->setLabelValue("");
}
itemidx++;
}
else
{
m_itemBtnList.at(i)->setEnabled(false);
m_itemBtnList.at(i)->hide();
}
}
if(m_paraType == PARA_TYPE_ROOT)//等于超级用户界面
{
// 超级用户界面按钮
if (m_rootCurPage <= 1)
{
ui->buttonPgUp->setEnabled(false);
}
else
{
ui->buttonPgUp->setEnabled(true);
}
if (m_rootCurPage >= pageNums)
{
ui->buttonPgDn->setEnabled(false);
}
else
{
ui->buttonPgDn->setEnabled(true);
}
}
else
{
// 按钮
if (m_curPage <= 1)
{
ui->buttonPgUp->setEnabled(false);
}
else
{
ui->buttonPgUp->setEnabled(true);
}
if (m_curPage >= pageNums)
{
ui->buttonPgDn->setEnabled(false);
}
else
{
ui->buttonPgDn->setEnabled(true);
}
}
// 页信息
QString strPage;
if(m_paraType == PARA_TYPE_ROOT)//等于超级用户界面
{
strPage = tr("pageNum: ") + QString("%1/%2").arg(m_rootCurPage).arg(pageNums);//页数:
}
else
{
strPage = tr("pageNum: ") + QString("%1/%2").arg(m_curPage).arg(pageNums);//页数:
}
ui->labelPage->setText(strPage);
if(m_paraType == PARA_TYPE_EXBUPGRADE)//外围板升级参数
{
ui->buttonOk->setEnabled(false);
}
if(m_paraType == PARA_TYPE_ROOT)
{
ui->buttonOk->setEnabled(false);
//ui->buttonOk->setEnabled(true);//增加了界面调试模式,超级用户界面按钮可用
}
if(m_paraType == PARA_TYPE_HEADPARAMETER || //机头板
m_paraType == PARA_TYPE_MACH ||
m_paraType == PARA_TYPE_WORK)//机头板参数或机器参数或工作参数(机器参数或工作参数为超级用户目录下的)
{
ui->frameRightUp->setVisible(true);
ui->buttonEXBParaRestore->setVisible(true);//恢复默认参数按钮
ui->buttonReturn->setVisible(true);//返回上一级按钮
ui->buttonHeadParaImport->setVisible(true);
ui->buttonHeadParaExport->setVisible(true);
}
else if( m_paraType == PARA_TYPE_HMICONFIGURATION||//超级用户花样参数
m_paraType == PARA_TYPE_ROOTTRAVERSE ||//遍历设置
m_paraType == PARA_TYPE_LOCKTEST ||//锁头测试
m_paraType == PARA_TYPE_IOTCONFIGURATION ||//物联网配置
m_paraType == PARA_TYPE_ROOT_PATTERN) //界面配置
{
ui->frameRightUp->setVisible(true);
ui->buttonEXBParaRestore->setVisible(false);
ui->buttonHeadParaImport->setVisible(false);
ui->buttonHeadParaExport->setVisible(false);
ui->buttonReturn->setVisible(true);//返回上一级按钮
}
else
{
ui->frameRightUp->setVisible(false);
}
//超级用户界面配置
if(m_paraType == PARA_TYPE_HMICONFIGURATION)
{
ui->buttonOk->setEnabled(true);
}
}
QString ParameterSetDialog::getValueStr(int64_t val, int afterpoint)
{
QString str;
double value = val;
if (afterpoint <= 0)
{
str.sprintf("%.0f", value);
}
else if (afterpoint == 1)
{
value /= 10;
str.sprintf("%.1f", value);
}
else if (afterpoint == 2)
{
value /= 100;
str.sprintf("%.2f", value);
}
else if (afterpoint == 3)
{
value /= 1000;
str.sprintf("%.3f", value);
}
else // if (afterpoint >= 4)
{
value /= 10000;
str.sprintf("%.4f", value);
}
return str;
}
void ParameterSetDialog::changeValue(int buttenidx)
{
#if(0)
//等于机器参数或工作参数
if(((m_paraType & PARA_TYPE_MACH) == PARA_TYPE_MACH) ||
((m_paraType & PARA_TYPE_WORK) == PARA_TYPE_WORK))
{
if(g_emUser != repair)//权限不够先登录
{
emit siUserLogin(repair);
if(g_emUser != repair)//发送登录信号后,权限如果还没改变就返回
return;
}
}
#endif
QString split1 = ":";
QString split2 = ";";
if (buttenidx < 0 || buttenidx >= m_itemPerPage)
{
return ;
}
int itemidx;
int selIdx = 0;
if(m_paraType == PARA_TYPE_ROOT)//等于超级用户界面
{
itemidx = (m_rootCurPage-1) * m_itemPerPage;
}
else
{
itemidx = (m_curPage-1) * m_itemPerPage;
}
itemidx += buttenidx;
if (itemidx < m_itemList.size())
{
int chgflag = 0;
s32 newvalue;
QString newStrValue;
const ParaItem & item = m_itemList.at(itemidx);
newvalue = item.value;//等于这个列表现在的值
newStrValue = item.valueStr;
if (item.valueType == PARA_VALUE_TYPE_INT) // 数字型
{
int rslt;
NumerInputDialog ndlg(this);
ndlg.setTitleStr(item.paraName);
ndlg.setUnitStr(item.unitStr);
ndlg.setValueAndRange(item.value, item.minVal, item.maxVal, item.afterPoint);
rslt = ndlg.exec();
if (rslt == 1)//点了确认按钮
{
s32 val = ndlg.getValue();
if (val != newvalue)//更改后的值不等于之前存的值
{
chgflag = 1;
newvalue = val;
}
}
}
else if (item.valueType == PARA_VALUE_TYPE_SW) // 开关型
{
if (newvalue == 0)
{
newvalue = 1;
}
else
{
newvalue = 0;
}
chgflag = 1;
}
else if (item.valueType == PARA_VALUE_TYPE_LIST)
{
QStringList vallist;
if(item.selList.indexOf(split2) == -1)
{ //没找到 二级分割
vallist = item.selList.split(split1, QString::SkipEmptyParts);
if (vallist.size() > 0)
{
selIdx = item.selIdx + 1;
if (selIdx < 0)
{
selIdx = 0;
}
if (selIdx >= vallist.size()) // 循环选择
{
selIdx = 0;
}
chgflag = 1;
}
}
else
{
//二级分割 注意 key 是 int val是字符串
//分清楚 key 并不是 字符串的index 需要区分
vallist = item.selList.split(split2, QString::SkipEmptyParts);
if (vallist.size() <= 0)
{
return;
}
else
{
// 使用 qmap 组成key: val
int miniVal = vallist.first().split(split1, QString::SkipEmptyParts).at(1).toInt();
int maxVal = vallist.last().split(split1, QString::SkipEmptyParts).at(1).toInt();
QMap <int,QString> seachDat ;
for (int var = 0; var < vallist.size(); ++var)
{
QStringList mapDatList = vallist.at(var).split(split1, QString::SkipEmptyParts);
seachDat.insert(mapDatList.at(1).toInt(),mapDatList.at(0));
}
selIdx = item.selIdx;
if(seachDat.contains(selIdx))
{
//存在这个key
}
else
{
//不存在这个key 用默认值存储
selIdx = item.defValue;
}
//找到下一个val vallist seach_dat
for (int var = 0; var < vallist.size(); ++var)
{
if( vallist.at(var).split(split1, QString::SkipEmptyParts).at(1).toInt() == selIdx)
{
var++ ;
if( var >= vallist.size())
{
var = 0 ;
}
selIdx = vallist.at(var).split(split1, QString::SkipEmptyParts).at(1).toInt();
break;
}
}
if (selIdx < miniVal)
{
selIdx = miniVal;
}
if (selIdx > maxVal)
{
selIdx = maxVal;
}
chgflag = 1;
}
}
}
else if (item.valueType == PARA_VALUE_TYPE_STRINPUT) // 字符输入型
{
PassWordDialog passWordDlg(this);
QString str("");
passWordDlg.setTitleStr(tr("Character input"),-1);//字符输入
passWordDlg.setShowIfVisible(true);
int rslt = passWordDlg.exec();
if(rslt == 1)
{
str = passWordDlg.getInputStr();
if (str != item.valueStr)
{
chgflag = 1;
newStrValue = str;
}
}
}
else if (item.valueType == PARA_VALUE_TYPE_CLICK) // 点击触发型
{
s16 fun = item.indexInPara;
execItemClickEvent(fun);
return;
}
if (chgflag != 0)
{
if(item.valueType == PARA_VALUE_TYPE_LIST)
{
m_itemList[itemidx].selIdx = selIdx;
m_itemList[itemidx].value = selIdx;
}
else if(item.valueType == PARA_VALUE_TYPE_STRINPUT)
{
m_itemList[itemidx].valueStr = newStrValue;
}
else
{
m_itemList[itemidx].value = newvalue;//列表里的值等于弹窗输入的值
}
// qDebug()<< " newvalue " << newvalue;
//等于遍历参数
if((m_paraType & PARA_TYPE_ROOTTRAVERSE) == PARA_TYPE_ROOTTRAVERSE)
{
//点击节点类型的时候,显示机头个数
m_itemList[3].paraName = tr("Numbers of heads");//机头个数
if(m_itemList[1].value == 2)//全部遍历
{
m_itemList[1].value = m_mcParaValues.buf[0];//遍历次数改为机头个数
m_itemList[2].value = 1;//机头号置为1
m_itemList[2].readonly = 1;//机头号置为可读
}
else if(m_itemList[1].value == 1)//单独遍历
{
m_itemList[2].readonly = 0;//机头号置为可设置
}
}
refreshUi();//在这个函数里刷新
}
}
}
//刷新参数值
void ParameterSetDialog::refreshValue()
{
m_mcParaValues = m_mcParaValues;
m_wkParaValues = m_wkParaValues;
for (int i = 0; i < m_itemList.size(); i++)
{
int type = m_itemList[i].paraType;
int idx = m_itemList.at(i).indexInPara;
int bitInWord = m_itemList[i].bitInWord;
s32 mcTempValue = m_mcParaValues.buf[idx];
s32 wkTempValue = m_wkParaValues.buf[idx];
s32 headTempValue = m_headParaValues.paraBuf[idx];
if (idx < PARA_NUM)
{
if (type == PARA_TYPE_MACH)
{
// ljs++
if (bitInWord == 0)
{
m_itemList[i].value = mcTempValue;//列表里的值,变成主控里的值
if(m_itemList[i].valueType == PARA_VALUE_TYPE_LIST)
{
m_itemList[i].selIdx = mcTempValue;
}
}
else
{
u32 bitval = 0x01;
bitval <<= (bitInWord - 1);
if ((mcTempValue & bitval) == 0)
{
m_itemList[i].selIdx = 0;
m_itemList[i].value = 0;
}
else
{
m_itemList[i].selIdx = 1;
m_itemList[i].value = 1;
}
}
}
else if (type == PARA_TYPE_WORK)
{
// ljs++
if (bitInWord == 0)
{
m_itemList[i].value = wkTempValue;
if(m_itemList[i].valueType == PARA_VALUE_TYPE_LIST)
{
m_itemList[i].selIdx = wkTempValue;
}
}
else
{
u32 bitval = 0x01;
bitval <<= (bitInWord - 1);
if ((wkTempValue & bitval) == 0)
{
m_itemList[i].selIdx = 0;
m_itemList[i].value = 0;
}
else
{
m_itemList[i].selIdx = 1;
m_itemList[i].value = 1;
}
}
}
else if (type == PARA_TYPE_HEADPARAMETER)
{
if (bitInWord == 0)
{
m_itemList[i].value = headTempValue;
if(m_itemList[i].valueType == PARA_VALUE_TYPE_LIST)
{
m_itemList[i].selIdx = headTempValue;
}
}
else
{
u32 bitval = 0x01;
bitval <<= (bitInWord - 1);
if ((headTempValue & bitval) == 0)
{
m_itemList[i].selIdx = 0;
m_itemList[i].value = 0;
}
else
{
m_itemList[i].selIdx = 1;
m_itemList[i].value = 1;
}
}
}
}
}
}
//收到下位机参数改变信号的槽
void ParameterSetDialog::paraChange(int type, int id)
{
//点了主板的按钮后现在这个g_pMachine就是对应主板的
if (type == SEW_MCPARA_MACH)
{
if (id == 0)
{ //得到当前主板的参数
memcpy(&m_mcParaValues, &g_pMachine->getMcPara(), sizeof(ParaStruct));
m_setedFlag |= 0x01;//当前的主板 收到参数包 的标志改变
}
}
else if (type == SEW_MCPARA_WORK)
{
if (id == 0)
{
memcpy(&m_wkParaValues, &g_pMachine->getWkPara(), sizeof(ParaStruct));
m_setedFlag |= 0x02;
}
}
m_mcParaValues = m_mcParaValues;
m_wkParaValues = m_wkParaValues;
//等于机器参数或工作参数
if(((m_paraType & PARA_TYPE_MACH) == PARA_TYPE_MACH) ||
((m_paraType & PARA_TYPE_WORK) == PARA_TYPE_WORK))
{
if (m_setedFlag == 0x03)// = 0x03就是机器参数和主控参数都读过
{
if (m_itemList.size() > 0)//参数列表
{
ui->buttonOk->setEnabled(true);//如果从下位机得到了数据包,说明与下位机建立了联系。可以点击确认按钮
}
refreshValue();
refreshUi();
}
}
}
//刷新遍历参数信息
void ParameterSetDialog::refreshSensorPara(int min, int max, int num, ParaItem &item, u32 traverseState)
{
item.paraName.clear();
int EMBNum = m_mcParaValues.buf[HEADNUMBERIDX];//机头个数
//冲孔的PUNCH还没用的
QString sensorN = "-N";//未遍历成功
QString sensorY = "-Y";//已遍历成功
if(max > num)//如果最大值15大于机头数最大值减1
{
max = num - 1;
}
//traverseState遍历状态每一位表示机头的状态
//num机头个数
if(EMBNum == 0)
{
return;
}
else
{
int maxBitEMB = EMBNum-1;
for(int i = min; i <= maxBitEMB; i++)//i等于最小值0 循环32次,一个u32有32位
{
item.paraName += QString::number(i+1);//1-Y 2-Y 3-Y 4-Y
if(traverseState>>i & 1)//判读每位是0还是1
{
item.paraName += sensorY;
}
else
{
item.paraName += sensorN;
}
item.paraName += " ";//添加空格
refreshUi();
}
}
}
void ParameterSetDialog::saveParas(int idx)
{
qDebug()<<"step 1";
if (m_setedFlag == 0x03 &&
(m_paraType == (PARA_TYPE_MACH | PARA_TYPE_WORK) ||
m_paraType == PARA_TYPE_MACH || m_paraType == PARA_TYPE_WORK))
{
int size = m_itemList.size();
if (idx < 0)
{
int i;
for (i = 0; i < size; i++)
{
int id = m_itemList.at(i).indexInPara;
int type = m_itemList.at(i).paraType;
int bitInWord = m_itemList.at(i).bitInWord;
int value = m_itemList.at(i).value;
if (id < PARA_NUM && type == PARA_TYPE_MACH)
{
if (bitInWord == 0) // ljs++
{
m_mcParaValues.buf[id] = m_itemList.at(i).value;
}
else
{
u32 bitval = 0x01;
bitval <<= (bitInWord - 1);
if (value == 0)
{
m_mcParaValues.buf[id] &= ~bitval;
}
else
{
m_mcParaValues.buf[id] |= bitval;
}
}
}
}
qDebug()<<"step 2";
#if(0)
for(int i = 0; i < MACHINE_NUMBER; i++)
{
g_pMachine[i]->setMcPara(&m_mcParaValues);
}
#endif
g_pMachine->setMcPara(&m_mcParaValues);
qDebug()<<"step 3";
for (i = 0; i < size; i++)
{
int id = m_itemList.at(i).indexInPara;
int type = m_itemList.at(i).paraType;
int bitInWord = m_itemList.at(i).bitInWord;
int value = m_itemList.at(i).value;
if (id < PARA_NUM && type == PARA_TYPE_WORK)
{
if (bitInWord == 0) // ljs++
{
m_wkParaValues.buf[id] = m_itemList.at(i).value;
}
else
{
u32 bitval = 0x01;
bitval <<= (bitInWord - 1);
if (value == 0)
{
m_wkParaValues.buf[id] &= ~bitval;
}
else
{
m_wkParaValues.buf[id] |= bitval;
}
}
}
}
qDebug()<<"step 4";
#if(0)
for(int i = 0; i < MACHINE_NUMBER; i++)
{
g_pMachine[i]->setWkPara(&m_wkParaValues);
}
#endif
g_pMachine->setWkPara(&m_wkParaValues);
qDebug()<<"step 5";
}
else if (idx < size)
{
int id = m_itemList.at(idx).indexInPara;
int type = m_itemList.at(idx).paraType;
int value = m_itemList.at(idx).value;
int bitInWord = m_itemList.at(idx).bitInWord; // ljs++
if (id < PARA_NUM && type == PARA_TYPE_MACH)
{
if (bitInWord == 0)
{
m_mcParaValues.buf[id] = value;
}
else
{
u32 bitval = 0x01;
bitval <<= (bitInWord - 1);
if (value == 0)
{
m_mcParaValues.buf[id] &= ~bitval;
}
else
{
m_mcParaValues.buf[id] |= bitval;
}
value = m_mcParaValues.buf[id];
}
qDebug()<<"step 6";
#if(0)
for(int i = 0; i < MACHINE_NUMBER; i++)
{
g_pMachine[i]->setAMcPara(id+1, value);
}
#endif
g_pMachine->setAMcPara(id+1, value);
qDebug()<<"step 7";
}
else if (id < PARA_NUM && type == PARA_TYPE_WORK)
{
if (bitInWord == 0)
{
m_wkParaValues.buf[id] = value;
}
else
{
u32 bitval = 0x01;
bitval <<= (bitInWord - 1);
if (value == 0)
{
m_wkParaValues.buf[id] &= ~bitval;
}
else
{
m_wkParaValues.buf[id] |= bitval;
}
value = m_wkParaValues.buf[id];
}
qDebug()<<"step 8";
#if(0)
for(int i = 0; i < MACHINE_NUMBER; i++)
{
g_pMachine[i]->setAWkPara(id+1, value);
}
#endif
g_pMachine->setAWkPara(id+1, value);
qDebug()<<"step 9";
}
}
}
}
//执行点击触发型参数的触发事件
void ParameterSetDialog::execItemClickEvent(s16 fun)
{
g_pMachine->getParasFromMachine();//读取参数
switch (fun)
{
case ROOT_HMICONFIGURATION://进入界面配置
setMainTitle(tr("HMI Configuration"));
setSubTitle(tr("Root > HMI Configuration"));
//得到界面配置列表
if(g_emDebugMode == nodebugMode)
{
if(g_emUser == factory)
{
setItemList(factory,PARA_TYPE_HMICONFIGURATION);//最高权限
}
else if(g_emUser == root)
{
setItemList(root,PARA_TYPE_HMICONFIGURATION);//最高权限
}
}
else
{
setItemList(root,PARA_TYPE_HMICONFIGURATION);//最高权限
}
//设置参数值
setItemValue(ROOT_RESOLUTION,g_emResolut); //分辨率
setItemValue(SET_CONNECTMODE,g_pSettings->readFromIniFile("HMI/connectMode").toInt());
setItemValue(ROOT_MACTYPE,g_emMacType); //机器类型
setItemValue(ROOT_PRODUCTTYPE,g_emProductType); //产品类型
setItemValue(ROOT_WATERMARKSET,g_pSettings->readFromIniFile("HMI/waterMark").toInt());
setItemValue(ROOT_HIGH_SPEED_SWITCHING,g_pSettings->readFromIniFile("AUFUS/highSpeed").toInt());
setItemValue(ROOT_WIFI,g_pSettings->readFromIniFile("HMI/wifi").toInt());
setItemValue(ROOT_PARASORTSET,g_pSettings->readFromIniFile("HMI/paraSort").toInt());
refreshUi();
break;
case ROOT_IOTCONFIGURATION: //物联网配置
setMainTitle(tr("IOT Configuration"));
setSubTitle(tr("Root > IOT Configuration"));
// 得到界面配置列表
setItemList(factory,PARA_TYPE_IOTCONFIGURATION);//最高权限
//设置参数值
setItemValue(ROOT_GATEWAYCONNECTIONMETHOD,g_pSettings->readFromIniFile("IOT/gatewayConnectMode").toInt()); //网关连接
setItemValue(ROOT_RACKNUMBERINPUT,g_pSettings->readFromIniFile("IOT/rackNumber").toInt());//机架号
setItemStr(ROOT_DELIVERYTIME,g_pSettings->readFromIniFile("IOT/deliveryTime").toString()); //工厂预计交货时间
setItemValue(ROOT_DEBUGPROGRESS,g_pSettings->readFromIniFile("IOT/debugProgress").toInt());//调试进度
refreshUi();
break;
case ROOT_FRAMEANGLESETTING: //动框角度设置
emit siFrameAngleSet();
break;
case ROOT_NETWORKSETTINGS: //网络设置
setMainTitle(tr("Network Settings"));
setSubTitle(tr("IOT Configuration > Network Settings"));
//得到界面配置列表
//setItemList(factory,PARA_TYPE_NETWORKSETTINGS);
//设置参数值
//setItemValue(ROOT_SERVERIPSETTINGS,g_pSettings->readFromIniFile("server/ip").toInt()); //服务器ip设置
//setItemValue(ROOT_SERVERPORTSETTINGS);
setGatewayNetworkItemList(PARA_TYPE_NETWORKSETTINGS);
refreshUi();
break;
case ROOT_MACHINEPARA://加载机器参数
//也用此窗体加载参数
setMainTitle(tr("Machine parameters"));
setSubTitle(tr("Root > Machine parameters"));
//机器参数
if(g_emUser == factory)
{
setItemList(factory,PARA_TYPE_MACH);//二级权限 262574
}
else
{
setItemList(root,PARA_TYPE_MACH);//最高权限 951103
}
if(m_setedFlag== 0x03)//如果有从下位机得到过参数包
{
refreshValue();//不管连没连上,都显示上次保存的值
}
if(g_pMachine->isConnected() == 3)
{
if(m_setedFlag != 0x03)//界面上显示已就绪 但是没有从下位机得到过参数包(刚上电时)
{
PromptDialog dlg(this);
dlg.initDialog(PromptDialog::BTN_OK);
dlg.setTitleStr(tr("Network error"));
dlg.setContentStr(tr("read parameter..."));//读取参数中...
dlg.exec();
}
}
else
{
#ifdef Q_OS_LINUX//为了方便windows下查看参数所以加了linux编译条件
PromptDialog dlg(this);
dlg.initDialog(PromptDialog::BTN_OK);
dlg.setTitleStr(tr("Network error"));
dlg.setContentStr(tr("No connection"));
dlg.exec();
done(0);
#endif
}
refreshUi();
break;
case ROOT_WORKPARA://加载工作参数
//也用此窗体加载参数
setMainTitle(tr("Work parameters"));
setSubTitle(tr("Root > Work parameters"));
//工作参数
if(g_emUser == factory)
{
setItemList(factory,PARA_TYPE_WORK);//二级权限 262574
}
else
{
setItemList(root,PARA_TYPE_WORK);//最高权限 951103
}
if(m_setedFlag == 0x03)//如果有从下位机得到过参数包
{
refreshValue();//不管连没连上,都显示上次保存的值
}
if(g_pMachine->isConnected() == 3)
{
if(m_setedFlag != 0x03)//界面上显示已就绪 但是没有从下位机得到过参数包(刚上电时)
{
PromptDialog dlg(this);
dlg.initDialog(PromptDialog::BTN_OK);
dlg.setTitleStr(tr("Network error"));
dlg.setContentStr(tr("read parameter..."));//读取参数中...
dlg.exec();
}
}
else
{
#ifdef Q_OS_LINUX//为了方便windows下查看参数所以加了linux编译条件
PromptDialog dlg(this);
dlg.initDialog(PromptDialog::BTN_OK);
dlg.setTitleStr(tr("Network error"));
dlg.setContentStr(tr("No connection"));
dlg.exec();
done(0);
#endif
}
refreshUi();
break;
case ROOT_PATTERNPARAMETERS://超级用户花样参数
//也用此窗体加载参数
setMainTitle(tr("Pattern parameters"));
setSubTitle(tr("Root > Pattern parameters"));
//锁头测试参数
setItemList(factory,PARA_TYPE_ROOT_PATTERN);//最高权限
setItemValue(SET_LOCKNEEDLESNUM,g_pSettings->readFromIniFile("PatternPara/lockNeedlesNum").toInt());// 锁针次数
setItemValue(SET_LOCKNEEDLESSTEPNUM,g_pSettings->readFromIniFile("PatternPara/lockNeedlesStepNum").toInt());// 锁针步数
setItemValue(SET_LOCKNEEDLESSTEPLENTH,g_pSettings->readFromIniFile("PatternPara/lockNeedlesStepLength").toInt());// 锁针针步长度
refreshUi();
break;
case ROOT_TRAVERSESET://进入遍历功能设置
//也用此窗体加载参数
setMainTitle(tr("Traverse settings"));
setSubTitle(tr("Root > Traverse settings"));
//遍历设置参数
setItemList(factory,PARA_TYPE_ROOTTRAVERSE);//最高权限
refreshUi();
break;
case ROOT_AUTOSETSOFTLIMIT://自动定软限位
emit siAutoSetSoftLimit();
break;
case ROOT_SPINDlLEGEARRATIO://主轴齿轮比测试
emit siSpindleTest();
break;
case ROOT_HMIDECRYPT://界面解密
emit siHMIDecrypt(m_networkCardID);
break;
case ROOT_TROKECORRECTION://行程矫正
emit siTrokeCorrect();
break;
case ROOT_SKIPEFFECT://跳针生效
emit siSkipEffect();
break;
case ROOT_CLEARPATTERN://花样总清
emit siPatternClear();
break;
case ROOT_DELETEINI://删除配置文件
emit siDeleteIni();//删除执行目录下的config
break;
case ROOT_IMPORTCSV://导入CSV文件
emit siImportCSV();
break;
case ROOT_DELETECSV://删除CSV文件
emit siDeleteCSV();
break;
case ROOT_RESETCSV://重置安装调试进度
emit siResetCSV();
break;
case ROOT_DEBUGMODE://界面进入调试模式
emit siDebugMode();
break;
case ROOT_FRAMEIMPORTPARA://动框参数导入
emit siFrameParaImport();
break;
case ROOT_FRAMEEXPORTPARA://动框参数导出
emit siFrameParaExport();
break;
case PSE_SOFTWAREPARA_IMPORTPARA://参数导入
emit siParameterImport();
break;
case PSE_SOFTWAREPARA_EXPORTPARA://参数导出
emit siParameterExport();
break;
case ROOT_CLEARPATTERNFCG_FILEID://删除花样fcg文件影响fileid的数据
emit siPatternFcgClear();
break;
case PSE_SOFTWAREPARA_HMIUPDATE://界面升级
emit siHMIUpgrade();
break;
case PSE_SOFTWAREPARA_MCUPDATE://主控升级
emit siMCUpgrade();
break;
case PSE_SOFTWAREPARA_EXIT://退出程序
emit siExit();
break;
default:
break;
}
}
void ParameterSetDialog::initData()
{
m_setedFlag = 0;
m_curPage = 0;
m_rootCurPage = 0;
m_paraType = 0; //参数类型(机器参数、工作参数、花样参数等)
m_paraTypeSort = 0; //参数类型分类型(动作参数、位置参数、亮片参数等)
m_itemList.clear();
m_allItemList.clear();
memset(m_mcParaValues.buf, 0, sizeof(ParaStruct));
memset(m_wkParaValues.buf, 0, sizeof(ParaStruct));
memset(m_headParaValues.paraBuf, 0, sizeof(m_headParaValues.paraBuf));
m_filePath.clear();
}
//设置类型图标
void ParameterSetDialog::setTypeLogo(QString tStyle)
{
ui->buttonTypeLogo->setUnPreBtnLogo(tStyle);
}
//设置主title
void ParameterSetDialog::setMainTitle(QString str)
{
ui->labelMainTitle->setText(str);
}
//设置副title
void ParameterSetDialog::setSubTitle(QString str)
{
ui->labelSubTitle->setText(str);
}
//(参数权限、参数类型、参数种类)得到相应参数类型列表
// sort参数分类的小分类
void ParameterSetDialog::setItemList(int authority,int64_t type,int64_t sort)
{
m_paraType = type;
m_paraTypeSort = sort;
m_itemList.clear();//最后筛选出的列表
//参数筛选
for(int i = 0; i < m_allItemList.size(); i++)
{
int aType= m_allItemList.at(i).paraType;
int aAuthority = m_allItemList.at(i).authority;
if((aType & type) == aType)
{
int aSort= m_allItemList.at(i).paraTypeSort;
if(sort == -1)//等于-1加载全部
{
//外边传进来的权限 等于 factory
if(authority == factory)//加载除了root所有的
{
if(aAuthority != root)//如果当前的权限不是root就是 factory和 operate repair的参数
{
m_itemList.append(m_allItemList.at(i));
}
}
else if(authority == root)
{
m_itemList.append(m_allItemList.at(i));
}
else
{ //当前列表里的权限 等于 传进来的权限
if(aAuthority == authority)//参数权限
{
m_itemList.append(m_allItemList.at(i));
}
}
}
else
{
if((aSort & sort)== sort)//参数类型
{
if(authority == factory)//最高参数权限
{
if(aAuthority != root)
{
m_itemList.append(m_allItemList.at(i));
}
}
else if(authority == root)
{
m_itemList.append(m_allItemList.at(i));
}
else
{
if(aAuthority == authority)//参数权限
{
m_itemList.append(m_allItemList.at(i));
}
}
}
}
}
}
}
void ParameterSetDialog::refreshProductType() // 每一个机型可以选择的其他模块
{
int mcType = 0;
for(int i = 0; i < m_itemList.size(); i++)
{
if(m_itemList[i].indexInPara == ROOT_MACTYPE)
{
mcType = m_itemList[i].selIdx;
break;
}
}
for(int i = 0; i < m_itemList.size(); i++)
{
int index = m_itemList.at(i).indexInPara;
if(index == ROOT_PRODUCTTYPE)//等于产品类型
{
switch (mcType) //机器类型
{
case MACHINE_PUNCH://冲孔机
if(m_itemList[i].selIdx > PRODUCT_PUNCH_ROTARY || m_itemList[i].selIdx < PRODUCT_PUNCH_TWOHEAD)
{
g_emProductType = PRODUCT_PUNCH_TWOHEAD;//冲孔机,默认双头
m_itemList[i].value = g_emProductType;
m_itemList[i].selIdx = g_emProductType;
}
m_itemList[i].minVal = PRODUCT_PUNCH_TWOHEAD;//范围从双头—旋转
m_itemList[i].maxVal = PRODUCT_PUNCH_ROTARY;
break;
case MACHINE_PUNCH_AUTOPOS://定制冲孔机(自动定位冲孔机)
if(m_itemList[i].selIdx > PRODUCT_PUNCH_ROTARY || m_itemList[i].selIdx < PRODUCT_PUNCH_SINGLEHEAD)
{
g_emProductType = PRODUCT_PUNCH_SINGLEHEAD;
m_itemList[i].value = g_emProductType;
m_itemList[i].selIdx = g_emProductType;
}
m_itemList[i].minVal = PRODUCT_PUNCH_SINGLEHEAD;
m_itemList[i].maxVal = PRODUCT_PUNCH_ROTARY;
break;
case MACHINE_PUNCH_SEW://冲缝机 //0303 xcy
if(m_itemList[i].selIdx > PRODUCT_PUNCHSEW_TWOHEAD || m_itemList[i].selIdx < PRODUCT_PUNCHSEW_SINGLEHEAD)
{
g_emProductType = PRODUCT_PUNCHSEW_SINGLEHEAD;
m_itemList[i].value = g_emProductType;
m_itemList[i].selIdx = g_emProductType;
}
m_itemList[i].minVal = PRODUCT_PUNCHSEW_SINGLEHEAD;
m_itemList[i].maxVal = PRODUCT_PUNCHSEW_TWOHEAD;
break;
default://其他机型
g_emProductType = PRODUCT_NULL;
m_itemList[i].minVal = PRODUCT_NULL;
m_itemList[i].maxVal = PRODUCT_NULL;
m_itemList[i].value = PRODUCT_NULL;
m_itemList[i].selIdx = g_emProductType;
break;
}
break;
}
}
}
//设置网关网络参数(IP和端口)
void ParameterSetDialog::setGatewayNetworkItemList(int64_t type)
{
m_paraType = type;
m_itemList.clear();
QDir apppath(qApp->applicationDirPath());
QString serverip, localip;
quint16 serverport, localport;
//服务器IP及端口设置
int idx = 0;
QString configfile;
configfile = apppath.path() + apppath.separator() + "lotconfig.ini";
QSettings configIni(configfile, QSettings::IniFormat);
serverip = configIni.value("server/ip", QVariant("192.168.16.250")).toString();
ParaItem slpItem;
slpItem.indexInPara = idx;
slpItem.readonly = 0;
slpItem.valueType = PARA_VALUE_TYPE_STRINPUT;
slpItem.paraName = tr("Server IP settings"); //服务器IP设置;
slpItem.valueStr = serverip;
m_itemList.append(slpItem);
serverport = configIni.value("server/port", QVariant(5001)).toInt();
idx++;
ParaItem sPortItem;
sPortItem.indexInPara = idx;
sPortItem.readonly = 0;
sPortItem.valueType = PARA_VALUE_TYPE_INT;
sPortItem.paraName = tr("Server Port settings") ;//服务器端口设置
sPortItem.value = serverport;
sPortItem.minVal = 0;
sPortItem.maxVal = U16_MAX;
sPortItem.defValue = serverport;
m_itemList.append(sPortItem);
//本地IP设置条目
localip = configIni.value("local/ip", QVariant("192.168.16.100")).toString();
idx ++;
ParaItem lIpItem;
lIpItem.indexInPara = idx;
lIpItem.readonly = 0;
lIpItem.valueType = PARA_VALUE_TYPE_STRINPUT;
lIpItem.paraName = tr("Local IP settings");//本地IP设置
lIpItem.valueStr = localip;
m_itemList.append(lIpItem);
localport = configIni.value("local/port", QVariant(5000)).toInt();
idx++;
ParaItem lPortItem;
lPortItem.indexInPara = idx;
lPortItem.readonly = 0;
lPortItem.valueType = PARA_VALUE_TYPE_INT;
lPortItem.paraName = tr("Local Port settings");//本口端口设置
lPortItem.value = localport;
lPortItem.minVal = 0;
lPortItem.maxVal = U16_MAX;
lPortItem.defValue = localport;
m_itemList.append(lPortItem);
}
//设置网络参数(IP和端口)
void ParameterSetDialog::setNetworkItemList(int64_t type)
{
m_paraType = type;
m_itemList.clear();
QDir apppath(qApp->applicationDirPath());
QString serverip,localip;
quint16 serverport,localport;
//服务器IP及端口设置条目(包括网关)
int idx = 0;
QString configfile;
configfile = apppath.path() + apppath.separator() + "mcconfig.ini";//读取的配置文件名字
QSettings configIni(configfile, QSettings::IniFormat);
serverip = configIni.value("server/ip", QVariant("192.168.16.253")).toString();//把配置文件里的号转换成字符串
localip = configIni.value("local/ip", QVariant("192.168.16.100")).toString();
ParaItem sIpItem;
sIpItem.indexInPara = idx;
sIpItem.readonly = 0;
sIpItem.valueType = PARA_VALUE_TYPE_STRINPUT;
sIpItem.paraName = tr("Board IP settings");//主板IP设置
sIpItem.valueStr = serverip;//列表里的值就显示从配置文件读上来的
m_itemList.append(sIpItem);//把这行加到列表里
serverport = configIni.value("server/port", QVariant(5000)).toInt();
idx++;
ParaItem sPortItem;
sPortItem.indexInPara = idx;
sPortItem.readonly = 0;
sPortItem.valueType = PARA_VALUE_TYPE_INT;
sPortItem.paraName = tr("Board port settings");//主板端口设置
sPortItem.value = serverport;
sPortItem.minVal = 0;
sPortItem.maxVal = U16_MAX;
sPortItem.defValue = serverport;
m_itemList.append(sPortItem);
idx++;
//本地IP设置条目
ParaItem lIpItem;
lIpItem.indexInPara = idx;
lIpItem.readonly = 0;
lIpItem.valueType = PARA_VALUE_TYPE_STRINPUT;
lIpItem.paraName = tr("Local IP settings");//本地IP设置
lIpItem.valueStr = localip;
m_itemList.append(lIpItem);
idx++;
//本地端口设置条目
localport = configIni.value("local/port", QVariant(5000)).toInt();
ParaItem lPortItem;
lPortItem.indexInPara = idx;
lPortItem.readonly = 0;
lPortItem.valueType = PARA_VALUE_TYPE_INT;
lPortItem.paraName = tr("Local port settings");//本地端口设置
lPortItem.value = localport;
lPortItem.minVal = 0;
lPortItem.maxVal = U16_MAX;
lPortItem.defValue = 5000;
m_itemList.append(lPortItem);
}
void ParameterSetDialog::setCurPage(int idx)
{
if(m_paraType == PARA_TYPE_ROOT)//等于超级用户界面
{
m_rootCurPage = idx;
}
else
{
m_curPage = idx;
}
}
//设置参数值
void ParameterSetDialog::setItemValue(int idx,int value)
{
for(int i = 0; i < m_itemList.size(); i++)
{
int index = m_itemList.at(i).indexInPara;
int min = m_itemList.at(i).minVal;
int max = m_itemList.at(i).maxVal;
if(idx == index)//参数枚举
{
if(value > max || value < min) //
{
value = m_itemList.at(i).defValue;
}
m_itemList[i].selIdx = value;
m_itemList[i].value = value;
}
}
}
void ParameterSetDialog::setItemStr(int idx, QString str)
{
for(int i = 0; i < m_itemList.size(); i++)
{
int index = m_itemList.at(i).indexInPara;
if(idx == index)
{
m_itemList[i].valueStr = str;
}
}
}
int ParameterSetDialog::getItemValue(int idx)
{
int value = 0;
for(int i = 0; i < m_itemList.size(); i++)
{
if(idx == m_itemList.at(i).indexInPara)
{
value = m_itemList.at(i).value;
}
}
return value;
}
int ParameterSetDialog::exec()
{
//等于机器参数或工作参数
if(((m_paraType & PARA_TYPE_MACH) == PARA_TYPE_MACH) ||
((m_paraType & PARA_TYPE_WORK) == PARA_TYPE_WORK))
{
if (g_pMachine != NULL)
{
qDebug("send GetParasFromMachine");
if(m_setedFlag == 0x03)//如果有从下位机得到过参数包
{
//这个函数会把从主控得到的参数保存在item.value里
refreshValue();//不管连没连上,都显示上次保存的值
}
if(g_pMachine->isConnected() == 3)//这个isConnected检测机制是5秒
{
if(((m_paraType & PARA_TYPE_MACH) == PARA_TYPE_MACH) ||
((m_paraType & PARA_TYPE_WORK) == PARA_TYPE_WORK))
{
g_pMachine->getParasFromMachine();//如果连上了主板,发送一个读取参数信息的包
}
if(m_setedFlag != 0x03)//界面上显示已就绪 但是没有从下位机得到过参数包(刚上电时)
{
PromptDialog dlg(this);
dlg.initDialog(PromptDialog::BTN_OK);
dlg.setTitleStr(tr("Network error"));
dlg.setContentStr(tr("read parameter..."));//读取参数中...
dlg.exec();
return -1;
}
}
else//如果没连接上
{
#ifdef Q_OS_LINUX//为了方便windows下查看参数所以加了linux编译条件
PromptDialog dlg(this);
dlg.initDialog(PromptDialog::BTN_OK);
dlg.setTitleStr(tr("Network error"));
dlg.setContentStr(tr("No connection"));
dlg.exec();
return -1;
//不进行下边的函数
#endif
}
}
}
//刷新这个函数就显示item.value的值
//ui->buttonOk->setEnabled(false);
refreshUi();//没连接主板的时候就先进到这个函数,就会显示的默认参数
return QDialog::exec();
}
int ParameterSetDialog::addParaItem(const QList<ParaItem> &itemList)
{
int size = m_allItemList.size();
m_allItemList.append(itemList);
return size;
}
int ParameterSetDialog::addParaItem(const ParaItem &item)
{
int size = m_allItemList.size();
m_allItemList.append(item);
return size;
}
//设置机器状态(用于刷新遍历状态)
//void ParameterSetDialog::setMcStates(MCStatus mcStatus)
//{
// memset((char*)&m_mcStatus,0,sizeof(MCStatus));
// memcpy((char*)&m_mcStatus,(char*)&mcStatus,sizeof(MCStatus));
// u32 traverseState = m_mcStatus.traverseState;//遍历状态
// //等于遍历参数
// if((m_paraType & PARA_TYPE_ROOTTRAVERSE) == PARA_TYPE_ROOTTRAVERSE)
// {
// //刷新遍历状态
// for(int i = 0; i < m_itemList.size(); i++)
// {
// if(m_itemList[i].paraTypeSort == ROOT_SORT_HEADSENSOR)//信号参数
// {
// //读取机头遍历状态(遍历功能)
// int NoseNum = 0;//不赋初值,就要保证在各种情况下都有值
// if(m_nodeType == 0)
// {
// NoseNum = m_mcParaValues.buf[2];//平绣机头个数
// }
// else if(m_nodeType == 1)
// {
// NoseNum = m_mcParaValues.buf[4];//冲孔机头个数
// }
// else if(m_nodeType == 2)
// {
// NoseNum = m_mcParaValues.buf[8];//毛巾机头个数
// }
// //刷新信号参数 -N -Y
// refreshSensorPara(m_itemList[i].minVal,m_itemList[i].maxVal,NoseNum,m_itemList[i],traverseState);
// }
// }
// }
//}
void ParameterSetDialog::on_button1_clicked()
{
changeValue(0);
}
void ParameterSetDialog::on_button2_clicked()
{
changeValue(1);
}
void ParameterSetDialog::on_button3_clicked()
{
changeValue(2);
}
void ParameterSetDialog::on_button4_clicked()
{
changeValue(3);
}
void ParameterSetDialog::on_button5_clicked()
{
changeValue(4);
}
void ParameterSetDialog::on_button6_clicked()
{
changeValue(5);
}
void ParameterSetDialog::on_button7_clicked()
{
changeValue(6);
}
void ParameterSetDialog::on_button8_clicked()
{
changeValue(7);
}
void ParameterSetDialog::on_button9_clicked()
{
changeValue(8);
}
void ParameterSetDialog::on_button10_clicked()
{
changeValue(9);
}
void ParameterSetDialog::on_button11_clicked()
{
changeValue(10);
}
void ParameterSetDialog::on_button12_clicked()
{
changeValue(11);
}
void ParameterSetDialog::on_buttonPgUp_clicked()
{
if(m_paraType == PARA_TYPE_ROOT)//等于超级用户界面
{
m_rootCurPage--;
}
else
{
m_curPage--;
}
refreshUi();
}
void ParameterSetDialog::on_buttonPgDn_clicked()
{
if(m_paraType == PARA_TYPE_ROOT)//等于超级用户界面
{
m_rootCurPage++;
}
else
{
m_curPage++;
}
refreshUi();
}
void ParameterSetDialog::on_buttonOk_clicked()
{
PromptDialog promptDlg(this);
qDebug()<<"para ok 1";
//等于遍历参数
if((m_paraType & PARA_TYPE_ROOTTRAVERSE) == PARA_TYPE_ROOTTRAVERSE)
{
qDebug()<<"para ok 2";
int para1,para2,para3;
para1 = para2 = para3 = 0;
promptDlg.initDialog(PromptDialog::BTN_OK_CANCEL);
promptDlg.setTitleStr(tr("Prompt"));
promptDlg.setContentStr(tr("Whether to start traversing settings?"));//是否开始遍历设置?
if(promptDlg.exec() == 1)
{
if(m_itemList.size() <= 0){return;}
para1 = m_itemList[0].value;//协议类型
para2 = m_itemList[1].value;//遍历模式
if(para2 == 1)//单独遍历
{
//起始ID等于设置的机头号
para3 = m_itemList[2].value;
}
else //全部遍历
{
//起始ID等于1
para3 = 1;
}
if(g_pMachine != NULL)
{
g_pMachine->enterOrExitStates(UCMD_TRA_BOARD,para1,WIREHEAD,para2,para3);
}
}
qDebug()<<"para ok 3";
return;
}
//等于超级用户花样参数
if((m_paraType & PARA_TYPE_ROOT_PATTERN) == PARA_TYPE_ROOT_PATTERN)
{
// int para = 0;
if(m_itemList.size() <= 0){return;}//是超级用户的花样参数
int StepLockNeedlesNum = getItemValue(SET_LOCKNEEDLESNUM); // 锁针次数
g_pSettings->writeToIniFile("PatternPara/lockNeedlesNum",StepLockNeedlesNum);
int StepLockNeedlesStepNum = getItemValue(SET_LOCKNEEDLESSTEPNUM); // 锁针步数
g_pSettings->writeToIniFile("PatternPara/lockNeedlesStepNum",StepLockNeedlesStepNum);
int StepLockNeedlesStepLength = getItemValue(SET_LOCKNEEDLESSTEPLENTH); // 锁针针步长度
g_pSettings->writeToIniFile("PatternPara/lockNeedlesStepLength",StepLockNeedlesStepLength);
done(1);//关闭窗体并返回1
}
//等于机器参数或工作参数
if(((m_paraType & PARA_TYPE_MACH) == PARA_TYPE_MACH) ||
((m_paraType & PARA_TYPE_WORK) == PARA_TYPE_WORK))
{
qDebug()<<"para ok 4";
saveParas();
if(g_pMachine->isConnected() == 3)
{
promptDlg.initDialog(PromptDialog::BTN_OK);
promptDlg.setTitleStr(tr("Prompt"));
QString str;
str = tr("Parameters saved successfully!");//参数保存成功!
promptDlg.setContentStr(str);
promptDlg.exec();
}
}
//等于机头板参数
if(((m_paraType & PARA_TYPE_HEADPARAMETER) == PARA_TYPE_HEADPARAMETER))
{
saveParas();
if(g_pMachine->isConnected() == 3)
{
promptDlg.initDialog(PromptDialog::BTN_OK);
promptDlg.setTitleStr(tr("Prompt"));
QString str;
str = tr("Parameters saved successfully!");//参数保存成功!
promptDlg.setContentStr(str);
promptDlg.exec();
}
}
//等于软件设置参数
if((m_paraType & PARA_TYPE_SOFTWARESET) == PARA_TYPE_SOFTWARESET)
{
qDebug()<<"para ok 5";
promptDlg.initDialog(PromptDialog::BTN_OK_CANCEL);
promptDlg.setTitleStr(tr("Prompt"));
QString str;
str = tr("The settings take effect after restarting the interface!");//重启界面后设置生效!
promptDlg.setContentStr(str);
if(promptDlg.exec() == 1)
{
int language = m_itemList.at((s16)SET_LANGUAGE).value;//语言
//int connectMode = m_itemList.at((s16)SET_CONNECTMODE).value;//连接通讯方式
g_pSettings->writeToIniFile("HMI/language",language);
//g_pSettings->writeToIniFile("HMI/connectMode",connectMode);
#ifdef Q_OS_WIN
qApp->exit();
#endif
#ifdef Q_OS_LINUX
system("reboot");
#endif
}
qDebug()<<"para ok 6";
return;
}
//等于网络管理参数
if((m_paraType & PARA_TYPE_NETWORKSET) == PARA_TYPE_NETWORKSET)
{
qDebug()<<"para ok 7";
//网络设置完成,需重启后重新建立连接
promptDlg.initDialog(PromptDialog::BTN_OK_CANCEL);
QString str = tr("Network settings are completed, re-establish after reboot");
promptDlg.setTitleStr(tr("Prompt"));
promptDlg.setContentStr(str);
if(promptDlg.exec() == 1)
{
QDir apppath(qApp->applicationDirPath());
s16 idx = 0;//参数索引
QString configfile;
configfile = apppath.path() + apppath.separator() + "mcconfig.ini";
QSettings configIni(configfile, QSettings::IniFormat);
QString serverip = m_itemList.at(idx).valueStr;//服务器IP
int serverport = m_itemList.at(idx).value;//服务器端口
// 回写参数
configIni.setValue("server/ip", serverip);
configIni.setValue("server/port", serverport);
QString localip = m_itemList.at(idx).valueStr;//本地IP
// 回写参数
configIni.setValue("local/ip", localip);
idx++;
int localport = m_itemList.at(idx).value;//本地端口
// 回写参数
configIni.setValue("local/port", localport);
idx++;
#ifdef Q_OS_WIN
qApp->exit();
#endif
#ifdef Q_OS_LINUX
system("reboot");
#endif
}
return;
}
//等于网关网络设置参数
if((m_paraType & PARA_TYPE_NETWORKSETTINGS) == PARA_TYPE_NETWORKSETTINGS)
{
//网络设置完成,需重启后重新建立连接
promptDlg.initDialog(PromptDialog::BTN_OK_CANCEL);
QString str = tr("Network settings are completed, re-establish after reboot");
promptDlg.setTitleStr(tr("Prompt"));
promptDlg.setContentStr(str);
if(promptDlg.exec() == 1)
{
QDir apppath(qApp->applicationDirPath());
s16 idx =0; //参数索引
QString configfile;
configfile = apppath.path() + apppath.separator() +"lotconfig.ini";
QSettings configIni(configfile, QSettings::IniFormat);
QString serverip = m_itemList.at(idx).valueStr;//服务器IP
idx++;
int serverport = m_itemList.at(idx).value;//服务器端口
idx++;
QString localip = m_itemList.at(idx).valueStr;//本地IP
idx++;
int localport = m_itemList.at(idx).value;//本地端口
// 回写参数
configIni.setValue("server/ip", serverip);
configIni.setValue("server/port", serverport);
configIni.setValue("local/ip", localip);
configIni.setValue("local/port", localport);
#ifdef Q_OS_WIN
qApp->exit();
#endif
#ifdef Q_OS_LINUX
system("reboot");
#endif
}
return;
}
//等于时间设置参数
if((m_paraType & PARA_TYPE_TIMESET) == PARA_TYPE_TIMESET)
{
int yearValue = m_itemList.at(0).value;
int monthValue = m_itemList.at(1).value;
int dayValue = m_itemList.at(2).value;
#ifdef Q_OS_LINUX
int hourValue = m_itemList.at(3).value;
int minuteValue = m_itemList.at(4).value;
int secondValue = m_itemList.at(5).value;
#endif
int temp = 0;
//判断是否为闰年闰年2月份是29天其他是28天
if((yearValue % 4 == 0) && (yearValue % 100 != 0))
{
if(monthValue == 2)
{
if(dayValue > 29)
{
temp = -1;
}
}
}
else
{
if(monthValue == 2)
{
if(dayValue > 28)
{
temp = -1;
}
}
}
//1、3、5、7、8、10、12是31天其他是30天
if(monthValue == 4 || monthValue == 6 || monthValue == 9 || monthValue == 11)
{
if(dayValue > 30)
{
temp = -1;
}
}
QString showStr;
if(temp == 0)
{
//设置时间
#ifdef Q_OS_LINUX
struct tm rtcTime;
rtcTime.tm_year = yearValue - 1900;
rtcTime.tm_mon = monthValue - 1;
rtcTime.tm_mday = dayValue;
rtcTime.tm_hour = hourValue;
rtcTime.tm_min = minuteValue;
rtcTime.tm_sec = secondValue;
rtcTime.tm_isdst = 0;
rtcTime.tm_yday = 0;
rtcTime.tm_wday = 0;
int retval = hal_set_rtc_time(&rtcTime);
if(retval != 0)
{
qDebug("set_rtc_time failed: %d!", retval);
temp = -2;
}
#endif
//时间设置完成,重启后生效
promptDlg.initDialog(PromptDialog::BTN_RESTART);
showStr = tr("The time setting is completed and will take effect after restart");
}
else if(temp == -1)
{
//时间设置不合理,请重新设置
promptDlg.initDialog(PromptDialog::BTN_OK);
showStr = tr("Unreasonable time setting, please reset");
}
if(temp == -2)
{
//时间设置失败,请重新设置
promptDlg.initDialog(PromptDialog::BTN_OK);
showStr = tr("Time setting failed, please reset");
}
promptDlg.setTitleStr(tr("Prompt"));
promptDlg.setContentStr(showStr);
promptDlg.exec();
return;
}
//等于超级用户界面配置参数
if((m_paraType & PARA_TYPE_HMICONFIGURATION) == PARA_TYPE_HMICONFIGURATION)
{
qDebug()<<"para ok 5";
promptDlg.initDialog(PromptDialog::BTN_OK_CANCEL);
promptDlg.setTitleStr(tr("Prompt"));
QString str;
str = tr("The settings take effect after restarting the interface!");//重启界面后设置生效!
promptDlg.setContentStr(str);
if(promptDlg.exec() == 1)
{
//界面配置里的参数都放在了 点击触发型参数枚举 里,要筛选才能获取到相应的value值
for(int i = 0; i < m_itemList.size(); i++)
{
if(m_itemList[i].indexInPara == ROOT_RESOLUTION)
{
g_emResolut = (Resolution)(m_itemList[i].value);//分辨率
g_pSettings->writeToIniFile("HMI/resolution",g_emResolut);
}
else if (m_itemList[i].indexInPara == SET_CONNECTMODE)
{
int connectMode = (s16)m_itemList[i].value;//连接通讯方式
g_pSettings->writeToIniFile("HMI/connectMode",connectMode);
}
else if(m_itemList[i].indexInPara == ROOT_HIGH_SPEED_SWITCHING)
{
s16 speedMode =(s16)(m_itemList[i].value);//是否为高速
g_pSettings->writeToIniFile("AUFUS/highSpeed",speedMode);
}
else if(m_itemList[i].indexInPara == ROOT_WATERMARKSET)
{
s16 waterMark =(s16)(m_itemList[i].value);//主背景是否带水印
g_pSettings->writeToIniFile("HMI/waterMark",waterMark);
}
else if(m_itemList[i].indexInPara == ROOT_WIFI)
{
s16 wifi =(s16)(m_itemList[i].value);//是否带wifi
g_pSettings->writeToIniFile("HMI/wifi",wifi);
}
else if(m_itemList[i].indexInPara == ROOT_PARASORTSET)
{
s16 paraSort =(s16)(m_itemList[i].value);//参数是否分类显示
g_pSettings->writeToIniFile("HMI/paraSort",paraSort);
}
else if(m_itemList[i].indexInPara == ROOT_MACTYPE)
{
g_emMacType = (MachineType)(m_itemList[i].value);//机器类型
g_pSettings->writeToIniFile("HMI/machineType",g_emMacType);
if(g_emMacType == MACHINE_PUNCH)//等于冲孔机重新配置常用功能
{
g_pSettings->writeToIniFile("HMI/commonbtn1",FUN_PATTERNSELECT);//快捷按钮1的功能索引
g_pSettings->writeToIniFile("HMI/commonbtn2",FUN_SETSTARTPOINT);//快捷按钮2的功能索引
g_pSettings->writeToIniFile("HMI/commonbtn3",FUN_BACKSTARTPOINT);//快捷按钮3的功能索引
g_pSettings->writeToIniFile("HMI/commonbtn4",FUN_CHECKFRAME);//快捷按钮4的功能索引
g_pSettings->writeToIniFile("HMI/commonbtn5",FUN_BACKWORKPOINT);//快捷按钮5的功能索引
g_pSettings->writeToIniFile("HMI/commonbtn6",FUN_SETOFFSETPOINT);//快捷按钮6的功能索引
g_pSettings->writeToIniFile("HMI/commonbtn7",FUN_BACKOFFSETPOINT);//快捷按钮7的功能索引
g_pSettings->writeToIniFile("HMI/commonbtn8",FUN_PUNCHSPINDLEJOG);//快捷按钮8的功能索引
g_pSettings->writeToIniFile("HMI/commonbtn9",FUN_PUNCHMANUALCHANGECOLOR);//快捷按钮9的功能索引
g_pSettings->writeToIniFile("HMI/commonbtn10",FUN_SINGLEPUNCH);//快捷按钮10的功能索引
}
if(g_emMacType == MACHINE_PUNCH_AUTOPOS)//等于垫板冲孔机重新配置常用功能
{
g_pSettings->writeToIniFile("HMI/commonbtn1",FUN_PATTERNSELECT);//快捷按钮1的功能索引
g_pSettings->writeToIniFile("HMI/commonbtn2",FUN_SINGLEPUNCH);//快捷按钮2的功能索引
g_pSettings->writeToIniFile("HMI/commonbtn3",FUN_BACKSTARTPOINT);//快捷按钮3的功能索引
g_pSettings->writeToIniFile("HMI/commonbtn4",FUN_CHECKFRAME);//快捷按钮4的功能索引
g_pSettings->writeToIniFile("HMI/commonbtn5",FUN_BACKWORKPOINT);//快捷按钮5的功能索引
g_pSettings->writeToIniFile("HMI/commonbtn6",FUN_SETOFFSETPOINT);//快捷按钮6的功能索引
g_pSettings->writeToIniFile("HMI/commonbtn7",FUN_BACKOFFSETPOINT);//快捷按钮7的功能索引
g_pSettings->writeToIniFile("HMI/commonbtn8",FUN_PUNCHSPINDLEJOG);//快捷按钮8的功能索引
g_pSettings->writeToIniFile("HMI/commonbtn9",FUN_PUNCHMANUALCHANGECOLOR);//快捷按钮9的功能索引
g_pSettings->writeToIniFile("HMI/commonbtn10",FUN_DRAWOUTLINE);//快捷按钮10的功能索引
}
else if(g_emMacType == MACHINE_PUNCH_SEW)//冲缝机
{
g_pSettings->writeToIniFile("HMI/commonbtn1",FUN_ALLTOZERO);//快捷按钮1的功能索引
g_pSettings->writeToIniFile("HMI/commonbtn2",FUN_PUNCHSPINDLEJOG);//快捷按钮2的功能索引
g_pSettings->writeToIniFile("HMI/commonbtn3",FUN_SPINDLEENABLE);//快捷按钮3的功能索引
g_pSettings->writeToIniFile("HMI/commonbtn4",FUN_SPINDLEDISABLE);//快捷按钮4的功能索引
g_pSettings->writeToIniFile("HMI/commonbtn5",FUN_SPINDLETEST);//快捷按钮5的功能索引
g_pSettings->writeToIniFile("HMI/commonbtn6",FUN_SETOFFSETPOINT);//快捷按钮6的功能索引
g_pSettings->writeToIniFile("HMI/commonbtn7",FUN_BACKOFFSETPOINT);//快捷按钮7的功能索引
g_pSettings->writeToIniFile("HMI/commonbtn8",FUN_SETSTARTPOINT);//快捷按钮8的功能索引
g_pSettings->writeToIniFile("HMI/commonbtn9",FUN_BACKSTARTPOINT);//快捷按钮9的功能索引
g_pSettings->writeToIniFile("HMI/commonbtn10",FUN_BACKWORKPOINT);//快捷按钮10的功能索引
}
else
{
g_pSettings->writeToIniFile("HMI/commonbtn1",FUN_PATTERNSELECT);//快捷按钮1的功能索引
g_pSettings->writeToIniFile("HMI/commonbtn2",FUN_SETSTARTPOINT);//快捷按钮2的功能索引
g_pSettings->writeToIniFile("HMI/commonbtn3",FUN_BACKSTARTPOINT);//快捷按钮3的功能索引
g_pSettings->writeToIniFile("HMI/commonbtn4",FUN_CHECKFRAME);//快捷按钮4的功能索引
g_pSettings->writeToIniFile("HMI/commonbtn5",FUN_BACKWORKPOINT);//快捷按钮5的功能索引
g_pSettings->writeToIniFile("HMI/commonbtn6",FUN_SETOFFSETPOINT);//快捷按钮6的功能索引
g_pSettings->writeToIniFile("HMI/commonbtn7",FUN_BACKOFFSETPOINT);//快捷按钮7的功能索引
g_pSettings->writeToIniFile("HMI/commonbtn8",FUN_PUNCHSPINDLEJOG);//快捷按钮8的功能索引
g_pSettings->writeToIniFile("HMI/commonbtn9",FUN_PUNCHMANUALCHANGECOLOR);//快捷按钮9的功能索引
g_pSettings->writeToIniFile("HMI/commonbtn10",FUN_SINGLEPUNCH);//快捷按钮10的功能索引
}
}
else if(m_itemList[i].indexInPara == ROOT_PRODUCTTYPE)
{
g_emProductType =(ProductType)(m_itemList[i].value);//产品类型
g_pSettings->writeToIniFile("HMI/productType",g_emProductType);
}
}
#ifdef Q_OS_WIN
qApp->exit();
#endif
#ifdef Q_OS_LINUX
system("reboot");
#endif
}
return;
}
//等于超级用户物联网配置参数
if((m_paraType & PARA_TYPE_IOTCONFIGURATION) == PARA_TYPE_IOTCONFIGURATION)
{
qDebug()<<"para ok 66";
for(int i = 0; i<m_itemList.size(); i++)
{
if(m_itemList[i].indexInPara == ROOT_RACKNUMBERINPUT)
{
int rackNumber = m_itemList[i].value;//机架号
g_pSettings->writeToIniFile("IOT/rackNumber",rackNumber);
}
else if(m_itemList[i].indexInPara == ROOT_DELIVERYTIME)
{
QString deliveryTime = m_itemList[i].valueStr;//工厂预计交货时间
g_pSettings->writeToIniFile("IOT/deliveryTime",deliveryTime);
}
else if(m_itemList[i].indexInPara == ROOT_DEBUGPROGRESS)
{
int debugProgress = m_itemList[i].value;//调试进度
g_pSettings->writeToIniFile("IOT/debugProgress",debugProgress);
}
}
//网关连接方式改变时需要提示重启
s16 cFlag = 0;
for(int i = 0; i<m_itemList.size(); i++)
{
if(m_itemList[i].indexInPara == ROOT_GATEWAYCONNECTIONMETHOD)
{
int bVal = g_pSettings->readFromIniFile("IOT/gatewayConnectMode").toInt();
int eVal = m_itemList[i].value;//网关连接方式
if(bVal != eVal)
{
cFlag = 1;
}
break;
}
}
if(cFlag == 1)
{
promptDlg.initDialog(PromptDialog::BTN_OK_CANCEL);
promptDlg.setTitleStr(tr("Prompt"));
QString str;
str = tr("Connection mode changes, take effect after the reboot!");//连接方式改变,重启界面后生效!
promptDlg.setContentStr(str);
if(promptDlg.exec() == 1)
{
for(int i = 0; i<m_itemList.size(); i++)
{
if(m_itemList[i].indexInPara == ROOT_GATEWAYCONNECTIONMETHOD)
{
int gatewayConnect = m_itemList[i].value;//网关连接方式
g_pSettings->writeToIniFile("IOT/gatewayConnectMode",gatewayConnect);
break;
}
}
#ifdef Q_OS_WIN
qApp->exit();
#endif
#ifdef Q_OS_LINUX
system("reboot");
#endif
}
return;
}
else
{
done(1);
}
}
//超级用户密码权限,单次有效
g_emUser = operate;
done(1);//0是关掉
qDebug()<<"para ok 8";
}
void ParameterSetDialog::on_buttonCancel_clicked()
{
//等于遍历参数
if((m_paraType & PARA_TYPE_ROOTTRAVERSE) == PARA_TYPE_ROOTTRAVERSE)
{
if(g_pMachine != NULL)
{
g_pMachine->exitTraverStates();
}
g_emUser = operate;
done(0);
return;
}
//等于锁头测试参数
if((m_paraType & PARA_TYPE_LOCKTEST) == PARA_TYPE_LOCKTEST)
{
if(g_pMachine != NULL)
{
g_pMachine->enterOrExitStates(MC_STA_EXIT_TRA);
}
g_emUser = operate;
done(0);
return;
}
//超级用户密码权限,单次有效
g_emUser = operate;
done(0);
}
//恢复默认的参数(主板和外围板)
void ParameterSetDialog::on_buttonEXBParaRestore_clicked()
{
UserRoles emUser = g_emUser;
if(g_emDebugMode == nodebugMode)
{
if(g_emUser != resetpara)//权限不够先登录
{
emit siUserLogin(resetpara);
if(g_emUser != resetpara)//发送登录信号后,权限如果还没改变就返回
{
return;
}
}
}
PromptDialog promptDlg(this);
promptDlg.initDialog(PromptDialog::BTN_OK_CANCEL);
promptDlg.setTitleStr(tr("Prompt"));
if(m_paraType == PARA_TYPE_HEADPARAMETER)
{
promptDlg.setContentStr(tr("Whether to recover the default parameters for the head board?"));//是否恢复为机头板默认参数?
}
else if(m_paraType == PARA_TYPE_MACH ||
m_paraType == PARA_TYPE_WORK)
{
promptDlg.setContentStr(tr("Whether to recover the default parameters for the board?"));//是否恢复为主板默认参数?
}
if(promptDlg.exec() == 1)
{
if(g_pMachine != NULL)
{
if(m_paraType == PARA_TYPE_HEADPARAMETER)//设置机头板默认参数
{
g_pMachine->setToDefaultParas(UCMD_SET_HEADDEF_PARA, 0);
}
else if(m_paraType == PARA_TYPE_MACH ||
m_paraType == PARA_TYPE_WORK)//设置主板默认参数
{
g_pMachine->setToDefaultParas(UCMD_SET_DEF_PARA, 0);
}
setMainTitle(tr("Root"));
setSubTitle(tr("Accessibility > Root"));
//超级用户参数
setItemList(root,PARA_TYPE_ROOT);
refreshUi();
}
}
g_emUser = emUser;
}
//返回上一级菜单
void ParameterSetDialog::on_buttonReturn_clicked()
{
//等于遍历参数
if((m_paraType & PARA_TYPE_ROOTTRAVERSE) == PARA_TYPE_ROOTTRAVERSE)
{
PromptDialog promptDlg(this);
promptDlg.initDialog(PromptDialog::BTN_OK_CANCEL);
promptDlg.setTitleStr(tr("Prompt"));
promptDlg.setContentStr(tr("Whether to exit traversing settings?"));//是否退出遍历设置?
if(promptDlg.exec() == 1)
{
if(g_pMachine != NULL)
{
g_pMachine->exitTraverStates();
}
}
else
{
return; //退出函数,不执行下边的代码
}
}
//等于锁头测试参数
if((m_paraType & PARA_TYPE_LOCKTEST) == PARA_TYPE_LOCKTEST)
{
PromptDialog promptDlg(this);
promptDlg.initDialog(PromptDialog::BTN_OK_CANCEL);
promptDlg.setTitleStr(tr("Prompt"));
promptDlg.setContentStr(tr("Whether to exit lock test?"));//是否退出锁头测试?
if(promptDlg.exec() == 1)
{
if(g_pMachine != NULL)
{
g_pMachine->enterOrExitStates(MC_STA_EXIT_TRA);
}
}
else
{
return; //退出函数,不执行下边的代码
}
}
if(g_emDebugMode == nodebugMode)
{
if(g_emUser == factory)
{
setMainTitle(tr("Root"));
setSubTitle(tr("Accessibility > Root"));
//超级用户参数
setItemList(factory,PARA_TYPE_ROOT);
refreshUi();
}
else if (g_emUser == root)
{
setMainTitle(tr("Root"));
setSubTitle(tr("Accessibility > Root"));
//超级用户参数
setItemList(root,PARA_TYPE_ROOT);
refreshUi();
}
}
else
{
setMainTitle(tr("Root"));
setSubTitle(tr("Accessibility > Root"));
//超级用户参数
setItemList(root,PARA_TYPE_ROOT);
refreshUi();
}
}