/******************************addpar.cpp文件说明********************************** * Descript :源文件,包含C运动参数配置窗口的函数实现 * Author :caitiancheng * Date :2021_12_19 *******************************************************************************/ /***********************************头文件****************************************/ #include "addpar.h" #include "ui_addpar.h" #include #include /***********************************类的声明和继承****************************************/ AddPar::AddPar(QWidget *parent) : QWidget(parent), ui(new Ui::AddPar) { ui->setupUi(this); //初始化配置 InitTree(); //设置窗口标题 setWindowTitle("C运动参数配置"); } /****************************closeEvent函数********************************* Function :窗口关闭事件函数 Output : *********************************************************************/ void AddPar::closeEvent(QCloseEvent *event) { QMessageBox::StandardButton Value=QMessageBox::question(this,QStringLiteral("退出提示"),QStringLiteral("确认数据已经同步到设备?")); if(Value==QMessageBox::Yes) { emit CloseWin(); event->accept(); }else { event->ignore(); } } /****************************showEvent函数********************************* Function :如果从站连接上,更新数据 Output : *********************************************************************/ void AddPar::showEvent(QShowEvent *event) { if(ConStatus()) { event->accept(); Updata(); } } /****************************ReadArgRunCrl函数********************************* Function :读取从站数据 Output : *********************************************************************/ void AddPar::ReadArgRunCrl(QStandardItem *Item,int Addr,int Row) { int Value; Value=ReadSFDInt(Addr); Item->child(Row,2)->setText(QString::number(Value)); } /****************************FreeQList函数********************************* Function :删除列表参数 Output : *********************************************************************/ void AddPar::FreeQList(QList *Item) { for(int i=0;ilength();i++) { delete Item->at(i); } } /****************************InitTree函数********************************* Function :初始化函数 Output : *********************************************************************/ void AddPar::InitTree() { //定义数据行对象 QStringList QStrListTemp; //初始化模型 Model=new QStandardItemModel(); //配置分类选择信号 connect(Model,SIGNAL(itemChanged(QStandardItem*)),this,SLOT(TreeItemChanged(QStandardItem*))); //建立列名 TreeHead.push_back(QStringLiteral("名称")); TreeHead.push_back(QStringLiteral("离线值")); TreeHead.push_back(QStringLiteral("在线值")); TreeHead.push_back(QStringLiteral("单位")); TreeHead.push_back(QStringLiteral("备注")); Model->setHorizontalHeaderLabels(TreeHead); //建立行分类 BaseClass=new QStandardItem(QStringLiteral("基础参数")); RunCtrlClass=new QStandardItem(QStringLiteral("运动限制")); //建立分类可选择 BaseClass->setCheckable(true); BaseClass->setEditable(false); RunCtrlClass->setCheckable(true); RunCtrlClass->setEditable(false); //分类加入模型 Model->appendRow(BaseClass); Model->appendRow(RunCtrlClass); //建立数据行 //编码器的旋转计数 QStrListTemp.clear(); QStrListTemp.push_back(QStringLiteral("单圈脉冲")); QStrListTemp.push_back("0"); QStrListTemp.push_back("0"); QStrListTemp.push_back(""); QStrListTemp.push_back("编码器旋转一圈的计数值,根据电机编码器设定,如果17位,设置成131072"); NewChildLine(BaseClass,&BaseOtp,QStrListTemp); //每圈移动量 QStrListTemp.clear(); QStrListTemp.push_back(QStringLiteral("移动量")); QStrListTemp.push_back("0"); QStrListTemp.push_back("0"); QStrListTemp.push_back("脉冲"); QStrListTemp.push_back("每圈移动需要的脉冲"); NewChildLine(BaseClass,&BaseMnum,QStrListTemp); //最高速度 QStrListTemp.clear(); QStrListTemp.push_back(QStringLiteral("最大速度")); QStrListTemp.push_back("0"); QStrListTemp.push_back("0"); QStrListTemp.push_back("脉冲/秒"); QStrListTemp.push_back("电机可以运行的最大速度"); NewChildLine(RunCtrlClass,&RunSpeed,QStrListTemp); //最快加速度 QStrListTemp.clear(); QStrListTemp.push_back(QStringLiteral("最快加速度时间")); QStrListTemp.push_back("0"); QStrListTemp.push_back("0"); QStrListTemp.push_back("毫秒"); QStrListTemp.push_back("最快加速时间,根据该时间,系统自动计算对应加速相关参数"); NewChildLine(RunCtrlClass,&RunAddSpeed,QStrListTemp); //最快减速度 QStrListTemp.clear(); QStrListTemp.push_back(QStringLiteral("最快减速度时间")); QStrListTemp.push_back("0"); QStrListTemp.push_back("0"); QStrListTemp.push_back("毫秒"); QStrListTemp.push_back("最快减速时间,根据该时间,系统自动计算对应减速相关参数"); NewChildLine(RunCtrlClass,&RunSubSpeed,QStrListTemp); //加载模型到树 ui->ArgDataTreeView->setModel(Model); ui->ArgDataTreeView->expandAll(); } /****************************TreeItemChanged函数********************************* Function :模型数参数改变 Output : *********************************************************************/ void AddPar::TreeItemChanged(QStandardItem *Item) { if (Item->isCheckable()&&Item->hasChildren()) { Qt::CheckState status = Item->checkState (); for(int i = 0;irowCount();++i) { QStandardItem* ItemChild = Item->child(i); ItemChild->setCheckState(status); } } } /****************************NewChildLine函数********************************* Function :新子行建立 Output : *********************************************************************/ void AddPar::NewChildLine(QStandardItem *Item,QList *ItemList,QStringList Data) { int RowCount; ItemList->clear(); for(int i=0;ipush_back(new QStandardItem(Data.at(i))); if(i!=1) { ItemList->at(i)->setEditable(false); } } RowCount=Item->rowCount(); ItemList->at(0)->setCheckable(true); Item->appendRow(ItemList->at(0)); for(int i=1;isetChild(RowCount,i,ItemList->at(i)); } } /****************************DownLoadData函数********************************* Function :下载从站数据 Output : *********************************************************************/ int AddPar::DownLoadData(QStandardItem *Item,QString Name,int Addr,int Row) { bool ok=true; int Value=0; if(Item->child(Row)->checkState()==Qt::Checked) { Value=Item->child(Row,1)->text().toInt(&ok); if(!ok) { QMessageBox::information(this,Name,QStringLiteral("写入失败")); return ReFild; } WriteSFDInt(Addr,Value); return ReSuess; } return ReUncheck; } /****************************下载按钮槽函数********************************* Function :点击下载按钮,会触发该槽函数 Output : *********************************************************************/ void AddPar::on_DownloadBtn_clicked() { int count=0; int value=0; if(!ConStatus()) { QMessageBox::information(this,QStringLiteral("连接提示"),QStringLiteral("当前处于未连接状态")); } else { value=DownLoadData(BaseClass,"单圈脉冲",3002,0); count+=value==1?1:0; value=DownLoadData(BaseClass,"移动量",3004,1); count+=value==1?1:0; value=DownLoadData(RunCtrlClass,"最大速度",3018,0); count+=value==1?1:0; value=DownLoadData(RunCtrlClass,"最快加速度时间",3020,1); count+=value==1?1:0; value=DownLoadData(RunCtrlClass,"最快减速度时间",3022,2); count+=value==1?1:0; QMessageBox::information(this,QStringLiteral("下载提示"),QStringLiteral("写入成功:")+QString::number(count)); } } /****************************Updata函数********************************* Function :更新数据的函数 Output : *********************************************************************/ void AddPar::Updata() { ReadArgRunCrl(BaseClass,3002,0); ReadArgRunCrl(BaseClass,3004,1); ReadArgRunCrl(RunCtrlClass,3018,0); ReadArgRunCrl(RunCtrlClass,3020,1); ReadArgRunCrl(RunCtrlClass,3022,2); } /****************************上载参数按钮槽函数********************************* Function :点击上载参数按钮,会触发该槽函数 Output : *********************************************************************/ void AddPar::on_UploadBtn_clicked() { if(!ConStatus()) { QMessageBox::information(this,QStringLiteral("连接提示"),QStringLiteral("当前处于未连接状态")); } else { Updata(); } } /******************************************************析构函数*****************************************************/ AddPar::~AddPar() { delete Model; delete BaseClass; FreeQList(&BaseOtp); FreeQList(&BaseMnum); delete RunCtrlClass; FreeQList(&RunSpeed); FreeQList(&RunAddSpeed); FreeQList(&RunSubSpeed); delete ui; }