@@ -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> |