#ifndef MACHINE_H #define MACHINE_H #define BN_PROTOCOL_HEAD 0x05 // 机头板通讯协议(N5,N5A) #define BN_PROTOCOL_HCPS 0x06 // 勾剪扣换等(N6,N6A) #define BN_PROTOCOL_DCUT 0x10 // 剪线控制协议(D86) #include "tcpclient.h" #include "comport.h" #include #include #include #include "comm/datadef.h" #include "comm/protocol.h" #define USE_TCP_COMM 0 #define USE_SERIAL_COMM 1 #define WIREHEAD 4 class Machine: public QObject { Q_OBJECT public: explicit Machine(QObject *parent = NULL); virtual ~Machine(); public: void initConnectMode(s16 val = 0);//初始化通讯连接方式 void setConfigFileName(QString configfilename); void setComportName(QString portName);//设置串口名称 QString getConfigFileName(); int startCommunication(); private: QString m_configFileName; private: s16 m_connectMode; //通讯连接方式 0:网口,1:串口 // 通讯线程和网络连接 QThread * m_pTcpThread; TcpClient * m_pTcpClient; QThread * m_pComThread; ComPort * m_pComPort; // 连接 public: inline int isConnected() const { return m_connected; } private: int m_startComm; int m_connected; // 机器连接状态. 0, 未连接; 1, 连接中; 2, signals: // 发送数据到机器的信号 void siSendData(QByteArray dat); void siSendDataDone(); private slots: // 和线程通讯的槽 void slotConnectSta(int sta); // 连接状态改变的槽函数 void slotConnectErr(QString errinfo); // 接收到通讯错误槽函数 void slotReceiveData(QByteArray dat); // 接收到数据的槽函数 //---------------------------------------- // 通讯命令 // 机器信息 public: private: // 机器状态 public: inline int isStatusEn() const { return m_statusEn; } inline const MCStatus & getMcStatus() {m_statusEn = 0; return m_mcStatus; } void setMcStatusAsMc(u8 * buff, u16 len, int toggle); //机器信息 inline const MCInfo &getMcInfo(){return m_mcInfo;} //调试信息 inline const DebugInfo &getDebugInfo(){return m_debugInfo;} //外围板版本信息 inline const ExBoardInfo &getEXBInfo(){return m_exboardInfo;} //物联数据 inline const McLotData &getMcLotData(){return m_lotData;} private: int m_statusEn; // 状态有效标志 int m_statusToggle; MCStatus m_mcStatus; // 机器状态 MCInfo m_mcInfo; // 机器信息 DebugInfo m_debugInfo;//调试信息 ExBoardInfo m_exboardInfo; // 外围板信息 McLotData m_lotData; // 物联数据 // 机器参数 public: inline const ParaStruct & getMcPara() {/*m_mcParaEn = 0; */ return m_mcPara; } inline const ParaStruct & getWkPara() {/*m_wkParaEn = 0; */ return m_wkPara; } inline const ParaStruct & getPreMcPara() {/*m_mcParaEn = 0; */ return m_mcPrePara; } inline const ParaStruct & getPreWkPara() {/*m_wkParaEn = 0; */ return m_wkPrePara; } inline const EmbMvAng & getFrameAnglePara() {/*m_wkParaEn = 0; */ return m_frameAnglePara; } //获取索引外围板的参数,目前读取的是第一块的(所有外围板参数都和第一块的相同) //inline const HeadInfo & getHeadPara(int idx = 0) {/*m_mcParaEn = 0; */ return m_exboardInfo.headInfo[idx]; } private: ParaStruct m_mcPara; // 机器参数信息 配置信息 ParaStruct m_wkPara; // 工作参数信息 ParaStruct m_mcPrePara; // 机器预留参数 ParaStruct m_wkPrePara; // 工作预留参数 EmbMvAng m_frameAnglePara; // 动框角度参数 int m_mcParaEn; int m_wkParaEn; int m_mcPreParaEn; int m_wkPreParaEn; int m_frameAngleParaEn; public: inline int isSensorBmpEn() const { return m_sensorBmpEn; } inline const SensorsBitmap & getSensorDat() {/* m_sensorStaEn = 0; */ return m_sensorsStaDat; } inline const SensorsBitmap & getSensorBmp() {/* m_sensorBmpEn = 0; */ return m_sensorEnBmp; } inline int getTotalSendNum() { return m_totalSendNum; } inline int getTotalPacketNum() { return m_totalPacketNum; } private: SensorsBitmap m_sensorsStaDat; // 传感器信号状态位图 SensorsBitmap m_sensorEnBmp; // 传感器信号有效位图 int m_sensorStaEn; int m_sensorBmpEn; public: void setTcpConnectState(int state); void setMacKey(unsigned char * p_dat , int i_size); // 设置机器的密钥 HeadInfo* getHeadPara(int idx); // 文件传输结果 public: private: QTimer * m_pSendTimer; FileTransCtrl m_transCtrl; int m_fileTransEn; int m_transBreak; int m_totalSendNum;//传输文件时总共发送的包数 int m_totalPacketNum;//传输文件时总的包数 private slots: void onSendTimer(void); void slIfOpenSerialPort(int val);//串口是否打开 signals: // 发送给UI的信号 void siMcInfoChange(); // 机器信息改变信号 void siDebugInfo(); //调试信息改变信号 void siReceiveLotData(); // 接收物联数据信号 void siEXBInfoChange(); // 外围板版本信息改变信号 void siStatusChange(int); // 状态改变信号 void siParaChange(int type, int id); // 参数更新信号 void siEXBParaChange(); // 机头板参数更新信号 void siMemDataChange(int beginAddr); // 内存数据更新信号 void siSensorChange(SensorsBitmap map); // 传感信号更新信号 void siFileInfoChange(); // 文件信息更新信号 void siTransResultChange(); // 文件传输结果信号 void siTransProgress(u8 fileType, int send, int total); // 文件传输结果信号 void siSensorEnBitmap(SensorsBitmap map); // 传感信号有效位图更新信号 void siDataFilePos(DataFilePos pos); // 边框检查时起始点超出范围后下位机自动定新的起始点后发给上位机 public slots: void breakFileTrans(); // 打断文件传输 public: // 机器执行命令,读取下位机数据 void getInfoFromMachine(); void getExboardInfoFromMachine(); int getStatusFromMachine(); void getNetDataFromMachine(); // 读取机器物联数据 void getParasFromMachine(int type = -1, int id = 0); // 读取机器参数 void getHeadParasFromMachine(int id ,int nodeType = 4); // 读取机头板参数 void restoreFactorySetting(int type = -1); // 恢复出厂设置 void getSensorsFromMachine(int backtype = 0); void getTransResultFromMachine(int fileid); void getSensorEnBmpFromMachine(); // 获取传感器有效标志位图 void sleep(int sec); //void getHeadPara(); public: // 设置机器配置 // #define UCMD_SET_MC_CONFIG 0x0101 VLDP 无 设置机器的配置,包括信号使用的端口等信息 public: void resetAll();//全部复位 void motorZeroing();//电机归零 void station1Gluing();//工位1涂胶 void station2Gluing();//工位2涂胶 void headUpDown();// 机头升降 void toStation1Apos(); // 回工位1起始点 void toStation2Apos(); // 回工位2起始点 void toWaittingPos(); // 回等料点 void toRemoveGluePos(); // 回排胶点 void removeGlueOnce(); // 排一次胶 void adjustGlueHeight(); // 校准胶管高度 void setMcStatus(int stacode, int para = 0); // 设置机器状态 void cleanError(); // 清除错误 void setEnableWorkSta(); // 设置允许工作状态 void setDisableWorkSta(); // 设置禁止工作状态 void setEnableWorkTime(); // 设置允许工作时间状态 void setDisableWorkTime(); // 设置禁止工作时间状态 void resetOutput(); // 重置产量 void setToManualWork(); // 手动工作状态 void setToAutoWork(); // 自动工作状态 void switchWorkFile(int idx = 0); // 文件切换 void invalidateWorkFile(int idx = 0); // 文件失效 void cleanNewParaFlag(); // 清除新参数标志 void setSimulateWork(); // 模拟工作状态 void setNormalWork(); // 正常工作状态 void exitTraverStates(); //退出遍历状态 void exitDetectTest(); //退出断线测试 void resetBobbinCounter(); // 底线计数复位 void entrySensorScan(); // 进入扫描传感器状态 void exitSensorScan(); // 退出扫描传感器状态 void setElapsed(unsigned char i_type , unsigned char i_time); // 设置经过的时间 void testThreadBK(int type,int needle); // 测试断线检测,1是面线,2是底线 public: // 设置机器参数 void setParasToMachine(int type, ParaStruct & para); void setFrameAngleParasToMachine(int type, EmbMvAng & para); void setAParasToMachine(int type, int idx, u32 value); void setEXBHeadParasToMachine(HeadInfo & para,int id = 0);//设置机头板板参数 void setShutDownTime(u8 type, u32 time); void setMcPara(ParaStruct * pPara); void setWkPara(ParaStruct * pPara); void setMcPrePara(ParaStruct * pPara);//预留参数 void setWkPrePara(ParaStruct * pPara);//预留参数 void setFrameAnglePara(EmbMvAng * pPara);//动框角度参数设置 void setAMcPara(int id, u32 value); void setAWkPara(int id, u32 value); void setAMcPrePara(int id, u32 value);//预留参数 void setAWkPrePara(int id, u32 value);//预留参数 void setHeadBoardPara(HeadInfo * pPara, int id = 0);//设置机头板参数 void setHeadPara(ParaStruct * pPara,u16 ID);//设置机头参数 public: // 设置内存数据 // #define UCMD_SET_MEM_DATA 0x0104 // 设置内存数据 public: // 设置文件参数 void setFilePara(int fileidx, int fileid, DataFilePara & filePara); public: // 设置执行进度 void setFileExecProgress(int fileidx, int fileid, FileExecPara & fileExecPara); void setToDefaultParas(int type, u8 id = 0, u8 nodeType = 0); public slots: // 手动控制命令 void actionByhand(int actcode, int para1, int para2 = 0, int para3 = 0); void motoToZero(int obj); // 电机归零(辅助调试的功能,无安全保护和逻辑关系) void motoMove(int obj, int dir, int spd); // 电机移动(辅助调试的功能,无安全保护和逻辑关系) void outputCtrl(int obj, int act, int para); // 输出控制(辅助调试的功能,无安全保护和逻辑关系) void motoServoCtrl(int obj, int onoff); // 电机使能控制(辅助调试的功能,无安全保护和逻辑关系) void sewingMsServoOn(); void sewingMsServoOff(); // 缝纫主轴使能控制 void sewingMsRun(); // 缝纫主轴研车 void punchMsServoOn(); void punchMsServoOff(); // 冲孔主轴使能控制 void punchMsRun(); // 冲孔主轴研车 void embMsServoOn(); void embMsServoOff(); // 平绣主轴使能控制 void embMsRun(); //平绣主轴研车 void punchJog(); // 多头冲孔点动 void punchSwitchNeedle(int nNum); // 多头冲孔换刀 void embSwitchNeedle(int nNum); //绣花换色 void singlePunch(); // 单次冲孔 void punchMsDown(); // 冲头停下位 void punchDrawOutline(); //画轮廓线 void continuousOilSupply();//连续供油 void sewJog(); // 缝纫点动 void hookPos(); // 缝纫主轴去勾线位 void embHookPos(); // 平绣主轴去勾线位 void rotateProofread(); // 缝纫旋转校对 void embJog(); //平绣点动 void sewHeadLift(); // 缝纫机头升降 void manualAction(int obj, int para2 = 0, int para3 = 0); // 手动动作功能(日常使用功能,有安全保护和逻辑时序关系) void setWorkRange(); // 定工作范围 void autoSetWorkRange(); // 自动定工作范围 void manualOil(int nNum); // 手动加油 void quantityMoveFrame(s32 x,s32 y); // 定量移框 void moveFrameByHand(char xy, char dir, int spd); // 手动移框 void spindleJog(); // 主轴点动 void spindleTest(s32 para1, s32 para2); // 主轴研车 void encoderVal(int para); // M轴绝对值编码器值 void cutThreadUp(); // 剪上线 void cutThreadDn(); // 剪下线 void testADC(int num); // 测试电位器 //进入或退出状态(遍历设置、断线检测、退出勾刀测试) void enterOrExitStates(int obj, int para1 = 0, int para2 = 0, int para3 = 0, int para4 = 0); public: // 机器工作命令 void mcWorkCmd(int workcode, int para1 = 0 , int para2 = 0); void startWork(); // 启动工作 void pauseWork(); // 暂停工作 void allToReset(); // 流程复位 void allToZero(); // 全部归零 void gotoStartPos(); // 回起针点 void checkFrame(); // 边框检查 void sewCutThread(int nNum); // 缝纫剪线 void embCutThread(); void simulateFrame(); // 空走边框 void autoSetSoftLimit();//自动定软限位 void enterClothEmbroidery();//进入匹绣 void exitClothEmbroidery();//退出匹绣 void autoSetStart();//自动定起点 void gotoFeedPos(); // 回上料点 void setOffsetPos(); // 定偏移点 void gotoOffsetPos(); // 回偏移点 void punchRotToZero();//冲孔旋转去零位 void fastJump(int idx); // 前进回退 void gotoWorkPos(); // 回工作点 void gotoAnchorPos(); //回定位点 void gotoThreadPos(); //回穿线点 void gotoCenterPos(); // 回中心点 void gotoShuttlePos(); //回换梭位 void gotoZeroPos(); // 回零点 void gotoGorner(int nNum);// 回角点 void msRpmChange(int chgram,int flag); // 速度改变 void headBoardBusDetect();//机头板总线检测 void headSwitch(int para); //机头切换,para是切换的机头 void msAdjust(int step); // 针梭校对 void moveRotByHand(char dir, int spd); //手动旋转 public: // 移动到XY坐标命令 void moveFrameTo(int x, int y); public: // 文件传输命令 int sendFileProc(int type, int idx, int id, DataDs16FileHead * pfileHead, u8 * pDatBuff); int sendFileProc(int type, int idx, int id, DataDs16FileHead & fileHead, u8 * pDatBuff); int sendAPPFileProc(int type, int idx, int id, AppFileHead &fileHead, u8 *pDatBuff); int sendBoardFileProc(int type, int idx, int id, BoardFileHead &fileHead, u8 *pDatBuff); private: void startFileTrans(FileTransCtrl & transCtrl); void transFileData(FileTransCtrl & transCtrl, int pktidx); public: // 下位机系统升级命令 void updateFirmware(); // 下位机升级 void updateExBoard(u8 protocolType, u8 nodeId,u8 nodeType); // 外围板升级 }; #endif // MACHINE_H