#include "deviceproxy.h" #include "rsensortozero.h" #include "machcode.h" #include "tohomecode.h" #include "csscancode.h" #include "sscancode.h" #include "mhcompcode.h" #include "rscompcode.h" #include "myexception.h" #include "exceptioncode.h" #include "ptpcode.h" #include "maxisabsmovecode.h" #include "rs_settings.h" #include "deviceinfo.h" #include "buffer0autoexecode.h" #include #include #include #include "cmvcamera.h" #include "modbustcp.h" #include "Barometer.h" #include "PanasonicHeightFind.h" #include "PowerMeter.h" #include "lightsource.h" #include "PowerAttenuator.h" #include "IPG_laser.h" #include #include "cppcodec/base64_default_rfc4648.hpp" #include "specificareaswidget.h" //注释 using namespace cv; //std::string base64_encode(const std::string& input) { // return cppcodec::base64_rfc4648::encode(input); //} //RMS_Dll rms; DeviceProxy* DeviceProxy::uniqueInstance = nullptr; DeviceProxy* DeviceProxy::instance() { if (!uniqueInstance) { uniqueInstance = new DeviceProxy(); } return uniqueInstance; } DeviceProxy::DeviceProxy(): acsCtl(new ACSController()),thread(this) { timer = new QTimer(this); timer->setInterval(100); connect(timer,SIGNAL(timeout()),this,SLOT(stateDetection())); worker = new CDeviceProxyWorker(this); connect(worker,SIGNAL(finished()),&thread,SLOT(quit())); worker->moveToThread(&thread); connect(&thread, SIGNAL(started()), worker, SLOT(doWork_custom()),Qt::UniqueConnection); connect(&thread, &QThread::finished, worker, &QObject::deleteLater); bRunning = false; emit RunSGL(!bRunning); lRunStopTime[0] = 0; lRunStopTime[1] = 0; thread.start(); step = 0; bool ret = false; Sleep(5000); pLaserMark = nullptr; // pLaserMark = new LaserMark(); // ret = pLaserMark->Init("C:\\JCZ"); // if (!ret) // { // if (pLaserMark != nullptr) // delete pLaserMark; // pLaserMark = nullptr; // pLaserMark = new LaserMark(); // ret = pLaserMark->Init("C:\\JCZ"); // if (!ret) // { // if (pLaserMark != nullptr) // delete pLaserMark; // pLaserMark = nullptr; // } // } // pCoordinate = nullptr; // pCoordinate = new Coordinate(); server = new QTcpServer(this); connect(server, &QTcpServer::newConnection, this, &DeviceProxy::ClientConnect); server->listen(QHostAddress::Any, 6688); // Mat img1 = cv::imread("1.bmp"); // srcImgs.push_back(img1); // Mat img2 = cv::imread("2.bmp"); // srcImgs.push_back(img2); RS_SETTINGS->beginGroup("device/Rposition"); p2tBuf[0] = RS_SETTINGS->readNumDEntry("/p2_t0"); p2tBuf[1] = RS_SETTINGS->readNumDEntry("/p2_t5"); p2tBuf[2] = RS_SETTINGS->readNumDEntry("/p2_t10"); p2tBuf[3] = RS_SETTINGS->readNumDEntry("/p2_t15"); p2tBuf[4] = RS_SETTINGS->readNumDEntry("/p2_t20"); p2tBuf[5] = RS_SETTINGS->readNumDEntry("/p2_t25"); p2tBuf[6] = RS_SETTINGS->readNumDEntry("/p2_t30"); p2tBuf[7] = RS_SETTINGS->readNumDEntry("/p2_t35"); p2tBuf[8] = RS_SETTINGS->readNumDEntry("/p2_t40"); p2tBuf[9] = RS_SETTINGS->readNumDEntry("/p2_t45"); p2tBuf[10] = RS_SETTINGS->readNumDEntry("/p2_t50"); p2tBuf[11] = RS_SETTINGS->readNumDEntry("/p2_t55"); p2tBuf[12] = RS_SETTINGS->readNumDEntry("/p2_t60"); p2tBuf[13] = RS_SETTINGS->readNumDEntry("/p2_t65"); p2tBuf[14] = RS_SETTINGS->readNumDEntry("/p2_t70"); p2tBuf[15] = RS_SETTINGS->readNumDEntry("/p2_t75"); p2tBuf[16] = RS_SETTINGS->readNumDEntry("/p2_t80"); p2tBuf[17] = RS_SETTINGS->readNumDEntry("/p2_t85"); p2tBuf[18] = RS_SETTINGS->readNumDEntry("/p2_t90"); p2tBuf[19] = RS_SETTINGS->readNumDEntry("/p2_t95"); p2tBuf[20] = RS_SETTINGS->readNumDEntry("/p2_t100"); p2sBuf[0] = RS_SETTINGS->readNumDEntry("/p2_s0"); p2sBuf[1] = RS_SETTINGS->readNumDEntry("/p2_s5"); p2sBuf[2] = RS_SETTINGS->readNumDEntry("/p2_s10"); p2sBuf[3] = RS_SETTINGS->readNumDEntry("/p2_s15"); p2sBuf[4] = RS_SETTINGS->readNumDEntry("/p2_s20"); p2sBuf[5] = RS_SETTINGS->readNumDEntry("/p2_s25"); p2sBuf[6] = RS_SETTINGS->readNumDEntry("/p2_s30"); p2sBuf[7] = RS_SETTINGS->readNumDEntry("/p2_s35"); p2sBuf[8] = RS_SETTINGS->readNumDEntry("/p2_s40"); p2sBuf[9] = RS_SETTINGS->readNumDEntry("/p2_s45"); p2sBuf[10] = RS_SETTINGS->readNumDEntry("/p2_s50"); p2sBuf[11] = RS_SETTINGS->readNumDEntry("/p2_s55"); p2sBuf[12] = RS_SETTINGS->readNumDEntry("/p2_s60"); // p2sBuf[13] = RS_SETTINGS->readNumDEntry("/p2_s65"); // p2sBuf[14] = RS_SETTINGS->readNumDEntry("/p2_s70"); // p2sBuf[15] = RS_SETTINGS->readNumDEntry("/p2_s75"); // p2sBuf[16] = RS_SETTINGS->readNumDEntry("/p2_s80"); // p2sBuf[17] = RS_SETTINGS->readNumDEntry("/p2_s85"); // p2sBuf[18] = RS_SETTINGS->readNumDEntry("/p2_s90"); // p2sBuf[19] = RS_SETTINGS->readNumDEntry("/p2_s95"); // p2sBuf[20] = RS_SETTINGS->readNumDEntry("/p2_s100"); RS_SETTINGS->endGroup(); for (int i=0;i<21;i++) { PPValues[i] = i*5; } } DeviceProxy::~DeviceProxy() { bRunning = false; // pBLLaserLib->DisConnect(); thread.quit(); thread.wait(); delete pLaserMark; } cv::Mat img_buf[22]; std::vector images; cv::Mat DeviceProxy::Func_merge(int left,int right) { //读取图片,截取拼接,NUMBER为张数 //边界通过 int left = 200;int right = 500; 设置 //函数返回拼接完成的cv::Mat //并且把cv::Mat转换为qimage放在img中 // std::string input_folder1 = "C:/Users/yining.wu/Documents/WXWork/1688855705521365/Cache/Image/2024-01/binary_mask.jpg"; // std::string input_folder2 = "C:/Users/yining.wu/Documents/WXWork/1688855705521365/Cache/Image/2024-01/企业微信截图_17062518386727.jpg"; // std::string input_folder3 = "C:/Users/yining.wu/Documents/WXWork/1688855705521365/Cache/Image/2024-01/企业微信截图_17062518386727.png"; cv::Mat img_buf[22]; std::vector images; // unsigned int size = 22; // // Loop through all the files and directories within directory for(int i =0;i<22;i++) { char buf[200]; //sprintf(buf,"%s.jpg",datetime.toString("yyyyMMddHHmmsszzz").toLocal8Bit().data()); sprintf(buf,"%d.jpg",i); img_buf[i] = imread(buf); // Crop the image // int left = 200; // int right = 500; cv::Rect roi(left, 0, right-left, img_buf[i].rows); cv::Mat cropped_image = img_buf[i](roi); images.push_back(cropped_image); } // Concatenate all images cv::Mat concatenated_image; cv::hconcat(images, concatenated_image); cv::imwrite("concatenated_image.jpg",concatenated_image); cv::cvtColor(concatenated_image, concatenated_image, cv::COLOR_BGR2RGB); //讲BGR转换为RGB // Save the concatenated image return concatenated_image; } void DeviceProxy::Record_xiao() { DEV->acsCtl->RToPointPos(DAXIS,90);//转到工作位 } double DeviceProxy::getPP(double ap,bool flag) { //从注册表中读取最新值 RS_SETTINGS->beginGroup("device/Rposition"); p2tBuf[0] = RS_SETTINGS->readNumDEntry("/p2_t0"); p2tBuf[1] = RS_SETTINGS->readNumDEntry("/p2_t5"); p2tBuf[2] = RS_SETTINGS->readNumDEntry("/p2_t10"); p2tBuf[3] = RS_SETTINGS->readNumDEntry("/p2_t15"); p2tBuf[4] = RS_SETTINGS->readNumDEntry("/p2_t20"); p2tBuf[5] = RS_SETTINGS->readNumDEntry("/p2_t25"); p2tBuf[6] = RS_SETTINGS->readNumDEntry("/p2_t30"); p2tBuf[7] = RS_SETTINGS->readNumDEntry("/p2_t35"); p2tBuf[8] = RS_SETTINGS->readNumDEntry("/p2_t40"); p2tBuf[9] = RS_SETTINGS->readNumDEntry("/p2_t45"); p2tBuf[10] = RS_SETTINGS->readNumDEntry("/p2_t50"); p2tBuf[11] = RS_SETTINGS->readNumDEntry("/p2_t55"); p2tBuf[12] = RS_SETTINGS->readNumDEntry("/p2_t60"); p2tBuf[13] = RS_SETTINGS->readNumDEntry("/p2_t65"); p2tBuf[14] = RS_SETTINGS->readNumDEntry("/p2_t70"); p2tBuf[15] = RS_SETTINGS->readNumDEntry("/p2_t75"); p2tBuf[16] = RS_SETTINGS->readNumDEntry("/p2_t80"); p2tBuf[17] = RS_SETTINGS->readNumDEntry("/p2_t85"); p2tBuf[18] = RS_SETTINGS->readNumDEntry("/p2_t90"); p2tBuf[19] = RS_SETTINGS->readNumDEntry("/p2_t95"); p2tBuf[20] = RS_SETTINGS->readNumDEntry("/p2_t100"); p2sBuf[0] = RS_SETTINGS->readNumDEntry("/p2_s0"); p2sBuf[1] = RS_SETTINGS->readNumDEntry("/p2_s5"); p2sBuf[2] = RS_SETTINGS->readNumDEntry("/p2_s10"); p2sBuf[3] = RS_SETTINGS->readNumDEntry("/p2_s15"); p2sBuf[4] = RS_SETTINGS->readNumDEntry("/p2_s20"); p2sBuf[5] = RS_SETTINGS->readNumDEntry("/p2_s25"); p2sBuf[6] = RS_SETTINGS->readNumDEntry("/p2_s30"); p2sBuf[7] = RS_SETTINGS->readNumDEntry("/p2_s35"); p2sBuf[8] = RS_SETTINGS->readNumDEntry("/p2_s40"); p2sBuf[9] = RS_SETTINGS->readNumDEntry("/p2_s45"); p2sBuf[10] = RS_SETTINGS->readNumDEntry("/p2_s50"); p2sBuf[11] = RS_SETTINGS->readNumDEntry("/p2_s55"); p2sBuf[12] = RS_SETTINGS->readNumDEntry("/p2_s60"); // p2sBuf[13] = RS_SETTINGS->readNumDEntry("/p2_s65"); // p2sBuf[14] = RS_SETTINGS->readNumDEntry("/p2_s70"); // p2sBuf[15] = RS_SETTINGS->readNumDEntry("/p2_s75"); // p2sBuf[16] = RS_SETTINGS->readNumDEntry("/p2_s80"); // p2sBuf[17] = RS_SETTINGS->readNumDEntry("/p2_s85"); // p2sBuf[18] = RS_SETTINGS->readNumDEntry("/p2_s90"); // p2sBuf[19] = RS_SETTINGS->readNumDEntry("/p2_s95"); // p2sBuf[20] = RS_SETTINGS->readNumDEntry("/p2_s100"); RS_SETTINGS->endGroup(); for (int i=0;i<21;i++) { PPValues[i] = i*5; } if (flag) { int i; for(i=0;i<20;i++) { if ((ap > p2tBuf[i]) && (ap <= p2tBuf[i+1])) break; } if (i>= 20) { return 0; } double ret = ((ap - p2tBuf[i])/(p2tBuf[i+1] - p2tBuf[i]))*(PPValues[i+1]-PPValues[i])+PPValues[i]; return ret; } else { int i; for(i=0;i<12;i++) { if ((ap > p2sBuf[i]) && (ap <= p2sBuf[i+1])) break; } if (i>= 12) { return 0; } double ret = ((ap - p2sBuf[i])/(p2sBuf[i+1] - p2sBuf[i]))*(PPValues[i+1]-PPValues[i])+PPValues[i]; return ret; } } void DeviceProxy::laserCtlCnn() { //pBLLaserLib->BLStart(); IPGLASER->OpenComm(); // using base64 = cppcodec::base64_rfc4648; // std::vector decoded = base64::decode("YW55IGNhcm5hbCBwbGVhc3VyZQ=="); // std::string str = base64_encode("kdkdkd"); } void DeviceProxy::laserCtlClose() { //pBLLaserLib->DisConnect(); IPGLASER->LaserClose(); IPGLASER->CloseComm(); } void DeviceProxy::laserCtlSet(QString strParam) { //pBLLaserLib->WriteParam(strParam); IPGLASER->SetParam(1); } void DeviceProxy::laserSetMode(int param) //设置出发模式 =》 0为TOD模式, 1为GATE模式 { //pBLLaserLib->SetMode(param); } void DeviceProxy::laserSetEmissionOnOff(int param) //设置内部激光器开光关光状态 =》 1为激光器出光, 0为激光器关光 { //pBLLaserLib->SetEmissionOnOff(param); } void DeviceProxy::laserSetExtTrigEnable(int param) //设置外部激光器触发使能状态 =》 1为激光器使能开, 0为激光器使能关 { //pBLLaserLib->SetExtTrigEnable(param); } void DeviceProxy::DEVInit() { try { DEVICE_INFO->printDeviceSystemInfo("设备初始化中..."); if(!devIsInit) { lastTaskIsFinish=true; devIsReset = false; RS_SETTINGS->beginGroup("device/Comm/NET"); QString ip = RS_SETTINGS->readEntry("/ip"); int port = RS_SETTINGS->readNumEntry("/port"); RS_SETTINGS->endGroup(); QByteArray qByAddr = ip.toLatin1(); char* addr = qByAddr.data(); acsCtl->connect(addr,port); acsCtl->resetMapEtherCatInputOutput(); RS_SETTINGS->beginGroup("device/DO"); int DOECATAddr = RS_SETTINGS->readNumEntry("/ECATAddr"); RS_SETTINGS->endGroup(); RS_SETTINGS->beginGroup("device/DI"); int DIECATAddr = RS_SETTINGS->readNumEntry("/ECATAddr"); RS_SETTINGS->endGroup(); acsCtl->mapEtherCatOutput(DOECATAddr,QString("DO1")); acsCtl->mapEtherCatOutput(DOECATAddr+2,QString("DO2")); acsCtl->mapEtherCatInput(DIECATAddr,QString("DI1")); acsCtl->mapEtherCatInput(DIECATAddr+2,QString("DI2")); char vname[] = ACSCTL_DO1_V; int do1 = acsCtl->getGlobalInt(vname); char vname2[] = ACSCTL_DO2_V; int do2 = acsCtl->getGlobalInt(vname2); RS_SETTINGS->beginGroup("device/DO"); QString vacuumSuckerDONumStr = RS_SETTINGS->readEntry("/vacuumSucker"); RS_SETTINGS->endGroup(); int vacuumSuckerDONum = vacuumSuckerDONumStr.toInt(); int mask = 1; mask = mask<getGlobalInt(vname); RS_SETTINGS->beginGroup("device/DO"); QString laserDONumStr = RS_SETTINGS->readEntry("/laser"); RS_SETTINGS->endGroup(); int laserDONum = laserDONumStr.toInt(); devLaserNum = laserDONum; mask = 1; mask = mask<LaserOpen(); devLaserState = 1; } else { emit laserCloseFSGL(); IPGLASER->LaserClose(); devLaserState = 0; } emit MHCompCloseFSGL(); if(acsCtl->getBufferRunState(1)) { acsCtl->stopBuffer(1); } if(acsCtl->getBufferRunState(8)) { acsCtl->stopBuffer(8); } acsCtl->disableComp(ZAXIS); if(acsCtl->getBufferRunState(5)) { acsCtl->stopBuffer(5); } emit MotionCompCloseFSGL(); acsCtl->stopBuffer(0); Buffer0AutoExeCode buffer0AutoExeCode; QByteArray qbyCode = buffer0AutoExeCode.getCode().toLatin1(); //QByteArray qbyCode = buffer0AutoExeCode.getCode_2().toLatin1(); //From R char* code = qbyCode.data(); acsCtl->loadBuffer(0,code); acsCtl->compileBuffer(0); RS_SETTINGS->beginGroup("device/RS"); int RSECATAddr = RS_SETTINGS->readNumEntry("/ECATAddr"); RS_SETTINGS->endGroup(); char RCECATAddrName[] = ACSCTL_RCECATADDR_V; acsCtl->setGlobalInt(RCECATAddrName,RSECATAddr); //char RCECATAddrName_Z0[] = ACSCTL_RCECATADDR_V_Z0; //From R //acsCtl->setGlobalInt(RCECATAddrName_Z0,RSECATAddr+4); //From R //这里写入acs(gaoding),dbuffer里加变量,界面加测距头距离,界面加测试,界面加显示距离 acsCtl->runBuffer(0); startStateDetection(); devIsInit = true; getResetState(); emit DEVInitStateChangedSGL(devIsInit && devIsReset); //emit DEVResetStateChangedSGL(devIsReset); } DEVICE_INFO->printDeviceSystemInfo("设备初始化完成"); } catch (MyException mye) { exceptHandl(MyException("设备初始化失败。",mye.getExceptCode())); } } void DeviceProxy::setAlarm(bool flag) { devIsAlarm = flag; } void DeviceProxy::setDataCheck(bool flag) { DataCheckFlag = flag; } void DeviceProxy::reset() { if(!devIsInit) { emit exceptSGL(MyException(QString("设备未初始化,无法执行复位操作。请先初始化。"),MY_WARN)); return; } if(!lastTaskIsFinish) { emit exceptSGL(MyException(QString("%1任务执行中,无法执行复位操作。请先停止运动或等待任务结束。").arg(lastTaskName),MY_WARN)); return; } if(bRunning) { emit exceptSGL(MyException(QString("自动运行执行中,请等待运行结束。"),MY_WARN)); return; } try { DEVICE_INFO->printDeviceSystemInfo("复位中..."); lastTaskIsFinish=false; lastTaskName="复位"; devIsReset = false; //emit DEVResetStateChangedSGL(devIsReset); emit DEVInitStateChangedSGL(devIsInit && devIsReset); acsCtl->stopBuffer(1); RS_SETTINGS->beginGroup("device/toHome/Pos"); double XAxisToHomePos = RS_SETTINGS->readNumDEntry("/XAxis"); double YAxisToHomePos = RS_SETTINGS->readNumDEntry("/YAxis"); double ZAxisToHomePos = RS_SETTINGS->readNumDEntry("/ZAxis"); double ZAAxisToHomePos = RS_SETTINGS->readNumDEntry("/ZAAxis"); double DAxisToHomePos = RS_SETTINGS->readNumDEntry("/DAxis"); double Z0AxisToHomePos = RS_SETTINGS->readNumDEntry("/Z0Axis"); double Z2AxisToHomePos = RS_SETTINGS->readNumDEntry("/Z2Axis"); RS_SETTINGS->endGroup(); RS_SETTINGS->beginGroup("device/toHome/zeroPosOffset"); double XAxisZeroPosOffset = RS_SETTINGS->readNumDEntry("/XAxis"); double YAxisZeroPosOffset = RS_SETTINGS->readNumDEntry("/YAxis"); double ZAxisZeroPosOffset = RS_SETTINGS->readNumDEntry("/ZAxis"); double ZAAxisZeroPosOffset = RS_SETTINGS->readNumDEntry("/ZAAxis"); double DAxisZeroPosOffset = RS_SETTINGS->readNumDEntry("/DAxis"); double Z0AxisZeroPosOffset = RS_SETTINGS->readNumDEntry("/Z0Axis"); double Z2AxisZeroPosOffset = RS_SETTINGS->readNumDEntry("/Z2Axis"); RS_SETTINGS->endGroup(); RS_SETTINGS->beginGroup("device/leftSLimit"); double XAxisLeftSLimit = RS_SETTINGS->readNumDEntry("/XAxis"); double YAxisLeftSLimit = RS_SETTINGS->readNumDEntry("/YAxis"); double ZAxisLeftSLimit = RS_SETTINGS->readNumDEntry("/ZAxis"); double ZAAxisLeftSLimit = RS_SETTINGS->readNumDEntry("/ZAAxis"); double DAxisLeftSLimit = RS_SETTINGS->readNumDEntry("/DAxis"); double Z0AxisLeftSLimit = RS_SETTINGS->readNumDEntry("/Z0Axis"); double Z2AxisLeftSLimit = RS_SETTINGS->readNumDEntry("/Z2Axis"); RS_SETTINGS->endGroup(); RS_SETTINGS->beginGroup("device/rightSLimit"); double XAxisRightSLimit = RS_SETTINGS->readNumDEntry("/XAxis"); double YAxisRightSLimit = RS_SETTINGS->readNumDEntry("/YAxis"); double ZAxisRightSLimit = RS_SETTINGS->readNumDEntry("/ZAxis"); double ZAAxisRightSLimit = RS_SETTINGS->readNumDEntry("/ZAAxis"); double DAxisRightSLimit = RS_SETTINGS->readNumDEntry("/DAxis"); double Z0AxisRightSLimit = RS_SETTINGS->readNumDEntry("/Z0Axis"); double Z2AxisRightSLimit = RS_SETTINGS->readNumDEntry("/Z2Axis"); RS_SETTINGS->endGroup(); RS_SETTINGS->beginGroup("device/toHome/Vel"); double XAxisVel = RS_SETTINGS->readNumDEntry("/XAxis"); double YAxisVel = RS_SETTINGS->readNumDEntry("/YAxis"); double ZAxisVel = RS_SETTINGS->readNumDEntry("/ZAxis"); double ZAAxisVel = RS_SETTINGS->readNumDEntry("/ZAAxis"); double DAxisVel = RS_SETTINGS->readNumDEntry("/DAxis"); double Z0AxisVel = RS_SETTINGS->readNumDEntry("/Z0Axis"); double Z2AxisVel = RS_SETTINGS->readNumDEntry("/Z2Axis"); RS_SETTINGS->endGroup(); RS_SETTINGS->beginGroup("device/tohome/findINDXVel"); double XAxisFindINDXVel = RS_SETTINGS->readNumDEntry("/XAxis"); double YAxisFindINDXVel = RS_SETTINGS->readNumDEntry("/YAxis"); double ZAxisFindINDXVel = RS_SETTINGS->readNumDEntry("/ZAxis"); double ZAAxisFindINDXVel = RS_SETTINGS->readNumDEntry("/ZAAxis"); double DAxisFindINDXVel = RS_SETTINGS->readNumDEntry("/DAxis"); double Z0AxisFindINDXVel = RS_SETTINGS->readNumDEntry("/Z0Axis"); double Z2AxisFindINDXVel = RS_SETTINGS->readNumDEntry("/Z2Axis"); RS_SETTINGS->endGroup(); RS_SETTINGS->beginGroup("device/ZAAxisSafe"); double ZAAxisToSafePosVel = 10;//RS_SETTINGS->readNumEntry("/vel"); RS_SETTINGS->endGroup(); ToHomeCode tohomeCode; tohomeCode.setZAAxisToSafePosVel(ZAAxisToSafePosVel); tohomeCode.setXAxisToHomePos(XAxisToHomePos); tohomeCode.setYAxisToHomePos(YAxisToHomePos); tohomeCode.setZAxisToHomePos(ZAxisToHomePos); tohomeCode.setZAAxisToHomePos(ZAAxisToHomePos); tohomeCode.setDAxisToHomePos(DAxisToHomePos); tohomeCode.setZ0AxisToHomePos(Z0AxisToHomePos); tohomeCode.setZ2AxisToHomePos(Z2AxisToHomePos); tohomeCode.setXAxisFindINDVel(XAxisFindINDXVel); tohomeCode.setYAxisFindINDVel(YAxisFindINDXVel); tohomeCode.setZAxisFindINDVel(ZAxisFindINDXVel); tohomeCode.setZAAxisFindINDVel(ZAAxisFindINDXVel); tohomeCode.setDAxisFindINDVel(DAxisFindINDXVel); tohomeCode.setZ0AxisFindINDVel(Z0AxisFindINDXVel); tohomeCode.setZ2AxisFindINDVel(Z2AxisFindINDXVel); tohomeCode.setXAxisINDZeroOffset(XAxisZeroPosOffset); tohomeCode.setYAxisINDZeroOffset(YAxisZeroPosOffset); tohomeCode.setZAxisINDZeroOffset(ZAxisZeroPosOffset); tohomeCode.setZAAxisINDZeroOffset(ZAAxisZeroPosOffset); tohomeCode.setDAxisINDZeroOffset(DAxisZeroPosOffset); tohomeCode.setZ0AxisINDZeroOffset(Z0AxisZeroPosOffset); tohomeCode.setZ2AxisINDZeroOffset(Z2AxisZeroPosOffset); tohomeCode.setXAxisSLLimit(XAxisLeftSLimit); tohomeCode.setXAxisSRLimit(XAxisRightSLimit); tohomeCode.setYAxisSLLimit(YAxisLeftSLimit); tohomeCode.setYAxisSRLimit(YAxisRightSLimit); tohomeCode.setZAxisSLLimit(ZAxisLeftSLimit); tohomeCode.setZAxisSRLimit(ZAxisRightSLimit); tohomeCode.setZAAxisSLLimit(ZAAxisLeftSLimit); tohomeCode.setZAAxisSRLimit(ZAAxisRightSLimit); tohomeCode.setDAxisSLLimit(DAxisLeftSLimit); tohomeCode.setDAxisSRLimit(DAxisRightSLimit); tohomeCode.setZ0AxisSLLimit(Z0AxisLeftSLimit); tohomeCode.setZ0AxisSRLimit(Z0AxisRightSLimit); tohomeCode.setZ2AxisSLLimit(Z2AxisLeftSLimit); tohomeCode.setZ2AxisSRLimit(Z2AxisRightSLimit); tohomeCode.setXAxisVel(XAxisVel); tohomeCode.setYAxisVel(YAxisVel); tohomeCode.setZAxisVel(ZAxisVel); tohomeCode.setZAAxisVel(ZAAxisVel); tohomeCode.setDAxisVel(DAxisVel); tohomeCode.setZ0AxisVel(Z0AxisVel); tohomeCode.setZ2AxisVel(Z2AxisVel); QByteArray qbyCode = tohomeCode.getCode().toLatin1(); char* code = qbyCode.data(); acsCtl->loadBuffer(1,code); acsCtl->compileBuffer(1); // 把所有轴回零状态变量置为0 char runFVName[] = ACSCTL_RUNF_V; acsCtl->setGlobalInt(runFVName,0); char XToHomeFVName[] = ACSCTL_XTOHOMEF_V; acsCtl->setGlobalInt(XToHomeFVName,0); char YToHomeFVName[] = ACSCTL_YTOHOMEF_V; acsCtl->setGlobalInt(YToHomeFVName,0); char ZToHomeFVName[] = ACSCTL_ZTOHOMEF_V; acsCtl->setGlobalInt(ZToHomeFVName,0); char ZAToHomeFVName[] = ACSCTL_ZATOHOMEF_V; acsCtl->setGlobalInt(ZAToHomeFVName,0); char DToHomeFVName[] = ACSCTL_DTOHOMEF_V; acsCtl->setGlobalInt(DToHomeFVName,0); char Z0ToHomeFVName[] = ACSCTL_Z0TOHOMEF_V; acsCtl->setGlobalInt(Z0ToHomeFVName,0); char Z2ToHomeFVName[] = ACSCTL_Z2TOHOMEF_V; acsCtl->setGlobalInt(Z2ToHomeFVName,0); acsCtl->runBuffer(1); connect(this,SIGNAL(CMDRunFinishSGL()),this,SLOT(resetFHandl())); reqCMDRunFState = true; } catch (MyException mye) { exceptHandl(MyException("复位失败。",mye.getExceptCode())); } } void DeviceProxy::reset_z() //音圈单独回零测试使用 { if(!devIsInit) { emit exceptSGL(MyException(QString("设备未初始化,无法执行复位操作。请先初始化。"),MY_WARN)); return; } if(!lastTaskIsFinish) { emit exceptSGL(MyException(QString("%1任务执行中,无法执行复位操作。请先停止运动或等待任务结束。").arg(lastTaskName),MY_WARN)); return; } if(bRunning) { emit exceptSGL(MyException(QString("自动运行执行中,请等待运行结束。"),MY_WARN)); return; } try { DEVICE_INFO->printDeviceSystemInfo("复位中..."); lastTaskIsFinish=false; lastTaskName="复位"; devIsReset = false; //emit DEVResetStateChangedSGL(devIsReset); emit DEVInitStateChangedSGL(devIsInit && devIsReset); acsCtl->stopBuffer(1); RS_SETTINGS->beginGroup("device/toHome/Pos"); double XAxisToHomePos = RS_SETTINGS->readNumDEntry("/XAxis"); double YAxisToHomePos = RS_SETTINGS->readNumDEntry("/YAxis"); double ZAxisToHomePos = RS_SETTINGS->readNumDEntry("/ZAxis"); double ZAAxisToHomePos = RS_SETTINGS->readNumDEntry("/ZAAxis"); double DAxisToHomePos = RS_SETTINGS->readNumDEntry("/DAxis"); double Z0AxisToHomePos = RS_SETTINGS->readNumDEntry("/Z0Axis"); double Z2AxisToHomePos = RS_SETTINGS->readNumDEntry("/Z2Axis"); RS_SETTINGS->endGroup(); RS_SETTINGS->beginGroup("device/toHome/zeroPosOffset"); double XAxisZeroPosOffset = RS_SETTINGS->readNumDEntry("/XAxis"); double YAxisZeroPosOffset = RS_SETTINGS->readNumDEntry("/YAxis"); double ZAxisZeroPosOffset = RS_SETTINGS->readNumDEntry("/ZAxis"); double ZAAxisZeroPosOffset = RS_SETTINGS->readNumDEntry("/ZAAxis"); double DAxisZeroPosOffset = RS_SETTINGS->readNumDEntry("/DAxis"); double Z0AxisZeroPosOffset = RS_SETTINGS->readNumDEntry("/Z0Axis"); double Z2AxisZeroPosOffset = RS_SETTINGS->readNumDEntry("/Z2Axis"); RS_SETTINGS->endGroup(); RS_SETTINGS->beginGroup("device/leftSLimit"); double XAxisLeftSLimit = RS_SETTINGS->readNumDEntry("/XAxis"); double YAxisLeftSLimit = RS_SETTINGS->readNumDEntry("/YAxis"); double ZAxisLeftSLimit = RS_SETTINGS->readNumDEntry("/ZAxis"); double ZAAxisLeftSLimit = RS_SETTINGS->readNumDEntry("/ZAAxis"); double DAxisLeftSLimit = RS_SETTINGS->readNumDEntry("/DAxis"); double Z0AxisLeftSLimit = RS_SETTINGS->readNumDEntry("/Z0Axis"); double Z2AxisLeftSLimit = RS_SETTINGS->readNumDEntry("/Z2Axis"); RS_SETTINGS->endGroup(); RS_SETTINGS->beginGroup("device/rightSLimit"); double XAxisRightSLimit = RS_SETTINGS->readNumDEntry("/XAxis"); double YAxisRightSLimit = RS_SETTINGS->readNumDEntry("/YAxis"); double ZAxisRightSLimit = RS_SETTINGS->readNumDEntry("/ZAxis"); double ZAAxisRightSLimit = RS_SETTINGS->readNumDEntry("/ZAAxis"); double DAxisRightSLimit = RS_SETTINGS->readNumDEntry("/DAxis"); double Z0AxisRightSLimit = RS_SETTINGS->readNumDEntry("/Z0Axis"); double Z2AxisRightSLimit = RS_SETTINGS->readNumDEntry("/Z2Axis"); RS_SETTINGS->endGroup(); RS_SETTINGS->beginGroup("device/toHome/Vel"); double XAxisVel = RS_SETTINGS->readNumDEntry("/XAxis"); double YAxisVel = RS_SETTINGS->readNumDEntry("/YAxis"); double ZAxisVel = RS_SETTINGS->readNumDEntry("/ZAxis"); double ZAAxisVel = RS_SETTINGS->readNumDEntry("/ZAAxis"); double DAxisVel = RS_SETTINGS->readNumDEntry("/DAxis"); double Z0AxisVel = RS_SETTINGS->readNumDEntry("/Z0Axis"); double Z2AxisVel = RS_SETTINGS->readNumDEntry("/Z2Axis"); RS_SETTINGS->endGroup(); RS_SETTINGS->beginGroup("device/tohome/findINDXVel"); double XAxisFindINDXVel = RS_SETTINGS->readNumDEntry("/XAxis"); double YAxisFindINDXVel = RS_SETTINGS->readNumDEntry("/YAxis"); double ZAxisFindINDXVel = RS_SETTINGS->readNumDEntry("/ZAxis"); double ZAAxisFindINDXVel = RS_SETTINGS->readNumDEntry("/ZAAxis"); double DAxisFindINDXVel = RS_SETTINGS->readNumDEntry("/DAxis"); double Z0AxisFindINDXVel = RS_SETTINGS->readNumDEntry("/Z0Axis"); double Z2AxisFindINDXVel = RS_SETTINGS->readNumDEntry("/Z2Axis"); RS_SETTINGS->endGroup(); RS_SETTINGS->beginGroup("device/ZAAxisSafe"); double ZAAxisToSafePosVel = RS_SETTINGS->readNumEntry("/vel"); RS_SETTINGS->endGroup(); ToHomeCode tohomeCode; tohomeCode.setZAAxisToSafePosVel(ZAAxisToSafePosVel); tohomeCode.setXAxisToHomePos(XAxisToHomePos); tohomeCode.setYAxisToHomePos(YAxisToHomePos); tohomeCode.setZAxisToHomePos(ZAxisToHomePos); tohomeCode.setZAAxisToHomePos(ZAAxisToHomePos); tohomeCode.setDAxisToHomePos(DAxisToHomePos); tohomeCode.setZ0AxisToHomePos(Z0AxisToHomePos); tohomeCode.setZ2AxisToHomePos(Z2AxisToHomePos); tohomeCode.setXAxisFindINDVel(XAxisFindINDXVel); tohomeCode.setYAxisFindINDVel(YAxisFindINDXVel); tohomeCode.setZAxisFindINDVel(ZAxisFindINDXVel); tohomeCode.setZAAxisFindINDVel(ZAAxisFindINDXVel); tohomeCode.setDAxisFindINDVel(DAxisFindINDXVel); tohomeCode.setZ0AxisFindINDVel(Z0AxisFindINDXVel); tohomeCode.setZ2AxisFindINDVel(Z2AxisFindINDXVel); tohomeCode.setXAxisINDZeroOffset(XAxisZeroPosOffset); tohomeCode.setYAxisINDZeroOffset(YAxisZeroPosOffset); tohomeCode.setZAxisINDZeroOffset(ZAxisZeroPosOffset); tohomeCode.setZAAxisINDZeroOffset(ZAAxisZeroPosOffset); tohomeCode.setDAxisINDZeroOffset(DAxisZeroPosOffset); tohomeCode.setZ0AxisINDZeroOffset(Z0AxisZeroPosOffset); tohomeCode.setZ2AxisINDZeroOffset(Z2AxisZeroPosOffset); tohomeCode.setXAxisSLLimit(XAxisLeftSLimit); tohomeCode.setXAxisSRLimit(XAxisRightSLimit); tohomeCode.setYAxisSLLimit(YAxisLeftSLimit); tohomeCode.setYAxisSRLimit(YAxisRightSLimit); tohomeCode.setZAxisSLLimit(ZAxisLeftSLimit); tohomeCode.setZAxisSRLimit(ZAxisRightSLimit); tohomeCode.setZAAxisSLLimit(ZAAxisLeftSLimit); tohomeCode.setZAAxisSRLimit(ZAAxisRightSLimit); tohomeCode.setDAxisSLLimit(DAxisLeftSLimit); tohomeCode.setDAxisSRLimit(DAxisRightSLimit); tohomeCode.setZ0AxisSLLimit(Z0AxisLeftSLimit); tohomeCode.setZ0AxisSRLimit(Z0AxisRightSLimit); tohomeCode.setZ2AxisSLLimit(Z2AxisLeftSLimit); tohomeCode.setZ2AxisSRLimit(Z2AxisRightSLimit); tohomeCode.setXAxisVel(XAxisVel); tohomeCode.setYAxisVel(YAxisVel); tohomeCode.setZAxisVel(ZAxisVel); tohomeCode.setZAAxisVel(ZAAxisVel); tohomeCode.setDAxisVel(DAxisVel); tohomeCode.setZ0AxisVel(Z0AxisVel); tohomeCode.setZ2AxisVel(Z2AxisVel); QByteArray qbyCode = tohomeCode.getCode_z().toLatin1(); char* code = qbyCode.data(); acsCtl->loadBuffer(1,code); acsCtl->compileBuffer(1); // 把所有轴回零状态变量置为0 char runFVName[] = ACSCTL_RUNF_V; acsCtl->setGlobalInt(runFVName,0); char XToHomeFVName[] = ACSCTL_XTOHOMEF_V; acsCtl->setGlobalInt(XToHomeFVName,0); char YToHomeFVName[] = ACSCTL_YTOHOMEF_V; acsCtl->setGlobalInt(YToHomeFVName,0); char ZToHomeFVName[] = ACSCTL_ZTOHOMEF_V; acsCtl->setGlobalInt(ZToHomeFVName,0); char ZAToHomeFVName[] = ACSCTL_ZATOHOMEF_V; acsCtl->setGlobalInt(ZAToHomeFVName,0); char DToHomeFVName[] = ACSCTL_DTOHOMEF_V; acsCtl->setGlobalInt(DToHomeFVName,0); char Z0ToHomeFVName[] = ACSCTL_Z0TOHOMEF_V; acsCtl->setGlobalInt(Z0ToHomeFVName,0); char Z2ToHomeFVName[] = ACSCTL_Z2TOHOMEF_V; acsCtl->setGlobalInt(Z2ToHomeFVName,0); acsCtl->runBuffer(1); connect(this,SIGNAL(CMDRunFinishSGL()),this,SLOT(resetFHandl())); reqCMDRunFState = true; } catch (MyException mye) { exceptHandl(MyException("复位失败。",mye.getExceptCode())); } } void DeviceProxy::XAxisCMoveN() { if(!devIsReset) { emit exceptSGL(MyException(QString("设备未初始化,未复位,X轴无法执行负向连续运动。请先复位。"),MY_WARN)); return; } if(!lastTaskIsFinish) { emit exceptSGL(MyException(QString("%1任务执行中,X轴无法执行负向连续运动。请先停止运动或等待任务结束。").arg(lastTaskName),MY_WARN)); return; } if(bRunning) { emit exceptSGL(MyException(QString("自动运行执行中,请等待运行结束。"),MY_WARN)); return; } if(XAxisLimitState==LEFT_SLIMIT) { emit exceptSGL(MyException(QString("X轴在左软限位,无法执行负向连续运动。请先移开限位。"),MY_WARN)); return; } if(XAxisLimitState==LEFT_LIMIT) { emit exceptSGL(MyException(QString("X轴在左限位,无法执行负向连续运动。请先移开限位。"),MY_WARN)); return; } int axisBuf[4] = {0}; axisBuf[0] = 1; int ret = AxisMoveSafeCheckXY(axisBuf,nullptr,nullptr); if(ret < 0) { emit exceptSGL(MyException(QString("晶碇与Z轴间距太小,不能执行动作。"),MY_WARN)); return; } try { DEVICE_INFO->printDeviceSystemInfo("X轴负向连续运动中..."); lastTaskIsFinish=false; lastTaskName="X轴负向连续运动"; // 加载速度设置 RS_SETTINGS->beginGroup("device/RMove/Vel"); double XAxisVel = RS_SETTINGS->readNumDEntry("/XAxis"); RS_SETTINGS->endGroup(); acsCtl->setVELParams(XAXIS,XAxisVel); acsCtl->jogNeg(XAXIS); } catch (MyException mye) { exceptHandl(MyException("X轴负方向连续运动失败。",mye.getExceptCode())); } } void DeviceProxy::XAxisCMoveNEnd() { try { if(!devIsReset) { return; } if(lastTaskIsFinish&&(lastTaskName=="X轴负向连续运动")) { return; } acsCtl->halt(XAXIS); lastTaskIsFinish=true; DEVICE_INFO->printDeviceSystemInfo(QString("X轴负向连续运动完成")); } catch (MyException mye) { exceptHandl(MyException("X轴负方向连续运动停止失败。",mye.getExceptCode())); } } void DeviceProxy::XAxisCMoveP() { if(!devIsReset) { emit exceptSGL(MyException(QString("设备未初始化,未复位,X轴无法执行正向连续运动。请先复位。"),MY_WARN)); return; } if(!lastTaskIsFinish) { emit exceptSGL(MyException(QString("%1任务执行中,X轴无法执行正向连续运动。请先停止运动或等待任务结束。").arg(lastTaskName),MY_WARN)); return; } if(bRunning) { emit exceptSGL(MyException(QString("自动运行执行中,请等待运行结束。"),MY_WARN)); return; } if(XAxisLimitState==RIGHT_SLIMIT) { emit exceptSGL(MyException(QString("X轴在右软限位,无法执行正向连续运动。请先移开限位。"),MY_WARN)); return; } if(XAxisLimitState==RIGHT_LIMIT) { emit exceptSGL(MyException(QString("X轴在右限位,无法执行正向连续运动。请先移开限位。"),MY_WARN)); return; } int axisBuf[4] = {0}; axisBuf[0] = 1; int ret = AxisMoveSafeCheckXY(axisBuf,nullptr,nullptr); if(ret < 0) { emit exceptSGL(MyException(QString("晶碇与Z轴间距太小,不能执行动作。"),MY_WARN)); return; } try { DEVICE_INFO->printDeviceSystemInfo("X轴正向连续运动中..."); lastTaskIsFinish=false; lastTaskName="X轴正向连续运动"; // 加载速度设置 RS_SETTINGS->beginGroup("device/RMove/Vel"); double XAxisVel = RS_SETTINGS->readNumDEntry("/XAxis"); RS_SETTINGS->endGroup(); acsCtl->setVELParams(XAXIS,XAxisVel); acsCtl->jogPos(XAXIS); } catch (MyException mye) { exceptHandl(MyException("X轴正向连续运动失败。",mye.getExceptCode())); } } void DeviceProxy::XAxisCMovePEnd() { try { if(!devIsReset) { return; } if(lastTaskIsFinish&&(lastTaskName=="X轴正向连续运动")) { return; } acsCtl->halt(XAXIS); lastTaskIsFinish=true; DEVICE_INFO->printDeviceSystemInfo(QString("X轴正向连续运动完成")); } catch (MyException mye) { exceptHandl(MyException("X轴正方向连续运动停止失败。",mye.getExceptCode())); } } void DeviceProxy::YAxisCMoveN() { if(!devIsReset) { emit exceptSGL(MyException(QString("设备未初始化,未复位,Y轴无法执行负向连续运动。请先复位。"),MY_WARN)); return; } if(!lastTaskIsFinish) { emit exceptSGL(MyException(QString("%1任务执行中,Y轴无法执行负向连续运动。请先停止运动或等待任务结束。").arg(lastTaskName),MY_WARN)); return; } if(bRunning) { emit exceptSGL(MyException(QString("自动运行执行中,请等待运行结束。"),MY_WARN)); return; } if(YAxisLimitState==LEFT_SLIMIT) { emit exceptSGL(MyException(QString("Y轴在左软限位,无法执行负向连续运动。请先移开限位。"),MY_WARN)); return; } if(YAxisLimitState==LEFT_LIMIT) { emit exceptSGL(MyException(QString("Y轴在左限位,无法执行负向连续运动。请先移开限位。"),MY_WARN)); return; } int axisBuf[4] = {0}; axisBuf[1] = 1; int ret = AxisMoveSafeCheckXY(axisBuf,nullptr,nullptr); if(ret < 0) { emit exceptSGL(MyException(QString("晶碇与Z轴间距太小,不能执行动作。"),MY_WARN)); return; } try { DEVICE_INFO->printDeviceSystemInfo("Y轴负向连续运动中..."); lastTaskIsFinish=false; lastTaskName="Y轴负向连续运动"; // 加载速度设置 RS_SETTINGS->beginGroup("device/RMove/Vel"); double YAxisVel = RS_SETTINGS->readNumDEntry("/YAxis"); RS_SETTINGS->endGroup(); acsCtl->setVELParams(YAXIS,YAxisVel); acsCtl->jogNeg(YAXIS); } catch (MyException mye) { exceptHandl(MyException("Y轴负向连续运动失败。",mye.getExceptCode())); } } void DeviceProxy::YAxisCMoveNEnd() { try { if(!devIsReset) { return; } if(lastTaskIsFinish&&(lastTaskName=="Y轴负向连续运动")) { return; } acsCtl->halt(YAXIS); lastTaskIsFinish=true; DEVICE_INFO->printDeviceSystemInfo(QString("Y轴负向连续运动完成")); } catch (MyException mye) { exceptHandl(MyException("Y轴负向连续运动停止失败。",mye.getExceptCode())); } } void DeviceProxy::YAxisCMoveP() { if(!devIsReset) { emit exceptSGL(MyException(QString("设备未初始化,未复位,Y轴无法执行正向连续运动。请先复位。"),MY_WARN)); return; } if(!lastTaskIsFinish) { emit exceptSGL(MyException(QString("%1任务执行中,Y轴无法执行正向连续运动。请先停止运动或等待任务结束。").arg(lastTaskName),MY_WARN)); return; } if(bRunning) { emit exceptSGL(MyException(QString("自动运行执行中,请等待运行结束。"),MY_WARN)); return; } if(YAxisLimitState==RIGHT_SLIMIT) { emit exceptSGL(MyException(QString("Y轴在右软限位,无法执行正向连续运动。请先移开限位。"),MY_WARN)); return; } if(YAxisLimitState==RIGHT_LIMIT) { emit exceptSGL(MyException(QString("Y轴在右限位,无法执行正向连续运动。请先移开限位。"),MY_WARN)); return; } int axisBuf[] = {0}; axisBuf[1] = 1; int ret = AxisMoveSafeCheckXY(axisBuf,nullptr,nullptr); if(ret < 0) { emit exceptSGL(MyException(QString("晶碇与Z轴间距太小,不能执行动作。"),MY_WARN)); return; } try { DEVICE_INFO->printDeviceSystemInfo("Y轴正向连续运动中..."); lastTaskIsFinish=false; lastTaskName="Y轴正向连续运动"; // 加载速度设置 RS_SETTINGS->beginGroup("device/RMove/Vel"); double YAxisVel = RS_SETTINGS->readNumDEntry("/YAxis"); RS_SETTINGS->endGroup(); acsCtl->setVELParams(YAXIS,YAxisVel); acsCtl->jogPos(YAXIS); } catch (MyException mye) { exceptHandl(MyException("Y轴正向连续运动失败。",mye.getExceptCode())); } } void DeviceProxy::YAxisCMovePEnd() { try { if(!devIsReset) { return; } if(lastTaskIsFinish&&(lastTaskName=="Y轴正向连续运动")) { return; } acsCtl->halt(YAXIS); lastTaskIsFinish=true; DEVICE_INFO->printDeviceSystemInfo(QString("Y轴正向连续运动完成")); } catch (MyException mye) { exceptHandl(MyException("Y轴正向连续运动停止失败。",mye.getExceptCode())); } } void DeviceProxy::ZAxisCMoveN() { if(!devIsReset) { emit exceptSGL(MyException(QString("设备未初始化,未复位,Z1轴无法执行负向连续运动。请先复位。"),MY_WARN)); return; } if(!lastTaskIsFinish) { emit exceptSGL(MyException(QString("%1任务执行中,Z1轴无法执行负向连续运动。请先停止运动或等待任务结束。").arg(lastTaskName),MY_WARN)); return; } if(bRunning) { emit exceptSGL(MyException(QString("自动运行执行中,请等待运行结束。"),MY_WARN)); return; } if(ZAxisLimitState==LEFT_SLIMIT) { emit exceptSGL(MyException(QString("Z1轴在左软限位,无法执行负向连续运动。请先移开限位。"),MY_WARN)); return; } if(ZAxisLimitState==LEFT_LIMIT) { emit exceptSGL(MyException(QString("Z1轴在左限位,无法执行负向连续运动。请先移开限位。"),MY_WARN)); return; } { int axisBuf[] = {0}; double distPos[] = {0}; int moveMode[2] = {0}; axisBuf[0] = 0; axisBuf[1] = 0; axisBuf[2] = 1; axisBuf[3] = 0; RS_SETTINGS->beginGroup("device/RMove"); double RMoveStepDistZ = RS_SETTINGS->readNumDEntry("/stepDist"); RS_SETTINGS->endGroup(); distPos[0] = XAxisCtPos; distPos[1] = YAxisCtPos; distPos[2] = ZAxisCtPos - RMoveStepDistZ; distPos[3] = ZAAxisCtPos; moveMode[0] = 1; moveMode[1] = 0; int ret = AxisMoveSafeCheckXY(axisBuf,distPos,moveMode); if(ret < 0) { emit exceptSGL(MyException(QString("晶碇与Z轴间距太小,不能执行动作。"),MY_WARN)); return; } } try { DEVICE_INFO->printDeviceSystemInfo("Z1轴负向连续运动中..."); lastTaskIsFinish=false; lastTaskName="Z1轴负向连续运动"; // 加载速度设置 RS_SETTINGS->beginGroup("device/RMove/Vel"); double ZAxisVel = RS_SETTINGS->readNumDEntry("/ZAxis"); RS_SETTINGS->endGroup(); acsCtl->setVELParams(ZAXIS,ZAxisVel); acsCtl->jogNeg(ZAXIS); } catch (MyException mye) { exceptHandl(MyException("Z1轴负向连续运动失败。",mye.getExceptCode())); } } void DeviceProxy::ZAxisCMoveNEnd() { try { if(!devIsReset) { return; } if(lastTaskIsFinish&&(lastTaskName=="Z1轴负向连续运动")) { return; } acsCtl->halt(ZAXIS); lastTaskIsFinish=true; ZZAPosCheckFlag = false; DEVICE_INFO->printDeviceSystemInfo(QString("Z1轴负向连续运动完成")); } catch (MyException mye) { exceptHandl(MyException("Z1轴负向连续运动停止失败。",mye.getExceptCode())); } } void DeviceProxy::ZAxisCMoveP() { if(!devIsReset) { emit exceptSGL(MyException(QString("设备未初始化,未复位,Z1轴无法执行正向连续运动。请先复位。"),MY_WARN)); return; } if(!lastTaskIsFinish) { emit exceptSGL(MyException(QString("%1任务执行中,Z1轴无法执行正向连续运动。请先停止运动或等待任务结束。").arg(lastTaskName),MY_WARN)); return; } if(bRunning) { emit exceptSGL(MyException(QString("自动运行执行中,请等待运行结束。"),MY_WARN)); return; } if(ZAxisLimitState==RIGHT_SLIMIT) { emit exceptSGL(MyException(QString("Z1轴在右软限位,无法执行正向连续运动。请先移开限位。"),MY_WARN)); return; } if(ZAxisLimitState==RIGHT_LIMIT) { emit exceptSGL(MyException(QString("Z1轴在左限位,无法执行正向连续运动。请先移开限位。"),MY_WARN)); return; } try { DEVICE_INFO->printDeviceSystemInfo("Z1轴正向连续运动中..."); lastTaskIsFinish=false; lastTaskName="Z1轴正向连续运动"; // 加载速度设置 if (!DEV->airValveDiCloseSts) { DEV->AirValveClose(); //DEV->AirValveClose2(); Sleep(2000); } RS_SETTINGS->beginGroup("device/RMove/Vel"); double ZAxisVel = RS_SETTINGS->readNumDEntry("/ZAxis"); RS_SETTINGS->endGroup(); acsCtl->setVELParams(ZAXIS,ZAxisVel); acsCtl->jogPos(ZAXIS); } catch (MyException mye) { exceptHandl(MyException("Z1轴正向连续运动失败。",mye.getExceptCode())); } } void DeviceProxy::ZAxisCMovePEnd() { try { if(!devIsReset) { return; } if(lastTaskIsFinish&&(lastTaskName=="Z1轴正向连续运动")) { return; } acsCtl->halt(ZAXIS); lastTaskIsFinish=true; ZZAPosCheckFlag = false; DEVICE_INFO->printDeviceSystemInfo(QString("Z1轴正向连续运动完成")); } catch (MyException mye) { exceptHandl(MyException("Z1轴正向连续运动停止失败。",mye.getExceptCode())); } } void DeviceProxy::ZAAxisCMoveN() { if(!devIsReset) { emit exceptSGL(MyException(QString("设备未初始化,未复位,Z轴无法执行负向连续运动。请先复位。"),MY_WARN)); return; } if(!lastTaskIsFinish) { emit exceptSGL(MyException(QString("%1任务执行中,Z轴无法执行负向连续运动。请先停止运动或等待任务结束。").arg(lastTaskName),MY_WARN)); return; } if(bRunning) { emit exceptSGL(MyException(QString("自动运行执行中,请等待运行结束。"),MY_WARN)); return; } if(ZAAxisLimitState==LEFT_SLIMIT) { emit exceptSGL(MyException(QString("Z轴在左软限位,无法执行负向连续运动。请先移开限位。"),MY_WARN)); return; } if(ZAAxisLimitState==LEFT_LIMIT) { emit exceptSGL(MyException(QString("Z轴在左限位,无法执行负向连续运动。请先移开限位。"),MY_WARN)); return; } { int axisBuf[4] = {0}; double distPos[4] = {0}; int moveMode[2] = {0}; axisBuf[0] = 0; axisBuf[1] = 0; axisBuf[2] = 0; axisBuf[3] = 1; RS_SETTINGS->beginGroup("device/RMove"); double RMoveStepDistZA = RS_SETTINGS->readNumDEntry("/stepDist"); RS_SETTINGS->endGroup(); distPos[0] = XAxisCtPos; distPos[1] = YAxisCtPos; distPos[2] = ZAxisCtPos; distPos[3] = ZAAxisCtPos - RMoveStepDistZA; moveMode[0] = 0; moveMode[1] = 1; int ret = AxisMoveSafeCheckXY(axisBuf,distPos,moveMode); if(ret < 0) { emit exceptSGL(MyException(QString("晶碇与Z轴间距太小,不能执行动作。"),MY_WARN)); return; } } try { DEVICE_INFO->printDeviceSystemInfo("Z轴负向连续运动中..."); lastTaskIsFinish=false; lastTaskName="Z轴负向连续运动"; // 加载速度设置 RS_SETTINGS->beginGroup("device/RMove/Vel"); double ZAAxisVel = RS_SETTINGS->readNumDEntry("/ZAAxis"); RS_SETTINGS->endGroup(); acsCtl->setVELParams(ZAAXIS,ZAAxisVel); acsCtl->jogNeg(ZAAXIS); } catch (MyException mye) { exceptHandl(MyException("Z轴负向连续运动失败。",mye.getExceptCode())); } } void DeviceProxy::ZAAxisCMoveNEnd() { try { if(!devIsReset) { return; } if(lastTaskIsFinish&&(lastTaskName=="Z轴负向连续运动")) { return; } acsCtl->halt(ZAAXIS); lastTaskIsFinish=true; ZZAPosCheckFlag = false; DEVICE_INFO->printDeviceSystemInfo(QString("Z轴负向连续运动完成")); } catch (MyException mye) { exceptHandl(MyException("Z轴负向连续运动停止失败。",mye.getExceptCode())); } } void DeviceProxy::ZAAxisCMoveP() { if(!devIsReset) { emit exceptSGL(MyException(QString("设备未初始化,未复位,Z无法执行正向连续运动。请先复位。"),MY_WARN)); return; } if(!lastTaskIsFinish) { emit exceptSGL(MyException(QString("%1任务执行中,Z无法执行正向连续运动。请先停止运动或等待任务结束。").arg(lastTaskName),MY_WARN)); return; } if(bRunning) { emit exceptSGL(MyException(QString("自动运行执行中,请等待运行结束。"),MY_WARN)); return; } if(ZAAxisLimitState==RIGHT_SLIMIT) { emit exceptSGL(MyException(QString("Z轴在右软限位,无法执行正向连续运动。请先移开限位。"),MY_WARN)); return; } if(ZAAxisLimitState==RIGHT_LIMIT) { emit exceptSGL(MyException(QString("Z轴在右限位,无法执行正向连续运动。请先移开限位。"),MY_WARN)); return; } try { DEVICE_INFO->printDeviceSystemInfo("Z轴正向连续运动中..."); lastTaskIsFinish=false; lastTaskName="Z轴正向连续运动"; // 加载速度设置 RS_SETTINGS->beginGroup("device/RMove/Vel"); double ZAAxisVel = RS_SETTINGS->readNumDEntry("/ZAAxis"); RS_SETTINGS->endGroup(); acsCtl->setVELParams(ZAAXIS,ZAAxisVel); acsCtl->jogPos(ZAAXIS); } catch (MyException mye) { exceptHandl(MyException("Z轴向正向连续运动失败。",mye.getExceptCode())); } } void DeviceProxy::ZAAxisCMovePEnd() { try { if(!devIsReset) { return; } if(lastTaskIsFinish&&(lastTaskName=="Z轴正向连续运动")) { return; } acsCtl->halt(ZAAXIS); lastTaskIsFinish=true; ZZAPosCheckFlag = false; DEVICE_INFO->printDeviceSystemInfo(QString("Z轴正向连续运动完成")); } catch (MyException mye) { exceptHandl(MyException("Z轴正向连续运动停止失败。",mye.getExceptCode())); } } void DeviceProxy::XAxisSMoveN() { if(!devIsReset) { emit exceptSGL(MyException(QString("设备未初始化,未复位,X轴无法执行负向点动。请先复位。"),MY_WARN)); return; } if(!lastTaskIsFinish) { emit exceptSGL(MyException(QString("%1任务执行中,X轴无法执行负向点动。请先停止运动或等待任务结束。").arg(lastTaskName),MY_WARN)); return; } if(bRunning) { emit exceptSGL(MyException(QString("自动运行执行中,请等待运行结束。"),MY_WARN)); return; } int axisBuf[4] = {0}; axisBuf[0] = 1; int ret = AxisMoveSafeCheckXY(axisBuf,nullptr,nullptr); if(ret < 0) { emit exceptSGL(MyException(QString("晶碇与Z轴间距太小,不能执行动作。"),MY_WARN)); return; } try { DEVICE_INFO->printDeviceSystemInfo("X轴负向点动中..."); lastTaskIsFinish=false; lastTaskName="X轴负向点动"; // 加载速度设置 RS_SETTINGS->beginGroup("device/RMove/Vel"); double XAxisVel = RS_SETTINGS->readNumDEntry("/XAxis"); acsCtl->setVELParams(XAXIS,XAxisVel); acsCtl->stopBuffer(1); char vname[]= ACSCTL_RUNF_V; acsCtl->setGlobalInt(vname,0); // 加载点动步距设置 RS_SETTINGS->beginGroup("device/RMove"); double RMoveStepDist = RS_SETTINGS->readNumDEntry("/stepDist"); RS_SETTINGS->endGroup(); PTPCode ptpCode; ptpCode.setMoveAxis(QString("X")); ptpCode.setMoveType(false); ptpCode.setTargetPos(QString("-%1").arg(RMoveStepDist,0,'f',4)); char *code; QByteArray byCode = ptpCode.getCode().toLatin1(); code = byCode.data(); acsCtl->loadBuffer(1,code); acsCtl->compileBuffer(1); acsCtl->runBuffer(1); connect(this,SIGNAL(CMDRunFinishSGL()),this,SLOT(XAxisSMoveNFHandl())); reqCMDRunFState = true; } catch (MyException mye) { exceptHandl(MyException("X轴负向点动失败。",mye.getExceptCode())); } } void DeviceProxy::XAxisSMoveP() { if(!devIsReset) { emit exceptSGL(MyException(QString("设备未初始化,未复位,X轴无法执行正向点动。请先复位。"),MY_WARN)); return; } if(!lastTaskIsFinish) { emit exceptSGL(MyException(QString("%1任务执行中,X轴无法执行正向点动。请先停止运动或等待任务结束。").arg(lastTaskName),MY_WARN)); return; } if(bRunning) { emit exceptSGL(MyException(QString("自动运行执行中,请等待运行结束。"),MY_WARN)); return; } int axisBuf[4] = {0}; axisBuf[0] = 1; int ret = AxisMoveSafeCheckXY(axisBuf,nullptr,nullptr); if(ret < 0) { emit exceptSGL(MyException(QString("晶碇与Z轴间距太小,不能执行动作。"),MY_WARN)); return; } try { DEVICE_INFO->printDeviceSystemInfo("X轴正向点动中..."); lastTaskIsFinish=false; lastTaskName="X轴正向点动"; // 加载速度设置 RS_SETTINGS->beginGroup("device/RMove/Vel"); double XAxisVel = RS_SETTINGS->readNumDEntry("/XAxis"); acsCtl->setVELParams(XAXIS,XAxisVel); acsCtl->stopBuffer(1); char vname[]= ACSCTL_RUNF_V; acsCtl->setGlobalInt(vname,0); // 加载点动步距设置 RS_SETTINGS->beginGroup("device/RMove"); double RMoveStepDist = RS_SETTINGS->readNumDEntry("/stepDist"); RS_SETTINGS->endGroup(); PTPCode ptpCode; ptpCode.setMoveAxis(QString("X")); ptpCode.setMoveType(false); ptpCode.setTargetPos(QString("%1").arg(RMoveStepDist,0,'f',4)); char *code; QByteArray byCode = ptpCode.getCode().toLatin1(); code = byCode.data(); acsCtl->loadBuffer(1,code); acsCtl->compileBuffer(1); acsCtl->runBuffer(1); connect(this,SIGNAL(CMDRunFinishSGL()),this,SLOT(XAxisSMovePFHandl())); reqCMDRunFState = true; } catch (MyException mye) { exceptHandl(MyException("X轴正向点动失败。",mye.getExceptCode())); } } void DeviceProxy::YAxisSMoveN() { if(!devIsReset) { emit exceptSGL(MyException(QString("设备未初始化,未复位,Y轴无法执行负向点动。请先复位。"),MY_WARN)); return; } if(!lastTaskIsFinish) { emit exceptSGL(MyException(QString("%1任务执行中,Y轴无法执行负向点动。请先停止运动或等待任务结束。").arg(lastTaskName),MY_WARN)); return; } if(bRunning) { emit exceptSGL(MyException(QString("自动运行执行中,请等待运行结束。"),MY_WARN)); return; } int axisBuf[4] = {0}; axisBuf[1] = 1; int ret = AxisMoveSafeCheckXY(axisBuf,nullptr,nullptr); if(ret < 0) { emit exceptSGL(MyException(QString("晶碇与Z轴间距太小,不能执行动作。"),MY_WARN)); return; } try { DEVICE_INFO->printDeviceSystemInfo("Y轴负向点动中..."); lastTaskIsFinish=false; lastTaskName="Y轴负向点动"; // 加载速度设置 RS_SETTINGS->beginGroup("device/RMove/Vel"); double YAxisVel = RS_SETTINGS->readNumDEntry("/YAxis"); acsCtl->setVELParams(YAXIS,YAxisVel); acsCtl->stopBuffer(1); char vname[]= ACSCTL_RUNF_V; acsCtl->setGlobalInt(vname,0); PTPCode ptpCode; ptpCode.setMoveAxis(QString("Y")); ptpCode.setMoveType(false); // 加载点动步距设置 RS_SETTINGS->beginGroup("device/RMove"); double RMoveStepDist = RS_SETTINGS->readNumDEntry("/stepDist"); RS_SETTINGS->endGroup(); ptpCode.setTargetPos(QString("-%1").arg(RMoveStepDist,0,'f',4)); char *code; QByteArray byCode = ptpCode.getCode().toLatin1(); code = byCode.data(); acsCtl->loadBuffer(1,code); acsCtl->compileBuffer(1); acsCtl->runBuffer(1); connect(this,SIGNAL(CMDRunFinishSGL()),this,SLOT(YAxisSMoveNFHandl())); reqCMDRunFState = true; } catch (MyException mye) { exceptHandl(MyException("Y轴负向点动失败。",mye.getExceptCode())); } } void DeviceProxy::YAxisSMoveP() { if(!devIsReset) { emit exceptSGL(MyException(QString("设备未初始化,未复位,Y轴无法执行正向点动。请先复位。"),MY_WARN)); return; } if(!lastTaskIsFinish) { emit exceptSGL(MyException(QString("%1任务执行中,Y轴无法执行正向点动。请先停止运动或等待任务结束。").arg(lastTaskName),MY_WARN)); return; } if(bRunning) { emit exceptSGL(MyException(QString("自动运行执行中,请等待运行结束。"),MY_WARN)); return; } int axisBuf[4] = {0}; axisBuf[1] = 1; int ret = AxisMoveSafeCheckXY(axisBuf,nullptr,nullptr); if(ret < 0) { emit exceptSGL(MyException(QString("晶碇与Z轴间距太小,不能执行动作。"),MY_WARN)); return; } try { DEVICE_INFO->printDeviceSystemInfo("Y轴正向点动中..."); lastTaskIsFinish=false; lastTaskName="Y轴正向点动"; // 加载速度设置 RS_SETTINGS->beginGroup("device/RMove/Vel"); double YAxisVel = RS_SETTINGS->readNumDEntry("/YAxis"); acsCtl->setVELParams(YAXIS,YAxisVel); acsCtl->stopBuffer(1); char vname[]= ACSCTL_RUNF_V; acsCtl->setGlobalInt(vname,0); PTPCode ptpCode; ptpCode.setMoveAxis(QString("Y")); ptpCode.setMoveType(false); // 加载点动步距设置 RS_SETTINGS->beginGroup("device/RMove"); double RMoveStepDist = RS_SETTINGS->readNumDEntry("/stepDist"); RS_SETTINGS->endGroup(); ptpCode.setTargetPos(QString("%1").arg(RMoveStepDist,0,'f',4)); char *code; QByteArray byCode = ptpCode.getCode().toLatin1(); code = byCode.data(); acsCtl->loadBuffer(1,code); acsCtl->compileBuffer(1); acsCtl->runBuffer(1); connect(this,SIGNAL(CMDRunFinishSGL()),this,SLOT(YAxisSMovePFHandl())); reqCMDRunFState = true; } catch (MyException mye) { exceptHandl(MyException("Y轴正向点动失败。",mye.getExceptCode())); } } void DeviceProxy::ZAxisSMoveN() { if(!devIsReset) { emit exceptSGL(MyException(QString("设备未初始化,未复位,Z1轴无法执行负向点动。请先复位。"),MY_WARN)); return; } if(!lastTaskIsFinish) { emit exceptSGL(MyException(QString("%1任务执行中,Z1轴无法执行负向点动。请先停止运动或等待任务结束。").arg(lastTaskName),MY_WARN)); return; } if(bRunning) { emit exceptSGL(MyException(QString("自动运行执行中,请等待运行结束。"),MY_WARN)); return; } { int axisBuf[4] = {0}; double distPos[4] = {0}; int moveMode[2] = {0}; axisBuf[0] = 0; axisBuf[1] = 0; axisBuf[2] = 1; axisBuf[3] = 0; RS_SETTINGS->beginGroup("device/RMove"); double RMoveStepDistZ = RS_SETTINGS->readNumDEntry("/stepDist"); RS_SETTINGS->endGroup(); distPos[0] = XAxisCtPos; distPos[1] = YAxisCtPos; distPos[2] = ZAxisCtPos - RMoveStepDistZ; distPos[3] = ZAAxisCtPos; moveMode[0] = 0; moveMode[1] = 0; int ret = AxisMoveSafeCheckXY(axisBuf,distPos,moveMode); if(ret < 0) { emit exceptSGL(MyException(QString("晶碇与Z轴间距太小,不能执行动作。"),MY_WARN)); return; } } try { DEVICE_INFO->printDeviceSystemInfo("Z1轴负向点动中..."); lastTaskIsFinish=false; lastTaskName="Z1轴负向点动"; // 加载速度设置 RS_SETTINGS->beginGroup("device/RMove/Vel"); double ZAxisVel = RS_SETTINGS->readNumDEntry("/ZAxis"); acsCtl->setVELParams(ZAXIS,ZAxisVel); acsCtl->stopBuffer(1); char vname[]= ACSCTL_RUNF_V; acsCtl->setGlobalInt(vname,0); PTPCode ptpCode; ptpCode.setMoveAxis(QString("Z")); ptpCode.setMoveType(false); // 加载点动步距设置 RS_SETTINGS->beginGroup("device/RMove"); double RMoveStepDist = RS_SETTINGS->readNumDEntry("/stepDist"); RS_SETTINGS->endGroup(); ptpCode.setTargetPos(QString("-%1").arg(RMoveStepDist,0,'f',4)); char *code; QByteArray byCode = ptpCode.getCode().toLatin1(); code = byCode.data(); acsCtl->loadBuffer(1,code); acsCtl->compileBuffer(1); acsCtl->runBuffer(1); connect(this,SIGNAL(CMDRunFinishSGL()),this,SLOT(ZAxisSMoveNFHandl())); reqCMDRunFState = true; } catch (MyException mye) { exceptHandl(MyException("Z1轴负向点动失败。",mye.getExceptCode())); } } void DeviceProxy::ZAxisSMoveP() { if(!devIsReset) { emit exceptSGL(MyException(QString("设备未初始化,未复位,Z1轴无法执行正向点动。请先复位。"),MY_WARN)); return; } if(!lastTaskIsFinish) { emit exceptSGL(MyException(QString("%1任务执行中,Z1轴无法执行正向点动。请先停止运动或等待任务结束。").arg(lastTaskName),MY_WARN)); return; } if(bRunning) { emit exceptSGL(MyException(QString("自动运行执行中,请等待运行结束。"),MY_WARN)); return; } try { DEVICE_INFO->printDeviceSystemInfo("Z1轴正向点动中..."); lastTaskIsFinish=false; lastTaskName="Z1轴正向点动"; if (!DEV->airValveDiCloseSts) { DEV->AirValveClose(); //DEV->AirValveClose2(); Sleep(2000); } // 加载速度设置 RS_SETTINGS->beginGroup("device/RMove/Vel"); double ZAxisVel = RS_SETTINGS->readNumDEntry("/ZAxis"); acsCtl->setVELParams(ZAXIS,ZAxisVel); acsCtl->stopBuffer(1); char vname[]=ACSCTL_RUNF_V; acsCtl->setGlobalInt(vname,0); PTPCode ptpCode; ptpCode.setMoveAxis(QString("Z")); ptpCode.setMoveType(false); // 加载点动步距设置 RS_SETTINGS->beginGroup("device/RMove"); double RMoveStepDist = RS_SETTINGS->readNumDEntry("/stepDist"); RS_SETTINGS->endGroup(); ptpCode.setTargetPos(QString("%1").arg(RMoveStepDist,0,'f',4)); char *code; QByteArray byCode = ptpCode.getCode().toLatin1(); code = byCode.data(); acsCtl->loadBuffer(1,code); acsCtl->compileBuffer(1); acsCtl->runBuffer(1); connect(this,SIGNAL(CMDRunFinishSGL()),this,SLOT(ZAxisSMovePFHandl())); reqCMDRunFState = true; } catch (MyException mye) { exceptHandl(MyException("Z1轴正向点动失败。",mye.getExceptCode())); } } void DeviceProxy::ZAAxisSMoveN() { if(!devIsReset) { emit exceptSGL(MyException(QString("设备未初始化,未复位,Z轴无法执行负向点动。请先复位。"),MY_WARN)); return; } if(!lastTaskIsFinish) { emit exceptSGL(MyException(QString("%1任务执行中,Z轴无法执行负向点动。请先停止运动或等待任务结束。").arg(lastTaskName),MY_WARN)); return; } if(bRunning) { emit exceptSGL(MyException(QString("自动运行执行中,请等待运行结束。"),MY_WARN)); return; } { int axisBuf[4] = {0}; double distPos[4] = {0}; int moveMode[2] = {0}; axisBuf[0] = 0; axisBuf[1] = 0; axisBuf[2] = 0; axisBuf[3] = 1; RS_SETTINGS->beginGroup("device/RMove"); double RMoveStepDistZA = RS_SETTINGS->readNumDEntry("/stepDist"); RS_SETTINGS->endGroup(); distPos[0] = XAxisCtPos; distPos[1] = YAxisCtPos; distPos[2] = ZAxisCtPos; distPos[3] = ZAAxisCtPos - RMoveStepDistZA; moveMode[0] = 0; moveMode[1] = 0; int ret = AxisMoveSafeCheckXY(axisBuf,distPos,moveMode); if(ret < 0) { emit exceptSGL(MyException(QString("晶碇与Z轴间距太小,不能执行动作。"),MY_WARN)); return; } } try { DEVICE_INFO->printDeviceSystemInfo("Z轴负向点动中..."); lastTaskIsFinish=false; lastTaskName="Z轴负向点动"; // 加载速度设置 RS_SETTINGS->beginGroup("device/RMove/Vel"); double ZAAxisVel = RS_SETTINGS->readNumDEntry("/ZAAxis"); acsCtl->setVELParams(ZAAXIS,ZAAxisVel); acsCtl->stopBuffer(1); char vname[]= ACSCTL_RUNF_V; acsCtl->setGlobalInt(vname,0); PTPCode ptpCode; ptpCode.setMoveAxis(QString("ZA")); ptpCode.setMoveType(false); // 加载点动步距设置 RS_SETTINGS->beginGroup("device/RMove"); double RMoveStepDist = RS_SETTINGS->readNumDEntry("/stepDist"); RS_SETTINGS->endGroup(); ptpCode.setTargetPos(QString("-%1").arg(RMoveStepDist,0,'f',4)); char *code; QByteArray byCode = ptpCode.getCode().toLatin1(); code = byCode.data(); acsCtl->loadBuffer(1,code); acsCtl->compileBuffer(1); acsCtl->runBuffer(1); connect(this,SIGNAL(CMDRunFinishSGL()),this,SLOT(ZAAxisSMoveNFHandl())); reqCMDRunFState = true; } catch (MyException mye) { exceptHandl(MyException("Z轴负向点动失败。",mye.getExceptCode())); } } void DeviceProxy::ZAAxisSMoveP() { if(!devIsReset) { emit exceptSGL(MyException(QString("设备未初始化,未复位,Z轴无法执行正向点动。请先复位。"),MY_WARN)); return; } if(!lastTaskIsFinish) { emit exceptSGL(MyException(QString("%1任务执行中,Z轴无法执行正向点动。请先停止运动或等待任务结束。").arg(lastTaskName),MY_WARN)); return; } if(bRunning) { emit exceptSGL(MyException(QString("自动运行执行中,请等待运行结束。"),MY_WARN)); return; } try { DEVICE_INFO->printDeviceSystemInfo("Z轴正向点动中..."); lastTaskIsFinish=false; lastTaskName="Z轴正向点动"; // 加载速度设置 RS_SETTINGS->beginGroup("device/RMove/Vel"); double ZAAxisVel = RS_SETTINGS->readNumDEntry("/ZAAxis"); acsCtl->setVELParams(ZAAXIS,ZAAxisVel); acsCtl->stopBuffer(1); char vname[]= ACSCTL_RUNF_V; acsCtl->setGlobalInt(vname,0); PTPCode ptpCode; ptpCode.setMoveAxis(QString("ZA")); ptpCode.setMoveType(false); // 加载点动步距设置 RS_SETTINGS->beginGroup("device/RMove"); double RMoveStepDist = RS_SETTINGS->readNumDEntry("/stepDist"); RS_SETTINGS->endGroup(); ptpCode.setTargetPos(QString("%1").arg(RMoveStepDist,0,'f',4)); char *code; QByteArray byCode = ptpCode.getCode().toLatin1(); code = byCode.data(); acsCtl->loadBuffer(1,code); acsCtl->compileBuffer(1); acsCtl->runBuffer(1); connect(this,SIGNAL(CMDRunFinishSGL()),this,SLOT(ZAAxisSMovePFHandl())); reqCMDRunFState = true; } catch (MyException mye) { exceptHandl(MyException("Z轴正向点动失败。",mye.getExceptCode())); } } void DeviceProxy::DAxisSMoveN() { if(!devIsReset) { emit exceptSGL(MyException(QString("设备未初始化,未复位,DD马达无法执行负向点动。请先复位。"),MY_WARN)); return; } if(!lastTaskIsFinish) { emit exceptSGL(MyException(QString("%1任务执行中,DD马达无法执行负向点动。请先停止运动或等待任务结束。").arg(lastTaskName),MY_WARN)); return; } if(bRunning) { emit exceptSGL(MyException(QString("自动运行执行中,请等待运行结束。"),MY_WARN)); return; } try { DEVICE_INFO->printDeviceSystemInfo("DD马达负向点动中..."); lastTaskIsFinish=false; lastTaskName="DD马达负向点动"; // 加载速度设置 RS_SETTINGS->beginGroup("device/DDMotor"); double DAxisVel = RS_SETTINGS->readNumDEntry("/Vel"); RS_SETTINGS->endGroup(); acsCtl->setVELParams(DAXIS,DAxisVel); acsCtl->stopBuffer(1); char vname[]= ACSCTL_RUNF_V; acsCtl->setGlobalInt(vname,0); PTPCode ptpCode; ptpCode.setMoveAxis(QString("D")); ptpCode.setMoveType(false); // 加载点动步距设置 RS_SETTINGS->beginGroup("device/DDMotor"); double RMoveStepDist = RS_SETTINGS->readNumDEntry("/step"); RS_SETTINGS->endGroup(); ptpCode.setTargetPos(QString("-%1").arg(RMoveStepDist)); char *code; QByteArray byCode = ptpCode.getCode().toLatin1(); code = byCode.data(); acsCtl->loadBuffer(1,code); acsCtl->compileBuffer(1); acsCtl->runBuffer(1); connect(this,SIGNAL(CMDRunFinishSGL()),this,SLOT(DAxisSMoveNFHandl())); reqCMDRunFState = true; } catch (MyException mye) { exceptHandl(MyException("DD马达负向点动失败。",mye.getExceptCode())); } } void DeviceProxy::DAxisSMoveP() { if(!devIsReset) { emit exceptSGL(MyException(QString("设备未初始化,未复位,DD马达无法执行正向点动。请先复位。"),MY_WARN)); return; } if(!lastTaskIsFinish) { emit exceptSGL(MyException(QString("%1任务执行中,DD马达无法执行正向点动。请先停止运动或等待任务结束。").arg(lastTaskName),MY_WARN)); return; } if(bRunning) { emit exceptSGL(MyException(QString("自动运行执行中,请等待运行结束。"),MY_WARN)); return; } try { DEVICE_INFO->printDeviceSystemInfo("DD马达正向点动中..."); lastTaskIsFinish=false; lastTaskName="DD马达正向点动"; // 加载速度设置 RS_SETTINGS->beginGroup("device/DDMotor"); double DAxisVel = RS_SETTINGS->readNumDEntry("/Vel"); RS_SETTINGS->endGroup(); acsCtl->setVELParams(DAXIS,DAxisVel); acsCtl->stopBuffer(1); char vname[]= ACSCTL_RUNF_V; acsCtl->setGlobalInt(vname,0); PTPCode ptpCode; ptpCode.setMoveAxis(QString("D")); ptpCode.setMoveType(false); // 加载点动步距设置 RS_SETTINGS->beginGroup("device/DDMotor"); double RMoveStepDist = RS_SETTINGS->readNumDEntry("/step"); RS_SETTINGS->endGroup(); ptpCode.setTargetPos(QString("%1").arg(RMoveStepDist)); char *code; QByteArray byCode = ptpCode.getCode().toLatin1(); code = byCode.data(); acsCtl->loadBuffer(1,code); acsCtl->compileBuffer(1); acsCtl->runBuffer(1); connect(this,SIGNAL(CMDRunFinishSGL()),this,SLOT(DAxisSMovePFHandl())); reqCMDRunFState = true; } catch (MyException mye) { exceptHandl(MyException("DD马达正向点动失败。",mye.getExceptCode())); } } //lihongchang void DeviceProxy::Z2AxisSMoveN() { if(!devIsReset) { emit exceptSGL(MyException(QString("设备未初始化,未复位,Z2轴无法执行负向点动。请先复位。"),MY_WARN)); return; } if(!lastTaskIsFinish) { emit exceptSGL(MyException(QString("%1任务执行中,Z2轴无法执行负向点动。请先停止运动或等待任务结束。").arg(lastTaskName),MY_WARN)); return; } if(bRunning) { emit exceptSGL(MyException(QString("自动运行执行中,请等待运行结束。"),MY_WARN)); return; } { //安全检查 } try { DEVICE_INFO->printDeviceSystemInfo("Z2轴负向点动中..."); lastTaskIsFinish=false; lastTaskName="Z2轴负向点动"; // 加载速度设置 // 加载速度设置 RS_SETTINGS->beginGroup("device/DDMotor"); double DAxisVel = RS_SETTINGS->readNumDEntry("/Vel"); RS_SETTINGS->endGroup(); acsCtl->setVELParams(Z2AXIS,DAxisVel); acsCtl->stopBuffer(1); char vname[]= ACSCTL_RUNF_V; acsCtl->setGlobalInt(vname,0); PTPCode ptpCode; ptpCode.setMoveAxis(QString("Z2")); ptpCode.setMoveType(false); // 加载点动步距设置 RS_SETTINGS->beginGroup("device/DDMotor"); double RMoveStepDist = RS_SETTINGS->readNumDEntry("/step"); RS_SETTINGS->endGroup(); ptpCode.setTargetPos(QString("-%1").arg(RMoveStepDist)); char *code; QByteArray byCode = ptpCode.getCode().toLatin1(); code = byCode.data(); acsCtl->loadBuffer(1,code); acsCtl->compileBuffer(1); acsCtl->runBuffer(1); connect(this,SIGNAL(CMDRunFinishSGL()),this,SLOT(Z2AxisSMoveNFHandl())); reqCMDRunFState = true; } catch (MyException mye) { exceptHandl(MyException("Z2轴负向点动失败。",mye.getExceptCode())); } } void DeviceProxy::Z2AxisSMoveP() { if(!devIsReset) { emit exceptSGL(MyException(QString("设备未初始化,未复位,Z2轴无法执行正向点动。请先复位。"),MY_WARN)); return; } if(!lastTaskIsFinish) { emit exceptSGL(MyException(QString("%1任务执行中,Z2轴无法执行正向点动。请先停止运动或等待任务结束。").arg(lastTaskName),MY_WARN)); return; } if(bRunning) { emit exceptSGL(MyException(QString("自动运行执行中,请等待运行结束。"),MY_WARN)); return; } { //安全检查 } try { DEVICE_INFO->printDeviceSystemInfo("Z2轴正向点动中..."); lastTaskIsFinish=false; lastTaskName="Z2轴正向点动"; // 加载速度设置 RS_SETTINGS->beginGroup("device/DDMotor"); double DAxisVel = RS_SETTINGS->readNumDEntry("/Vel"); RS_SETTINGS->endGroup(); acsCtl->setVELParams(Z2AXIS,DAxisVel); acsCtl->stopBuffer(1); char vname[]= ACSCTL_RUNF_V; acsCtl->setGlobalInt(vname,0); PTPCode ptpCode; ptpCode.setMoveAxis(QString("Z2")); ptpCode.setMoveType(false); // 加载点动步距设置 RS_SETTINGS->beginGroup("device/DDMotor"); double RMoveStepDist = RS_SETTINGS->readNumDEntry("/step"); RS_SETTINGS->endGroup(); ptpCode.setTargetPos(QString("%1").arg(RMoveStepDist)); char *code; QByteArray byCode = ptpCode.getCode().toLatin1(); code = byCode.data(); acsCtl->loadBuffer(1,code); acsCtl->compileBuffer(1); acsCtl->runBuffer(1); connect(this,SIGNAL(CMDRunFinishSGL()),this,SLOT(Z2AxisSMovePFHandl())); reqCMDRunFState = true; } catch (MyException mye) { exceptHandl(MyException("Z轴正向点动失败。",mye.getExceptCode())); } } void DeviceProxy::Z0AxisSMoveN() { if(!devIsReset) { emit exceptSGL(MyException(QString("设备未初始化,未复位,Z0轴无法执行负向点动。请先复位。"),MY_WARN)); return; } if(!lastTaskIsFinish) { emit exceptSGL(MyException(QString("%1任务执行中,Z0轴无法执行负向点动。请先停止运动或等待任务结束。").arg(lastTaskName),MY_WARN)); return; } if(bRunning) { emit exceptSGL(MyException(QString("自动运行执行中,请等待运行结束。"),MY_WARN)); return; } { //安全检查 } try { DEVICE_INFO->printDeviceSystemInfo("Z0轴负向点动中..."); lastTaskIsFinish=false; lastTaskName="Z0轴负向点动"; // 加载速度设置 RS_SETTINGS->beginGroup("device/DDMotor"); double DAxisVel = RS_SETTINGS->readNumDEntry("/Vel"); RS_SETTINGS->endGroup(); acsCtl->setVELParams(Z0AXIS,DAxisVel); acsCtl->stopBuffer(1); char vname[]= ACSCTL_RUNF_V; acsCtl->setGlobalInt(vname,0); PTPCode ptpCode; ptpCode.setMoveAxis(QString("Z0")); ptpCode.setMoveType(false); // 加载点动步距设置 RS_SETTINGS->beginGroup("device/DDMotor"); double RMoveStepDist = RS_SETTINGS->readNumDEntry("/step"); RS_SETTINGS->endGroup(); ptpCode.setTargetPos(QString("-%1").arg(RMoveStepDist)); char *code; QByteArray byCode = ptpCode.getCode().toLatin1(); code = byCode.data(); //qDebug()<< byCode; acsCtl->loadBuffer(1,code); acsCtl->compileBuffer(1); acsCtl->runBuffer(1); connect(this,SIGNAL(CMDRunFinishSGL()),this,SLOT(Z0AxisSMoveNFHandl())); reqCMDRunFState = true; } catch (MyException mye) { exceptHandl(MyException("Z0轴负向点动失败。",mye.getExceptCode())); } } void DeviceProxy::Z0AxisSMoveP() { if(!devIsReset) { emit exceptSGL(MyException(QString("设备未初始化,未复位,Z0轴无法执行正向点动。请先复位。"),MY_WARN)); return; } if(!lastTaskIsFinish) { emit exceptSGL(MyException(QString("%1任务执行中,Z0轴无法执行正向点动。请先停止运动或等待任务结束。").arg(lastTaskName),MY_WARN)); return; } if(bRunning) { emit exceptSGL(MyException(QString("自动运行执行中,请等待运行结束。"),MY_WARN)); return; } { //安全检查 } try { DEVICE_INFO->printDeviceSystemInfo("Z0轴正向点动中..."); lastTaskIsFinish=false; lastTaskName="Z0轴正向点动"; // 加载速度设置 RS_SETTINGS->beginGroup("device/DDMotor"); double DAxisVel = RS_SETTINGS->readNumDEntry("/Vel"); RS_SETTINGS->endGroup(); acsCtl->setVELParams(Z0AXIS,DAxisVel); acsCtl->stopBuffer(1); char vname[]= ACSCTL_RUNF_V; acsCtl->setGlobalInt(vname,0); PTPCode ptpCode; ptpCode.setMoveAxis(QString("Z0")); ptpCode.setMoveType(false); // 加载点动步距设置 RS_SETTINGS->beginGroup("device/DDMotor"); double RMoveStepDist = RS_SETTINGS->readNumDEntry("/step"); RS_SETTINGS->endGroup(); ptpCode.setTargetPos(QString("%1").arg(RMoveStepDist)); char *code; QByteArray byCode = ptpCode.getCode().toLatin1(); code = byCode.data(); acsCtl->loadBuffer(1,code); acsCtl->compileBuffer(1); acsCtl->runBuffer(1); connect(this,SIGNAL(CMDRunFinishSGL()),this,SLOT(Z0AxisSMovePFHandl())); reqCMDRunFState = true; } catch (MyException mye) { exceptHandl(MyException("Z0轴正向点动失败。",mye.getExceptCode())); } } void DeviceProxy::Z0AxisCMoveN() { if(!devIsReset) { emit exceptSGL(MyException(QString("设备未初始化,未复位,Z0轴无法执行负向连续运动。请先复位。"),MY_WARN)); return; } if(!lastTaskIsFinish) { emit exceptSGL(MyException(QString("%1任务执行中,Z0轴无法执行负向连续运动。请先停止运动或等待任务结束。").arg(lastTaskName),MY_WARN)); return; } if(bRunning) { emit exceptSGL(MyException(QString("自动运行执行中,请等待运行结束。"),MY_WARN)); return; } if(Z0AxisLimitState==LEFT_SLIMIT) { emit exceptSGL(MyException(QString("Z0轴在左软限位,无法执行负向连续运动。请先移开限位。"),MY_WARN)); return; } if(Z0AxisLimitState==LEFT_LIMIT) { emit exceptSGL(MyException(QString("Z0轴在左限位,无法执行负向连续运动。请先移开限位。"),MY_WARN)); return; } { //安全检查 } try { DEVICE_INFO->printDeviceSystemInfo("Z0轴负向连续运动中..."); lastTaskIsFinish=false; lastTaskName="Z0轴负向连续运动"; // 加载速度设置 RS_SETTINGS->beginGroup("device/DDMotor"); double DAxisVel = RS_SETTINGS->readNumDEntry("/Vel"); RS_SETTINGS->endGroup(); acsCtl->setVELParams(Z0AXIS,DAxisVel); acsCtl->jogNeg(Z0AXIS); } catch (MyException mye) { exceptHandl(MyException("Z轴负向连续运动失败。",mye.getExceptCode())); } } void DeviceProxy::Z0AxisCMoveNEnd() { try { if(!devIsReset) { return; } if(lastTaskIsFinish&&(lastTaskName=="Z0轴负向连续运动")) { return; } acsCtl->halt(Z0AXIS); lastTaskIsFinish=true; //ZZAPosCheckFlag = false; DEVICE_INFO->printDeviceSystemInfo(QString("Z0轴负向连续运动完成")); } catch (MyException mye) { exceptHandl(MyException("Z0轴负向连续运动停止失败。",mye.getExceptCode())); } } void DeviceProxy::Z0AxisCMoveP() { if(!devIsReset) { emit exceptSGL(MyException(QString("设备未初始化,未复位,Z0无法执行正向连续运动。请先复位。"),MY_WARN)); return; } if(!lastTaskIsFinish) { emit exceptSGL(MyException(QString("%1任务执行中,Z0无法执行正向连续运动。请先停止运动或等待任务结束。").arg(lastTaskName),MY_WARN)); return; } if(bRunning) { emit exceptSGL(MyException(QString("自动运行执行中,请等待运行结束。"),MY_WARN)); return; } if(Z0AxisLimitState==RIGHT_SLIMIT) { emit exceptSGL(MyException(QString("Z0轴在右软限位,无法执行正向连续运动。请先移开限位。"),MY_WARN)); return; } if(Z0AxisLimitState==RIGHT_LIMIT) { emit exceptSGL(MyException(QString("Z0轴在右限位,无法执行正向连续运动。请先移开限位。"),MY_WARN)); return; } try { DEVICE_INFO->printDeviceSystemInfo("Z0轴正向连续运动中..."); lastTaskIsFinish=false; lastTaskName="Z0轴正向连续运动"; // 加载速度设置 RS_SETTINGS->beginGroup("device/DDMotor"); double DAxisVel = RS_SETTINGS->readNumDEntry("/Vel"); RS_SETTINGS->endGroup(); acsCtl->setVELParams(Z0AXIS,DAxisVel); acsCtl->jogPos(Z0AXIS); } catch (MyException mye) { exceptHandl(MyException("Z0轴向正向连续运动失败。",mye.getExceptCode())); } } void DeviceProxy::Z0AxisCMovePEnd() { try { if(!devIsReset) { return; } if(lastTaskIsFinish&&(lastTaskName=="Z0轴正向连续运动")) { return; } acsCtl->halt(Z0AXIS); lastTaskIsFinish=true; //ZZAPosCheckFlag = false; DEVICE_INFO->printDeviceSystemInfo(QString("Z0轴正向连续运动完成")); } catch (MyException mye) { exceptHandl(MyException("Z0轴负向连续运动停止失败。",mye.getExceptCode())); } } //lihongchang void DeviceProxy::Z2AxisCMoveN() { if(!devIsReset) { emit exceptSGL(MyException(QString("设备未初始化,未复位,Z2轴无法执行负向连续运动。请先复位。"),MY_WARN)); return; } if(!lastTaskIsFinish) { emit exceptSGL(MyException(QString("%1任务执行中,Z2轴无法执行负向连续运动。请先停止运动或等待任务结束。").arg(lastTaskName),MY_WARN)); return; } if(bRunning) { emit exceptSGL(MyException(QString("自动运行执行中,请等待运行结束。"),MY_WARN)); return; } if(Z2AxisLimitState==LEFT_SLIMIT) { emit exceptSGL(MyException(QString("Z2轴在左软限位,无法执行负向连续运动。请先移开限位。"),MY_WARN)); return; } if(Z2AxisLimitState==LEFT_LIMIT) { emit exceptSGL(MyException(QString("Z2轴在左限位,无法执行负向连续运动。请先移开限位。"),MY_WARN)); return; } { //安全检查 } try { DEVICE_INFO->printDeviceSystemInfo("Z2轴负向连续运动中..."); lastTaskIsFinish=false; lastTaskName="Z2轴负向连续运动"; // 加载速度设置 RS_SETTINGS->beginGroup("device/DDMotor"); double DAxisVel = RS_SETTINGS->readNumDEntry("/Vel"); RS_SETTINGS->endGroup(); acsCtl->setVELParams(Z2AXIS,DAxisVel); acsCtl->jogNeg(Z2AXIS); } catch (MyException mye) { exceptHandl(MyException("Z2轴负向连续运动失败。",mye.getExceptCode())); } } void DeviceProxy::Z2AxisCMoveNEnd() { try { if(!devIsReset) { return; } if(lastTaskIsFinish&&(lastTaskName=="Z2轴负向连续运动")) { return; } acsCtl->halt(Z2AXIS); lastTaskIsFinish=true; //ZZAPosCheckFlag = false; DEVICE_INFO->printDeviceSystemInfo(QString("Z2轴负向连续运动完成")); } catch (MyException mye) { exceptHandl(MyException("Z2轴负向连续运动停止失败。",mye.getExceptCode())); } } void DeviceProxy::Z2AxisCMoveP() { if(!devIsReset) { emit exceptSGL(MyException(QString("设备未初始化,未复位,Z2无法执行正向连续运动。请先复位。"),MY_WARN)); return; } if(!lastTaskIsFinish) { emit exceptSGL(MyException(QString("%1任务执行中,Z2无法执行正向连续运动。请先停止运动或等待任务结束。").arg(lastTaskName),MY_WARN)); return; } if(bRunning) { emit exceptSGL(MyException(QString("自动运行执行中,请等待运行结束。"),MY_WARN)); return; } if(Z2AxisLimitState==RIGHT_SLIMIT) { emit exceptSGL(MyException(QString("Z2轴在右软限位,无法执行正向连续运动。请先移开限位。"),MY_WARN)); return; } if(Z2AxisLimitState==RIGHT_LIMIT) { emit exceptSGL(MyException(QString("Z2轴在右限位,无法执行正向连续运动。请先移开限位。"),MY_WARN)); return; } try { DEVICE_INFO->printDeviceSystemInfo("Z2轴正向连续运动中..."); lastTaskIsFinish=false; lastTaskName="Z2轴正向连续运动"; // 加载速度设置 RS_SETTINGS->beginGroup("device/DDMotor"); double DAxisVel = RS_SETTINGS->readNumDEntry("/Vel"); RS_SETTINGS->endGroup(); acsCtl->setVELParams(Z2AXIS,DAxisVel); acsCtl->jogPos(Z2AXIS); } catch (MyException mye) { exceptHandl(MyException("Z2轴向正向连续运动失败。",mye.getExceptCode())); } } void DeviceProxy::Z2AxisCMovePEnd() { try { if(!devIsReset) { return; } if(lastTaskIsFinish&&(lastTaskName=="Z2轴正向连续运动")) { return; } acsCtl->halt(Z2AXIS); lastTaskIsFinish=true; //ZZAPosCheckFlag = false; DEVICE_INFO->printDeviceSystemInfo(QString("Z2轴正向连续运动完成")); } catch (MyException mye) { exceptHandl(MyException("Z2轴负向连续运动停止失败。",mye.getExceptCode())); } } void DeviceProxy::DAxisCMoveN() { if(!devIsReset) { emit exceptSGL(MyException(QString("设备未初始化,未复位,DD马达无法执行负向连续运动。请先复位。"),MY_WARN)); return; } if(!lastTaskIsFinish) { emit exceptSGL(MyException(QString("%1任务执行中,DD马达无法执行负向连续运动。请先停止运动或等待任务结束。").arg(lastTaskName),MY_WARN)); return; } if(bRunning) { emit exceptSGL(MyException(QString("自动运行执行中,请等待运行结束。"),MY_WARN)); return; } { //安全检查 } try { DEVICE_INFO->printDeviceSystemInfo("DD马达负向连续运动中..."); lastTaskIsFinish=false; lastTaskName="DD马达负向连续运动"; // 加载速度设置 RS_SETTINGS->beginGroup("device/DDMotor"); double DAxisVel = RS_SETTINGS->readNumDEntry("/Vel"); RS_SETTINGS->endGroup(); acsCtl->setVELParams(DAXIS,DAxisVel); acsCtl->jogNeg(DAXIS); } catch (MyException mye) { exceptHandl(MyException("DD马达负向连续运动失败。",mye.getExceptCode())); } } void DeviceProxy::DAxisCMoveNEnd() { try { if(!devIsReset) { return; } if(lastTaskIsFinish&&(lastTaskName=="DD马达负向连续运动")) { return; } acsCtl->halt(DAXIS); lastTaskIsFinish=true; //ZZAPosCheckFlag = false; DEVICE_INFO->printDeviceSystemInfo(QString("DD马达负向连续运动完成")); } catch (MyException mye) { exceptHandl(MyException("DD马达负向连续运动停止失败。",mye.getExceptCode())); } } void DeviceProxy::DAxisCMoveP() { if(!devIsReset) { emit exceptSGL(MyException(QString("设备未初始化,未复位,DD马达无法执行正向连续运动。请先复位。"),MY_WARN)); return; } if(!lastTaskIsFinish) { emit exceptSGL(MyException(QString("%1任务执行中,DD马达无法执行正向连续运动。请先停止运动或等待任务结束。").arg(lastTaskName),MY_WARN)); return; } if(bRunning) { emit exceptSGL(MyException(QString("自动运行执行中,请等待运行结束。"),MY_WARN)); return; } try { DEVICE_INFO->printDeviceSystemInfo("DD马达正向连续运动中..."); lastTaskIsFinish=false; lastTaskName="DD马达正向连续运动"; // 加载速度设置 RS_SETTINGS->beginGroup("device/DDMotor"); double DAxisVel = RS_SETTINGS->readNumDEntry("/Vel"); RS_SETTINGS->endGroup(); acsCtl->setVELParams(DAXIS,DAxisVel); acsCtl->jogPos(DAXIS); } catch (MyException mye) { exceptHandl(MyException("DD马达向正向连续运动失败。",mye.getExceptCode())); } } void DeviceProxy::DAxisCMovePEnd() { try { if(!devIsReset) { return; } if(lastTaskIsFinish&&(lastTaskName=="DD马达正向连续运动")) { return; } acsCtl->halt(DAXIS); lastTaskIsFinish=true; //ZZAPosCheckFlag = false; DEVICE_INFO->printDeviceSystemInfo(QString("DD马达正向连续运动完成")); } catch (MyException mye) { exceptHandl(MyException("DD马达负向连续运动停止失败。",mye.getExceptCode())); } } void DeviceProxy::ABSMove_DZ0Z2() { // 加载PTP轴选择设置 RS_SETTINGS->beginGroup("device/DDMotor"); int AxisIsMove = RS_SETTINGS->readNumEntry("/motor",0); RS_SETTINGS->endGroup(); QString temp; if(AxisIsMove == 0) { temp+="DD马达"; } else if(AxisIsMove == 1) { temp+="Z0"; } else if(AxisIsMove == 2) { temp+="Z2"; } if(!devIsReset) { emit exceptSGL(MyException(QString("设备未初始化,未复位,%1无法执行绝对定位。请先完成复位。").arg(temp),MY_WARN)); return; } // if(!lastTaskIsFinish) { emit exceptSGL(MyException(QString("%1任务执行中,%2无法执行绝对定位。请先停止运动或等待任务结束。").arg(lastTaskName).arg(temp),MY_WARN)); return; } if(bRunning) { emit exceptSGL(MyException(QString("自动运行执行中,请等待运行结束。"),MY_WARN)); return; } //if(((XAxisIsMove)||(YAxisIsMove)) && (ZAxisIsMove || ZAAxisIsMove)) { //安全检查 } try { DEVICE_INFO->printDeviceSystemInfo("DD绝对定位执行中..."); lastTaskIsFinish=false; lastTaskName="DD绝对定位"; // acsCtl->stopBuffer(1); // char vname[]= ACSCTL_RUNF_V; // acsCtl->setGlobalInt(vname,0); // 加载PTP位置设置 RS_SETTINGS->beginGroup("device/DDMotor"); double dsbStepDDt = RS_SETTINGS->readNumDEntry("/step"); double dsbVelDD = RS_SETTINGS->readNumDEntry("/Vel"); RS_SETTINGS->endGroup(); QString moveAxis; if(AxisIsMove == 0) { moveAxis+="D"; } else if(AxisIsMove == 1) { moveAxis+="Z0"; } else if(AxisIsMove == 2) { moveAxis+="Z2"; } QString surCode{""}; surCode+= QString("ENABLE (%1)\n").arg(moveAxis); if(AxisIsMove == 0) { surCode += QString("VEL(D) = %1\n").arg(dsbVelDD)+ QString("ACC(D) = %1\n").arg(dsbVelDD*10)+ QString("DEC(D) = %1\n").arg(dsbVelDD*10)+ QString("JERK(D) = %1\n").arg(dsbVelDD*100)+ QString("KDEC(D) = %1\n").arg(dsbVelDD*100)+ QString("PTP/e (D),%1\n").arg(dsbStepDDt); } else if(AxisIsMove == 1) { { surCode+= QString("VEL(Z0) = %1\n").arg(dsbVelDD)+ QString("ACC(Z0) = %1\n").arg(dsbVelDD*10)+ QString("DEC(Z0) = %1\n").arg(dsbVelDD*10)+ QString("JERK(Z0) = %1\n").arg(dsbVelDD*100)+ QString("KDEC(Z0) = %1\n").arg(dsbVelDD*100)+ QString("PTP/e (Z0),%1\n").arg(dsbStepDDt); } } else { { surCode+= QString("VEL(Z2) = %1\n").arg(dsbVelDD)+ QString("ACC(Z2) = %1\n").arg(dsbVelDD*10)+ QString("DEC(Z2) = %1\n").arg(dsbVelDD*10)+ QString("JERK(Z2) = %1\n").arg(dsbVelDD*100)+ QString("KDEC(Z2) = %1\n").arg(dsbVelDD*100)+ QString("PTP/e (Z2),%1\n").arg(dsbStepDDt); } } surCode+= "runF = 1\n" "STOP"; char *code; QByteArray byCode = surCode.toLatin1(); code = byCode.data(); acsCtl->loadBuffer(1,code); acsCtl->compileBuffer(1); acsCtl->runBuffer(1); connect(this,SIGNAL(CMDRunFinishSGL()),this,SLOT(ABSMoveFHandl())); reqCMDRunFState = true; } catch (MyException mye) { exceptHandl(MyException(QString("%1绝对定位失败。").arg(temp),mye.getExceptCode())); } } void DeviceProxy::ABSMove_Z0_test() { acsCtl->ABSToPoint(Z0AXIS,0); } void DeviceProxy::ABSMove() { // 加载PTP轴选择设置 RS_SETTINGS->beginGroup("device/ABSMove/isMove"); int XAxisIsMove = RS_SETTINGS->readNumEntry("/XAxis",0); int YAxisIsMove = RS_SETTINGS->readNumEntry("/YAxis",0); int ZAxisIsMove = RS_SETTINGS->readNumEntry("/ZAxis",0); int ZAAxisIsMove = RS_SETTINGS->readNumEntry("/ZAAxis",0); RS_SETTINGS->endGroup(); QString temp; if(XAxisIsMove) temp+="X轴"; if(YAxisIsMove) { if(temp.isEmpty()) temp+="Y轴"; else temp+=",Y轴"; } if(ZAxisIsMove) { if(temp.isEmpty()) temp+="Z1轴"; else temp+=",Z1轴"; } if(ZAAxisIsMove) { if(temp.isEmpty()) temp+="Z轴"; else temp+=",Z轴"; } if(!devIsReset) { emit exceptSGL(MyException(QString("设备未初始化,未复位,%1无法执行绝对定位。请先完成复位。").arg(temp),MY_WARN)); return; } // if(!lastTaskIsFinish) { emit exceptSGL(MyException(QString("%1任务执行中,%2无法执行绝对定位。请先停止运动或等待任务结束。").arg(lastTaskName).arg(temp),MY_WARN)); return; } if(bRunning) { emit exceptSGL(MyException(QString("自动运行执行中,请等待运行结束。"),MY_WARN)); return; } if((!XAxisIsMove)&&(!YAxisIsMove)&&(!ZAxisIsMove)&&(!ZAAxisIsMove)) { emit exceptSGL(MyException(QString("没有选择执行绝对定位的轴。请选择待定位轴。"),MY_WARN)); return; } //if(((XAxisIsMove)||(YAxisIsMove)) && (ZAxisIsMove || ZAAxisIsMove)) { int axisBuf[4] = {0}; double distPos[4] = {0}; int moveMode[2] = {0}; RS_SETTINGS->beginGroup("device/ABSMove/Pos"); double myXAxisABSPos = RS_SETTINGS->readNumDEntry("/XAxis"); double myYAxisABSPos = RS_SETTINGS->readNumDEntry("/YAxis"); double myZAxisABSPos = RS_SETTINGS->readNumDEntry("/ZAxis"); double myZAAxisABSPos = RS_SETTINGS->readNumDEntry("/ZAAxis"); RS_SETTINGS->endGroup(); axisBuf[0] = XAxisIsMove; axisBuf[1] = YAxisIsMove; axisBuf[2] = ZAxisIsMove; axisBuf[3] = ZAAxisIsMove; distPos[0] = myXAxisABSPos; distPos[1] = myYAxisABSPos; distPos[2] = myZAxisABSPos; distPos[3] = myZAAxisABSPos; moveMode[0] = 0; moveMode[1] = 0; int ret = AxisMoveSafeCheckXY(axisBuf,distPos,moveMode); if(ret < 0) { emit exceptSGL(MyException(QString("晶碇与Z轴间距太小,不能执行动作。"),MY_WARN)); return; } } try { DEVICE_INFO->printDeviceSystemInfo("绝对定位执行中..."); lastTaskIsFinish=false; lastTaskName="绝对定位"; acsCtl->stopBuffer(1); char vname[]= ACSCTL_RUNF_V; acsCtl->setGlobalInt(vname,0); MAxisABSMoveCode mAxisABSMoveCode; RS_SETTINGS->beginGroup("device/ZAAxisSafe"); double ZAAxisSafePos = RS_SETTINGS->readNumEntry("/pos"); double ZAAxisToSafePosVel = RS_SETTINGS->readNumEntry("/vel"); RS_SETTINGS->endGroup(); mAxisABSMoveCode.setZAAxisSafePos(ZAAxisSafePos); mAxisABSMoveCode.setZAAxisToSafePosVel(ZAAxisToSafePosVel); mAxisABSMoveCode.setXAxisIsMove(XAxisIsMove); mAxisABSMoveCode.setYAxisIsMove(YAxisIsMove); mAxisABSMoveCode.setZAxisIsMove(ZAxisIsMove); mAxisABSMoveCode.setZAAxisIsMove(ZAAxisIsMove); //if((!XAxisIsMove)&&(!YAxisIsMove)) { mAxisABSMoveCode.disableZAAxisToSafePos(true); } // 加载PTP位置设置 RS_SETTINGS->beginGroup("device/ABSMove/Pos"); double XAxisABSPos = RS_SETTINGS->readNumDEntry("/XAxis"); double YAxisABSPos = RS_SETTINGS->readNumDEntry("/YAxis"); double ZAxisABSPos = RS_SETTINGS->readNumDEntry("/ZAxis"); double ZAAxisABSPos = RS_SETTINGS->readNumDEntry("/ZAAxis"); RS_SETTINGS->endGroup(); mAxisABSMoveCode.setXAxisTGPos(XAxisABSPos); mAxisABSMoveCode.setYAxisTGPos(YAxisABSPos); mAxisABSMoveCode.setZAxisTGPos(ZAxisABSPos); mAxisABSMoveCode.setZAAxisTGPos(ZAAxisABSPos); // 加载PTP位置设置 RS_SETTINGS->beginGroup("device/ABSMove/Vel"); double XAxisVel = RS_SETTINGS->readNumDEntry("/XAxis"); double YAxisVel = RS_SETTINGS->readNumDEntry("/YAxis"); double ZAxisVel = RS_SETTINGS->readNumDEntry("/ZAxis"); double ZAAxisVel = RS_SETTINGS->readNumDEntry("/ZAAxis"); RS_SETTINGS->endGroup(); mAxisABSMoveCode.setXAxisVel(XAxisVel); mAxisABSMoveCode.setYAxisVel(YAxisVel); mAxisABSMoveCode.setZAxisVel(ZAxisVel); mAxisABSMoveCode.setZAAxisVel(ZAAxisVel); char *code; QByteArray byCode = mAxisABSMoveCode.getCode().toLatin1(); code = byCode.data(); acsCtl->loadBuffer(1,code); acsCtl->compileBuffer(1); acsCtl->runBuffer(1); connect(this,SIGNAL(CMDRunFinishSGL()),this,SLOT(ABSMoveFHandl())); reqCMDRunFState = true; } catch (MyException mye) { exceptHandl(MyException(QString("%1绝对定位失败。").arg(temp),mye.getExceptCode())); } } void DeviceProxy:: RSToZero() { if(!devIsReset) { emit exceptSGL(MyException(QString("设备未初始化,未复位,无法执行测距传感器对零。请先完成复位。"),MY_WARN)); return; } if(!lastTaskIsFinish) { emit exceptSGL(MyException(QString("%1任务执行中,无法执行测距传感器对零。请先停止运动或等待任务结束。").arg(lastTaskName),MY_WARN)); return; } if(bRunning) { emit exceptSGL(MyException(QString("自动运行执行中,请等待运行结束。"),MY_WARN)); return; } try { lastTaskIsFinish=false; lastTaskName="测距传感器对零"; compCloseInSide(); acsCtl->disableComp(ZAXIS); if(acsCtl->getBufferRunState(5)) { acsCtl->stopBuffer(5); } emit MotionCompCloseFSGL(); RSToZeroInSide(); connect(this,SIGNAL(CMDRunFinishSGL()),this,SLOT(RSToZeroFHandl())); reqCMDRunFState = true; } catch (MyException mye) { exceptHandl(MyException("测距传感器对零失败。",mye.getExceptCode())); } } void DeviceProxy:: RSToZero_Z0() //From R { if(!devIsReset) { emit exceptSGL(MyException(QString("设备未初始化,未复位,无法执行测距传感器对零。请先完成复位。"),MY_WARN)); return; } if(!lastTaskIsFinish) { emit exceptSGL(MyException(QString("%1任务执行中,无法执行测距传感器对零。请先停止运动或等待任务结束。").arg(lastTaskName),MY_WARN)); return; } if(bRunning) { emit exceptSGL(MyException(QString("自动运行执行中,请等待运行结束。"),MY_WARN)); return; } try { lastTaskIsFinish=false; lastTaskName="R测距传感器对零"; RSToZeroInSide_Z0(); connect(this,SIGNAL(CMDRunFinishSGL()),this,SLOT(RSToZeroFHandl_Z0())); reqCMDRunFState = true; } catch (MyException mye) { exceptHandl(MyException("测距传感器对零失败。",mye.getExceptCode())); } } void DeviceProxy:: MachSmallArea() { if(!devIsReset) { emit exceptSGL(MyException(QString("设备未初始化,未复位,无法执行特定区域加工。请先完成复位。"),MY_WARN)); return; } if(!lastTaskIsFinish) { emit exceptSGL(MyException(QString("%1任务执行中,无法执行特定区域加工。请先停止运动或等待任务结束。").arg(lastTaskName),MY_WARN)); return; } if(bRunning) { emit exceptSGL(MyException(QString("自动运行执行中,请等待运行结束。"),MY_WARN)); return; } int axisBuf[4] = {0}; axisBuf[1] = 1; int ret = AxisMoveSafeCheckXY(axisBuf,nullptr,nullptr); if(ret < 0) { emit exceptSGL(MyException(QString("晶碇与Z轴间距太小,不能执行动作。"),MY_WARN)); return; } try { lastTaskIsFinish=false; lastTaskName="特定区域加工"; MachSmallAreaInSide(); connect(this,SIGNAL(CMDRunFinishSGL()),this,SLOT(MachSmallAreaFHandl())); reqCMDRunFState = true; } catch (MyException mye) { exceptHandl(MyException("特定区域加工失败。",mye.getExceptCode())); } } void DeviceProxy::SScan() { if(!devIsReset) { emit exceptSGL(MyException(QString("设备未初始化,未复位,无法执行面扫描。请先完成复位。"),MY_WARN)); return; } if(!lastTaskIsFinish) { emit exceptSGL(MyException(QString("%1任务执行中,无法执行面扫描。请先停止运动或等待任务结束。").arg(lastTaskName),MY_WARN)); return; } if(bRunning) { emit exceptSGL(MyException(QString("自动运行执行中,请等待运行结束。"),MY_WARN)); return; } try { lastTaskIsFinish=false; lastTaskName="面扫描"; SScanInSide(); connect(this,SIGNAL(CMDRunFinishSGL()),this,SLOT(SScanFHandl())); reqCMDRunFState = true; } catch (MyException mye) { exceptHandl(MyException("面扫描失败。",mye.getExceptCode())); } } void DeviceProxy::readSScanData() { try { DEVICE_INFO->printDeviceSystemInfo("面扫描数据读取中..."); lastTaskIsFinish=false; lastTaskName="读取面扫描数据"; int totalNum = 0; SScanArMsrZ = acsCtl->getGlobalReal("ArMsrZ",2,0,totalNum-1); SScanArPosY = acsCtl->getGlobalReal("ArPosY",2,0,totalNum-1); lastTaskIsFinish=true; DEVICE_INFO->printDeviceSystemInfo("读取面扫描数据完成..."); } catch (MyException mye) { exceptHandl(MyException("读取面扫描数据失败。",mye.getExceptCode())); } } void DeviceProxy::saveSScanData() { try{ DEVICE_INFO->printDeviceSystemInfo("保存面扫描数据中..."); lastTaskIsFinish=false; lastTaskName="保存面扫描数据"; QDateTime datetime = QDateTime::currentDateTime(); QString timestr = datetime.toString("ddHHmmzzz"); QString path = ""; if(path.right(1)!=QString("/")) { path+=QString("/"); } QFile zData(path+"scanArMsrZ_"+timestr+".csv");//加晶锭编号 QFile yData(path+"scanArMsrY_"+timestr+".csv"); if(zData.open(QFile::WriteOnly|QFile::Truncate)&&yData.open(QFile::WriteOnly|QFile::Truncate)) { QTextStream zOut(&zData); QTextStream yOut(&yData); for(auto i=0;iprintDeviceSystemInfo("保存面扫描数据完成"); } catch(MyException mye) { exceptHandl(MyException("保存面扫描数据失败。",mye.getExceptCode())); } } void DeviceProxy::buildSScanDataTable() { //找Y0,Y1 // startPos x y z zA RS_SETTINGS->beginGroup("device/SSCS"); double yWorkRange = RS_SETTINGS->readNumDEntry("/YRange",1.0); double yInterval = RS_SETTINGS->readNumDEntry("/YInterval",1.0); RS_SETTINGS->endGroup(); double ySampNum = int(yWorkRange/yInterval); const double sampPointInterval = 0.5; // v=100mm/s t采样时间间隔 = 1ms QVector startYIndexOdd,startYIndexEven; QVector realStartYOdd,realStartYEven; double startY=SSStartYPos; for(auto i=0;i=SScanArPosY.at(i))&&(startY<=SScanArPosY.at(i+1))) { startYIndexOdd.append(i); realStartYOdd.append(SScanArPosY.at(i)); } if((startY<=SScanArPosY.at(i))&&(startY>=SScanArPosY.at(i+1))) { if(0==int(SScanArPosY.at(i+1))) { continue; } startYIndexEven.append(i+1); realStartYEven.append(SScanArPosY.at(i+1)); } } //根据Y的索引号提取Z QVector> surfaceScanDataTableTemp; for(auto i=0;i arMsrZValidOdd; arMsrZValidOdd.append(SScanArMsrZ.at(index)); for(auto j=1;j<=ySampNum;j++) { index += int(yInterval/sampPointInterval); arMsrZValidOdd.append(SScanArMsrZ.at(index)); } surfaceScanDataTableTemp.append(arMsrZValidOdd); if(i>= startYIndexEven.size()) { continue; } index = startYIndexEven.at(i); QVector arMsrZValidEven; arMsrZValidEven.append(SScanArMsrZ.at(index)); for(auto j=1;j<=ySampNum;j++) { index -= int(yInterval/sampPointInterval); arMsrZValidEven.append(SScanArMsrZ.at(index)); } surfaceScanDataTableTemp.append(arMsrZValidEven); } SScanDataTable = surfaceScanDataTableTemp; } void DeviceProxy::saveSScanDataTable() { try{ DEVICE_INFO->printDeviceSystemInfo("保存面扫描数据2中..."); lastTaskIsFinish=false; lastTaskName="保存面扫描数据2"; QDateTime datetime = QDateTime::currentDateTime(); QString timestr = datetime.toString("ddHHmmzzz"); RS_SETTINGS->beginGroup("device/SSCS"); QString path = RS_SETTINGS->readEntry("/dataSavePath"); RS_SETTINGS->endGroup(); if(path.right(1)!=QString("/")) { path+=QString("/"); } QFile surfaceScanDataTableFile(path+ingotNumber+"_ScanDataTable_"+timestr+".csv"); if(surfaceScanDataTableFile.open(QFile::WriteOnly|QFile::Truncate)) { QTextStream surfaceScanDataTableOut(&surfaceScanDataTableFile); int cols = SScanDataTable.at(0).size(); int rows = SScanDataTable.size(); // y为行 for(auto i=0;iprintDeviceSystemInfo("保存面扫描数据2完成"); lastTaskIsFinish=true; } catch(MyException mye) { exceptHandl(MyException("保存面扫描数据2失败。",mye.getExceptCode())); } } void DeviceProxy::compSScan() { if(!devIsReset) { emit exceptSGL(MyException(QString("设备未初始化,未复位,无法执行扫描补偿。请先完成复位。"),MY_WARN)); return; } if(!lastTaskIsFinish) { emit exceptSGL(MyException(QString("%1任务执行中,无法执行扫描补偿。请先停止运动或等待任务结束。").arg(lastTaskName),MY_WARN)); return; } if(bRunning) { emit exceptSGL(MyException(QString("自动运行执行中,请等待运行结束。"),MY_WARN)); return; } int axisBuf[4] = {0}; axisBuf[1] = 1; int ret = AxisMoveSafeCheckXY(axisBuf,nullptr,nullptr); if(ret < 0) { emit exceptSGL(MyException(QString("晶碇与Z轴间距太小,不能执行动作。"),MY_WARN)); return; } // { // short value = 0; // if (BAROMETER->m_hComm == nullptr) // { // BAROMETER->getSerialSet("barometer"); // bool ret = BAROMETER->OpenComm(); // if (!ret) // { // emit exceptSGL(MyException(QString("检查真空吸盘状态失败!"),MY_WARN)); // return; // } // } // int ret = BAROMETER->GetHeightValue(18,1,&value); // if (ret != 0) // { // emit exceptSGL(MyException(QString("检查真空吸盘状态失败!"),MY_WARN)); // return; // } // double tmp = value / 10.0; // if (tmp > -10) // { // emit exceptSGL(MyException(QString("真空吸盘未开启真空!"),MY_WARN)); // return; // } // } try { lastTaskIsFinish=false; lastTaskName="补偿面扫描"; compSScanInSide(); connect(this,SIGNAL(CMDRunFinishSGL()),this,SLOT(compSScanFHandl())); reqCMDRunFState = true; } catch (MyException mye) { exceptHandl(MyException(mye.getExceptInfo(),mye.getExceptCode())); } } void DeviceProxy::readCompSScanData() { DEVICE_INFO->printDeviceSystemInfo("补偿面扫描数据读取中..."); char vname[]= ACSCTL_SAMPTOTALNUM; int totalNum = acsCtl->getGlobalInt(vname); char RSData[] = ACSCTL_RSDATA_V; char xPosData[] = ACSCTL_XPOSDATA_V ; CSS_RSData = acsCtl->getGlobalReal(RSData,1,0,totalNum-1); CSS_XPosData = acsCtl->getGlobalReal(xPosData,1,0,totalNum-1); DEVICE_INFO->printDeviceSystemInfo("读取补偿面扫描数据完成"); } void DeviceProxy::saveCompSScanData() { DEVICE_INFO->printDeviceSystemInfo("补偿面扫描数据保存中..."); QDateTime datetime = QDateTime::currentDateTime(); QString timestr = datetime.toString("ddHHmmzzz"); RS_SETTINGS->beginGroup("device/SSCS"); QString path = RS_SETTINGS->readEntry("/dataSavePath"); RS_SETTINGS->endGroup(); if(path.right(1)!=QString("/")) { path+=QString("/"); } QFile zData(path+ingotNumber+"_CSS_RSData_"+timestr+".csv"); QFile yData(path+ingotNumber+"_CSS_YPosData_"+timestr+".csv"); if(zData.open(QFile::WriteOnly|QFile::Truncate)&&yData.open(QFile::WriteOnly|QFile::Truncate)) { QTextStream zOut(&zData); QTextStream yOut(&yData); for(auto i=0;iprintDeviceSystemInfo("补偿面扫描数据保存成功..."); //添加异常代码 } void my_sort(double *a,int len) { int i=0; int j; double t; for(i=0;ia[j+1]) { t=a[j]; a[j]=a[j+1]; a[j+1]=t; } } } } double my_cal_data(double *a,int len) { int i=0; double t = 0; for(i=0;i 100) return a[postion]; data_buf_k[0] = 0; for (i=1; i data_mean)// = a[i] - a[i-1]; { break; } } if (i>=len) return a[postion]; double maxData = 0; int max_index = 0; for (i=0; i maxData) { maxData = fabs(data_buf_k[i]); max_index = i; } } for (i=0; i=0; i--) { //if (i< len-2) { if (fabs(data_buf_k[i]) <= data_mean) { break; } } } int fangw_min = i; if ((postion < fangw_min) || (postion > fangw_max)) { return a[postion]; } else { int lange1,lange2; lange1 = postion - fangw_min; lange2 = fangw_max - postion; if (lange1 <= lange2) return a[fangw_min]; else return a[fangw_max]; } //return max_index; } int my_cal_k(double *a,int len) { double data_buf_k[100]; double data_buf_k_abs[100]; //double data_mean_max = 0.001; double data_mean = 0.0003; int i; if (len > 100) return 0; data_buf_k[0] = 0; for (i=1; i maxData) { maxData = fabs(data_buf_k[i]); max_index = i; } } for (i=0; i data_mean_max) data_mean = data_mean_max; for (i=max_index; ibeginGroup("device/SSCS"); // double yWorkRange = RS_SETTINGS->readNumDEntry("/YRange",1.0); // double yInterval = RS_SETTINGS->readNumDEntry("/YInterval",1.0); // RS_SETTINGS->endGroup(); // //找Y0,Y1 // // startPos x y z zA // double ySampNum = int(yWorkRange/yInterval); // const double sampPointInterval = 0.1; // v=100mm/s t采样时间间隔 = 1ms // QVector startYIndexOdd,startYIndexEven; // QVector realStartYOdd,realStartYEven; // double startY=SSStartYPos; // for(auto i=0;i=CSS_YPosData.at(i))&&(startY<=CSS_YPosData.at(i+1))) // { // startYIndexOdd.append(i); // // 找到的实际Y起始位置 // realStartYOdd.append(CSS_YPosData.at(i)); // Y位置起始值 // } // // 偶数列 // if((startY<=CSS_YPosData.at(i))&&(startY>=CSS_YPosData.at(i+1))) // { // if(0==int(CSS_YPosData.at(i+1))) // { // continue; // } // startYIndexEven.append(i+1); // realStartYEven.append(CSS_YPosData.at(i+1)); // } // } // //根据Y的索引号提取Z // QVector> lookupTableTemp; // for(auto i=0;i startRSValueIndexOdd; // startRSValueIndexOdd.append(CSS_RSData.at(index)); // // 从第一列开始取测距值,随着循环开始取第三列、第四列... // for(auto j=1;j<=ySampNum;j++) // { // //取数据的步距 // double data; // index += int(yInterval/sampPointInterval); // { // //double data; // double data_buf[20]; // data = CSS_RSData.at(index); // if (data > -10) // { // int tmp_index,point_num; // tmp_index = index; // point_num = 15; // if (CSS_RSData.at(tmp_index-point_num) < -10) // { // int tmpkk; // for (tmpkk = point_num;tmpkk>0;tmpkk--) // { // if (CSS_RSData.at(tmp_index-tmpkk) > -10) // { // break; // } // } // tmp_index = tmp_index + (point_num - tmpkk); // } // if (CSS_RSData.at(tmp_index+point_num) < -10) // { // int tmpkk; // for (tmpkk = point_num;tmpkk>0;tmpkk--) // { // if (CSS_RSData.at(tmp_index+tmpkk) > -10) // { // break; // } // } // tmp_index = tmp_index - (point_num - tmpkk); // } // for (auto kkk=0;kkk<20;kkk++) // { // data_buf[kkk] = CSS_RSData.at(tmp_index-10+kkk); // } // my_sort(data_buf,20); // data = my_cal_data(&data_buf[5],10); // } // } // startRSValueIndexOdd.append(data); // } // lookupTableTemp.append(startRSValueIndexOdd); // // 偶数列比奇数列少一列 // if(i>= startYIndexEven.size()) // { // continue; // } // // 取偶数列数据 // index = startYIndexEven.at(i); // QVector arMsrZValidEven; // arMsrZValidEven.append(CSS_RSData.at(index)); // for(auto j=1;j<=ySampNum;j++) // { // double data; // index -= int(yInterval/sampPointInterval); // { // double data_buf[20]; // data = CSS_RSData.at(index); // if (data > -10) // { // int tmp_index,point_num; // point_num = 15; // tmp_index = index; // if (CSS_RSData.at(tmp_index-point_num) < -10) // { // int tmpkk; // for (tmpkk = point_num;tmpkk>0;tmpkk--) // { // if (CSS_RSData.at(tmp_index-tmpkk) > -10) // { // break; // } // } // tmp_index = tmp_index + (point_num - tmpkk); // } // if (CSS_RSData.at(tmp_index+point_num) < -10) // { // int tmpkk; // for (tmpkk = point_num;tmpkk>0;tmpkk--) // { // if (CSS_RSData.at(tmp_index+tmpkk) > -10) // { // break; // } // } // tmp_index = tmp_index - (point_num - tmpkk); // } // for (auto kkk=0;kkk<20;kkk++) // { // data_buf[kkk] = CSS_RSData.at(tmp_index-10+kkk); // } // my_sort(data_buf,20); // data = my_cal_data(&data_buf[5],10); // } // } // arMsrZValidEven.append(data); // } // lookupTableTemp.append(arMsrZValidEven); // } // lookupTable = lookupTableTemp; //} void DeviceProxy::buildLookupTable_lhc() { RS_SETTINGS->beginGroup("device/SSCS"); double xWorkRange = RS_SETTINGS->readNumDEntry("/XRange",1.0); double xInterval = RS_SETTINGS->readNumDEntry("/XInterval",1.0); RS_SETTINGS->endGroup(); //找Y0,Y1 // startPos x y z zA double dbHeightCheck = -0.03; double ySampNum = int(xWorkRange/xInterval); const double sampPointInterval = 0.5; // v=100mm/s t采样时间间隔 = 1ms QVector startXIndexOdd,startXIndexEven; QVector realStartXOdd,realStartXEven; double startX=SSStartXPos; //double data_buf[100]; const int PointNum = 4;//int(yInterval/sampPointInterval); for(auto i=0;i=CSS_XPosData.at(i))&&(startX<=CSS_XPosData.at(i+1))) { startXIndexOdd.append(i); // 找到的实际Y起始位置 realStartXOdd.append(CSS_XPosData.at(i)); // Y位置起始值 } // 偶数列 if((startX<=CSS_XPosData.at(i))&&(startX>=CSS_XPosData.at(i+1))) { if(0==int(CSS_XPosData.at(i+1))) { continue; } startXIndexEven.append(i+1); realStartXEven.append(CSS_XPosData.at(i+1)); } } //根据Y的索引号提取Z QVector> lookupTableTemp; for(auto i=0;i startRSValueIndexOdd; startRSValueIndexOdd.append(CSS_RSData.at(index)); // 从第一列开始取测距值,随着循环开始取第三列、第四列... for(auto j=1;j<=ySampNum;j++) { //取数据的步距 double data; index += int(xInterval/sampPointInterval); { //double data; data = CSS_RSData.at(index); if (data > dbHeightCheck) { int tmp_index,point_num; tmp_index = index; point_num = int(xInterval/sampPointInterval); if (CSS_RSData.at(tmp_index-point_num) < dbHeightCheck) { int tmpkk; for (tmpkk = point_num;tmpkk>0;tmpkk--) { if (CSS_RSData.at(tmp_index-tmpkk) > dbHeightCheck) { break; } } int s_index = tmp_index-tmpkk; if ((s_index + PointNum) > tmp_index) data = CSS_RSData.at(s_index + PointNum); startRSValueIndexOdd[startRSValueIndexOdd.size()-1] = CSS_RSData.at(s_index + PointNum); } else if (CSS_RSData.at(tmp_index+point_num) < dbHeightCheck) { int tmpkk; for (tmpkk = point_num;tmpkk>0;tmpkk--) { if (CSS_RSData.at(tmp_index+tmpkk) > dbHeightCheck) { break; } } //tmp_index = tmp_index - (point_num - tmpkk); //tmp_index = tmp_index+tmpkk; int s_index = tmp_index+tmpkk; if ((s_index - PointNum) < tmp_index) data = CSS_RSData.at(s_index - PointNum); } } else { int tmp_index,point_num;//,tmp_index_p,tmp_index_n; tmp_index = index; point_num = int(xInterval/sampPointInterval); if (CSS_RSData.at(tmp_index-point_num) > dbHeightCheck) { int tmpkk; for (tmpkk =0;tmpkk dbHeightCheck) { break; } } int s_index = tmp_index-tmpkk; data = CSS_RSData.at(s_index - PointNum); } } } startRSValueIndexOdd.append(data); } lookupTableTemp.append(startRSValueIndexOdd); // 偶数列比奇数列少一列 if(i>= startXIndexEven.size()) { continue; } // 取偶数列数据 index = startXIndexEven.at(i); QVector arMsrZValidEven; arMsrZValidEven.append(CSS_RSData.at(index)); for(auto j=1;j<=ySampNum;j++) { double data; index -= int(xInterval/sampPointInterval); { data = CSS_RSData.at(index); if (data > dbHeightCheck) { int tmp_index,point_num; tmp_index = index; point_num = int(xInterval/sampPointInterval); if (CSS_RSData.at(tmp_index-point_num) < dbHeightCheck) { int tmpkk; for (tmpkk = point_num;tmpkk>0;tmpkk--) { if (CSS_RSData.at(tmp_index-tmpkk) > dbHeightCheck) { break; } } int s_index = tmp_index-tmpkk; if ((s_index + PointNum) > tmp_index) data = CSS_RSData.at(s_index + PointNum); } else if (CSS_RSData.at(tmp_index+point_num) < dbHeightCheck) { int tmpkk; for (tmpkk = point_num;tmpkk>0;tmpkk--) { if (CSS_RSData.at(tmp_index+tmpkk) > dbHeightCheck) { break; } } //tmp_index = tmp_index - (point_num - tmpkk); //tmp_index = tmp_index+tmpkk; int s_index = tmp_index+tmpkk; if ((s_index - PointNum) < tmp_index) data = CSS_RSData.at(s_index - PointNum); arMsrZValidEven[arMsrZValidEven.size()-1] = CSS_RSData.at(s_index - PointNum); } } else { int tmp_index,point_num;//,tmp_index_p,tmp_index_n; tmp_index = index; point_num = int(xInterval/sampPointInterval); if (CSS_RSData.at(tmp_index+point_num) > dbHeightCheck) { int tmpkk; for (tmpkk =0;tmpkk dbHeightCheck) { break; } } int s_index = tmp_index+tmpkk; data = CSS_RSData.at(s_index + PointNum); } } } arMsrZValidEven.append(data); } lookupTableTemp.append(arMsrZValidEven); } lookupTable = lookupTableTemp; } void DeviceProxy::buildLookupTable_lhc2() { RS_SETTINGS->beginGroup("device/SSCS"); double xWorkRange = RS_SETTINGS->readNumDEntry("/XRange",1.0); double xInterval = RS_SETTINGS->readNumDEntry("/XInterval",1.0); RS_SETTINGS->endGroup(); //找Y0,Y1 // startPos x y z zA double ySampNum = int(xWorkRange/xInterval); double dbHeightCheck = -0.03; const double sampPointInterval = 0.5; // v=100mm/s t采样时间间隔 = 1ms const int PointNum = 4;//int(yInterval/sampPointInterval); QVector realStartXOdd,realStartXEven; QVector> startXIndexOddTable,startXIndexEvenTable; QVector startXIndexOdd,startXIndexEven; double startX=SSStartXPos; QVector> lookupTableTemp; for (int k=0;k<=ySampNum;k++) { for(auto i=0;i=CSS_XPosData.at(i))&&(startX<=CSS_XPosData.at(i+1))) { startXIndexOdd.append(i); // 找到的实际Y起始位置 realStartXOdd.append(CSS_XPosData.at(i)); // Y位置起始值 } // 偶数列 if((startX<=CSS_XPosData.at(i))&&(startX>=CSS_XPosData.at(i+1))) { if(0==int(CSS_XPosData.at(i+1))) { continue; } startXIndexEven.append(i+1); realStartXEven.append(CSS_XPosData.at(i+1)); } } startX += xInterval; startXIndexOddTable.append(startXIndexOdd); startXIndexEvenTable.append(startXIndexEven); QVector().swap(startXIndexOdd); QVector().swap(startXIndexEven); } for (int i=0;i startRSValueIndexOdd; // 从第一列开始取测距值,随着循环开始取第三列、第四列... for(auto j=0;j<=ySampNum;j++) { index = startXIndexOddTable[j][i];//截取测距值的起始索引 double data; { //double data; data = CSS_RSData.at(index); if (data > dbHeightCheck) { int tmp_index,point_num; tmp_index = index; point_num = int(xInterval/sampPointInterval); if (CSS_RSData.at(tmp_index-point_num) < dbHeightCheck) { int tmpkk; for (tmpkk = point_num;tmpkk>0;tmpkk--) { if (CSS_RSData.at(tmp_index-tmpkk) > dbHeightCheck) { break; } } int s_index = tmp_index-tmpkk; if ((s_index + PointNum) > tmp_index) data = CSS_RSData.at(s_index + PointNum); if (startRSValueIndexOdd.size() >= 1) startRSValueIndexOdd[startRSValueIndexOdd.size()-1] = CSS_RSData.at(s_index + PointNum); } else if (CSS_RSData.at(tmp_index+point_num) < dbHeightCheck) { int tmpkk; for (tmpkk = point_num;tmpkk>0;tmpkk--) { if (CSS_RSData.at(tmp_index+tmpkk) > dbHeightCheck) { break; } } //tmp_index = tmp_index - (point_num - tmpkk); //tmp_index = tmp_index+tmpkk; int s_index = tmp_index+tmpkk; if ((s_index - PointNum) < tmp_index) data = CSS_RSData.at(s_index - PointNum); } } else { int tmp_index,point_num;//,tmp_index_p,tmp_index_n; tmp_index = index; point_num = int(xInterval/sampPointInterval); if (CSS_RSData.at(tmp_index-point_num) > dbHeightCheck) { int tmpkk; for (tmpkk =0;tmpkk dbHeightCheck) { break; } } int s_index = tmp_index-tmpkk; data = CSS_RSData.at(s_index - PointNum); } } } startRSValueIndexOdd.append(data); //startRSValueIndexOdd.append(CSS_RSData.at(index)); } lookupTableTemp.append(startRSValueIndexOdd); if(i>= startXIndexEvenTable[0].size()) { continue; } QVector arMsrZValidEven; for(auto j=0;j<=ySampNum;j++) { double data; index = startXIndexEvenTable[j][i];//截取测距值的起始索引 { data = CSS_RSData.at(index); if (data > dbHeightCheck) { int tmp_index,point_num; tmp_index = index; point_num = int(xInterval/sampPointInterval); if (CSS_RSData.at(tmp_index-point_num) < dbHeightCheck) { int tmpkk; for (tmpkk = point_num;tmpkk>0;tmpkk--) { if (CSS_RSData.at(tmp_index-tmpkk) > dbHeightCheck) { break; } } int s_index = tmp_index-tmpkk; if ((s_index + PointNum) > tmp_index) data = CSS_RSData.at(s_index + PointNum); } else if (CSS_RSData.at(tmp_index+point_num) < dbHeightCheck) { int tmpkk; for (tmpkk = point_num;tmpkk>0;tmpkk--) { if (CSS_RSData.at(tmp_index+tmpkk) > dbHeightCheck) { break; } } //tmp_index = tmp_index - (point_num - tmpkk); //tmp_index = tmp_index+tmpkk; int s_index = tmp_index+tmpkk; if ((s_index - PointNum) < tmp_index) data = CSS_RSData.at(s_index - PointNum); if (arMsrZValidEven.size() >= 1) arMsrZValidEven[arMsrZValidEven.size()-1] = CSS_RSData.at(s_index - PointNum); } } else { int tmp_index,point_num;//,tmp_index_p,tmp_index_n; tmp_index = index; point_num = int(xInterval/sampPointInterval); if (CSS_RSData.at(tmp_index+point_num) > dbHeightCheck) { int tmpkk; for (tmpkk =0;tmpkk dbHeightCheck) { break; } } int s_index = tmp_index+tmpkk; data = CSS_RSData.at(s_index + PointNum); } } } arMsrZValidEven.append(data); //arMsrZValidEven.append(CSS_RSData.at(index)); } lookupTableTemp.append(arMsrZValidEven); } lookupTable = lookupTableTemp; } void DeviceProxy::buildLookupTable2() { RS_SETTINGS->beginGroup("device/SSCS"); double xWorkRange = RS_SETTINGS->readNumDEntry("/XRange",1.0); double xInterval = RS_SETTINGS->readNumDEntry("/XInterval",1.0); RS_SETTINGS->endGroup(); //找Y0,Y1 // startPos x y z zA double ySampNum = int(xWorkRange/xInterval); double dbHeightCheck = -0.03; const double sampPointInterval = 0.5; // v=100mm/s t采样时间间隔 = 1ms const int PointNum = 4;//int(yInterval/sampPointInterval); QVector realStartXOdd,realStartXEven; QVector> startXIndexOddTable,startXIndexEvenTable; QVector startXIndexOdd,startXIndexEven; double startX=SSStartXPos; QVector> lookupTableTemp; for (int k=0;k<=ySampNum;k++) { for(auto i=0;i=CSS_XPosData.at(i))&&(startX<=CSS_XPosData.at(i+1))) { if ((startX - CSS_XPosData.at(i)) > (CSS_XPosData.at(i+1) - startX)) { startXIndexOdd.append(i+1); realStartXOdd.append(CSS_XPosData.at(i+1)); // Y位置起始值 } else { startXIndexOdd.append(i); realStartXOdd.append(CSS_XPosData.at(i)); // Y位置起始值 } // 找到的实际Y起始位置 } // 偶数列 if((startX<=CSS_XPosData.at(i))&&(startX>=CSS_XPosData.at(i+1))) { if(0==int(CSS_XPosData.at(i+1))) { continue; } if ((CSS_XPosData.at(i) - startX) > (startX - CSS_XPosData.at(i+1))) { startXIndexEven.append(i+1); realStartXEven.append(CSS_XPosData.at(i+1)); } else { startXIndexEven.append(i); realStartXEven.append(CSS_XPosData.at(i)); } //startXIndexEven.append(i+1); //realStartXEven.append(CSS_XPosData.at(i+1)); } } startX += xInterval; startXIndexOddTable.append(startXIndexOdd); startXIndexEvenTable.append(startXIndexEven); QVector().swap(startXIndexOdd); QVector().swap(startXIndexEven); } for (int i=0;i startRSValueIndexOdd; // 从第一列开始取测距值,随着循环开始取第三列、第四列... for(auto j=0;j<=ySampNum;j++) { index = startXIndexOddTable[j][i];//截取测距值的起始索引 double data; { //double data; data = CSS_RSData.at(index); } startRSValueIndexOdd.append(data); //startRSValueIndexOdd.append(CSS_RSData.at(index)); } lookupTableTemp.append(startRSValueIndexOdd); if(i>= startXIndexEvenTable[0].size()) { continue; } QVector arMsrZValidEven; for(auto j=0;j<=ySampNum;j++) { double data; index = startXIndexEvenTable[j][i];//截取测距值的起始索引 { data = CSS_RSData.at(index); } arMsrZValidEven.append(data); //arMsrZValidEven.append(CSS_RSData.at(index)); } lookupTableTemp.append(arMsrZValidEven); } lookupTable = lookupTableTemp; } void DeviceProxy::buildLookupTable() { RS_SETTINGS->beginGroup("device/SSCS"); double xWorkRange = RS_SETTINGS->readNumDEntry("/XRange",1.0); double xInterval = RS_SETTINGS->readNumDEntry("/XInterval",1.0); RS_SETTINGS->endGroup(); //找Y0,Y1 // startPos x y z zA double ySampNum = int(xWorkRange/xInterval); const double sampPointInterval = 0.5; // v=100mm/s t采样时间间隔 = 1ms QVector startXIndexOdd,startXIndexEven; QVector realStartXOdd,realStartXEven; double startX=SSStartXPos; for(auto i=0;i=CSS_XPosData.at(i))&&(startX<=CSS_XPosData.at(i+1))) { startXIndexOdd.append(i); // 找到的实际Y起始位置 realStartXOdd.append(CSS_XPosData.at(i)); // Y位置起始值 } // 偶数列 if((startX<=CSS_XPosData.at(i))&&(startX>=CSS_XPosData.at(i+1))) { if(0==int(CSS_XPosData.at(i+1))) { continue; } startXIndexEven.append(i+1); realStartXEven.append(CSS_XPosData.at(i+1)); } } //根据Y的索引号提取Z QVector> lookupTableTemp; for(auto i=0;i startRSValueIndexOdd; startRSValueIndexOdd.append(CSS_RSData.at(index)); // 从第一列开始取测距值,随着循环开始取第三列、第四列... for(auto j=1;j<=ySampNum;j++) { //取数据的步距 index += int(xInterval/sampPointInterval); startRSValueIndexOdd.append(CSS_RSData.at(index)); } lookupTableTemp.append(startRSValueIndexOdd); // 偶数列比奇数列少一列 if(i>= startXIndexEven.size()) { continue; } // 取偶数列数据 index = startXIndexEven.at(i); QVector arMsrZValidEven; arMsrZValidEven.append(CSS_RSData.at(index)); for(auto j=1;j<=ySampNum;j++) { index -= int(xInterval/sampPointInterval); arMsrZValidEven.append(CSS_RSData.at(index)); } lookupTableTemp.append(arMsrZValidEven); } lookupTable = lookupTableTemp; // double realStartYSumOdd = std::accumulate(realStartYOdd.begin(),realStartYOdd.end(),0.0); // double realStartYMeanOdd = realStartYSumOdd/realStartYOdd.size(); // double realStartYSumEven = std::accumulate(realStartYEven.begin(),realStartYEven.end(),0.0); // double realStartYMeanEven = realStartYSumEven/realStartYEven.size(); // lookupTableStartY = (realStartYMeanOdd+realStartYMeanEven)/2; } void DeviceProxy::lookupTable_do_Gaussian() { cv::Mat mat_power(0, lookupTable[0].size(), cv::DataType::type); for (int i = 0; i < lookupTable.size(); ++i) { // Make a temporary cv::Mat row and add to NewSamples _without_ data copy cv::Mat Sample(1, lookupTable[0].size(), cv::DataType::type, lookupTable[i].data()); mat_power.push_back(Sample); } Mat mat_tmp; GaussianBlur(mat_power, mat_tmp, Size(3, 3), 0, 0); lookupTable_Gaussian.resize(lookupTable.size()); for (int c = 0; c < lookupTable_Gaussian.size(); c++){ lookupTable_Gaussian[c].resize(lookupTable[0].size()); } for (int x = 0; x < mat_tmp.rows; x++) { for (int y = 0; y < mat_tmp.cols; y++) { lookupTable_Gaussian[x][y] = mat_tmp.ptr(x)[y]; } } } void DeviceProxy::lookupTableHeadEndDataHandl() { RS_SETTINGS->beginGroup("device/SSCS"); double LowerLimit = RS_SETTINGS->readNumDEntry("/lowerLimit"); double upperLimit = RS_SETTINGS->readNumDEntry("/upperLimit"); RS_SETTINGS->endGroup(); int cols = lookupTable.at(0).size(); int rows = lookupTable.size(); QVector indexOfOutliersHead; QVector indexOfOutliersEnd; for(auto i=0;i(); indexOfOutliersEnd = QVector(); //处理行 for(auto j=0;jupperLimit)||(lookupTable.at(i).at(j)(); } } if((lookupTable.at(i).at(cols-1-j)>upperLimit)||(lookupTable.at(i).at(cols-1-j)(); } } } } //saveLookupTable(); indexOfOutliersHead = QVector(); indexOfOutliersEnd = QVector(); // 处理列 for(auto j=0;j(); indexOfOutliersEnd = QVector(); for(auto i=0;iupperLimit)||(lookupTable.at(i).at(j)(); } } if((lookupTable.at(rows-1-i).at(j)>upperLimit)||(lookupTable.at(rows-1-i).at(j)(); } } } } } double DeviceProxy::DataHandlCheck_lhc(double data[6]) { if ((data[3] > data[4]) && (data[4] > data[5])) { // if ((data[0] > data[1]) && (data[1] > data[2])) // return data[1]; // else { double tmpK = (data[4] - data[5]) / (data[3] - data[5]); data[1] = tmpK*(data[0] - data[2]) + data[2]; return data[1]; } } if ((data[3] < data[4]) && (data[4] < data[5])) { // if ((data[0] < data[1]) && (data[1] < data[2])) // return data[1]; // else { double tmpK = (data[4] - data[5]) / (data[3] - data[5]); data[1] = tmpK*(data[0] - data[2]) + data[2]; return data[1]; } } return data[1]; } void DeviceProxy::lookupTableHeadEndDataHandl_lhc2() { int cols = lookupTable.at(0).size(); int rows = lookupTable.size(); QVector> lookupTableTemp; QVector chazhi1(cols); QVector chazhi2(cols); lookupTableTemp = lookupTable; for(auto i=0;i maxdata ) { maxdata = fabs(chazhi2.at(j)); } num = j; } num = num - 1; if (num <= 0) continue; double nextK,preK,currentK; if (i==0) { currentK = lookupTableTemp.at(i).at(num) - lookupTableTemp.at(i).at(num-1); nextK = lookupTableTemp.at(i+1).at(num) - lookupTableTemp.at(i+1).at(num-1); if (fabs(currentK) > 0.0015) { if (fabs(nextK) < fabs(currentK)) { lookupTable[i][num] = lookupTableTemp.at(i).at(num-1) + nextK; } } } else if (i==(rows-1)) { preK = lookupTableTemp.at(i-1).at(num) - lookupTableTemp.at(i-1).at(num-1); currentK = lookupTableTemp.at(i).at(num) - lookupTableTemp.at(i).at(num-1); //nextK = lookupTableTemp.at(i+1).at(num) - lookupTableTemp.at(i+1).at(num-1); if (fabs(currentK) > 0.0015) { if (fabs(preK) < fabs(currentK)) { lookupTable[i][num] = lookupTableTemp.at(i).at(num-1) + preK; } } } else { preK = lookupTableTemp.at(i-1).at(num) - lookupTableTemp.at(i-1).at(num-1); currentK = lookupTableTemp.at(i).at(num) - lookupTableTemp.at(i).at(num-1); nextK = lookupTableTemp.at(i+1).at(num) - lookupTableTemp.at(i+1).at(num-1); if (fabs(currentK) > 0.0015) { if ((fabs(preK) < fabs(currentK)) && (fabs(nextK) < fabs(currentK))) { lookupTable[i][num] = lookupTableTemp.at(i).at(num-1) + (preK + nextK) / 2; } else if ((fabs(preK) < fabs(currentK)) && (fabs(nextK) >= fabs(currentK))) { lookupTable[i][num] = lookupTableTemp.at(i).at(num-1) + preK; } else if ((fabs(preK) >= fabs(currentK)) && (fabs(nextK) < fabs(currentK))) { lookupTable[i][num] = lookupTableTemp.at(i).at(num-1) + nextK; } } } } } void DeviceProxy::lookupTableHeadEndDataHandl_lhc() { RS_SETTINGS->beginGroup("device/SSCS"); double LowerLimit = RS_SETTINGS->readNumDEntry("/lowerLimit"); double upperLimit = RS_SETTINGS->readNumDEntry("/upperLimit"); double xinterval = RS_SETTINGS->readNumDEntry("/XInterval"); double yinterval = RS_SETTINGS->readNumDEntry("/YInterval"); double kxMax = 0.02 / xinterval; double kyMax = 0.02 / yinterval; RS_SETTINGS->endGroup(); int cols = lookupTable.at(0).size(); int rows = lookupTable.size(); QVector> lookupTableTemp; double data[6]; QVector indexOfOutliersHead; QVector indexOfOutliersEnd; int skipRow = rows / 10; //1、检查原始数据,有间隔合格不合格数据,做出标记。xy方向都跳过skipRow边缘行 //2、分别记录符合条件的x、y行号和列号, //3、xy方向数据都处理完成后,根据步骤2所标记的行列号,检查数据 // // lookupTableTemp = lookupTable; for(auto i=skipRow;i(); indexOfOutliersEnd = QVector(); //处理行 for(auto j=0;j upperLimit) || (lookupTable.at(i).at(j) LowerLimit) && (lookupTable.at(i).at(j+2) < upperLimit) && (lookupTable.at(i).at(j+2) > LowerLimit)) { //验证当前值是否合理 if (j kyMax) { lookupTable[i][j] = lookupTable.at(i).at(j+1) + (lookupTable.at(i).at(j+1)-lookupTable.at(i).at(j+2)); } double chazhiY,chazhiY2; chazhiY = lookupTable.at(i).at(j) - lookupTable.at(i).at(j+1); chazhiY2 = lookupTable.at(i).at(j+1) - lookupTable.at(i).at(j+2); if (((i > 0) && (i < rows-2)) && ((j < cols-2)&& (j > 0))) //if (((lookupTableTemp.at(i+1).at(j) < upperLimit) && (lookupTableTemp.at(i+1).at(j) > LowerLimit))) { double chazhiX; if (i < rows / 2) chazhiX = lookupTable.at(i+1).at(j) - lookupTable.at(i+1).at(j+1); else chazhiX = lookupTable.at(i-1).at(j)- lookupTable.at(i-1).at(j+1); if (fabs(chazhiX) <= 0.0005) { if (chazhiY > 0.001) lookupTable[i][j] = lookupTable.at(i).at(j+1); } else { lookupTable[i][j] = lookupTable.at(i).at(j+1) + (chazhiY2 + chazhiX) / 2; } } } //计算锭外第一补偿点值 if (j 0) && (i < rows-1)) && ((j < cols-2)&& (j > 0))) { if (((lookupTableTemp.at(i-1).at(j) < upperLimit) && (lookupTableTemp.at(i-1).at(j) > LowerLimit)) && ((lookupTableTemp.at(i+1).at(j) < upperLimit) && (lookupTableTemp.at(i+1).at(j) > LowerLimit))) { if (((lookupTableTemp.at(i-1).at(j-1) < upperLimit) && (lookupTableTemp.at(i-1).at(j-1) > LowerLimit)) && ((lookupTableTemp.at(i+1).at(j-1) < upperLimit) && (lookupTableTemp.at(i+1).at(j-1) > LowerLimit))) { data[0] = lookupTableTemp.at(i-1).at(j-1); data[1] = tmp; data[2] = lookupTableTemp.at(i+1).at(j-1); data[3] = lookupTableTemp.at(i-1).at(j); data[4] = lookupTableTemp.at(i).at(j); data[5] = lookupTableTemp.at(i+1).at(j); tmp = DataHandlCheck_lhc(data); } } } if (tmp < LowerLimit) tmp = LowerLimit; if (tmp > upperLimit) tmp = upperLimit; } for(auto k=0;k(); } } if((lookupTable.at(i).at(cols-1-j)>upperLimit)||(lookupTable.at(i).at(cols-1-j) LowerLimit) && (lookupTable.at(i).at(cols-1-j-2) < upperLimit) && (lookupTable.at(i).at(cols-1-j-2) > LowerLimit)) { if (j kyMax) { lookupTable[i][cols-1-j] = lookupTable.at(i).at(cols-1-j-1) + (lookupTable.at(i).at(cols-1-j-1)-lookupTable.at(i).at(cols-1-j-2)); } double chazhiY,chazhiY2; chazhiY = lookupTable.at(i).at(cols-1-j) - lookupTable.at(i).at(cols-1-j-1); chazhiY2 = lookupTable.at(i).at(cols-1-j-1) - lookupTable.at(i).at(cols-1-j-2); if (((i > 0) && (i < rows-1)) && ((j < cols-2)&& (j > 0))) //if (((lookupTableTemp.at(i-1).at(cols-1-j) < upperLimit) && (lookupTableTemp.at(i-1).at(cols-1-j) > LowerLimit))) { double chazhiX; if (i < rows / 2) chazhiX = lookupTable.at(i+1).at(cols-1-j) - lookupTable.at(i+1).at(cols-1-j-1); else chazhiX = lookupTable.at(i-1).at(cols-1-j) - lookupTable.at(i-1).at(cols-1-j-1); if (fabs(chazhiX) <= 0.0005) { if (chazhiY > 0.001) lookupTable[i][cols-1-j] = lookupTable.at(i).at(cols-1-j-1); } else { lookupTable[i][cols-1-j] = lookupTable.at(i).at(cols-1-j-1) + (chazhiY2 + chazhiX) / 2; } } } //double tmp; if (j 0) && (i < rows-1)) && ((j < cols-2)&& (j > 0))) { if (((lookupTableTemp.at(i-1).at(cols-1-j) < upperLimit) && (lookupTableTemp.at(i-1).at(cols-1-j) > LowerLimit)) && ((lookupTableTemp.at(i+1).at(cols-1-j) < upperLimit) && (lookupTableTemp.at(i+1).at(cols-1-j) > LowerLimit))) { if (((lookupTableTemp.at(i-1).at(cols-1-j+1) < upperLimit) && (lookupTableTemp.at(i-1).at(cols-1-j+1) > LowerLimit)) && ((lookupTableTemp.at(i+1).at(cols-1-j+1) < upperLimit) && (lookupTableTemp.at(i+1).at(cols-1-j+1) > LowerLimit))) { data[0] = lookupTableTemp.at(i-1).at(cols-1-j+1); data[1] = tmp; data[2] = lookupTableTemp.at(i+1).at(cols-1-j+1); data[3] = lookupTableTemp.at(i-1).at(cols-1-j); data[4] = lookupTableTemp.at(i).at(cols-1-j); data[5] = lookupTableTemp.at(i+1).at(cols-1-j); tmp = DataHandlCheck_lhc(data); } } } if (tmp < LowerLimit) tmp = LowerLimit; if (tmp > upperLimit) tmp = upperLimit; } for(auto k=0;k(); } } } } //saveLookupTable(); indexOfOutliersHead = QVector(); indexOfOutliersEnd = QVector(); // 处理列 for(auto j=0;j(); indexOfOutliersEnd = QVector(); for(auto i=0;iupperLimit)||(lookupTable.at(i).at(j)(); } } if((lookupTable.at(rows-1-i).at(j)>upperLimit)||(lookupTable.at(rows-1-i).at(j)(); } } } } } // for(auto j=0;j(); // indexOfOutliersEnd = QVector(); // for(auto i=0;iupperLimit)||(lookupTable.at(i).at(j) LowerLimit) // && (lookupTable.at(i+2).at(j) < upperLimit) && (lookupTable.at(i+2).at(j) > LowerLimit)) // { // if (i kxMax) // { // lookupTable[i][j] = lookupTable.at(i+1).at(j) + (lookupTable.at(i+1).at(j)-lookupTable.at(i+2).at(j)); // } // double chazhiY,chazhiY2; // chazhiY = lookupTable.at(i).at(j) - lookupTable.at(i+1).at(j); // chazhiY2 = lookupTable.at(i+1).at(j) - lookupTable.at(i+2).at(j); // if (((i > 0) && (i < rows-2)) && ((j < cols-2)&& (j > 0))) // if (((lookupTableTemp.at(i).at(j+1) < upperLimit) && (lookupTableTemp.at(i).at(j+1) > LowerLimit))) // { // double chazhiX ; // if (i < rows / 2) // chazhiX = lookupTable.at(i+1).at(j) - lookupTable.at(i+1).at(j+1); // else // chazhiX = lookupTable.at(i-1).at(j) - lookupTable.at(i-1).at(j+1); // if (fabs(chazhiX) <= 0.0005) // { // if (chazhiY > 0.001) // lookupTable[i][j] = lookupTable.at(i+1).at(j); // } // else // { // lookupTable[i][j] = lookupTable.at(i+1).at(j) + (chazhiY2 + chazhiX) / 2; // } // } // } // //double tmp; // if (i upperLimit) // tmp = upperLimit; // } // for(auto k=0;k(); // } // } // if((lookupTable.at(rows-1-i).at(j)>upperLimit)||(lookupTable.at(rows-1-i).at(j) LowerLimit) // && (lookupTable.at(rows-1-i-2).at(j) < upperLimit) && (lookupTable.at(rows-1-i-2).at(j) > LowerLimit)) // { // if (i kxMax) // { // lookupTable[rows-1-i][j] = lookupTable.at(rows-1-i-1).at(j) + (lookupTable.at(rows-1-i-1).at(j)-lookupTable.at(rows-1-i-2).at(j)); // } // double chazhiY,chazhiY2; // chazhiY = lookupTable.at(rows-1-i).at(j) - lookupTable.at(rows-1-i-1).at(j); // chazhiY2 = lookupTable.at(rows-1-i-1).at(j) - lookupTable.at(rows-1-i-2).at(j); // if (((i > 0) && (i < rows-2)) && ((j < cols-2)&& (j > 0))) // if (((lookupTableTemp.at(rows-1-i).at(j+1) < upperLimit) && (lookupTableTemp.at(rows-1-i).at(j+1) > LowerLimit))) // { // double chazhiX ;//= lookupTable.at(rows-1-i).at(j+1) - lookupTable.at(rows-1-i-1).at(j+1); // if (i < rows / 2) // chazhiX = lookupTable.at(rows-1-i).at(j+1) - lookupTable.at(rows-1-i-1).at(j+1); // else // chazhiX = lookupTable.at(rows-1-i).at(j-1) - lookupTable.at(rows-1-i-1).at(j-1); // if (fabs(chazhiX) <= 0.0005) // { // if (chazhiY > 0.001) // lookupTable[rows-1-i][j] = lookupTable.at(rows-1-i-1).at(j); // } // else // { // lookupTable[rows-1-i][j] = lookupTable.at(rows-1-i-1).at(j) + (chazhiY2 + chazhiX) / 2; // //lookupTable[i][cols-1-j] = lookupTable.at(i).at(cols-1-j-1) + (chazhiY2 + chazhiX) / 2; // } // } // } // double tmp; // if (i upperLimit) // tmp = upperLimit; // } // for(auto k=0;k(); // } // } // } // } //} void DeviceProxy::saveLookupTable_lhc() { Sleep(100); QDateTime datetime = QDateTime::currentDateTime(); QString timestr = datetime.toString("ddHHmmzzz"); RS_SETTINGS->beginGroup("device/SSCS"); QString path = RS_SETTINGS->readEntry("/dataSavePath"); RS_SETTINGS->endGroup(); if(path.right(1)!=QString("/")) { path+=QString("/"); } QFile lookUpTableData(path+ingotNumber+"_LookupTable_"+timestr+"_test.csv"); if(lookUpTableData.open(QFile::WriteOnly|QFile::Truncate)) { QTextStream lookUpTableOut(&lookUpTableData); int cols = lookupTable.at(0).size(); int rows = lookupTable.size(); // y为行 for(auto i=0;ibeginGroup("device/SSCS"); QString path = RS_SETTINGS->readEntry("/dataSavePath"); RS_SETTINGS->endGroup(); if(path.right(1)!=QString("/")) { path+=QString("/"); } QFile lookUpTableData(path+ingotNumber+"_LookupTable_"+timestr+"_load.csv"); if(lookUpTableData.open(QFile::WriteOnly|QFile::Truncate)) { QTextStream lookUpTableOut(&lookUpTableData); int cols = lookupTable.at(0).size(); int rows = lookupTable.size(); // y为行 for(auto i=0;ibeginGroup("device/SSCS"); QString path = RS_SETTINGS->readEntry("/dataSavePath"); RS_SETTINGS->endGroup(); if(path.right(1)!=QString("/")) { path+=QString("/"); } QFile lookUpTableData(path+ingotNumber+"_LookupTable_"+timestr+".csv"); if(lookUpTableData.open(QFile::WriteOnly|QFile::Truncate)) { QTextStream lookUpTableOut(&lookUpTableData); int cols = lookupTable.at(0).size(); int rows = lookupTable.size(); // y为行 for(auto i=0;iprintDeviceSystemInfo("补偿面扫描数据校验中..."); RS_SETTINGS->beginGroup("device/SSCS"); double LowerLimit = RS_SETTINGS->readNumDEntry("/lowerLimit"); double upperLimit = RS_SETTINGS->readNumDEntry("/upperLimit"); RS_SETTINGS->endGroup(); RS_SETTINGS->beginGroup("device/SSCS"); double AdjacentPoint = RS_SETTINGS->readNumDEntry("/AdjacentPoint"); RS_SETTINGS->endGroup(); if (AdjacentPoint < 0.001) AdjacentPoint = 0.001; RS_SETTINGS->beginGroup("device/SSCS"); double AllRange = RS_SETTINGS->readNumDEntry("/AllRange"); RS_SETTINGS->endGroup(); if (AllRange < 0.02) AllRange = 0.02; int cols = lookupTable.at(0).size(); int rows = lookupTable.size(); int vaildValueNum=0; double data_max = 0,data_min = 0; double DvalueMax = 0; for(auto i=0;i=LowerLimit)) { vaildValueNum++; } } } for(auto i=0;i -1) { if (lookupTable[i][j] > data_max) data_max = lookupTable[i][j]; if (lookupTable[i][j] < data_min) data_min = lookupTable[i][j]; } } } for(auto i=0;i -1) && (lookupTable.at(i).at(j+1) > -1)) { double DvalueTmp = abs(lookupTable.at(i).at(j+1) - lookupTable.at(i).at(j)); if (DvalueTmp > DvalueMax) DvalueMax = DvalueTmp; } } } if(!vaildValueNum) { throw MyException(QString("补偿面扫描无有效数据!")); DEVICE_INFO->printDeviceSystemInfo("补偿面扫描数据校验失败!"); return; } if (DvalueMax > AdjacentPoint) { throw MyException(QString("加工件平面度不满足加工要求,请检查!")); DEVICE_INFO->printDeviceSystemInfo("补偿面扫描数据校验失败(1)!"); return; } if ((data_max - data_min) > AllRange) { throw MyException(QString("加工件平面度不满足加工要求,请检查!")); DEVICE_INFO->printDeviceSystemInfo("补偿面扫描数据校验失败(2)!"); return; } DEVICE_INFO->printDeviceSystemInfo("补偿面扫描数据校验完成"); } void DeviceProxy::SScanDataCheck() { DEVICE_INFO->printDeviceSystemInfo("补偿面扫描数据校验中..."); RS_SETTINGS->beginGroup("device/SSCS"); double LowerLimit = RS_SETTINGS->readNumDEntry("/lowerLimit"); double upperLimit = RS_SETTINGS->readNumDEntry("/upperLimit"); RS_SETTINGS->endGroup(); int cols = lookupTable.at(0).size(); int rows = lookupTable.size(); int vaildValueNum=0; for(auto i=0;i=LowerLimit)) { vaildValueNum++; } } } if(!vaildValueNum) { throw MyException(QString("补偿面扫描无有效数据!")); DEVICE_INFO->printDeviceSystemInfo("补偿面扫描有效数据校验失败!"); return; } DEVICE_INFO->printDeviceSystemInfo("补偿面扫描有效数据校验完成"); } void DeviceProxy::lookupPeripheralMakeUpZero() { int cols = lookupTable.at(0).size(); QVector zero; for(auto i=0;i> lookupTabelTemp; for(auto i=0;i temp; temp = lookupTable.at(i); temp.insert(0,0.0); temp.append(0.0); lookupTabelTemp.append(temp); } lookupTable = lookupTabelTemp; } void DeviceProxy::downLoadLookupTable() { QVector lookupTableTemp; for(auto i=0;isetGlobalReal(vname,i,i,0,lookupTable.at(0).size()-1,temp); } } // 测距传感器回零 void DeviceProxy::RSToZeroInSide() { DEVICE_INFO->printDeviceSystemInfo("测距传感器对零中..."); acsCtl->stopBuffer(1); char vname[]= ACSCTL_RUNF_V; acsCtl->setGlobalInt(vname,0); RSensorToZero rSensorToZero; RS_SETTINGS->beginGroup("device/ZAAxisSafe"); double ZAAxisSafePos = RS_SETTINGS->readNumEntry("/pos"); double ZAAxisToSafePosVel = RS_SETTINGS->readNumEntry("/vel"); RS_SETTINGS->endGroup(); rSensorToZero.setZAAxisSafePos(ZAAxisSafePos); rSensorToZero.setZAAxisToSafePosVel(ZAAxisToSafePosVel); // 加载PTP位置设置 RS_SETTINGS->beginGroup("device/RSTZVel"); double Vel1 = RS_SETTINGS->readNumDEntry("/Vel1"); double Vel2 = RS_SETTINGS->readNumDEntry("/Vel2"); double Vel3 = RS_SETTINGS->readNumDEntry("/Vel3"); RS_SETTINGS->endGroup(); if (Vel1 > 5) Vel1 = 5; if (Vel2 > 1) Vel2 = 1; if (Vel3 > 1) Vel3 = 1; rSensorToZero.setZAAxisToZero1Vel(Vel1); rSensorToZero.setZAAxisToZero2Vel(Vel2); rSensorToZero.setZAAxisToZero3Vel(Vel3); rSensorToZero.CuCeGaoDoNum = CuCeGaoDoNum; rSensorToZero.CuCeGaoDiNum = CuCeGaoDINum; QByteArray qByCode = rSensorToZero.getCode().toLatin1(); char* code = qByCode.data(); acsCtl->loadBuffer(1,code); acsCtl->compileBuffer(1); acsCtl->runBuffer(1); } void DeviceProxy::RSToZeroInSide_Z0() //From R { DEVICE_INFO->printDeviceSystemInfo("测距传感器对零中..."); acsCtl->stopBuffer(1); char vname[]= ACSCTL_RUNF_V; acsCtl->setGlobalInt(vname,0); RSensorToZero rSensorToZero; RS_SETTINGS->beginGroup("device/ZAAxisSafe"); double ZAAxisSafePos = RS_SETTINGS->readNumEntry("/pos"); double ZAAxisToSafePosVel = RS_SETTINGS->readNumEntry("/vel"); RS_SETTINGS->endGroup(); rSensorToZero.setZAAxisSafePos(ZAAxisSafePos); rSensorToZero.setZAAxisToSafePosVel(ZAAxisToSafePosVel); // 加载PTP位置设置 RS_SETTINGS->beginGroup("device/RSTZVel"); double Vel1 = RS_SETTINGS->readNumDEntry("/Vel1"); double Vel2 = RS_SETTINGS->readNumDEntry("/Vel2"); double Vel3 = RS_SETTINGS->readNumDEntry("/Vel3"); RS_SETTINGS->endGroup(); if (Vel1 > 5) Vel1 = 5; if (Vel2 > 1) Vel2 = 1; if (Vel3 > 1) Vel3 = 1; rSensorToZero.setZAAxisToZero1Vel(Vel1); rSensorToZero.setZAAxisToZero2Vel(Vel2); rSensorToZero.setZAAxisToZero3Vel(Vel3); rSensorToZero.CuCeGaoDoNum = CuCeGaoDoNum; rSensorToZero.CuCeGaoDiNum = CuCeGaoDINum; RS_SETTINGS->beginGroup("device/Rposition"); double RCheckOffset = RS_SETTINGS->readNumDEntry("/RCheckOffset"); RS_SETTINGS->endGroup(); rSensorToZero.Z0_value = RCheckOffset; char acsctl_Z0_VALUE[] = ACSCTL_Z0_VALUE; acsCtl->setGlobalReal(acsctl_Z0_VALUE,RCheckOffset); QByteArray qByCode = rSensorToZero.getCode_Z0().toLatin1(); char* code = qByCode.data(); acsCtl->loadBuffer(1,code); acsCtl->compileBuffer(1); acsCtl->runBuffer(1); } void getCoordinate(QVector> &vec,int *row,int *col) { QList dataInsert; QFile file("./binary_mask.csv"); // 新建QFile对象 if (!file.open(QFile::ReadOnly | QFile::Text)) { // QMessageBox::warning(this, tr("打开csv文件"), // tr("无法读取文件 %1:\n%2.") // .arg("binary_mask.csv").arg(file.errorString())); return ; } QTextStream in(&file);///文件流in int i=0; while (!in.atEnd()) { QString line = in.readLine();///一行一行的读取 //QStringList fields = line.split(",");///逗号分隔123元素 dataInsert.append(line); } *row = dataInsert.size(); QStringList firstR = dataInsert[0].split(",");///逗号分隔123元素 //QStringList firstR = dataInsert[0]; *col = firstR.size(); for(int i = 0;i v = {i, start, i, end}; vec.append(v); start = 0; end = 0; } } } } Mat angleRotate(Mat& src, int angle) { //角度转换 float alpha = angle * CV_PI / 180; //构造旋转矩阵 float rotateMat[3][3] = { {cos(alpha),-sin(alpha),0}, {sin(alpha),cos(alpha),0}, {0,0,1} }; int nSrcRows = src.rows; int nSrcCols = src.cols; //计算旋转后图像矩阵的各个顶点位置 float a1 = nSrcCols * rotateMat[0][0]; float b1 = nSrcCols * rotateMat[1][0]; float a2 = nSrcCols * rotateMat[0][0] + nSrcRows * rotateMat[0][1]; float b2 = nSrcCols * rotateMat[1][0] + nSrcRows * rotateMat[1][1]; float a3 = nSrcRows * rotateMat[0][1]; float b3 = nSrcRows * rotateMat[1][1]; //计算出极值点 float kxMin = min(min(min(0.0f, a1), a2), a3); float kxMax = max(max(max(0.0f, a1), a2), a3); float kyMin = min(min(min(0.0f, b1), b2), b3); float kyMax = max(max(max(0.0f, b1), b2), b3); //计算输出矩阵的尺寸 int nRows = abs(kyMax - kyMin); int nCols = abs(kxMax - kxMin); Mat dst(nRows, nCols, src.type(), Scalar::all(0)); for (int i = 0; i < nRows; ++i) { for (int j = 0; j < nCols; ++j) { //旋转坐标变换 int x = (j + kxMin) * rotateMat[0][0] - (i + kyMin) * rotateMat[0][1]; int y = -(j + kxMin) * rotateMat[1][0] + (i + kyMin) * rotateMat[1][1]; //区域旋转 if (x >= 0 && x < nSrcCols && y >= 0 && y < nSrcRows) { dst.at>(i, j) = src.at>(y, x); } } } return dst; } int GetLineHeadNum(QVector& vec_pos, int line) { double value = vec_pos[0]; int num = 0; int line_num = 1; for (int i = 0; i < vec_pos.size(); i++) { if (line_num <= line) { if (abs(vec_pos[i] - value) > 0.05) { line_num++; value = vec_pos[i]; } num++; } else { return num-1; } } return vec_pos.size(); } int GetLineTailNum(QVector& vec_pos, int line) { double value = vec_pos[vec_pos.size() - 1]; int num = vec_pos.size(); int line_num = 1; for (int i = vec_pos.size() -1; i >=0 ; i--) { if (line_num <= line) { if (abs(vec_pos[i] - value) > 0.05) { line_num++; value = vec_pos[i]; } num--; } else { return num ; } } return 0; } void DeviceProxy::MachSmallAreaInSide() { DEVICE_INFO->printDeviceSystemInfo("特定区域加工中..."); //1、加载文件 pCoordinate //2、生成路径坐标 //3、生成lci程序到buffer3,这里下载数据,开启lci,然后stop //4、生成加工代码到buffer8,这里有执行完成标记,并最后关闭lci //5、检查buffer8是否完成,置完成标记 // // QVector> vec; int row, col; RS_SETTINGS->beginGroup("device/Rposition"); double XiaoVel = RS_SETTINGS->readNumDEntry("/XiaoVel"); //特定区域速度 double XiaoInternal = RS_SETTINGS->readNumDEntry("/XiaoInternal"); //特定区域加工间隔 double GlobalPix = RS_SETTINGS->readNumDEntry("/GlobalPix"); //全局相机像素 double XiaoAccDec = RS_SETTINGS->readNumDEntry("/XiaoAccDec"); //加减速距离 double XiaoOffset = RS_SETTINGS->readNumDEntry("/XiaoOffset"); //加工偏移 double XiaoXpos = RS_SETTINGS->readNumDEntry("/XiaoXAxis"); //记录位置 double XLeftOffset = RS_SETTINGS->readNumDEntry("/XLeftOffset"); //负向偏移 double XRightOffset = RS_SETTINGS->readNumDEntry("/XRightOffset"); //正向偏移 int YOffset = RS_SETTINGS->readNumDEntry("/YOffset"); //Y正向轴缩放条数 int YOffset_N = RS_SETTINGS->readNumDEntry("/YOffset_N"); //Y正向轴缩放条数 int YTanslate = RS_SETTINGS->readNumDEntry("/YTanslate"); //Y偏移 RS_SETTINGS->endGroup(); RS_SETTINGS->beginGroup("device/GlobalCameraPos"); double XAxisPos = RS_SETTINGS->readNumDEntry("/XAxis"); RS_SETTINGS->endGroup(); //测试小面区域加工 QString printXiaoXpos = QString::number(XiaoXpos, 'f', 2); DEVICE_INFO->printDeviceSystemInfo("记录位置:" + printXiaoXpos); //根据参数进行图像的偏移和旋转 double Xoffset = XAxisPos - XiaoXpos; //double Xoffset = 0; int offsetPix = abs(Xoffset*GlobalPix); //getCoordinate(vec,&row,&col); Mat src = cv::imread("binary_mask.jpg", 0); Mat dst = Mat::zeros(src.size(), CV_8UC1); if (Xoffset < 0) { Mat roi1 = dst(Rect(dst.cols - offsetPix , 0, offsetPix, dst.rows)); Mat roi2 = dst(Rect(0 , 0, dst.cols - offsetPix, dst.rows)); src(Rect(offsetPix , 0, src.cols - offsetPix, src.rows)).copyTo(roi2); } else { Mat roi1 = dst(Rect(0 , 0, offsetPix, dst.rows)); Mat roi2 = dst(Rect(offsetPix , 0, dst.cols - offsetPix, dst.rows)); src(Rect(0 , 0, src.cols - offsetPix, src.rows)).copyTo(roi2); } imwrite("result.jpg", dst); Mat Rotate_src = angleRotate(dst, 270); //找到第一个和最后一个包含非零像素的行 int maxIndexRow=0,minIndexRow=0; row = Rotate_src.rows; col = Rotate_src.cols; for (int i = 0; i < Rotate_src.rows; i++) //参数2:Y方向起始值 { bool flag=false; for (int j = 0; j < Rotate_src.cols; j++) { if (Rotate_src.at(i, j) > 0) { flag = true; minIndexRow = i; break; } } if (flag) break; } for (int i = Rotate_src.rows-1; i >= 0; i--) //参数2:Y方向起始值 { bool flag=false; for (int j = 0; j < Rotate_src.cols; j++) { if (Rotate_src.at(i, j) > 0) { flag = true; maxIndexRow = i; break; } } if (flag) break; } DEVICE_INFO->printDeviceSystemInfo("csv数据提取完成,..."); RS_SETTINGS->beginGroup("device/MRHCamera/calibPos"); double MHXAxis = RS_SETTINGS->readNumDEntry("/MHXAxis"); double MHYAxis = RS_SETTINGS->readNumDEntry("/MHYAxis"); RS_SETTINGS->endGroup(); double internalPix = XiaoInternal * GlobalPix; int indexS=0; int indexE=0; int indexSNum=0; int indexENum=0; if (YOffset > 10) YOffset = 10; if (YOffset_N > 10) YOffset_N = 10; if (YTanslate > 10) YTanslate = 10; //找到一个 indexS,使得从 indexS 开始,每隔 internalPix 的行,都有非零像素。同时,indexSNum 记录了 indexS 和中间行索引之间的间隔数。 if (minIndexRow < row/2) { for(int i=0;i<(int)row/internalPix;i++) { if ((row/2 - i*internalPix-XiaoOffset*GlobalPix) minIndexRow) { indexS = row/2-XiaoOffset*GlobalPix + i*internalPix; indexSNum = 0-i; break; } } } if (maxIndexRow < row/2) { for(int i=0;i<(int)row/internalPix;i++) { if ((row/2 - i*internalPix-XiaoOffset*GlobalPix) maxIndexRow) { indexE =row/2-XiaoOffset*GlobalPix + (i-1)*internalPix; indexENum = 0-(i-1); break; } } } // int VecIndexS,VecIndexE; // for (int i=0;i vce_x_pos; QVector vce_y_pos; QVector vce_flag; double maxYpos,minYpos; minYpos = MHYAxis -XiaoInternal*indexSNum-XiaoOffset; maxYpos = MHYAxis -XiaoInternal*indexENum-XiaoOffset; // minYpos = MHYAxis -XiaoInternal*indexSNum-XiaoOffset+(0-YOffset)*XiaoInternal; // maxYpos = MHYAxis -XiaoInternal*indexENum-XiaoOffset-YOffset_N*XiaoInternal; // minYpos = minYpos - YTanslate * XiaoInternal; // maxYpos = maxYpos - YTanslate * XiaoInternal; double ystartpos = minYpos; int lineNum = 0; //原:YOffset < 0 YOffset_N > 0 // // // for (int i=0;i<=((int)((indexE - indexS)/internalPix));i=i+1) { int start = 0; int end = 0; for (int j = 0; j < Rotate_src.cols; j++) { if(start == 0) { if (Rotate_src.at((int)(indexS+i*internalPix), j) > 0) start = j; } else { if(j == Rotate_src.cols-1) end = j; if(Rotate_src.at((int)(indexS+i*internalPix), j) == 0) end = j-1; } if(start!=0 && end!=0 ) { //输出点 //qDebug()<<"zong start:("< GlobalPix/2)) { QVector v = {start, end}; vec.append(v); } start = 0; end = 0; } } if (vec.size() > 0) { for (int k=0;k=0;k--) { vce_x_pos.append(MHXAxis +( col/2 - vec[k][1])/GlobalPix-0.15+(0-XRightOffset));//+0.12 vce_y_pos.append(ystartpos + lineNum*XiaoInternal); vce_flag.append(1); vce_x_pos.append(MHXAxis +( col/2 - vec[k][0])/GlobalPix-0.15+(0-XLeftOffset));//-0.26 vce_y_pos.append(ystartpos + lineNum*XiaoInternal); vce_flag.append(0); } lineNum++; } QVector>().swap(vec); } //这处理Y方向缩放、平移 // minYpos = MHYAxis -XiaoInternal*indexSNum-XiaoOffset+(0-YOffset)*XiaoInternal; // maxYpos = MHYAxis -XiaoInternal*indexENum-XiaoOffset-YOffset_N*XiaoInternal; //平移 minYpos = minYpos - YTanslate * XiaoInternal; maxYpos = maxYpos - YTanslate * XiaoInternal; for (int i=0;i tmp_vce_x_pos; QVector tmp_vce_y_pos; QVector tmp_vce_flag; //缩放 //原:YOffset < 0 YOffset_N > 0 if (YOffset < 0) { int num =GetLineHeadNum(vce_y_pos,0-YOffset); for(int i= num;i().swap(vce_x_pos); QVector().swap(vce_y_pos); QVector().swap(vce_flag); vce_x_pos = tmp_vce_x_pos; vce_y_pos = tmp_vce_y_pos; vce_flag = tmp_vce_flag; } if (YOffset > 0) { int num =GetLineHeadNum(vce_y_pos,1); for(int i= 0;i tmp_vce_x_pos_all; QVector tmp_vce_y_pos_all; QVector tmp_vce_flag_all; for(int i= YOffset;i>0;i--) { for(int j= 0;j().swap(vce_x_pos); QVector().swap(vce_y_pos); QVector().swap(vce_flag); vce_x_pos = tmp_vce_x_pos_all; vce_y_pos = tmp_vce_y_pos_all; vce_flag = tmp_vce_flag_all; } minYpos = minYpos+(0-YOffset)*XiaoInternal; // //原:YOffset < 0 YOffset_N > 0 if (YOffset_N > 0) { int num =GetLineTailNum(vce_y_pos,YOffset_N); for(int i= 0;i<=num;i++) { tmp_vce_y_pos.append(vce_y_pos[i]); tmp_vce_x_pos.append(vce_x_pos[i]); tmp_vce_flag.append(vce_flag[i]); } QVector().swap(vce_x_pos); QVector().swap(vce_y_pos); QVector().swap(vce_flag); vce_x_pos = tmp_vce_x_pos; vce_y_pos = tmp_vce_y_pos; vce_flag = tmp_vce_flag; } if (YOffset_N < 0) { int num =GetLineTailNum(vce_y_pos,1); for(int i= num+1;i tmp_vce_x_pos_all; QVector tmp_vce_y_pos_all; QVector tmp_vce_flag_all; for(int i= 1;i<=(0-YOffset_N);i++) { for(int j= 0;j vce_x_pos[i]) minXpos = vce_x_pos[i]; } if ((minXpos < MHXAxis - 105) || (maxXpos > MHXAxis + 105)) { throw MyException(QString("特定区域加工数据错误!")); } maxXpos = maxXpos + XiaoAccDec; minXpos = minXpos - XiaoAccDec; //测试小面区域加工 DEVICE_INFO->printDeviceSystemInfo(QString("minYpos:%1mm,indexSNum:%2mm").arg(minYpos).arg(indexSNum)); DEVICE_INFO->printDeviceSystemInfo(QString("minYpos:%1mm,indexSNum:%2mm").arg(maxYpos).arg(indexENum)); double tmpPos; for (int i=0;ibeginGroup("device/ABSMove/Safe"); double CompensationOffset = RS_SETTINGS->readNumDEntry("/CompensationOffset"); double CompensationMaxValue = RS_SETTINGS->readNumDEntry("/CompensationMaxValue"); RS_SETTINGS->endGroup(); double array[4]; array[0] = minXpos + 10; array[1] = maxXpos - 10; array[2] = CompensationOffset; array[3] = CompensationMaxValue; MotionCompOpen(false,array); // minYpos = MHYAxis -( row/2 - vec[(int)(VecIndexS)][0])/GlobalPix; // maxYpos = MHYAxis -( row/2 - vec[(int)(VecIndexE)][0])/GlobalPix; //lc.MultiAxWinSize = 0.0005 acsCtl->stopBuffer(3); QString qstrcode; qstrcode+= QString("global real XCoord(%1), YCoord(%2)\n").arg(vce_x_pos.size()).arg(vce_x_pos.size())+ QString("global int GatingArr(%1)\n").arg(vce_x_pos.size())+ QString("int PointsNum = %1\n").arg(vce_x_pos.size())+ QString("VEL(X)=%1; ACC(X)=5500; DEC(X)=5500; JERK(X)=30000; KDEC(X)=30000;\n").arg(XiaoVel)+ "VEL(Y)=50; ACC(Y)=3000; DEC(Y)=3000; JERK(Y)=30000; KDEC(Y)=30000;\n" "ACC(Z)=1000; DEC(Z)=1000; JERK(Z)=5000; KDEC(Z)=5000;\n"+ QString("REAL LY=%1,LX=%2,LP=%3\n").arg(maxYpos-minYpos).arg(maxXpos-minXpos).arg(XiaoInternal)+ QString("PTP/E (X,Y), %1,%2\n").arg(maxXpos).arg(maxYpos)+ "lc.Init()\n" "lc.MultiAxWinSize = 0.005\n" "lc.SetSafetyMasks(1,1)\n" "lc.SetMotionAxes(X,Y)\n" "lc.CoordinateArrGate(PointsNum, GatingArr, XCoord, YCoord)\n" "lc.LaserEnable()\n" "LOOP LY/LP\n" "PTP/ER X,-LX\n" //"PTP/ER Y,LP\n" "PTP/ER X,LX\n" "PTP/ER Y,-LP\n" "END\n" "runF=1\n" "lc.LaserDisable()\n" "stop\n"; QByteArray qByCode = qstrcode.toLatin1(); char* code = qByCode.data(); acsCtl->loadBuffer(3,code); acsCtl->compileBuffer(3); char vnamex[] = "XCoord"; acsCtl->setGlobalReal(vnamex,0,vce_x_pos.size()-1,vce_x_pos); char vnamey[] = "YCoord"; acsCtl->setGlobalReal(vnamey,0,vce_y_pos.size()-1,vce_y_pos); char GatingArr[] = "GatingArr"; acsCtl->setGlobalInt(GatingArr,0,vce_flag.size()-1,vce_flag); acsCtl->runBuffer(3); } bool leastSquareLinearFit(float x[], float y[], const int num, float &a, float &b) { float sum_x2 = 0.0; float sum_y = 0.0; float sum_x = 0.0; float sum_xy = 0.0; try { for (int i = 0; i < num; ++i) { sum_x2 += x[i]*x[i]; sum_y += y[i]; sum_x += x[i]; sum_xy += x[i]*y[i]; } } catch (...) { return false; } a = (num*sum_xy - sum_x*sum_y)/(num*sum_x2 - sum_x*sum_x); b = (sum_x2*sum_y - sum_x*sum_xy)/(num*sum_x2-sum_x*sum_x); return true; } int DeviceProxy::SaveRatioP1P2ToCSV(float ApValue_P1[30],float ApValue_P2[30], float ApPercentage[30],float kb[],bool flag) { QString filename; QDateTime datetime = QDateTime::currentDateTime(); QString timestr = datetime.toString("yyMMdd_HHmmss"); //QString timestr = datetime.toString("ddHHmmzzz"); QString path = "PowerCalibration/"; if(path.right(1)!=QString("/")) { path+=QString("/"); } //path+ if (flag) { filename = path + ingotNumber + "_QT_"+timestr+".csv"; DEVICE_INFO->printDeviceSystemInfo(filename); } else { filename = path + ingotNumber + "_QS_"+timestr+".csv"; DEVICE_INFO->printDeviceSystemInfo(filename); } DEVICE_INFO->printDeviceSystemInfo("***已保存"); QFile filePid(filename); if(filePid.open(QFile::WriteOnly|QFile::Append)) { QTextStream filePidOut(&filePid); if (flag) filePidOut << "PP_T"<<","<<"P1"<<","<<"P2"<< "\n"; else filePidOut << "PP_S"<<","<<"P1"<<","<<"P2"<< "\n"; for(int i=0;i<21;i++) { if (!flag) { if (i>=13) break; } filePidOut << ApPercentage[i]<<","<LaserClose(); IPGLASER->getIPGLaerPara("IPGLaser"); if (IPGLASER->m_hComm == nullptr) { IPGLASER->OpenComm(); } if (DEV->BiaoDingFlag) { int ret; { ret = IPGLASER->SetParam(1); } if (ret != 0) { DEVICE_INFO->printDeviceSalamInfo("激光器参数设置错误!"); return -1; } } else { int ret; { ret = IPGLASER->SetParam(2); } if (ret != 0) { DEVICE_INFO->printDeviceSalamInfo("激光器参数设置错误!"); return -1; } } while(1) { /* * 1、到测功率位 * 2、第一套参数测功率 * 3、第二套参数测功率 */ switch(step) { case 0: if (!hasToBuffer) { DEV->StepNameSGL(2); DEV->lastTaskIsFinish = false; DEV->toLaserApTestPosInSide(); DEV->reqCMDRunFState = true; hasToBuffer = true; } else { //检测buffer是否执行完毕? if (!DEV->reqCMDRunFState)//buffer是否执行完毕 { step = step + 1; hasToBuffer = false; //continue; } } break; case 1: { float valueMath = 0; float valueLight = 0; int delayCount = 0; int ret; DEV->StepNameSGL(31); ret = IPGLASER->LaserClose(); if (ret < 0) { DEV->StepNameSGL(30); return -1; } if (DEV->BiaoDingFlag) { ret = IPGLASER->SetParam(1); if (ret < 0) { DEV->StepNameSGL(30); return -1; } } else { ret = IPGLASER->SetParam(2); if (ret < 0) { DEV->StepNameSGL(30); return -1; } } ret = IPGLASER->LaserOpen(); if (ret < 0) { DEV->StepNameSGL(30); return -1; } DEV->laserOpenInSide(); for (int i=0; i < 21; i++) { if (!DEV->BiaoDingFlag) { if (i >= 13) break; } IPGLASER->SetSingleParam("32",str[i]); Sleep(50); delayCount = 0; while(1) { Sleep(10); if (DEV->StopGetRatioP1P2Flag) { DEV->laserClose(); DEV->StepNameSGL(30); return -1; } delayCount++; if (delayCount >= 1500) break; } if (POWERMETERMACH->m_hComm == nullptr) { POWERMETERMACH->getSerialSet("jiagonggonglvji"); bool ret = POWERMETERMACH->OpenComm(); if (!ret) { DEV->laserClose(); DEV->StepNameSGL(30); return -1; } } ret = POWERMETERMACH->GetValue(&valueMath); if (ret != 0) { DEV->laserClose(); DEV->StepNameSGL(30); return -1; } ApValue_P2[i] = valueMath; if (POWERMETERLIGHT->m_hComm == nullptr) { POWERMETERLIGHT->getSerialSet("guanglugonglvji"); bool ret = POWERMETERLIGHT->OpenComm(); if (!ret) { DEV->laserClose(); DEV->StepNameSGL(30); return -1; } } valueLight = 0; ret = POWERMETERLIGHT->GetValue(&valueLight); if (ret != 0) { DEV->laserClose(); DEV->StepNameSGL(30); return -1; } ApValue_P1[i] = valueLight; } ret = IPGLASER->LaserClose(); if (ret < 0) { DEV->StepNameSGL(30); return -1; } DEV->laserCloseInSide(); DEV->laserClose(); // leastSquareLinearFit(ApPercentage, ApValue_P1, 21, k1, b1); // leastSquareLinearFit(ApPercentage, ApValue_P2, 21, k2, b2); if (DEV->BiaoDingFlag) leastSquareLinearFit(ApValue_P1, ApValue_P2, 21, k1, b1); else leastSquareLinearFit(ApValue_P1, ApValue_P2, 13, k1, b1); float kb[4]; kb[0] = k1; kb[1] = b1; kb[2] = k2; kb[3] = b2; if (DEV->BiaoDingFlag) { RS_SETTINGS->beginGroup("device/Rposition"); RS_SETTINGS->writeEntry("/p2_t0", ApValue_P2[0]); RS_SETTINGS->writeEntry("/p2_t5", ApValue_P2[1]); RS_SETTINGS->writeEntry("/p2_t10", ApValue_P2[2]); RS_SETTINGS->writeEntry("/p2_t15", ApValue_P2[3]); RS_SETTINGS->writeEntry("/p2_t20", ApValue_P2[4]); RS_SETTINGS->writeEntry("/p2_t25", ApValue_P2[5]); RS_SETTINGS->writeEntry("/p2_t30", ApValue_P2[6]); RS_SETTINGS->writeEntry("/p2_t35", ApValue_P2[7]); RS_SETTINGS->writeEntry("/p2_t40", ApValue_P2[8]); RS_SETTINGS->writeEntry("/p2_t45", ApValue_P2[9]); RS_SETTINGS->writeEntry("/p2_t50", ApValue_P2[10]); RS_SETTINGS->writeEntry("/p2_t55", ApValue_P2[11]); RS_SETTINGS->writeEntry("/p2_t60", ApValue_P2[12]); RS_SETTINGS->writeEntry("/p2_t65", ApValue_P2[13]); RS_SETTINGS->writeEntry("/p2_t70", ApValue_P2[14]); RS_SETTINGS->writeEntry("/p2_t75", ApValue_P2[15]); RS_SETTINGS->writeEntry("/p2_t80", ApValue_P2[16]); RS_SETTINGS->writeEntry("/p2_t85", ApValue_P2[17]); RS_SETTINGS->writeEntry("/p2_t90", ApValue_P2[18]); RS_SETTINGS->writeEntry("/p2_t95", ApValue_P2[19]); RS_SETTINGS->writeEntry("/p2_t100", ApValue_P2[20]); RS_SETTINGS->writeEntry("/p1k_t", k1); RS_SETTINGS->writeEntry("/p1b_t", b1); RS_SETTINGS->endGroup(); SaveRatioP1P2ToCSV(ApValue_P1,ApValue_P2, ApPercentage, kb,true); } else { RS_SETTINGS->beginGroup("device/Rposition"); RS_SETTINGS->writeEntry("/p2_s0", ApValue_P2[0]); RS_SETTINGS->writeEntry("/p2_s5", ApValue_P2[1]); RS_SETTINGS->writeEntry("/p2_s10", ApValue_P2[2]); RS_SETTINGS->writeEntry("/p2_s15", ApValue_P2[3]); RS_SETTINGS->writeEntry("/p2_s20", ApValue_P2[4]); RS_SETTINGS->writeEntry("/p2_s25", ApValue_P2[5]); RS_SETTINGS->writeEntry("/p2_s30", ApValue_P2[6]); RS_SETTINGS->writeEntry("/p2_s35", ApValue_P2[7]); RS_SETTINGS->writeEntry("/p2_s40", ApValue_P2[8]); RS_SETTINGS->writeEntry("/p2_s45", ApValue_P2[9]); RS_SETTINGS->writeEntry("/p2_s50", ApValue_P2[10]); RS_SETTINGS->writeEntry("/p2_s55", ApValue_P2[11]); RS_SETTINGS->writeEntry("/p2_s60", ApValue_P2[12]); // RS_SETTINGS->writeEntry("/p2_s65", ApValue_P2[13]); // RS_SETTINGS->writeEntry("/p2_s70", ApValue_P2[14]); // RS_SETTINGS->writeEntry("/p2_s75", ApValue_P2[15]); // RS_SETTINGS->writeEntry("/p2_s80", ApValue_P2[16]); // RS_SETTINGS->writeEntry("/p2_s85", ApValue_P2[17]); // RS_SETTINGS->writeEntry("/p2_s90", ApValue_P2[18]); // RS_SETTINGS->writeEntry("/p2_s95", ApValue_P2[19]); // RS_SETTINGS->writeEntry("/p2_s100", ApValue_P2[20]); RS_SETTINGS->writeEntry("/p1k_s", k1); RS_SETTINGS->writeEntry("/p1b_s", b1); RS_SETTINGS->endGroup(); SaveRatioP1P2ToCSV(ApValue_P1,ApValue_P2, ApPercentage, kb,false); } // if (DEV->BiaoDingFlag) // { // RS_SETTINGS->beginGroup("device/Rposition"); // RS_SETTINGS->writeEntry("/p1k_t", k1); // RS_SETTINGS->writeEntry("/p1b_t", b1); // RS_SETTINGS->writeEntry("/p2k_t", k2); // RS_SETTINGS->writeEntry("/p2b_t", b2); // RS_SETTINGS->endGroup(); // SaveRatioP1P2ToCSV(ApValue_P1,ApValue_P2, ApPercentage, kb,true); // } // else // { // RS_SETTINGS->beginGroup("device/Rposition"); // RS_SETTINGS->writeEntry("/p1k_s", k1); // RS_SETTINGS->writeEntry("/p1b_s", b1); // RS_SETTINGS->writeEntry("/p2k_s", k2); // RS_SETTINGS->writeEntry("/p2b_s", b2); // RS_SETTINGS->endGroup(); // SaveRatioP1P2ToCSV(ApValue_P1,ApValue_P2, ApPercentage, kb,false); // } //step = step + 1; } return 0; default: break; } if (DEV->StopGetRatioP1P2Flag) return -1; Sleep(5); } return 0; } void DeviceProxy::imageGet() { //imageR = rms.RMS_Image(60); } int DeviceProxy::ElectricResistanceCheckThread() { //1、连接,获取数组 S T E //2、到第一点,读取。循环。结束 //除了xy位置,Z轴位置也是要计算的。增加一个Z0轴偏移,参考Z2偏移 //测试时,第一次运行,先升Z轴,再升Z0轴,xy到位,Z0落下 //后续只动XY,不在动z0,直至测完。 //测完后,升z0轴,完成测试 //1、连接,空采,根据尺寸获取数组,解析数组 //2、到第一点,读取。循环。结束。正常结束时,计算数值。是否正常结束都关掉连接 //除了xy位置,Z轴位置也是要计算的。增加一个Z0轴偏移,参考Z2偏移 //测试时,第一次运行,先升Z轴,再升Z0轴,xy到位,Z0落下 //后续只动XY,不在动z0,直至测完。 //测完后,升z0轴,完成测试 char* ip; StopElectricResistanceCheckFlag = false; int step = 0; bool hasToBuffer = false; QByteArray ba = MODBUSTCP->ipAddr_electric_resistance.toLatin1(); // must AF_LOCAL ip=ba.data(); bool ret = rms.RMS_Connect("192.168.1.10",QString("10001").toUShort()); if (!ret) { return -1; } QString str; RS_SETTINGS->beginGroup("device/Type"); QString strType = RS_SETTINGS->readEntry("/value"); RS_SETTINGS->endGroup(); if (strType == "6寸") { str = "(0,-60)(-30,-50)(-20,-50)(-10,-50)(0,-50)(10,-50)(20,-50)(30,-50)(-40,-40)(-30,-40)(-20,-40)(-10,-40)(0,-40)(10,-40)" "(20,-40)(30,-40)(40,-40)(-50,-30)(-40,-30)(-30,-30)(-20,-30)(-10,-30)(0,-30)(10,-30)(20,-30)(30,-30)(40,-30)(50,-30)" "(-50,-20)(-40,-20)(-30,-20)(-20,-20)(-10,-20)(0,-20)(10,-20)(20,-20)(30,-20)(40,-20)(50,-20)(-50,-10)(-40,-10)(-30,-10)" "(-20,-10)(-10,-10)(0,-10)(10,-10)(20,-10)(30,-10)(40,-10)(50,-10)(-60,0)(-50,0)(-40,0)(-30,0)(-20,0)(-10,0)(0,0)(10,0)" "(20,0)(30,0)(40,0)(50,0)(60,0)(-50,10)(-40,10)(-30,10)(-20,10)(-10,10)(0,10)(10,10)(20,10)(30,10)(40,10)(50,10)(-50,20)" "(-40,20)(-30,20)(-20,20)(-10,20)(0,20)(10,20)(20,20)(30,20)(40,20)(50,20)(-50,30)(-40,30)(-30,30)(-20,30)(-10,30)(0,30)" "(10,30)(20,30)(30,30)(40,30)(50,30)(-40,40)(-30,40)(-20,40)(-10,40)(0,40)(10,40)(20,40)(30,40)(40,40)(-30,50)(-20,50)" "(-10,50)(0,50)(10,50)(20,50)(30,50)(0,60)"; } else if (strType == "8寸") { str = "(-44,-72)(-30,-72)(-16,-72)(-2,-72)(12,-72)(26,-72)(40,-72)(-58,-58)" "(-44,-58)(-30,-58)(-16,-58)(-2,-58)(12,-58)(26,-58)(40,-58)(54,-58)" "(-72,-44)(-58,-44)(-44,-44)(-30,-44)(-16,-44)(-2,-44)(12,-44)(26,-44)" "(40,-44)(54,-44)(68,-44)(-72,-30)(-58,-30)(-44,-30)(-30,-30)(-16,-30)" "(-2,-30)(12,-30)(26,-30)(40,-30)(54,-30)(68,-30)(-72,-16)(-58,-16)" "(-44,-16)(-30,-16)(-16,-16)(-2,-16)(12,-16)(26,-16)(40,-16)(54,-16)" "(68,-16)(82,-16)(-72,-2)(-58,-2)(-44,-2)(-30,-2)(-16,-2)(-2,-2)" "(12,-2)(26,-2)(40,-2)(54,-2)(68,-2)(82,-2)(-72,12)(-58,12)(-44,12)" "(-30,12)(-16,12)(-2,12)(12,12)(26,12)(40,12)(54,12)(68,12)(82,12)" "(-72,26)(-58,26)(-44,26)(-30,26)(-16,26)(-2,26)(12,26)(26,26)(40,26)" "(54,26)(68,26)(-72,40)(-58,40)(-44,40)(-30,40)(-16,40)(-2,40)(12,40)" "(26,40)(40,40)(54,40)(68,40)(-58,54)(-44,54)(-30,54)(-16,54)(-2,54)" "(12,54)(26,54)(40,54)(54,54)(-44,68)(-30,68)(-16,68)(-2,68)(12,68)" "(26,68)(40,68)(-16,82)(-2,82)(12,82)"; } else { str = "(-2,-44)(-30,-30)(-16,-30)(-2,-30)(12,-30)(26,-30)(-30,-16)(-16,-16)" "(-2,-16)(12,-16)(26,-16)(40,-16)(-44,-2)(-30,-2)(-16,-2)(-2,-2)(12,-2)" "(26,-2)(40,-2)(-30,12)(-16,12)(-2,12)(12,12)(26,12)(40,12)(-30,26)(-16,26)" "(-2,26)(12,26)(26,26)(-16,40)(-2,40)(12,40)"; } //memcpy(MODBUSTCP->array_pos,rev_buf,RevDataLen); QStringList list = str.split(")"); for (int i=0;i=0) { QStringList list_son_son = list_son[j].split(","); MODBUSTCP->array_pos[i][0] = list_son_son[0].toFloat(); MODBUSTCP->array_pos[i][1] = list_son_son[1].toFloat(); } } } ret = rms.RMS_Read_Empty(); if (!ret) { return -1; } devLaserOpenTime = 1800; RS_SETTINGS->beginGroup("device/HeightFindPos"); double XAxisPos = RS_SETTINGS->readNumDEntry("/XAxis"); double YAxisPos = RS_SETTINGS->readNumDEntry("/YAxis"); RS_SETTINGS->endGroup(); while(1) { switch(step) { case 0: if (!hasToBuffer) { toHeightFindPosInSide(); reqCMDRunFState = true; hasToBuffer = true; } else { if (!reqCMDRunFState)//buffer是否执行完毕 { step = step + 1; hasToBuffer = false; //continue; } } break; case 1: for (int i = 0;iABSToPoint(XAXIS,XAxisPos-MODBUSTCP->array_pos[i][0]); acsCtl->ABSToPoint(YAXIS,YAxisPos-MODBUSTCP->array_pos[i][1]); Sleep(20); while(1) { motorstsX = acsCtl->getMotorState(XAXIS); motorstsY = acsCtl->getMotorState(YAXIS); if (motorstsX && motorstsY) break; if (DEV->StopElectricResistanceCheckFlag) { acsCtl->halt(XAXIS); acsCtl->halt(YAXIS); rms.RMS_Disconnect(); acsCtl->ABSToPoint(Z0AXIS,0); return -1; } Sleep(1); } ret = rms.RMS_Read(MODBUSTCP->array_pos[i][0],MODBUSTCP->array_pos[i][1]); if (!ret) { DEVICE_INFO->printDeviceSystemInfo("接收命令失败,退出晶锭预测量"); return -1; } if (StopElectricResistanceCheckFlag) { rms.RMS_Disconnect(); acsCtl->ABSToPoint(Z0AXIS,0); return -1; } } step = step + 1; break; case 2: double max,min,med,mode; rms.RMS_ACQ(&max,&min,&med,&mode); DEV->mode = mode; RS_SETTINGS->beginGroup("device/Para"); DEV->R_detection_pm = RS_SETTINGS->readNumDEntry("/dsbPPM"); DEV->R_detection_po = RS_SETTINGS->readNumDEntry("/dsbPPO"); RS_SETTINGS->endGroup(); rms.RMS_P(mode,&R_detection_pt,&R_detection_ps,R_detection_pm,R_detection_po); R_detection_pt = R_detection_pt * IPGLASER->PulseRepetition1.toDouble()/1000.0; R_detection_ps = R_detection_ps * IPGLASER->PulseRepetition2.toDouble()/1000.0; DEVICE_INFO->printDeviceSystemInfo(QString("R:%1").arg(mode)); DEVICE_INFO->printDeviceSystemInfo(QString("R_detection_qt:%1").arg(R_detection_pt)); DEVICE_INFO->printDeviceSystemInfo(QString("R_detection_qs:%1").arg(R_detection_ps)); if (strType == "6寸") { imageR = rms.RMS_Image(60); } else if (strType == "8寸") { imageR = rms.RMS_Image(80); } else imageR = rms.RMS_Image(40); DEV->StopElectricResistanceCheckFlag = false; DEV->emit show_Q_PP_SGL(); rms.RMS_Disconnect(); acsCtl->ABSToPoint(Z0AXIS,0); return 0; } if (DEV->StopElectricResistanceCheckFlag) { rms.RMS_Disconnect(); acsCtl->ABSToPoint(Z0AXIS,0); return -1; } Sleep(5); } } int DeviceProxy::ElectricResistanceCheckThread2()//From R { //1、连接,获取数组 S T E //2、到第一点,读取。循环。结束 //除了xy位置,Z轴位置也是要计算的。增加一个Z0轴偏移,参考Z2偏移 //测试时,第一次运行,先升Z轴,再升Z0轴,xy到位,Z0落下 //后续只动XY,不在动z0,直至测完。 //测完后,升z0轴,完成测试 //1、连接,空采,根据尺寸获取数组,解析数组 //2、到第一点,读取。循环。结束。正常结束时,计算数值。是否正常结束都关掉连接 //除了xy位置,Z轴位置也是要计算的。增加一个Z0轴偏移,参考Z2偏移 //测试时,第一次运行,先升Z轴,再升Z0轴,xy到位,Z0落下 //后续只动XY,不在动z0,直至测完。 //测完后,升z0轴,完成测试 //RMS_Dll rms; char* ip; StopElectricResistanceCheckFlag = false; int step = 0; bool hasToBuffer = false; QByteArray ba = MODBUSTCP->ipAddr_electric_resistance.toLatin1(); // must AF_LOCAL ip=ba.data(); bool ret = rms.RMS_Connect(ip,QString("10001").toUShort()); if (!ret) { return -1; } QString str; RS_SETTINGS->beginGroup("device/Type"); QString strType = RS_SETTINGS->readEntry("/value"); RS_SETTINGS->endGroup(); if (strType == "6寸") { str = "(0,-60)(-30,-50)(-20,-50)(-10,-50)(0,-50)(10,-50)(20,-50)(30,-50)(-40,-40)(-30,-40)(-20,-40)(-10,-40)(0,-40)(10,-40)" "(20,-40)(30,-40)(40,-40)(-50,-30)(-40,-30)(-30,-30)(-20,-30)(-10,-30)(0,-30)(10,-30)(20,-30)(30,-30)(40,-30)(50,-30)" "(-50,-20)(-40,-20)(-30,-20)(-20,-20)(-10,-20)(0,-20)(10,-20)(20,-20)(30,-20)(40,-20)(50,-20)(-50,-10)(-40,-10)(-30,-10)" "(-20,-10)(-10,-10)(0,-10)(10,-10)(20,-10)(30,-10)(40,-10)(50,-10)(-60,0)(-50,0)(-40,0)(-30,0)(-20,0)(-10,0)(0,0)(10,0)" "(20,0)(30,0)(40,0)(50,0)(60,0)(-50,10)(-40,10)(-30,10)(-20,10)(-10,10)(0,10)(10,10)(20,10)(30,10)(40,10)(50,10)(-50,20)" "(-40,20)(-30,20)(-20,20)(-10,20)(0,20)(10,20)(20,20)(30,20)(40,20)(50,20)(-50,30)(-40,30)(-30,30)(-20,30)(-10,30)(0,30)" "(10,30)(20,30)(30,30)(40,30)(50,30)(-40,40)(-30,40)(-20,40)(-10,40)(0,40)(10,40)(20,40)(30,40)(40,40)(-30,50)(-20,50)" "(-10,50)(0,50)(10,50)(20,50)(30,50)(0,60)"; } else if (strType == "8寸") { str = "(-44,-72)(-30,-72)(-16,-72)(-2,-72)(12,-72)(26,-72)(40,-72)(-58,-58)" "(-44,-58)(-30,-58)(-16,-58)(-2,-58)(12,-58)(26,-58)(40,-58)(54,-58)" "(-72,-44)(-58,-44)(-44,-44)(-30,-44)(-16,-44)(-2,-44)(12,-44)(26,-44)" "(40,-44)(54,-44)(68,-44)(-72,-30)(-58,-30)(-44,-30)(-30,-30)(-16,-30)" "(-2,-30)(12,-30)(26,-30)(40,-30)(54,-30)(68,-30)(-72,-16)(-58,-16)" "(-44,-16)(-30,-16)(-16,-16)(-2,-16)(12,-16)(26,-16)(40,-16)(54,-16)" "(68,-16)(82,-16)(-72,-2)(-58,-2)(-44,-2)(-30,-2)(-16,-2)(-2,-2)" "(12,-2)(26,-2)(40,-2)(54,-2)(68,-2)(82,-2)(-72,12)(-58,12)(-44,12)" "(-30,12)(-16,12)(-2,12)(12,12)(26,12)(40,12)(54,12)(68,12)(82,12)" "(-72,26)(-58,26)(-44,26)(-30,26)(-16,26)(-2,26)(12,26)(26,26)(40,26)" "(54,26)(68,26)(-72,40)(-58,40)(-44,40)(-30,40)(-16,40)(-2,40)(12,40)" "(26,40)(40,40)(54,40)(68,40)(-58,54)(-44,54)(-30,54)(-16,54)(-2,54)" "(12,54)(26,54)(40,54)(54,54)(-44,68)(-30,68)(-16,68)(-2,68)(12,68)" "(26,68)(40,68)(-16,82)(-2,82)(12,82)"; } else { str = "(-2,-44)(-30,-30)(-16,-30)(-2,-30)(12,-30)(26,-30)(-30,-16)(-16,-16)" "(-2,-16)(12,-16)(26,-16)(40,-16)(-44,-2)(-30,-2)(-16,-2)(-2,-2)(12,-2)" "(26,-2)(40,-2)(-30,12)(-16,12)(-2,12)(12,12)(26,12)(40,12)(-30,26)(-16,26)" "(-2,26)(12,26)(26,26)(-16,40)(-2,40)(12,40)"; } //memcpy(MODBUSTCP->array_pos,rev_buf,RevDataLen); QStringList list = str.split(")"); for (int i=0;i=0) { QStringList list_son_son = list_son[j].split(","); MODBUSTCP->array_pos[i][0] = list_son_son[0].toFloat(); MODBUSTCP->array_pos[i][1] = list_son_son[1].toFloat(); } } } ret = rms.RMS_Read_Empty(); if (!ret) { return -1; } devLaserOpenTime = 1800; RS_SETTINGS->beginGroup("device/HeightFindPos"); double XAxisPos = RS_SETTINGS->readNumDEntry("/XAxis"); double YAxisPos = RS_SETTINGS->readNumDEntry("/YAxis"); RS_SETTINGS->endGroup(); while(1) { switch(step) { case 0: if (!hasToBuffer) { toHeightFindPosInSide(); reqCMDRunFState = true; hasToBuffer = true; } else { if (!reqCMDRunFState)//buffer是否执行完毕 { step = step + 1; hasToBuffer = false; //continue; } } break; case 1: if (!hasToBuffer) { RSToZeroInSide_Z0(); reqCMDRunFState = true; hasToBuffer = true; } else { if (!reqCMDRunFState)//buffer是否执行完毕 { step = step + 1; hasToBuffer = false; //continue; } } break; case 2: acsCtl->setVEL(Z0AXIS, 10); for (int i = 0;iABSToPoint(XAXIS,XAxisPos-MODBUSTCP->array_pos[i][0]); acsCtl->ABSToPoint(YAXIS,YAxisPos-MODBUSTCP->array_pos[i][1]); Sleep(20); while(1) { motorstsX = acsCtl->getMotorState(XAXIS); motorstsY = acsCtl->getMotorState(YAXIS); if (motorstsX && motorstsY) break; if (DEV->StopElectricResistanceCheckFlag) { acsCtl->halt(XAXIS); acsCtl->halt(YAXIS); rms.RMS_Disconnect(); acsCtl->ABSToPoint(Z0AXIS,0); return -1; } Sleep(1); } ret = rms.RMS_Read(MODBUSTCP->array_pos[i][0],MODBUSTCP->array_pos[i][1]); //ret = rms.RMS_Read(1); if (!ret) { DEVICE_INFO->printDeviceSystemInfo("接收命令失败,退出晶锭预测量"); return -1; } if (StopElectricResistanceCheckFlag) { rms.RMS_Disconnect(); acsCtl->ABSToPoint(Z0AXIS,0); return -1; } } step = step + 1; break; case 3: double max,min,med,mode; rms.RMS_ACQ(&max,&min,&med,&mode); DEV->mode = mode; RS_SETTINGS->beginGroup("device/Rposition"); double R_ElectricResistance_a = RS_SETTINGS->readNumDEntry("/R_ElectricResistance_a"); double R_ElectricResistance_m = RS_SETTINGS->readNumDEntry("/R_ElectricResistance_m"); RS_SETTINGS->endGroup(); rms.RMS_P(mode,&R_detection_pt,&R_detection_ps,R_detection_pm,R_detection_po);// R_detection_pt = R_detection_pt * IPGLASER->PulseRepetition1.toDouble()/1000.0; R_detection_ps = R_detection_ps * IPGLASER->PulseRepetition2.toDouble()/1000.0; if (strType == "6寸") { imageR = rms.RMS_Image(60); } else if (strType == "8寸") { imageR = rms.RMS_Image(80); } else imageR = rms.RMS_Image(40); DEV->StopElectricResistanceCheckFlag = false; DEV->emit show_Q_PP_SGL(); rms.RMS_Disconnect(); acsCtl->ABSToPoint(Z0AXIS,0); return 0; } if (DEV->StopElectricResistanceCheckFlag) { rms.RMS_Disconnect(); acsCtl->ABSToPoint(Z0AXIS,0); return -1; } Sleep(5); } } int DeviceProxy::FindEdgeThread() { bool motorsts = false; Mat image; int ret; bool findedgeflag; double Slope; double step = 0; double step_count = 0; StopFindEdgeFlag = false; int lineFlag = 0; acsCtl->setVEL(DAXIS, 40); acsCtl->setACC(DAXIS,400); acsCtl->setDEC(DAXIS,400); acsCtl->setJERK(DAXIS, 4000); acsCtl->setKDEC(DAXIS,4000); RS_SETTINGS->beginGroup("device/Rposition"); double PixelSize = RS_SETTINGS->readNumDEntry("/PixelSize"); RS_SETTINGS->endGroup(); double point_xyz[3][2] = {0}; while(1) { try { while(1) { //acsCtl->ABSToPoint(DAXIS,step); motorsts = acsCtl->getMotorState(DAXIS); if (motorsts) break; if (StopFindEdgeFlag) { acsCtl->halt(DAXIS); return -1; } Sleep(1); } //lightSourceOpen(); LIGHTSOURCEFIND->LightOn(1); Sleep(20); //ret = CAMERAFIND->GetImage(image,true); ret = CAMERAFIND->GetImage(image,true); if (ret < 0) { throw MyException(QString("寻边获取照片失败")); } LIGHTSOURCEFIND->LightOff(1); //lightSourceClose(); CAMERAFIND->GetLineSlope(image,findedgeflag,&Slope); if (!findedgeflag) { step = CAMERAFIND->StepOfFalse; step_count += step; qDebug()<< "findedgeflag:"<= -0.01) && (Slope <= 0.01))//找到直线 { qDebug()<< "Slope:"< 1) { acsCtl->RToPointPos(DAXIS,90);//转到工作位 Sleep(10); while(1) { motorsts = acsCtl->getMotorState(DAXIS); if (motorsts) break; if (StopFindEdgeFlag) { acsCtl->halt(DAXIS); return -1; } Sleep(1); } qDebug()<< "get img start"; LIGHTSOURCEFIND->LightOn(1); Sleep(20); //ret = CAMERAFIND->GetImage(image,true); ret = CAMERAFIND->GetImage(image,true); if (ret < 0) { throw MyException(QString("寻边获取照片失败")); } LIGHTSOURCEFIND->LightOff(1); CAMERAFIND->GetLineSlope(image,findedgeflag,&Slope); qDebug()<< "get img end"; if (!findedgeflag) { acsCtl->RToPointPos(DAXIS,-90);//转到工作位 Sleep(10); while(1) { motorsts = acsCtl->getMotorState(DAXIS); if (motorsts) break; if (StopFindEdgeFlag) { acsCtl->halt(DAXIS); return -1; } Sleep(1); } qDebug()<< "false "; } qDebug()<< "lihongchang "; // { // acsCtl->RToPointPos(XAXIS,10);//转到工作位 // Sleep(10); // while(1) // { // motorsts = acsCtl->getMotorState(XAXIS); // if (motorsts) // break; // if (StopFindEdgeFlag) // { // acsCtl->halt(XAXIS); // return -1; // } // Sleep(1); // } // LIGHTSOURCEFIND->LightOn(1); // Sleep(20); // ret = CAMERAFIND->GetImage(image,true); // if (ret < 0) // { // throw MyException(QString("寻边获取照片失败")); // } // LIGHTSOURCEFIND->LightOff(1); // int top_left; // int left = CAMERAFIND->GetCrossPoint(image,true,&top_left); // if (left == -1) // { // LaserMarkOffset_Y = 0; // LaserMarkOffset_X = 0; // } // else // { // point_xyz[0][0] = DEV->XAxisCtPos - (image.cols/2 - left)/PixelSize; // point_xyz[0][1] = DEV->YAxisCtPos + (top_left - image.rows/2)/PixelSize; // acsCtl->RToPointPos(XAXIS,-20);//转到工作位 // point_xyz[0][0] = point_xyz[0][0] - 20; // Sleep(10); // while(1) // { // motorsts = acsCtl->getMotorState(XAXIS); // if (motorsts) // break; // if (StopFindEdgeFlag) // { // acsCtl->halt(XAXIS); // return -1; // } // Sleep(1); // } // LIGHTSOURCEFIND->LightOn(1); // Sleep(20); // ret = CAMERAFIND->GetImage(image,true); // if (ret < 0) // { // throw MyException(QString("寻边获取照片失败")); // } // LIGHTSOURCEFIND->LightOff(1); // int top_right; // int right = CAMERAFIND->GetCrossPoint(image,false,&top_right); // if (right == -1) // { // LaserMarkOffset_Y = 0; // LaserMarkOffset_X = 0; // } // else // { // point_xyz[1][0] = DEV->XAxisCtPos + (right - image.cols/2)/PixelSize; // point_xyz[1][1] = DEV->YAxisCtPos + (top_right - image.rows/2)/PixelSize; // LaserMarkOffset_Y = (right - left) / 2.0 / PixelSize; // LaserMarkOffset_X = ((top_right + top_left) / 2.0 - 685)/ PixelSize; // { // //移动到中心点,移动到下端,平移xy值,判断边缘最下点(x,y),记录xy // RS_SETTINGS->beginGroup("device/Type"); // QString strType = RS_SETTINGS->readEntry("/value"); // RS_SETTINGS->endGroup(); // int Yoffset; // if (strType == "6寸") // { // Yoffset = INCHES6; // } // else if (strType == "8寸") // { // Yoffset = INCHES8; // } // else // { // Yoffset = INCHES4; // } // point_xyz[0][0] = point_xyz[0][0] + DEV->XAxisCtPos - (point_xyz[1][0]+point_xyz[0][0])/2; // point_xyz[1][0] = point_xyz[1][0] + DEV->XAxisCtPos - (point_xyz[1][0]+point_xyz[0][0])/2; // acsCtl->RToPointPos(XAXIS,DEV->XAxisCtPos - (point_xyz[1][0]+point_xyz[0][0])/2); // point_xyz[0][1] = point_xyz[0][1] + Yoffset; // point_xyz[1][1] = point_xyz[1][1] + Yoffset; // acsCtl->RToPointPos(YAXIS,Yoffset);//移动多少,由4寸,六寸决定。 // bool motorsts_x = false; // bool motorsts_y = false; // Sleep(10); // while(1) // { // motorsts_x = acsCtl->getMotorState(XAXIS); // motorsts_y = acsCtl->getMotorState(XAXIS); // if (motorsts_y && motorsts_x) // break; // if (StopFindEdgeFlag) // { // acsCtl->halt(XAXIS); // acsCtl->halt(YAXIS); // return -1; // } // Sleep(1); // } // LIGHTSOURCEFIND->LightOn(1); // Sleep(20); // ret = CAMERAFIND->GetImage(image,true); // if (ret < 0) // { // throw MyException(QString("寻边获取照片失败")); // } // LIGHTSOURCEFIND->LightOff(1); // int edgepos = CAMERAFIND->getLinePoints_bottom(image); // point_xyz[2][0] = DEV->XAxisCtPos; // point_xyz[2][1] = DEV->YAxisCtPos - (edgepos - image.rows/2)/PixelSize; // //获取最低边缘点值 // //三点确定圆心 // double point_buf1[3], point_buf2[3], point_buf3[3],center[3], radius; // point_buf1[0] = point_xyz[0][0]; // point_buf1[1] = point_xyz[0][1]; // point_buf1[2] = 0; // point_buf2[0] = point_xyz[1][0]; // point_buf2[1] = point_xyz[1][1]; // point_buf2[2] = 0; // point_buf3[0] = point_xyz[2][0]; // point_buf3[1] = point_xyz[2][1]; // point_buf3[2] = 0; // CAMERAFIND->calc_arc_bypoints3(point_buf1, point_buf2, point_buf3, center, &radius); // //calc_arc_bypoints3(float* points0, float* points1, float* points2, float* center, float* radius) // DEVICE_INFO->printDeviceSystemInfo(QString("当前位置为:%1mm,%1mm").arg(DEV->XAxisCtPos).arg(DEV->YAxisCtPos)); // DEVICE_INFO->printDeviceSystemInfo(QString("碇中心位置为:%1mm,%1mm").arg(center[0]).arg(center[1])); // } // } // } // } reqCMDRunFState = false; lastTaskIsFinish= true; return 0; } else { step = CAMERAFIND->StepOfFalse; step_count += step; } } else { lineFlag++; qDebug()<< "Slope:"< 0.05) step = 1; else step = 0.3; if (Slope < 0) step = 0 - step; step_count += step; } } if (step_count > 360)//10000 是DD马达走一圈的距离.该距离未定 { return -1; } else { acsCtl->RToPointPos(DAXIS,step); Sleep(5); } if (StopFindEdgeFlag) { acsCtl->halt(DAXIS); return -1; } } catch (MyException mye) { exceptHandl_thread(MyException("寻边定位失败。",mye.getExceptCode()));//这里有问题,暂时没改。多线程中,不显示弹窗 return -1; } } } int DeviceProxy::FindEdgeThread_6() { bool motorsts = false; double step = 0; double DAxisCtPos = 0; double DAxisStartPos = 0; StopFindEdgeFlag = false; bool flag[2] = {false}; double ddPos[2] = {0}; double YAxisCtPos = 0; LaserMarkOffset_Y = 0; LaserMarkOffset_X = 0; acsCtl->setVEL(DAXIS, 30); acsCtl->setACC(DAXIS,100); acsCtl->setDEC(DAXIS,100); acsCtl->setJERK(DAXIS, 1000); acsCtl->setKDEC(DAXIS,1000); acsCtl->setVEL(YAXIS, 5); char vName[] = ACSCTL_RSVALUE_V; double value = acsCtl->getGlobalReal(vName); int count_find_edge = 0; RS_SETTINGS->beginGroup("device/Rposition"); double FindEdageOffset = RS_SETTINGS->readNumDEntry("/FindEdageOffset"); RS_SETTINGS->endGroup(); if (value < -10) { acsCtl->RToPointPos(DAXIS,-10); Sleep(5); while(1) { motorsts = acsCtl->getMotorState(DAXIS); if (motorsts) break; if (StopFindEdgeFlag) { acsCtl->halt(DAXIS); acsCtl->setVEL(DAXIS, 30); acsCtl->setACC(DAXIS,300); acsCtl->setDEC(DAXIS,300); acsCtl->setJERK(DAXIS, 3000); acsCtl->setKDEC(DAXIS,3000); return -1; } Sleep(1); } } DAxisStartPos = acsCtl->getFPOS(DAXIS); acsCtl->RToPointPos(DAXIS,360); count_find_edge = 1; while(1) { try { DAxisCtPos = acsCtl->getFPOS(DAXIS); value = acsCtl->getGlobalReal(vName); if (!flag[0]) { if (value < -0.4) { flag[0] = true; ddPos[0] = DAxisCtPos; } } else { if (value > -0.4) { flag[1] = true; ddPos[1] = DAxisCtPos; if ((ddPos[1] - ddPos[0]) > 50) { if (count_find_edge < 7) { flag[0] = false; flag[1] = false; continue; } acsCtl->halt(DAXIS); reqCMDRunFState = false; lastTaskIsFinish= true; acsCtl->setVEL(DAXIS, 30); acsCtl->setACC(DAXIS,300); acsCtl->setDEC(DAXIS,300); acsCtl->setJERK(DAXIS, 3000); acsCtl->setKDEC(DAXIS,3000); return -1; } if ((ddPos[1] - ddPos[0]) < 1) { if (count_find_edge < 7) { flag[0] = false; flag[1] = false; continue; } acsCtl->halt(DAXIS); reqCMDRunFState = false; lastTaskIsFinish= true; acsCtl->setVEL(DAXIS, 30); acsCtl->setACC(DAXIS,300); acsCtl->setDEC(DAXIS,300); acsCtl->setJERK(DAXIS, 3000); acsCtl->setKDEC(DAXIS,3000); return -1; } acsCtl->halt(DAXIS); acsCtl->ABSToPoint(DAXIS,(ddPos[0]+ddPos[1])/2); Sleep(5); while(1) { motorsts = acsCtl->getMotorState(DAXIS); if (motorsts) break; if (StopFindEdgeFlag) { acsCtl->halt(DAXIS); acsCtl->setVEL(DAXIS, 30); acsCtl->setACC(DAXIS,300); acsCtl->setDEC(DAXIS,300); acsCtl->setJERK(DAXIS, 3000); acsCtl->setKDEC(DAXIS,3000); return -1; } Sleep(1); } acsCtl->RToPointPos(YAXIS,0.2); Sleep(5); while(1) { motorsts = acsCtl->getMotorState(YAXIS); if (motorsts) break; if (StopFindEdgeFlag) { acsCtl->halt(DAXIS); acsCtl->setVEL(DAXIS, 30); acsCtl->setACC(DAXIS,300); acsCtl->setDEC(DAXIS,300); acsCtl->setJERK(DAXIS, 3000); acsCtl->setKDEC(DAXIS,3000); return -1; } Sleep(1); } value = acsCtl->getGlobalReal(vName); if (value < -0.4) { LaserMarkOffset_Y = 0; LaserMarkOffset_X = 0; { reqCMDRunFState = false; lastTaskIsFinish= true; acsCtl->setVEL(DAXIS, 30); acsCtl->setACC(DAXIS,300); acsCtl->setDEC(DAXIS,300); acsCtl->setJERK(DAXIS, 3000); acsCtl->setKDEC(DAXIS,3000); acsCtl->RToPointPos(DAXIS,180+FindEdageOffset); Sleep(20); while(1) { motorsts = acsCtl->getMotorState(DAXIS); if (motorsts) { DAxisCtPos = acsCtl->getFPOS(DAXIS); int dCtPos = (int)DAxisCtPos; int tmppos = dCtPos % 360; double setPos = tmppos + (DAxisCtPos - dCtPos); //ACSC_SYNCHRONOUS acsCtl->SetFPOS(DAXIS,setPos); break; } if (StopFindEdgeFlag) { acsCtl->halt(DAXIS); acsCtl->setVEL(DAXIS, 30); acsCtl->setACC(DAXIS,300); acsCtl->setDEC(DAXIS,300); acsCtl->setJERK(DAXIS, 3000); acsCtl->setKDEC(DAXIS,3000); return -1; } } return 0; } } else { acsCtl->RToPointPos(YAXIS,-0.2); DAxisCtPos = acsCtl->getFPOS(DAXIS); double tmp = 360 - (DAxisCtPos - DAxisStartPos); acsCtl->RToPointPos(DAXIS,tmp); Sleep(5); } } } if (StopFindEdgeFlag) { acsCtl->halt(DAXIS); acsCtl->setVEL(DAXIS, 30); acsCtl->setACC(DAXIS,300); acsCtl->setDEC(DAXIS,300); acsCtl->setJERK(DAXIS, 3000); acsCtl->setKDEC(DAXIS,3000); return -1; } motorsts = acsCtl->getMotorState(DAXIS); if (motorsts) { count_find_edge++; if (count_find_edge > 7) { acsCtl->halt(DAXIS); acsCtl->setVEL(DAXIS, 30); acsCtl->setACC(DAXIS,300); acsCtl->setDEC(DAXIS,300); acsCtl->setJERK(DAXIS, 3000); acsCtl->setKDEC(DAXIS,3000); return -1; } acsCtl->RToPointPos(DAXIS,360); DAxisStartPos = acsCtl->getFPOS(DAXIS); if (count_find_edge == 2) { acsCtl->RToPointPos(YAXIS,-0.3); } else if (count_find_edge == 3) { acsCtl->RToPointPos(YAXIS,-0.3); } else if (count_find_edge == 4) { acsCtl->RToPointPos(YAXIS,-0.3); } else if (count_find_edge == 5) { acsCtl->RToPointPos(YAXIS,1.2); } else if (count_find_edge == 6) { acsCtl->RToPointPos(YAXIS,0.3); } else if (count_find_edge == 7) { acsCtl->RToPointPos(YAXIS,0.3); } } } catch (MyException mye) { exceptHandl_thread(MyException("寻边定位失败。",mye.getExceptCode()));//这里有问题,暂时没改。多线程中,不显示弹窗 acsCtl->setVEL(DAXIS, 30); acsCtl->setACC(DAXIS,300); acsCtl->setDEC(DAXIS,300); acsCtl->setJERK(DAXIS, 3000); acsCtl->setKDEC(DAXIS,3000); return -1; } Sleep(1); } } //int DeviceProxy::FindEdgeThread_6() //{ // bool motorsts = false; // double step = 0; // double DAxisCtPos = 0; // double DAxisStartPos = 0; // StopFindEdgeFlag = false; // bool flag[2] = {false}; // double ddPos[2] = {0}; // double YAxisCtPos = 0; // LaserMarkOffset_Y = 0; // LaserMarkOffset_X = 0; // acsCtl->setVEL(DAXIS, 30); // acsCtl->setACC(DAXIS,100); // acsCtl->setDEC(DAXIS,100); // acsCtl->setJERK(DAXIS, 1000); // acsCtl->setKDEC(DAXIS,1000); // acsCtl->setVEL(YAXIS, 5); // char vName[] = ACSCTL_RSVALUE_V; // double value = acsCtl->getGlobalReal(vName); // int count_find_edge = 0; // if (value < -10) // { // acsCtl->RToPointPos(DAXIS,-10); // Sleep(5); // while(1) // { // motorsts = acsCtl->getMotorState(DAXIS); // if (motorsts) // break; // if (StopFindEdgeFlag) // { // acsCtl->halt(DAXIS); // acsCtl->setVEL(DAXIS, 30); // acsCtl->setACC(DAXIS,300); // acsCtl->setDEC(DAXIS,300); // acsCtl->setJERK(DAXIS, 3000); // acsCtl->setKDEC(DAXIS,3000); // return -1; // } // Sleep(1); // } // } // DAxisStartPos = acsCtl->getFPOS(DAXIS); // acsCtl->RToPointPos(DAXIS,360); // count_find_edge = 1; // while(1) // { // try // { // DAxisCtPos = acsCtl->getFPOS(DAXIS); // value = acsCtl->getGlobalReal(vName); // if (!flag[0]) // { // if (value < -0.4) // { // flag[0] = true; // ddPos[0] = DAxisCtPos; // } // } // else // { // if (value > -0.4) // { // flag[1] = true; // ddPos[1] = DAxisCtPos; // if ((ddPos[1] - ddPos[0]) > 3) // { // if (count_find_edge < 7) // { // flag[0] = false; // flag[1] = false; // continue; // } // acsCtl->halt(DAXIS); // reqCMDRunFState = false; // lastTaskIsFinish= true; // acsCtl->setVEL(DAXIS, 30); // acsCtl->setACC(DAXIS,300); // acsCtl->setDEC(DAXIS,300); // acsCtl->setJERK(DAXIS, 3000); // acsCtl->setKDEC(DAXIS,3000); // return -1; // } // if ((ddPos[1] - ddPos[0]) < 1) // { // if (count_find_edge < 7) // { // flag[0] = false; // flag[1] = false; // continue; // } // acsCtl->halt(DAXIS); // reqCMDRunFState = false; // lastTaskIsFinish= true; // acsCtl->setVEL(DAXIS, 30); // acsCtl->setACC(DAXIS,300); // acsCtl->setDEC(DAXIS,300); // acsCtl->setJERK(DAXIS, 3000); // acsCtl->setKDEC(DAXIS,3000); // return -1; // } // acsCtl->halt(DAXIS); // acsCtl->ABSToPoint(DAXIS,(ddPos[0]+ddPos[1])/2); // Sleep(5); // while(1) // { // motorsts = acsCtl->getMotorState(DAXIS); // if (motorsts) // break; // if (StopFindEdgeFlag) // { // acsCtl->halt(DAXIS); // acsCtl->setVEL(DAXIS, 30); // acsCtl->setACC(DAXIS,300); // acsCtl->setDEC(DAXIS,300); // acsCtl->setJERK(DAXIS, 3000); // acsCtl->setKDEC(DAXIS,3000); // return -1; // } // Sleep(1); // } // acsCtl->RToPointPos(YAXIS,0.2); // Sleep(5); // while(1) // { // motorsts = acsCtl->getMotorState(YAXIS); // if (motorsts) // break; // if (StopFindEdgeFlag) // { // acsCtl->halt(DAXIS); // acsCtl->setVEL(DAXIS, 30); // acsCtl->setACC(DAXIS,300); // acsCtl->setDEC(DAXIS,300); // acsCtl->setJERK(DAXIS, 3000); // acsCtl->setKDEC(DAXIS,3000); // return -1; // } // Sleep(1); // } // value = acsCtl->getGlobalReal(vName); // if (value < -0.4) // { // LaserMarkOffset_Y = 0; // LaserMarkOffset_X = 0; // { // reqCMDRunFState = false; // lastTaskIsFinish= true; // acsCtl->setVEL(DAXIS, 30); // acsCtl->setACC(DAXIS,300); // acsCtl->setDEC(DAXIS,300); // acsCtl->setJERK(DAXIS, 3000); // acsCtl->setKDEC(DAXIS,3000); // return 0; // } // } // else // { // acsCtl->RToPointPos(YAXIS,-0.2); // DAxisCtPos = acsCtl->getFPOS(DAXIS); // double tmp = 360 - (DAxisCtPos - DAxisStartPos); // acsCtl->RToPointPos(DAXIS,tmp); // Sleep(5); // } // } // } // if (StopFindEdgeFlag) // { // acsCtl->halt(DAXIS); // acsCtl->setVEL(DAXIS, 30); // acsCtl->setACC(DAXIS,300); // acsCtl->setDEC(DAXIS,300); // acsCtl->setJERK(DAXIS, 3000); // acsCtl->setKDEC(DAXIS,3000); // return -1; // } // motorsts = acsCtl->getMotorState(DAXIS); // if (motorsts) // { // count_find_edge++; // if (count_find_edge > 7) // { // acsCtl->halt(DAXIS); // acsCtl->setVEL(DAXIS, 30); // acsCtl->setACC(DAXIS,300); // acsCtl->setDEC(DAXIS,300); // acsCtl->setJERK(DAXIS, 3000); // acsCtl->setKDEC(DAXIS,3000); // return -1; // } // acsCtl->RToPointPos(DAXIS,360); // DAxisStartPos = acsCtl->getFPOS(DAXIS); // if (count_find_edge == 2) // { // acsCtl->RToPointPos(YAXIS,-0.3); // } // else if (count_find_edge == 3) // { // acsCtl->RToPointPos(YAXIS,-0.3); // } // else if (count_find_edge == 4) // { // acsCtl->RToPointPos(YAXIS,-0.3); // } // else if (count_find_edge == 5) // { // acsCtl->RToPointPos(YAXIS,1.2); // } // else if (count_find_edge == 6) // { // acsCtl->RToPointPos(YAXIS,0.3); // } // else if (count_find_edge == 7) // { // acsCtl->RToPointPos(YAXIS,0.3); // } // } // } // catch (MyException mye) // { // exceptHandl_thread(MyException("寻边定位失败。",mye.getExceptCode()));//这里有问题,暂时没改。多线程中,不显示弹窗 // acsCtl->setVEL(DAXIS, 30); // acsCtl->setACC(DAXIS,300); // acsCtl->setDEC(DAXIS,300); // acsCtl->setJERK(DAXIS, 3000); // acsCtl->setKDEC(DAXIS,3000); // return -1; // } // Sleep(1); // } //} void myFindEdgeThread() { int ret; RS_SETTINGS->beginGroup("device/Type"); QString strType = RS_SETTINGS->readEntry("/value"); RS_SETTINGS->endGroup(); if (strType == "6寸") { //ret = DEV->FindEdgeThread_6(); ret = DEV->FindEdgeThread_6(); } else { ret = DEV->FindEdgeThread(); } //FindEdgeThread_6 DEV->emit FindEdgeFinishSGL(ret); return; } void myGetRatioP1P2Thread() { int ret; ret = DEV->GetRatioP1P2Thread(); //FindEdgeThread_6 DEV->emit GetRatioP1P2FinishSGL(ret); return; } void myElectricResistanceCheckThread() { int ret; ret = DEV->ElectricResistanceCheckThread(); DEV->emit show_Q_PP_SGL(); DEV->emit ElectricResistanceCheckFinishSGL(ret); return; } // 寻边定位 void DeviceProxy::FindEdgeInSide() { DEVICE_INFO->printDeviceSystemInfo("寻边定位中..."); RS_SETTINGS->beginGroup("device/DDMotor"); double DAxisVel = RS_SETTINGS->readNumDEntry("/Vel"); RS_SETTINGS->endGroup(); acsCtl->setVELParams(DAXIS,DAxisVel); DWORD ThreadID; HANDLE thrdHandle; thrdHandle = CreateThread(nullptr, 0, (LPTHREAD_START_ROUTINE)myFindEdgeThread, this, 0, &ThreadID); // } void DeviceProxy::GetRatoP1P2Side() { DEVICE_INFO->printDeviceSystemInfo("获取光路参数中..."); DWORD ThreadID; HANDLE thrdHandle; thrdHandle = CreateThread(nullptr, 0, (LPTHREAD_START_ROUTINE)myGetRatioP1P2Thread, this, 0, &ThreadID); // } void DeviceProxy::ElectricResistanceCheckSide() { DEVICE_INFO->printDeviceSystemInfo("晶锭预测量中..."); DWORD ThreadID; HANDLE thrdHandle; thrdHandle = CreateThread(nullptr, 0, (LPTHREAD_START_ROUTINE)myElectricResistanceCheckThread, this, 0, &ThreadID); // } // 面扫描 void DeviceProxy::SScanInSide() { DEVICE_INFO->printDeviceSystemInfo("扫描中..."); acsCtl->stopBuffer(1); char vname[]= ACSCTL_RUNF_V; acsCtl->setGlobalInt(vname,0); SScanCode sScanCode; RS_SETTINGS->beginGroup("device/SSCS"); double XRange = RS_SETTINGS->readNumDEntry("/XRange",1.0); double YRange = RS_SETTINGS->readNumDEntry("/YRange",1.0); double XInterval = RS_SETTINGS->readNumDEntry("/XInterval",1.0); double YInterval = RS_SETTINGS->readNumDEntry("/YInterval",1.0); RS_SETTINGS->endGroup(); sScanCode.setXWorkRange(XRange); sScanCode.setYWorkRange(YRange); sScanCode.setXSampInterval(XInterval); sScanCode.setYSampInterval(YInterval); QByteArray qByCode = sScanCode.getCode().toLatin1(); char* code = qByCode.data(); acsCtl->loadBuffer(1,code); acsCtl->compileBuffer(1); acsCtl->runBuffer(1); } // 补偿扫描 void DeviceProxy::compSScanInSide() { DEVICE_INFO->printDeviceSystemInfo("补偿面扫描中..."); SSStartYPos=YAxisCtPos; SSStartXPos=XAxisCtPos; acsCtl->stopBuffer(1); char vname[]= ACSCTL_RUNF_V; acsCtl->setGlobalInt(vname,0); CSScanCode cSScanCode; double XRange; double YRange; RS_SETTINGS->beginGroup("device/Type"); QString strType = RS_SETTINGS->readEntry("/value"); RS_SETTINGS->endGroup(); RS_SETTINGS->beginGroup("device/SSCS"); XRange = RS_SETTINGS->readNumDEntry("/XRange",1.0); YRange = RS_SETTINGS->readNumDEntry("/YRange",1.0); double XInterval = RS_SETTINGS->readNumDEntry("/XInterval",1.0); double YInterval = RS_SETTINGS->readNumDEntry("/YInterval",1.0); RS_SETTINGS->endGroup(); if (strType == "6寸") { XRange = INCHES6 * 2; YRange = INCHES6 * 2; } else if (strType == "8寸") { XRange = INCHES8 * 2; YRange = INCHES8 * 2; } else if (strType == "4寸") { XRange = INCHES4 * 2; YRange = INCHES4 * 2; } RS_SETTINGS->beginGroup("device/SSCS"); RS_SETTINGS->writeEntry("/XRange",XRange); RS_SETTINGS->writeEntry("/YRange",YRange); RS_SETTINGS->endGroup(); RS_SETTINGS->beginGroup("device/RSToZeroPos"); double XAxisPos = RS_SETTINGS->readNumDEntry("/XAxis"); double YAxisPos = RS_SETTINGS->readNumDEntry("/YAxis"); RS_SETTINGS->endGroup(); RS_SETTINGS->beginGroup("device/MRHCamera/calibPos"); double MHXAxis = RS_SETTINGS->readNumDEntry("/MHXAxis"); double MHYAxis = RS_SETTINGS->readNumDEntry("/MHYAxis"); double RHXAxis = RS_SETTINGS->readNumDEntry("/RHXAxis"); double RHYAxis = RS_SETTINGS->readNumDEntry("/RHYAxis"); RS_SETTINGS->endGroup(); // if (strType == "自定义") // { // cSScanCode.setRSToZeroXPos(XAxisCtPos + XRange/2 - RHXAxis + MHXAxis); // cSScanCode.setRSToZeroYPos(YAxisCtPos + YRange/2 - RHYAxis + MHYAxis); // } // else // { // cSScanCode.setRSToZeroXPos(XAxisPos - RHXAxis + MHXAxis); // cSScanCode.setRSToZeroYPos(YAxisPos - RHYAxis + MHYAxis); // } cSScanCode.setRSToZeroXPos(XAxisCtPos + XRange/2 - RHXAxis + MHXAxis); cSScanCode.setRSToZeroYPos(YAxisCtPos + YRange/2 - RHYAxis + MHYAxis); // RS_SETTINGS->beginGroup("device/ABSMove/Safe"); // double Z1 = RS_SETTINGS->readNumDEntry("/Z1"); // RS_SETTINGS->endGroup(); //cSScanCode.setRSToZeroZ1Pos(Z1); cSScanCode.setXWorkRange(XRange); cSScanCode.setYWorkRange(YRange); cSScanCode.setXSampInterval(XInterval); cSScanCode.setYSampInterval(YInterval); char *code; QByteArray byCode = cSScanCode.getCode().toLatin1(); code = byCode.data(); acsCtl->loadBuffer(1,code); acsCtl->compileBuffer(1); acsCtl->runBuffer(1); } // 加工头补偿打开 void DeviceProxy::MHCompOpenInSide() { DEVICE_INFO->printDeviceSystemInfo("加工头补偿打开中..."); acsCtl->stopBuffer(1); char vname[]= ACSCTL_RUNF_V; acsCtl->setGlobalInt(vname,0); MHCompCode mHCompCode; RS_SETTINGS->beginGroup("device/SSCS"); double XRange = RS_SETTINGS->readNumDEntry("/XRange",1.0); double YRange = RS_SETTINGS->readNumDEntry("/YRange",1.0); double XInterval = RS_SETTINGS->readNumDEntry("/XInterval",1.0); double YInterval = RS_SETTINGS->readNumDEntry("/YInterval",1.0); RS_SETTINGS->endGroup(); mHCompCode.setXStartPos(SSStartXPos); mHCompCode.setYStartPos(SSStartYPos); mHCompCode.setXWorkRange(XRange); mHCompCode.setYWorkRange(YRange); mHCompCode.setXInterval(XInterval); mHCompCode.setYInterval(YInterval); mHCompCode.setLookupCols(lookupTable.at(0).size()); mHCompCode.setLookupRows(lookupTable.size()); RS_SETTINGS->beginGroup("device/MRHCamera/calibPos"); double MHXAxis = RS_SETTINGS->readNumDEntry("/MHXAxis"); double MHYAxis = RS_SETTINGS->readNumDEntry("/MHYAxis"); double RHXAxis = RS_SETTINGS->readNumDEntry("/RHXAxis"); double RHYAxis = RS_SETTINGS->readNumDEntry("/RHYAxis"); RS_SETTINGS->endGroup(); mHCompCode.setMHRHYOffset(MHYAxis-RHYAxis); mHCompCode.setMHRHXOffset(MHXAxis-RHXAxis); char *code; QByteArray byCode = mHCompCode.getCode().toLatin1(); code = byCode.data(); acsCtl->loadBuffer(1,code); acsCtl->compileBuffer(1); downLoadLookupTable(); acsCtl->runBuffer(1); } // 补偿关闭 void DeviceProxy::compCloseInSide() { DEVICE_INFO->printDeviceSystemInfo("补偿关闭中..."); acsCtl->disableComp(ZAXIS); emit MHCompCloseFSGL(); DEV->devPlaneScanCompState = 0; DEVICE_INFO->printDeviceSystemInfo("补偿关闭完成"); } void DeviceProxy::toLoadAndUnloadPosInSide() { DEVICE_INFO->printDeviceSystemInfo(QString("到上下料位运动中...")); acsCtl->stopBuffer(1); char vname[]= ACSCTL_RUNF_V; acsCtl->setGlobalInt(vname,0); MAxisABSMoveCode mAxisABSMoveCode; RS_SETTINGS->beginGroup("device/ZAAxisSafe"); double ZAAxisSafePos = RS_SETTINGS->readNumEntry("/pos"); double ZAAxisToSafePosVel = RS_SETTINGS->readNumEntry("/vel"); RS_SETTINGS->endGroup(); mAxisABSMoveCode.setZAAxisSafePos(ZAAxisSafePos); mAxisABSMoveCode.setZAAxisToSafePosVel(ZAAxisToSafePosVel); mAxisABSMoveCode.setXAxisIsMove(true); mAxisABSMoveCode.setYAxisIsMove(true); mAxisABSMoveCode.setZAxisIsMove(true); mAxisABSMoveCode.setZAAxisIsMove(false); mAxisABSMoveCode.disableZAAxisToSafePos(false); RS_SETTINGS->beginGroup("device/LoadAndUnloadPos"); double XAxisPos = RS_SETTINGS->readNumDEntry("/XAxis"); double YAxisPos = RS_SETTINGS->readNumDEntry("/YAxis"); double ZAxisPos = RS_SETTINGS->readNumDEntry("/ZAxis"); RS_SETTINGS->endGroup(); mAxisABSMoveCode.setXAxisTGPos(XAxisPos); mAxisABSMoveCode.setYAxisTGPos(YAxisPos); mAxisABSMoveCode.setZAxisTGPos(ZAxisPos); // 加载PTP位置设置 RS_SETTINGS->beginGroup("device/ABSMove/Vel"); double XAxisVel = RS_SETTINGS->readNumDEntry("/XAxis"); double YAxisVel = RS_SETTINGS->readNumDEntry("/YAxis"); double ZAxisVel = RS_SETTINGS->readNumDEntry("/ZAxis"); double ZAAxisVel = RS_SETTINGS->readNumDEntry("/ZAAxis"); RS_SETTINGS->endGroup(); mAxisABSMoveCode.setXAxisVel(XAxisVel); mAxisABSMoveCode.setYAxisVel(YAxisVel); mAxisABSMoveCode.setZAxisVel(ZAxisVel); mAxisABSMoveCode.setZAAxisVel(ZAAxisVel); char *code; QByteArray byCode = mAxisABSMoveCode.getCode().toLatin1(); code = byCode.data(); acsCtl->loadBuffer(1,code); acsCtl->compileBuffer(1); acsCtl->runBuffer(1); } void DeviceProxy::GloblaCameraPosInSide() { DEVICE_INFO->printDeviceSystemInfo(QString("到全局相机位运动中...")); acsCtl->stopBuffer(1); char vname[]= ACSCTL_RUNF_V; acsCtl->setGlobalInt(vname,0); MAxisABSMoveCode mAxisABSMoveCode; RS_SETTINGS->beginGroup("device/ZAAxisSafe"); double ZAAxisSafePos = RS_SETTINGS->readNumEntry("/pos"); double ZAAxisToSafePosVel = RS_SETTINGS->readNumEntry("/vel"); RS_SETTINGS->endGroup(); mAxisABSMoveCode.setZAAxisSafePos(ZAAxisSafePos); mAxisABSMoveCode.setZAAxisToSafePosVel(ZAAxisToSafePosVel); mAxisABSMoveCode.setXAxisIsMove(true); mAxisABSMoveCode.setYAxisIsMove(true); mAxisABSMoveCode.setZAxisIsMove(false); mAxisABSMoveCode.setZAAxisIsMove(true); mAxisABSMoveCode.disableZAAxisToSafePos(false); RS_SETTINGS->beginGroup("device/GlobalCameraPos"); double XAxisPos = RS_SETTINGS->readNumDEntry("/XAxis"); double YAxisPos = RS_SETTINGS->readNumDEntry("/YAxis"); //double ZAxisPos = RS_SETTINGS->readNumDEntry("/ZAxis"); RS_SETTINGS->endGroup(); RS_SETTINGS->beginGroup("device/Rposition"); double GlobalCameraOffset = RS_SETTINGS->readNumDEntry("/GlobalCameraOffset"); RS_SETTINGS->endGroup(); mAxisABSMoveCode.setXAxisTGPos(XAxisPos); mAxisABSMoveCode.setYAxisTGPos(YAxisPos); mAxisABSMoveCode.setZAAxisTGPos(workpieceHeight+GlobalCameraOffset); // 加载PTP位置设置 RS_SETTINGS->beginGroup("device/ABSMove/Vel"); double XAxisVel = RS_SETTINGS->readNumDEntry("/XAxis"); double YAxisVel = RS_SETTINGS->readNumDEntry("/YAxis"); double ZAxisVel = RS_SETTINGS->readNumDEntry("/ZAxis"); double ZAAxisVel = RS_SETTINGS->readNumDEntry("/ZAAxis"); RS_SETTINGS->endGroup(); mAxisABSMoveCode.setXAxisVel(XAxisVel); mAxisABSMoveCode.setYAxisVel(YAxisVel); mAxisABSMoveCode.setZAxisVel(ZAxisVel); mAxisABSMoveCode.setZAAxisVel(ZAAxisVel); char *code; QByteArray byCode = mAxisABSMoveCode.getCode().toLatin1(); code = byCode.data(); acsCtl->loadBuffer(1,code); acsCtl->compileBuffer(1); acsCtl->runBuffer(1); } void DeviceProxy::toSScanStartPosInSide() { DEVICE_INFO->printDeviceSystemInfo(QString("到扫描起始位运动中...")); acsCtl->stopBuffer(1); char vname[]= ACSCTL_RUNF_V; acsCtl->setGlobalInt(vname,0); MAxisABSMoveCode mAxisABSMoveCode; mAxisABSMoveCode.setXAxisIsMove(true); mAxisABSMoveCode.setYAxisIsMove(true); mAxisABSMoveCode.setZAxisIsMove(false); mAxisABSMoveCode.setZAAxisIsMove(false); mAxisABSMoveCode.disableZAAxisToSafePos(true); RS_SETTINGS->beginGroup("device/RSToZeroPos"); double XAxisPos = RS_SETTINGS->readNumDEntry("/XAxis"); double YAxisPos = RS_SETTINGS->readNumDEntry("/YAxis"); RS_SETTINGS->endGroup(); RS_SETTINGS->beginGroup("device/Type"); QString strType = RS_SETTINGS->readEntry("/value"); RS_SETTINGS->endGroup(); if (strType == "6寸") { XAxisPos = XAxisPos - INCHES6; YAxisPos = YAxisPos - INCHES6; } else if (strType == "8寸") { XAxisPos = XAxisPos - INCHES8; YAxisPos = YAxisPos - INCHES8; } else if (strType == "4寸") { XAxisPos = XAxisPos - INCHES4; YAxisPos = YAxisPos - INCHES4; } mAxisABSMoveCode.setXAxisTGPos(XAxisPos); mAxisABSMoveCode.setYAxisTGPos(YAxisPos); // 加载PTP位置设置 RS_SETTINGS->beginGroup("device/ABSMove/Vel"); double XAxisVel = RS_SETTINGS->readNumDEntry("/XAxis"); double YAxisVel = RS_SETTINGS->readNumDEntry("/YAxis"); double ZAxisVel = RS_SETTINGS->readNumDEntry("/ZAxis"); double ZAAxisVel = RS_SETTINGS->readNumDEntry("/ZAAxis"); RS_SETTINGS->endGroup(); mAxisABSMoveCode.setXAxisVel(XAxisVel); mAxisABSMoveCode.setYAxisVel(YAxisVel); mAxisABSMoveCode.setZAxisVel(ZAxisVel); mAxisABSMoveCode.setZAAxisVel(ZAAxisVel); char *code; QByteArray byCode = mAxisABSMoveCode.getCode().toLatin1(); code = byCode.data(); acsCtl->loadBuffer(1,code); acsCtl->compileBuffer(1); acsCtl->runBuffer(1); } void DeviceProxy::toRSToZeroPosInSide() { DEVICE_INFO->printDeviceSystemInfo(QString("到对零位运动中...")); acsCtl->stopBuffer(1); char vname[]= ACSCTL_RUNF_V; acsCtl->setGlobalInt(vname,0); MAxisABSMoveCode mAxisABSMoveCode; RS_SETTINGS->beginGroup("device/ZAAxisSafe"); double ZAAxisSafePos = RS_SETTINGS->readNumEntry("/pos"); double ZAAxisToSafePosVel = RS_SETTINGS->readNumEntry("/vel"); RS_SETTINGS->endGroup(); mAxisABSMoveCode.setZAAxisSafePos(ZAAxisSafePos); mAxisABSMoveCode.setZAAxisToSafePosVel(ZAAxisToSafePosVel); mAxisABSMoveCode.setXAxisIsMove(true); mAxisABSMoveCode.setYAxisIsMove(true); mAxisABSMoveCode.setZAxisIsMove(false); mAxisABSMoveCode.setZAAxisIsMove(true); mAxisABSMoveCode.disableZAAxisToSafePos(false); RS_SETTINGS->beginGroup("device/RSToZeroPos"); double XAxisPos = RS_SETTINGS->readNumDEntry("/XAxis"); double YAxisPos = RS_SETTINGS->readNumDEntry("/YAxis"); RS_SETTINGS->endGroup(); mAxisABSMoveCode.setXAxisTGPos(XAxisPos); mAxisABSMoveCode.setYAxisTGPos(YAxisPos); mAxisABSMoveCode.setZAAxisTGPos(ZAAxisSafePos); // 加载PTP位置设置 RS_SETTINGS->beginGroup("device/ABSMove/Vel"); double XAxisVel = RS_SETTINGS->readNumDEntry("/XAxis"); double YAxisVel = RS_SETTINGS->readNumDEntry("/YAxis"); double ZAxisVel = RS_SETTINGS->readNumDEntry("/ZAxis"); double ZAAxisVel = RS_SETTINGS->readNumDEntry("/ZAAxis"); RS_SETTINGS->endGroup(); mAxisABSMoveCode.setXAxisVel(XAxisVel); mAxisABSMoveCode.setYAxisVel(YAxisVel); mAxisABSMoveCode.setZAxisVel(ZAxisVel); mAxisABSMoveCode.setZAAxisVel(ZAAxisVel); char *code; QByteArray byCode = mAxisABSMoveCode.getCode().toLatin1(); code = byCode.data(); acsCtl->loadBuffer(1,code); acsCtl->compileBuffer(1); acsCtl->runBuffer(1); } void DeviceProxy::SMachInSide(int index) { DEVICE_INFO->printDeviceSystemInfo("单步加工中..."); acsCtl->stopBuffer(1); char vname[]= ACSCTL_RUNF_V; acsCtl->setGlobalInt(vname,0); // QByteArray qbyCode = MachCode().getCode().toLatin1(); // char* code = qbyCode.data(); // acsCtl->loadBuffer(1,code); // 加载加工代码路径 RS_SETTINGS->beginGroup("device/Mach"); QString machCodeFilePath = RS_SETTINGS->readEntry("/codeFilePath"); // QString machCodeFilePath2 = RS_SETTINGS->readEntry("/codeFilePath2"); // QString machCodeFilePath3 = RS_SETTINGS->readEntry("/codeFilePath3"); // QString machCodeFilePath4 = RS_SETTINGS->readEntry("/codeFilePath4"); // QString machCodeFilePath5 = RS_SETTINGS->readEntry("/codeFilePath5"); RS_SETTINGS->endGroup(); if(machCodeFilePath == "") { throw MyException("加工代码路径为空,无法执行单步加工。请先指定加工代码路径。",acsc_GetLastError()); } // QByteArray fileNameQby = machCodeFilePath.toLocal8Bit(); // char* fileName = fileNameQby.data(); // acsCtl->loadBuffersFromFile(fileName); machCodeFilePath = machCodeFilePath + QString("_%1.txt").arg(index); int ret = deCode_file(machCodeFilePath); if (ret != 0) { throw MyException("加工代码解码出错,无法执行单步加工。请先确定加工代码路径。",acsc_GetLastError()); } char *code; QByteArray byCode = deCodeString.toLatin1(); code = byCode.data(); acsCtl->loadBuffer(8,code); acsCtl->compileBuffer(8); acsCtl->runBuffer(8); // acsCtl->compileBuffer(8); // acsCtl->runBuffer(8); } void DeviceProxy::semiAutoMachInSide() { DEVICE_INFO->printDeviceSystemInfo("半自动加工中..."); emit AutoSmachStateSGL(true); emit SmachTypeStateSGL(false); emit VacuumSuckerOnOrOffStateSGL(false); emit StopStateSGL(!DEV->SuspendFlag); bRunning = true; emit RunSGL(!bRunning); step = 1; StopFindEdgeFlag = false; MODBUSTCP->stopFlag = false; checkZaxisAlarmFlag = true; LaserTestApFlag = false; StopGonglvCheckFlag = false; } void DeviceProxy::vacuumSuckerOpenInSide() { DEVICE_INFO->printDeviceSystemInfo("真空吸盘打开中..."); char vname[] = ACSCTL_DO1_V; int do1 = acsCtl->getGlobalInt(vname); RS_SETTINGS->beginGroup("device/DO"); QString vacuumSuckerDONumStr = RS_SETTINGS->readEntry("/vacuumSucker"); RS_SETTINGS->endGroup(); int vacuumSuckerDONum = vacuumSuckerDONumStr.toInt(); int mask = 1; mask = mask<setGlobalInt(vname,do1); devWorkpieceLockState = 1; emit vacuumSuckerOpenFSGL(); DEVICE_INFO->printDeviceSystemInfo("真空吸盘打开完成"); } void DeviceProxy::vacuumSuckerCloseInSide() { DEVICE_INFO->printDeviceSystemInfo("真空吸盘关闭中..."); char vname[] = ACSCTL_DO1_V; int do1 = acsCtl->getGlobalInt(vname); RS_SETTINGS->beginGroup("device/DO"); QString vacuumSuckerDONumStr = RS_SETTINGS->readEntry("/vacuumSucker"); RS_SETTINGS->endGroup(); int vacuumSuckerDONum = vacuumSuckerDONumStr.toInt(); int mask = 1; mask = mask<setGlobalInt(vname,do1); devWorkpieceLockState = 0; emit vacuumSuckerCloseFSGL(); DEVICE_INFO->printDeviceSystemInfo("真空吸盘关闭完成"); } void DeviceProxy::laserOpenInSide() { DEVICE_INFO->printDeviceSystemInfo("激光器打开中..."); char vname[] = ACSCTL_DO1_V; int do1 = acsCtl->getGlobalInt(vname); RS_SETTINGS->beginGroup("device/DO"); QString laserDONumStr = RS_SETTINGS->readEntry("/laser"); RS_SETTINGS->endGroup(); int laserDONum = laserDONumStr.toInt(); int mask = 1; mask = mask<setGlobalInt(vname,do1); emit laserOpenFSGL(); devLaserState = 1; DEVICE_INFO->printDeviceSystemInfo("激光器打开完成"); } void DeviceProxy::laserCloseInSide() { DEVICE_INFO->printDeviceSystemInfo("激光器关闭中..."); char vname[] = ACSCTL_DO1_V; int do1 = acsCtl->getGlobalInt(vname); RS_SETTINGS->beginGroup("device/DO"); QString laserDONumStr = RS_SETTINGS->readEntry("/laser"); RS_SETTINGS->endGroup(); int laserDONum = laserDONumStr.toInt(); int mask = 1; mask = mask<setGlobalInt(vname,do1); emit laserCloseFSGL(); devLaserState = 0; DEVICE_INFO->printDeviceSystemInfo("激光器关闭完成"); } void DeviceProxy::RHToMHInSide() { DEVICE_INFO->printDeviceSystemInfo("测距头到加工头位置运动中..."); acsCtl->stopBuffer(1); char vname[]= ACSCTL_RUNF_V; acsCtl->setGlobalInt(vname,0); MAxisABSMoveCode mAxisABSMoveCode; RS_SETTINGS->beginGroup("device/ZAAxisSafe"); double ZAAxisSafePos = RS_SETTINGS->readNumEntry("/pos"); double ZAAxisToSafePosVel = RS_SETTINGS->readNumEntry("/vel"); RS_SETTINGS->endGroup(); mAxisABSMoveCode.setZAAxisSafePos(ZAAxisSafePos); mAxisABSMoveCode.setZAAxisToSafePosVel(ZAAxisToSafePosVel); mAxisABSMoveCode.setXAxisIsMove(true); mAxisABSMoveCode.setYAxisIsMove(true); mAxisABSMoveCode.setZAxisIsMove(false); mAxisABSMoveCode.setZAAxisIsMove(false); mAxisABSMoveCode.disableZAAxisToSafePos(true); mAxisABSMoveCode.setCMRSwitch(true); RS_SETTINGS->beginGroup("device/MRHCamera/calibPos"); double MHXAxis = RS_SETTINGS->readNumDEntry("/MHXAxis"); double MHYAxis = RS_SETTINGS->readNumDEntry("/MHYAxis"); double RHXAxis = RS_SETTINGS->readNumDEntry("/RHXAxis"); double RHYAxis = RS_SETTINGS->readNumDEntry("/RHYAxis"); RS_SETTINGS->endGroup(); mAxisABSMoveCode.setXAxisTGPos(RHXAxis-MHXAxis); mAxisABSMoveCode.setYAxisTGPos(RHYAxis-MHYAxis); RS_SETTINGS->beginGroup("device/MRHCamera/switchVel"); double XAxisVel = RS_SETTINGS->readNumDEntry("/XAxis"); double YAxisVel = RS_SETTINGS->readNumDEntry("/YAxis"); RS_SETTINGS->endGroup(); mAxisABSMoveCode.setXAxisVel(XAxisVel); mAxisABSMoveCode.setYAxisVel(YAxisVel); char *code; QByteArray byCode = mAxisABSMoveCode.getCode().toLatin1(); code = byCode.data(); acsCtl->loadBuffer(1,code); acsCtl->compileBuffer(1); acsCtl->runBuffer(1); } void DeviceProxy::MHToRHInSide() { DEVICE_INFO->printDeviceSystemInfo("加工头到测距头位置运动中..."); acsCtl->stopBuffer(1); char vname[]= ACSCTL_RUNF_V; acsCtl->setGlobalInt(vname,0); MAxisABSMoveCode mAxisABSMoveCode; RS_SETTINGS->beginGroup("device/ZAAxisSafe"); double ZAAxisSafePos = RS_SETTINGS->readNumEntry("/pos"); double ZAAxisToSafePosVel = RS_SETTINGS->readNumEntry("/vel"); RS_SETTINGS->endGroup(); mAxisABSMoveCode.setZAAxisSafePos(ZAAxisSafePos); mAxisABSMoveCode.setZAAxisToSafePosVel(ZAAxisToSafePosVel); mAxisABSMoveCode.setXAxisIsMove(true); mAxisABSMoveCode.setYAxisIsMove(true); mAxisABSMoveCode.setZAxisIsMove(false); mAxisABSMoveCode.setZAAxisIsMove(false); mAxisABSMoveCode.disableZAAxisToSafePos(true); mAxisABSMoveCode.setCMRSwitch(true); RS_SETTINGS->beginGroup("device/MRHCamera/calibPos"); double MHXAxis = RS_SETTINGS->readNumDEntry("/MHXAxis"); double MHYAxis = RS_SETTINGS->readNumDEntry("/MHYAxis"); double RHXAxis = RS_SETTINGS->readNumDEntry("/RHXAxis"); double RHYAxis = RS_SETTINGS->readNumDEntry("/RHYAxis"); RS_SETTINGS->endGroup(); mAxisABSMoveCode.setXAxisTGPos(MHXAxis-RHXAxis); mAxisABSMoveCode.setYAxisTGPos(MHYAxis-RHYAxis); RS_SETTINGS->beginGroup("device/MRHCamera/switchVel"); double XAxisVel = RS_SETTINGS->readNumDEntry("/XAxis"); double YAxisVel = RS_SETTINGS->readNumDEntry("/YAxis"); RS_SETTINGS->endGroup(); mAxisABSMoveCode.setXAxisVel(XAxisVel); mAxisABSMoveCode.setYAxisVel(YAxisVel); char *code; QByteArray byCode = mAxisABSMoveCode.getCode().toLatin1(); code = byCode.data(); acsCtl->loadBuffer(1,code); acsCtl->compileBuffer(1); acsCtl->runBuffer(1); } void DeviceProxy::ClientConnect() { //解析所有客户连接 while (server->hasPendingConnections()) { //连接上后通过socket获取连接信息 socket = server->nextPendingConnection(); QString str = QString("[ip:%1,port:%2]").arg(socket->peerAddress().toString()).arg(socket->peerPort()); //提示连接成功 //ui->edLog->append(str+"Connect to the server"); //监听客户端是否有消息发送 connect(socket, &QTcpSocket::readyRead, this, &DeviceProxy::ReadData1); } } extern QImage* qimgRecv;//从python返回的img转化为qimage extern cv::Mat imgRecv;//从python返回的img extern cv::Mat imgcv;//拼接完成的图片 void DeviceProxy::ReadData1() { QDataStream streamin(socket); streamin.setByteOrder(QDataStream::BigEndian); quint32 recvsize; streamin >> recvsize; QByteArray imgDataReceived; while (imgDataReceived.size() < recvsize) { socket->waitForReadyRead(); imgDataReceived.append(socket->readAll()); } imgRecv = cv::imdecode(std::vector(imgDataReceived.begin(), imgDataReceived.end()), 1); imwrite("binary_mask.jpg",imgRecv); emit ShowMergeSGL(); // QImage imgReceived; // imgReceived.loadFromData(imgDataReceived, "JPG"); // ui->lbImage->setPixmap(QPixmap::fromImage(imgReceived)); } //图像畸变矫正 cv::Mat undistortImage(const cv::Mat& img, const cv::Mat& mtx, const cv::Mat& dist) { // Get image dimensions int h = img.rows; int w = img.cols; // Get optimal new camera matrix cv::Mat newCameraMatrix = cv::getOptimalNewCameraMatrix(mtx, dist, cv::Size(w, h), 1); // Undistort image cv::Mat undistorted; cv::undistort(img, undistorted, mtx, dist, newCameraMatrix); // Crop the image based on ROI cv::Rect roi; cv::Mat map1, map2; cv::initUndistortRectifyMap(mtx, dist, cv::Mat(), newCameraMatrix, cv::Size(w, h), CV_16SC2, map1, map2); cv::remap(undistorted, undistorted, map1, map2, cv::INTER_LINEAR); return undistorted; } cv::Mat Func(int left,int right); int DeviceProxy::GetGlobalPhotoThread() { //1、连接,获取数组 S T E //2、到第一点,读取。循环。结束 //除了xy位置,Z轴位置也是要计算的。增加一个Z0轴偏移,参考Z2偏移 //测试时,第一次运行,先升Z轴,再升Z0轴,xy到位,Z0落下 //后续只动XY,不在动z0,直至测完。 //测完后,升z0轴,完成测试 StopElectricResistanceCheckFlag = false; int step = 0; bool hasToBuffer = false; Mat image; int ret; RS_SETTINGS->beginGroup("device/Rposition"); double GlobalPix = RS_SETTINGS->readNumDEntry("/GlobalPix"); int StartPos = RS_SETTINGS->readNumDEntry("/StartPos"); int StartPosRight = RS_SETTINGS->readNumDEntry("/StartPosRight"); RS_SETTINGS->endGroup(); Mat dst(3648, 22*(StartPosRight-StartPos), CV_8UC3, Scalar(0, 0, 0)); //相机矩阵 cv::Mat matrix = (cv::Mat_(3, 3) << 3.65452135e+03, 0.00000000e+00, 2.68227419e+03, 0.00000000e+00, 3.65376535e+03, 1.85203897e+03, 0.00000000e+00, 0.00000000e+00, 1.00000000e+00); // cv::Mat distortion = (cv::Mat_(1, 5) << -2.82350423e-01, 4.36380572e-01, 5.89137914e-04, // 2.92578449e-04, -2.93841329e-01); cv::Mat distortion = (cv::Mat_(1, 5) << -2.24760208e-01, 2.86969144e-01, -4.89342095e-05, -1.02890234e-04, -1.67326601e-01); LIGHTSOURCEFIND->LightOn(4); while(1) { switch(step) { case 0: if (!hasToBuffer) { acsCtl->setVEL(DAXIS, 40); acsCtl->setACC(DAXIS,400); acsCtl->setDEC(DAXIS,400); acsCtl->setJERK(DAXIS, 4000); acsCtl->setKDEC(DAXIS,4000); acsCtl->RToPointPos(DAXIS,-90);//转到工作位 GloblaCameraPosInSide(); reqCMDRunFState = true; hasToBuffer = true; } else { if (!reqCMDRunFState)//buffer是否执行完毕 { bool motorstsD,motorstsX; acsCtl->RToPointPos(XAXIS,-113);//转到工作位,拍照的起始位置 while(1) { motorstsD = acsCtl->getMotorState(DAXIS); motorstsX = acsCtl->getMotorState(XAXIS); if (motorstsD && motorstsX) break; if (DEV->StopElectricResistanceCheckFlag) { acsCtl->halt(DAXIS); acsCtl->halt(XAXIS); return -1; } Sleep(50); } RS_SETTINGS->beginGroup("device/Rposition"); RS_SETTINGS->writeEntry("/XiaoXAxis", XAxisCtPos+(11*(StartPosRight-StartPos)+(StartPos-5472/2))/GlobalPix); RS_SETTINGS->endGroup(); step = step + 1; hasToBuffer = false; //std::vector().swap(srcImgs); //continue; } } break; case 1: for (int i = 0;i<22;i++) { bool motorstsX; acsCtl->RToPointPos(XAXIS,10); Sleep(20); while(1) { motorstsX = acsCtl->getMotorState(XAXIS); if (motorstsX) break; if (DEV->StopElectricResistanceCheckFlag) { acsCtl->halt(XAXIS); return -1; } Sleep(50); } ret = CAMERAFIND->GetImage(image,true); if (ret < 0) { return -1; } else { // QDateTime datetime = QDateTime::currentDateTime(); char buf[200]; //sprintf(buf,"%s.jpg",datetime.toString("yyyyMMddHHmmsszzz").toLocal8Bit().data()); sprintf(buf,"%d.jpg",i); // 对图像进行校正 // cv::Mat undistorted = undistortImage(image, matrix, distortion); // std::string new_filename = "undistorted_" + std::string(buf); // imwrite(new_filename,undistorted); //cv::flip(image, image, 0); //cv::flip(image, image, 1); imwrite(buf,image); //image.copyTo(srcImgs[i]); //cv::Rect roi(StartPos, 0, (int)GlobalPix*10, image.rows); cv::Rect roi(StartPos, 0, (StartPosRight-StartPos), image.rows); cv::Mat cropped_image = image(roi); Mat dst_roi= dst(Rect(i*(StartPosRight-StartPos), 0, (StartPosRight-StartPos), dst.rows)); cropped_image.copyTo(dst_roi); // cv::Rect roi(StartPos, 0, (StartPosRight-StartPos), undistorted.rows); // cv::Mat cropped_image = undistorted(roi); // Mat dst_roi= dst(Rect(i*(StartPosRight-StartPos), 0, (StartPosRight-StartPos), dst.rows)); // cropped_image.copyTo(dst_roi); // srcImgs.push_back(cropped_image); } } LIGHTSOURCEFIND->LightOff(4); step = step + 1; break; case 2: dst.copyTo(imgcv); imwrite("imgcv.jpg",imgcv); acsCtl->RToPointPos(DAXIS,90);//转到工作位 return 0; } if (DEV->StopElectricResistanceCheckFlag) { return -1; } Sleep(5); } } void myGetGlobalPhotoThread() { int ret; ret = DEV->GetGlobalPhotoThread(); if (ret ==0) { DEVICE_INFO->printDeviceSystemInfo(QString("全局相机拍照运行完毕!")); } else DEVICE_INFO->printDeviceSystemInfo(QString("全局相机拍照失败!")); DEV->emit GetGlobalPhotoFinishSGL(ret); return; } void DeviceProxy::GetGlobalPhotoSide() { DEVICE_INFO->printDeviceSystemInfo("全局相机拍照中..."); DWORD ThreadID; HANDLE thrdHandle; thrdHandle = CreateThread(nullptr, 0, (LPTHREAD_START_ROUTINE)myGetGlobalPhotoThread, this, 0, &ThreadID); // } void DeviceProxy::MHCompOpen() { if(!devIsReset) { emit exceptSGL(MyException(QString("设备未初始化,未复位,无法执行开启面扫描补偿。请先完成复位。"),MY_WARN)); return; } if(!lastTaskIsFinish) { emit exceptSGL(MyException(QString("%1任务执行中,无法执行开启面扫描补偿。请先停止运动或等待任务结束。").arg(lastTaskName),MY_WARN)); return; } if (lookupTable.size() == 0) { emit exceptSGL(MyException(QString("设备未执行平面扫描,无法执行开启面扫描补偿。请先扫描。"),MY_WARN)); return; } if(bRunning) { emit exceptSGL(MyException(QString("自动运行执行中,请等待运行结束。"),MY_WARN)); return; } if(bRunning) { emit exceptSGL(MyException(QString("自动运行执行中,请等待运行结束。"),MY_WARN)); return; } if (lookupTable.empty()) { emit exceptSGL(MyException(QString("扫描数据为空,请先扫描。"),MY_WARN)); return; } try { lastTaskIsFinish=false; lastTaskName="面扫描补偿打开"; MHCompOpenInSide(); connect(this,SIGNAL(CMDRunFinishSGL()),this,SLOT(MHCompOpenFHandl())); reqCMDRunFState = true; } catch (MyException mye) { exceptHandl(MyException("面扫描补偿打开失败。",mye.getExceptCode())); } } void DeviceProxy::MotionCompOpen(bool flag,double array[]) { if(!devIsReset) { emit exceptSGL(MyException(QString("设备未初始化,未复位,无法执行开启运动补偿。请先完成复位。"),MY_WARN)); return; } // if(!lastTaskIsFinish) // { // emit exceptSGL(MyException(QString("%1任务执行中,无法执行开启运动补偿。请先停止运动或等待任务结束。").arg(lastTaskName),MY_WARN)); // return; // } // if(bRunning) // { // emit exceptSGL(MyException(QString("自动运行执行中,请等待运行结束。"),MY_WARN)); // return; // } if (!flag) { if (array == nullptr) { emit exceptSGL(MyException(QString("参数错误!"),MY_WARN)); return; } } try { lastTaskIsFinish=false; lastTaskName="运动补偿打开"; acsCtl->stopBuffer(5); DEVICE_INFO->printDeviceSystemInfo("运行补偿开启中..."); double CompensationX1; double CompensationX2; double CompensationOffset; double CompensationMaxValue; if (flag) { RS_SETTINGS->beginGroup("device/ABSMove/Safe"); CompensationX1 = RS_SETTINGS->readNumDEntry("/CompensationX1"); CompensationX2 = RS_SETTINGS->readNumDEntry("/CompensationX2"); CompensationOffset = RS_SETTINGS->readNumDEntry("/CompensationOffset"); CompensationMaxValue = RS_SETTINGS->readNumDEntry("/CompensationMaxValue"); RS_SETTINGS->endGroup(); } else { CompensationX1 = array[0]; CompensationX2 = array[1]; CompensationOffset = array[2]; CompensationMaxValue = array[3]; } MHCompCode mHCompCode; mHCompCode.MaxCmp = CompensationMaxValue; mHCompCode.MaxPos_x = CompensationX2; mHCompCode.MinPos_x = CompensationX1; mHCompCode.x_offset = CompensationOffset; char *code; QByteArray byCode = mHCompCode.getCode_motion().toLatin1(); code = byCode.data(); acsCtl->loadBuffer(5,code); acsCtl->compileBuffer(5); acsCtl->runBuffer(5); emit MotionCompOpenFSGL(); devMotionCompState = 1; DEVICE_INFO->printDeviceSystemInfo("运行补偿开启完成"); lastTaskIsFinish=true; } catch (MyException mye) { exceptHandl(MyException("运动补偿打开失败。",mye.getExceptCode())); } } void DeviceProxy::FindEdge() { if(!devIsReset) { emit exceptSGL(MyException(QString("设备未初始化,未复位,无法执行寻边定位。请先完成复位。"),MY_WARN)); return; } if(!lastTaskIsFinish) { emit exceptSGL(MyException(QString("%1任务执行中,无法执行寻边定位。请先停止运动或等待任务结束。").arg(lastTaskName),MY_WARN)); return; } if(bRunning) { emit exceptSGL(MyException(QString("自动运行执行中,请等待运行结束。"),MY_WARN)); return; } try { lastTaskIsFinish=false; lastTaskName="寻边定位"; FindEdgeInSide(); connect(this,SIGNAL(FindEdgeFinishSGL(int)),this,SLOT(FindEdgeFHandl(int))); reqCMDRunFState = true; } catch (MyException mye) { exceptHandl(MyException("寻边定位失败。",mye.getExceptCode())); } } void DeviceProxy::GetRatioP1P2()//PEG_R { if(!devIsReset) { emit exceptSGL(MyException(QString("设备未初始化,未复位,无法获取光路参数。请先完成复位。"),MY_WARN)); return; } if(!lastTaskIsFinish) { emit exceptSGL(MyException(QString("%1任务执行中,无法获取光路参数。请先停止运动或等待任务结束。").arg(lastTaskName),MY_WARN)); return; } if(bRunning) { emit exceptSGL(MyException(QString("自动运行执行中,请等待运行结束。"),MY_WARN)); return; } try { lastTaskIsFinish=false; lastTaskName="获取光路参数"; GetRatoP1P2Side(); connect(this,SIGNAL(GetRatioP1P2FinishSGL(int)),this,SLOT(GetRatioP1P2FHandl(int))); reqCMDRunFState = true; } catch (MyException mye) { exceptHandl(MyException("获取光路参数失败。",mye.getExceptCode())); } } void DeviceProxy::GetGlobalPhoto() { if(!devIsReset) { emit exceptSGL(MyException(QString("设备未初始化,未复位,无法开始测量电阻。请先完成复位。"),MY_WARN)); return; } if(!lastTaskIsFinish) { emit exceptSGL(MyException(QString("%1任务执行中,无法开始全局相机拍照。请先停止运动或等待任务结束。").arg(lastTaskName),MY_WARN)); return; } if(bRunning) { emit exceptSGL(MyException(QString("自动运行执行中,请等待运行结束。"),MY_WARN)); return; } try { lastTaskIsFinish=false; lastTaskName="全局相机拍照"; GetGlobalPhotoSide(); connect(this,SIGNAL(GetGlobalPhotoFinishSGL(int)),this,SLOT(GetGlobalPhotoFHandl(int))); //reqCMDRunFState = true; } catch (MyException mye) { exceptHandl(MyException("全局相机拍照失败。",mye.getExceptCode())); } } void DeviceProxy::GetGlobalPhotoFHandl(int result) { disconnect(this,SIGNAL(GetGlobalPhotoFinishSGL(int)),this,SLOT(GetGlobalPhotoFHandl(int))); if (result == 0) DEVICE_INFO->printDeviceSystemInfo("全局相机拍照完成"); else DEVICE_INFO->printDeviceSystemInfo("全局相机拍照失败,未完成检测!"); //ABSMove_Z0_test(); lastTaskIsFinish=true; SpecificAreasWidget * specificAreasWidget = new(SpecificAreasWidget); specificAreasWidget->exec(); } void DeviceProxy::ElectricResistanceCheck() { if(!devIsReset) { emit exceptSGL(MyException(QString("设备未初始化,未复位,无法开始测量电阻。请先完成复位。"),MY_WARN)); return; } if(!lastTaskIsFinish) { emit exceptSGL(MyException(QString("%1任务执行中,无法开始测量电阻。请先停止运动或等待任务结束。").arg(lastTaskName),MY_WARN)); return; } if(bRunning) { emit exceptSGL(MyException(QString("自动运行执行中,请等待运行结束。"),MY_WARN)); return; } try { lastTaskIsFinish=false; lastTaskName="电阻测量"; ElectricResistanceCheckSide(); connect(this,SIGNAL(ElectricResistanceCheckFinishSGL(int)),this,SLOT(ElectricResistanceCheckFHandl(int))); //reqCMDRunFState = true; } catch (MyException mye) { exceptHandl(MyException("测量电阻失败。",mye.getExceptCode())); } } void DeviceProxy::compClose() { if(!devIsReset) { emit exceptSGL(MyException(QString("设备未初始化,未复位,无法执行关闭面补偿。请先完成复位。"),MY_WARN)); return; } if(!lastTaskIsFinish) { emit exceptSGL(MyException(QString("%1任务执行中,无法执行关闭面补偿。请先停止运动或等待任务结束。").arg(lastTaskName),MY_WARN)); return; } if(bRunning) { emit exceptSGL(MyException(QString("自动运行执行中,请等待运行结束。"),MY_WARN)); return; } try { lastTaskIsFinish=false; lastTaskName="面补偿关闭"; compCloseInSide(); lastTaskIsFinish=true; } catch (MyException mye) { exceptHandl(MyException("面关闭补偿失败。",mye.getExceptCode())); } } void DeviceProxy::MotionCompClose() { if(!devIsReset) { emit exceptSGL(MyException(QString("设备未初始化,未复位,无法执行关闭补偿。请先完成复位。"),MY_WARN)); return; } if(!lastTaskIsFinish) { emit exceptSGL(MyException(QString("%1任务执行中,无法执行关闭补偿。请先停止运动或等待任务结束。").arg(lastTaskName),MY_WARN)); return; } if(bRunning) { emit exceptSGL(MyException(QString("自动运行执行中,请等待运行结束。"),MY_WARN)); return; } try { lastTaskIsFinish=false; lastTaskName="补偿关闭"; DEVICE_INFO->printDeviceSystemInfo("运行补偿关闭中..."); acsCtl->disableComp(ZAXIS); if(acsCtl->getBufferRunState(5)) { acsCtl->stopBuffer(5); } emit MotionCompCloseFSGL(); devMotionCompState = 0; DEVICE_INFO->printDeviceSystemInfo("运行补偿关闭完成"); lastTaskIsFinish=true; } catch (MyException mye) { exceptHandl(MyException("关闭补偿失败。",mye.getExceptCode())); } } void DeviceProxy::Suspend() { if(!devIsInit) { emit exceptSGL(MyException(QString("设备未初始化,无法执行暂停。请先初始化。"),MY_WARN)); return; } if ((lastTaskIsFinish == false) && (lastTaskName == "单步加工")) { try { acsCtl->suspendBuffer(8); emit suspendBufferFSGL(); } catch (MyException mye) { exceptHandl(MyException("暂停失败。",mye.getExceptCode())); } } } void DeviceProxy::ContinueBuffer() { if(!devIsInit) { emit exceptSGL(MyException(QString("设备未初始化,无法执行运行。请先初始化。"),MY_WARN)); return; } if ((lastTaskIsFinish == false) && (lastTaskName == "单步加工")) { try { acsCtl->runBuffer(8); emit continueBufferFSGL(); } catch (MyException mye) { exceptHandl(MyException("继续运行失败。",mye.getExceptCode())); } } } void DeviceProxy::stop() { bool bThreadRunning = false; if(!devIsInit) { emit exceptSGL(MyException(QString("设备未初始化,无法执行停止。请先初始化。"),MY_WARN)); return; } try { DEVICE_INFO->printDeviceSystemInfo("停止中..."); //reqCMDRunFState = false; StopFindEdgeFlag = true; StopGetRatioP1P2Flag = true; StopElectricResistanceCheckFlag = true; StopGonglvCheckFlag = true; MODBUSTCP->stopFlag = true; acsCtl->halt(XAXIS); acsCtl->halt(YAXIS); acsCtl->halt(ZAXIS); acsCtl->halt(ZAAXIS); acsCtl->halt(DAXIS); acsCtl->halt(Z0AXIS); acsCtl->halt(Z2AXIS); if(acsCtl->getBufferRunState(8)) { acsCtl->stopBuffer(8); } if(acsCtl->getBufferRunState(1)) { acsCtl->stopBuffer(1); } if(acsCtl->getBufferRunState(3)) { acsCtl->stopBuffer(3); QString qstrcode; qstrcode+= "lc.LaserDisable()\n" "stop\n"; QByteArray qByCode = qstrcode.toLatin1(); char* code = qByCode.data(); acsCtl->loadBuffer(3,code); acsCtl->compileBuffer(3); acsCtl->runBuffer(3); } laserClose(); CuCeGaoOpen(); if (pLaserMark != nullptr) pLaserMark->Abort(); if (bRunning) { mutex.lock(); bRunning = false; emit RunSGL(!bRunning); step = 0; mutex.unlock(); bThreadRunning = true; emit StopStateSGL(true); SuspendFlag = false; } lastTaskIsFinish=true; reqCMDRunFState = false; emit AutoSmachStateSGL(false); emit VacuumSuckerOnOrOffStateSGL(true); if (bUserPower) emit SmachTypeStateSGL(true); emit continueBufferFSGL(); StepNameSGL(30); emit StopStateSGL(true); SuspendFlag = false; DEVICE_INFO->printDeviceSystemInfo("停止完成"); // if (bThreadRunning) // { // toLoadAndUnloadPos(); // } } catch (MyException mye) { exceptHandl(MyException("停止失败。",mye.getExceptCode())); } } void DeviceProxy::EStop() { if(!devIsInit) { emit exceptSGL(MyException(QString("设备未初始化,无法执行急停。请先初始化。"),MY_WARN)); return; } try { DEVICE_INFO->printDeviceSystemInfo("软件急停中..."); StopFindEdgeFlag = true; StopGetRatioP1P2Flag = true; StopElectricResistanceCheckFlag = true; MODBUSTCP->stopFlag = true; acsCtl->halt(XAXIS); acsCtl->halt(YAXIS); acsCtl->halt(ZAXIS); acsCtl->halt(ZAAXIS); acsCtl->halt(DAXIS); acsCtl->halt(Z0AXIS); acsCtl->halt(Z2AXIS); acsCtl->disable(XAXIS); acsCtl->disable(YAXIS); acsCtl->disable(ZAXIS); acsCtl->disable(ZAAXIS); acsCtl->disable(DAXIS); acsCtl->disable(Z0AXIS); acsCtl->disable(Z2AXIS); if(acsCtl->getBufferRunState(8)) { acsCtl->stopBuffer(8); } if(acsCtl->getBufferRunState(1)) { acsCtl->stopBuffer(1); } if (bRunning) { mutex.lock(); bRunning = false; emit RunSGL(!bRunning); step = 0; mutex.unlock(); } emit continueBufferFSGL(); lastTaskIsFinish=true; laserClose(); if (pLaserMark != nullptr) pLaserMark->Abort(); devIsReset = false; reqCMDRunFState = false; DEVICE_INFO->printDeviceSystemInfo("软件急停完成"); } catch (MyException mye) { exceptHandl(MyException("急停失败。",mye.getExceptCode())); } } void DeviceProxy::SMach() { if(!devIsReset) { emit exceptSGL(MyException(QString("设备未初始化,未复位,无法执行单步加工。请先完成复位。"),MY_WARN)); return; } if(!lastTaskIsFinish) { emit exceptSGL(MyException(QString("%1任务执行中,无法执行单步加工。请先停止运动或等待任务结束。").arg(lastTaskName),MY_WARN)); return; } if(bRunning) { emit exceptSGL(MyException(QString("自动运行执行中,请等待运行结束。"),MY_WARN)); return; } int axisBuf[4] = {0}; axisBuf[1] = 1; int ret = AxisMoveSafeCheckXY(axisBuf,nullptr,nullptr); if(ret < 0) { emit exceptSGL(MyException(QString("晶碇与Z轴间距太小,不能执行动作。"),MY_WARN)); return; } // 加载加工代码路径 RS_SETTINGS->beginGroup("device/Mach"); QString machCodeFilePath = RS_SETTINGS->readEntry("/codeFilePath"); RS_SETTINGS->endGroup(); if(machCodeFilePath == "") { emit exceptSGL(MyException(QString("加工代码路径为空,无法执行单步加工。请先指定加工代码路径。"),MY_WARN)); return; } try { lastTaskIsFinish=false; lastTaskName="单步加工"; SMachInSide(1); connect(this,SIGNAL(CMDRunFinishSGL()),this,SLOT(SMachFHandl())); reqCMDRunFState = true; } catch (MyException mye) { exceptHandl(MyException("单步加工失败。",mye.getExceptCode())); } } void DeviceProxy::semiAutoMach() { if(!devIsReset) { emit exceptSGL(MyException(QString("设备未初始化,未复位,无法执行半自动加工。请先完成复位。"),MY_WARN)); return; } if(!lastTaskIsFinish) { emit exceptSGL(MyException(QString("%1任务执行中,无法执行半自动加工。请先停止运动或等待任务结束。").arg(lastTaskName),MY_WARN)); return; } if(bRunning) { emit exceptSGL(MyException(QString("自动运行执行中,请等待运行结束。"),MY_WARN)); return; } if (devLaserOpenTime < 1800) { if (bUserPower) { emit AutoExceptSGL_laser(MyException(QString("激光器开启时间不足3分钟,是否继续加工?"))); if (DataCheckFlag) devLaserOpenTime = 1800; else return; } else { emit exceptSGL(MyException(QString("激光器开启时间不足3分钟,请等待!"),MY_WARN)); return; } } // if (pLaserMark == nullptr) // { // if (bUserPower) // { // emit AutoExceptSGL_laser(MyException(QString("振镜未初始化成功,是否继续加工?"))); // if (!DataCheckFlag) // return; // } // else // { // emit exceptSGL(MyException(QString("振镜未初始化成功,请重新启动程序!"),MY_WARN)); // return; // } // } // 加载加工代码路径 RS_SETTINGS->beginGroup("device/Mach"); QString machCodeFilePath = RS_SETTINGS->readEntry("/codeFilePath"); QString machCodeFilePath2 = RS_SETTINGS->readEntry("/codeFilePath2"); RS_SETTINGS->endGroup(); if((machCodeFilePath == "") || (machCodeFilePath2 == "")) { emit exceptSGL(MyException(QString("加工代码路径为空,无法执行单步加工。请先指定加工代码路径。"),MY_WARN)); return; } int ret = UpdateWorkData(); if (ret != 0) { emit exceptSGL(MyException(QString("加工文件打开错误,请检查文件路径"),MY_WARN)); return; } try { //lastTaskIsFinish=false; lastTaskName="自动加工"; DEV->vacuumSuckerOpen(); DEV->VacuumBreakClose(); semiAutoMachInSide(); //connect(this,SIGNAL(CMDRunFinishSGL()),this,SLOT(semiAutoMachFHandl())); //reqCMDRunFState = true; } catch (MyException mye) { exceptHandl(MyException("半自动加工失败。",mye.getExceptCode())); } } void DeviceProxy::vacuumSuckerOpen() { if(!devIsInit) { emit exceptSGL(MyException(QString("设备未初始化,无法执行打开真空吸盘。请先初始化。"),MY_WARN)); return; } try { vacuumSuckerOpenInSide(); } catch (MyException mye) { exceptHandl(MyException("真空吸盘打开失败。",mye.getExceptCode())); } } void DeviceProxy::vacuumSuckerClose() { if(!devIsInit) { emit exceptSGL(MyException(QString("设备未初始化,无法执行关闭真空吸盘。请先初始化。"),MY_WARN)); return; } try { vacuumSuckerCloseInSide(); } catch (MyException mye) { exceptHandl(MyException("真空吸盘关闭失败。",mye.getExceptCode())); } } void DeviceProxy::laserOpen() { if(!devIsInit) { emit exceptSGL(MyException(QString("设备未初始化,无法执行打开激光器。请先初始化。"),MY_WARN)); return; } try { int ret = IPGLASER->LaserOpen(); if (ret < 0) throw MyException("激光器打开失败。",acsc_GetLastError()); laserOpenInSide(); } catch (MyException mye) { exceptHandl(MyException("激光器打开失败。",mye.getExceptCode())); } } void DeviceProxy::laserClose() { if(!devIsInit) { emit exceptSGL(MyException(QString("设备未初始化,无法执行关闭激光器。请先初始化。"),MY_WARN)); return; } try { IPGLASER->LaserClose(); laserCloseInSide(); } catch (MyException mye) { exceptHandl(MyException("激光器关闭失败。",mye.getExceptCode())); } } // 绿灯开 void DeviceProxy::greenLightOpen() { if(!devIsInit) { emit exceptSGL(MyException(QString("设备未初始化,无法执行该操作。请先初始化。"),MY_WARN)); return; } try { //DEVICE_INFO->printDeviceSystemInfo("绿灯打开中..."); char vname[] = ACSCTL_DO1_V; int do1 = acsCtl->getGlobalInt(vname); RS_SETTINGS->beginGroup("device/DO"); QString greenLightDONumStr = RS_SETTINGS->readEntry("/greenLight"); RS_SETTINGS->endGroup(); int greenLightDONum = greenLightDONumStr.toInt(); int mask = 1; mask = mask<setGlobalInt(vname,do1); DEVICE_INFO->printDeviceSystemInfo("绿灯打开完成"); } catch (MyException mye) { exceptHandl(MyException("绿灯打开失败。",mye.getExceptCode())); } } // 绿灯关 void DeviceProxy::greenLightClose() { if(!devIsInit) { emit exceptSGL(MyException(QString("设备未初始化,无法执行该操作。请先初始化。"),MY_WARN)); return; } try { //DEVICE_INFO->printDeviceSystemInfo("绿灯关闭中..."); char vname[] = ACSCTL_DO1_V; int do1 = acsCtl->getGlobalInt(vname); RS_SETTINGS->beginGroup("device/DO"); QString greenLightDONumStr = RS_SETTINGS->readEntry("/greenLight"); RS_SETTINGS->endGroup(); int greenLightDONum = greenLightDONumStr.toInt(); int mask = 1; mask = mask<setGlobalInt(vname,do1); DEVICE_INFO->printDeviceSystemInfo("绿灯关闭完成"); } catch (MyException mye) { exceptHandl(MyException("绿灯关闭失败。",mye.getExceptCode())); } } // 红灯开 void DeviceProxy::redLightOpen() { if(!devIsInit) { emit exceptSGL(MyException(QString("设备未初始化,无法执行该操作。请先初始化。"),MY_WARN)); return; } try { //DEVICE_INFO->printDeviceSystemInfo("红灯打开中..."); char vname[] = ACSCTL_DO1_V; int do1 = acsCtl->getGlobalInt(vname); RS_SETTINGS->beginGroup("device/DO"); QString redLightDONumStr = RS_SETTINGS->readEntry("/redLight"); RS_SETTINGS->endGroup(); int redLightDONum = redLightDONumStr.toInt(); int mask = 1; mask = mask<setGlobalInt(vname,do1); //DEVICE_INFO->printDeviceSystemInfo("红灯打开完成"); } catch (MyException mye) { exceptHandl(MyException("红灯打开失败。",mye.getExceptCode())); } } // 红灯关 void DeviceProxy::redLightClose() { if(!devIsInit) { emit exceptSGL(MyException(QString("设备未初始化,无法执行该操作。请先初始化。"),MY_WARN)); return; } try { //DEVICE_INFO->printDeviceSystemInfo("红灯关闭中..."); char vname[] = ACSCTL_DO1_V; int do1 = acsCtl->getGlobalInt(vname); RS_SETTINGS->beginGroup("device/DO"); QString redLightDONumStr = RS_SETTINGS->readEntry("/redLight"); RS_SETTINGS->endGroup(); int redLightDONum = redLightDONumStr.toInt(); int mask = 1; mask = mask<setGlobalInt(vname,do1); //DEVICE_INFO->printDeviceSystemInfo("红灯关闭完成"); } catch (MyException mye) { exceptHandl(MyException("红灯关闭失败。",mye.getExceptCode())); } } // 黄灯开 void DeviceProxy::yellowLightOpen() { if(!devIsInit) { emit exceptSGL(MyException(QString("设备未初始化,无法执行该操作。请先初始化。"),MY_WARN)); return; } try { //DEVICE_INFO->printDeviceSystemInfo("黄灯打开中..."); char vname[] = ACSCTL_DO1_V; int do1 = acsCtl->getGlobalInt(vname); RS_SETTINGS->beginGroup("device/DO"); QString yellowLightDONumStr = RS_SETTINGS->readEntry("/yellowLight"); RS_SETTINGS->endGroup(); int yellowLightDONum = yellowLightDONumStr.toInt(); int mask = 1; mask = mask<setGlobalInt(vname,do1); //DEVICE_INFO->printDeviceSystemInfo("黄灯打开完成"); } catch (MyException mye) { exceptHandl(MyException("黄灯打开失败。",mye.getExceptCode())); } } // 黄灯关 void DeviceProxy::yellowLightClose() { if(!devIsInit) { emit exceptSGL(MyException(QString("设备未初始化,无法执行该操作。请先初始化。"),MY_WARN)); return; } try { //DEVICE_INFO->printDeviceSystemInfo("黄灯关闭中..."); char vname[] = ACSCTL_DO1_V; int do1 = acsCtl->getGlobalInt(vname); RS_SETTINGS->beginGroup("device/DO"); QString yellowLightDONumStr = RS_SETTINGS->readEntry("/yellowLight"); RS_SETTINGS->endGroup(); int yellowLightDONum = yellowLightDONumStr.toInt(); int mask = 1; mask = mask<setGlobalInt(vname,do1); //DEVICE_INFO->printDeviceSystemInfo("黄灯关闭完成"); } catch (MyException mye) { exceptHandl(MyException("黄灯关闭失败。",mye.getExceptCode())); } } void DeviceProxy::StopBtnOpen() { if(!devIsInit) { emit exceptSGL(MyException(QString("设备未初始化,无法执行该操作。请先初始化。"),MY_WARN)); return; } try { //DEVICE_INFO->printDeviceSystemInfo("停止按钮状态开启中..."); char vname[] = ACSCTL_DO1_V; int do1 = acsCtl->getGlobalInt(vname); RS_SETTINGS->beginGroup("device/DO"); QString yellowLightDONumStr = RS_SETTINGS->readEntry("/stopBtn"); RS_SETTINGS->endGroup(); int yellowLightDONum = yellowLightDONumStr.toInt(); int mask = 1; mask = mask<setGlobalInt(vname,do1); DEVICE_INFO->printDeviceSystemInfo("停止按钮状态开启完成"); } catch (MyException mye) { exceptHandl(MyException("停止按钮状态开启失败。",mye.getExceptCode())); } } void DeviceProxy::StopBtnClose() { if(!devIsInit) { emit exceptSGL(MyException(QString("设备未初始化,无法执行该操作。请先初始化。"),MY_WARN)); return; } try { //DEVICE_INFO->printDeviceSystemInfo("停止按钮状态关闭中..."); char vname[] = ACSCTL_DO1_V; int do1 = acsCtl->getGlobalInt(vname); RS_SETTINGS->beginGroup("device/DO"); QString yellowLightDONumStr = RS_SETTINGS->readEntry("/stopBtn"); RS_SETTINGS->endGroup(); int yellowLightDONum = yellowLightDONumStr.toInt(); int mask = 1; mask = mask<setGlobalInt(vname,do1); DEVICE_INFO->printDeviceSystemInfo("停止按钮状态关闭完成"); } catch (MyException mye) { exceptHandl(MyException("停止按钮状态关闭失败。",mye.getExceptCode())); } } void DeviceProxy::RunBtnOpen() { if(!devIsInit) { emit exceptSGL(MyException(QString("设备未初始化,无法执行该操作。请先初始化。"),MY_WARN)); return; } try { //DEVICE_INFO->printDeviceSystemInfo("运行按钮状态开启中..."); char vname[] = ACSCTL_DO1_V; int do1 = acsCtl->getGlobalInt(vname); RS_SETTINGS->beginGroup("device/DO"); QString yellowLightDONumStr = RS_SETTINGS->readEntry("/runBtn"); RS_SETTINGS->endGroup(); int yellowLightDONum = yellowLightDONumStr.toInt(); int mask = 1; mask = mask<setGlobalInt(vname,do1); DEVICE_INFO->printDeviceSystemInfo("运行按钮状态开启完成"); } catch (MyException mye) { exceptHandl(MyException("运行按钮状态开启失败。",mye.getExceptCode())); } } void DeviceProxy::RunBtnClose() { if(!devIsInit) { emit exceptSGL(MyException(QString("设备未初始化,无法执行该操作。请先初始化。"),MY_WARN)); return; } try { //DEVICE_INFO->printDeviceSystemInfo("运行按钮状态关闭中..."); char vname[] = ACSCTL_DO1_V; int do1 = acsCtl->getGlobalInt(vname); RS_SETTINGS->beginGroup("device/DO"); QString yellowLightDONumStr = RS_SETTINGS->readEntry("/runBtn"); RS_SETTINGS->endGroup(); int yellowLightDONum = yellowLightDONumStr.toInt(); int mask = 1; mask = mask<setGlobalInt(vname,do1); DEVICE_INFO->printDeviceSystemInfo("运行按钮状态关闭完成"); } catch (MyException mye) { exceptHandl(MyException("运行按钮状态关闭失败。",mye.getExceptCode())); } } void DeviceProxy::FanOpen() { try { //DEVICE_INFO->printDeviceSystemInfo("漩涡风机开启中..."); char vname[] = ACSCTL_DO1_V; int do1 = acsCtl->getGlobalInt(vname); RS_SETTINGS->beginGroup("device/DO"); QString yellowLightDONumStr = RS_SETTINGS->readEntry("/fan"); RS_SETTINGS->endGroup(); int yellowLightDONum = yellowLightDONumStr.toInt(); int mask = 1; mask = mask<setGlobalInt(vname,do1); DEVICE_INFO->printDeviceSystemInfo("漩涡风机开启完成"); } catch (MyException mye) { exceptHandl(MyException("漩涡风机开启失败。",mye.getExceptCode())); } } void DeviceProxy::FanClose() { try { DEVICE_INFO->printDeviceSystemInfo("漩涡风机关闭中..."); char vname[] = ACSCTL_DO1_V; int do1 = acsCtl->getGlobalInt(vname); RS_SETTINGS->beginGroup("device/DO"); QString yellowLightDONumStr = RS_SETTINGS->readEntry("/fan"); RS_SETTINGS->endGroup(); int yellowLightDONum = yellowLightDONumStr.toInt(); int mask = 1; mask = mask<setGlobalInt(vname,do1); DEVICE_INFO->printDeviceSystemInfo("漩涡风机关闭完成"); } catch (MyException mye) { exceptHandl(MyException("漩涡风机关闭失败。",mye.getExceptCode())); } } void DeviceProxy::LightOpen()//chkAirValve { if(!devIsInit) { emit exceptSGL(MyException(QString("设备未初始化,无法控制照明灯。请先初始化。"),MY_WARN)); return; } try { char vname[] = ACSCTL_DO2_V; int do1 = acsCtl->getGlobalInt(vname); RS_SETTINGS->beginGroup("device/DO"); QString LightDoDONumStr = RS_SETTINGS->readEntry("/Light"); RS_SETTINGS->endGroup(); int yellowLightDONum = LightDoDONumStr.toInt(); if (yellowLightDONum >= 8) yellowLightDONum = yellowLightDONum - 8; int mask = 1; mask = mask<setGlobalInt(vname,do1); devLightingState = 1; //DEVICE_INFO->printDeviceSystemInfo("照明灯开启完成"); } catch (MyException mye) { exceptHandl(MyException("照明灯开启失败。",mye.getExceptCode())); } } void DeviceProxy::LightClose() { if(!devIsInit) { emit exceptSGL(MyException(QString("设备未初始化,无法操作照明灯。请先初始化。"),MY_WARN)); return; } try { //DEVICE_INFO->printDeviceSystemInfo("相机光源关闭中..."); char vname[] = ACSCTL_DO2_V; int do1 = acsCtl->getGlobalInt(vname); RS_SETTINGS->beginGroup("device/DO"); QString yellowLightDONumStr = RS_SETTINGS->readEntry("/Light"); RS_SETTINGS->endGroup(); int yellowLightDONum = yellowLightDONumStr.toInt(); if (yellowLightDONum >= 8) yellowLightDONum = yellowLightDONum - 8; int mask = 1; mask = mask<setGlobalInt(vname,do1); devLightingState = 0; //DEVICE_INFO->printDeviceSystemInfo("气阀关闭完成"); } catch (MyException mye) { exceptHandl(MyException("照明灯关闭失败。",mye.getExceptCode())); } } void DeviceProxy::AirValveOpen()//chkAirValve { if(!devIsInit) { emit exceptSGL(MyException(QString("设备未初始化,无法操作光学片气阀。请先初始化。"),MY_WARN)); return; } try { char vname[] = ACSCTL_DO2_V; int do1 = acsCtl->getGlobalInt(vname); RS_SETTINGS->beginGroup("device/DO"); QString AirValveDoDONumStr = RS_SETTINGS->readEntry("/AirValveDo"); RS_SETTINGS->endGroup(); int yellowLightDONum = AirValveDoDONumStr.toInt(); if (yellowLightDONum >= 8) yellowLightDONum = yellowLightDONum - 8; int mask = 1; mask = mask<setGlobalInt(vname,do1); DEVICE_INFO->printDeviceSystemInfo("光学片气阀开启完成"); } catch (MyException mye) { exceptHandl(MyException("光学片气阀开启失败。",mye.getExceptCode())); } } void DeviceProxy::AirValveClose() { if(!devIsInit) { emit exceptSGL(MyException(QString("设备未初始化,无法操作光学片气阀。请先初始化。"),MY_WARN)); return; } try { //DEVICE_INFO->printDeviceSystemInfo("相机光源关闭中..."); char vname[] = ACSCTL_DO2_V; int do1 = acsCtl->getGlobalInt(vname); RS_SETTINGS->beginGroup("device/DO"); QString yellowLightDONumStr = RS_SETTINGS->readEntry("/AirValveDo"); RS_SETTINGS->endGroup(); int yellowLightDONum = yellowLightDONumStr.toInt(); if (yellowLightDONum >= 8) yellowLightDONum = yellowLightDONum - 8; int mask = 1; mask = mask<setGlobalInt(vname,do1); //DEVICE_INFO->printDeviceSystemInfo("气阀关闭完成"); } catch (MyException mye) { exceptHandl(MyException("光学片气阀关闭失败。",mye.getExceptCode())); } } void DeviceProxy::CuCeGaoOpen()//chkAirValve { if(!devIsInit) { emit exceptSGL(MyException(QString("设备未初始化,无法操作粗测高头。请先初始化。"),MY_WARN)); return; } try { char vname[] = ACSCTL_DO2_V; int do2 = acsCtl->getGlobalInt(vname); RS_SETTINGS->beginGroup("device/DO"); QString AirValveDoDONumStr = RS_SETTINGS->readEntry("/CuCeGaoDo"); RS_SETTINGS->endGroup(); int yellowLightDONum = AirValveDoDONumStr.toInt(); if (yellowLightDONum >= 8) yellowLightDONum = yellowLightDONum - 8; int mask = 1; mask = mask<setGlobalInt(vname,do2); DEVICE_INFO->printDeviceSystemInfo("粗测高头收回完成"); } catch (MyException mye) { exceptHandl(MyException("粗测高头收回失败。",mye.getExceptCode())); } } void DeviceProxy::CuCeGaoClose() { if(!devIsInit) { emit exceptSGL(MyException(QString("设备未初始化,无法操作粗测高头。请先初始化。"),MY_WARN)); return; } try { //DEVICE_INFO->printDeviceSystemInfo("相机光源关闭中..."); char vname[] = ACSCTL_DO2_V; int do2 = acsCtl->getGlobalInt(vname); RS_SETTINGS->beginGroup("device/DO"); QString yellowLightDONumStr = RS_SETTINGS->readEntry("/CuCeGaoDo"); RS_SETTINGS->endGroup(); int yellowLightDONum = yellowLightDONumStr.toInt(); if (yellowLightDONum >= 8) yellowLightDONum = yellowLightDONum - 8; int mask = 1; mask = mask<setGlobalInt(vname,do2); //DEVICE_INFO->printDeviceSystemInfo("气阀关闭完成"); } catch (MyException mye) { exceptHandl(MyException("粗测高头伸出失败。",mye.getExceptCode())); } } void DeviceProxy::Pin18Open()//chkAirValve { if(!devIsInit) { emit exceptSGL(MyException(QString("设备未初始化,无法操作Pin引脚。请先初始化。"),MY_WARN)); return; } try { char vname[] = ACSCTL_DO2_V; int do2 = acsCtl->getGlobalInt(vname); RS_SETTINGS->beginGroup("device/DO"); QString AirValveDoDONumStr = RS_SETTINGS->readEntry("/Pin18Do"); RS_SETTINGS->endGroup(); int yellowLightDONum = AirValveDoDONumStr.toInt(); if (yellowLightDONum >= 8) yellowLightDONum = yellowLightDONum - 8; int mask = 1; mask = mask<setGlobalInt(vname,do2); DEVICE_INFO->printDeviceSystemInfo("Pin引脚开启完成"); } catch (MyException mye) { exceptHandl(MyException("Pin引脚开启失败。",mye.getExceptCode())); } } void DeviceProxy::Pin18Close() { if(!devIsInit) { emit exceptSGL(MyException(QString("设备未初始化,无法操作Pin引脚。请先初始化。"),MY_WARN)); return; } try { //DEVICE_INFO->printDeviceSystemInfo("相机光源关闭中..."); char vname[] = ACSCTL_DO2_V; int do2 = acsCtl->getGlobalInt(vname); RS_SETTINGS->beginGroup("device/DO"); QString yellowLightDONumStr = RS_SETTINGS->readEntry("/Pin18Do"); RS_SETTINGS->endGroup(); int yellowLightDONum = yellowLightDONumStr.toInt(); if (yellowLightDONum >= 8) yellowLightDONum = yellowLightDONum - 8; int mask = 1; mask = mask<setGlobalInt(vname,do2); //DEVICE_INFO->printDeviceSystemInfo("气阀关闭完成"); } catch (MyException mye) { exceptHandl(MyException("Pin引脚关闭失败。",mye.getExceptCode())); } } void DeviceProxy::AirValveOpen2()//chkAirValve { if(!devIsInit) { emit exceptSGL(MyException(QString("设备未初始化,无法操作气阀。请先初始化。"),MY_WARN)); return; } try { char vname[] = ACSCTL_DO2_V; int do1 = acsCtl->getGlobalInt(vname); RS_SETTINGS->beginGroup("device/DO"); QString AirValveDoDONumStr = RS_SETTINGS->readEntry("/AirValveDo2"); RS_SETTINGS->endGroup(); int yellowLightDONum = AirValveDoDONumStr.toInt(); if (yellowLightDONum >= 8) yellowLightDONum = yellowLightDONum - 8; int mask = 1; mask = mask<setGlobalInt(vname,do1); //DEVICE_INFO->printDeviceSystemInfo("气阀开启完成"); } catch (MyException mye) { exceptHandl(MyException("整形片伸出失败。",mye.getExceptCode())); } } void DeviceProxy::AirValveClose2() { if(!devIsInit) { emit exceptSGL(MyException(QString("设备未初始化,无法操作气阀。请先初始化。"),MY_WARN)); return; } try { //DEVICE_INFO->printDeviceSystemInfo("相机光源关闭中..."); char vname[] = ACSCTL_DO2_V; int do1 = acsCtl->getGlobalInt(vname); RS_SETTINGS->beginGroup("device/DO"); QString yellowLightDONumStr = RS_SETTINGS->readEntry("/AirValveDo2"); RS_SETTINGS->endGroup(); int yellowLightDONum = yellowLightDONumStr.toInt(); if (yellowLightDONum >= 8) yellowLightDONum = yellowLightDONum - 8; int mask = 1; mask = mask<setGlobalInt(vname,do1); //DEVICE_INFO->printDeviceSystemInfo("气阀关闭完成"); } catch (MyException mye) { exceptHandl(MyException("整形片收回失败。",mye.getExceptCode())); } } void DeviceProxy::VacuumBreakOpen() { if(!devIsInit) { emit exceptSGL(MyException(QString("设备未初始化,无法执行打开真空吸盘。请先初始化。"),MY_WARN)); return; } try { //DEVICE_INFO->printDeviceSystemInfo("相机光源开启中..."); char vname[] = ACSCTL_DO2_V; int do1 = acsCtl->getGlobalInt(vname); RS_SETTINGS->beginGroup("device/DO"); QString yellowLightDONumStr = RS_SETTINGS->readEntry("/Vacuumbreak"); RS_SETTINGS->endGroup(); int yellowLightDONum = yellowLightDONumStr.toInt(); if (yellowLightDONum == 8) yellowLightDONum = 0; int mask = 1; mask = mask<setGlobalInt(vname,do1); DEVICE_INFO->printDeviceSystemInfo("破真空开启完成"); } catch (MyException mye) { exceptHandl(MyException("破真空开启失败。",mye.getExceptCode())); } } void DeviceProxy::VacuumBreakClose() { if(!devIsInit) { emit exceptSGL(MyException(QString("设备未初始化,无法执行打开真空吸盘。请先初始化。"),MY_WARN)); return; } try { //DEVICE_INFO->printDeviceSystemInfo("相机光源关闭中..."); char vname[] = ACSCTL_DO2_V; int do1 = acsCtl->getGlobalInt(vname); RS_SETTINGS->beginGroup("device/DO"); QString yellowLightDONumStr = RS_SETTINGS->readEntry("/Vacuumbreak"); RS_SETTINGS->endGroup(); int yellowLightDONum = yellowLightDONumStr.toInt(); if (yellowLightDONum == 8) yellowLightDONum = 0; int mask = 1; mask = mask<setGlobalInt(vname,do1); DEVICE_INFO->printDeviceSystemInfo("破真空关闭完成"); } catch (MyException mye) { exceptHandl(MyException("破真空关闭失败。",mye.getExceptCode())); } } void DeviceProxy::setLight() { int newDevLightState; int newRunStopBtnState; if(!devIsInit) { devLightState = 0; return; } if (devIsAlarm) { newDevLightState = 1; // redLightOpen(); // yellowLightClose(); // greenLightClose(); } else if(!devIsReset) { newDevLightState = 2; // redLightOpen(); // yellowLightClose(); // greenLightClose(); } else if ((devIsReset && !lastTaskIsFinish) || (bRunning)) { newDevLightState = 2; // redLightClose(); // yellowLightClose(); // greenLightOpen(); } else { newDevLightState = 3; // redLightClose(); // yellowLightOpen(); // greenLightClose(); } if (newDevLightState != devLightState) { devLightState = newDevLightState; switch(devLightState){ case 1: redLightOpen(); yellowLightClose(); greenLightClose(); break; case 2: redLightClose(); yellowLightClose(); greenLightOpen(); break; case 3: redLightClose(); yellowLightOpen(); greenLightClose(); break; default: break; } } if (bRunning) newRunStopBtnState = 1; else newRunStopBtnState = 0; if (newRunStopBtnState != devRunStopBtnState) { devRunStopBtnState = newRunStopBtnState; if (devRunStopBtnState == 1) { RunBtnOpen(); StopBtnClose(); } else { RunBtnClose(); StopBtnOpen(); } } return; } void DeviceProxy::enableXAxis() { if(!devIsInit) { emit exceptSGL(MyException(QString("设备未初始化,无法执行使能X轴。请先初始化。"),MY_WARN)); return; } try { DEVICE_INFO->printDeviceSystemInfo("X轴使能中..."); acsCtl->enable(XAXIS); DEVICE_INFO->printDeviceSystemInfo("X轴使能完成"); } catch (MyException mye) { exceptHandl(MyException("X轴使能失败。",mye.getExceptCode())); } } void DeviceProxy::enableYAxis() { if(!devIsInit) { emit exceptSGL(MyException(QString("设备未初始化,无法执行使能Y轴。请先初始化。"),MY_WARN)); return; } try { DEVICE_INFO->printDeviceSystemInfo("Y轴使能中..."); acsCtl->enable(YAXIS); DEVICE_INFO->printDeviceSystemInfo("Y轴使能完成"); } catch (MyException mye) { exceptHandl(MyException("Y轴使能失败。",mye.getExceptCode())); } } void DeviceProxy::enableZAxis() { if(!devIsInit) { emit exceptSGL(MyException(QString("设备未初始化,无法执行使能Z1轴。请先初始化。"),MY_WARN)); return; } try { DEVICE_INFO->printDeviceSystemInfo("Z1轴使能中..."); acsCtl->enable(ZAXIS); DEVICE_INFO->printDeviceSystemInfo("Z1轴使能完成"); } catch (MyException mye) { exceptHandl(MyException("Z1轴使能失败。",mye.getExceptCode())); } } void DeviceProxy::enableZAAxis() { if(!devIsInit) { emit exceptSGL(MyException(QString("设备未初始化,无法执行使能Z轴。请先初始化。"),MY_WARN)); return; } try { DEVICE_INFO->printDeviceSystemInfo("Z轴使能中..."); acsCtl->enable(ZAAXIS); DEVICE_INFO->printDeviceSystemInfo("Z轴使能完成"); } catch (MyException mye) { exceptHandl(MyException("Z轴使能失败。",mye.getExceptCode())); } } void DeviceProxy::disableXAxis() { if(!devIsInit) { emit exceptSGL(MyException(QString("设备未初始化,无法执行取消X轴使能。请先初始化。"),MY_WARN)); return; } if(!lastTaskIsFinish) { emit exceptSGL(MyException(QString("%1任务执行中,无法执行取消X轴使能。请先停止运动或等待任务结束。").arg(lastTaskName),MY_WARN)); return; } if(bRunning) { emit exceptSGL(MyException(QString("自动运行执行中,请等待运行结束。"),MY_WARN)); return; } try { DEVICE_INFO->printDeviceSystemInfo("X轴取消使能中..."); lastTaskIsFinish=false; lastTaskName="X轴取消使能"; acsCtl->disable(XAXIS); DEVICE_INFO->printDeviceSystemInfo("X轴取消使能完成"); lastTaskIsFinish=true; } catch (MyException mye) { exceptHandl(MyException("X轴取消使能失败。",mye.getExceptCode())); } } void DeviceProxy::disableYAxis() { if(!devIsInit) { emit exceptSGL(MyException(QString("设备未初始化,无法执行取消Y轴使能。请先初始化。"),MY_WARN)); return; } if(!lastTaskIsFinish) { emit exceptSGL(MyException(QString("%1任务执行中,无法执行取消Y轴使能。请先停止运动或等待任务结束。").arg(lastTaskName),MY_WARN)); return; } if(bRunning) { emit exceptSGL(MyException(QString("自动运行执行中,请等待运行结束。"),MY_WARN)); return; } try { DEVICE_INFO->printDeviceSystemInfo("Y轴取消使能中..."); lastTaskIsFinish=false; lastTaskName="Y轴取消使能"; acsCtl->disable(YAXIS); DEVICE_INFO->printDeviceSystemInfo("Y轴取消使能完成"); lastTaskIsFinish=true; } catch (MyException mye) { exceptHandl(MyException("Y轴取消使能失败。",mye.getExceptCode())); } } void DeviceProxy::disableZAxis() { if(!devIsInit) { emit exceptSGL(MyException(QString("设备未初始化,无法执行取消Z1轴使能。请先初始化。"),MY_WARN)); return; } if(!lastTaskIsFinish) { emit exceptSGL(MyException(QString("%1任务执行中,无法执行取消Z1轴使能。请先停止运动或等待任务结束。").arg(lastTaskName),MY_WARN)); return; } if(bRunning) { emit exceptSGL(MyException(QString("自动运行执行中,请等待运行结束。"),MY_WARN)); return; } try { DEVICE_INFO->printDeviceSystemInfo("Z1轴取消使能中..."); lastTaskIsFinish=false; lastTaskName="Z1轴取消使能"; acsCtl->disable(ZAXIS); DEVICE_INFO->printDeviceSystemInfo("Z1轴取消使能完成"); lastTaskIsFinish=true; } catch (MyException mye) { exceptHandl(MyException("Z1轴取消使能失败。",mye.getExceptCode())); } } void DeviceProxy::disableZAAxis() { if(!devIsInit) { emit exceptSGL(MyException(QString("设备未初始化,无法执行取消Z轴使能。请先初始化。"),MY_WARN)); return; } if(!lastTaskIsFinish) { emit exceptSGL(MyException(QString("%1任务执行中,无法执行取消Z轴使能。请先停止运动或等待任务结束。").arg(lastTaskName),MY_WARN)); return; } if(bRunning) { emit exceptSGL(MyException(QString("自动运行执行中,请等待运行结束。"),MY_WARN)); return; } try { DEVICE_INFO->printDeviceSystemInfo("Z轴取消使能中..."); lastTaskIsFinish=false; lastTaskName="Z轴取消使能"; acsCtl->disable(ZAAXIS); DEVICE_INFO->printDeviceSystemInfo("Z轴取消使能完成"); lastTaskIsFinish=true; } catch (MyException mye) { exceptHandl(MyException("Z轴取消使能失败。",mye.getExceptCode())); } } void DeviceProxy::enableDAxis() { if(!devIsInit) { emit exceptSGL(MyException(QString("设备未初始化,无法执行使能Z轴。请先初始化。"),MY_WARN)); return; } try { DEVICE_INFO->printDeviceSystemInfo("DD马达使能中..."); acsCtl->enable(DAXIS); DEVICE_INFO->printDeviceSystemInfo("DD马达使能完成"); } catch (MyException mye) { exceptHandl(MyException("DD马达使能失败。",mye.getExceptCode())); } } void DeviceProxy::enableZ0Axis() { if(!devIsInit) { emit exceptSGL(MyException(QString("设备未初始化,无法执行使能Z轴。请先初始化。"),MY_WARN)); return; } try { DEVICE_INFO->printDeviceSystemInfo("Z0轴使能中..."); acsCtl->enable(Z0AXIS); DEVICE_INFO->printDeviceSystemInfo("Z0轴使能完成"); } catch (MyException mye) { exceptHandl(MyException("Z0轴使能失败。",mye.getExceptCode())); } } void DeviceProxy::enableZ2Axis() { if(!devIsInit) { emit exceptSGL(MyException(QString("设备未初始化,无法执行使能Z轴。请先初始化。"),MY_WARN)); return; } try { DEVICE_INFO->printDeviceSystemInfo("Z2轴使能中..."); acsCtl->enable(Z2AXIS); DEVICE_INFO->printDeviceSystemInfo("Z2轴使能完成"); } catch (MyException mye) { exceptHandl(MyException("Z2轴使能失败。",mye.getExceptCode())); } } void DeviceProxy::disableDAxis() { if(!devIsInit) { emit exceptSGL(MyException(QString("设备未初始化,无法执行取消DD马达使能。请先初始化。"),MY_WARN)); return; } if(!lastTaskIsFinish) { emit exceptSGL(MyException(QString("%1任务执行中,无法执行取消DD马达使能。请先停止运动或等待任务结束。").arg(lastTaskName),MY_WARN)); return; } if(bRunning) { emit exceptSGL(MyException(QString("自动运行执行中,请等待运行结束。"),MY_WARN)); return; } try { DEVICE_INFO->printDeviceSystemInfo("DD马达取消使能中..."); lastTaskIsFinish=false; lastTaskName="DD马达取消使能"; acsCtl->disable(DAXIS); DEVICE_INFO->printDeviceSystemInfo("DD马达取消使能完成"); lastTaskIsFinish=true; } catch (MyException mye) { exceptHandl(MyException("DD马达取消使能失败。",mye.getExceptCode())); } } void DeviceProxy::disableZ0Axis() { if(!devIsInit) { emit exceptSGL(MyException(QString("设备未初始化,无法执行取消Z0轴使能。请先初始化。"),MY_WARN)); return; } if(!lastTaskIsFinish) { emit exceptSGL(MyException(QString("%1任务执行中,无法执行取消Z0轴使能。请先停止运动或等待任务结束。").arg(lastTaskName),MY_WARN)); return; } if(bRunning) { emit exceptSGL(MyException(QString("自动运行执行中,请等待运行结束。"),MY_WARN)); return; } try { DEVICE_INFO->printDeviceSystemInfo("Z0轴取消使能中..."); lastTaskIsFinish=false; lastTaskName="Z0轴取消使能"; acsCtl->disable(Z0AXIS); DEVICE_INFO->printDeviceSystemInfo("Z0轴取消使能完成"); lastTaskIsFinish=true; } catch (MyException mye) { exceptHandl(MyException("Z0轴取消使能失败。",mye.getExceptCode())); } } void DeviceProxy::disableZ2Axis() { if(!devIsInit) { emit exceptSGL(MyException(QString("设备未初始化,无法执行取消Z2轴使能。请先初始化。"),MY_WARN)); return; } if(!lastTaskIsFinish) { emit exceptSGL(MyException(QString("%1任务执行中,无法执行取消Z2轴使能。请先停止运动或等待任务结束。").arg(lastTaskName),MY_WARN)); return; } if(bRunning) { emit exceptSGL(MyException(QString("自动运行执行中,请等待运行结束。"),MY_WARN)); return; } try { DEVICE_INFO->printDeviceSystemInfo("Z2轴取消使能中..."); lastTaskIsFinish=false; lastTaskName="Z2轴取消使能"; acsCtl->disable(Z2AXIS); DEVICE_INFO->printDeviceSystemInfo("Z2轴取消使能完成"); lastTaskIsFinish=true; } catch (MyException mye) { exceptHandl(MyException("Z2轴取消使能失败。",mye.getExceptCode())); } } void DeviceProxy::enableDisableXAxis() { if(XAxisIsEnable) disableXAxis(); else enableXAxis(); } void DeviceProxy::enableDisableYAxis() { if(YAxisIsEnable) disableYAxis(); else enableYAxis(); } void DeviceProxy::enableDisableZAxis() { if(ZAxisIsEnable) disableZAxis(); else enableZAxis(); } void DeviceProxy::enableDisableZAAxis() { if(ZAAxisIsEnable) disableZAAxis(); else enableZAAxis(); } void DeviceProxy::enableDisableDAxis() { if(DAxisIsEnable) disableDAxis(); else enableDAxis(); } void DeviceProxy::enableDisableZ0Axis() { if(Z0AxisIsEnable) disableZ0Axis(); else enableZ0Axis(); } void DeviceProxy::enableDisableZ2Axis() { if(Z2AxisIsEnable) disableZ2Axis(); else enableZ2Axis(); } void DeviceProxy::setAxisState() { XAxisLimitState = NORMAL; YAxisLimitState = NORMAL; ZAxisLimitState = NORMAL; ZAAxisLimitState = NORMAL; XAxisIsEnable = false; YAxisIsEnable = false; ZAxisIsEnable = false; ZAAxisIsEnable = false; } void DeviceProxy::startStateDetection() { timer->start(); } void DeviceProxy::stopStateDetection() { timer->stop(); } void DeviceProxy::detectionAllAxisCtPos() { XAxisCtPos = acsCtl->getFPOS(XAXIS); emit XAxisCtPosSGL(XAxisCtPos); YAxisCtPos = acsCtl->getFPOS(YAXIS); emit YAxisCtPosSGL(YAxisCtPos); //lihongchang ZAxisCtPos = acsCtl->getFPOS(ZAXIS); emit ZAxisCtPosSGL(ZAxisCtPos); ZAAxisCtPos = acsCtl->getFPOS(ZAAXIS); emit ZAAxisCtPosSGL(ZAAxisCtPos); Z0AxisCtPos = acsCtl->getFPOS(Z0AXIS); emit Z0AxisCtPosSGL(Z0AxisCtPos); //Z2AxisCtPos = acsCtl->getFPOS(Z2AXIS); //emit Z2AxisCtPosSGL(Z2AxisCtPos); //char vName[] = ACSCTL_RSVALUE_V_Z0; //From R //double Z2AxisCtPos = acsCtl->getGlobalReal(vName); //复用Z2AxisCtPos,用于R探头的测高头 //emit Z2AxisCtPosSGL(Z2AxisCtPos); DAxisCtPos = acsCtl->getFPOS(DAXIS); emit DAxisCtPosSGL(DAxisCtPos); } void DeviceProxy::detectionAllAxisLimitState() { QVector state; if (!bUserPower) return; LIMIT_STATE XAxisLimitStateTemp = NORMAL; LIMIT_STATE YAxisLimitStateTemp = NORMAL; LIMIT_STATE ZAxisLimitStateTemp = NORMAL; LIMIT_STATE ZAAxisLimitStateTemp = NORMAL; LIMIT_STATE Z0AxisLimitStateTemp = NORMAL; LIMIT_STATE Z2AxisLimitStateTemp = NORMAL; LIMIT_STATE DAxisLimitStateTemp = NORMAL; XAxisLimitStateTemp = acsCtl->getAxesLimitState(XAXIS); YAxisLimitStateTemp = acsCtl->getAxesLimitState(YAXIS); ZAxisLimitStateTemp = acsCtl->getAxesLimitState(ZAXIS); ZAAxisLimitStateTemp = acsCtl->getAxesLimitState(ZAAXIS); Z0AxisLimitStateTemp = acsCtl->getAxesLimitState(Z0AXIS); Z2AxisLimitStateTemp = acsCtl->getAxesLimitState(Z2AXIS); DAxisLimitStateTemp = acsCtl->getAxesLimitState(DAXIS); if(XAxisLimitStateTemp != XAxisLimitState) { XAxisLimitState = XAxisLimitStateTemp; emit XAxisLimitStateSGL(XAxisLimitStateTemp); } if(YAxisLimitStateTemp != YAxisLimitState) { YAxisLimitState = YAxisLimitStateTemp; emit YAxisLimitStateSGL(YAxisLimitStateTemp); } if(ZAxisLimitStateTemp != ZAxisLimitState) { ZAxisLimitState = ZAxisLimitStateTemp; emit ZAxisLimitStateSGL(ZAxisLimitStateTemp); } if(ZAAxisLimitStateTemp != ZAAxisLimitState) { ZAAxisLimitState = ZAAxisLimitStateTemp; emit ZAAxisLimitStateSGL(ZAAxisLimitStateTemp); } if(Z0AxisLimitStateTemp != Z0AxisLimitState) { Z0AxisLimitState = Z0AxisLimitStateTemp; emit DDLimitStateSGL(1,Z0AxisLimitStateTemp); } if(Z2AxisLimitStateTemp != Z2AxisLimitState) { Z2AxisLimitState = Z2AxisLimitStateTemp; emit DDLimitStateSGL(2,Z2AxisLimitStateTemp); } if(DAxisLimitStateTemp != DAxisLimitState) { DAxisLimitState = DAxisLimitStateTemp; emit DDLimitStateSGL(0,DAxisLimitStateTemp); } } void DeviceProxy::detectionAllAxisEnableState() { bool enabaleState; if (!bUserPower) return; enabaleState = acsCtl->getEnable(XAXIS); if(enabaleState!=XAxisIsEnable) { XAxisIsEnable = enabaleState; emit XAxisEnableStateSGL(enabaleState); } enabaleState = acsCtl->getEnable(YAXIS); if(enabaleState!=YAxisIsEnable) { YAxisIsEnable = enabaleState; emit YAxisEnableStateSGL(enabaleState); } //lihongchang enabaleState = acsCtl->getEnable(ZAXIS); if(enabaleState!=ZAxisIsEnable) { ZAxisIsEnable = enabaleState; emit ZAxisEnableStateSGL(enabaleState); } enabaleState = acsCtl->getEnable(ZAAXIS); if(enabaleState!=ZAAxisIsEnable) { ZAAxisIsEnable = enabaleState; emit ZAAxisEnableStateSGL(enabaleState); } bool enabaleState1 = acsCtl->getEnable(Z0AXIS); bool enabaleState2 = acsCtl->getEnable(Z2AXIS); bool enabaleState0 = acsCtl->getEnable(DAXIS); if((enabaleState0!=DAxisIsEnable) || (enabaleState1!=Z0AxisIsEnable) || (enabaleState2!=Z2AxisIsEnable)) { DAxisIsEnable = enabaleState0; Z0AxisIsEnable = enabaleState1; Z2AxisIsEnable = enabaleState2; int value = enabaleState0 + (enabaleState1 << 1) + (enabaleState2 << 2); emit DDEnableStateSGL(value); } } void DeviceProxy::detectionEStopState() { bool bRet; bRet = acsCtl->getEmergencyStopState(); if (bRet != devEStopState) { devEStopState = bRet; if (bRet) { //关激光 laserClose(); pLaserMark->Abort(); devIsReset = false; lastTaskIsFinish = true; reqCMDRunFState = false; if (bRunning) { mutex.lock(); bRunning = false; mutex.unlock(); emit RunSGL(!bRunning); } } emit EStopSGL(bRet); return; } emit EStopSGL(bRet); } void DeviceProxy::detectionCMDRunFState() { char vName[] = ACSCTL_RUNF_V; if(acsCtl->getGlobalInt(vName)) { reqCMDRunFState = false; if (!bRunning) emit CMDRunFinishSGL(); } } void DeviceProxy::detectionRCValue() { char vName[] = ACSCTL_RSVALUE_V; double value = acsCtl->getGlobalReal(vName); emit RSValueChangedSGL(value); } void DeviceProxy::detectionLaserValue() { char vname[] = ACSCTL_DO1_V; int do1 = acsCtl->getGlobalInt(vname); int mask; mask = 1; mask = mask<LaserOpen(); //lihongchang jia } devLaserState = 1; } else { emit laserCloseFSGL(); if (devLaserState == 1) { if (JIADINGJIAGONG != 1) IPGLASER->LaserClose(); //lihongchang jia } devLaserState = 0; } mask = 1; mask = mask<getGlobalInt(vname); // char vname2[] = ACSCTL_DI2_V; // int di2 = acsCtl->getGlobalInt(vname2); // emit InStateSGL(di1); char vname[] = ACSCTL_DI1_V; int di1 = acsCtl->getGlobalInt(vname); di1 = di1 & 0xff; char vname2[] = ACSCTL_DI2_V; int di2 = acsCtl->getGlobalInt(vname2); di2 = di2 & 0xff; di1 = (di2 << 8) | di1; emit InStateSGL(di1); int mask = 1; mask = mask<= 10) if (!bRunning) { lRunStopTime[0] = 0; if (!bRunning) { emit GetRunTypeState(); semiAutoMach(); } } mask = 1; mask = mask<= 1) //if (bRunning) { lRunStopTime[1] = 0; stop(); DEVICE_INFO->printDeviceSystemInfo("面板停止按钮按下!"); // if (DEV->SuspendFlag) // DEV->SuspendFlag = false; // else // DEV->SuspendFlag = true; // emit DEV->StopStateSGL(!DEV->SuspendFlag); } mask = 1; mask = mask<= 1) //if (bRunning) { lRunStopTime[1] = 0; stop(); devIsReset = false; devIsInit = false; emit DEVInitStateChangedSGL(devIsInit && devIsReset); stopStateDetection(); emit exceptSGL(MyException(QString("急停按钮按下!"),MY_WARN)); } // int mask1 = 1; // int mask2 = 1; // mask1 = mask1<LightOpen(); // } // } // else // { // if (devLightingState == 1) // { // DEV->LightClose(); // } // } // mask = 1; // mask = mask<= 1) // //if (bRunning) // { // lRunStopTime[1] = 0; // stop(); // emit exceptSGL(MyException(QString("总气压过低"),MY_WARN)); // } // mask = 1; // mask = mask<= 1) // //if (bRunning) // { // lRunStopTime[1] = 0; // stop(); // emit exceptSGL(MyException(QString("风机气压过低"),MY_WARN)); // } // 自动运行各大步骤之间可以暂停。检查激光功率时,停止30秒后再读数,pid控制功率衰减器时,用增量模式 // // // // } void DeviceProxy::resetFHandl() { disconnect(this,SIGNAL(CMDRunFinishSGL()),this,SLOT(resetFHandl())); getResetState(); devIsReset = true; //emit DEVResetStateChangedSGL(devIsReset); emit DEVInitStateChangedSGL(devIsInit && devIsReset); DEVICE_INFO->printDeviceSystemInfo("复位完成"); lastTaskIsFinish=true; } void DeviceProxy::XAxisSMoveNFHandl() { disconnect(this,SIGNAL(CMDRunFinishSGL()),this,SLOT(XAxisSMoveNFHandl())); DEVICE_INFO->printDeviceSystemInfo("X轴负向点动完成"); lastTaskIsFinish=true; } void DeviceProxy::XAxisSMovePFHandl() { disconnect(this,SIGNAL(CMDRunFinishSGL()),this,SLOT(XAxisSMovePFHandl())); DEVICE_INFO->printDeviceSystemInfo("X轴正向点动完成"); lastTaskIsFinish=true; } void DeviceProxy::YAxisSMoveNFHandl() { disconnect(this,SIGNAL(CMDRunFinishSGL()),this,SLOT(YAxisSMoveNFHandl())); DEVICE_INFO->printDeviceSystemInfo("Y轴负向点动完成"); lastTaskIsFinish=true; } void DeviceProxy::YAxisSMovePFHandl() { disconnect(this,SIGNAL(CMDRunFinishSGL()),this,SLOT(YAxisSMovePFHandl())); DEVICE_INFO->printDeviceSystemInfo("Y轴正向点动完成"); lastTaskIsFinish=true; } void DeviceProxy::ZAxisSMoveNFHandl() { disconnect(this,SIGNAL(CMDRunFinishSGL()),this,SLOT(ZAxisSMoveNFHandl())); DEVICE_INFO->printDeviceSystemInfo("Z1轴负向点动完成"); lastTaskIsFinish=true; } void DeviceProxy::ZAxisSMovePFHandl() { disconnect(this,SIGNAL(CMDRunFinishSGL()),this,SLOT(ZAxisSMovePFHandl())); DEVICE_INFO->printDeviceSystemInfo("Z1轴正向点动完成"); lastTaskIsFinish=true; } void DeviceProxy::ZAAxisSMoveNFHandl() { disconnect(this,SIGNAL(CMDRunFinishSGL()),this,SLOT(ZAAxisSMoveNFHandl())); DEVICE_INFO->printDeviceSystemInfo("Z轴负向点动完成"); lastTaskIsFinish=true; } void DeviceProxy::ZAAxisSMovePFHandl() { disconnect(this,SIGNAL(CMDRunFinishSGL()),this,SLOT(ZAAxisSMovePFHandl())); DEVICE_INFO->printDeviceSystemInfo("Z轴正向点动完成"); lastTaskIsFinish=true; } void DeviceProxy::DAxisSMoveNFHandl() { disconnect(this,SIGNAL(CMDRunFinishSGL()),this,SLOT(DAxisSMoveNFHandl())); DEVICE_INFO->printDeviceSystemInfo("DD马达负向点动完成"); lastTaskIsFinish=true; } void DeviceProxy::DAxisSMovePFHandl() { disconnect(this,SIGNAL(CMDRunFinishSGL()),this,SLOT(DAxisSMovePFHandl())); DEVICE_INFO->printDeviceSystemInfo("DD马达正向点动完成"); lastTaskIsFinish=true; } void DeviceProxy::Z2AxisSMoveNFHandl() { disconnect(this,SIGNAL(CMDRunFinishSGL()),this,SLOT(Z2AxisSMoveNFHandl())); DEVICE_INFO->printDeviceSystemInfo("Z2轴负向点动完成"); lastTaskIsFinish=true; } void DeviceProxy::Z2AxisSMovePFHandl() { disconnect(this,SIGNAL(CMDRunFinishSGL()),this,SLOT(Z2AxisSMovePFHandl())); DEVICE_INFO->printDeviceSystemInfo("Z2轴正向点动完成"); lastTaskIsFinish=true; } void DeviceProxy::Z0AxisSMoveNFHandl() { disconnect(this,SIGNAL(CMDRunFinishSGL()),this,SLOT(Z0AxisSMoveNFHandl())); DEVICE_INFO->printDeviceSystemInfo("Z0轴负向点动完成"); lastTaskIsFinish=true; } void DeviceProxy::Z0AxisSMovePFHandl() { disconnect(this,SIGNAL(CMDRunFinishSGL()),this,SLOT(Z0AxisSMovePFHandl())); DEVICE_INFO->printDeviceSystemInfo("Z0轴正向点动完成"); lastTaskIsFinish=true; } void DeviceProxy::ABSMoveFHandl() { disconnect(this,SIGNAL(CMDRunFinishSGL()),this,SLOT(ABSMoveFHandl())); DEVICE_INFO->printDeviceSystemInfo("绝对定位完成"); lastTaskIsFinish=true; } void DeviceProxy::toLoadAndUnloadPosFHandl() { disconnect(this,SIGNAL(CMDRunFinishSGL()),this,SLOT(toLoadAndUnloadPosFHandl())); DEVICE_INFO->printDeviceSystemInfo("到上下料位置完成"); lastTaskIsFinish=true; } void DeviceProxy::toGlobalCameraPosFHandl() { disconnect(this,SIGNAL(CMDRunFinishSGL()),this,SLOT(toGlobalCameraPosFHandl())); DEVICE_INFO->printDeviceSystemInfo("到全局相机位置完成"); lastTaskIsFinish=true; } void DeviceProxy::toSScanStartPosFHandl() { disconnect(this,SIGNAL(CMDRunFinishSGL()),this,SLOT(toSScanStartPosFHandl())); DEVICE_INFO->printDeviceSystemInfo("到扫描起始位完成"); lastTaskIsFinish=true; } void DeviceProxy::toRSToZeroPosFHandl() { disconnect(this,SIGNAL(CMDRunFinishSGL()),this,SLOT(toRSToZeroPosFHandl())); DEVICE_INFO->printDeviceSystemInfo("到对零位完成"); lastTaskIsFinish=true; } void DeviceProxy::toLaserApTestPosFHandl() { disconnect(this,SIGNAL(CMDRunFinishSGL()),this,SLOT(toLaserApTestPosFHandl())); DEVICE_INFO->printDeviceSystemInfo("到功率测量位完成"); lastTaskIsFinish=true; } void DeviceProxy::toLaserMarkPosFHandl() { disconnect(this,SIGNAL(CMDRunFinishSGL()),this,SLOT(toLaserMarkPosFHandl())); char *code; QByteArray byCode = DEV->strLaserMark_test.toLatin1(); code = byCode.data(); memset(MODBUSTCP->RFID,0,50); memcpy_s(MODBUSTCP->RFID,50,code,strlen(code)); if (DEV->pLaserMark != nullptr) { DEV->pLaserMark->SetFontParam(laserMarkHeight, laserMarkWidth, laserMarkInternal, laserMarkFrequency,laserMarkPulseWidth); //字符高度 字体宽度 字体间距 频率 脉宽 DEV->pLaserMark->Start(MODBUSTCP->RFID,&DEV->strLaserMark_test,1,false);//"4H04-AB023" } DEVICE_INFO->printDeviceSystemInfo("打标完成"); lastTaskIsFinish=true; } void DeviceProxy::toHeightFindPosFHandl() { disconnect(this,SIGNAL(CMDRunFinishSGL()),this,SLOT(toHeightFindPosFHandl())); DEVICE_INFO->printDeviceSystemInfo("到测高位完成"); lastTaskIsFinish=true; } void DeviceProxy::toEdgeSearchPosFHandl() { disconnect(this,SIGNAL(CMDRunFinishSGL()),this,SLOT(toEdgeSearchPosFHandl())); DEVICE_INFO->printDeviceSystemInfo("到寻边位完成"); lastTaskIsFinish=true; } void DeviceProxy::toCompenTestPosFHandl() { disconnect(this,SIGNAL(CMDRunFinishSGL()),this,SLOT(toCompenTestPosFHandl())); DEVICE_INFO->printDeviceSystemInfo("到上料准备位完成"); lastTaskIsFinish=true; } void DeviceProxy::toRecordPosFHandl() { disconnect(this,SIGNAL(CMDRunFinishSGL()),this,SLOT(toRecordPosFHandl())); RS_SETTINGS->beginGroup("device/ZAAxisSafe"); double ZAAxisSafePos = RS_SETTINGS->readNumEntry("/pos"); RS_SETTINGS->endGroup(); RS_SETTINGS->beginGroup("device/RecordPos"); RS_SETTINGS->writeEntry("/XAxis", 0); RS_SETTINGS->writeEntry("/YAxis", 0); RS_SETTINGS->writeEntry("/ZAAxis",ZAAxisSafePos); RS_SETTINGS->endGroup(); DEVICE_INFO->printDeviceSystemInfo("到记录位完成"); lastTaskIsFinish=true; } void DeviceProxy::toZAAxisCPosFHandl() { disconnect(this,SIGNAL(CMDRunFinishSGL()),this,SLOT(toZAAxisCPosFHandl())); DEVICE_INFO->printDeviceSystemInfo("到Z轴常用位置完成"); lastTaskIsFinish=true; } void DeviceProxy::MHToCameraFHandl() { disconnect(this,SIGNAL(CMDRunFinishSGL()),this,SLOT(MHToCameraFHandl())); DEVICE_INFO->printDeviceSystemInfo("加工头到相机位置完成"); lastTaskIsFinish=true; } void DeviceProxy::CameraToMHFHandl() { disconnect(this,SIGNAL(CMDRunFinishSGL()),this,SLOT(CameraToMHFHandl())); DEVICE_INFO->printDeviceSystemInfo("相机到加工头位置完成"); lastTaskIsFinish=true; } void DeviceProxy::RHToCameraFHandl() { disconnect(this,SIGNAL(CMDRunFinishSGL()),this,SLOT(RHToCameraFHandl())); DEVICE_INFO->printDeviceSystemInfo("测距头到相机位置完成"); lastTaskIsFinish=true; } void DeviceProxy::CameraToRHFHandl() { disconnect(this,SIGNAL(CMDRunFinishSGL()),this,SLOT(CameraToRHFHandl())); DEVICE_INFO->printDeviceSystemInfo("相机到测距头位置完成"); lastTaskIsFinish=true; } void DeviceProxy::RHToMHFHandl() { disconnect(this,SIGNAL(CMDRunFinishSGL()),this,SLOT(RHToMHFHandl())); DEVICE_INFO->printDeviceSystemInfo("测距头到加工头位置完成"); lastTaskIsFinish=true; } void DeviceProxy::MHToRHFHandl() { disconnect(this,SIGNAL(CMDRunFinishSGL()),this,SLOT(RHToMHFHandl())); DEVICE_INFO->printDeviceSystemInfo("加工头到测距头位置完成"); lastTaskIsFinish=true; } void DeviceProxy::RSToZeroFHandl() { disconnect(this,SIGNAL(CMDRunFinishSGL()),this,SLOT(RSToZeroFHandl())); workpieceHeight = ZAAxisCtPos - ZAxisCtPos; DEVICE_INFO->printDeviceSystemInfo("测距传感器对零完成"); lastTaskIsFinish=true; } void DeviceProxy::RSToZeroFHandl_Z0() //From R { disconnect(this,SIGNAL(CMDRunFinishSGL()),this,SLOT(RSToZeroFHandl_Z0())); DEVICE_INFO->printDeviceSystemInfo("R测量,距离检测完成"); lastTaskIsFinish=true; } void DeviceProxy::MachSmallAreaFHandl() { disconnect(this,SIGNAL(CMDRunFinishSGL()),this,SLOT(MachSmallAreaFHandl())); DEVICE_INFO->printDeviceSystemInfo("特定区域加工完成"); lastTaskIsFinish=true; } void DeviceProxy::SScanFHandl() { disconnect(this,SIGNAL(CMDRunFinishSGL()),this,SLOT(SScanFHandl())); DEVICE_INFO->printDeviceSystemInfo("面扫描完成"); lastTaskIsFinish=true; } void DeviceProxy::compSScanFHandl() { disconnect(this,SIGNAL(CMDRunFinishSGL()),this,SLOT(compSScanFHandl())); bool motorsts; while(1) { motorsts = acsCtl->getMotorState(XAXIS); if (motorsts) break; Sleep(5); } try { readCompSScanData(); //saveCompSScanData(); //buildLookupTable(); // 保存原始查找表的数据 //saveLookupTable(); // 判断查找表的值是否都超上下限 // 如果都超则补偿失败 //SScanDataCheck(); //lookupTableHeadEndDataHandl(); //saveLookupTable(); // DEV->readCompSScanData(); // DEV->buildLookupTable(); // DEV->saveLookupTable(); // QVector>().swap(DEV->lookupTable); // DEV->buildLookupTable_lhc(); // //mParent->saveLookupTable_lhc(); // DEV->SScanDataCheck(); // DEV->lookupTableHeadEndDataHandl(); // //mParent->saveLookupTable_lhc(); // DEV->lookupTableHeadEndDataHandl_lhc2(); // DEV->saveLookupTable_lhc(); buildLookupTable();// saveLookupTable();// //SScanDataCheck();// //lookupTableHeadEndDataHandl_lhc();// //saveLookupTable();// /********************************************************/ QVector>().swap(lookupTable); buildLookupTable_lhc();// //saveLookupTable_lhc();// SScanDataCheck();//lihongchang lookupTableHeadEndDataHandl(); //lookupTableHeadEndDataHandl_lhc();// //saveLookupTable_lhc();// lookupTableHeadEndDataHandl_lhc2(); saveLookupTable_lhc();// //测试 //saveLookupTable(); SScanDataCheck_lhc(); //开启加工头补偿 MHCompOpenInSide(); DEV->devPlaneScanCompState = 1; connect(this,SIGNAL(CMDRunFinishSGL()),this,SLOT(CSS_MHCompOpenFHandl())); reqCMDRunFState = true; } catch (MyException mye) { exceptHandl(MyException(mye.getExceptInfo(),mye.getExceptCode())); } } void DeviceProxy::CSS_MHCompOpenFHandl() { disconnect(this,SIGNAL(CMDRunFinishSGL()),this,SLOT(CSS_MHCompOpenFHandl())); emit MHCompOpenFSGL(); DEVICE_INFO->printDeviceSystemInfo("加工头补偿打开完成"); DEVICE_INFO->printDeviceSystemInfo("补偿面扫描完成"); lastTaskIsFinish=true; } void DeviceProxy::FindEdgeFHandl(int result) { disconnect(this,SIGNAL(FindEdgeFinishSGL(int)),this,SLOT(FindEdgeFHandl(int))); if (result == 0) DEVICE_INFO->printDeviceSystemInfo("寻边定位完成"); else DEVICE_INFO->printDeviceSystemInfo("寻边定位失败,未找到切边!"); lastTaskIsFinish=true; } void DeviceProxy::GetRatioP1P2FHandl(int result) { disconnect(this,SIGNAL(GetRatioP1P2FinishSGL(int)),this,SLOT(GetRatioP1P2FHandl(int))); if (result == 0) DEVICE_INFO->printDeviceSystemInfo("获取光路参数完成"); else DEVICE_INFO->printDeviceSystemInfo("获取光路参数失败,未完成检测!"); lastTaskIsFinish=true; } void DeviceProxy::ElectricResistanceCheckFHandl(int result) { disconnect(this,SIGNAL(ElectricResistanceCheckFinishSGL(int)),this,SLOT(ElectricResistanceCheckFHandl(int))); if (result == 0) DEVICE_INFO->printDeviceSystemInfo("晶锭预测量完成"); else DEVICE_INFO->printDeviceSystemInfo("晶锭预测量失败,未完成检测!"); ABSMove_Z0_test(); lastTaskIsFinish=true; } void DeviceProxy::MHCompOpenFHandl() { disconnect(this,SIGNAL(CMDRunFinishSGL()),this,SLOT(MHCompOpenFHandl())); emit MHCompOpenFSGL(); DEVICE_INFO->printDeviceSystemInfo("加工头补偿打开完成"); lastTaskIsFinish=true; } void DeviceProxy::SMachFHandl() { disconnect(this,SIGNAL(CMDRunFinishSGL()),this,SLOT(SMachFHandl())); DEVICE_INFO->printDeviceSystemInfo("单步加工完成"); try { compCloseInSide(); acsCtl->stopBuffer(1); QByteArray qbyCode = MachCode().getCode().toLatin1(); char* code = qbyCode.data(); acsCtl->loadBuffer(1,code); acsCtl->compileBuffer(1); acsCtl->runBuffer(1); lastTaskIsFinish=true; } catch (MyException mye) { exceptHandl(MyException("单步加工后,取消补偿或Z轴运动失败!",mye.getExceptCode())); } } void DeviceProxy::semiAutoMachFHandl() { disconnect(this,SIGNAL(CMDRunFinishSGL()),this,SLOT(semiAutoMachFHandl())); DEVICE_INFO->printDeviceSystemInfo("半自动加工完成"); lastTaskIsFinish=true; } bool DeviceProxy::getResetState() { char vNameToHomeF[] = ACSCTL_ALLTOHOMEF_V; devIsReset = acsCtl->getGlobalInt(vNameToHomeF); return devIsReset; } void DeviceProxy::MHToCamera() { if(!devIsReset) { emit exceptSGL(MyException(QString("设备未初始化,未复位,无法执行加工头到相机位置。请先完成复位。"),MY_WARN)); return; } if(!lastTaskIsFinish) { emit exceptSGL(MyException(QString("%1任务执行中,无法执行加工头到相机位置。请先停止运动或等待任务结束。").arg(lastTaskName),MY_WARN)); return; } if(bRunning) { emit exceptSGL(MyException(QString("自动运行执行中,请等待运行结束。"),MY_WARN)); return; } { int axisBuf[4] = {0}; axisBuf[1] = 1; int ret = AxisMoveSafeCheckXY(axisBuf,nullptr,nullptr); if(ret < 0) { emit exceptSGL(MyException(QString("晶碇与Z轴间距太小,不能执行动作。"),MY_WARN)); return; } } RS_SETTINGS->beginGroup("device/MRHCamera"); int cameraIsCalib = RS_SETTINGS->readNumEntry("/cameraIsCalib", 0); int MHIsCalib = RS_SETTINGS->readNumEntry("/MHIsCalib", 0); RS_SETTINGS->endGroup(); if(!(cameraIsCalib&&MHIsCalib)) { emit exceptSGL(MyException(QString("相机或加工头空间位置未标定,无法执行加工头到相机位置。请先完成复位。"),MY_WARN)); return; } try { DEVICE_INFO->printDeviceSystemInfo("加工头到相机位置运动中..."); lastTaskIsFinish=false; lastTaskName="加工头到相机位置"; acsCtl->stopBuffer(1); char vname[]= ACSCTL_RUNF_V; acsCtl->setGlobalInt(vname,0); MAxisABSMoveCode mAxisABSMoveCode; RS_SETTINGS->beginGroup("device/ZAAxisSafe"); double ZAAxisSafePos = RS_SETTINGS->readNumEntry("/pos"); double ZAAxisToSafePosVel = RS_SETTINGS->readNumEntry("/vel"); RS_SETTINGS->endGroup(); mAxisABSMoveCode.setZAAxisSafePos(ZAAxisSafePos); mAxisABSMoveCode.setZAAxisToSafePosVel(ZAAxisToSafePosVel); mAxisABSMoveCode.setXAxisIsMove(true); mAxisABSMoveCode.setYAxisIsMove(true); mAxisABSMoveCode.setZAxisIsMove(false); mAxisABSMoveCode.setZAAxisIsMove(false); mAxisABSMoveCode.disableZAAxisToSafePos(true); mAxisABSMoveCode.setCMRSwitch(true); RS_SETTINGS->beginGroup("device/MRHCamera/calibPos"); double MHXAxis = RS_SETTINGS->readNumDEntry("/MHXAxis"); double MHYAxis = RS_SETTINGS->readNumDEntry("/MHYAxis"); double cameraXAxis = RS_SETTINGS->readNumDEntry("/cameraXAxis"); double cameraYAxis = RS_SETTINGS->readNumDEntry("/cameraYAxis"); RS_SETTINGS->endGroup(); mAxisABSMoveCode.setXAxisTGPos(MHXAxis-cameraXAxis); mAxisABSMoveCode.setYAxisTGPos(MHYAxis-cameraYAxis); RS_SETTINGS->beginGroup("device/MRHCamera/switchVel"); double XAxisVel = RS_SETTINGS->readNumDEntry("/XAxis"); double YAxisVel = RS_SETTINGS->readNumDEntry("/YAxis"); RS_SETTINGS->endGroup(); mAxisABSMoveCode.setXAxisVel(XAxisVel); mAxisABSMoveCode.setYAxisVel(YAxisVel); char *code; QByteArray byCode = mAxisABSMoveCode.getCode().toLatin1(); code = byCode.data(); acsCtl->loadBuffer(1,code); acsCtl->compileBuffer(1); acsCtl->runBuffer(1); connect(this,SIGNAL(CMDRunFinishSGL()),this,SLOT(MHToCameraFHandl())); reqCMDRunFState = true; } catch (MyException mye) { exceptHandl(MyException("加工头移动到相机位置失败。",mye.getExceptCode())); } } void DeviceProxy::CameraToMH() { if(!devIsReset) { emit exceptSGL(MyException(QString("设备未初始化,未复位,无法执行相机到加工头位置。请先完成复位。"),MY_WARN)); return; } if(!lastTaskIsFinish) { emit exceptSGL(MyException(QString("%1任务执行中,无法执行相机到加工头位置。请先停止运动或等待任务结束。").arg(lastTaskName),MY_WARN)); return; } if(bRunning) { emit exceptSGL(MyException(QString("自动运行执行中,请等待运行结束。"),MY_WARN)); return; } { int axisBuf[4] = {0}; axisBuf[1] = 1; int ret = AxisMoveSafeCheckXY(axisBuf,nullptr,nullptr); if(ret < 0) { emit exceptSGL(MyException(QString("晶碇与Z轴间距太小,不能执行动作。"),MY_WARN)); return; } } RS_SETTINGS->beginGroup("device/MRHCamera"); int cameraIsCalib = RS_SETTINGS->readNumEntry("/cameraIsCalib", 0); int MHIsCalib = RS_SETTINGS->readNumEntry("/MHIsCalib", 0); RS_SETTINGS->endGroup(); if(!(cameraIsCalib&&MHIsCalib)) { emit exceptSGL(MyException(QString("相机或加工头空间位置未标定,无法执行加工头到相机位置。请先完成复位。"),MY_WARN)); return; } try { DEVICE_INFO->printDeviceSystemInfo("相机到加工头位置运动中..."); lastTaskIsFinish=false; lastTaskName="相机到加工头位置"; acsCtl->stopBuffer(1); char vname[]= ACSCTL_RUNF_V; acsCtl->setGlobalInt(vname,0); MAxisABSMoveCode mAxisABSMoveCode; RS_SETTINGS->beginGroup("device/ZAAxisSafe"); double ZAAxisSafePos = RS_SETTINGS->readNumEntry("/pos"); double ZAAxisToSafePosVel = RS_SETTINGS->readNumEntry("/vel"); RS_SETTINGS->endGroup(); mAxisABSMoveCode.setZAAxisSafePos(ZAAxisSafePos); mAxisABSMoveCode.setZAAxisToSafePosVel(ZAAxisToSafePosVel); mAxisABSMoveCode.setXAxisIsMove(true); mAxisABSMoveCode.setYAxisIsMove(true); mAxisABSMoveCode.setZAxisIsMove(false); mAxisABSMoveCode.setZAAxisIsMove(false); mAxisABSMoveCode.disableZAAxisToSafePos(true); mAxisABSMoveCode.setCMRSwitch(true); RS_SETTINGS->beginGroup("device/MRHCamera/calibPos"); double MHXAxis = RS_SETTINGS->readNumDEntry("/MHXAxis"); double MHYAxis = RS_SETTINGS->readNumDEntry("/MHYAxis"); double cameraXAxis = RS_SETTINGS->readNumDEntry("/cameraXAxis"); double cameraYAxis = RS_SETTINGS->readNumDEntry("/cameraYAxis"); RS_SETTINGS->endGroup(); mAxisABSMoveCode.setXAxisTGPos(cameraXAxis-MHXAxis); mAxisABSMoveCode.setYAxisTGPos(cameraYAxis-MHYAxis); RS_SETTINGS->beginGroup("device/MRHCamera/switchVel"); double XAxisVel = RS_SETTINGS->readNumDEntry("/XAxis"); double YAxisVel = RS_SETTINGS->readNumDEntry("/YAxis"); RS_SETTINGS->endGroup(); mAxisABSMoveCode.setXAxisVel(XAxisVel); mAxisABSMoveCode.setYAxisVel(YAxisVel); char *code; QByteArray byCode = mAxisABSMoveCode.getCode().toLatin1(); code = byCode.data(); acsCtl->loadBuffer(1,code); acsCtl->compileBuffer(1); acsCtl->runBuffer(1); connect(this,SIGNAL(CMDRunFinishSGL()),this,SLOT(CameraToMHFHandl())); reqCMDRunFState = true; } catch (MyException mye) { exceptHandl(MyException("相机移动到加工头位置失败。",mye.getExceptCode())); } } void DeviceProxy::RHToCamera() { if(!devIsReset) { emit exceptSGL(MyException(QString("设备未初始化,未复位,无法执行测距头到相机位置。请先完成复位。"),MY_WARN)); return; } if(!lastTaskIsFinish) { emit exceptSGL(MyException(QString("%1任务执行中,无法执行测距头到相机位置。请先停止运动或等待任务结束。").arg(lastTaskName),MY_WARN)); return; } if(bRunning) { emit exceptSGL(MyException(QString("自动运行执行中,请等待运行结束。"),MY_WARN)); return; } { int axisBuf[4] = {0}; axisBuf[1] = 1; int ret = AxisMoveSafeCheckXY(axisBuf,nullptr,nullptr); if(ret < 0) { emit exceptSGL(MyException(QString("晶碇与Z轴间距太小,不能执行动作。"),MY_WARN)); return; } } RS_SETTINGS->beginGroup("device/MRHCamera"); int cameraIsCalib = RS_SETTINGS->readNumEntry("/cameraIsCalib", 0); int RHIsCalib = RS_SETTINGS->readNumEntry("/RHIsCalib", 0); RS_SETTINGS->endGroup(); if(!(cameraIsCalib&&RHIsCalib)) { emit exceptSGL(MyException(QString("相机或测距头空间位置未标定,无法执行加工头到相机位置。请先完成复位。"),MY_WARN)); return; } try { DEVICE_INFO->printDeviceSystemInfo("测距头到相机位置运动中..."); lastTaskIsFinish=false; lastTaskName="测距头到相机位置"; acsCtl->stopBuffer(1); char vname[]= ACSCTL_RUNF_V; acsCtl->setGlobalInt(vname,0); MAxisABSMoveCode mAxisABSMoveCode; RS_SETTINGS->beginGroup("device/ZAAxisSafe"); double ZAAxisSafePos = RS_SETTINGS->readNumEntry("/pos"); double ZAAxisToSafePosVel = RS_SETTINGS->readNumEntry("/vel"); RS_SETTINGS->endGroup(); mAxisABSMoveCode.setZAAxisSafePos(ZAAxisSafePos); mAxisABSMoveCode.setZAAxisToSafePosVel(ZAAxisToSafePosVel); mAxisABSMoveCode.setXAxisIsMove(true); mAxisABSMoveCode.setYAxisIsMove(true); mAxisABSMoveCode.setZAxisIsMove(false); mAxisABSMoveCode.setZAAxisIsMove(false); mAxisABSMoveCode.disableZAAxisToSafePos(true); mAxisABSMoveCode.setCMRSwitch(true); RS_SETTINGS->beginGroup("device/MRHCamera/calibPos"); double RHXAxis = RS_SETTINGS->readNumDEntry("/RHXAxis"); double RHYAxis = RS_SETTINGS->readNumDEntry("/RHYAxis"); double cameraXAxis = RS_SETTINGS->readNumDEntry("/cameraXAxis"); double cameraYAxis = RS_SETTINGS->readNumDEntry("/cameraYAxis"); RS_SETTINGS->endGroup(); mAxisABSMoveCode.setXAxisTGPos(RHXAxis-cameraXAxis); mAxisABSMoveCode.setYAxisTGPos(RHYAxis-cameraYAxis); RS_SETTINGS->beginGroup("device/MRHCamera/switchVel"); double XAxisVel = RS_SETTINGS->readNumDEntry("/XAxis"); double YAxisVel = RS_SETTINGS->readNumDEntry("/YAxis"); RS_SETTINGS->endGroup(); mAxisABSMoveCode.setXAxisVel(XAxisVel); mAxisABSMoveCode.setYAxisVel(YAxisVel); char *code; QByteArray byCode = mAxisABSMoveCode.getCode().toLatin1(); code = byCode.data(); acsCtl->loadBuffer(1,code); acsCtl->compileBuffer(1); acsCtl->runBuffer(1); connect(this,SIGNAL(CMDRunFinishSGL()),this,SLOT(RHToCameraFHandl())); reqCMDRunFState = true; } catch (MyException mye) { exceptHandl(MyException("测距头移动到相机位置失败。",mye.getExceptCode())); } } void DeviceProxy::CameraToRH() { if(!devIsReset) { emit exceptSGL(MyException(QString("设备未初始化,未复位,无法执行相机到测距头位置。请先完成复位。"),MY_WARN)); return; } if(!lastTaskIsFinish) { emit exceptSGL(MyException(QString("%1任务执行中,无法执行相机到测距头位置。请先停止运动或等待任务结束。").arg(lastTaskName),MY_WARN)); return; } if(bRunning) { emit exceptSGL(MyException(QString("自动运行执行中,请等待运行结束。"),MY_WARN)); return; } { int axisBuf[4] = {0}; axisBuf[1] = 1; int ret = AxisMoveSafeCheckXY(axisBuf,nullptr,nullptr); if(ret < 0) { emit exceptSGL(MyException(QString("晶碇与Z轴间距太小,不能执行动作。"),MY_WARN)); return; } } RS_SETTINGS->beginGroup("device/MRHCamera"); int cameraIsCalib = RS_SETTINGS->readNumEntry("/cameraIsCalib", 0); int RHIsCalib = RS_SETTINGS->readNumEntry("/RHIsCalib", 0); RS_SETTINGS->endGroup(); if(!(cameraIsCalib&&RHIsCalib)) { emit exceptSGL(MyException(QString("相机或测距头空间位置未标定,无法执行加工头到相机位置。请先完成复位。"),MY_WARN)); return; } try { DEVICE_INFO->printDeviceSystemInfo("相机到测距头位置运动中..."); lastTaskIsFinish=false; lastTaskName="相机到测距头位置"; acsCtl->stopBuffer(1); char vname[]= ACSCTL_RUNF_V; acsCtl->setGlobalInt(vname,0); MAxisABSMoveCode mAxisABSMoveCode; RS_SETTINGS->beginGroup("device/ZAAxisSafe"); double ZAAxisSafePos = RS_SETTINGS->readNumEntry("/pos"); double ZAAxisToSafePosVel = RS_SETTINGS->readNumEntry("/vel"); RS_SETTINGS->endGroup(); mAxisABSMoveCode.setZAAxisSafePos(ZAAxisSafePos); mAxisABSMoveCode.setZAAxisToSafePosVel(ZAAxisToSafePosVel); mAxisABSMoveCode.setXAxisIsMove(true); mAxisABSMoveCode.setYAxisIsMove(true); mAxisABSMoveCode.setZAxisIsMove(false); mAxisABSMoveCode.setZAAxisIsMove(false); mAxisABSMoveCode.disableZAAxisToSafePos(true); mAxisABSMoveCode.setCMRSwitch(true); RS_SETTINGS->beginGroup("device/MRHCamera/calibPos"); double RHXAxis = RS_SETTINGS->readNumDEntry("/RHXAxis"); double RHYAxis = RS_SETTINGS->readNumDEntry("/RHYAxis"); double cameraXAxis = RS_SETTINGS->readNumDEntry("/cameraXAxis"); double cameraYAxis = RS_SETTINGS->readNumDEntry("/cameraYAxis"); RS_SETTINGS->endGroup(); mAxisABSMoveCode.setXAxisTGPos(cameraXAxis-RHXAxis); mAxisABSMoveCode.setYAxisTGPos(cameraYAxis-RHYAxis); RS_SETTINGS->beginGroup("device/MRHCamera/switchVel"); double XAxisVel = RS_SETTINGS->readNumDEntry("/XAxis"); double YAxisVel = RS_SETTINGS->readNumDEntry("/YAxis"); RS_SETTINGS->endGroup(); mAxisABSMoveCode.setXAxisVel(XAxisVel); mAxisABSMoveCode.setYAxisVel(YAxisVel); char *code; QByteArray byCode = mAxisABSMoveCode.getCode().toLatin1(); code = byCode.data(); acsCtl->loadBuffer(1,code); acsCtl->compileBuffer(1); acsCtl->runBuffer(1); connect(this,SIGNAL(CMDRunFinishSGL()),this,SLOT(CameraToRHFHandl())); reqCMDRunFState = true; } catch (MyException mye) { exceptHandl(MyException("相机移动到测距头位置失败。",mye.getExceptCode())); } } void DeviceProxy::RHToMH() { if(!devIsReset) { emit exceptSGL(MyException(QString("设备未初始化,未复位,无法执行测距头到加工头位置。请先完成复位。"),MY_WARN)); } if(!lastTaskIsFinish) { emit exceptSGL(MyException(QString("%1任务执行中,无法执行测距头到加工头位置。请先停止运动或等待任务结束。").arg(lastTaskName),MY_WARN)); return; } if(bRunning) { emit exceptSGL(MyException(QString("自动运行执行中,请等待运行结束。"),MY_WARN)); return; } { int axisBuf[4] = {0}; axisBuf[1] = 1; int ret = AxisMoveSafeCheckXY(axisBuf,nullptr,nullptr); if(ret < 0) { emit exceptSGL(MyException(QString("晶碇与Z轴间距太小,不能执行动作。"),MY_WARN)); return; } } RS_SETTINGS->beginGroup("device/MRHCamera"); int RHIsCalib = RS_SETTINGS->readNumEntry("/RHIsCalib", 0); int MHIsCalib = RS_SETTINGS->readNumEntry("/MHIsCalib", 0); RS_SETTINGS->endGroup(); if(!(MHIsCalib&&RHIsCalib)) { emit exceptSGL(MyException(QString("测距或加工头空间位置未标定,无法执行加工头到相机位置。请先完成复位。"),MY_WARN)); } try { lastTaskIsFinish=false; lastTaskName="测距头到加工头位置"; RHToMHInSide(); connect(this,SIGNAL(CMDRunFinishSGL()),this,SLOT(RHToMHFHandl())); reqCMDRunFState = true; } catch (MyException mye) { exceptHandl(MyException("测距头移动到加工头位置失败。",mye.getExceptCode())); } } void DeviceProxy::MHToRH() { if(!devIsReset) { emit exceptSGL(MyException(QString("设备未初始化,未复位,无法执行加工头到测距头位置。请先完成复位。"),MY_WARN)); } if(!lastTaskIsFinish) { emit exceptSGL(MyException(QString("%1任务执行中,无法执行加工头到测距头位置。请先停止运动或等待任务结束。").arg(lastTaskName),MY_WARN)); return; } if(bRunning) { emit exceptSGL(MyException(QString("自动运行执行中,请等待运行结束。"),MY_WARN)); return; } { int axisBuf[4] = {0}; axisBuf[1] = 1; int ret = AxisMoveSafeCheckXY(axisBuf,nullptr,nullptr); if(ret < 0) { emit exceptSGL(MyException(QString("晶碇与Z轴间距太小,不能执行动作。"),MY_WARN)); return; } } RS_SETTINGS->beginGroup("device/MRHCamera"); int RHIsCalib = RS_SETTINGS->readNumEntry("/RHIsCalib", 0); int MHIsCalib = RS_SETTINGS->readNumEntry("/MHIsCalib", 0); RS_SETTINGS->endGroup(); if(!(MHIsCalib&&RHIsCalib)) { emit exceptSGL(MyException(QString("测距或加工头空间位置未标定,无法执行加工头到相机位置。请先完成复位。"),MY_WARN)); } try { lastTaskIsFinish=false; lastTaskName="加工头到测距头位置"; MHToRHInSide(); connect(this,SIGNAL(CMDRunFinishSGL()),this,SLOT(MHToRHFHandl())); reqCMDRunFState = true; } catch (MyException mye) { exceptHandl(MyException("加工头移动到测距头位置失败。",mye.getExceptCode())); } } void DeviceProxy::toLoadAndUnloadPos() { if(!devIsReset) { emit exceptSGL(MyException(QString("设备未初始化,未复位,无法执行到上下料位置。请先复位。"),MY_WARN)); return; } if(!lastTaskIsFinish) { emit exceptSGL(MyException(QString("%1任务执行中,无法执行到上下料位置。请先停止运动或等待任务结束。").arg(lastTaskName),MY_WARN)); return; } if(bRunning) { emit exceptSGL(MyException(QString("自动运行执行中,请等待运行结束。"),MY_WARN)); return; } try { lastTaskIsFinish=false; lastTaskName="到上下料位"; toLoadAndUnloadPosInSide(); connect(this,SIGNAL(CMDRunFinishSGL()),this,SLOT(toLoadAndUnloadPosFHandl())); reqCMDRunFState = true; } catch (MyException mye) { exceptHandl(MyException(QString("到上下料位置失败。"),mye.getExceptCode())); } } void DeviceProxy::toGloblaCameraPos() { if(!devIsReset) { emit exceptSGL(MyException(QString("设备未初始化,未复位,无法执行到全局相机位置。请先复位。"),MY_WARN)); return; } if(!lastTaskIsFinish) { emit exceptSGL(MyException(QString("%1任务执行中,无法执行到全局相机位置。请先停止运动或等待任务结束。").arg(lastTaskName),MY_WARN)); return; } if(bRunning) { emit exceptSGL(MyException(QString("自动运行执行中,请等待运行结束。"),MY_WARN)); return; } try { lastTaskIsFinish=false; lastTaskName="到全局相机位"; acsCtl->setVEL(DAXIS, 40); acsCtl->setACC(DAXIS,400); acsCtl->setDEC(DAXIS,400); acsCtl->setJERK(DAXIS, 4000); acsCtl->setKDEC(DAXIS,4000); acsCtl->RToPointPos(DAXIS,-90);//转到工作位 GloblaCameraPosInSide(); connect(this,SIGNAL(CMDRunFinishSGL()),this,SLOT(toGlobalCameraPosFHandl())); reqCMDRunFState = true; } catch (MyException mye) { exceptHandl(MyException(QString("到全局相机位置失败。"),mye.getExceptCode())); } } void DeviceProxy::toSScanStartPos() { if(!devIsReset) { emit exceptSGL(MyException(QString("设备未初始化,未复位,无法执行到扫描起始位。请先复位。"),MY_WARN)); return; } if(!lastTaskIsFinish) { emit exceptSGL(MyException(QString("%1任务执行中,无法执行到扫描起始位。请先停止运动或等待任务结束。").arg(lastTaskName),MY_WARN)); return; } if(bRunning) { emit exceptSGL(MyException(QString("自动运行执行中,请等待运行结束。"),MY_WARN)); return; } try { lastTaskIsFinish=false; lastTaskName="到扫描起始位"; toSScanStartPosInSide(); connect(this,SIGNAL(CMDRunFinishSGL()),this,SLOT(toSScanStartPosFHandl())); reqCMDRunFState = true; } catch (MyException mye) { exceptHandl(MyException(QString("到扫描起始位失败。"),mye.getExceptCode())); } } void DeviceProxy::toRSToZeroPos() { if(!devIsReset) { emit exceptSGL(MyException(QString("设备未初始化,未复位,无法执行到对零位。请先复位。"),MY_WARN)); return; } if(!lastTaskIsFinish) { emit exceptSGL(MyException(QString("%1任务执行中,无法执行到对零位。请先停止运动或等待任务结束。").arg(lastTaskName),MY_WARN)); return; } if(bRunning) { emit exceptSGL(MyException(QString("自动运行执行中,请等待运行结束。"),MY_WARN)); return; } try { lastTaskIsFinish=false; lastTaskName="到对零位"; toRSToZeroPosInSide(); connect(this,SIGNAL(CMDRunFinishSGL()),this,SLOT(toRSToZeroPosFHandl())); reqCMDRunFState = true; } catch (MyException mye) { exceptHandl(MyException(QString("到对零位失败。"),mye.getExceptCode())); } } void DeviceProxy::toZAAxisCPos() { if(!devIsReset) { emit exceptSGL(MyException(QString("设备未初始化,未复位,无法执行到Z轴常用位置。请先复位。"),MY_WARN)); return; } if(!lastTaskIsFinish) { emit exceptSGL(MyException(QString("%1任务执行中,无法执行到Z轴常用位置。请先停止运动或等待任务结束。").arg(lastTaskName),MY_WARN)); return; } if(bRunning) { emit exceptSGL(MyException(QString("自动运行执行中,请等待运行结束。"),MY_WARN)); return; } try { DEVICE_INFO->printDeviceSystemInfo(QString("到Z轴常用位运动中...")); lastTaskIsFinish=false; lastTaskName="到Z轴常用位"; acsCtl->stopBuffer(1); char vname[]= ACSCTL_RUNF_V; acsCtl->setGlobalInt(vname,0); MAxisABSMoveCode mAxisABSMoveCode; mAxisABSMoveCode.setXAxisIsMove(false); mAxisABSMoveCode.setYAxisIsMove(false); mAxisABSMoveCode.setZAxisIsMove(false); mAxisABSMoveCode.setZAAxisIsMove(true); mAxisABSMoveCode.disableZAAxisToSafePos(true); RS_SETTINGS->beginGroup("device"); QMap ZAAxisCPosMapTemp; ZAAxisCPosMapTemp = RS_SETTINGS->readQMapQStringDoubleEntry("/ZAAxisCPosMap", ZAAxisCPosMapTemp); RS_SETTINGS->endGroup(); // 加载Z轴当前常用位置 RS_SETTINGS->beginGroup("device"); QString cbZAAxisCPCtText = RS_SETTINGS->readEntry("/ZAAxisCPCtText"); RS_SETTINGS->endGroup(); mAxisABSMoveCode.setZAAxisTGPos(ZAAxisCPosMapTemp[cbZAAxisCPCtText]); // 加载PTP位置设置 RS_SETTINGS->beginGroup("device/ABSMove/Vel"); double XAxisVel = RS_SETTINGS->readNumDEntry("/XAxis"); double YAxisVel = RS_SETTINGS->readNumDEntry("/YAxis"); double ZAxisVel = RS_SETTINGS->readNumDEntry("/ZAxis"); double ZAAxisVel = RS_SETTINGS->readNumDEntry("/ZAAxis"); RS_SETTINGS->endGroup(); mAxisABSMoveCode.setXAxisVel(XAxisVel); mAxisABSMoveCode.setYAxisVel(YAxisVel); mAxisABSMoveCode.setZAxisVel(ZAxisVel); mAxisABSMoveCode.setZAAxisVel(ZAAxisVel); char *code; QByteArray byCode = mAxisABSMoveCode.getCode().toLatin1(); code = byCode.data(); acsCtl->loadBuffer(1,code); acsCtl->compileBuffer(1); acsCtl->runBuffer(1); connect(this,SIGNAL(CMDRunFinishSGL()),this,SLOT(toZAAxisCPosFHandl())); reqCMDRunFState = true; } catch (MyException mye) { exceptHandl(MyException(QString("到Z轴常用位置失败。"),mye.getExceptCode())); } } void DeviceProxy::stateDetection() { try { detectionAllAxisCtPos(); detectionAllAxisLimitState(); detectionAllAxisEnableState(); detectionEStopState(); detectionRCValue(); detectionLaserValue(); detectionInState(); setLight(); detectionZZAAxisPos(); if (checkZaxisAlarmFlag) { { int ZAxisErrorTemp = acsCtl->getMotorError(ZAXIS); if (ZAxisErrorTemp && (ZAxisErrorTemp >= 5017) && (ZAxisErrorTemp <= 5023)) { if (ZAxisErrorTemp >= 5017) { devIsReset = false; //emit DEVResetStateChangedSGL(devIsReset); //emit DEVInitStateChangedSGL(devIsInit && devIsReset); char vNameToHomeF[] = ACSCTL_ALLTOHOMEF_V; acsCtl->setGlobalInt(vNameToHomeF,0); } throw MyException(QString("Z1轴异常。"),ZAxisErrorTemp); } } { int ZAAxisErrorTemp = acsCtl->getMotorError(ZAAXIS); if (ZAAxisErrorTemp && (ZAAxisErrorTemp >= 5017) && (ZAAxisErrorTemp <= 5023)) { if (ZAAxisErrorTemp >= 5017) { devIsReset = false; //emit DEVResetStateChangedSGL(devIsReset); emit DEVInitStateChangedSGL(devIsInit && devIsReset); char vNameToHomeF[] = ACSCTL_ALLTOHOMEF_V; acsCtl->setGlobalInt(vNameToHomeF,0); } throw MyException(QString("Z轴异常。"),ZAAxisErrorTemp); } } { int XAxisErrorTemp = acsCtl->getMotorError(XAXIS); if (XAxisErrorTemp && (XAxisErrorTemp >= 5017) && (XAxisErrorTemp <= 5023)) { if (XAxisErrorTemp >= 5017) { devIsReset = false; //emit DEVResetStateChangedSGL(devIsReset); emit DEVInitStateChangedSGL(devIsInit && devIsReset); char vNameToHomeF[] = ACSCTL_ALLTOHOMEF_V; acsCtl->setGlobalInt(vNameToHomeF,0); } throw MyException(QString("X轴异常。"),XAxisErrorTemp); } } { int YAxisErrorTemp = acsCtl->getMotorError(YAXIS); if (YAxisErrorTemp && (YAxisErrorTemp >= 5017) && (YAxisErrorTemp <= 5023)) { if (YAxisErrorTemp >= 5017) { devIsReset = false; //emit DEVResetStateChangedSGL(devIsReset); emit DEVInitStateChangedSGL(devIsInit && devIsReset); char vNameToHomeF[] = ACSCTL_ALLTOHOMEF_V; acsCtl->setGlobalInt(vNameToHomeF,0); } throw MyException(QString("Y轴异常。"),YAxisErrorTemp); } } { int Z2AxisErrorTemp = acsCtl->getMotorError(Z2AXIS); if (Z2AxisErrorTemp && (Z2AxisErrorTemp >= 5017) && (Z2AxisErrorTemp <= 5023)) { if (Z2AxisErrorTemp >= 5017) { devIsReset = false; //emit DEVResetStateChangedSGL(devIsReset); emit DEVInitStateChangedSGL(devIsInit && devIsReset); char vNameToHomeF[] = ACSCTL_ALLTOHOMEF_V; acsCtl->setGlobalInt(vNameToHomeF,0); } throw MyException(QString("Z2轴异常。"),Z2AxisErrorTemp); } } { int DAxisErrorTemp = acsCtl->getMotorError(DAXIS); if (DAxisErrorTemp && (DAxisErrorTemp >= 5017) && (DAxisErrorTemp <= 5023)) { if (DAxisErrorTemp >= 5017) { devIsReset = false; //emit DEVResetStateChangedSGL(devIsReset); emit DEVInitStateChangedSGL(devIsInit && devIsReset); char vNameToHomeF[] = ACSCTL_ALLTOHOMEF_V; acsCtl->setGlobalInt(vNameToHomeF,0); } throw MyException(QString("DD轴异常。"),DAxisErrorTemp); } } } if(reqCMDRunFState) { detectionCMDRunFState(); int buffer1ErrorTemp = acsCtl->getProgramError(1); if(buffer1ErrorTemp&&(buffer1ErrorTemp>=3020)) { throw MyException(QString("buffer1运行异常。"),buffer1ErrorTemp); } if(acsCtl->getMoveState(XAXIS)) { XAxisErrorDetection = true; } if(XAxisErrorDetection) { int XAxisErrorTemp = acsCtl->getMotorError(XAXIS); if(XAxisErrorTemp&&(XAxisErrorTemp!=5016)&&(XAxisErrorTemp!=5015)&&(XAxisErrorTemp!=5038)) { if ((XAxisErrorTemp >= 5017) && (XAxisErrorTemp <= 5023)) { devIsReset = false; //emit DEVResetStateChangedSGL(devIsReset); emit DEVInitStateChangedSGL(devIsInit && devIsReset); char vNameToHomeF[] = ACSCTL_ALLTOHOMEF_V; acsCtl->setGlobalInt(vNameToHomeF,0); } throw MyException(QString("X轴异常。"),XAxisErrorTemp); } } if(acsCtl->getMoveState(YAXIS)) { YAxisErrorDetection = true; } if(YAxisErrorDetection) { int YAxisErrorTemp = acsCtl->getMotorError(YAXIS); if(YAxisErrorTemp&&(YAxisErrorTemp!=5016)&&(YAxisErrorTemp!=5015)&&(YAxisErrorTemp!=5038)) { if ((YAxisErrorTemp >= 5017) && (YAxisErrorTemp <= 5023)) { devIsReset = false; //emit DEVResetStateChangedSGL(devIsReset); emit DEVInitStateChangedSGL(devIsInit && devIsReset); char vNameToHomeF[] = ACSCTL_ALLTOHOMEF_V; acsCtl->setGlobalInt(vNameToHomeF,0); } throw MyException(QString("Y轴异常。"),YAxisErrorTemp); } } //lihongchang if(acsCtl->getMoveState(ZAXIS)) { ZAxisErrorDetection = true; } if(ZAxisErrorDetection) { int ZAxisErrorTemp = acsCtl->getMotorError(ZAXIS); if(ZAxisErrorTemp&&(ZAxisErrorTemp!=5016)&&(ZAxisErrorTemp!=5015)&&(ZAxisErrorTemp!=5038)) { if ((ZAxisErrorTemp >= 5017) && (ZAxisErrorTemp <= 5023)) { devIsReset = false; //emit DEVResetStateChangedSGL(devIsReset); emit DEVInitStateChangedSGL(devIsInit && devIsReset); char vNameToHomeF[] = ACSCTL_ALLTOHOMEF_V; acsCtl->setGlobalInt(vNameToHomeF,0); } throw MyException(QString("Z1轴异常。"),ZAxisErrorTemp); } } if(acsCtl->getMoveState(ZAAXIS)) { ZAAxisErrorDetection = true; } if(ZAAxisErrorDetection) { int ZAAxisErrorTemp = acsCtl->getMotorError(ZAAXIS); if(ZAAxisErrorTemp&&(ZAAxisErrorTemp!=5016)&&(ZAAxisErrorTemp!=5015)&&(ZAAxisErrorTemp!=5038)) { if ((ZAAxisErrorTemp >= 5017) && (ZAAxisErrorTemp <= 5023)) { devIsReset = false; //emit DEVResetStateChangedSGL(devIsReset); emit DEVInitStateChangedSGL(devIsInit && devIsReset); char vNameToHomeF[] = ACSCTL_ALLTOHOMEF_V; acsCtl->setGlobalInt(vNameToHomeF,0); } throw MyException(QString("Z轴异常。"),ZAAxisErrorTemp); } } } } catch (MyException mye) { exceptHandl(mye); } } bool DeviceProxy::getDevIsReset() { return devIsReset; } bool DeviceProxy::getDevIsInit() { return devIsInit; } bool DeviceProxy::getLastTaskIsFinish() { return lastTaskIsFinish; } void DeviceProxy::exceptHandl_thread(MyException mye) { //emit exceptSGL(mye); disconnect(this,SIGNAL(CMDRunFinishSGL()),this,SLOT(resetFHandl())); disconnect(this,SIGNAL(CMDRunFinishSGL()),this,SLOT(XAxisSMoveNFHandl())); disconnect(this,SIGNAL(CMDRunFinishSGL()),this,SLOT(XAxisSMovePFHandl())); disconnect(this,SIGNAL(CMDRunFinishSGL()),this,SLOT(YAxisSMoveNFHandl())); disconnect(this,SIGNAL(CMDRunFinishSGL()),this,SLOT(YAxisSMovePFHandl())); disconnect(this,SIGNAL(CMDRunFinishSGL()),this,SLOT(ZAxisSMoveNFHandl())); disconnect(this,SIGNAL(CMDRunFinishSGL()),this,SLOT(ZAxisSMovePFHandl())); disconnect(this,SIGNAL(CMDRunFinishSGL()),this,SLOT(ZAAxisSMoveNFHandl())); disconnect(this,SIGNAL(CMDRunFinishSGL()),this,SLOT(ZAAxisSMovePFHandl())); disconnect(this,SIGNAL(CMDRunFinishSGL()),this,SLOT(ABSMoveFHandl())); disconnect(this,SIGNAL(CMDRunFinishSGL()),this,SLOT(MHToCameraFHandl())); disconnect(this,SIGNAL(CMDRunFinishSGL()),this,SLOT(CameraToMHFHandl())); disconnect(this,SIGNAL(CMDRunFinishSGL()),this,SLOT(RHToCameraFHandl())); disconnect(this,SIGNAL(CMDRunFinishSGL()),this,SLOT(CameraToRHFHandl())); disconnect(this,SIGNAL(CMDRunFinishSGL()),this,SLOT(RHToMHFHandl())); disconnect(this,SIGNAL(CMDRunFinishSGL()),this,SLOT(MHToRHFHandl())); disconnect(this,SIGNAL(CMDRunFinishSGL()),this,SLOT(toLoadAndUnloadPosFHandl())); disconnect(this,SIGNAL(CMDRunFinishSGL()),this,SLOT(toGlobalCameraPosFHandl())); disconnect(this,SIGNAL(CMDRunFinishSGL()),this,SLOT(toSScanStartPosFHandl())); disconnect(this,SIGNAL(CMDRunFinishSGL()),this,SLOT(toHeightFindPosFHandl())); disconnect(this,SIGNAL(CMDRunFinishSGL()),this,SLOT(toEdgeSearchPosFHandl())); disconnect(this,SIGNAL(CMDRunFinishSGL()),this,SLOT(toCompenTestPosFHandl())); disconnect(this,SIGNAL(CMDRunFinishSGL()),this,SLOT(toRecordPosFHandl())); disconnect(this,SIGNAL(CMDRunFinishSGL()),this,SLOT(toRSToZeroPosFHandl())); disconnect(this,SIGNAL(CMDRunFinishSGL()),this,SLOT(toLaserApTestPosFHandl())); //disconnect(this,SIGNAL(CMDRunFinishSGL()),this,SLOT(toMachStartPosFHandl())); disconnect(this,SIGNAL(CMDRunFinishSGL()),this,SLOT(toZAAxisCPosFHandl())); disconnect(this,SIGNAL(CMDRunFinishSGL()),this,SLOT(RSToZeroFHandl())); disconnect(this,SIGNAL(CMDRunFinishSGL()),this,SLOT(MachSmallAreaFHandl())); disconnect(this,SIGNAL(CMDRunFinishSGL()),this,SLOT(SScanFHandl())); disconnect(this,SIGNAL(CMDRunFinishSGL()),this,SLOT(compSScanFHandl())); disconnect(this,SIGNAL(CMDRunFinishSGL()),this,SLOT(MHCompOpenFHandl())); //disconnect(this,SIGNAL(CMDRunFinishSGL()),this,SLOT(RHCompOpenFHandl())); disconnect(this,SIGNAL(CMDRunFinishSGL()),this,SLOT(SMachFHandl())); disconnect(this,SIGNAL(CMDRunFinishSGL()),this,SLOT(semiAutoMachFHandl())); disconnect(this,SIGNAL(CMDRunFinishSGL()),this,SLOT(CSS_MHCompOpenFHandl())); disconnect(this,SIGNAL(FindEdgeFinishSGL(int)),this,SLOT(FindEdgeFHandl(int))); disconnect(this,SIGNAL(GetRatioP1P2FinishSGL(int)),this,SLOT(GetRatioP1P2FHandl(int))); disconnect(this,SIGNAL(ElectricResistanceCheckFinishSGL(int)),this,SLOT(ElectricResistanceCheckFHandl(int))); disconnect(this,SIGNAL(GetGlobalPhotoFinishSGL(int)),this,SLOT(GetGlobalPhotoFHandl(int))); disconnect(this,SIGNAL(CMDRunFinishSGL()),this,SLOT(DAxisSMovePFHandl())); disconnect(this,SIGNAL(CMDRunFinishSGL()),this,SLOT(DAxisSMoveNFHandl())); disconnect(this,SIGNAL(CMDRunFinishSGL()),this,SLOT(Z2AxisSMoveNFHandl())); disconnect(this,SIGNAL(CMDRunFinishSGL()),this,SLOT(Z2AxisSMovePFHandl())); disconnect(this,SIGNAL(CMDRunFinishSGL()),this,SLOT(Z0AxisSMoveNFHandl())); disconnect(this,SIGNAL(CMDRunFinishSGL()),this,SLOT(Z0AxisSMovePFHandl())); XAxisErrorDetection=false; YAxisErrorDetection=false; ZAxisErrorDetection=false; ZAAxisErrorDetection=false; StopFindEdgeFlag = true; StopGetRatioP1P2Flag = true; StopElectricResistanceCheckFlag = true; MODBUSTCP->stopFlag = true; acsCtl->halt(XAXIS); acsCtl->halt(YAXIS); acsCtl->halt(ZAXIS); acsCtl->halt(ZAAXIS); acsCtl->halt(DAXIS); acsCtl->halt(Z0AXIS); acsCtl->halt(Z2AXIS); if (bRunning) { mutex.lock(); bRunning = false; mutex.unlock(); emit RunSGL(!bRunning); } lastTaskIsFinish=true; if (devIsInit) { laserClose(); if (pLaserMark != nullptr) pLaserMark->Abort(); } reqCMDRunFState = false; try { acsCtl->getEnable(XAXIS); if(acsCtl->getBufferRunState(1)) { acsCtl->stopBuffer(1); } if(acsCtl->getBufferRunState(8)) { acsCtl->stopBuffer(8); } emit exceptSGL_lhc(mye); //emit exceptSGL(mye); } catch (MyException mye) { devIsInit = false; //emit DEVInitStateChangedSGL(devIsInit); devIsReset = false; emit DEVInitStateChangedSGL(devIsInit && devIsReset); //emit DEVResetStateChangedSGL(devIsReset); stopStateDetection(); emit exceptSGL_lhc(MyException(QString("网络连接断开。"))); } } void DeviceProxy::exceptHandl(MyException mye) { //emit exceptSGL(mye); disconnect(this,SIGNAL(CMDRunFinishSGL()),this,SLOT(resetFHandl())); disconnect(this,SIGNAL(CMDRunFinishSGL()),this,SLOT(XAxisSMoveNFHandl())); disconnect(this,SIGNAL(CMDRunFinishSGL()),this,SLOT(XAxisSMovePFHandl())); disconnect(this,SIGNAL(CMDRunFinishSGL()),this,SLOT(YAxisSMoveNFHandl())); disconnect(this,SIGNAL(CMDRunFinishSGL()),this,SLOT(YAxisSMovePFHandl())); disconnect(this,SIGNAL(CMDRunFinishSGL()),this,SLOT(ZAxisSMoveNFHandl())); disconnect(this,SIGNAL(CMDRunFinishSGL()),this,SLOT(ZAxisSMovePFHandl())); disconnect(this,SIGNAL(CMDRunFinishSGL()),this,SLOT(ZAAxisSMoveNFHandl())); disconnect(this,SIGNAL(CMDRunFinishSGL()),this,SLOT(ZAAxisSMovePFHandl())); disconnect(this,SIGNAL(CMDRunFinishSGL()),this,SLOT(ABSMoveFHandl())); disconnect(this,SIGNAL(CMDRunFinishSGL()),this,SLOT(MHToCameraFHandl())); disconnect(this,SIGNAL(CMDRunFinishSGL()),this,SLOT(CameraToMHFHandl())); disconnect(this,SIGNAL(CMDRunFinishSGL()),this,SLOT(RHToCameraFHandl())); disconnect(this,SIGNAL(CMDRunFinishSGL()),this,SLOT(CameraToRHFHandl())); disconnect(this,SIGNAL(CMDRunFinishSGL()),this,SLOT(RHToMHFHandl())); disconnect(this,SIGNAL(CMDRunFinishSGL()),this,SLOT(MHToRHFHandl())); disconnect(this,SIGNAL(CMDRunFinishSGL()),this,SLOT(toLoadAndUnloadPosFHandl())); disconnect(this,SIGNAL(CMDRunFinishSGL()),this,SLOT(toGlobalCameraPosFHandl())); disconnect(this,SIGNAL(CMDRunFinishSGL()),this,SLOT(toSScanStartPosFHandl())); disconnect(this,SIGNAL(CMDRunFinishSGL()),this,SLOT(toHeightFindPosFHandl())); disconnect(this,SIGNAL(CMDRunFinishSGL()),this,SLOT(toEdgeSearchPosFHandl())); disconnect(this,SIGNAL(CMDRunFinishSGL()),this,SLOT(toCompenTestPosFHandl())); disconnect(this,SIGNAL(CMDRunFinishSGL()),this,SLOT(toRecordPosFHandl())); disconnect(this,SIGNAL(CMDRunFinishSGL()),this,SLOT(toRSToZeroPosFHandl())); disconnect(this,SIGNAL(CMDRunFinishSGL()),this,SLOT(toLaserApTestPosFHandl())); //disconnect(this,SIGNAL(CMDRunFinishSGL()),this,SLOT(toMachStartPosFHandl())); disconnect(this,SIGNAL(CMDRunFinishSGL()),this,SLOT(toZAAxisCPosFHandl())); disconnect(this,SIGNAL(CMDRunFinishSGL()),this,SLOT(RSToZeroFHandl())); disconnect(this,SIGNAL(CMDRunFinishSGL()),this,SLOT(MachSmallAreaFHandl())); disconnect(this,SIGNAL(CMDRunFinishSGL()),this,SLOT(SScanFHandl())); disconnect(this,SIGNAL(CMDRunFinishSGL()),this,SLOT(compSScanFHandl())); disconnect(this,SIGNAL(CMDRunFinishSGL()),this,SLOT(MHCompOpenFHandl())); //disconnect(this,SIGNAL(CMDRunFinishSGL()),this,SLOT(RHCompOpenFHandl())); disconnect(this,SIGNAL(CMDRunFinishSGL()),this,SLOT(SMachFHandl())); disconnect(this,SIGNAL(CMDRunFinishSGL()),this,SLOT(semiAutoMachFHandl())); disconnect(this,SIGNAL(CMDRunFinishSGL()),this,SLOT(CSS_MHCompOpenFHandl())); disconnect(this,SIGNAL(FindEdgeFinishSGL(int)),this,SLOT(FindEdgeFHandl(int))); disconnect(this,SIGNAL(GetRatioP1P2FinishSGL(int)),this,SLOT(GetRatioP1P2FHandl(int))); disconnect(this,SIGNAL(ElectricResistanceCheckFinishSGL(int)),this,SLOT(ElectricResistanceCheckFHandl(int))); disconnect(this,SIGNAL(GetGlobalPhotoFinishSGL(int)),this,SLOT(GetGlobalPhotoFHandl(int))); disconnect(this,SIGNAL(CMDRunFinishSGL()),this,SLOT(DAxisSMovePFHandl())); disconnect(this,SIGNAL(CMDRunFinishSGL()),this,SLOT(DAxisSMoveNFHandl())); disconnect(this,SIGNAL(CMDRunFinishSGL()),this,SLOT(Z2AxisSMoveNFHandl())); disconnect(this,SIGNAL(CMDRunFinishSGL()),this,SLOT(Z2AxisSMovePFHandl())); disconnect(this,SIGNAL(CMDRunFinishSGL()),this,SLOT(Z0AxisSMoveNFHandl())); disconnect(this,SIGNAL(CMDRunFinishSGL()),this,SLOT(Z0AxisSMovePFHandl())); XAxisErrorDetection=false; YAxisErrorDetection=false; ZAxisErrorDetection=false; ZAAxisErrorDetection=false; checkZaxisAlarmFlag = false; StopFindEdgeFlag = true; StopGetRatioP1P2Flag = true; StopElectricResistanceCheckFlag = true; MODBUSTCP->stopFlag = true; if (devIsInit) { acsCtl->halt(XAXIS); acsCtl->halt(YAXIS); acsCtl->halt(ZAXIS); acsCtl->halt(ZAAXIS); acsCtl->halt(DAXIS); acsCtl->halt(Z0AXIS); acsCtl->halt(Z2AXIS); } if (bRunning) { mutex.lock(); bRunning = false; mutex.unlock(); emit RunSGL(!bRunning); } lastTaskIsFinish=true; if (devIsInit) { laserClose(); if (pLaserMark != nullptr) pLaserMark->Abort(); } reqCMDRunFState = false; emit AutoSmachStateSGL(false); emit VacuumSuckerOnOrOffStateSGL(true); if (bUserPower) emit SmachTypeStateSGL(true); try { acsCtl->getEnable(XAXIS); if(acsCtl->getBufferRunState(1)) { acsCtl->stopBuffer(1); } if(acsCtl->getBufferRunState(8)) { acsCtl->stopBuffer(8); } //emit exceptSGL_lhc(mye); emit exceptSGL(mye); } catch (MyException mye) { devIsInit = false; //emit DEVInitStateChangedSGL(devIsInit); devIsReset = false; //emit DEVResetStateChangedSGL(devIsReset); emit DEVInitStateChangedSGL(devIsInit && devIsReset); stopStateDetection(); emit exceptSGL(MyException(QString("网络连接断开。"))); } } void DeviceProxy::toLaserApTestPosInSide() { DEVICE_INFO->printDeviceSystemInfo(QString("到激光功率测量位运动中...")); acsCtl->stopBuffer(1); char vname[]= ACSCTL_RUNF_V; acsCtl->setGlobalInt(vname,0); MAxisABSMoveCode mAxisABSMoveCode; RS_SETTINGS->beginGroup("device/ZAAxisSafe"); double ZAAxisSafePos = RS_SETTINGS->readNumEntry("/pos"); double ZAAxisToSafePosVel = RS_SETTINGS->readNumEntry("/vel"); RS_SETTINGS->endGroup(); mAxisABSMoveCode.setZAAxisSafePos(ZAAxisSafePos); mAxisABSMoveCode.setZAAxisToSafePosVel(ZAAxisToSafePosVel); mAxisABSMoveCode.setXAxisIsMove(true); mAxisABSMoveCode.setYAxisIsMove(true); mAxisABSMoveCode.setZAxisIsMove(true); mAxisABSMoveCode.setZAAxisIsMove(true); mAxisABSMoveCode.setZ0AxisIsMove(true); mAxisABSMoveCode.disableZAAxisToSafePos(false); RS_SETTINGS->beginGroup("device/LaserApTestPos"); double XAxisPos = RS_SETTINGS->readNumDEntry("/XAxis"); double YAxisPos = RS_SETTINGS->readNumDEntry("/YAxis"); double ZAAxisPos = RS_SETTINGS->readNumDEntry("/ZAAxis"); RS_SETTINGS->endGroup(); RS_SETTINGS->beginGroup("device/rightSLimit"); double Z0AxisRightSLimit = RS_SETTINGS->readNumDEntry("/Z0Axis"); RS_SETTINGS->endGroup(); mAxisABSMoveCode.setXAxisTGPos(XAxisPos); mAxisABSMoveCode.setYAxisTGPos(YAxisPos); mAxisABSMoveCode.setZAxisTGPos(0); mAxisABSMoveCode.setZAAxisTGPos(ZAAxisPos); /*************************************************************** * 修改码:1008610010 * 日期: * 2024.3.4 * 功能: * 光路检测功能,将Z0轴移动到最高(右软限位) * 描述: * mAxisABSMoveCode.setZ0AxisIsMove(true); * mAxisABSMoveCode.setZ0AxisTGPos(Z0AxisRightSLimit); **************************************************************/ mAxisABSMoveCode.setZ0AxisTGPos(Z0AxisRightSLimit-2.0); // 加载PTP位置设置 RS_SETTINGS->beginGroup("device/ABSMove/Vel"); double XAxisVel = RS_SETTINGS->readNumDEntry("/XAxis"); double YAxisVel = RS_SETTINGS->readNumDEntry("/YAxis"); double ZAxisVel = RS_SETTINGS->readNumDEntry("/ZAxis"); double ZAAxisVel = RS_SETTINGS->readNumDEntry("/ZAAxis"); RS_SETTINGS->endGroup(); mAxisABSMoveCode.setXAxisVel(XAxisVel); mAxisABSMoveCode.setYAxisVel(YAxisVel); mAxisABSMoveCode.setZAxisVel(ZAxisVel); mAxisABSMoveCode.setZAAxisVel(ZAAxisVel); // 加载速度设置 RS_SETTINGS->beginGroup("device/DDMotor"); double Z0AxisVel = RS_SETTINGS->readNumDEntry("/Vel"); RS_SETTINGS->endGroup(); mAxisABSMoveCode.setZ0AxisVel(Z0AxisVel); char *code; QByteArray byCode = mAxisABSMoveCode.getCode_L().toLatin1(); code = byCode.data(); acsCtl->loadBuffer(1,code); acsCtl->compileBuffer(1); acsCtl->runBuffer(1); } void DeviceProxy::toLaserMarkPosThreadInSide() { DEVICE_INFO->printDeviceSystemInfo(QString("到打标位运动中...")); acsCtl->stopBuffer(1); char vname[]= ACSCTL_RUNF_V; acsCtl->setGlobalInt(vname,0); MAxisABSMoveCode mAxisABSMoveCode; RS_SETTINGS->beginGroup("device/ZAAxisSafe"); double ZAAxisSafePos = RS_SETTINGS->readNumEntry("/pos"); double ZAAxisToSafePosVel = RS_SETTINGS->readNumEntry("/vel"); RS_SETTINGS->endGroup(); mAxisABSMoveCode.setZAAxisSafePos(ZAAxisSafePos); mAxisABSMoveCode.setZAAxisToSafePosVel(ZAAxisToSafePosVel); mAxisABSMoveCode.setXAxisIsMove(true); mAxisABSMoveCode.setYAxisIsMove(true); mAxisABSMoveCode.setZAxisIsMove(false); mAxisABSMoveCode.setZAAxisIsMove(true); mAxisABSMoveCode.setZ2AxisIsMove(true); mAxisABSMoveCode.disableZAAxisToSafePos(false); RS_SETTINGS->beginGroup("device/LaserMarkPos"); double XAxisPos = RS_SETTINGS->readNumDEntry("/XAxis"); double YAxisPos = RS_SETTINGS->readNumDEntry("/YAxis"); RS_SETTINGS->endGroup(); RS_SETTINGS->beginGroup("device/LaserMark"); double dsbZ2Offset = RS_SETTINGS->readNumDEntry("/Z2Offset"); RS_SETTINGS->endGroup(); RS_SETTINGS->beginGroup("device/Type"); QString strType = RS_SETTINGS->readEntry("/value"); RS_SETTINGS->endGroup(); int Yoffset; if (strType == "6寸") { Yoffset = INCHES6; } else if (strType == "8寸") { Yoffset = INCHES8; } else { Yoffset = INCHES4; } mAxisABSMoveCode.setXAxisTGPos(XAxisPos + INCHES4 - Yoffset); mAxisABSMoveCode.setYAxisTGPos(YAxisPos); mAxisABSMoveCode.setZAAxisTGPos(ZAAxisSafePos); mAxisABSMoveCode.setZ2AxisTGPos(workpieceHeight - dsbZ2Offset );//这里可能不对,逻辑关系不对 // 加载PTP位置设置 RS_SETTINGS->beginGroup("device/ABSMove/Vel"); double XAxisVel = RS_SETTINGS->readNumDEntry("/XAxis"); double YAxisVel = RS_SETTINGS->readNumDEntry("/YAxis"); double ZAxisVel = RS_SETTINGS->readNumDEntry("/ZAxis"); double ZAAxisVel = RS_SETTINGS->readNumDEntry("/ZAAxis"); RS_SETTINGS->endGroup(); mAxisABSMoveCode.setXAxisVel(XAxisVel); mAxisABSMoveCode.setYAxisVel(YAxisVel); mAxisABSMoveCode.setZAxisVel(ZAxisVel); mAxisABSMoveCode.setZAAxisVel(ZAAxisVel); mAxisABSMoveCode.setZ2AxisVel(5); char *code; QByteArray byCode = mAxisABSMoveCode.getLaserMarkCode().toLatin1(); code = byCode.data(); acsCtl->loadBuffer(1,code); acsCtl->compileBuffer(1); acsCtl->runBuffer(1); } void DeviceProxy::toLaserMarkPosInSide() { DEVICE_INFO->printDeviceSystemInfo(QString("到打标位运动中...")); acsCtl->stopBuffer(1); char vname[]= ACSCTL_RUNF_V; acsCtl->setGlobalInt(vname,0); MAxisABSMoveCode mAxisABSMoveCode; RS_SETTINGS->beginGroup("device/ZAAxisSafe"); double ZAAxisSafePos = RS_SETTINGS->readNumEntry("/pos"); double ZAAxisToSafePosVel = RS_SETTINGS->readNumEntry("/vel"); RS_SETTINGS->endGroup(); mAxisABSMoveCode.setZAAxisSafePos(ZAAxisSafePos); mAxisABSMoveCode.setZAAxisToSafePosVel(ZAAxisToSafePosVel); mAxisABSMoveCode.setXAxisIsMove(true); mAxisABSMoveCode.setYAxisIsMove(true); mAxisABSMoveCode.setZAxisIsMove(false); mAxisABSMoveCode.setZAAxisIsMove(true); mAxisABSMoveCode.setZ2AxisIsMove(true); mAxisABSMoveCode.disableZAAxisToSafePos(false); RS_SETTINGS->beginGroup("device/LaserMarkPos"); double XAxisPos = RS_SETTINGS->readNumDEntry("/XAxis"); double YAxisPos = RS_SETTINGS->readNumDEntry("/YAxis"); RS_SETTINGS->endGroup(); RS_SETTINGS->beginGroup("device/LaserMark"); double dsbZ2Offset = RS_SETTINGS->readNumDEntry("/Z2Offset"); RS_SETTINGS->endGroup(); RS_SETTINGS->beginGroup("device/Type"); QString strType = RS_SETTINGS->readEntry("/value"); RS_SETTINGS->endGroup(); int Yoffset; if (strType == "6寸") { Yoffset = INCHES6; } else if (strType == "8寸") { Yoffset = INCHES8; } else { Yoffset = INCHES4; } mAxisABSMoveCode.setXAxisTGPos(XAxisPos + INCHES4 - Yoffset+LaserMarkOffset_X); mAxisABSMoveCode.setYAxisTGPos(YAxisPos+LaserMarkOffset_Y); mAxisABSMoveCode.setZAAxisTGPos(ZAAxisSafePos); mAxisABSMoveCode.setZ2AxisTGPos(workpieceHeight - dsbZ2Offset );//这里可能不对,逻辑关系不对 lihongchang -2.5 // 加载PTP位置设置 RS_SETTINGS->beginGroup("device/ABSMove/Vel"); double XAxisVel = RS_SETTINGS->readNumDEntry("/XAxis"); double YAxisVel = RS_SETTINGS->readNumDEntry("/YAxis"); double ZAxisVel = RS_SETTINGS->readNumDEntry("/ZAxis"); double ZAAxisVel = RS_SETTINGS->readNumDEntry("/ZAAxis"); RS_SETTINGS->endGroup(); mAxisABSMoveCode.setXAxisVel(XAxisVel); mAxisABSMoveCode.setYAxisVel(YAxisVel); mAxisABSMoveCode.setZAxisVel(ZAxisVel); mAxisABSMoveCode.setZAAxisVel(ZAAxisVel); mAxisABSMoveCode.setZ2AxisVel(5); char *code; QByteArray byCode = mAxisABSMoveCode.getCode().toLatin1(); code = byCode.data(); acsCtl->loadBuffer(1,code); acsCtl->compileBuffer(1); acsCtl->runBuffer(1); } void DeviceProxy::toLaserMarkPos() { if(!devIsReset) { emit exceptSGL(MyException(QString("设备未初始化,未复位,无法执行到打标位。请先复位。"),MY_WARN)); return; } if(!lastTaskIsFinish) { emit exceptSGL(MyException(QString("%1任务执行中,无法执行到打标位。请先停止运动或等待任务结束。").arg(lastTaskName),MY_WARN)); return; } if(bRunning) { emit exceptSGL(MyException(QString("自动运行执行中,请等待运行结束。"),MY_WARN)); return; } try { lastTaskIsFinish=false; lastTaskName="到打标位"; toLaserMarkPosInSide(); //toLaserMarkPosThreadInSide(); connect(this,SIGNAL(CMDRunFinishSGL()),this,SLOT(toLaserMarkPosFHandl())); reqCMDRunFState = true; } catch (MyException mye) { exceptHandl(MyException(QString("到打标位失败。"),mye.getExceptCode())); } } void DeviceProxy::toLaserApTestPos() { if(!devIsReset) { emit exceptSGL(MyException(QString("设备未初始化,未复位,无法执行到功率测量位。请先复位。"),MY_WARN)); return; } if(!lastTaskIsFinish) { emit exceptSGL(MyException(QString("%1任务执行中,无法执行到功率测量位。请先停止运动或等待任务结束。").arg(lastTaskName),MY_WARN)); return; } if(bRunning) { emit exceptSGL(MyException(QString("自动运行执行中,请等待运行结束。"),MY_WARN)); return; } // int ret = UpdateWorkData(0); // if (ret != 0) // { // emit exceptSGL(MyException(QString("测量功率文件打开错误,请检查文件路径"),MY_WARN)); // return; // } try { lastTaskIsFinish=false; lastTaskName="功率测量"; toLaserApTestPosInSide(); // bRunning = true; // emit RunSGL(!bRunning); // step = 2; // StopFindEdgeFlag = false; // MODBUSTCP->stopFlag = false; // checkZaxisAlarmFlag = true; // LaserTestApFlag = true; // StopGonglvCheckFlag = false; connect(this,SIGNAL(CMDRunFinishSGL()),this,SLOT(toLaserApTestPosFHandl())); reqCMDRunFState = true; } catch (MyException mye) { exceptHandl(MyException(QString("功率测量失败。"),mye.getExceptCode())); } } void DeviceProxy::toHeightFindPosInSide() { DEVICE_INFO->printDeviceSystemInfo(QString("到晶锭预测量位运动中...")); acsCtl->stopBuffer(1); char vname[]= ACSCTL_RUNF_V; acsCtl->setGlobalInt(vname,0); MAxisABSMoveCode mAxisABSMoveCode; RS_SETTINGS->beginGroup("device/ZAAxisSafe"); double ZAAxisSafePos = RS_SETTINGS->readNumEntry("/pos"); double ZAAxisToSafePosVel = RS_SETTINGS->readNumEntry("/vel"); RS_SETTINGS->endGroup(); mAxisABSMoveCode.setZAAxisSafePos(ZAAxisSafePos); mAxisABSMoveCode.setZAAxisToSafePosVel(ZAAxisToSafePosVel); mAxisABSMoveCode.setXAxisIsMove(true); mAxisABSMoveCode.setYAxisIsMove(true); mAxisABSMoveCode.setZAxisIsMove(false); mAxisABSMoveCode.setZAAxisIsMove(true); mAxisABSMoveCode.setZ0AxisIsMove(true); mAxisABSMoveCode.disableZAAxisToSafePos(false); RS_SETTINGS->beginGroup("device/HeightFindPos"); double XAxisPos = RS_SETTINGS->readNumDEntry("/XAxis"); double YAxisPos = RS_SETTINGS->readNumDEntry("/YAxis"); RS_SETTINGS->endGroup(); RS_SETTINGS->beginGroup("device/LaserMark"); double dsbZ0Offset = RS_SETTINGS->readNumDEntry("/Z0Offset"); RS_SETTINGS->endGroup(); mAxisABSMoveCode.setXAxisTGPos(XAxisPos); mAxisABSMoveCode.setYAxisTGPos(YAxisPos); mAxisABSMoveCode.setZ0AxisTGPos(0-dsbZ0Offset ); mAxisABSMoveCode.setZAAxisTGPos(workpieceHeight); // 加载PTP位置设置 RS_SETTINGS->beginGroup("device/ABSMove/Vel"); double XAxisVel = RS_SETTINGS->readNumDEntry("/XAxis"); double YAxisVel = RS_SETTINGS->readNumDEntry("/YAxis"); double ZAxisVel = RS_SETTINGS->readNumDEntry("/ZAxis"); double ZAAxisVel = RS_SETTINGS->readNumDEntry("/ZAAxis"); RS_SETTINGS->endGroup(); mAxisABSMoveCode.setXAxisVel(XAxisVel); mAxisABSMoveCode.setYAxisVel(YAxisVel); mAxisABSMoveCode.setZAxisVel(ZAxisVel); mAxisABSMoveCode.setZAAxisVel(ZAAxisVel); mAxisABSMoveCode.setZ0AxisVel(5); char *code; QByteArray byCode = mAxisABSMoveCode.getCode().toLatin1(); code = byCode.data(); acsCtl->loadBuffer(1,code); acsCtl->compileBuffer(1); acsCtl->runBuffer(1); } void DeviceProxy::toEdgeSearchPosInSide() { DEVICE_INFO->printDeviceSystemInfo(QString("到寻边位运动中...")); acsCtl->stopBuffer(1); char vname[]= ACSCTL_RUNF_V; acsCtl->setGlobalInt(vname,0); MAxisABSMoveCode mAxisABSMoveCode; RS_SETTINGS->beginGroup("device/ZAAxisSafe"); double ZAAxisSafePos = RS_SETTINGS->readNumEntry("/pos"); double ZAAxisToSafePosVel = RS_SETTINGS->readNumEntry("/vel"); RS_SETTINGS->endGroup(); mAxisABSMoveCode.setZAAxisSafePos(ZAAxisSafePos); mAxisABSMoveCode.setZAAxisToSafePosVel(ZAAxisToSafePosVel); mAxisABSMoveCode.setXAxisIsMove(true); mAxisABSMoveCode.setYAxisIsMove(true); mAxisABSMoveCode.setZAxisIsMove(false); mAxisABSMoveCode.setZAAxisIsMove(true); mAxisABSMoveCode.disableZAAxisToSafePos(true); RS_SETTINGS->beginGroup("device/RSToZeroPos"); double XAxisPos = RS_SETTINGS->readNumDEntry("/XAxis"); double YAxisPos = RS_SETTINGS->readNumDEntry("/YAxis"); RS_SETTINGS->endGroup(); RS_SETTINGS->beginGroup("device/Type"); QString strType = RS_SETTINGS->readEntry("/value"); RS_SETTINGS->endGroup(); double Yoffset; if (strType == "6寸") { Yoffset = INCHES6-7; } else if (strType == "8寸") { Yoffset = INCHES8-6; } else { Yoffset = INCHES4-7; } RS_SETTINGS->beginGroup("device/Rposition"); double FindEdageOffset = RS_SETTINGS->readNumDEntry("/FindEdageOffset"); RS_SETTINGS->endGroup(); mAxisABSMoveCode.setXAxisTGPos(XAxisPos); mAxisABSMoveCode.setYAxisTGPos(YAxisPos - Yoffset); double ZAAxisPos = workpieceHeight; //-2.5 mAxisABSMoveCode.setZAAxisTGPos(ZAAxisPos); // 加载PTP位置设置 RS_SETTINGS->beginGroup("device/ABSMove/Vel"); double XAxisVel = RS_SETTINGS->readNumDEntry("/XAxis"); double YAxisVel = RS_SETTINGS->readNumDEntry("/YAxis"); double ZAxisVel = RS_SETTINGS->readNumDEntry("/ZAxis"); double ZAAxisVel = RS_SETTINGS->readNumDEntry("/ZAAxis"); RS_SETTINGS->endGroup(); mAxisABSMoveCode.setXAxisVel(XAxisVel); mAxisABSMoveCode.setYAxisVel(YAxisVel); mAxisABSMoveCode.setZAxisVel(ZAxisVel); mAxisABSMoveCode.setZAAxisVel(ZAAxisVel); char *code; QByteArray byCode = mAxisABSMoveCode.getCode().toLatin1(); code = byCode.data(); acsCtl->loadBuffer(1,code); acsCtl->compileBuffer(1); acsCtl->runBuffer(1); } void DeviceProxy::toEdgeSearchPosThreadInSide() { DEVICE_INFO->printDeviceSystemInfo(QString("到寻边位运动中...")); acsCtl->stopBuffer(1); char vname[]= ACSCTL_RUNF_V; acsCtl->setGlobalInt(vname,0); MAxisABSMoveCode mAxisABSMoveCode; RS_SETTINGS->beginGroup("device/ZAAxisSafe"); double ZAAxisSafePos = RS_SETTINGS->readNumEntry("/pos"); double ZAAxisToSafePosVel = RS_SETTINGS->readNumEntry("/vel"); RS_SETTINGS->endGroup(); mAxisABSMoveCode.setZAAxisSafePos(ZAAxisSafePos); mAxisABSMoveCode.setZAAxisToSafePosVel(ZAAxisToSafePosVel); mAxisABSMoveCode.setXAxisIsMove(true); mAxisABSMoveCode.setYAxisIsMove(true); mAxisABSMoveCode.setZAxisIsMove(false); mAxisABSMoveCode.setZAAxisIsMove(true); mAxisABSMoveCode.disableZAAxisToSafePos(true); RS_SETTINGS->beginGroup("device/EdgeSearchPos"); double XAxisPos = RS_SETTINGS->readNumDEntry("/XAxis"); double YAxisPos = RS_SETTINGS->readNumDEntry("/YAxis"); RS_SETTINGS->endGroup(); RS_SETTINGS->beginGroup("device/Type"); QString strType = RS_SETTINGS->readEntry("/value"); RS_SETTINGS->endGroup(); int Yoffset; if (strType == "6寸") { Yoffset = INCHES6+3; } else if (strType == "8寸") { Yoffset = INCHES8; } else { Yoffset = INCHES4; } RS_SETTINGS->beginGroup("device/Rposition"); double FindEdageOffset = RS_SETTINGS->readNumDEntry("/FindEdageOffset"); RS_SETTINGS->endGroup(); mAxisABSMoveCode.setXAxisTGPos(XAxisPos); mAxisABSMoveCode.setYAxisTGPos(YAxisPos - Yoffset + FindEdageOffset); double ZAAxisPos = workpieceHeight; mAxisABSMoveCode.setZAAxisTGPos(ZAAxisPos); // 加载PTP位置设置 RS_SETTINGS->beginGroup("device/ABSMove/Vel"); double XAxisVel = RS_SETTINGS->readNumDEntry("/XAxis"); double YAxisVel = RS_SETTINGS->readNumDEntry("/YAxis"); double ZAxisVel = RS_SETTINGS->readNumDEntry("/ZAxis"); double ZAAxisVel = RS_SETTINGS->readNumDEntry("/ZAAxis"); RS_SETTINGS->endGroup(); mAxisABSMoveCode.setXAxisVel(XAxisVel); mAxisABSMoveCode.setYAxisVel(YAxisVel); mAxisABSMoveCode.setZAxisVel(ZAxisVel); mAxisABSMoveCode.setZAAxisVel(ZAAxisVel); char *code; QByteArray byCode = mAxisABSMoveCode.getToCameraCode().toLatin1(); code = byCode.data(); acsCtl->loadBuffer(1,code); acsCtl->compileBuffer(1); acsCtl->runBuffer(1); } void DeviceProxy::toRecordPosInSide() { DEVICE_INFO->printDeviceSystemInfo(QString("到记录位运动中...")); acsCtl->stopBuffer(1); char vname[]= ACSCTL_RUNF_V; acsCtl->setGlobalInt(vname,0); MAxisABSMoveCode mAxisABSMoveCode; RS_SETTINGS->beginGroup("device/ZAAxisSafe"); double ZAAxisSafePos = RS_SETTINGS->readNumEntry("/pos"); double ZAAxisToSafePosVel = RS_SETTINGS->readNumEntry("/vel"); RS_SETTINGS->endGroup(); mAxisABSMoveCode.setZAAxisSafePos(ZAAxisSafePos); mAxisABSMoveCode.setZAAxisToSafePosVel(ZAAxisToSafePosVel); mAxisABSMoveCode.setXAxisIsMove(true); mAxisABSMoveCode.setYAxisIsMove(true); mAxisABSMoveCode.setZAxisIsMove(false); mAxisABSMoveCode.setZAAxisIsMove(true); mAxisABSMoveCode.disableZAAxisToSafePos(false); RS_SETTINGS->beginGroup("device/RecordPos"); double XAxisPos = RS_SETTINGS->readNumDEntry("/XAxis"); double YAxisPos = RS_SETTINGS->readNumDEntry("/YAxis"); double ZAAxisPos = RS_SETTINGS->readNumDEntry("/ZAAxis"); RS_SETTINGS->endGroup(); mAxisABSMoveCode.setXAxisTGPos(XAxisPos); mAxisABSMoveCode.setYAxisTGPos(YAxisPos); mAxisABSMoveCode.setZAAxisTGPos(ZAAxisPos); // 加载PTP位置设置 RS_SETTINGS->beginGroup("device/ABSMove/Vel"); double XAxisVel = RS_SETTINGS->readNumDEntry("/XAxis"); double YAxisVel = RS_SETTINGS->readNumDEntry("/YAxis"); double ZAxisVel = RS_SETTINGS->readNumDEntry("/ZAxis"); double ZAAxisVel = RS_SETTINGS->readNumDEntry("/ZAAxis"); RS_SETTINGS->endGroup(); mAxisABSMoveCode.setXAxisVel(XAxisVel); mAxisABSMoveCode.setYAxisVel(YAxisVel); mAxisABSMoveCode.setZAxisVel(ZAxisVel); mAxisABSMoveCode.setZAAxisVel(ZAAxisVel); char *code; QByteArray byCode = mAxisABSMoveCode.getCode().toLatin1(); code = byCode.data(); acsCtl->loadBuffer(1,code); acsCtl->compileBuffer(1); acsCtl->runBuffer(1); } void DeviceProxy::toCompenTestPosInSide() { DEVICE_INFO->printDeviceSystemInfo(QString("到上料准备位运动中...")); acsCtl->stopBuffer(1); char vname[]= ACSCTL_RUNF_V; acsCtl->setGlobalInt(vname,0); MAxisABSMoveCode mAxisABSMoveCode; RS_SETTINGS->beginGroup("device/ZAAxisSafe"); double ZAAxisSafePos = RS_SETTINGS->readNumEntry("/pos"); double ZAAxisToSafePosVel = RS_SETTINGS->readNumEntry("/vel"); RS_SETTINGS->endGroup(); mAxisABSMoveCode.setZAAxisSafePos(ZAAxisSafePos); mAxisABSMoveCode.setZAAxisToSafePosVel(ZAAxisToSafePosVel); mAxisABSMoveCode.setXAxisIsMove(true); mAxisABSMoveCode.setYAxisIsMove(true); mAxisABSMoveCode.setZAxisIsMove(false); mAxisABSMoveCode.setZAAxisIsMove(true); mAxisABSMoveCode.disableZAAxisToSafePos(false); RS_SETTINGS->beginGroup("device/CompenTestPos"); double XAxisPos = RS_SETTINGS->readNumDEntry("/XAxis"); double YAxisPos = RS_SETTINGS->readNumDEntry("/YAxis"); RS_SETTINGS->endGroup(); mAxisABSMoveCode.setXAxisTGPos(XAxisPos); if (bAutoLoadUnloadFlag == false) mAxisABSMoveCode.setYAxisTGPos(YAxisPos - 400); else mAxisABSMoveCode.setYAxisTGPos(YAxisPos); mAxisABSMoveCode.setZAAxisTGPos(ZAAxisSafePos); // 加载PTP位置设置 RS_SETTINGS->beginGroup("device/ABSMove/Vel"); double XAxisVel = RS_SETTINGS->readNumDEntry("/XAxis"); double YAxisVel = RS_SETTINGS->readNumDEntry("/YAxis"); double ZAxisVel = RS_SETTINGS->readNumDEntry("/ZAxis"); double ZAAxisVel = RS_SETTINGS->readNumDEntry("/ZAAxis"); RS_SETTINGS->endGroup(); mAxisABSMoveCode.setXAxisVel(XAxisVel); mAxisABSMoveCode.setYAxisVel(YAxisVel); mAxisABSMoveCode.setZAxisVel(ZAxisVel); mAxisABSMoveCode.setZAAxisVel(ZAAxisVel); char *code; QByteArray byCode = mAxisABSMoveCode.getCode().toLatin1(); code = byCode.data(); acsCtl->loadBuffer(1,code); acsCtl->compileBuffer(1); acsCtl->runBuffer(1); } void DeviceProxy::toHeightFindPos() { if(!devIsReset) { emit exceptSGL(MyException(QString("设备未初始化,未复位,无法执行到晶锭预测量位。请先复位。"),MY_WARN)); return; } if(!lastTaskIsFinish) { emit exceptSGL(MyException(QString("%1任务执行中,无法执行到晶锭预测量位。请先停止运动或等待任务结束。").arg(lastTaskName),MY_WARN)); return; } if(bRunning) { emit exceptSGL(MyException(QString("自动运行执行中,请等待运行结束。"),MY_WARN)); return; } try { lastTaskIsFinish=false; lastTaskName="电阻测量位"; toHeightFindPosInSide(); connect(this,SIGNAL(CMDRunFinishSGL()),this,SLOT(toHeightFindPosFHandl())); reqCMDRunFState = true; } catch (MyException mye) { exceptHandl(MyException(QString("到测高位失败。"),mye.getExceptCode())); } } void DeviceProxy::toEdgeSearchPos() { if(!devIsReset) { emit exceptSGL(MyException(QString("设备未初始化,未复位,无法执行到寻边位。请先复位。"),MY_WARN)); return; } if(!lastTaskIsFinish) { emit exceptSGL(MyException(QString("%1任务执行中,无法执行到寻边位。请先停止运动或等待任务结束。").arg(lastTaskName),MY_WARN)); return; } if(bRunning) { emit exceptSGL(MyException(QString("自动运行执行中,请等待运行结束。"),MY_WARN)); return; } int axisBuf[4] = {0}; axisBuf[1] = 1; int ret = AxisMoveSafeCheckXY(axisBuf,nullptr,nullptr); if(ret < 0) { emit exceptSGL(MyException(QString("晶碇与Z轴间距太小,不能执行动作。"),MY_WARN)); return; } try { lastTaskIsFinish=false; lastTaskName="到寻边位"; toEdgeSearchPosInSide(); //toEdgeSearchPosThreadInSide(); connect(this,SIGNAL(CMDRunFinishSGL()),this,SLOT(toEdgeSearchPosFHandl())); reqCMDRunFState = true; } catch (MyException mye) { exceptHandl(MyException(QString("到寻边位失败。"),mye.getExceptCode())); } } void DeviceProxy::toCompenTestPos() { if(!devIsReset) { emit exceptSGL(MyException(QString("设备未初始化,未复位,无法执行到上料准备位。请先复位。"),MY_WARN)); return; } if(!lastTaskIsFinish) { emit exceptSGL(MyException(QString("%1任务执行中,无法执行到上料准备位。请先停止运动或等待任务结束。").arg(lastTaskName),MY_WARN)); return; } if(bRunning) { emit exceptSGL(MyException(QString("自动运行执行中,请等待运行结束。"),MY_WARN)); return; } try { lastTaskIsFinish=false; lastTaskName="到上料准备位"; toCompenTestPosInSide(); connect(this,SIGNAL(CMDRunFinishSGL()),this,SLOT(toCompenTestPosFHandl())); reqCMDRunFState = true; } catch (MyException mye) { exceptHandl(MyException(QString("到上料准备位失败。"),mye.getExceptCode())); } } void DeviceProxy::toRecordPos() { if(!devIsReset) { emit exceptSGL(MyException(QString("设备未初始化,未复位,无法执行到记录位。请先复位。"),MY_WARN)); return; } if(!lastTaskIsFinish) { emit exceptSGL(MyException(QString("%1任务执行中,无法执行到到记录位。请先停止运动或等待任务结束。").arg(lastTaskName),MY_WARN)); return; } if(bRunning) { emit exceptSGL(MyException(QString("自动运行执行中,请等待运行结束。"),MY_WARN)); return; } if(bRunning) { emit exceptSGL(MyException(QString("自动运行执行中,请等待运行结束。"),MY_WARN)); return; } RS_SETTINGS->beginGroup("device/RecordPos"); double ZAAxisPos = RS_SETTINGS->readNumDEntry("/ZAAxis"); RS_SETTINGS->endGroup(); if (ZAAxisPos < workpieceHeight) { emit exceptSGL(MyException(QString("目标Z轴位置,低于安全距离。"),MY_WARN)); return; } try { lastTaskIsFinish=false; lastTaskName="到记录位"; toRecordPosInSide(); connect(this,SIGNAL(CMDRunFinishSGL()),this,SLOT(toRecordPosFHandl())); reqCMDRunFState = true; } catch (MyException mye) { exceptHandl(MyException(QString("到记录位失败。"),mye.getExceptCode())); } } ////////////////////////////////////////////////////////// void CDeviceProxyWorker::doWork_custom() { int hasToBuffer = 0; while(1) { if (mParent->bRunning) { //DEV->ShowSmallAreasSGL(); if (mParent->step >= mParent->fFileContent.count()) { //假锭循环加工 // mParent->step = 0; // continue; mParent->bRunning = false; // mParent->vacuumSuckerCloseInSide(); // mParent->VacuumBreakOpen(); mParent->bRunning = false; emit mParent->RunSGL(!mParent->bRunning); mParent->StepNameSGL(30); emit mParent->StopStateSGL(true); mParent->SuspendFlag = false; mParent->lastTaskIsFinish = true; mParent->reqCMDRunFState = false; DEV->workpieceHeight = DEV->Palletheight + MAXHEIGHT; mParent->step = 0; emit mParent->AutoSmachStateSGL(false); emit mParent->VacuumSuckerOnOrOffStateSGL(true); if (mParent->bUserPower) emit mParent->SmachTypeStateSGL(true); DEVICE_INFO->printDeviceSystemInfo("自动加工完成!"); continue; } QString aLineText=mParent->fFileContent.at(mParent->step); //获取数据区的一行 //一个或多个空格、TAB等分隔符隔开的字符串, 分解为一个StringList QStringList tmpList=aLineText.split(",",QString::SkipEmptyParts);//",",QString::SkipEmptyParts QString StrIsEnable = tmpList.at(3); if (QString(StrIsEnable).toInt() == 0) { mParent->step = mParent->step + 1; continue; } try { mParent->mutex.lock(); if (tmpList.at(0) == "上料") { if (mParent->SuspendFlag) { mParent->mutex.unlock(); Sleep(10); continue; } // if ((MODBUSTCP->PLCSts[0] != 4) || (MODBUSTCP->TransferPLCSts == 1)) // { // emit mParent->AutoExceptSGL(MyException(QString("横移模块状态不满足要求,请确认状态后 点击 是 继续运行,点击 否 直接退出"))); // if (mParent->DataCheckFlag) // { // mParent->mutex.unlock(); // continue; // } // else // throw MyException(QString("上料失败,横移模块未准备好!"),9011); // } { mParent->StepNameSGL(1); mParent->vacuumSuckerOpenInSide(); mParent->VacuumBreakClose(); Sleep(3000); {//检查气压计读数是否符合要求 short value = 0; if (BAROMETER->m_hComm == nullptr) { BAROMETER->getSerialSet("barometer"); bool ret = BAROMETER->OpenComm(); if (!ret) { throw MyException(QString("气压计串口打开失败!"),9020); } } int ret = BAROMETER->GetHeightValue(18,1,&value); if (ret != 0) { throw MyException(QString("气压计读数失败!"),9021); } double tmp = value / 10.0; if (tmp < -30) { throw MyException(QString("请先取走机台晶碇,再上料!"),9030); } } mParent->vacuumSuckerCloseInSide(); mParent->VacuumBreakOpen(); //Sleep(1000); mParent->lastTaskIsFinish = false; mParent->reqCMDRunFState = true; int ret = mParent->ShangProc(); if (ret != 0) { if (ret == -2) { emit mParent->AutoExceptSGL(MyException(QString("RFID读取失败,是否继续加工?"))); if (mParent->DataCheckFlag) { //mParent->step = 2; //mParent->mutex.unlock(); //continue; } else throw MyException(QString("RFID读取失败!"),9011); } else throw MyException(QString("上料通讯失败!"),9010); } else { emit mParent->SETRfidText(MODBUSTCP->RFID); if (strlen(MODBUSTCP->RFID) <= 1) { emit mParent->AutoExceptSGL(MyException(QString("RFID读取失败,是否继续加工?"))); if (mParent->DataCheckFlag) { //mParent->step = 2; //mParent->mutex.unlock(); //continue; } else throw MyException(QString("RFID读取失败!"),9011); } int chicun = MODBUSTCP->RFID[7] - '0'; int setChicun; RS_SETTINGS->beginGroup("device/Type"); QString strType = RS_SETTINGS->readEntry("/value"); RS_SETTINGS->endGroup(); if (strType == "6寸") { setChicun = 6; } else if (strType == "8寸") { setChicun = 8; } else if (strType == "4寸") { setChicun = 4; } else setChicun = 10000; //if (DEV->ReadRfidFlag == 1) { if (chicun != setChicun) { throw MyException(QString("晶碇编号尺寸和加工选择尺寸不一致"),9011); } } if (setChicun == 10000) { throw MyException(QString("M片请手动加工!"),9011); } {//检查气压,如果需要读数失败重新读取功能,程序需要再if语句内增加 小步骤 功能 short value = 0; if (BAROMETER->m_hComm == nullptr) { BAROMETER->getSerialSet("barometer"); bool ret = BAROMETER->OpenComm(); if (!ret) { throw MyException(QString("气压计串口打开失败!"),9020); } } int ret = BAROMETER->GetHeightValue(18,1,&value); if (ret != 0) { // emit mParent->AutoExceptSGL(MyException(QString("气压计读数失败,是否重新检测?"))); // if (mParent->DataCheckFlag) // { // //mParent->step = 2; // mParent->mutex.unlock(); // continue; // } // else throw MyException(QString("气压计读数失败!"),9021); } double tmp = value / 10.0; if (tmp > -60) { // emit mParent->VacuumSuckerOnOrOffStateSGL(true); // emit mParent->AutoExceptSGL(MyException(QString("气压计压力不符合要求,是否重新检测?"))); // if (mParent->DataCheckFlag) // { // //mParent->step = 2; // mParent->mutex.unlock(); // continue; // } // else throw MyException(QString("气压计压力不符合要求!"),9022); } } } mParent->lastTaskIsFinish = true; mParent->reqCMDRunFState = false; mParent->step = mParent->step + 1; } } else if (tmpList.at(0) == "下料") { if (mParent->SuspendFlag) { mParent->mutex.unlock(); Sleep(10); continue; } // if ((MODBUSTCP->PLCSts[0] != 4) || (MODBUSTCP->TransferPLCSts == 2)) // { // emit mParent->AutoExceptSGL(MyException(QString("横移模块状态不满足要求,请确认状态后 点击 是 继续运行,点击 否 直接退出"))); // if (mParent->DataCheckFlag) // { // mParent->mutex.unlock(); // continue; // } // else // throw MyException(QString("下料失败,横移模块未准备好!"),9011); // } mParent->StepNameSGL(27); mParent->lastTaskIsFinish = false; mParent->reqCMDRunFState = true; int ret = mParent->XiaProc(); if (ret != 0) { throw MyException(QString("下料通讯失败!"),9010); } mParent->lastTaskIsFinish = true; mParent->reqCMDRunFState = false; DEV->workpieceHeight = DEV->Palletheight + MAXHEIGHT; mParent->step = mParent->step+1; } else if (tmpList.at(0) == "功率测量") { if (mParent->SuspendFlag) { mParent->mutex.unlock(); continue; } if (hasToBuffer == 0) { mParent->StepNameSGL(2); mParent->lastTaskIsFinish = false; mParent->toLaserApTestPosInSide(); mParent->reqCMDRunFState = true; hasToBuffer = 1; emit mParent->VacuumSuckerOnOrOffStateSGL(false); } else { //检测buffer是否执行完毕? if (!mParent->reqCMDRunFState)//buffer是否执行完毕 { { //检测功率 { float valueMath = 0; float valueLight = 0; int ret; mParent->StepNameSGL(3); mParent->LaserApValueP1 = 0; ret = IPGLASER->LaserClose(); if (ret < 0) { if (!DEV->StopGonglvCheckFlag) throw MyException("激光器关闭失败。",acsc_GetLastError()); } int paramnum = tmpList.at(1).toInt(); if (paramnum < 1) throw MyException("功率检测参数无效!"); ret = IPGLASER->SetParam(paramnum); if (ret < 0) { if (!DEV->StopGonglvCheckFlag) throw MyException("激光器设置参数失败。",acsc_GetLastError()); } DEV->AirValveClose(); int delayCount = 0; while(1) { Sleep(2); if ( DEV->StopGonglvCheckFlag) { break; } delayCount++; if (delayCount >= 1000) break; } if ( DEV->StopGonglvCheckFlag) { break; } if (delayCount < 1000) break; if (!DEV->airValveDiCloseSts) { if (!DEV->StopGonglvCheckFlag) throw MyException(QString("整形片位置错误!"),9030); } ret = IPGLASER->LaserOpen(); if (ret < 0) { if (!DEV->StopGonglvCheckFlag) throw MyException("激光器打开失败。",acsc_GetLastError()); } DEV->laserOpenInSide(); delayCount = 0; while(1) { Sleep(15); if (DEV->StopGonglvCheckFlag) { break; } delayCount++; if (delayCount >= 1000) break; } if ( DEV->StopGonglvCheckFlag) { break; } if (delayCount < 1000) break; if (POWERMETERMACH->m_hComm == nullptr) { POWERMETERMACH->getSerialSet("jiagonggonglvji"); bool ret = POWERMETERMACH->OpenComm(); if (!ret) { DEV->laserClose(); if (!DEV->StopGonglvCheckFlag) throw MyException(QString("加工功率计串口打开失败!"),9030); } } ret = POWERMETERMACH->GetValue(&valueMath); if (ret != 0) { DEV->laserClose(); if (!DEV->StopGonglvCheckFlag) throw MyException(QString("加工功率计读数失败!"),9031); } //y = 4.6475* x + 0.0103 if (POWERMETERLIGHT->m_hComm == nullptr) { POWERMETERLIGHT->getSerialSet("guanglugonglvji"); bool ret = POWERMETERLIGHT->OpenComm(); if (!ret) { DEV->laserClose(); if (!DEV->StopGonglvCheckFlag) throw MyException(QString("光路功率计串口打开失败!"),9032); } } valueLight = 0; ret = POWERMETERLIGHT->GetValue(&valueLight); if (ret != 0) { DEV->laserClose(); if (!DEV->StopGonglvCheckFlag) throw MyException(QString("光路功率计读数失败!"),9033); } mParent->LaserApValueP1 = valueLight; if ((valueLight >0) && (valueMath > 0.005)) { //float tmpValue; //tmpValue = valueLight * 4.7567 - 0.0099; //tmpValue = valueLight * 4.9042 - 0.0381; //tmpValue = valueLight * 4.8267 - 0.0099; double tmpAp = IPGLASER->dstPower1; double piancha = fabs((tmpAp - valueMath*1000) / tmpAp * 100); if (piancha > 10) { { DEV->laserClose(); if (!DEV->StopGonglvCheckFlag) throw MyException(QString("光路异常,请检查光路!"),9034); } } else { if (mParent->LaserTestApFlag) { QString strInfo = QString("光路检测偏差 (%1%)").arg(piancha); emit mParent->AutoExceptSGL(MyException(strInfo)); } } } else { { DEV->laserClose(); if (!DEV->StopGonglvCheckFlag) throw MyException(QString("激光器未出光,请检查激光器!"),9034); } } DEV->laserClose(); } } mParent->step = mParent->step + 1; hasToBuffer = 0; } } } else if (tmpList.at(0) == "对零") { if (mParent->SuspendFlag) { mParent->mutex.unlock(); Sleep(10); continue; } if (hasToBuffer == 0) { mParent->StepNameSGL(4); mParent->lastTaskIsFinish = false; mParent->toRSToZeroPosInSide(); mParent->compCloseInSide(); mParent->reqCMDRunFState = true; hasToBuffer = 1; } else if (hasToBuffer == 1) { if (!mParent->reqCMDRunFState)//buffer是否执行完毕 { mParent->StepNameSGL(5); Sleep(1000); mParent->lastTaskIsFinish = false; mParent->RSToZeroInSide(); mParent->reqCMDRunFState = true; hasToBuffer = 2; } } else if (hasToBuffer == 2) { if (!mParent->reqCMDRunFState)//buffer是否执行完毕 { mParent->step = mParent->step + 1; mParent->workpieceHeight = mParent->ZAAxisCtPos; hasToBuffer = 0; //continue; } } } else if (tmpList.at(0) == "寻边") { if (mParent->SuspendFlag) { mParent->mutex.unlock(); continue; } { if (hasToBuffer == 0) { mParent->StepNameSGL(6); mParent->lastTaskIsFinish = false; mParent->toEdgeSearchPosInSide(); mParent->reqCMDRunFState = true; hasToBuffer = 1; } else if (hasToBuffer == 1) { //检测buffer是否执行完毕? if (!mParent->reqCMDRunFState)//buffer是否执行完毕 { mParent->StepNameSGL(7); int ret; RS_SETTINGS->beginGroup("device/Type"); QString strType = RS_SETTINGS->readEntry("/value"); RS_SETTINGS->endGroup(); if (strType == "6寸") { ret = DEV->FindEdgeThread_6(); } else { ret = DEV->FindEdgeThread(); } if (DEV->StopFindEdgeFlag) { throw MyException(QString("晶碇寻边失败!"),9070); } #if (JIADINGJIAGONG != 1) if (ret != 0) //lihongchang jia { emit mParent->AutoExceptSGL(MyException(QString("晶碇寻边失败,是否重新检测?"))); if (mParent->DataCheckFlag) { //mParent->step = 3; mParent->mutex.unlock(); continue; } else throw MyException(QString("晶碇寻边失败!"),9070); } else #endif { hasToBuffer = 0; mParent->step = mParent->step + 1; } } } } } else if (tmpList.at(0) == "扫描") { if (mParent->SuspendFlag) { mParent->mutex.unlock(); Sleep(10); continue; } { if (hasToBuffer == 0) { mParent->StepNameSGL(10); { short value = 0; if (BAROMETER->m_hComm == nullptr) { BAROMETER->getSerialSet("barometer"); bool ret = BAROMETER->OpenComm(); if (!ret) { emit mParent->AutoExceptSGL(MyException(QString("气压计串口打开失败!是否重新检测?"))); if (mParent->DataCheckFlag) { mParent->mutex.unlock(); continue; } else { // if (mParent->pLaserMark != nullptr) // mParent->pLaserMark->Abort(); mParent->StepNameSGL(30); emit mParent->StopStateSGL(true); mParent->SuspendFlag = false; //mParent->laserClose(); mParent->lastTaskIsFinish = true; mParent->reqCMDRunFState = false; mParent->step = 0; mParent->bRunning = false; emit mParent->RunSGL(!mParent->bRunning); emit mParent->AutoSmachStateSGL(false); emit mParent->VacuumSuckerOnOrOffStateSGL(true); if (mParent->bUserPower) emit mParent->SmachTypeStateSGL(true); mParent->mutex.unlock(); continue; } } } int ret_BAROMETER = -1; for (int i=0;i<5;i++) { ret_BAROMETER = BAROMETER->GetHeightValue(18,1,&value); if (ret_BAROMETER == 0) break; else Sleep(100); } if (ret_BAROMETER != 0) { emit mParent->AutoExceptSGL(MyException(QString("气压计读数失败!是否重新检测?"))); if (mParent->DataCheckFlag) { mParent->mutex.unlock(); continue; } else { // if (mParent->pLaserMark != nullptr) // mParent->pLaserMark->Abort(); mParent->StepNameSGL(30); emit mParent->StopStateSGL(true); mParent->SuspendFlag = false; //mParent->laserClose(); mParent->lastTaskIsFinish = true; mParent->reqCMDRunFState = false; mParent->step = 0; mParent->bRunning = false; emit mParent->RunSGL(!mParent->bRunning); emit mParent->AutoSmachStateSGL(false); emit mParent->VacuumSuckerOnOrOffStateSGL(true); if (mParent->bUserPower) emit mParent->SmachTypeStateSGL(true); mParent->mutex.unlock(); continue; } } double tmp = value / 10.0; if (tmp > -10) { emit mParent->AutoExceptSGL(MyException(QString("真空压力值太小!是否重新检测?"))); if (mParent->DataCheckFlag) { mParent->mutex.unlock(); continue; } else { // if (mParent->pLaserMark != nullptr) // mParent->pLaserMark->Abort(); mParent->StepNameSGL(30); emit mParent->StopStateSGL(true); mParent->SuspendFlag = false; //mParent->laserClose(); mParent->lastTaskIsFinish = true; mParent->reqCMDRunFState = false; mParent->step = 0; mParent->bRunning = false; emit mParent->RunSGL(!mParent->bRunning); emit mParent->AutoSmachStateSGL(false); emit mParent->VacuumSuckerOnOrOffStateSGL(true); if (mParent->bUserPower) emit mParent->SmachTypeStateSGL(true); mParent->mutex.unlock(); continue; } } } mParent->lastTaskIsFinish = false; mParent->toSScanStartPosInSide(); mParent->reqCMDRunFState = true; hasToBuffer = 1; } else if (hasToBuffer == 1) { //检测buffer是否执行完毕? if (!mParent->reqCMDRunFState)//buffer是否执行完毕 { mParent->lastTaskIsFinish = false; mParent->compSScanInSide(); mParent->reqCMDRunFState = true; hasToBuffer = 2; } } else if (hasToBuffer == 2) { //检测buffer是否执行完毕? if (!mParent->reqCMDRunFState)//buffer是否执行完毕 { if (JIADINGJIAGONG != 1) { //mParent->lastTaskIsFinish = false; mParent->readCompSScanData(); mParent->buildLookupTable(); mParent->saveLookupTable(); QVector>().swap(mParent->lookupTable); mParent->buildLookupTable_lhc(); //mParent->saveLookupTable_lhc(); mParent->SScanDataCheck(); mParent->lookupTableHeadEndDataHandl(); //mParent->saveLookupTable_lhc(); mParent->lookupTableHeadEndDataHandl_lhc2(); mParent->saveLookupTable_lhc(); try { mParent->SScanDataCheck_lhc(); } catch (MyException mye) { emit mParent->AutoExceptSGL(MyException(QString("补偿面扫描数据校验失败,是否继续加工?"))); if (mParent->DataCheckFlag) ; else { // if (mParent->pLaserMark != nullptr) // mParent->pLaserMark->Abort(); mParent->StepNameSGL(30); emit mParent->StopStateSGL(true); mParent->SuspendFlag = false; //mParent->laserClose(); mParent->lastTaskIsFinish = true; mParent->reqCMDRunFState = false; mParent->step = 0; mParent->bRunning = false; emit mParent->RunSGL(!mParent->bRunning); emit mParent->AutoSmachStateSGL(false); emit mParent->VacuumSuckerOnOrOffStateSGL(true); if (mParent->bUserPower) emit mParent->SmachTypeStateSGL(true); mParent->mutex.unlock(); continue; } } } if (JIADINGJIAGONG != 1) { mParent->MHCompOpenInSide(); //lihongchang 3处,b补偿 、加工开激光、寻边 emit mParent->MHCompOpenFSGL(); DEV->devPlaneScanCompState = 1; } mParent->step = mParent->step + 1; hasToBuffer = 0; } } } } else if (tmpList.at(0) == "打标") { if (mParent->SuspendFlag) { mParent->mutex.unlock(); Sleep(10); continue; } if (hasToBuffer == 0) { mParent->StepNameSGL(22); mParent->lastTaskIsFinish = false; //DEV->devLaserCheck = true; mParent->toLaserMarkPosThreadInSide(); mParent->acsCtl->RToPointPos(DAXIS,180-PIANYIJIAODU+LASERMARKJIAODU);//90度,值不知道 Sleep(10); mParent->reqCMDRunFState = true; hasToBuffer = 1; } else if (hasToBuffer == 1) { if (!mParent->reqCMDRunFState)//buffer是否执行完毕 { mParent->StepNameSGL(23); if (mParent->pLaserMark != nullptr) { if (strlen(MODBUSTCP->RFID) > 1) { QString str;//MODBUSTCP->RFID mParent->FanOpen(); Sleep(200); mParent->pLaserMark->Start(MODBUSTCP->RFID,&str,1,true); char *code; QByteArray byCode = str.toLatin1(); code = byCode.data(); memset(MODBUSTCP->RFID,0,50); strcpy_s(MODBUSTCP->RFID,50,code); //memcpy_s(MODBUSTCP->RFID,50,code,strlen(code)); //MODBUSTCP->RFID[strlen(code)] = 0; MODBUSTCP->ModbusWrite_force(MODBUSTCP->RFID,strlen(MODBUSTCP->RFID)); Sleep(200); bool flag = false; QDateTime startTime= QDateTime::currentDateTime(); while(1) { flag = mParent->pLaserMark->GetMyMarkStatus(); if (flag == false) { break; } QDateTime endTime= QDateTime::currentDateTime(); qint64 intervalTime = startTime.secsTo(endTime); if (intervalTime > 120) break; Sleep(200); } } } Sleep(500); mParent->FanClose(); mParent->step = mParent->step + 1; hasToBuffer = 0; } } } else if (tmpList.at(0) == "加工") { DEVICE_INFO->printDeviceSystemInfo("加工开始..."); //lihongchang if (mParent->SuspendFlag) { mParent->mutex.unlock(); Sleep(10); continue; } { if (hasToBuffer == 0) { mParent->StepNameSGL(13); mParent->lastTaskIsFinish = false; int ret; // ret = IPGLASER->LaserClose(); // if (ret < 0) // { // if (!DEV->StopGonglvCheckFlag) // throw MyException("激光器关闭失败。",acsc_GetLastError()); // } int paramnum = tmpList.at(1).toInt(); if (paramnum < 1) throw MyException("功率检测参数无效!"); double p2k; double p2b; QString str; if (paramnum == 1) { // RS_SETTINGS->beginGroup("device/Rposition"); // p2k = RS_SETTINGS->readNumDEntry("/p2k_t"); // p2b = RS_SETTINGS->readNumDEntry("/p2b_t"); // RS_SETTINGS->endGroup(); if (IPGLASER->PP_Enable == "0") { IPGLASER->Power1 = QString::number(DEV->getPP(DEV->R_detection_pt,true), 'f', 3); mParent->ApPercentage = DEV->getPP(DEV->R_detection_pt,true); DEVICE_INFO->printDeviceSystemInfo(QString("PP_T:%1").arg(mParent->ApPercentage)); } else { IPGLASER->Power1 = IPGLASER->Power1_set; mParent->ApPercentage = IPGLASER->Power1.toDouble(); } //IPGLASER->Power1 = QString::number((DEV->R_detection_pt - p2b)/p2k, 'f', 3); } else { // RS_SETTINGS->beginGroup("device/Rposition"); // p2k = RS_SETTINGS->readNumDEntry("/p2k_s"); // p2b = RS_SETTINGS->readNumDEntry("/p2b_s"); // RS_SETTINGS->endGroup(); //IPGLASER->Power2 = QString::number((DEV->R_detection_ps - p2b)/p2k, 'f', 3); if (IPGLASER->PP_Enable == "0") { IPGLASER->Power2 = QString::number(DEV->getPP(DEV->R_detection_ps,false), 'f', 3); mParent->ApPercentage = DEV->getPP(DEV->R_detection_ps,false); DEVICE_INFO->printDeviceSystemInfo(QString("PP_S:%1").arg(mParent->ApPercentage)); } else { IPGLASER->Power2 = IPGLASER->Power2_set; mParent->ApPercentage = IPGLASER->Power2.toDouble(); } } IPGLASER->SwitchMode(true); ret = IPGLASER->SetParam(paramnum); if (ret < 0) { if (!DEV->StopGonglvCheckFlag) throw MyException("激光器设置参数失败。",acsc_GetLastError()); } paramnum = tmpList.at(2).toInt(); if (paramnum < 1) throw MyException("加工文件参数无效!"); //这里读激光参数,读加工文件参数,做相应配置。 mParent->SMachInSide(paramnum); mParent->reqCMDRunFState = true; //mParent->ApPercentage = (DEV->R_detection_ps - p2b)/p2k; //这个值不对,现在时序号,应该是百分比值 lihongchang mParent->Mach_T_S_flag = paramnum; hasToBuffer = 1; DEV->devLaserCheck = true; } else { //检测buffer是否执行完毕? if (!mParent->reqCMDRunFState)//buffer是否执行完毕 { mParent->step = mParent->step + 1; hasToBuffer = 0; DEV->devLaserCheck = false; mParent->compCloseInSide(); emit mParent->MHCompCloseFSGL(); } } } } else if (tmpList.at(0) == "晶锭预测量") { DEVICE_INFO->printDeviceSystemInfo("晶锭预测量开始..."); if (mParent->SuspendFlag) { mParent->mutex.unlock(); Sleep(10); continue; } mParent->StepNameSGL(34); mParent->lastTaskIsFinish=false; int ret = DEV->ElectricResistanceCheckThread(); mParent->lastTaskIsFinish=true; if (DEV->StopElectricResistanceCheckFlag) { throw MyException(QString("停止按钮按下,晶锭预测量失败!"),9070); } if (ret < 0) { emit mParent->AutoExceptSGL(MyException(QString("晶锭预测量失败,是否重新检测?"))); if (mParent->DataCheckFlag) { //mParent->step = 3; mParent->mutex.unlock(); continue; } else throw MyException(QString("晶锭预测量失败!"),9070); } DEVICE_INFO->printDeviceSystemInfo("晶锭预测量完成"); mParent->step = mParent->step + 1; } else if (tmpList.at(0) == "小面加工") { if (mParent->SuspendFlag) { mParent->mutex.unlock(); Sleep(10); continue; } if (hasToBuffer == 0) { mParent->StepNameSGL(35); RS_SETTINGS->beginGroup("device/RecordPos"); RS_SETTINGS->writeEntry("/ZAxis", DEV->ZAxisCtPos); RS_SETTINGS->writeEntry("/ZAAxis", DEV->ZAAxisCtPos); RS_SETTINGS->endGroup(); mParent->lastTaskIsFinish=false; int ret = DEV->GetGlobalPhotoThread(); if (DEV->StopElectricResistanceCheckFlag) { throw MyException(QString("停止按钮按下,自动拍照失败!"),9070); } emit DEV->ShowSmallAreasSGL(); if (mParent->DataCheckFlag) { int ret = IPGLASER->LaserClose(); if (ret < 0) { if (!DEV->StopGonglvCheckFlag) throw MyException("激光器关闭失败。",acsc_GetLastError()); } // IPGLASER->Power2 = QString::number(DEV->getPP(DEV->R_detection_ps,false), 'f', 3); // mParent->ApPercentage = DEV->getPP(DEV->R_detection_ps,false); if (IPGLASER->PP_Enable == "0") { IPGLASER->Power2 = QString::number(DEV->getPP(DEV->R_detection_ps,false), 'f', 3); mParent->ApPercentage = DEV->getPP(DEV->R_detection_ps,false); } else { IPGLASER->Power2 = IPGLASER->Power2_set; mParent->ApPercentage = IPGLASER->Power2.toDouble(); } ret = IPGLASER->SetParam(2); if (ret < 0) { if (!DEV->StopGonglvCheckFlag) throw MyException("激光器设置参数失败。",acsc_GetLastError()); } IPGLASER->SwitchMode(false); ////////////////// DEV->lastTaskIsFinish=false; DEV->lastTaskName="特定区域加工"; RS_SETTINGS->beginGroup("device/RecordPos"); double ZxisPos = RS_SETTINGS->readNumDEntry("/ZAxis"); double ZAxisPos = RS_SETTINGS->readNumDEntry("/ZAAxis"); RS_SETTINGS->endGroup(); DEV->acsCtl->ABSToPoint(ZAXIS,ZxisPos); DEV->acsCtl->ABSToPoint(ZAAXIS,ZAxisPos); Sleep(20); bool motorstsZ,motorstsZA; while(1) { motorstsZ = DEV->acsCtl->getMotorState(ZAXIS); motorstsZA = DEV->acsCtl->getMotorState(ZAAXIS); if (motorstsZ) break; if (DEV->StopElectricResistanceCheckFlag) { DEV->acsCtl->halt(ZAXIS); DEV->acsCtl->halt(ZAAXIS); break; } Sleep(20); } //mParent->ApPercentage = (DEV->R_detection_ps - p2b)/p2k; //这个值不对,现在时序号,应该是百分比值 lihongchang mParent->Mach_T_S_flag = 2; //DEV->devLaserCheck = true; //小面加工不检测功率 DEV->MachSmallAreaInSide(); DEV->reqCMDRunFState = true; hasToBuffer = 1; } else { mParent->step = mParent->step + 1; hasToBuffer = 0; } } else { if (!mParent->reqCMDRunFState)//buffer是否执行完毕 { mParent->step = mParent->step + 1; //DEV->devLaserCheck = false; hasToBuffer = 0; } } //DEV->ShowSmallAreasSGL(); } else if (tmpList.at(0) == "DD马达") { if (mParent->SuspendFlag) { mParent->mutex.unlock(); Sleep(10); continue; } bool motorsts; double paramnum = tmpList.at(1).toDouble(); mParent->acsCtl->RToPointPos(DAXIS,paramnum);//90度,值不知道 Sleep(10); while(1) { motorsts = mParent->acsCtl->getMotorState(DAXIS); if (motorsts) break; if (mParent->StopFindEdgeFlag) { //acsCtl->stopBuffer(DAXIS); mParent->acsCtl->halt(DAXIS); break; } Sleep(1); } mParent->step = mParent->step + 1; } else { } mParent->mutex.unlock(); } catch (MyException mye) { if (mParent->pLaserMark != nullptr) mParent->pLaserMark->Abort(); mParent->StepNameSGL(30); emit mParent->StopStateSGL(true); mParent->SuspendFlag = false; mParent->laserClose(); //mParent->vacuumSuckerCloseInSide(); //mParent->VacuumBreakOpen(); mParent->lastTaskIsFinish = true; mParent->reqCMDRunFState = false; mParent->step = 0; mParent->bRunning = false; emit mParent->RunSGL(!mParent->bRunning); mParent->mutex.unlock(); emit mParent->AutoSmachStateSGL(false); emit mParent->VacuumSuckerOnOrOffStateSGL(true); if (mParent->bUserPower) emit mParent->SmachTypeStateSGL(true); mParent->exceptHandl_thread(MyException(mye.getExceptInfo() + ",半自动加工失败。",mye.getExceptCode())); } } else { hasToBuffer = 0; } Sleep(5); } } void DeviceProxy::LoadFromCsv(QString fileName) { QFile file(fileName); /*如果以ReadWrite方式打开,不会把所有数据清除,若文件原来的长度为100字节,写操作写入了30字节,那还剩余70字节,并且这70字节和文件打开之前保持一致*/ if(!file.open(QIODevice::ReadOnly)) { qDebug()<<"请正确选择csv文件"; return; } QTextStream * read = new QTextStream(&file); QStringList Data = read->readAll().split("\n",QString::SkipEmptyParts); //每行以\n区分 QVector>().swap(lookupTable); for(int i=0;i lookupTableLine; QStringList strLine = Data.at(i).split(","); //一行中的单元格以,区分 for(int j=0; jhalt(ZAAXIS); acsCtl->halt(ZAXIS); lastTaskIsFinish=true; ZZAPosCheckFlag = false; emit exceptSGL(MyException(QString("碇与轴间距小于安全距离,停止运动!"))); } } } int DeviceProxy::AxisMoveSafeCheckXY(int axisBuf[4],double distPos[4],int moveMode[2]) { RS_SETTINGS->beginGroup("device/ABSMove/Safe"); double X1 = RS_SETTINGS->readNumDEntry("/X1"); double X2 = RS_SETTINGS->readNumDEntry("/X2"); double Y1 = RS_SETTINGS->readNumDEntry("/Y1"); double Y2 = RS_SETTINGS->readNumDEntry("/Y2"); RS_SETTINGS->endGroup(); double safeLen = workpieceHeight - 5; // double XAxisCtPos{0.0}; // double YAxisCtPos{0.0}; // double ZAxisCtPos{0.0}; // double ZAAxisCtPos{0.0}; if (((axisBuf[0] == 1) || (axisBuf[1] == 1)) && ((axisBuf[2] == 0) && (axisBuf[3] == 0))) { if ((ZAAxisCtPos < safeLen) || ((ZAAxisCtPos + ZAxisCtPos - ZWORKPOS) < safeLen)) return -1; else return 0; } else if (((axisBuf[0] == 1) || (axisBuf[1] == 1)) && ((axisBuf[2] == 1) || (axisBuf[3] == 1))) { if ((ZAAxisCtPos < safeLen) || ((ZAAxisCtPos + ZAxisCtPos - ZWORKPOS) < safeLen)) return -1; else { if (((axisBuf[0] == 1) && ((distPos[0] >= X1) && (distPos[0] <= X2) )) && ((axisBuf[1] == 1) && ((distPos[1] >= Y1) && (distPos[1] <= Y2) ))) { if ((axisBuf[2] == 1) && (axisBuf[3] == 0)) { { if ((distPos[2] + ZAAxisCtPos) < safeLen) return -1; else return 0; } } else if ((axisBuf[2] == 0) && (axisBuf[3] == 1)) { { if ((ZAAxisCtPos + distPos[3] + ZAxisCtPos - ZWORKPOS) < safeLen) return -1; else return 0; } } else if ((axisBuf[2] == 1) && (axisBuf[3] == 1)) { if ((distPos[2] < safeLen) || ((distPos[2] + distPos[3] - ZWORKPOS) < safeLen)) return -1; else return 0; } } } } else if (((axisBuf[0] == 0) && (axisBuf[1] == 0)) && ((axisBuf[2] == 1) || (axisBuf[3] == 1))) { if (((XAxisCtPos >= X1) && (XAxisCtPos <= X2)) && ((YAxisCtPos >= Y1) && (YAxisCtPos <= Y2))) { if ((axisBuf[2] == 1) && (axisBuf[3] == 0)) { if (moveMode[0] == 0)//位置模式 { if ((ZAAxisCtPos + distPos[2]) < safeLen) return -1; else return 0; } else { if ((ZAAxisCtPos < safeLen) || ((ZAAxisCtPos + ZAxisCtPos - ZWORKPOS) < safeLen)) return -1; else { ZZAPosCheckFlag = true;//置标记,运动时时刻判断zza return 0; } } } else if ((axisBuf[2] == 0) && (axisBuf[3] == 1)) { if (moveMode[1] == 0)//位置模式 { if ((distPos[3] + ZAxisCtPos) < safeLen) return -1; else return 0; } else { if ((ZAAxisCtPos < safeLen) || ((ZAAxisCtPos + ZAxisCtPos - ZWORKPOS) < safeLen)) return -1; else { ZZAPosCheckFlag = true;//置标记,运动时时刻判断zza return 0; } } } else if ((axisBuf[2] == 1) && (axisBuf[3] == 1)) { if ((distPos[2] < safeLen) || ((distPos[2] + distPos[3] - ZWORKPOS) < safeLen)) return -1; else return 0; } } else return 0; } return 0; } int DeviceProxy::ShangProc(void) { int step = 0; int ret = 0; int result = 0; bool connFlag; //connFlag = MODBUSTCP->ConnPLC(); // if (!connFlag) // { // return -1; // } MODBUSTCP->stopFlag = false; bool hasToBuffer = false; int count = 0; while (1) { // ret = MODBUSTCP->ModbusRead(MODBUSTCP->shangWriteHeartbeatAddr, 1); // if (ret != 0) // count++; // else // count = 0; // if (count >= 3) // { // DEVICE_INFO->printDeviceSystemInfo("分离模块不在线,退出上料过程"); // return -1; // } // Sleep(100); if (MODBUSTCP->PLCSts[0] != 4) { DEVICE_INFO->printDeviceSystemInfo("横移模块不在运行状态,退出上料过程"); return -1; } if (step == 0) { if (!hasToBuffer) { bAutoLoadUnloadFlag = false; //DEV->lastTaskIsFinish = false; toCompenTestPosInSide(); reqCMDRunFState = true; hasToBuffer = true; } else { //检测buffer是否执行完毕? if (!reqCMDRunFState)//buffer是否执行完毕 { step = step + 1; hasToBuffer = false; //continue; } else { //continue; } } } else if (step == 1) { ret = MODBUSTCP->ModbusWrite(0x06,MODBUSTCP->xiaWriteAddr, 0); Sleep(100); ret = MODBUSTCP->ModbusWrite(0x06,MODBUSTCP->shangWriteAddr, 1); if (ret != 0) { result = -1; break; } else step++; } else if (step == 2) { ret = MODBUSTCP->ModbusRead(MODBUSTCP->shangReadAddr,1); if (ret < 0) { result = -1; break; } else { DEVICE_INFO->printDeviceSystemInfo(QString("请求11命令,现返回:%1").arg(QString::number(ret))); if (ret == 11) { int tmp; tmp = MODBUSTCP->ModbusWrite(0x06,MODBUSTCP->shangWriteAddr, 0); if (tmp != 0) { result = -1; break; } else { step++; } } } } else if (step == 3) { if (!hasToBuffer) { bAutoLoadUnloadFlag = true; //DEV->lastTaskIsFinish = false; toCompenTestPosInSide(); reqCMDRunFState = true; hasToBuffer = true; } else { //检测buffer是否执行完毕? if (!reqCMDRunFState)//buffer是否执行完毕 { step = step + 1; hasToBuffer = false; //continue; } } } else if (step == 4) { ret = MODBUSTCP->ModbusWrite(0x06,MODBUSTCP->shangWriteAddr, 2); if (ret != 0) { result = -1; break; } else step++; } else if (step == 5) { ret = MODBUSTCP->ModbusRead(MODBUSTCP->shangReadAddr,1); if (ret < 0) { result = -1; break; } else { if (ret == 12) { int tmp; tmp = MODBUSTCP->ModbusWrite(0x06,MODBUSTCP->shangWriteAddr, 0); if (tmp != 0) { result = -1; break; } else { step++; } } } } else if (step == 6) { if (!hasToBuffer) { //Sleep(2000); vacuumSuckerOpen();//开真空,然后延时等待开真空生效 VacuumBreakClose(); Sleep(2000); bAutoLoadUnloadFlag = false; //DEV->lastTaskIsFinish = false; toCompenTestPosInSide(); reqCMDRunFState = true; hasToBuffer = true; } else { //检测buffer是否执行完毕? if (!reqCMDRunFState)//buffer是否执行完毕 { step = step + 1; hasToBuffer = false; //continue; } } } else if (step == 7) { ret = MODBUSTCP->ModbusWrite(0x06,MODBUSTCP->shangWriteAddr, 3); if (ret != 0) { result = -1; break; } else { step = step + 1;//result = 0; //这里跳出,如果加入读RFID,这里step++ //break; } } else if (step == 8) { ret = MODBUSTCP->ModbusRead(MODBUSTCP->shangReadRFIDAddr,RFIDCount/2 + 1); if (ret < 0) { result = -2; break; } else { MODBUSTCP->RFID[RFIDCount] = 0; emit SETRfidText(MODBUSTCP->RFID); result = 0; break; } } //Sleep(100); //MODBUSTCP->ModbusWrite(0x06,MODBUSTCP->shangWriteHeartbeatAddr, 1); Sleep(500); if (MODBUSTCP->stopFlag) { result = 1; break; } //1、发送命令上料 1 //2、读取夹爪已到位 //3、X轴到位,然后Y轴到位,发送命令已送到位 2 //4、读取已放好信号 //5、开真空,发送已开真空。Y到准备位,发送已取走,开始加工 3 } //MODBUSTCP->CloseConn(); if (result == 0) { DEVICE_INFO->printDeviceSystemInfo("上料完成"); } else { DEVICE_INFO->printDeviceSystemInfo("上料失败"); } return result; } int DeviceProxy::XiaProc(void) { int step = 0; int ret = 0; int result = 0; // bool connFlag; // connFlag = MODBUSTCP->ConnPLC(); // if (!connFlag) // { // return -1; // } MODBUSTCP->stopFlag = false; bool hasToBuffer = false; //1、发送命令下料 //2、读取夹爪已到位 //3、X轴到位,然后Y轴到位,发送命令已送到位 //4、读取夹爪已夹紧信号 //5、开破真空,延时,Y轴到准备位,发送Y轴已离开 int count = 0; while (1) { // ret = MODBUSTCP->ModbusRead(MODBUSTCP->shangWriteHeartbeatAddr, 1); // if (ret != 0) // count++; // else // count = 0; // if (count >= 3) // { // DEVICE_INFO->printDeviceSystemInfo("分离模块不在线,退出下料过程"); // return -1; // } // Sleep(100); if (MODBUSTCP->PLCSts[0] != 4) { DEVICE_INFO->printDeviceSystemInfo("横移模块不在运行状态,退出下料过程"); return -1; } if (step == 0) { if (!hasToBuffer) { bAutoLoadUnloadFlag = false; //DEV->lastTaskIsFinish = false; toCompenTestPosInSide(); reqCMDRunFState = true; hasToBuffer = true; } else { //检测buffer是否执行完毕? if (!DEV->reqCMDRunFState)//buffer是否执行完毕 { step = step + 1; hasToBuffer = false; //continue; } } } else if (step == 1) { ret = MODBUSTCP->ModbusWrite(0x06,MODBUSTCP->shangWriteAddr, 0); Sleep(100); ret = MODBUSTCP->ModbusWrite(0x06,MODBUSTCP->xiaWriteAddr, 21); if (ret != 0) { result = -1; break; } else step++; } else if (step == 2) { ret = MODBUSTCP->ModbusRead(MODBUSTCP->xiaReadAddr,1); if (ret < 0) { result = -1; break; } else { //QString str; //str = QString("请求31命令,现返回:%1").arg(QString::number(ret)); DEVICE_INFO->printDeviceSystemInfo(QString("请求31命令,现返回:%1").arg(QString::number(ret))); if (ret == 31) { int tmp; tmp = MODBUSTCP->ModbusWrite(0x06,MODBUSTCP->xiaWriteAddr, 0); if (tmp != 0) { result = -1; break; } else { step++; } } } } else if (step == 3) { if (!hasToBuffer) { bAutoLoadUnloadFlag = true; toCompenTestPosInSide(); reqCMDRunFState = true; hasToBuffer = true; } else { //检测buffer是否执行完毕? if (!reqCMDRunFState)//buffer是否执行完毕 { step = step + 1; hasToBuffer = false; //continue; } } } else if (step == 4) { vacuumSuckerClose();//关真空,然后延时等待开真空生效 VacuumBreakOpen(); Sleep(2000); ret = MODBUSTCP->ModbusWrite(0x06,MODBUSTCP->xiaWriteAddr, 22); if (ret != 0) { result = -1; break; } else step++; } else if (step == 5) { ret = MODBUSTCP->ModbusRead(MODBUSTCP->xiaReadAddr,1); if (ret < 0) { result = -1; break; } else { if (ret == 32) { int tmp; tmp = MODBUSTCP->ModbusWrite(0x06,MODBUSTCP->xiaWriteAddr, 0); if (tmp != 0) { result = -1; break; } else { step++; } } } } else if (step == 6) { if (!hasToBuffer) { bAutoLoadUnloadFlag = false; //DEV->lastTaskIsFinish = false; toCompenTestPosInSide(); reqCMDRunFState = true; hasToBuffer = true; } else { //检测buffer是否执行完毕? if (!reqCMDRunFState)//buffer是否执行完毕 { step = step + 1; hasToBuffer = false; //continue; } } } else if (step == 7) { ret = MODBUSTCP->ModbusWrite(0x06,MODBUSTCP->xiaWriteAddr, 23); if (ret != 0) { result = -1; break; } else { step = step + 1;//result = 0; //这里跳出,如果加入写高度,这里step++ break; } } else if (step == 8) { ret = MODBUSTCP->ModbusWrite(0x06,MODBUSTCP->xiaWriteHeightAddr,(unsigned short)(workpieceHeight - Palletheight) * 100); if (ret < 0) { result = -1; break; } else { result = 0; break; } } //DEV->workpieceHeight = DEV->Palletheight + MAXHEIGHT; // ret = MODBUSTCP->ModbusWrite(0x06,MODBUSTCP->xiaWriteHeightAddr,workpieceHeight - Palletheight); // if (ret < 0) // { // result = -1; // break; // } // else // { // result = 0; // break; // } // Sleep(100); // MODBUSTCP->ModbusWrite(0x06,MODBUSTCP->shangWriteHeartbeatAddr, 1); Sleep(500); if (MODBUSTCP->stopFlag) { result = 1; break; } } //MODBUSTCP->CloseConn(); if (result == 0) { DEVICE_INFO->printDeviceSystemInfo("下料完成"); } else { DEVICE_INFO->printDeviceSystemInfo("下料失败"); } return result; } int DeviceProxy::UpdateWorkData() { QString ModeName; QString aFileName; //if (flag == 1) { RS_SETTINGS->beginGroup("device/WorkFile"); //?path读不到 ModeName = RS_SETTINGS->readEntry("/workfilename"); RS_SETTINGS->endGroup(); } // else // aFileName = ".\\WorkFile\\PowerDetection.WI"; if (ModeName.isEmpty()) return -1; //如果未选择文件,退出 ModeName = "/" + ModeName; RS_SETTINGS->beginGroup("device/WorkFile"); //?path读不到 aFileName = RS_SETTINGS->readEntry(ModeName); RS_SETTINGS->endGroup(); QFile aFile(aFileName); //以文件方式读出 if (aFile.open(QIODevice::ReadOnly)) //以只读文本方式打开文件 { // QTextStream aStream(&aFile); //用文本流读取文件 // DEV->fFileContent.clear(); // while (!aStream.atEnd()) // { // QString str=aStream.readLine();//读取文件的一行 // DEV->fFileContent.append(str); //添加到 StringList // } // aFile.close();//关闭文件 QString lineStr; QTextStream aStream(&aFile); //用文本流读取文件 while (!aStream.atEnd()) { lineStr += aStream.readLine(); } aFile.close();//关闭文件 std::string cstr; cstr = std::string((const char *)lineStr.toLocal8Bit()); using base64 = cppcodec::base64_rfc4648; std::vector decoded = base64::decode(cstr); std::string deStr(decoded.begin(), decoded.end()); QString qstring; qstring = QString(QString::fromLocal8Bit(deStr.c_str())); fFileContent = qstring.split("\n"); fFileContent.removeAll(""); aFile.close();//关闭文件 } else return -1; return 0; } int DeviceProxy::deCode_file(QString strFileName) { QFile f(strFileName); if(!f.open(QIODevice::ReadOnly | QIODevice::Text)) { return -1; } QTextStream txtInput(&f); QString lineStr; while(!txtInput.atEnd()) { lineStr += txtInput.readLine(); } f.close(); std::string cstr; cstr = std::string((const char *)lineStr.toLocal8Bit()); using base64 = cppcodec::base64_rfc4648; std::vector decoded = base64::decode(cstr); std::string deStr(decoded.begin(), decoded.end()); deCodeString = QString(QString::fromLocal8Bit(deStr.c_str())); return 0; } //ZA安全高度增加2.5、托盘高度增加2.5、功率测量位高2.5、z1轴回零偏差设置-2.5 // //激光参数设置可选择参数组,整形片一个输出控制,功率检测后,真空吸盘按钮未启用.PID偏差,显示正负