| @@ -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 | |||||
| @@ -0,0 +1,312 @@ | |||||
| /******************************addpar.cpp文件说明********************************** | |||||
| * Descript :源文件,包含C运动参数配置窗口的函数实现 | |||||
| * Author :caitiancheng | |||||
| * Date :2021_12_19 | |||||
| *******************************************************************************/ | |||||
| /***********************************头文件****************************************/ | |||||
| #include "addpar.h" | |||||
| #include "ui_addpar.h" | |||||
| #include <QCloseEvent> | |||||
| #include <QMessageBox> | |||||
| /***********************************类的声明和继承****************************************/ | |||||
| 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<QStandardItem *> *Item) | |||||
| { | |||||
| for(int i=0;i<Item->length();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;i<Item->rowCount();++i) | |||||
| { | |||||
| QStandardItem* ItemChild = Item->child(i); | |||||
| ItemChild->setCheckState(status); | |||||
| } | |||||
| } | |||||
| } | |||||
| /****************************NewChildLine函数********************************* | |||||
| Function :新子行建立 | |||||
| Output : | |||||
| *********************************************************************/ | |||||
| void AddPar::NewChildLine(QStandardItem *Item,QList<QStandardItem *> *ItemList,QStringList Data) | |||||
| { | |||||
| int RowCount; | |||||
| ItemList->clear(); | |||||
| for(int i=0;i<Data.length();i++) | |||||
| { | |||||
| ItemList->push_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;i<Data.length();i++) | |||||
| { | |||||
| Item->setChild(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; | |||||
| } | |||||
| @@ -0,0 +1,71 @@ | |||||
| /******************************addpar.h文件说明********************************** | |||||
| * Descript :头文件,包含C运动参数配置窗口的头文件引用,以及宏定义 | |||||
| * Author :caitiancheng | |||||
| * Date :2021_12_19 | |||||
| *******************************************************************************/ | |||||
| #ifndef ADDPAR_H | |||||
| #define ADDPAR_H | |||||
| /***********************************头文件****************************************/ | |||||
| #include <QWidget> | |||||
| #include <QStandardItemModel> | |||||
| #include <Base.h> | |||||
| /***********************************类的声明和继承****************************************/ | |||||
| 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<QStandardItem *> BaseOtp; | |||||
| //移动量 | |||||
| QList<QStandardItem *> BaseMnum; | |||||
| //运动限制 | |||||
| QStandardItem *RunCtrlClass; | |||||
| //最高速度 | |||||
| QList<QStandardItem *> RunSpeed; | |||||
| //最快加速度 | |||||
| QList<QStandardItem *> RunAddSpeed; | |||||
| //最快减速度 | |||||
| QList<QStandardItem *> RunSubSpeed; | |||||
| int DownLoadData(QStandardItem *Item,QString Name,int Addr,int Row); | |||||
| void Updata(); | |||||
| void NewChildLine(QStandardItem *Item,QList<QStandardItem *> *ItemList,QStringList Data); | |||||
| void ReadArgRunCrl(QStandardItem *Item,int Addr,int Row); | |||||
| void FreeQList(QList<QStandardItem *> *Item); | |||||
| }; | |||||
| #endif // ADDPAR_H | |||||
| @@ -0,0 +1,71 @@ | |||||
| <?xml version="1.0" encoding="UTF-8"?> | |||||
| <ui version="4.0"> | |||||
| <class>AddPar</class> | |||||
| <widget class="QWidget" name="AddPar"> | |||||
| <property name="geometry"> | |||||
| <rect> | |||||
| <x>0</x> | |||||
| <y>0</y> | |||||
| <width>535</width> | |||||
| <height>300</height> | |||||
| </rect> | |||||
| </property> | |||||
| <property name="windowTitle"> | |||||
| <string>Form</string> | |||||
| </property> | |||||
| <widget class="QTreeView" name="ArgDataTreeView"> | |||||
| <property name="geometry"> | |||||
| <rect> | |||||
| <x>11</x> | |||||
| <y>11</y> | |||||
| <width>513</width> | |||||
| <height>241</height> | |||||
| </rect> | |||||
| </property> | |||||
| <attribute name="headerCascadingSectionResizes"> | |||||
| <bool>true</bool> | |||||
| </attribute> | |||||
| </widget> | |||||
| <widget class="QWidget" name="layoutWidget"> | |||||
| <property name="geometry"> | |||||
| <rect> | |||||
| <x>10</x> | |||||
| <y>260</y> | |||||
| <width>511</width> | |||||
| <height>30</height> | |||||
| </rect> | |||||
| </property> | |||||
| <layout class="QGridLayout" name="gridLayout"> | |||||
| <item row="0" column="0"> | |||||
| <spacer name="horizontalSpacer"> | |||||
| <property name="orientation"> | |||||
| <enum>Qt::Horizontal</enum> | |||||
| </property> | |||||
| <property name="sizeHint" stdset="0"> | |||||
| <size> | |||||
| <width>40</width> | |||||
| <height>20</height> | |||||
| </size> | |||||
| </property> | |||||
| </spacer> | |||||
| </item> | |||||
| <item row="0" column="2"> | |||||
| <widget class="QPushButton" name="DownloadBtn"> | |||||
| <property name="text"> | |||||
| <string>下载参数</string> | |||||
| </property> | |||||
| </widget> | |||||
| </item> | |||||
| <item row="0" column="1"> | |||||
| <widget class="QPushButton" name="UploadBtn"> | |||||
| <property name="text"> | |||||
| <string>上载参数</string> | |||||
| </property> | |||||
| </widget> | |||||
| </item> | |||||
| </layout> | |||||
| </widget> | |||||
| </widget> | |||||
| <resources/> | |||||
| <connections/> | |||||
| </ui> | |||||
| @@ -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; | |||||
| } | |||||
| @@ -0,0 +1,45 @@ | |||||
| /******************************base.h文件说明********************************** | |||||
| * Descript :头文件,包含项目需要调用的Xnet函数的头文件引用,以及宏定义 | |||||
| * Author :caitiancheng | |||||
| * Date :2021_12_19 | |||||
| *******************************************************************************/ | |||||
| #ifndef BASE_H | |||||
| #define BASE_H | |||||
| /***********************************头文件****************************************/ | |||||
| #include <x_net.h> | |||||
| #include <QString> | |||||
| /***********************************类的声明和继承****************************************/ | |||||
| 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 | |||||
| @@ -0,0 +1,22 @@ | |||||
| /******************************main.cpp文件说明********************************** | |||||
| * Descript :.cpp文件,包含main函数的程序入口 | |||||
| * Author :caitiancheng | |||||
| * Date :2021_12_18 | |||||
| *******************************************************************************/ | |||||
| /***********************************头文件****************************************/ | |||||
| #include "motorcontroll.h" | |||||
| #include <QApplication> | |||||
| /***********************************主函数****************************************/ | |||||
| int main(int argc, char *argv[]) | |||||
| { | |||||
| QApplication a(argc, argv); | |||||
| MotorControll w; | |||||
| w.show(); | |||||
| return a.exec(); | |||||
| } | |||||
| @@ -0,0 +1,270 @@ | |||||
| /******************************moretypemovement.cpp文件说明********************************** | |||||
| * Descript :.源文件,包含多段运动添加数据窗口的函数实现 | |||||
| * Author :caitiancheng | |||||
| * Date :2021_12_18 | |||||
| *******************************************************************************/ | |||||
| /******************************************头文件***********************************************/ | |||||
| #include "moretypemovement.h" | |||||
| #include "ui_moretypemovement.h" | |||||
| #include <QMessageBox> | |||||
| #include <QCloseEvent> | |||||
| /***********************************类的声明和继承****************************************/ | |||||
| 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;i<TableHeadTitleLength;i++) | |||||
| { | |||||
| TableHeadItem.push_back(new QTableWidgetItem(TableHeadTitle[i])); | |||||
| ui->RunDataTWidget->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; i<ColumnCountLog; i++){ | |||||
| QString TableItemValue = ui->RunDataTWidget->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=AtRow<ToRow?true:false; | |||||
| if(direction&&ToRow>RowSum-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<Slen;i++) | |||||
| { | |||||
| if(Str.at(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;i<Row;i++) | |||||
| { | |||||
| PlaceTemp=ui->RunDataTWidget->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("段")); | |||||
| } | |||||
| @@ -0,0 +1,59 @@ | |||||
| /******************************moretypemovement.h文件说明********************************** | |||||
| * Descript :头文件,包含多段运动添加数据窗口的函数声明、头文件引用,以及宏定义 | |||||
| * Author :caitiancheng | |||||
| * Date :2021_12_19 | |||||
| *******************************************************************************/ | |||||
| #ifndef MORETYPEMOVEMENT_H | |||||
| #define MORETYPEMOVEMENT_H | |||||
| /***********************************头文件****************************************/ | |||||
| #include <QWidget> | |||||
| #include<QTableWidgetItem> | |||||
| #include<QMessageBox> | |||||
| #include<Base.h> | |||||
| /***********************************类的声明和继承****************************************/ | |||||
| 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<QTableWidgetItem *> 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 | |||||
| @@ -0,0 +1,142 @@ | |||||
| <?xml version="1.0" encoding="UTF-8"?> | |||||
| <ui version="4.0"> | |||||
| <class>MoreTypeMovement</class> | |||||
| <widget class="QWidget" name="MoreTypeMovement"> | |||||
| <property name="geometry"> | |||||
| <rect> | |||||
| <x>0</x> | |||||
| <y>0</y> | |||||
| <width>662</width> | |||||
| <height>367</height> | |||||
| </rect> | |||||
| </property> | |||||
| <property name="windowTitle"> | |||||
| <string>Form</string> | |||||
| </property> | |||||
| <widget class="QTableWidget" name="RunDataTWidget"> | |||||
| <property name="geometry"> | |||||
| <rect> | |||||
| <x>30</x> | |||||
| <y>10</y> | |||||
| <width>598</width> | |||||
| <height>290</height> | |||||
| </rect> | |||||
| </property> | |||||
| <property name="showGrid"> | |||||
| <bool>true</bool> | |||||
| </property> | |||||
| <property name="sortingEnabled"> | |||||
| <bool>false</bool> | |||||
| </property> | |||||
| <property name="wordWrap"> | |||||
| <bool>true</bool> | |||||
| </property> | |||||
| <property name="cornerButtonEnabled"> | |||||
| <bool>true</bool> | |||||
| </property> | |||||
| <attribute name="horizontalHeaderVisible"> | |||||
| <bool>true</bool> | |||||
| </attribute> | |||||
| <attribute name="horizontalHeaderCascadingSectionResizes"> | |||||
| <bool>true</bool> | |||||
| </attribute> | |||||
| <attribute name="horizontalHeaderDefaultSectionSize"> | |||||
| <number>131</number> | |||||
| </attribute> | |||||
| <attribute name="horizontalHeaderHighlightSections"> | |||||
| <bool>false</bool> | |||||
| </attribute> | |||||
| <attribute name="horizontalHeaderMinimumSectionSize"> | |||||
| <number>30</number> | |||||
| </attribute> | |||||
| <attribute name="horizontalHeaderShowSortIndicator" stdset="0"> | |||||
| <bool>false</bool> | |||||
| </attribute> | |||||
| <attribute name="horizontalHeaderStretchLastSection"> | |||||
| <bool>true</bool> | |||||
| </attribute> | |||||
| <attribute name="verticalHeaderVisible"> | |||||
| <bool>false</bool> | |||||
| </attribute> | |||||
| <attribute name="verticalHeaderCascadingSectionResizes"> | |||||
| <bool>false</bool> | |||||
| </attribute> | |||||
| <attribute name="verticalHeaderHighlightSections"> | |||||
| <bool>true</bool> | |||||
| </attribute> | |||||
| <attribute name="verticalHeaderShowSortIndicator" stdset="0"> | |||||
| <bool>false</bool> | |||||
| </attribute> | |||||
| <attribute name="verticalHeaderStretchLastSection"> | |||||
| <bool>false</bool> | |||||
| </attribute> | |||||
| </widget> | |||||
| <widget class="QPushButton" name="AddRowDataBtn"> | |||||
| <property name="geometry"> | |||||
| <rect> | |||||
| <x>30</x> | |||||
| <y>320</y> | |||||
| <width>111</width> | |||||
| <height>41</height> | |||||
| </rect> | |||||
| </property> | |||||
| <property name="text"> | |||||
| <string>添加</string> | |||||
| </property> | |||||
| </widget> | |||||
| <widget class="QPushButton" name="DelRowDataBtn"> | |||||
| <property name="geometry"> | |||||
| <rect> | |||||
| <x>150</x> | |||||
| <y>320</y> | |||||
| <width>111</width> | |||||
| <height>41</height> | |||||
| </rect> | |||||
| </property> | |||||
| <property name="text"> | |||||
| <string>删除</string> | |||||
| </property> | |||||
| </widget> | |||||
| <widget class="QPushButton" name="UpRowDataBtn"> | |||||
| <property name="geometry"> | |||||
| <rect> | |||||
| <x>270</x> | |||||
| <y>320</y> | |||||
| <width>111</width> | |||||
| <height>41</height> | |||||
| </rect> | |||||
| </property> | |||||
| <property name="text"> | |||||
| <string>上移</string> | |||||
| </property> | |||||
| </widget> | |||||
| <widget class="QPushButton" name="DownRowDataBtn"> | |||||
| <property name="geometry"> | |||||
| <rect> | |||||
| <x>390</x> | |||||
| <y>320</y> | |||||
| <width>111</width> | |||||
| <height>41</height> | |||||
| </rect> | |||||
| </property> | |||||
| <property name="text"> | |||||
| <string>下移</string> | |||||
| </property> | |||||
| </widget> | |||||
| <widget class="QPushButton" name="WriteRowDataBtn"> | |||||
| <property name="geometry"> | |||||
| <rect> | |||||
| <x>520</x> | |||||
| <y>320</y> | |||||
| <width>111</width> | |||||
| <height>41</height> | |||||
| </rect> | |||||
| </property> | |||||
| <property name="text"> | |||||
| <string>写入</string> | |||||
| </property> | |||||
| </widget> | |||||
| </widget> | |||||
| <resources/> | |||||
| <connections/> | |||||
| </ui> | |||||
| @@ -0,0 +1,693 @@ | |||||
| /******************************motorcontroll.cpp文件说明********************************** | |||||
| * Descript :源文件,包含主窗口的页面设计、函数的实现、信号的连接 | |||||
| * Author :caitiancheng | |||||
| * Date :2021_12_19 | |||||
| *******************************************************************************/ | |||||
| /***********************************头文件****************************************/ | |||||
| #include "motorcontroll.h" | |||||
| #include "ui_motorcontroll.h" | |||||
| #include<QDateTime> | |||||
| #include <QCloseEvent> | |||||
| /***********************************类的声明和继承****************************************/ | |||||
| 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;i<MonitorLogsLen;i++) | |||||
| { | |||||
| delete MonitorLogs.at(i); | |||||
| } | |||||
| delete MonitorSM2001; | |||||
| delete MonitorSM2010; | |||||
| delete MonitorSM2011; | |||||
| delete MonitorSM2012; | |||||
| delete MonitorSD2042; | |||||
| delete MonitorSD2040; | |||||
| delete MonitorSD2001; | |||||
| delete MonitorSD2010; | |||||
| delete MonitorSD2008; | |||||
| delete MonitorSD2030; | |||||
| delete MonitorSD2032; | |||||
| delete MonitorSD2034; | |||||
| delete MonitorSD2036; | |||||
| delete ui; | |||||
| } | |||||
| /****************************InitBarStatus函数********************************* | |||||
| Function :初始化界面状态栏,进行相应的设置 | |||||
| Output : | |||||
| *********************************************************************/ | |||||
| void MotorControll::InitBarStatus() | |||||
| { | |||||
| ui->statusBar->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;i<TableHeadTitleLength;i++) | |||||
| { | |||||
| TableHeadItem.push_back(new QTableWidgetItem(TableHeadTitle[i])); | |||||
| ui->DataMonitorTableWidget->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(); | |||||
| } | |||||
| } | |||||
| @@ -0,0 +1,161 @@ | |||||
| /******************************motorcontroll.h文件说明********************************** | |||||
| * Descript :头文件,包含主窗口的头文件引用,以及宏定义 | |||||
| * Author :caitiancheng | |||||
| * Date :2021_12_19 | |||||
| *******************************************************************************/ | |||||
| #ifndef MOTORCONTROLL_H | |||||
| #define MOTORCONTROLL_H | |||||
| /***********************************头文件****************************************/ | |||||
| #include <QMainWindow> | |||||
| #include <Base.h> | |||||
| #include "XnetConnect.h" | |||||
| #include "Addpar.h" | |||||
| #include "moretypemovement.h" | |||||
| #include <QTimer> | |||||
| #include <QTableWidgetItem> | |||||
| #include <QMessageBox> | |||||
| /***********************************类的声明和继承****************************************/ | |||||
| 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<QTableWidgetItem *> 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<QTableWidgetItem *> 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 | |||||
| @@ -0,0 +1,789 @@ | |||||
| <?xml version="1.0" encoding="UTF-8"?> | |||||
| <ui version="4.0"> | |||||
| <class>MotorControll</class> | |||||
| <widget class="QMainWindow" name="MotorControll"> | |||||
| <property name="geometry"> | |||||
| <rect> | |||||
| <x>0</x> | |||||
| <y>0</y> | |||||
| <width>965</width> | |||||
| <height>867</height> | |||||
| </rect> | |||||
| </property> | |||||
| <property name="windowTitle"> | |||||
| <string>MotorControll</string> | |||||
| </property> | |||||
| <widget class="QWidget" name="centralWidget"> | |||||
| <widget class="QGroupBox" name="groupBox"> | |||||
| <property name="geometry"> | |||||
| <rect> | |||||
| <x>10</x> | |||||
| <y>10</y> | |||||
| <width>361</width> | |||||
| <height>161</height> | |||||
| </rect> | |||||
| </property> | |||||
| <property name="title"> | |||||
| <string>基础配置</string> | |||||
| </property> | |||||
| <widget class="QPushButton" name="pushButton"> | |||||
| <property name="geometry"> | |||||
| <rect> | |||||
| <x>10</x> | |||||
| <y>30</y> | |||||
| <width>111</width> | |||||
| <height>41</height> | |||||
| </rect> | |||||
| </property> | |||||
| <property name="text"> | |||||
| <string>通信连接</string> | |||||
| </property> | |||||
| </widget> | |||||
| <widget class="QPushButton" name="pushButton_2"> | |||||
| <property name="geometry"> | |||||
| <rect> | |||||
| <x>230</x> | |||||
| <y>30</y> | |||||
| <width>111</width> | |||||
| <height>41</height> | |||||
| </rect> | |||||
| </property> | |||||
| <property name="text"> | |||||
| <string>C运动配置</string> | |||||
| </property> | |||||
| </widget> | |||||
| <widget class="QPushButton" name="pushButton_3"> | |||||
| <property name="geometry"> | |||||
| <rect> | |||||
| <x>10</x> | |||||
| <y>110</y> | |||||
| <width>111</width> | |||||
| <height>41</height> | |||||
| </rect> | |||||
| </property> | |||||
| <property name="text"> | |||||
| <string>开启电机</string> | |||||
| </property> | |||||
| </widget> | |||||
| <widget class="QPushButton" name="pushButton_4"> | |||||
| <property name="geometry"> | |||||
| <rect> | |||||
| <x>230</x> | |||||
| <y>110</y> | |||||
| <width>111</width> | |||||
| <height>41</height> | |||||
| </rect> | |||||
| </property> | |||||
| <property name="text"> | |||||
| <string>关闭电机</string> | |||||
| </property> | |||||
| </widget> | |||||
| </widget> | |||||
| <widget class="QGroupBox" name="groupBox_2"> | |||||
| <property name="geometry"> | |||||
| <rect> | |||||
| <x>10</x> | |||||
| <y>175</y> | |||||
| <width>421</width> | |||||
| <height>261</height> | |||||
| </rect> | |||||
| </property> | |||||
| <property name="title"> | |||||
| <string>点动</string> | |||||
| </property> | |||||
| <widget class="QPushButton" name="DotPositiveBtn"> | |||||
| <property name="geometry"> | |||||
| <rect> | |||||
| <x>10</x> | |||||
| <y>140</y> | |||||
| <width>111</width> | |||||
| <height>41</height> | |||||
| </rect> | |||||
| </property> | |||||
| <property name="text"> | |||||
| <string>正向点动</string> | |||||
| </property> | |||||
| </widget> | |||||
| <widget class="QPushButton" name="DotStepUpdataBtn"> | |||||
| <property name="geometry"> | |||||
| <rect> | |||||
| <x>300</x> | |||||
| <y>20</y> | |||||
| <width>111</width> | |||||
| <height>41</height> | |||||
| </rect> | |||||
| </property> | |||||
| <property name="text"> | |||||
| <string>更新步长</string> | |||||
| </property> | |||||
| </widget> | |||||
| <widget class="QPushButton" name="DotSpeedUpdataBtn"> | |||||
| <property name="geometry"> | |||||
| <rect> | |||||
| <x>300</x> | |||||
| <y>80</y> | |||||
| <width>111</width> | |||||
| <height>41</height> | |||||
| </rect> | |||||
| </property> | |||||
| <property name="text"> | |||||
| <string>更新速度</string> | |||||
| </property> | |||||
| </widget> | |||||
| <widget class="QPushButton" name="DotReverseBtn"> | |||||
| <property name="geometry"> | |||||
| <rect> | |||||
| <x>160</x> | |||||
| <y>140</y> | |||||
| <width>111</width> | |||||
| <height>41</height> | |||||
| </rect> | |||||
| </property> | |||||
| <property name="text"> | |||||
| <string>反向点动</string> | |||||
| </property> | |||||
| </widget> | |||||
| <widget class="QPushButton" name="DotKeepRunBtn"> | |||||
| <property name="geometry"> | |||||
| <rect> | |||||
| <x>160</x> | |||||
| <y>200</y> | |||||
| <width>111</width> | |||||
| <height>41</height> | |||||
| </rect> | |||||
| </property> | |||||
| <property name="text"> | |||||
| <string>继续运动</string> | |||||
| </property> | |||||
| </widget> | |||||
| <widget class="QPushButton" name="DotStopRunBtn"> | |||||
| <property name="geometry"> | |||||
| <rect> | |||||
| <x>10</x> | |||||
| <y>200</y> | |||||
| <width>111</width> | |||||
| <height>41</height> | |||||
| </rect> | |||||
| </property> | |||||
| <property name="text"> | |||||
| <string>停止运动</string> | |||||
| </property> | |||||
| </widget> | |||||
| <widget class="QLabel" name="label"> | |||||
| <property name="geometry"> | |||||
| <rect> | |||||
| <x>10</x> | |||||
| <y>30</y> | |||||
| <width>72</width> | |||||
| <height>15</height> | |||||
| </rect> | |||||
| </property> | |||||
| <property name="text"> | |||||
| <string>点动步长</string> | |||||
| </property> | |||||
| </widget> | |||||
| <widget class="QLabel" name="label_2"> | |||||
| <property name="geometry"> | |||||
| <rect> | |||||
| <x>10</x> | |||||
| <y>90</y> | |||||
| <width>70</width> | |||||
| <height>15</height> | |||||
| </rect> | |||||
| </property> | |||||
| <property name="text"> | |||||
| <string>点动速度</string> | |||||
| </property> | |||||
| </widget> | |||||
| <widget class="QLineEdit" name="DotStepLedit"> | |||||
| <property name="geometry"> | |||||
| <rect> | |||||
| <x>90</x> | |||||
| <y>30</y> | |||||
| <width>131</width> | |||||
| <height>21</height> | |||||
| </rect> | |||||
| </property> | |||||
| </widget> | |||||
| <widget class="QLineEdit" name="DotSpeedLedit"> | |||||
| <property name="geometry"> | |||||
| <rect> | |||||
| <x>90</x> | |||||
| <y>90</y> | |||||
| <width>131</width> | |||||
| <height>21</height> | |||||
| </rect> | |||||
| </property> | |||||
| </widget> | |||||
| <widget class="QLabel" name="label_3"> | |||||
| <property name="geometry"> | |||||
| <rect> | |||||
| <x>240</x> | |||||
| <y>30</y> | |||||
| <width>31</width> | |||||
| <height>16</height> | |||||
| </rect> | |||||
| </property> | |||||
| <property name="text"> | |||||
| <string>脉冲</string> | |||||
| </property> | |||||
| </widget> | |||||
| <widget class="QLabel" name="label_4"> | |||||
| <property name="geometry"> | |||||
| <rect> | |||||
| <x>240</x> | |||||
| <y>90</y> | |||||
| <width>72</width> | |||||
| <height>15</height> | |||||
| </rect> | |||||
| </property> | |||||
| <property name="text"> | |||||
| <string>脉冲/秒</string> | |||||
| </property> | |||||
| </widget> | |||||
| <zorder>DotPositiveBtn</zorder> | |||||
| <zorder>DotStepUpdataBtn</zorder> | |||||
| <zorder>DotSpeedUpdataBtn</zorder> | |||||
| <zorder>DotReverseBtn</zorder> | |||||
| <zorder>DotKeepRunBtn</zorder> | |||||
| <zorder>DotStopRunBtn</zorder> | |||||
| <zorder>label</zorder> | |||||
| <zorder>label_2</zorder> | |||||
| <zorder>DotSpeedLedit</zorder> | |||||
| <zorder>label_3</zorder> | |||||
| <zorder>label_4</zorder> | |||||
| <zorder>DotStepLedit</zorder> | |||||
| </widget> | |||||
| <widget class="QGroupBox" name="groupBox_3"> | |||||
| <property name="geometry"> | |||||
| <rect> | |||||
| <x>480</x> | |||||
| <y>10</y> | |||||
| <width>481</width> | |||||
| <height>434</height> | |||||
| </rect> | |||||
| </property> | |||||
| <property name="sizePolicy"> | |||||
| <sizepolicy hsizetype="Preferred" vsizetype="Preferred"> | |||||
| <horstretch>0</horstretch> | |||||
| <verstretch>0</verstretch> | |||||
| </sizepolicy> | |||||
| </property> | |||||
| <property name="minimumSize"> | |||||
| <size> | |||||
| <width>300</width> | |||||
| <height>0</height> | |||||
| </size> | |||||
| </property> | |||||
| <property name="maximumSize"> | |||||
| <size> | |||||
| <width>1000</width> | |||||
| <height>16777215</height> | |||||
| </size> | |||||
| </property> | |||||
| <property name="title"> | |||||
| <string>监控</string> | |||||
| </property> | |||||
| <layout class="QGridLayout" name="gridLayout"> | |||||
| <item row="0" column="0"> | |||||
| <widget class="QTableWidget" name="DataMonitorTableWidget"> | |||||
| <property name="textElideMode"> | |||||
| <enum>Qt::ElideMiddle</enum> | |||||
| </property> | |||||
| <attribute name="horizontalHeaderCascadingSectionResizes"> | |||||
| <bool>false</bool> | |||||
| </attribute> | |||||
| <attribute name="horizontalHeaderStretchLastSection"> | |||||
| <bool>true</bool> | |||||
| </attribute> | |||||
| </widget> | |||||
| </item> | |||||
| </layout> | |||||
| </widget> | |||||
| <widget class="QGroupBox" name="groupBox_4"> | |||||
| <property name="geometry"> | |||||
| <rect> | |||||
| <x>10</x> | |||||
| <y>480</y> | |||||
| <width>441</width> | |||||
| <height>341</height> | |||||
| </rect> | |||||
| </property> | |||||
| <property name="title"> | |||||
| <string>基础运动</string> | |||||
| </property> | |||||
| <widget class="QLabel" name="label_6"> | |||||
| <property name="geometry"> | |||||
| <rect> | |||||
| <x>10</x> | |||||
| <y>80</y> | |||||
| <width>60</width> | |||||
| <height>28</height> | |||||
| </rect> | |||||
| </property> | |||||
| <property name="text"> | |||||
| <string>运行速度</string> | |||||
| </property> | |||||
| </widget> | |||||
| <widget class="QLabel" name="label_5"> | |||||
| <property name="geometry"> | |||||
| <rect> | |||||
| <x>10</x> | |||||
| <y>30</y> | |||||
| <width>60</width> | |||||
| <height>28</height> | |||||
| </rect> | |||||
| </property> | |||||
| <property name="text"> | |||||
| <string>目标位置</string> | |||||
| </property> | |||||
| </widget> | |||||
| <widget class="QLabel" name="label_7"> | |||||
| <property name="geometry"> | |||||
| <rect> | |||||
| <x>10</x> | |||||
| <y>130</y> | |||||
| <width>60</width> | |||||
| <height>28</height> | |||||
| </rect> | |||||
| </property> | |||||
| <property name="text"> | |||||
| <string>加速时间</string> | |||||
| </property> | |||||
| </widget> | |||||
| <widget class="QLabel" name="label_8"> | |||||
| <property name="geometry"> | |||||
| <rect> | |||||
| <x>10</x> | |||||
| <y>180</y> | |||||
| <width>60</width> | |||||
| <height>28</height> | |||||
| </rect> | |||||
| </property> | |||||
| <property name="text"> | |||||
| <string>位置修改</string> | |||||
| </property> | |||||
| </widget> | |||||
| <widget class="QLineEdit" name="RunSpeedLedit"> | |||||
| <property name="geometry"> | |||||
| <rect> | |||||
| <x>90</x> | |||||
| <y>80</y> | |||||
| <width>140</width> | |||||
| <height>25</height> | |||||
| </rect> | |||||
| </property> | |||||
| <property name="text"> | |||||
| <string>0</string> | |||||
| </property> | |||||
| <property name="alignment"> | |||||
| <set>Qt::AlignCenter</set> | |||||
| </property> | |||||
| </widget> | |||||
| <widget class="QLineEdit" name="RunPlaceLedit"> | |||||
| <property name="geometry"> | |||||
| <rect> | |||||
| <x>90</x> | |||||
| <y>30</y> | |||||
| <width>140</width> | |||||
| <height>25</height> | |||||
| </rect> | |||||
| </property> | |||||
| <property name="text"> | |||||
| <string>10000</string> | |||||
| </property> | |||||
| <property name="alignment"> | |||||
| <set>Qt::AlignCenter</set> | |||||
| </property> | |||||
| </widget> | |||||
| <widget class="QLineEdit" name="RunTimeLedit"> | |||||
| <property name="geometry"> | |||||
| <rect> | |||||
| <x>90</x> | |||||
| <y>130</y> | |||||
| <width>140</width> | |||||
| <height>25</height> | |||||
| </rect> | |||||
| </property> | |||||
| <property name="text"> | |||||
| <string>0</string> | |||||
| </property> | |||||
| <property name="alignment"> | |||||
| <set>Qt::AlignCenter</set> | |||||
| </property> | |||||
| </widget> | |||||
| <widget class="QLineEdit" name="RunStartPlaceLedit"> | |||||
| <property name="geometry"> | |||||
| <rect> | |||||
| <x>90</x> | |||||
| <y>180</y> | |||||
| <width>140</width> | |||||
| <height>25</height> | |||||
| </rect> | |||||
| </property> | |||||
| <property name="text"> | |||||
| <string>0</string> | |||||
| </property> | |||||
| <property name="alignment"> | |||||
| <set>Qt::AlignCenter</set> | |||||
| </property> | |||||
| </widget> | |||||
| <widget class="QLabel" name="label_9"> | |||||
| <property name="geometry"> | |||||
| <rect> | |||||
| <x>250</x> | |||||
| <y>30</y> | |||||
| <width>31</width> | |||||
| <height>16</height> | |||||
| </rect> | |||||
| </property> | |||||
| <property name="text"> | |||||
| <string>脉冲</string> | |||||
| </property> | |||||
| </widget> | |||||
| <widget class="QLabel" name="label_10"> | |||||
| <property name="geometry"> | |||||
| <rect> | |||||
| <x>250</x> | |||||
| <y>80</y> | |||||
| <width>72</width> | |||||
| <height>15</height> | |||||
| </rect> | |||||
| </property> | |||||
| <property name="text"> | |||||
| <string>脉冲/秒</string> | |||||
| </property> | |||||
| </widget> | |||||
| <widget class="QLabel" name="label_11"> | |||||
| <property name="geometry"> | |||||
| <rect> | |||||
| <x>250</x> | |||||
| <y>130</y> | |||||
| <width>72</width> | |||||
| <height>15</height> | |||||
| </rect> | |||||
| </property> | |||||
| <property name="text"> | |||||
| <string>毫秒</string> | |||||
| </property> | |||||
| </widget> | |||||
| <widget class="QLabel" name="label_12"> | |||||
| <property name="geometry"> | |||||
| <rect> | |||||
| <x>250</x> | |||||
| <y>180</y> | |||||
| <width>31</width> | |||||
| <height>16</height> | |||||
| </rect> | |||||
| </property> | |||||
| <property name="text"> | |||||
| <string>脉冲</string> | |||||
| </property> | |||||
| </widget> | |||||
| <widget class="QPushButton" name="RunPlaceUpdataBtn"> | |||||
| <property name="geometry"> | |||||
| <rect> | |||||
| <x>310</x> | |||||
| <y>15</y> | |||||
| <width>111</width> | |||||
| <height>41</height> | |||||
| </rect> | |||||
| </property> | |||||
| <property name="text"> | |||||
| <string>更新位置</string> | |||||
| </property> | |||||
| </widget> | |||||
| <widget class="QPushButton" name="RunSpeedUpdataBtn"> | |||||
| <property name="geometry"> | |||||
| <rect> | |||||
| <x>310</x> | |||||
| <y>70</y> | |||||
| <width>111</width> | |||||
| <height>41</height> | |||||
| </rect> | |||||
| </property> | |||||
| <property name="text"> | |||||
| <string>更新速度</string> | |||||
| </property> | |||||
| </widget> | |||||
| <widget class="QPushButton" name="RunTimeUpdataBtn"> | |||||
| <property name="geometry"> | |||||
| <rect> | |||||
| <x>310</x> | |||||
| <y>120</y> | |||||
| <width>111</width> | |||||
| <height>41</height> | |||||
| </rect> | |||||
| </property> | |||||
| <property name="text"> | |||||
| <string>更新时间</string> | |||||
| </property> | |||||
| </widget> | |||||
| <widget class="QPushButton" name="RunStartPlaceModifyBtn"> | |||||
| <property name="geometry"> | |||||
| <rect> | |||||
| <x>310</x> | |||||
| <y>170</y> | |||||
| <width>111</width> | |||||
| <height>41</height> | |||||
| </rect> | |||||
| </property> | |||||
| <property name="text"> | |||||
| <string>修改位置</string> | |||||
| </property> | |||||
| </widget> | |||||
| <widget class="QPushButton" name="RunStartAbsolutBtn"> | |||||
| <property name="geometry"> | |||||
| <rect> | |||||
| <x>10</x> | |||||
| <y>230</y> | |||||
| <width>111</width> | |||||
| <height>41</height> | |||||
| </rect> | |||||
| </property> | |||||
| <property name="text"> | |||||
| <string>绝对运动</string> | |||||
| </property> | |||||
| </widget> | |||||
| <widget class="QPushButton" name="RunStartRelativeBtn"> | |||||
| <property name="geometry"> | |||||
| <rect> | |||||
| <x>10</x> | |||||
| <y>280</y> | |||||
| <width>111</width> | |||||
| <height>41</height> | |||||
| </rect> | |||||
| </property> | |||||
| <property name="text"> | |||||
| <string>相对运动</string> | |||||
| </property> | |||||
| </widget> | |||||
| <widget class="QPushButton" name="RunStopBtn"> | |||||
| <property name="geometry"> | |||||
| <rect> | |||||
| <x>210</x> | |||||
| <y>230</y> | |||||
| <width>111</width> | |||||
| <height>41</height> | |||||
| </rect> | |||||
| </property> | |||||
| <property name="text"> | |||||
| <string>停止运动</string> | |||||
| </property> | |||||
| </widget> | |||||
| <widget class="QPushButton" name="RunKeepBtn"> | |||||
| <property name="geometry"> | |||||
| <rect> | |||||
| <x>210</x> | |||||
| <y>280</y> | |||||
| <width>111</width> | |||||
| <height>41</height> | |||||
| </rect> | |||||
| </property> | |||||
| <property name="text"> | |||||
| <string>继续运动</string> | |||||
| </property> | |||||
| </widget> | |||||
| </widget> | |||||
| <widget class="QGroupBox" name="groupBox_5"> | |||||
| <property name="geometry"> | |||||
| <rect> | |||||
| <x>480</x> | |||||
| <y>480</y> | |||||
| <width>441</width> | |||||
| <height>341</height> | |||||
| </rect> | |||||
| </property> | |||||
| <property name="title"> | |||||
| <string>多段运动</string> | |||||
| </property> | |||||
| <widget class="QLabel" name="label_13"> | |||||
| <property name="geometry"> | |||||
| <rect> | |||||
| <x>20</x> | |||||
| <y>34</y> | |||||
| <width>60</width> | |||||
| <height>28</height> | |||||
| </rect> | |||||
| </property> | |||||
| <property name="text"> | |||||
| <string>运动模式</string> | |||||
| </property> | |||||
| </widget> | |||||
| <widget class="QComboBox" name="RunMoreModelBox"> | |||||
| <property name="geometry"> | |||||
| <rect> | |||||
| <x>100</x> | |||||
| <y>34</y> | |||||
| <width>111</width> | |||||
| <height>41</height> | |||||
| </rect> | |||||
| </property> | |||||
| <item> | |||||
| <property name="text"> | |||||
| <string>相对运动</string> | |||||
| </property> | |||||
| </item> | |||||
| <item> | |||||
| <property name="text"> | |||||
| <string>绝对运动</string> | |||||
| </property> | |||||
| </item> | |||||
| </widget> | |||||
| <widget class="QLabel" name="label_14"> | |||||
| <property name="geometry"> | |||||
| <rect> | |||||
| <x>20</x> | |||||
| <y>100</y> | |||||
| <width>72</width> | |||||
| <height>15</height> | |||||
| </rect> | |||||
| </property> | |||||
| <property name="text"> | |||||
| <string>加速时间</string> | |||||
| </property> | |||||
| </widget> | |||||
| <widget class="QLineEdit" name="RunMoreAddSpeedTimeLedit"> | |||||
| <property name="geometry"> | |||||
| <rect> | |||||
| <x>100</x> | |||||
| <y>100</y> | |||||
| <width>111</width> | |||||
| <height>21</height> | |||||
| </rect> | |||||
| </property> | |||||
| <property name="text"> | |||||
| <string>1000</string> | |||||
| </property> | |||||
| <property name="alignment"> | |||||
| <set>Qt::AlignCenter</set> | |||||
| </property> | |||||
| </widget> | |||||
| <widget class="QLabel" name="label_15"> | |||||
| <property name="geometry"> | |||||
| <rect> | |||||
| <x>220</x> | |||||
| <y>100</y> | |||||
| <width>31</width> | |||||
| <height>16</height> | |||||
| </rect> | |||||
| </property> | |||||
| <property name="text"> | |||||
| <string>毫秒</string> | |||||
| </property> | |||||
| </widget> | |||||
| <widget class="QLabel" name="label_16"> | |||||
| <property name="geometry"> | |||||
| <rect> | |||||
| <x>20</x> | |||||
| <y>160</y> | |||||
| <width>72</width> | |||||
| <height>15</height> | |||||
| </rect> | |||||
| </property> | |||||
| <property name="text"> | |||||
| <string>减速时间</string> | |||||
| </property> | |||||
| </widget> | |||||
| <widget class="QLineEdit" name="RunMoreSubSpeedTimeLedit"> | |||||
| <property name="geometry"> | |||||
| <rect> | |||||
| <x>100</x> | |||||
| <y>160</y> | |||||
| <width>111</width> | |||||
| <height>21</height> | |||||
| </rect> | |||||
| </property> | |||||
| <property name="text"> | |||||
| <string>1000</string> | |||||
| </property> | |||||
| <property name="alignment"> | |||||
| <set>Qt::AlignCenter</set> | |||||
| </property> | |||||
| </widget> | |||||
| <widget class="QLabel" name="label_17"> | |||||
| <property name="geometry"> | |||||
| <rect> | |||||
| <x>220</x> | |||||
| <y>160</y> | |||||
| <width>31</width> | |||||
| <height>15</height> | |||||
| </rect> | |||||
| </property> | |||||
| <property name="text"> | |||||
| <string>毫秒</string> | |||||
| </property> | |||||
| </widget> | |||||
| <widget class="QPushButton" name="RunMoreDataUpdataBtn"> | |||||
| <property name="geometry"> | |||||
| <rect> | |||||
| <x>290</x> | |||||
| <y>110</y> | |||||
| <width>111</width> | |||||
| <height>41</height> | |||||
| </rect> | |||||
| </property> | |||||
| <property name="text"> | |||||
| <string>更新数据</string> | |||||
| </property> | |||||
| </widget> | |||||
| <widget class="QPushButton" name="RunMoreAddRunBtn"> | |||||
| <property name="geometry"> | |||||
| <rect> | |||||
| <x>290</x> | |||||
| <y>34</y> | |||||
| <width>111</width> | |||||
| <height>41</height> | |||||
| </rect> | |||||
| </property> | |||||
| <property name="text"> | |||||
| <string>添加运动</string> | |||||
| </property> | |||||
| </widget> | |||||
| <widget class="QPushButton" name="RunMoreStartBtn"> | |||||
| <property name="geometry"> | |||||
| <rect> | |||||
| <x>20</x> | |||||
| <y>250</y> | |||||
| <width>111</width> | |||||
| <height>41</height> | |||||
| </rect> | |||||
| </property> | |||||
| <property name="text"> | |||||
| <string>启动运动</string> | |||||
| </property> | |||||
| </widget> | |||||
| <widget class="QPushButton" name="RunMoreStopBtn"> | |||||
| <property name="geometry"> | |||||
| <rect> | |||||
| <x>160</x> | |||||
| <y>250</y> | |||||
| <width>111</width> | |||||
| <height>41</height> | |||||
| </rect> | |||||
| </property> | |||||
| <property name="text"> | |||||
| <string>停止运动</string> | |||||
| </property> | |||||
| </widget> | |||||
| <widget class="QPushButton" name="RunMoreKeepBtn"> | |||||
| <property name="geometry"> | |||||
| <rect> | |||||
| <x>290</x> | |||||
| <y>250</y> | |||||
| <width>111</width> | |||||
| <height>41</height> | |||||
| </rect> | |||||
| </property> | |||||
| <property name="text"> | |||||
| <string>继续运动</string> | |||||
| </property> | |||||
| </widget> | |||||
| </widget> | |||||
| </widget> | |||||
| <widget class="QStatusBar" name="statusBar"/> | |||||
| </widget> | |||||
| <layoutdefault spacing="6" margin="11"/> | |||||
| <resources/> | |||||
| <connections/> | |||||
| </ui> | |||||
| @@ -0,0 +1,90 @@ | |||||
| #ifndef X_NET_H | |||||
| #define X_NET_H | |||||
| //#include "x_net_global.h" | |||||
| #include <Windows.h> | |||||
| #include <string> | |||||
| #include <iostream> | |||||
| 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 | |||||
| @@ -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(); | |||||
| }; | |||||
| } | |||||
| @@ -0,0 +1,78 @@ | |||||
| /******************************xnetconnect.cpp文件说明********************************** | |||||
| * Descript :源文件,包含通信配置窗口的函数实现 | |||||
| * Author :caitiancheng | |||||
| * Date :2021_12_19 | |||||
| *******************************************************************************/ | |||||
| /***********************************头文件****************************************/ | |||||
| #include "xnetconnect.h" | |||||
| #include "ui_xnetconnect.h" | |||||
| #include "Base.h" | |||||
| #include <QCloseEvent> | |||||
| /***********************************类的声明和继承****************************************/ | |||||
| 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; | |||||
| } | |||||
| @@ -0,0 +1,44 @@ | |||||
| /******************************xnetconnect.h文件说明********************************** | |||||
| * Descript :头文件,包含通信配置窗口的头文件引用,以及宏定义 | |||||
| * Author :caitiancheng | |||||
| * Date :2021_12_19 | |||||
| *******************************************************************************/ | |||||
| #ifndef XNETCONNECT_H | |||||
| #define XNETCONNECT_H | |||||
| /***********************************头文件****************************************/ | |||||
| #include <QWidget> | |||||
| #include <QMessageBox> | |||||
| /***********************************类的声明和继承****************************************/ | |||||
| 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 | |||||
| @@ -0,0 +1,66 @@ | |||||
| <?xml version="1.0" encoding="UTF-8"?> | |||||
| <ui version="4.0"> | |||||
| <class>XnetConnect</class> | |||||
| <widget class="QWidget" name="XnetConnect"> | |||||
| <property name="enabled"> | |||||
| <bool>true</bool> | |||||
| </property> | |||||
| <property name="geometry"> | |||||
| <rect> | |||||
| <x>0</x> | |||||
| <y>0</y> | |||||
| <width>371</width> | |||||
| <height>81</height> | |||||
| </rect> | |||||
| </property> | |||||
| <property name="windowTitle"> | |||||
| <string>Form</string> | |||||
| </property> | |||||
| <widget class="QPushButton" name="CtrlServiceBtn"> | |||||
| <property name="geometry"> | |||||
| <rect> | |||||
| <x>260</x> | |||||
| <y>30</y> | |||||
| <width>75</width> | |||||
| <height>23</height> | |||||
| </rect> | |||||
| </property> | |||||
| <property name="text"> | |||||
| <string>启动服务</string> | |||||
| </property> | |||||
| </widget> | |||||
| <widget class="QLineEdit" name="NeedIPEdit"> | |||||
| <property name="geometry"> | |||||
| <rect> | |||||
| <x>20</x> | |||||
| <y>30</y> | |||||
| <width>181</width> | |||||
| <height>20</height> | |||||
| </rect> | |||||
| </property> | |||||
| <property name="sizePolicy"> | |||||
| <sizepolicy hsizetype="Fixed" vsizetype="Fixed"> | |||||
| <horstretch>0</horstretch> | |||||
| <verstretch>0</verstretch> | |||||
| </sizepolicy> | |||||
| </property> | |||||
| <property name="inputMask"> | |||||
| <string/> | |||||
| </property> | |||||
| <property name="text"> | |||||
| <string>192.168.6.6</string> | |||||
| </property> | |||||
| <property name="alignment"> | |||||
| <set>Qt::AlignCenter</set> | |||||
| </property> | |||||
| <property name="placeholderText"> | |||||
| <string>请输入PLC的IP!</string> | |||||
| </property> | |||||
| <property name="clearButtonEnabled"> | |||||
| <bool>false</bool> | |||||
| </property> | |||||
| </widget> | |||||
| </widget> | |||||
| <resources/> | |||||
| <connections/> | |||||
| </ui> | |||||