From eb54bd8661aaf93cf544bbd2d424cb3027d976a2 Mon Sep 17 00:00:00 2001 From: caitiancheng <1162715952@qq.com> Date: Wed, 12 Jan 2022 10:47:49 +0800 Subject: [PATCH] =?UTF-8?q?=E9=A1=B9=E7=9B=AE=E4=BB=A3=E7=A0=81=E4=B8=8A?= =?UTF-8?q?=E4=BC=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../MotorControll_Project.pro | 50 ++ TraimCamp_MotorControl/addpar.cpp | 312 +++++++ TraimCamp_MotorControl/addpar.h | 71 ++ TraimCamp_MotorControl/addpar.ui | 71 ++ TraimCamp_MotorControl/base.cpp | 132 +++ TraimCamp_MotorControl/base.h | 45 + TraimCamp_MotorControl/main.cpp | 22 + TraimCamp_MotorControl/moretypemovement.cpp | 270 ++++++ TraimCamp_MotorControl/moretypemovement.h | 59 ++ TraimCamp_MotorControl/moretypemovement.ui | 142 ++++ TraimCamp_MotorControl/motorcontroll.cpp | 693 +++++++++++++++ TraimCamp_MotorControl/motorcontroll.h | 161 ++++ TraimCamp_MotorControl/motorcontroll.ui | 789 ++++++++++++++++++ TraimCamp_MotorControl/xnet/include/x_net.h | 90 ++ .../xnet/include/xnetclient.h | 132 +++ TraimCamp_MotorControl/xnetconnect.cpp | 78 ++ TraimCamp_MotorControl/xnetconnect.h | 44 + TraimCamp_MotorControl/xnetconnect.ui | 66 ++ 18 files changed, 3227 insertions(+) create mode 100644 TraimCamp_MotorControl/MotorControll_Project.pro create mode 100644 TraimCamp_MotorControl/addpar.cpp create mode 100644 TraimCamp_MotorControl/addpar.h create mode 100644 TraimCamp_MotorControl/addpar.ui create mode 100644 TraimCamp_MotorControl/base.cpp create mode 100644 TraimCamp_MotorControl/base.h create mode 100644 TraimCamp_MotorControl/main.cpp create mode 100644 TraimCamp_MotorControl/moretypemovement.cpp create mode 100644 TraimCamp_MotorControl/moretypemovement.h create mode 100644 TraimCamp_MotorControl/moretypemovement.ui create mode 100644 TraimCamp_MotorControl/motorcontroll.cpp create mode 100644 TraimCamp_MotorControl/motorcontroll.h create mode 100644 TraimCamp_MotorControl/motorcontroll.ui create mode 100644 TraimCamp_MotorControl/xnet/include/x_net.h create mode 100644 TraimCamp_MotorControl/xnet/include/xnetclient.h create mode 100644 TraimCamp_MotorControl/xnetconnect.cpp create mode 100644 TraimCamp_MotorControl/xnetconnect.h create mode 100644 TraimCamp_MotorControl/xnetconnect.ui diff --git a/TraimCamp_MotorControl/MotorControll_Project.pro b/TraimCamp_MotorControl/MotorControll_Project.pro new file mode 100644 index 0000000..8d1ceff --- /dev/null +++ b/TraimCamp_MotorControl/MotorControll_Project.pro @@ -0,0 +1,50 @@ +#------------------------------------------------- +# +# Project created by QtCreator 2021-12-19T08:09:36 +# +#------------------------------------------------- + +QT += core gui + +greaterThan(QT_MAJOR_VERSION, 4): QT += widgets + +TARGET = MotorControll_Project +TEMPLATE = app +DEFINES += QT_DEPRECATED_WARNINGS + +win32 +{ + CONFIG(debug,debug|release) + { + LIBS+=$$PWD/xnet/lib/debug/libX_Net.a + } + CONFIG(release,debug|release) + { + LIBS+=$$PWD/xnet/lib/release/libX_Net.a + } + + INCLUDEPATH+=\ + $$PWD/xnet/include/ \ + $$PWD/motionctrl/include/ +} + + +SOURCES += main.cpp\ + motorcontroll.cpp \ + base.cpp \ + xnetconnect.cpp \ + addpar.cpp \ + moretypemovement.cpp + +HEADERS += motorcontroll.h \ + base.h \ + xnet/include/x_net.h \ + xnet/include/xnetclient.h \ + xnetconnect.h \ + addpar.h \ + moretypemovement.h + +FORMS += motorcontroll.ui \ + xnetconnect.ui \ + addpar.ui \ + moretypemovement.ui diff --git a/TraimCamp_MotorControl/addpar.cpp b/TraimCamp_MotorControl/addpar.cpp new file mode 100644 index 0000000..1352ace --- /dev/null +++ b/TraimCamp_MotorControl/addpar.cpp @@ -0,0 +1,312 @@ +/******************************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; +} + + diff --git a/TraimCamp_MotorControl/addpar.h b/TraimCamp_MotorControl/addpar.h new file mode 100644 index 0000000..fe32412 --- /dev/null +++ b/TraimCamp_MotorControl/addpar.h @@ -0,0 +1,71 @@ +/******************************addpar.h文件说明********************************** +* Descript :头文件,包含C运动参数配置窗口的头文件引用,以及宏定义 +* Author :caitiancheng +* Date :2021_12_19 +*******************************************************************************/ +#ifndef ADDPAR_H +#define ADDPAR_H + + +/***********************************头文件****************************************/ +#include +#include +#include + + + +/***********************************类的声明和继承****************************************/ +namespace Ui { +class AddPar; +} + +class AddPar : public QWidget,public Base +{ + Q_OBJECT + +public: + explicit AddPar(QWidget *parent = 0); + ~AddPar(); +signals: + void CloseWin(); + +protected: + void closeEvent(QCloseEvent *event=NULL); + void showEvent(QShowEvent *event=NULL); + +private slots: + void TreeItemChanged(QStandardItem *Item); + + void on_DownloadBtn_clicked(); + void on_UploadBtn_clicked(); + +private: + typedef enum {ReFild,ReSuess,ReUncheck}ReturnFlag; + Ui::AddPar *ui; + void InitTree(); + QStringList TreeHead; + QStandardItemModel *Model; + //基础参数 + QStandardItem *BaseClass; + //一圈脉冲 + QList BaseOtp; + //移动量 + QList BaseMnum; + + //运动限制 + QStandardItem *RunCtrlClass; + //最高速度 + QList RunSpeed; + //最快加速度 + QList RunAddSpeed; + //最快减速度 + QList RunSubSpeed; + + int DownLoadData(QStandardItem *Item,QString Name,int Addr,int Row); + void Updata(); + void NewChildLine(QStandardItem *Item,QList *ItemList,QStringList Data); + void ReadArgRunCrl(QStandardItem *Item,int Addr,int Row); + void FreeQList(QList *Item); +}; + +#endif // ADDPAR_H diff --git a/TraimCamp_MotorControl/addpar.ui b/TraimCamp_MotorControl/addpar.ui new file mode 100644 index 0000000..b008ea1 --- /dev/null +++ b/TraimCamp_MotorControl/addpar.ui @@ -0,0 +1,71 @@ + + + AddPar + + + + 0 + 0 + 535 + 300 + + + + Form + + + + + 11 + 11 + 513 + 241 + + + + true + + + + + + 10 + 260 + 511 + 30 + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + 下载参数 + + + + + + + 上载参数 + + + + + + + + + diff --git a/TraimCamp_MotorControl/base.cpp b/TraimCamp_MotorControl/base.cpp new file mode 100644 index 0000000..07c74d0 --- /dev/null +++ b/TraimCamp_MotorControl/base.cpp @@ -0,0 +1,132 @@ +/******************************base.cpp文件说明********************************** +* Descript :源文件,包含项目所需要使用的Xnet函数的实现 +* Author :caitiancheng +* Date :2021_12_19 +*******************************************************************************/ + + + +/******************************************头文件***********************************************/ +#include "base.h" + +/****************************ConStatus函数********************************* +Function :读从站连接状态 +Output :从站连接状态 +*********************************************************************/ +bool Base::ConStatus() +{ + bool Ok=true; + short Res; + Read_Short(XNet_SD,8020,1,&Res); + if(Res==1) + { + Ok=true; + }else + { + Ok=false; + } + return Ok; +} + + +/****************************SalveStatus函数********************************* +Function :读从站状态 +Output :返回读出的值 +*********************************************************************/ +int Base::SalveStatus() +{ + short Res; + Read_Short(XNet_SD,8021,1,&Res); + return Res; +} + + + +/****************************WriteMBool函数********************************* +Function :写M寄存器的值 +Output : +*********************************************************************/ +void Base::WriteMBool(int start,bool ok) +{ + Write_Bool(XNet_M,start,1,ok); +} + + +/****************************WriteDShort函数********************************* +Function :写D寄存器short型(单字)的值 +Output : +*********************************************************************/ +void Base::WriteDShort(int start,short value) +{ + Write_Short(XNet_D,start,1,value); +} + + +/****************************WriteDInt函数********************************* +Function :写D寄存器int型(双字)的值 +Output : +*********************************************************************/ +void Base::WriteDInt(int start,int value) +{ + Write_Int(XNet_D,start,2,value); +} + + +/****************************WriteSDShort函数********************************* +Function :写SD寄存器short型的值 +Output : +*********************************************************************/ +void Base::WriteSDShort(int start,int value) +{ + Write_Short(XNet_SD,start,2,value); +} + + +/****************************WriteSFDInt函数********************************* +Function :写SFD寄存器int型的值 +Output : +*********************************************************************/ +void Base::WriteSFDInt(int start,int value) +{ + Write_Int(XNet_SFD,start,2,value); +} + + + +/****************************ReadSFDInt函数********************************* +Function :读SFD寄存器int型的值 +Output :返回读出的值 +*********************************************************************/ +int Base::ReadSFDInt(int Addr) +{ + int ResValue; + Read_Int(XNet_SFD,Addr,2,&ResValue); + return ResValue; +} + + +/****************************ReadSMBool函数********************************* +Function :读SM寄存器的值 +Output :返回读出的值 +*********************************************************************/ +bool Base::ReadSMBool(int Addr) +{ + bool ResValue; + Read_Bool(XNet_SM,Addr,1,&ResValue); + return ResValue; +} + + +/****************************ReadSDShort函数********************************* +Function :读SD寄存器的值 +Output :返回读出的值 +*********************************************************************/ +short Base::ReadSDShort(int Addr) + { + short ResValue; + Read_Short(XNet_SD,Addr,1,&ResValue); + return ResValue; + } + + + diff --git a/TraimCamp_MotorControl/base.h b/TraimCamp_MotorControl/base.h new file mode 100644 index 0000000..0f82ab4 --- /dev/null +++ b/TraimCamp_MotorControl/base.h @@ -0,0 +1,45 @@ +/******************************base.h文件说明********************************** +* Descript :头文件,包含项目需要调用的Xnet函数的头文件引用,以及宏定义 +* Author :caitiancheng +* Date :2021_12_19 +*******************************************************************************/ +#ifndef BASE_H +#define BASE_H + + +/***********************************头文件****************************************/ +#include +#include + + +/***********************************类的声明和继承****************************************/ +class Base +{ +public: + //判断连接状态的函数 + bool ConStatus(); + //从从站状态函数 + int SalveStatus(); + + + //M寄存器写值函数 + void WriteMBool(int start,bool ok); + //D寄存器写short型值函数 + void WriteDShort(int start,short value); + //SD寄存器写short型值函数 + void WriteSDShort(int start,int value); + //D寄存器写int型值函数 + void WriteDInt(int start,int value); + //SFD寄存器写int型值函数 + void WriteSFDInt(int start,int value); + + + //读SM寄存器的值 + bool ReadSMBool(int Addr); + //读SFD寄存器的值 + int ReadSFDInt(int Addr); + //读SD寄存器的值 + short ReadSDShort(int Addr); +}; + +#endif // BASE_H diff --git a/TraimCamp_MotorControl/main.cpp b/TraimCamp_MotorControl/main.cpp new file mode 100644 index 0000000..1c85232 --- /dev/null +++ b/TraimCamp_MotorControl/main.cpp @@ -0,0 +1,22 @@ +/******************************main.cpp文件说明********************************** +* Descript :.cpp文件,包含main函数的程序入口 +* Author :caitiancheng +* Date :2021_12_18 +*******************************************************************************/ + + +/***********************************头文件****************************************/ +#include "motorcontroll.h" +#include + + + +/***********************************主函数****************************************/ +int main(int argc, char *argv[]) +{ + QApplication a(argc, argv); + MotorControll w; + w.show(); + + return a.exec(); +} diff --git a/TraimCamp_MotorControl/moretypemovement.cpp b/TraimCamp_MotorControl/moretypemovement.cpp new file mode 100644 index 0000000..9373afe --- /dev/null +++ b/TraimCamp_MotorControl/moretypemovement.cpp @@ -0,0 +1,270 @@ +/******************************moretypemovement.cpp文件说明********************************** +* Descript :.源文件,包含多段运动添加数据窗口的函数实现 +* Author :caitiancheng +* Date :2021_12_18 +*******************************************************************************/ + + +/******************************************头文件***********************************************/ +#include "moretypemovement.h" +#include "ui_moretypemovement.h" +#include +#include + + +/***********************************类的声明和继承****************************************/ +MoreTypeMovement::MoreTypeMovement(QWidget *parent) : + QWidget(parent), + ui(new Ui::MoreTypeMovement) +{ + ui->setupUi(this); + InitDataTable(); +} + + + +/****************************InitDataTable函数********************************* +Function :初始化数据窗口函数 +Output : +*********************************************************************/ +void MoreTypeMovement::InitDataTable() +{ + QStringList TableHeadTitle; + int TableHeadTitleLength; + TableHeadTitle.push_back(QStringLiteral("位置")); + TableHeadTitle.push_back(QStringLiteral("速度")); + TableHeadTitleLength=TableHeadTitle.length(); + ui->RunDataTWidget->setColumnCount(TableHeadTitleLength); + + for(int i=0;iRunDataTWidget->setHorizontalHeaderItem(i,TableHeadItem[i]); + } + ui->RunDataTWidget->horizontalHeader()->setStretchLastSection(true); + ui->DelRowDataBtn->setEnabled(false); + ui->DownRowDataBtn->setEnabled(false); + ui->UpRowDataBtn->setEnabled(false); + ui->WriteRowDataBtn->setEnabled(false); +} + + + + +/****************************CopyTableRow函数********************************* +Function :复制数据表排函数 +Output : +*********************************************************************/ +void MoreTypeMovement::CopyTableRow(int AtRow,int ToRow) +{ + int ColumnCountLog = ui->RunDataTWidget->columnCount(); + for(int i=0; iRunDataTWidget->item(AtRow, i)->text(); + QTableWidgetItem *TableItemdm = new QTableWidgetItem; + TableItemdm->setText(TableItemValue); + ui->RunDataTWidget->setItem(ToRow, i, TableItemdm); + } +} + + + + +/****************************MoveTableRow函数********************************* +Function :移动数据表排函数 +Output : +*********************************************************************/ +void MoreTypeMovement::MoveTableRow(int AtRow,int ToRow) +{ + int RowSum=ui->RunDataTWidget->rowCount(); + int RowTarget=0; + bool direction=AtRowRowSum-1) + { + return; + } + if(!direction&&ToRow<0) + { + return; + } + int SelectColumn=-1; + QTableWidgetItem *SelectItem= ui->RunDataTWidget->currentItem(); + if(SelectItem!=NULL) + { + SelectColumn=SelectItem->column(); + } + if(direction) + { + RowTarget=ToRow+1; + ui->RunDataTWidget->insertRow(RowTarget); + CopyTableRow(AtRow,RowTarget); + ui->RunDataTWidget->removeRow(AtRow); + }else + { + RowTarget=ToRow; + ui->RunDataTWidget->insertRow(RowTarget); + CopyTableRow(AtRow+1,RowTarget); + ui->RunDataTWidget->removeRow(AtRow+1); + } + ui->RunDataTWidget->selectRow(ToRow); + + if(SelectColumn>-1) + { + ui->RunDataTWidget->setCurrentCell(ToRow,SelectColumn); + } + +} + + +/****************************GetTableNum函数********************************* +Function :获取列表行数 +Output : +*********************************************************************/ +int MoreTypeMovement::GetTableNum(QString &Str,bool *ok) +{ + int ResNum=0; + int Slen=0; + if(ok==NULL) + { + bool BoolTemp; + ok=&BoolTemp; + } + *ok=false; + if(Str.isEmpty()) + { + return ResNum; + } + Slen=Str.length(); + for(int i=0;i='0'&&Str.at(i)<='9') + { + ResNum=ResNum*10+Str.at(i).toLatin1()-'0'; + }else + { + return 0; + } + } + *ok=true; + return ResNum; +} + + + +/****************************closeEvent函数********************************* +Function :关闭窗口事件函数 +Output : +*********************************************************************/ +void MoreTypeMovement::closeEvent(QCloseEvent *event) +{ + QMessageBox::StandardButton Value=QMessageBox::question(this,QStringLiteral("退出提示"),QStringLiteral("确认数据已经同步到设备?")); + if(Value==QMessageBox::Yes) + { + emit CloseWin(); + event->accept(); + }else + { + event->ignore(); + } +} + + + +/******************************************************析构函数*****************************************************/ +MoreTypeMovement::~MoreTypeMovement() +{ + delete ui; +} + + + +/****************************************************槽函数*****************************************************/ +/****************************添加按钮槽函数********************************* +Function :点击添加按钮,触发该槽函数 +Output : +*********************************************************************/ +void MoreTypeMovement::on_AddRowDataBtn_clicked() +{ + int Row=ui->RunDataTWidget->rowCount(); + if(Row>14) + { + QMessageBox::information(this,QStringLiteral("添加数据"),QStringLiteral("最多只能添加15段运动")); + return; + } + ui->RunDataTWidget->insertRow(Row); + ui->DelRowDataBtn->setEnabled(true); + ui->DownRowDataBtn->setEnabled(true); + ui->UpRowDataBtn->setEnabled(true); + ui->WriteRowDataBtn->setEnabled(true); +} + + + +/****************************删除按钮槽函数********************************* +Function :点击删除按钮,触发该槽函数 +Output : +*********************************************************************/ +void MoreTypeMovement::on_DelRowDataBtn_clicked() +{ + int Row=ui->RunDataTWidget->currentRow(); + if(Row!=-1) + { + ui->RunDataTWidget->removeRow(Row); + } +} + + +/****************************上移按钮槽函数********************************* +Function :点击上移按钮,触发该槽函数 +Output : +*********************************************************************/ +void MoreTypeMovement::on_UpRowDataBtn_clicked() +{ + int Row=ui->RunDataTWidget->currentRow(); + MoveTableRow(Row,Row-1); +} + + + +/****************************下移按钮槽函数********************************* +Function :点击上移按钮,触发该槽函数 +Output : +*********************************************************************/ +void MoreTypeMovement::on_DownRowDataBtn_clicked() +{ + int Row=ui->RunDataTWidget->currentRow(); + MoveTableRow(Row,Row+1); +} + + + +/****************************写入按钮槽函数********************************* +Function :点击写入按钮,触发该槽函数 +Output : +*********************************************************************/ +void MoreTypeMovement::on_WriteRowDataBtn_clicked() +{ + int Row=ui->RunDataTWidget->rowCount(); + QString PlaceTemp; + QString SpeedTemp; + int WriteCount=0; + int RegAddr=250; + bool ok1,ok2; + int iPlaceTemp; + int iSpeedTemp; + for(int i=0;iRunDataTWidget->item(i,0)->text(); + SpeedTemp=ui->RunDataTWidget->item(i,1)->text(); + iPlaceTemp=GetTableNum(PlaceTemp,&ok1); + iSpeedTemp=GetTableNum(SpeedTemp,&ok2); + if(ok1&&ok2) + { + WriteDInt(RegAddr,iPlaceTemp); + WriteDInt(RegAddr+2,iSpeedTemp); + RegAddr+=10; + WriteCount++; + } + } + WriteDInt(402,WriteCount); + QMessageBox::information(this,QStringLiteral("写入提示"),QStringLiteral("总共写入:")+QString::number(WriteCount)+QStringLiteral("段")); +} diff --git a/TraimCamp_MotorControl/moretypemovement.h b/TraimCamp_MotorControl/moretypemovement.h new file mode 100644 index 0000000..54ac72d --- /dev/null +++ b/TraimCamp_MotorControl/moretypemovement.h @@ -0,0 +1,59 @@ +/******************************moretypemovement.h文件说明********************************** +* Descript :头文件,包含多段运动添加数据窗口的函数声明、头文件引用,以及宏定义 +* Author :caitiancheng +* Date :2021_12_19 +*******************************************************************************/ +#ifndef MORETYPEMOVEMENT_H +#define MORETYPEMOVEMENT_H + + + +/***********************************头文件****************************************/ +#include +#include +#include +#include + + +/***********************************类的声明和继承****************************************/ +namespace Ui { +class MoreTypeMovement; +} + +class MoreTypeMovement : public QWidget,public Base +{ + Q_OBJECT + +public: + explicit MoreTypeMovement(QWidget *parent = 0); + ~MoreTypeMovement(); + + +signals: + void CloseWin(); + +protected: + void closeEvent(QCloseEvent *event=NULL); + +private slots: + void on_AddRowDataBtn_clicked(); + + void on_DelRowDataBtn_clicked(); + + void on_UpRowDataBtn_clicked(); + + void on_DownRowDataBtn_clicked(); + + void on_WriteRowDataBtn_clicked(); + + +private: + Ui::MoreTypeMovement *ui; + QList TableHeadItem; + void InitDataTable(); + void CopyTableRow(int AtRow,int ToRow); + void MoveTableRow(int AtRow,int ToRow); + int GetTableNum(QString &Str,bool *ok=NULL); +}; + +#endif // MORETYPEMOVEMENT_H diff --git a/TraimCamp_MotorControl/moretypemovement.ui b/TraimCamp_MotorControl/moretypemovement.ui new file mode 100644 index 0000000..c3e91b7 --- /dev/null +++ b/TraimCamp_MotorControl/moretypemovement.ui @@ -0,0 +1,142 @@ + + + MoreTypeMovement + + + + 0 + 0 + 662 + 367 + + + + Form + + + + + 30 + 10 + 598 + 290 + + + + true + + + false + + + true + + + true + + + true + + + true + + + 131 + + + false + + + 30 + + + false + + + true + + + false + + + false + + + true + + + false + + + false + + + + + + 30 + 320 + 111 + 41 + + + + 添加 + + + + + + 150 + 320 + 111 + 41 + + + + 删除 + + + + + + 270 + 320 + 111 + 41 + + + + 上移 + + + + + + 390 + 320 + 111 + 41 + + + + 下移 + + + + + + 520 + 320 + 111 + 41 + + + + 写入 + + + + + + diff --git a/TraimCamp_MotorControl/motorcontroll.cpp b/TraimCamp_MotorControl/motorcontroll.cpp new file mode 100644 index 0000000..3a28b1b --- /dev/null +++ b/TraimCamp_MotorControl/motorcontroll.cpp @@ -0,0 +1,693 @@ +/******************************motorcontroll.cpp文件说明********************************** +* Descript :源文件,包含主窗口的页面设计、函数的实现、信号的连接 +* Author :caitiancheng +* Date :2021_12_19 +*******************************************************************************/ + + +/***********************************头文件****************************************/ +#include "motorcontroll.h" +#include "ui_motorcontroll.h" +#include +#include + + +/***********************************类的声明和继承****************************************/ +MotorControll::MotorControll(QWidget *parent) : + QMainWindow(parent), + ui(new Ui::MotorControll) +{ + ui->setupUi(this); + + + //从站连接状态定时器 + StatuTimer=new QTimer; + //时间显示定时器 + TimeShow=new QTimer; + //监视栏定时器 + Monitor=new QTimer; + + + //控件连接的信号和槽函数 + InitConnect(); + //状态栏界面设置初始化函数 + InitBarStatus(); + //监视栏舒适化函数 + InitMonitor(); + + //未进行通信连接时设置按钮不可按 + //基础配置的按钮(3个) + ui->pushButton_2->setEnabled(false); + ui->pushButton_3->setEnabled(false); + ui->pushButton_4->setEnabled(false); + //点动的按钮(6个) + ui->DotKeepRunBtn->setEnabled(false); + ui->DotPositiveBtn->setEnabled(false); + ui->DotReverseBtn->setEnabled(false); + ui->DotSpeedUpdataBtn->setEnabled(false); + ui->DotStepUpdataBtn->setEnabled(false); + ui->DotStopRunBtn->setEnabled(false); + //基础运动的按钮(8个) + ui->RunKeepBtn->setEnabled(false); + ui->RunPlaceUpdataBtn->setEnabled(false); + ui->RunSpeedUpdataBtn->setEnabled(false); + ui->RunStartAbsolutBtn->setEnabled(false); + ui->RunStartPlaceModifyBtn->setEnabled(false); + ui->RunStartRelativeBtn->setEnabled(false); + ui->RunStopBtn->setEnabled(false); + ui->RunTimeUpdataBtn->setEnabled(false); + //多段运动的按钮(5个)+1个多选框 + ui->RunMoreAddRunBtn->setEnabled(false); + ui->RunMoreDataUpdataBtn->setEnabled(false); + ui->RunMoreKeepBtn->setEnabled(false); + ui->RunMoreModelBox->setEnabled(false); + ui->RunMoreStartBtn->setEnabled(false); + ui->RunMoreStopBtn->setEnabled(false); + +} + + + +/******************************************************析构函数*****************************************************/ +MotorControll::~MotorControll() +{ + //销毁状态栏显示相关 + delete ConStatusText; + delete ConStatusImg; + delete SalveStatusText; + delete SalveStatusShow; + + //销毁定时器 + delete StatuTimer; + delete TimeShow; + delete Monitor; + + + //销毁监视栏的监视对象 + int MonitorLogsLen=MonitorLogs.length(); + for(int i=0;istatusBar->setStyleSheet(QString("QStatusBar::item{border:0px}")); + ConStatusText=new QLabel; + ConStatusText->setAlignment(Qt::AlignRight | Qt::AlignVCenter); + ConStatusText->setText(QStringLiteral("通信状态:")); + ui->statusBar->addPermanentWidget(ConStatusText); + + ConStatusImg=new QLabel; + ConStatusImg->setStyleSheet(m_red_SheetStyle); + ConStatusImg->setAlignment(Qt::AlignLeft | Qt::AlignVCenter); + ui->statusBar->addPermanentWidget(ConStatusImg); + + SalveStatusText=new QLabel; + SalveStatusText->setMinimumWidth(100); + SalveStatusText->setAlignment(Qt::AlignRight | Qt::AlignVCenter); + SalveStatusText->setText(QStringLiteral("从站状态:")); + ui->statusBar->addPermanentWidget(SalveStatusText); + + SalveStatusShow=new QLabel; + SalveStatusShow->setMinimumWidth(60); + SalveStatusShow->setAlignment(Qt::AlignLeft | Qt::AlignVCenter); + SalveStatusShow->setText(QStringLiteral("其它")); + ui->statusBar->addPermanentWidget(SalveStatusShow); +} + + +/****************************InitConnect函数********************************* +Function :主窗口界面涉及的槽函数和信号的连接 +Output : +*********************************************************************/ +void MotorControll::InitConnect() +{ + connect(&Xcon,SIGNAL(CloseWin()),this,SLOT(Slot_ShowWin())); + connect(&Apar,SIGNAL(CloseWin()),this,SLOT(Slot_ShowWin())); + connect(&Movement,SIGNAL(CloseWin()),this,SLOT(Slot_ShowWin())); + connect(StatuTimer,SIGNAL(timeout()),this,SLOT(Slot_Status())); + connect(Monitor,SIGNAL(timeout()),this,SLOT(Slot_Monitor())); + + //开启从站连接状态定时器 + StatuTimer->start(1000); + //开启监视栏定时器 + Monitor->start(500); + //开启时间显示定时器 + TimeShow->start(1000); + //连接定时器和timeout信号 + connect(TimeShow,&QTimer::timeout,[=](){ + ui->statusBar->showMessage(QDateTime::currentDateTime().toString( "yyyy年MM月dd日 hh:mm:ss")); + }); + //多段运动启动与停止绑定 + connect(ui->RunMoreStopBtn,SIGNAL(clicked()),this,SLOT(on_RunStopBtn_clicked())); + connect(ui->RunMoreKeepBtn,SIGNAL(clicked()),this,SLOT(on_RunKeepBtn_clicked())); +} + + + +/****************************Slot_Status函数********************************* +Function :从站状态显示函数 +Output : +*********************************************************************/ +void MotorControll::Slot_Status() +{ + //如果从站连接成功,变为绿色,开启按钮;否则是红色,关闭按钮 + if(ConStatus()) + { + ConStatusImg->setStyleSheet(m_green_SheetStyle); + //基础配置的按钮(3个) + ui->pushButton_2->setEnabled(true); + ui->pushButton_3->setEnabled(true); + ui->pushButton_4->setEnabled(true); + //点动的按钮(6个) + ui->DotKeepRunBtn->setEnabled(true); + ui->DotPositiveBtn->setEnabled(true); + ui->DotReverseBtn->setEnabled(true); + ui->DotSpeedUpdataBtn->setEnabled(true); + ui->DotStepUpdataBtn->setEnabled(true); + ui->DotStopRunBtn->setEnabled(true); + //基础运动的按钮(8个) + ui->RunKeepBtn->setEnabled(true); + ui->RunPlaceUpdataBtn->setEnabled(true); + ui->RunSpeedUpdataBtn->setEnabled(true); + ui->RunStartAbsolutBtn->setEnabled(true); + ui->RunStartPlaceModifyBtn->setEnabled(true); + ui->RunStartRelativeBtn->setEnabled(true); + ui->RunStopBtn->setEnabled(true); + ui->RunTimeUpdataBtn->setEnabled(true); + //多段运动的按钮(5个)+1个多选框 + ui->RunMoreAddRunBtn->setEnabled(true); + ui->RunMoreDataUpdataBtn->setEnabled(true); + ui->RunMoreKeepBtn->setEnabled(true); + ui->RunMoreModelBox->setEnabled(true); + ui->RunMoreStartBtn->setEnabled(true); + ui->RunMoreStopBtn->setEnabled(true); + } + else + { + ConStatusImg->setStyleSheet(m_red_SheetStyle); + //基础配置的按钮(3个) + ui->pushButton_2->setEnabled(false); + ui->pushButton_3->setEnabled(false); + ui->pushButton_4->setEnabled(false); + //点动的按钮(6个) + ui->DotKeepRunBtn->setEnabled(false); + ui->DotPositiveBtn->setEnabled(false); + ui->DotReverseBtn->setEnabled(false); + ui->DotSpeedUpdataBtn->setEnabled(false); + ui->DotStepUpdataBtn->setEnabled(false); + ui->DotStopRunBtn->setEnabled(false); + //基础运动的按钮(8个) + ui->RunKeepBtn->setEnabled(false); + ui->RunPlaceUpdataBtn->setEnabled(false); + ui->RunSpeedUpdataBtn->setEnabled(false); + ui->RunStartAbsolutBtn->setEnabled(false); + ui->RunStartPlaceModifyBtn->setEnabled(false); + ui->RunStartRelativeBtn->setEnabled(false); + ui->RunStopBtn->setEnabled(false); + ui->RunTimeUpdataBtn->setEnabled(false); + //多段运动的按钮(5个)+1个多选框 + ui->RunMoreAddRunBtn->setEnabled(false); + ui->RunMoreDataUpdataBtn->setEnabled(false); + ui->RunMoreKeepBtn->setEnabled(false); + ui->RunMoreModelBox->setEnabled(false); + ui->RunMoreStartBtn->setEnabled(false); + ui->RunMoreStopBtn->setEnabled(false); + } + //显示对应的从站状态 + switch (SalveStatus()) { + case 1: + { + SalveStatusShow->setText(QStringLiteral("INIT")); + break; + } + case 2: + { + SalveStatusShow->setText(QStringLiteral("PreOP")); + break; + } + case 4: + { + SalveStatusShow->setText(QStringLiteral("SafeOP")); + break; + } + case 8: + { + SalveStatusShow->setText(QStringLiteral("OP")); + break; + } + default: + SalveStatusShow->setText(QStringLiteral("其它")); + break; + } +} + + + + +/****************************Slot_ShowWin函数********************************* +Function :设置对话框为模态窗口 +Output : +*********************************************************************/ +void MotorControll::Slot_ShowWin() +{ + this->setWindowModality(Qt::ApplicationModal); +} + + +/****************************InitMonitor函数********************************* +Function :初始化监视窗口的函数 +Output : +*********************************************************************/ +void MotorControll::InitMonitor() +{ + //添加表头 + QStringList TableHeadTitle; + int TableHeadTitleLength; + TableHeadTitle.push_back(QStringLiteral("寄存器")); + TableHeadTitle.push_back(QStringLiteral("监控值")); + TableHeadTitle.push_back(QStringLiteral("备注")); + TableHeadTitleLength=TableHeadTitle.length(); + ui->DataMonitorTableWidget->setColumnCount(TableHeadTitleLength); + ui->DataMonitorTableWidget->setEditTriggers(QAbstractItemView::NoEditTriggers); + for(int i=0;iDataMonitorTableWidget->setHorizontalHeaderItem(i,TableHeadItem[i]); + } + //添加监控值初始数据 + AddMonitorVal(&MonitorSM2001,"false","SM2001","轴运动标识"); + AddMonitorVal(&MonitorSM2010,"false","SM2010","使能标识"); + AddMonitorVal(&MonitorSM2011,"false","SM2011","正向点动标识"); + AddMonitorVal(&MonitorSM2012,"false","SM2012","反向点动标识"); + + AddMonitorVal(&MonitorSD2042,"0","SD2042","点动速度"); + AddMonitorVal(&MonitorSD2040,"0","SD2040","点动步长"); + AddMonitorVal(&MonitorSD2001,"0","SD2001","运行模式"); + AddMonitorVal(&MonitorSD2010,"0","SD2010","当前运行速度"); + AddMonitorVal(&MonitorSD2008,"0","SD2008","当前位置"); + AddMonitorVal(&MonitorSD2030,"0","SD2030","设定位置"); + AddMonitorVal(&MonitorSD2032,"0","SD2032","设定速度"); + AddMonitorVal(&MonitorSD2034,"0","SD2034","设定加速时间"); + AddMonitorVal(&MonitorSD2036,"0","SD2036","设定减速时间"); +} + + + + +/****************************AddMonitorVal函数********************************* +Function :添加监视栏数据 +Output : +*********************************************************************/ + void MotorControll::AddMonitorVal(QTableWidgetItem **Item,QString Value,QString QStrName,QString QStrVal) + { + int Row=ui->DataMonitorTableWidget->rowCount(); + ui->DataMonitorTableWidget->insertRow(Row); + MonitorLogs.push_back(new QTableWidgetItem(QStrName)); + MonitorLogs.at(MonitorLogs.length()-1)->setTextAlignment(Qt::AlignCenter); + ui->DataMonitorTableWidget->setItem(Row,0,MonitorLogs.at(MonitorLogs.length()-1)); + (*Item)=new QTableWidgetItem(Value); + (*Item)->setTextAlignment(Qt::AlignCenter); + ui->DataMonitorTableWidget->setItem(Row,1,*Item); + MonitorLogs.push_back(new QTableWidgetItem(QStrVal)); + MonitorLogs.at(MonitorLogs.length()-1)->setTextAlignment(Qt::AlignCenter); + ui->DataMonitorTableWidget->setItem(Row,2,MonitorLogs.at(MonitorLogs.length()-1)); + } + + + + +/****************************SetMonitorVal函数********************************* +Function :将需要监控的对象加入到监视表中 +Output : +*********************************************************************/ +void MotorControll::SetMonitorVal(QTableWidgetItem *Item,bool Type,int addr) +{ + if(Type) + { + Item->setText(QString::number(ReadSDShort(addr))); + }else + { + if(ReadSMBool(addr)) + { + Item->setText("true"); + }else + { + Item->setText("false"); + } + } + } + + + + +/****************************Slot_Monitor函数********************************* +Function :信号,当触发该信号时,将需要监视的对象设置到监视表中 +Output : +*********************************************************************/ +void MotorControll::Slot_Monitor() +{ + SetMonitorVal(MonitorSM2001,false,2001); + SetMonitorVal(MonitorSM2010,false,2010); + SetMonitorVal(MonitorSM2011,false,2011); + SetMonitorVal(MonitorSM2012,false,2012); + + SetMonitorVal(MonitorSD2042,true,2042); + SetMonitorVal(MonitorSD2040,true,2040); + SetMonitorVal(MonitorSD2001,true,2001); + SetMonitorVal(MonitorSD2010,true,2010); + SetMonitorVal(MonitorSD2008,true,2008); + SetMonitorVal(MonitorSD2030,true,2030); + SetMonitorVal(MonitorSD2032,true,2032); + SetMonitorVal(MonitorSD2034,true,2034); + SetMonitorVal(MonitorSD2036,true,2036); +} + + + + + +/****************************通信连接按钮的槽函数函数********************************* +Function :点击通信连接按钮,会触发该槽函数 +Output : +*********************************************************************/ +void MotorControll::on_pushButton_clicked() +{ + Xcon.setWindowFlags(Qt::Dialog|Qt::WindowCloseButtonHint); + Xcon.setWindowModality(Qt::ApplicationModal); + Xcon.show(); +} + + + + +/****************************C运动相关参数配置的槽函数********************************* +Function :点击C运动参数配置按钮,会触发该槽函数 +Output : +*********************************************************************/ +void MotorControll::on_pushButton_2_clicked() +{ + Apar.setWindowFlags(Qt::Dialog|Qt::WindowCloseButtonHint|Qt::WindowMaximizeButtonHint); + Apar.setWindowModality(Qt::ApplicationModal); + Apar.show(); +} + + + + + +/****************************************************点动模块*****************************************************/ +/****************************开启电机的槽函数********************************* +Function :点击开启电机按钮,会触发该槽函数 +Output : +*********************************************************************/ +void MotorControll::on_pushButton_3_clicked() +{ + //关闭 + WriteMBool(5,false); + WriteMBool(10,false); + WriteMBool(15,false); + WriteMBool(20,false); + WriteMBool(25,false); + WriteMBool(30,false); + WriteMBool(35,false); + //使能 + WriteMBool(0,true); +} + + + +/****************************关闭电机的槽函数********************************* +Function :点击关闭电机按钮,会触发该槽函数 +Output : +*********************************************************************/ +void MotorControll::on_pushButton_4_clicked() +{ + //关闭 + WriteMBool(5,false); + WriteMBool(10,false); + WriteMBool(15,false); + WriteMBool(20,false); + WriteMBool(25,false); + WriteMBool(30,false); + WriteMBool(35,false); + WriteMBool(0,false); +} + + + +/****************************更新步长的槽函数********************************* +Function :点击更新步长按钮,会触发该槽函数 +Output : +*********************************************************************/ +void MotorControll::on_DotStepUpdataBtn_clicked() +{ + short value=ui->DotStepLedit->text().toShort(); + WriteDShort(0,value); +} + + + +/****************************更新点动速度的槽函数********************************* +Function :点击更新点动速度按钮,会触发该槽函数 +Output : +*********************************************************************/ +void MotorControll::on_DotSpeedUpdataBtn_clicked() +{ + short value=ui->DotSpeedLedit->text().toShort(); + WriteDShort(50,value); +} + + + +/****************************正向点动的槽函数********************************* +Function :点击正向点动按钮,会触发该槽函数 +Output : +*********************************************************************/ +void MotorControll::on_DotPositiveBtn_clicked() +{ + WriteMBool(10,false); + WriteMBool(5,true); +} + + + +/****************************反向点动的槽函数********************************* +Function :点击反向点动按钮,会触发该槽函数 +Output : +*********************************************************************/ +void MotorControll::on_DotReverseBtn_clicked() +{ + WriteMBool(5,false); + WriteMBool(10,true); +} + + + +/****************************停止运动的槽函数********************************* +Function :点击停止运动按钮,会触发该槽函数 +Output : +*********************************************************************/ +void MotorControll::on_DotStopRunBtn_clicked() +{ + WriteMBool(15,true); +} + + + +/****************************继续运动的槽函数********************************* +Function :点击继续运动按钮,会触发该槽函数 +Output : +*********************************************************************/ +void MotorControll::on_DotKeepRunBtn_clicked() +{ + WriteMBool(15,false); +} + + + + + +/****************************************************基础运动模块*****************************************************/ +/****************************更新位置的槽函数********************************* +Function :点击更新位置按钮,会触发该槽函数 +Output : +*********************************************************************/ +void MotorControll::on_RunPlaceUpdataBtn_clicked() +{ + int value=ui->RunPlaceLedit->text().toInt(); + WriteDInt(100,value); +} + + + +/****************************更新速度的槽函数********************************* +Function :点击更新速度按钮,会触发该槽函数 +Output : +*********************************************************************/ +void MotorControll::on_RunSpeedUpdataBtn_clicked() +{ + int value=ui->RunSpeedLedit->text().toInt(); + WriteDInt(150,value); +} + + + + + +/****************************更新时间的槽函数********************************* +Function :点击更新时间按钮,会触发该槽函数 +Output : +*********************************************************************/ +void MotorControll::on_RunTimeUpdataBtn_clicked() +{ + int value=ui->RunTimeLedit->text().toInt(); + WriteDInt(200,value); +} + + + + +/****************************修改位置的槽函数********************************* +Function :点击修改位置按钮,会触发该槽函数 +Output : +*********************************************************************/ +void MotorControll::on_RunStartPlaceModifyBtn_clicked() +{ + int value=ui->RunStartPlaceLedit->text().toInt(); + WriteDInt(450,value); + WriteMBool(40,true); + WriteMBool(40,false); +} + + + + +/****************************绝对运动的槽函数********************************* +Function :点击绝对运动按钮,会触发该槽函数 +Output : +*********************************************************************/ +void MotorControll::on_RunStartAbsolutBtn_clicked() +{ + WriteMBool(30,true); + WriteMBool(30,false); +} + + + +/****************************相对运动的槽函数********************************* +Function :点击相对运动按钮,会触发该槽函数 +Output : +*********************************************************************/ +void MotorControll::on_RunStartRelativeBtn_clicked() +{ + WriteMBool(25,true); + WriteMBool(25,false); +} + + + +/****************************停止运动的槽函数********************************* +Function :点击停止运动按钮,会触发该槽函数 +Output : +*********************************************************************/ +void MotorControll::on_RunStopBtn_clicked() +{ + WriteMBool(20,false); + WriteMBool(15,true); +} + + +/****************************继续运动的槽函数********************************* +Function :点击继续运动按钮,会触发该槽函数 +Output : +*********************************************************************/ +void MotorControll::on_RunKeepBtn_clicked() +{ + WriteMBool(15,false); + WriteMBool(20,true); +} + + + + +/****************************************************多段运动模块*****************************************************/ +/****************************添加运动的槽函数********************************* +Function :点击添加运动按钮,会触发该槽函数 +Output : +*********************************************************************/ +void MotorControll::on_RunMoreAddRunBtn_clicked() +{ + Movement.setWindowFlags(Qt::Dialog|Qt::WindowCloseButtonHint|Qt::WindowMaximizeButtonHint); + Movement.setWindowModality(Qt::ApplicationModal); + Movement.show(); +} + + +/****************************更新数据的槽函数********************************* +Function :点击更新数据按钮,会触发该槽函数 +Output : +*********************************************************************/ +void MotorControll::on_RunMoreDataUpdataBtn_clicked() +{ + int AddValue=ui->RunMoreAddSpeedTimeLedit->text().toInt(); + int SubValue=ui->RunMoreSubSpeedTimeLedit->text().toInt(); + int RunModel=ui->RunMoreModelBox->currentIndex(); + + WriteDInt(400,RunModel); + WriteDInt(404,AddValue); + WriteDInt(406,SubValue); +} + + +/****************************启动运动的槽函数********************************* +Function :点击启动运动按钮,会触发该槽函数 +Output : +*********************************************************************/ +void MotorControll::on_RunMoreStartBtn_clicked() +{ + WriteMBool(35,true); + WriteMBool(35,false); +} + + + +/****************************closeEvent函数********************************* +Function :窗口关闭事件函数 +Output : +*********************************************************************/ +void MotorControll::closeEvent(QCloseEvent *event) +{ + QMessageBox::StandardButton Value=QMessageBox::question(this,QStringLiteral("退出提示"),QStringLiteral("确认退出程序?")); + if(Value==QMessageBox::Yes) + { + emit CloseWin(); + event->accept(); + }else + { + event->ignore(); + } +} diff --git a/TraimCamp_MotorControl/motorcontroll.h b/TraimCamp_MotorControl/motorcontroll.h new file mode 100644 index 0000000..379944e --- /dev/null +++ b/TraimCamp_MotorControl/motorcontroll.h @@ -0,0 +1,161 @@ +/******************************motorcontroll.h文件说明********************************** +* Descript :头文件,包含主窗口的头文件引用,以及宏定义 +* Author :caitiancheng +* Date :2021_12_19 +*******************************************************************************/ +#ifndef MOTORCONTROLL_H +#define MOTORCONTROLL_H + + +/***********************************头文件****************************************/ +#include +#include +#include "XnetConnect.h" +#include "Addpar.h" +#include "moretypemovement.h" +#include +#include +#include + + + +/***********************************类的声明和继承****************************************/ +namespace Ui { +class MotorControll; +} + +class MotorControll : public QMainWindow,public Base +{ + Q_OBJECT + +public: + explicit MotorControll(QWidget *parent = 0); + ~MotorControll(); + +signals: + void CloseWin(); + +protected: + void closeEvent(QCloseEvent *event=NULL); + +private slots: + + void Slot_Status(); + void Slot_ShowWin(); + void Slot_Monitor(); + + void on_pushButton_clicked(); + + void on_pushButton_2_clicked(); + + void on_pushButton_3_clicked(); + + void on_pushButton_4_clicked(); + + void on_DotStepUpdataBtn_clicked(); + + void on_DotSpeedUpdataBtn_clicked(); + + void on_DotPositiveBtn_clicked(); + + void on_DotReverseBtn_clicked(); + + void on_DotStopRunBtn_clicked(); + + void on_DotKeepRunBtn_clicked(); + + void on_RunPlaceUpdataBtn_clicked(); + + void on_RunSpeedUpdataBtn_clicked(); + + void on_RunTimeUpdataBtn_clicked(); + + void on_RunStartPlaceModifyBtn_clicked(); + + void on_RunStartAbsolutBtn_clicked(); + + void on_RunStartRelativeBtn_clicked(); + + void on_RunStopBtn_clicked(); + + void on_RunKeepBtn_clicked(); + + void on_RunMoreAddRunBtn_clicked(); + + void on_RunMoreDataUpdataBtn_clicked(); + + void on_RunMoreStartBtn_clicked(); + +private: + Ui::MotorControll *ui; + XnetConnect Xcon; + AddPar Apar; + MoreTypeMovement Movement; + + //定义时间显示定时器 + QTimer *TimeShow; + //定义监视栏定时器 + QTimer *Monitor; + + //监视栏初始化函数 + void InitMonitor(); + + //控件连接的信号和槽函数 + void InitConnect(); + + //状态栏界面设置初始化函数 + void InitBarStatus(); + + + //声明表格控件对象 + QList TableHeadItem; + + //状态栏 + //定义连接状态定时器 + QTimer *StatuTimer; + const QString m_red_SheetStyle = "min-width: 16px; min-height: 16px;max-width:16px; max-height: 16px;border-radius: 8px; border:1px solid black;background:red"; + const QString m_green_SheetStyle = "min-width: 16px; min-height: 16px;max-width:16px; max-height: 16px;border-radius: 8px; border:1px solid black;background:green"; + QLabel *ConStatusText; + QLabel *ConStatusImg; + QLabel *SalveStatusText; + QLabel *SalveStatusShow; + + + + //监控的值对象 + //用于记录一些不需要操作的数据,但需要释放 + QList MonitorLogs; + //运动标识 + QTableWidgetItem *MonitorSM2001; + //使能标识 + QTableWidgetItem *MonitorSM2010; + //正向点动标识 + QTableWidgetItem *MonitorSM2011; + //方向点动标识 + QTableWidgetItem *MonitorSM2012; + //点动速度 + QTableWidgetItem *MonitorSD2042; + //点动步长 + QTableWidgetItem *MonitorSD2040; + //运行模式 + QTableWidgetItem *MonitorSD2001; + //监控速度 + QTableWidgetItem *MonitorSD2010; + //抽位置 + QTableWidgetItem *MonitorSD2008; + //位置设定 + QTableWidgetItem *MonitorSD2030; + //速度设定 + QTableWidgetItem *MonitorSD2032; + //加速时间设定 + QTableWidgetItem *MonitorSD2034; + //减速时间设定 + QTableWidgetItem *MonitorSD2036; + //添加监控值函数 + void AddMonitorVal(QTableWidgetItem **Item,QString Value,QString QStrName,QString QStrVal); + //加入监控槽 + void SetMonitorVal(QTableWidgetItem *Item,bool Type,int addr); + +}; + +#endif // MOTORCONTROLL_H diff --git a/TraimCamp_MotorControl/motorcontroll.ui b/TraimCamp_MotorControl/motorcontroll.ui new file mode 100644 index 0000000..98f1dea --- /dev/null +++ b/TraimCamp_MotorControl/motorcontroll.ui @@ -0,0 +1,789 @@ + + + MotorControll + + + + 0 + 0 + 965 + 867 + + + + MotorControll + + + + + + 10 + 10 + 361 + 161 + + + + 基础配置 + + + + + 10 + 30 + 111 + 41 + + + + 通信连接 + + + + + + 230 + 30 + 111 + 41 + + + + C运动配置 + + + + + + 10 + 110 + 111 + 41 + + + + 开启电机 + + + + + + 230 + 110 + 111 + 41 + + + + 关闭电机 + + + + + + + 10 + 175 + 421 + 261 + + + + 点动 + + + + + 10 + 140 + 111 + 41 + + + + 正向点动 + + + + + + 300 + 20 + 111 + 41 + + + + 更新步长 + + + + + + 300 + 80 + 111 + 41 + + + + 更新速度 + + + + + + 160 + 140 + 111 + 41 + + + + 反向点动 + + + + + + 160 + 200 + 111 + 41 + + + + 继续运动 + + + + + + 10 + 200 + 111 + 41 + + + + 停止运动 + + + + + + 10 + 30 + 72 + 15 + + + + 点动步长 + + + + + + 10 + 90 + 70 + 15 + + + + 点动速度 + + + + + + 90 + 30 + 131 + 21 + + + + + + + 90 + 90 + 131 + 21 + + + + + + + 240 + 30 + 31 + 16 + + + + 脉冲 + + + + + + 240 + 90 + 72 + 15 + + + + 脉冲/秒 + + + DotPositiveBtn + DotStepUpdataBtn + DotSpeedUpdataBtn + DotReverseBtn + DotKeepRunBtn + DotStopRunBtn + label + label_2 + DotSpeedLedit + label_3 + label_4 + DotStepLedit + + + + + 480 + 10 + 481 + 434 + + + + + 0 + 0 + + + + + 300 + 0 + + + + + 1000 + 16777215 + + + + 监控 + + + + + + Qt::ElideMiddle + + + false + + + true + + + + + + + + + 10 + 480 + 441 + 341 + + + + 基础运动 + + + + + 10 + 80 + 60 + 28 + + + + 运行速度 + + + + + + 10 + 30 + 60 + 28 + + + + 目标位置 + + + + + + 10 + 130 + 60 + 28 + + + + 加速时间 + + + + + + 10 + 180 + 60 + 28 + + + + 位置修改 + + + + + + 90 + 80 + 140 + 25 + + + + 0 + + + Qt::AlignCenter + + + + + + 90 + 30 + 140 + 25 + + + + 10000 + + + Qt::AlignCenter + + + + + + 90 + 130 + 140 + 25 + + + + 0 + + + Qt::AlignCenter + + + + + + 90 + 180 + 140 + 25 + + + + 0 + + + Qt::AlignCenter + + + + + + 250 + 30 + 31 + 16 + + + + 脉冲 + + + + + + 250 + 80 + 72 + 15 + + + + 脉冲/秒 + + + + + + 250 + 130 + 72 + 15 + + + + 毫秒 + + + + + + 250 + 180 + 31 + 16 + + + + 脉冲 + + + + + + 310 + 15 + 111 + 41 + + + + 更新位置 + + + + + + 310 + 70 + 111 + 41 + + + + 更新速度 + + + + + + 310 + 120 + 111 + 41 + + + + 更新时间 + + + + + + 310 + 170 + 111 + 41 + + + + 修改位置 + + + + + + 10 + 230 + 111 + 41 + + + + 绝对运动 + + + + + + 10 + 280 + 111 + 41 + + + + 相对运动 + + + + + + 210 + 230 + 111 + 41 + + + + 停止运动 + + + + + + 210 + 280 + 111 + 41 + + + + 继续运动 + + + + + + + 480 + 480 + 441 + 341 + + + + 多段运动 + + + + + 20 + 34 + 60 + 28 + + + + 运动模式 + + + + + + 100 + 34 + 111 + 41 + + + + + 相对运动 + + + + + 绝对运动 + + + + + + + 20 + 100 + 72 + 15 + + + + 加速时间 + + + + + + 100 + 100 + 111 + 21 + + + + 1000 + + + Qt::AlignCenter + + + + + + 220 + 100 + 31 + 16 + + + + 毫秒 + + + + + + 20 + 160 + 72 + 15 + + + + 减速时间 + + + + + + 100 + 160 + 111 + 21 + + + + 1000 + + + Qt::AlignCenter + + + + + + 220 + 160 + 31 + 15 + + + + 毫秒 + + + + + + 290 + 110 + 111 + 41 + + + + 更新数据 + + + + + + 290 + 34 + 111 + 41 + + + + 添加运动 + + + + + + 20 + 250 + 111 + 41 + + + + 启动运动 + + + + + + 160 + 250 + 111 + 41 + + + + 停止运动 + + + + + + 290 + 250 + 111 + 41 + + + + 继续运动 + + + + + + + + + + diff --git a/TraimCamp_MotorControl/xnet/include/x_net.h b/TraimCamp_MotorControl/xnet/include/x_net.h new file mode 100644 index 0000000..6e27fd5 --- /dev/null +++ b/TraimCamp_MotorControl/xnet/include/x_net.h @@ -0,0 +1,90 @@ +#ifndef X_NET_H +#define X_NET_H + +//#include "x_net_global.h" +#include +#include +#include +using namespace std; +#include "XNetClient.h" + +#define XNet_X 1 +#define XNet_Y 2 +#define XNet_M 3 +#define XNet_S 4 +#define XNet_T 5 +#define XNet_C 6 +#define XNet_ET 7 +#define XNet_HM 8 +#define XNet_HS 9 +#define XNet_HT 10 +#define XNet_HC 11 +#define XNet_HSC 12 +#define XNet_SM 13 +#define XNet_SSM 14 +#define XNet_TG 15 +#define XNet_HTG 16 +#define XNet_PF 17 +#define XNet_SEM 18 +#define XNet_STG 19 //add 2016.4.8 +#define XNet_HSTG 20 + +#define XNet_D 128 +#define XNet_TD 129 +#define XNet_CD 130 +#define XNet_SD 131 +#define XNet_ETD 133 +#define XNet_ID 134 +#define XNet_QD 135 +#define XNet_HD 136 +#define XNet_HTD 137 +#define XNet_HCD 138 +#define XNet_HSCD 139 +#define XNet_HSD 140 +#define XNet_FD 141 +#define XNet_SFD 142 +#define XNet_SSFD 143 +#define XNet_SSD 144 +#define XNet_FS 145 + +#define FLAG 200 +#define LW 201 +#define LB 202 +#define BARCODE "BARCODE" + +//为了和将来用到的程序中公用一个头文件,创建dll时用到的是__declspec(dllexport),而使用dll时用到__declspec(dllimport),完全可以各自写一下 +#define X_NETSHARED_EXPORT __declspec(dllexport) +#ifdef X_NETSHARED_EXPORT +#else +#define X_NETSHARED_EXPORT __declspec(dllimport) +#endif + + +//static XINJE::XNetClient device; + +extern "C" X_NETSHARED_EXPORT void SetXNetClient(char *); + +extern "C" X_NETSHARED_EXPORT void CloseXNetClient(); + +extern "C" X_NETSHARED_EXPORT void Write_Short(unsigned char regType, int start, int count,short value); + +extern "C" X_NETSHARED_EXPORT void Write_Int(unsigned char regType, int start, int count, int value); + +extern "C" X_NETSHARED_EXPORT void Write_Float(unsigned char regType, int start, int count, float value); + +extern "C" X_NETSHARED_EXPORT void Write_Double(unsigned char regType, int start, int count, double value); + +extern "C" X_NETSHARED_EXPORT void Write_Bool(unsigned char regType, int start, int count, bool value); + +extern "C" X_NETSHARED_EXPORT void Read_Short(unsigned char regType, int start, int count, short* value); + +extern "C" X_NETSHARED_EXPORT void Read_Int(unsigned char regType, int start, int count, int* value); + +extern "C" X_NETSHARED_EXPORT void Read_Float(unsigned char regType, int start, int count, float* value); + +extern "C" X_NETSHARED_EXPORT void Read_Double(unsigned char regType, int start, int count, double* value); + +extern "C" X_NETSHARED_EXPORT void Read_Bool(unsigned char regType, int start, int count,bool* value); + + +#endif // X_NET_H diff --git a/TraimCamp_MotorControl/xnet/include/xnetclient.h b/TraimCamp_MotorControl/xnet/include/xnetclient.h new file mode 100644 index 0000000..b27a2d9 --- /dev/null +++ b/TraimCamp_MotorControl/xnet/include/xnetclient.h @@ -0,0 +1,132 @@ +#pragma once + +namespace XINJE +{ + //类型定义 + typedef unsigned char Byte; + typedef unsigned short UInt16; + + //XNet服务端口 + #define ServicePort 2323 + #define ServiceIp "127.0.0.1" + + //操作结果(仅告知操作是否成功) + #define XNetCommResult int + #define XNetCommResult_Err -1 + #define XNetCommResult_Success 0 + + //XNet设备类型 + typedef enum + { + PLC_XD = 0, + PLC_XE, + TouchWin, + WBox, + _4GBox, + COBox, + ABox + }XNetDevice; + + //线圈类型 + typedef enum + { + XNet_X = 1, + XNet_Y = 2, + XNet_M = 3, + XNet_S = 4, + XNet_T = 5, + XNet_C = 6, + XNet_ET = 7, + XNet_HM = 8, + XNet_HS = 9, + XNet_HT = 10, + XNet_HC = 11, + XNet_HSC = 12, + XNet_SM = 13, + XNet_SSM = 14, + XNet_TG = 15, + XNet_HTG = 16, + XNet_PF = 17, + XNet_SEM = 18, + XNet_STG = 19,//add 2016.4.8 + XNet_HSTG = 20, + }CoilType; + + //寄存器类型 + typedef enum + { + XNet_D = 128, + XNet_TD = 129, + XNet_CD = 130, + XNet_SD = 131, + XNet_ETD = 133, + XNet_ID = 134, + XNet_QD = 135, + XNet_HD = 136, + XNet_HTD = 137, + XNet_HCD = 138, + XNet_HSCD = 139, + XNet_HSD = 140, + XNet_FD = 141, + XNet_SFD = 142, + XNet_SSFD = 143, + XNet_SSD = 144, + XNet_FS = 145, + }RegType; + + //通信对象 + //每一个和每一个设备的连接都建议创建一个此对象,以避免不必要的线程同步 + class XNetClient + { + private: + int Sock; + unsigned short Net; + unsigned short Station; + unsigned char Com; + Byte Type; + Byte Serial; + Byte Model; + void LibXNetRegsToBuf(short* _regs, unsigned char* _buf, int _num); + void LibXNetBufToRegs(unsigned char* _buf, unsigned short* _regs, int _num); + void LibXNetCoilsToBuf(short* _coils, unsigned char* _buf, int _num); + void LibXNetBufToCoils(char* _buf, short* _coils, Byte _startBit, int _num); + unsigned short Byte2Word(Byte high, Byte low); + public: + //初始化WindowsSocket +// XNetClient(char *ttyNo); + static XNetCommResult WinSockInit(); + + //启动XNet服务 + static XNetCommResult StartXNetWindows(); + static XNetCommResult CloseXNetWindows(); + + //和XNet服务建立连接 + XNetCommResult XNetCommunication(); + + //打开串口(网口也需配置一次,网口_com填129) + XNetCommResult SetComPort(Byte _com); + + //关闭串口 + XNetCommResult ReleaseComPort(Byte _com); + + //直接指定设备地址 + void AdderLink(const char* _ipStr); + void AdderLink(UInt16 _net, UInt16 _station); + + //对指定端口或网口查找设备,使本对象自动获取到设备地址 + XNetCommResult FindDevice(Byte _comPort, Byte _type, Byte _serial, Byte _model); + XNetCommResult FindDevice(Byte _comPort, XNetDevice _dev); + XNetCommResult FindDevice(Byte _comPort, const char* _id); + + //读写寄存器(用户提供一个short数组缓存,用于传入或获取XNet16位寄存器的值) + XNetCommResult WriteRegs(Byte _regType, int _offSet, int _num, short* _writeRegs); + XNetCommResult ReadRegs(Byte _regType, int _offSet, int _num, short* _readRegs); + + //读写线圈(用户提供一个short数组缓存,用于传入或获取XNet线圈状态,0为off,1为on) + XNetCommResult WriteCoils(Byte _coilType, int _offSet, int _num, short* _writeCoils); + XNetCommResult ReadCoils(Byte _coilType, int _offSet, int _num, short* _readCoil); + +// ~XNetClient(); + }; +} + diff --git a/TraimCamp_MotorControl/xnetconnect.cpp b/TraimCamp_MotorControl/xnetconnect.cpp new file mode 100644 index 0000000..8ac8b60 --- /dev/null +++ b/TraimCamp_MotorControl/xnetconnect.cpp @@ -0,0 +1,78 @@ +/******************************xnetconnect.cpp文件说明********************************** +* Descript :源文件,包含通信配置窗口的函数实现 +* Author :caitiancheng +* Date :2021_12_19 +*******************************************************************************/ + + +/***********************************头文件****************************************/ +#include "xnetconnect.h" +#include "ui_xnetconnect.h" +#include "Base.h" +#include + + +/***********************************类的声明和继承****************************************/ +XnetConnect::XnetConnect(QWidget *parent) : + QWidget(parent), + ui(new Ui::XnetConnect) +{ + ui->setupUi(this); + //禁止修改窗体大小 + setFixedSize(this->width(), this->height()); + ServiceFlag=false; + //设置窗口标题 + setWindowTitle("通信连接"); +} + + +/****************************closeEvent函数********************************* +Function :窗口关闭事件函数 +Output : +*********************************************************************/ +void XnetConnect::closeEvent(QCloseEvent *event) +{ + emit CloseWin(); + event->accept(); +} + + +/****************************启动服务槽函数函数********************************* +Function :点击启动服务会触发该槽函数 +Output : +*********************************************************************/ +void XnetConnect::on_CtrlServiceBtn_clicked() +{ + Base TempBase; + if(!ServiceFlag) + { + QString NeetSetIp=ui->NeedIPEdit->text(); + SetXNetClient(NeetSetIp.toLatin1().data()); + if(TempBase.ConStatus()) + { + ServiceFlag=true; + ui->CtrlServiceBtn->setText(QStringLiteral("关闭服务")); + QMessageBox::information(this,QStringLiteral("启动提示"),QStringLiteral("通信成功")); + + }else + { + QMessageBox::information(this,QStringLiteral("启动提示"),QStringLiteral("通信失败")); + } + + }else + { + CloseXNetClient(); + ServiceFlag=false; + ui->CtrlServiceBtn->setText(QStringLiteral("开启服务")); + QMessageBox::information(this,QStringLiteral("关闭提示"),QStringLiteral("关闭成功")); + } +} + + + +/******************************************************析构函数*****************************************************/ +XnetConnect::~XnetConnect() +{ + delete ui; +} + diff --git a/TraimCamp_MotorControl/xnetconnect.h b/TraimCamp_MotorControl/xnetconnect.h new file mode 100644 index 0000000..d8d47c5 --- /dev/null +++ b/TraimCamp_MotorControl/xnetconnect.h @@ -0,0 +1,44 @@ +/******************************xnetconnect.h文件说明********************************** +* Descript :头文件,包含通信配置窗口的头文件引用,以及宏定义 +* Author :caitiancheng +* Date :2021_12_19 +*******************************************************************************/ +#ifndef XNETCONNECT_H +#define XNETCONNECT_H + + + +/***********************************头文件****************************************/ +#include +#include + + + +/***********************************类的声明和继承****************************************/ +namespace Ui { +class XnetConnect; +} + +class XnetConnect : public QWidget +{ + Q_OBJECT + +public: + explicit XnetConnect(QWidget *parent = 0); + ~XnetConnect(); + +signals: + void CloseWin(); +protected: + void closeEvent(QCloseEvent *event=NULL); +private slots: + + void on_CtrlServiceBtn_clicked(); + + +private: + Ui::XnetConnect *ui; + bool ServiceFlag; +}; + +#endif // XNETCONNECT_H diff --git a/TraimCamp_MotorControl/xnetconnect.ui b/TraimCamp_MotorControl/xnetconnect.ui new file mode 100644 index 0000000..b2665c5 --- /dev/null +++ b/TraimCamp_MotorControl/xnetconnect.ui @@ -0,0 +1,66 @@ + + + XnetConnect + + + true + + + + 0 + 0 + 371 + 81 + + + + Form + + + + + 260 + 30 + 75 + 23 + + + + 启动服务 + + + + + + 20 + 30 + 181 + 20 + + + + + 0 + 0 + + + + + + + 192.168.6.6 + + + Qt::AlignCenter + + + 请输入PLC的IP! + + + false + + + + + +