/****************************************************** * 文件名 : 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 #include #include //监听套接字 #include //通信套接字 #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 QListtcpSocket; //定义通信套接字tcpSocke void SendLog(QString str); QList isSettingSpeedlist; QList 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