325 lines
10 KiB
C++
325 lines
10 KiB
C++
/******************************************************
|
||
* 文件名 : vincecontrol.h
|
||
* 类名 :
|
||
* 作用 :马达控制程序
|
||
* 作者 : xin
|
||
* 邮箱 : renlixin@iris-rs.cn
|
||
* 日期 : 2020-8-5
|
||
********************************************************
|
||
* *
|
||
* _ooOoo_ *
|
||
* o8888888o *
|
||
* 88" . "88 *
|
||
* (| -_- |) *
|
||
* O\ = /O *
|
||
* ____/`---'\____ *
|
||
* .' \\| |// `. *
|
||
* / \\||| : |||// \ *
|
||
* / _||||| -:- |||||- \ *
|
||
* | | \\\ - /// | | *
|
||
* | \_| ''\---/'' | | *
|
||
* \ .-\__ `-` ___/-. / *
|
||
* ___`. .' /--.--\ `. . __ *
|
||
* ."" '< `.___\_<|>_/___.' >'"". *
|
||
* | | : `- \`.;`\ _ /`;.`/ - ` : | | *
|
||
* \ \ `-. \_ __\ /__ _/ .-` / / *
|
||
* ======`-.____`-.___\_____/___.-`____.-'====== *
|
||
* `=---=' *
|
||
* ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ *
|
||
* 佛祖保佑 长发永存 *
|
||
* *
|
||
********************************************************/
|
||
|
||
|
||
|
||
#ifndef VINCECONTROL_H
|
||
#define VINCECONTROL_H
|
||
|
||
#ifdef VINCECONTROL_LIB
|
||
# define VINCECONTROL_EXPORT Q_DECL_EXPORT
|
||
#else
|
||
# define VINCECONTROL_EXPORT Q_DECL_IMPORT
|
||
#endif
|
||
#define LOGOUT
|
||
|
||
#include "vincecontrol_global.h"
|
||
#include "QString"
|
||
#include "QStringList"
|
||
#include "QList"
|
||
#include <QObject>
|
||
#include <QSerialPort>
|
||
#include <QTcpServer> //监听套接字
|
||
#include <QTcpSocket> //通信套接字
|
||
#include "QByteArray"
|
||
|
||
enum ProTools
|
||
{
|
||
RS232 = 0,
|
||
RS485 = 1,
|
||
NETTCP=2
|
||
};
|
||
struct ByteBack
|
||
{
|
||
float Speed;
|
||
int Location;
|
||
unsigned int Stata;
|
||
|
||
};
|
||
/********************************************************************
|
||
* 描述:马达控制程序
|
||
* 使用步骤
|
||
* 1 初始化 需要告诉通讯协议(Vince规定的) 如:motor = new VinceControl(NETTCP, 6000);
|
||
* 2 通过 motor->IsMotorInit 来判断是否右马达接入
|
||
* 建议:
|
||
* 1) 可以用SettingZeroLocation()结合传感器的是指来设置零为
|
||
* 2)关于传感器的设置均在initmotor()函数里
|
||
* 注意:
|
||
* 类中所有默认参数再不设置的情况下均指网络通讯的第一个设备id
|
||
* 2020-8-5:立新
|
||
*******************************************************************/
|
||
class VINCECONTROL_EXPORT VinceControl:public QObject
|
||
{
|
||
Q_OBJECT
|
||
|
||
public:
|
||
//************************************
|
||
// Method: VinceControl
|
||
// FullName: VinceControl::VinceControl
|
||
// Access: public
|
||
// Returns:
|
||
// Qualifier:
|
||
// Parameter: ProTools 通讯协议 RS485 或者 RS232
|
||
//************************************
|
||
VinceControl(ProTools proto);
|
||
|
||
//************************************
|
||
// Method: VinceControl //走网络协议 需要两个参数 第一个为NETTCP 第二个为端口 6000或者6001
|
||
// FullName: VinceControl::VinceControl
|
||
// Access: public
|
||
// Returns:
|
||
// Qualifier:
|
||
// Parameter: ProTools proto
|
||
// Parameter: int port
|
||
//************************************
|
||
VinceControl(ProTools proto,int port);
|
||
|
||
~VinceControl();
|
||
//************************************
|
||
// Method: MoveToLocation 移动到某位置(据0点)
|
||
// FullName: VinceControl::MoveToLocation
|
||
// Access: public
|
||
// Returns: void
|
||
// Qualifier:
|
||
// Parameter: long Location 距离零点的位置
|
||
//************************************
|
||
void MoveToLocation(long Location, QString motornetid = "non");
|
||
|
||
//************************************
|
||
// Method: Handshacke
|
||
// FullName: VinceControl::Handshacke
|
||
// Access: public
|
||
// Returns: void
|
||
// Qualifier:
|
||
//************************************
|
||
|
||
void Handshacke(QString motorid = "non");
|
||
|
||
//************************************
|
||
// Method: setSyncMode 设置时间为双马达同步模式
|
||
// FullName: VinceControl::setSyncMode
|
||
// Access: public
|
||
// Returns: void
|
||
// Qualifier:
|
||
//************************************
|
||
void setSyncMode();
|
||
|
||
//************************************
|
||
// Method: SettingZeroLocation 马达归零
|
||
// FullName: VinceControl::SettingZeroLocation
|
||
// Access: public
|
||
// Returns: void
|
||
// Qualifier:
|
||
// Parameter: QString motorid
|
||
//************************************
|
||
void SettingZeroLocation(QString motorid = "non");
|
||
|
||
//************************************
|
||
// Method: 电机使能
|
||
// FullName: VinceControl::EnableMotro
|
||
// Access: public
|
||
// Returns: void
|
||
// Qualifier:
|
||
//************************************
|
||
void EnableMotro(QString motornetid="non");
|
||
//************************************
|
||
// Method: 取消使能
|
||
// FullName: VinceControl::DisableMotro
|
||
// Access: public
|
||
// Returns: void
|
||
// Qualifier:
|
||
//************************************
|
||
void DisableMotro(QString motornetid = "non");
|
||
//************************************
|
||
// Method: SendCommandtoSerial
|
||
// FullName: VinceControl::SendCommandtoSerial
|
||
// Access: public
|
||
// Returns: void
|
||
// Qualifier:
|
||
// Parameter: QString str 命令 不包含id 如果是nettcp 默认想第一个发送
|
||
//************************************
|
||
void SendCommandtoMotor(QString str);
|
||
|
||
//************************************
|
||
// Method: SendCommandtoMotor //两个参数 仅网络协议 第一个为命令 第二个为马达
|
||
// FullName: VinceControl::SendCommandtoMotor
|
||
// Access: public
|
||
// Returns: void
|
||
// Qualifier:
|
||
// Parameter: QString str
|
||
// Parameter: int motorid
|
||
//************************************
|
||
void SendCommandtoMotor(QString str,QString modor);
|
||
|
||
//************************************
|
||
// Method: MoveSetDistance 电机左移/右移 一定数量(不是距离)
|
||
// FullName: VinceControl::MoveSetDistance
|
||
// Access: public
|
||
// Returns: void
|
||
// Qualifier:
|
||
// Parameter: long distance
|
||
//************************************
|
||
void MoveSetDistance(long distance, QString motornetid = "non");
|
||
|
||
//************************************
|
||
// Method: MoveModar 电机左移/右移 direction是方向
|
||
// FullName: VinceControl::MoveModar
|
||
// Access: public
|
||
// Returns: void
|
||
// Qualifier:
|
||
// Parameter: bool direction 方向
|
||
//************************************
|
||
void MoveMotar(bool direction, QString motornetid = "non");
|
||
|
||
//************************************
|
||
// Method: SettingSpeed 设置速度
|
||
// FullName: VinceControl::SettingSpeed
|
||
// Access: public
|
||
// Returns: void
|
||
// Qualifier:
|
||
// Parameter: unsigned long Speed 速度 正值 无方向
|
||
//************************************
|
||
void SettingSpeed(unsigned long Speed, QString motornetid = "non");
|
||
|
||
//************************************
|
||
// Method: MovetoZero 归零
|
||
// FullName: VinceControl::MovetoZero
|
||
// Access: public
|
||
// Returns: void
|
||
// Qualifier:
|
||
//************************************
|
||
void MovetoZero(QString motornetid = "non");
|
||
|
||
//************************************
|
||
// Method: GetLocationNow 获取当前至0点位置
|
||
// FullName: VinceControl::GetLocationNow
|
||
// Access: public
|
||
// Returns: long 位置
|
||
// Qualifier:
|
||
//************************************
|
||
long GetLocationNow(QString motornetid = "non");
|
||
|
||
//************************************
|
||
// Method: SettingUpandDownSpeed 设置加减速度
|
||
// FullName: VinceControl::SettingUpandDownSpeed
|
||
// Access: public
|
||
// Returns: void
|
||
// Qualifier:
|
||
// Parameter: int addspeed 加速度
|
||
// Parameter: int downspeed 减速度
|
||
//************************************
|
||
void SettingUpandDownSpeed(int addspeed, int downspeed, QString motornetid = "non");
|
||
|
||
//************************************
|
||
// Method: StopMotormove 停止马达
|
||
// FullName: VinceControl::StopMotormove
|
||
// Access: public
|
||
// Returns: void
|
||
// Qualifier:
|
||
// Parameter: QString motornetid
|
||
//************************************
|
||
void StopMotormove(QString motornetid = "non");
|
||
|
||
|
||
//************************************
|
||
// Method: GetState
|
||
// FullName: VinceControl::GetState
|
||
// Access: public
|
||
// Returns: ByteBack
|
||
// Qualifier:
|
||
// Parameter: QString motorid
|
||
//************************************
|
||
ByteBack GetState(QString motorid = "non");
|
||
|
||
//************************************
|
||
// Method: SetRS485ID
|
||
// FullName: VinceControl::SetRS485ID
|
||
// Access: public
|
||
// Returns: void
|
||
// Qualifier:
|
||
// Parameter: QString id RS485 id
|
||
//************************************
|
||
void SetRS485ID(QString id);
|
||
|
||
//************************************
|
||
// Method: serialconnect
|
||
// FullName: VinceControl::serialconnect
|
||
// Access: public
|
||
// Returns: bool
|
||
// Qualifier:
|
||
// Parameter: QString comname 串口名称
|
||
// Parameter: QString bandrate 串口波特率
|
||
//************************************
|
||
bool serialconnect(QString comname, QString bandrate);
|
||
//************************************
|
||
// Method: initMotor 设置左右极限 s1是为左极限 且到s1后会将s1位置设置为0 s2是右极限 归零传感器是指为s1
|
||
// FullName: VinceControl::initMotor
|
||
// Access: public
|
||
// Returns: void
|
||
// Qualifier:
|
||
// Parameter: QString motornetid
|
||
//************************************
|
||
void initMotor(QString motornetid = "non");
|
||
QStringList Motorlist;
|
||
bool IsMotorInit;
|
||
signals:
|
||
void SendLogToCallClass(QString str);
|
||
public slots :
|
||
void onNewTcpClinetConnet();
|
||
|
||
void onClinetDisConnet();
|
||
private:
|
||
QSerialPort *serial;
|
||
void onReciveFromClinet(QString motornetid = "non");
|
||
|
||
ProTools protools;
|
||
QString RS485ID;
|
||
unsigned long speed;
|
||
QTcpServer *tcpServer; //定义监听套接字tcpServer
|
||
QList<QTcpSocket *>tcpSocket; //定义通信套接字tcpSocke
|
||
void SendLog(QString str);
|
||
QList<bool> isSettingSpeedlist;
|
||
QList<int> Speedlist;
|
||
bool SpeedisSet;
|
||
int Speednow;
|
||
void GetCommonRetrun(QByteArray &buf,QString id="non");
|
||
//
|
||
void SettingSpeedByThis(long Speed, QString motornetid = "non");
|
||
ByteBack TranslateBytedata(QByteArray buf, QString motornetid = "non");
|
||
void initme();
|
||
bool isSyncMotor;
|
||
|
||
|
||
};
|
||
|
||
#endif // VINCECONTROL_H
|