diff --git a/HSI_HexagonMI_EF3/HSI.cpp b/HSI_HexagonMI_EF3/HSI.cpp index f401e15..6fc61a9 100644 --- a/HSI_HexagonMI_EF3/HSI.cpp +++ b/HSI_HexagonMI_EF3/HSI.cpp @@ -15,18 +15,18 @@ static HWND g_hWnd = nullptr; static bool g_bOfflineOnly = false; //////////////////////////////////////////////////////////////////////////////////////////////////// -// ˵ -// V0.1 2022/10/10 +// 开发说明 +//初版 V0.1 2022/10/10 //--------------------------------------- -//1 Metus躯14Ƿؼң˶ʼ汾JOG˶˶ָλõȣdll +//1、剥离 Metus初步所需函数(14个函数,包含是否回家,运动初始化,版本,JOG运动,运动到指定位置等)并生成dll // // // V0.1.10 2024/02/26 //--------------------------------------- -//1ʵƽ̨ ᶨ壬޸Ĵ +//1、根据实际平台 电气层面轴定义,修改代码 // // -// Ҽ +//轴名 电气层轴 左极限 右极限 //X 1 - 30 730 //Y 0 - 10 1000 //Z 8 - 280 5 @@ -42,8 +42,8 @@ static bool g_bOfflineOnly = false; //=========================================================================== HSI_API HSI_STATUS WINAPI HSI_GET_INTERFACE_VERSION(UINT& APIVersionMajor, UINT& APIVersionMinor) { - APIVersionMajor = HSI_APIVersionMajor; //HSI.dll 汾 - APIVersionMinor = HSI_APIVersionMinor; //HSI.dll С汾 + APIVersionMajor = HSI_APIVersionMajor; //HSI.dll 主版本号 + APIVersionMinor = HSI_APIVersionMinor; //HSI.dll 小版本号 return HSI_STATUS_NORMAL; } @@ -57,7 +57,7 @@ HSI_API HSI_STATUS WINAPI HSI_STARTUP(HWND _hWnd, bool _bOfflineOnly) } if (g_pHSI_Sevenocean_EF3) { - g_pHSI_Sevenocean_EF3->Startup(_hWnd, _bOfflineOnly); //ʼEF3 + g_pHSI_Sevenocean_EF3->Startup(_hWnd, _bOfflineOnly); //初始化EF3 } else { @@ -68,7 +68,7 @@ HSI_API HSI_STATUS WINAPI HSI_STARTUP(HWND _hWnd, bool _bOfflineOnly) return rStatus; } -//==========================ȡϢ3EF3================================================= +//==========================获取机器控制器信息,3代表EF3================================================= HSI_API HSI_STATUS WINAPI HSI_GET_MACHINE_INFO(int& _NumMachineTypes) { auto rStatus = HSI_STATUS_NORMAL; @@ -89,7 +89,7 @@ HSI_API HSI_STATUS WINAPI HSI_SET_EVENT_CALLBACK(pEventCallback _pCallback) auto rStatus = HSI_STATUS_NORMAL; if (g_pHSI_Sevenocean_EF3) { - rStatus = g_pHSI_Sevenocean_EF3->SetEventCallback(_pCallback); //¼ + rStatus = g_pHSI_Sevenocean_EF3->SetEventCallback(_pCallback); //设置事件 } else { @@ -112,7 +112,7 @@ HSI_API HSI_STATUS WINAPI HSI_SHUTDOWM() delete g_pLogger2; g_pLogger2 = nullptr; } - //if (g_pHSI_Illumination) //ι + //if (g_pHSI_Illumination) //屏蔽光照 //{ // rStatus = g_pHSI_Illumination->Shutdown(); // delete g_pHSI_Illumination; @@ -120,11 +120,11 @@ HSI_API HSI_STATUS WINAPI HSI_SHUTDOWM() //} if (g_pHSI_Motion) { - rStatus = g_pHSI_Motion->Shutdown(); //˶ֹ + rStatus = g_pHSI_Motion->Shutdown(); //运动终止 delete g_pHSI_Motion; g_pHSI_Motion = nullptr; } - //if (g_pHSI_JoyStick) //ҡ + //if (g_pHSI_JoyStick) //屏蔽摇杆 //{ // g_pHSI_JoyStick->SuspendJoyStickThread(); // delete g_pHSI_JoyStick; @@ -132,7 +132,7 @@ HSI_API HSI_STATUS WINAPI HSI_SHUTDOWM() //} if (g_pHSI_Sevenocean_EF3) { - g_pHSI_Sevenocean_EF3->Shutdown(); //EF3ɾ + g_pHSI_Sevenocean_EF3->Shutdown(); //EF3对象删除 delete g_pHSI_Sevenocean_EF3; g_pHSI_Sevenocean_EF3 = nullptr; } @@ -143,11 +143,11 @@ HSI_API HSI_STATUS WINAPI HSI_SHUTDOWM() #pragma endregion //////////////////////////////////////////////////////////////////////////////// -// MOTION API ˶API +// MOTION API 运动相关API /////////////////////////////////////////////////////////////////////////////// #pragma region Motion API -#pragma region һ׶ʵֵAPI +#pragma region 第一阶段实现的API功能 //=========================================================================== HSI_API HSI_STATUS WINAPI HSI_MOTION_STARTUP(bool bHome) { @@ -165,7 +165,7 @@ HSI_API HSI_STATUS WINAPI HSI_MOTION_STARTUP(bool bHome) { return HSI_STATUS_FAILED; } - switch (g_pHSI_Motion->m_iJoyStick) //ҡ + switch (g_pHSI_Motion->m_iJoyStick) //摇杆设置 { case 0: break; @@ -383,7 +383,7 @@ HSI_API HSI_STATUS WINAPI HSI_MOTION_IS_SUPPORTED(UINT& Types) #define USE_Motion_API #ifdef USE_Motion_API -#pragma region +#pragma region 后续考虑 //=========================================================================== HSI_API HSI_STATUS WINAPI HSI_MOTION_GET_FOCUSSPEED_XYZ(double& Speed) @@ -1124,7 +1124,7 @@ HSI_API HSI_STATUS WINAPI HSI_MOTION_COLLECTPOS(bool isEnable, MOTOR_AXISCHOOES_ //////////////////////////////////////////////////////////////////////////////// -// ILLUMINATION API +// ILLUMINATION API 补光灯 /////////////////////////////////////////////////////////////////////////////// #ifdef USE_ILLUMINATION_API @@ -1302,7 +1302,7 @@ HSI_API HSI_STATUS WINAPI HSI_ILLUMINATION_TESTLIGHT(bool flag) /////////////////////////////////////////////////////////////////////////////// -// Probe API ̽ +// Probe API 探针 /////////////////////////////////////////////////////////////////////////////// #ifdef USE_Probe_API #pragma region probe @@ -1498,5 +1498,5 @@ HSI_API HSI_STATUS WINAPI HSI_TP_SHUTDOWN() #endif // USE_Probe_API /////////////////////////////////////////////////////////////////////////////// -// Թ +// 测试功能 /////////////////////////////////////////////////////////////////////////////// diff --git a/HSI_HexagonMI_EF3/HSI_Function.h b/HSI_HexagonMI_EF3/HSI_Function.h index 697b7da..2ee5ec5 100644 --- a/HSI_HexagonMI_EF3/HSI_Function.h +++ b/HSI_HexagonMI_EF3/HSI_Function.h @@ -6,8 +6,8 @@ enum E_EF3_PROBE_STATUS { - E_EF3_PROBE_DONE,//0ʾ̽״̬ - E_EF3_PROBE_RUNNING,//1ʾ̽ + E_EF3_PROBE_DONE,//0表示探针运行状态完成 + E_EF3_PROBE_RUNNING,//1标示探针正在运行 }; class CHSIParameters @@ -254,7 +254,7 @@ private: double seekSpeed; double retractDis; double retractManDis; - E_EF3_PROBE_STATUS probeRunStatus;//̽������״̬ + E_EF3_PROBE_STATUS probeRunStatus;//探锟斤拷锟斤拷锟斤拷状态 }; extern HSI_Function *g_pHSI_Function; diff --git a/HSI_HexagonMI_EF3/HSI_Illumination.cpp b/HSI_HexagonMI_EF3/HSI_Illumination.cpp index 2656e63..8bde786 100644 --- a/HSI_HexagonMI_EF3/HSI_Illumination.cpp +++ b/HSI_HexagonMI_EF3/HSI_Illumination.cpp @@ -1,4 +1,4 @@ -// HSI_Illumination.cpp : DLL ijʼ̡ +// HSI_Illumination.cpp : 定义 DLL 的初始化例程。 // #include "stdafx.h" #include "SevenOcean\CMMIO_SERIAL.h" @@ -102,7 +102,7 @@ HSI_STATUS HSI_Illumination::Startup(HWND _hWnd, bool _bOfflineOnly) sEvenProp.EventID = HSI_EVENT_MOTION; sEvenProp.EventResponse = HSI_EVENT_RESPONSE_OK; _itoa_s(g_pHSI_Motion->m_portAnum, messageAlarm, 30, 10); - strcat_s(messageAlarm, 100, "Ŷ˿MCUڿʧ"); + strcat_s(messageAlarm, 100, "号端口MCU串口控制器打开失败"); strcpy_s(sEvenProp.EventData, HSI_MaxStringLength, messageAlarm); EventCallback(sEvenProp); rStatus = HSI_STATUS_FAILED; @@ -126,7 +126,7 @@ HSI_STATUS HSI_Illumination::Startup(HWND _hWnd, bool _bOfflineOnly) sEvenProp.EventID = HSI_EVENT_MOTION; sEvenProp.EventResponse = HSI_EVENT_RESPONSE_OK; _itoa_s(g_pHSI_Motion->m_portBnum, messageAlarm, 30, 10); - strcat_s(messageAlarm, 100, "Ŷ˿MCUڿʧ"); + strcat_s(messageAlarm, 100, "号端口MCU串口控制器打开失败"); strcpy_s(sEvenProp.EventData, HSI_MaxStringLength, messageAlarm); EventCallback(sEvenProp); rStatus = HSI_STATUS_FAILED; @@ -142,7 +142,7 @@ HSI_STATUS HSI_Illumination::Startup(HWND _hWnd, bool _bOfflineOnly) sEvenProp.EventType = HSI_EVENT_ERROR; sEvenProp.EventID = HSI_EVENT_MOTION; sEvenProp.EventResponse = HSI_EVENT_RESPONSE_OK; - strcpy_s(sEvenProp.EventData, HSI_MaxStringLength, "STM32 USBģʽʧ"); + strcpy_s(sEvenProp.EventData, HSI_MaxStringLength, "STM32 USB模式打开失败"); EventCallback(sEvenProp); rStatus = HSI_STATUS_FAILED; } @@ -223,7 +223,7 @@ HSI_STATUS HSI_Illumination::SetLampState(int nLamp, bool *bBulbStates, double return rStatus; } //=========================================================================== -//ÿƵĹԴ +//设置控制的光源板的序号 HSI_STATUS HSI_Illumination::SetSelectedIndex(int index) { auto rStatus = HSI_STATUS_NORMAL; @@ -284,7 +284,7 @@ HSI_STATUS HSI_Illumination::SetLampStateAll(int _LampInfo, int _NumLamps, int(* } if (g_pHSI_Motion->m_IsUseSixRingEightArea == 1) { - //ʾλ + //更改六环八区扇形区域显示的位置 m_iIlluminationType = HSI_ILLUMINATION_INFO_SO7_III; for (size_t i = 0; i < 8; i++) { @@ -447,7 +447,7 @@ BOOL HSI_Illumination::SetLampState_So7II(int _NumLamps, int(*_LampsType)[HSI_IL } case HSI_ILLUMINATION_LAMP_CONTROL_BY_RINGS: { - //EF3ԴԴݷ ɿEF38· ֻܿƲ + //EF3自带光源的数据发送 环形区域可控制EF3的8路 其他区域只能控制部分 int index = 2; short int tempIntensity = 0; tempIntensity = (short int)(Intensities[0][0] * ampTimes); @@ -514,7 +514,7 @@ BOOL HSI_Illumination::SetLampState_So7II(int _NumLamps, int(*_LampsType)[HSI_IL Sleep(5); if (g_pHSI_Motion->m_IsUseTwentySixLight == 1 || g_pHSI_Motion->m_IsUseTwentySixLight == 2) { - //ʮ·/·Դݷ + //二十六路/八路光源板的数据发送 DebugLog("UseTwentySixLight -> in"); int index = 7; short int tempIntensity = 0; @@ -522,7 +522,7 @@ BOOL HSI_Illumination::SetLampState_So7II(int _NumLamps, int(*_LampsType)[HSI_IL { for (int j = 0; j < 8; j++) { - //26յƣ[2, 66] + //共26盏灯,到[2, 66] if (i == 4 && j >= 2) { break; @@ -613,7 +613,7 @@ BOOL HSI_Illumination::SetLampState_So7II(int _NumLamps, int(*_LampsType)[HSI_IL //=========================================================================== BOOL HSI_Illumination::SetLampState_So7III(int _NumLamps, int(*_LampsType)[HSI_ILLUMINATION_MAX_BULB_TYPE], int(*bBulbStates)[HSI_ILLUMINATION_MAX_BULBS], double(*Intensities)[HSI_ILLUMINATION_MAX_BULBS], bool bWait) { - // + //六环八区灯 DebugLog("SetLampState_So7III -> in"); BOOL rStatus(TRUE); int iOffsetIndex(0); @@ -874,7 +874,7 @@ BOOL HSI_Illumination::SetLampState_So7III(int _NumLamps, int(*_LampsType)[HSI_I //=========================================================================== BOOL HSI_Illumination::SetLampState_So7IIII(int _NumLamps, int(*_LampsType)[HSI_ILLUMINATION_MAX_BULB_TYPE], int(*bBulbStates)[HSI_ILLUMINATION_MAX_BULBS], double(*Intensities)[HSI_ILLUMINATION_MAX_BULBS], bool bWait) { - // + //两环八区灯 DebugLog("SetLampState_So7IIII -> in"); BOOL rStatus(TRUE); int iOffsetIndex(0); @@ -1128,14 +1128,14 @@ BOOL HSI_Illumination::So7LightII_set_light_off() { if (g_pHSI_Motion->m_bConnected) { - //EF3 رյƹ + //EF3 关闭灯光 m_cSendData[0] = 2; m_cSendData[1] = 2; g_pHSI_Motion->Send_Command(0, (const char*)m_cSendData, 64); } if (g_pHSI_Motion->m_IsUseTwentySixLight == 2) { - //ʮ·رյƹ HIDͨ + //二十六路关闭灯光 HID通信 m_cSendData[0] = 0x02; m_cSendData[1] = 0x02; m_cSendData[2] = 0x02; @@ -1150,7 +1150,7 @@ BOOL HSI_Illumination::So7LightII_set_light_off() { if (g_pHSI_Motion->m_Led8MotionFlag[i]) { - //8·Դرյƹ + //8路光源板关闭灯光 for (size_t j = 0; j < 64; j++) { g_pHSI_Motion->lightdata[j] = m_cSendData[j]; @@ -1165,7 +1165,7 @@ BOOL HSI_Illumination::So7LightII_set_light_off() } else { - //26·Դرյƹ + //26路光源板关闭灯光 for (size_t i = 5; i < 64; i++) { g_pHSI_Motion->lightdata[i] = m_cSendData[i]; @@ -1188,7 +1188,7 @@ BOOL HSI_Illumination::So7LightII_set_light_off() //=========================================================================== BOOL HSI_Illumination::So7LightIII_set_light_off() { - //ص + //六环八区关灯 BYTE cSendDataA[24] = { 0X02, 0X02, 0X08, 0XAA, 0X00, 0X01, 0X00, 0X01, 0X00, 0X01, 0X00, 0X01, 0X00, 0X01, 0X00, 0X01, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0XBB }; DWORD iSendDataLength = 24; if (g_pHSI_Motion && (g_pHSI_Motion->m_IsUseSixRingEightArea == 1)) @@ -1247,10 +1247,10 @@ VOID HSI_Illumination::EventCallback(sHSIEventProperties& sEventProp) void HSI_Illumination::CreateDirectorySO(CString directoryLog) { - // ļв + // 文件夹不存在 if (FALSE == PathFileExists(directoryLog)) { - //ѭ־ļ + //循环创建日志文件夹 int nCout = directoryLog.Replace('\\', '/'); int findOff = 0; for (int i = 1; i #include #include "windows.h" -#include "ACS/ACSC.h" //ACS˶ƿͷļ +#include "ACS/ACSC.h" //引入ACS运动控制卡头文件 using namespace std; #ifdef _DEBUG @@ -26,8 +26,8 @@ using namespace std; //=========================================================================== HSI_Motion* g_pHSI_Motion = nullptr; CLogger extern* g_pLogger = nullptr; -HANDLE hCom; //ھ -HANDLE handleACS; // ˶ƾ +HANDLE hCom; //串口句柄 +HANDLE handleACS; // 运动控制句柄 const int WSA_MAJOR_VERSION = 2; const int WSA_MINOR_VERSION = 2; @@ -87,7 +87,7 @@ SOCKET m_socket[4] = {0}; g_pLogger->SendAndFlushWithTime(L"[ACS Motion] Motion Error,Code: %d, %S\n", ErrorCode, ErrorStr); - //ϲ㷢ʹϢ + //向上层发送错误信息 sEvenProp.Init(); sEvenProp.EventType = HSI_EVENT_FUNCTION; sEvenProp.EventID = HSI_EVENT_DEBUG_LOG; @@ -102,7 +102,7 @@ SOCKET m_socket[4] = {0}; } }; //=========================================================================== -//˶๹캯漰 ˶Ʋ岹ؼҡҡˡ־Ϣļ +//运动类构造函数,涉及 运动控制参数、插补、回家、摇杆、日志等配置信息的加载 HSI_Motion::HSI_Motion() { TRACE0("HSI_Motion Constructor!\n"); @@ -114,90 +114,90 @@ HSI_Motion::HSI_Motion() CurrentReadDataType = E_DATA_TYPE_NONE; GluerunCount = 0; - m_IsExMotion = 2; //0xyzõģ1ǵõģ2 - g_IsClose = false; //DoEvents()˳쳣 + m_IsExMotion = 2; //0是xyz用的,1是单轴用的,2都不用 + g_IsClose = false; //用于DoEvents()的退出,而不异常 setLightFlag = false; - m_bISUseMoreLights = 0; //ƹ - m_Jog_Auto_Focus = 1; //佹ʹõٶ - m_StartInputPort = 1; //ⲿ밴ť + m_bISUseMoreLights = 0; //更多灯光 + m_Jog_Auto_Focus = 1; //变焦使用的速度 + m_StartInputPort = 1; //外部输入按钮启动程序 iaxisNum = 0; iScanMotionType = 0; iTriggleNum = 0; iMotionDirection = 1; m_InputStatus = 0; m_ForStatus = 0; - m_setPositionDelay = 0; //öλʱ - m_setPositionPrecision = 0; //öλ - m_IsUse_HSICompensation = 0; //ǷHSIжλ 0Ϊ 1Ϊ ĬΪ0 - m_Compensation_Pluse = 20; // - m_IsHardLimit = 7; //豸Ӳλ Ϊ0ʾᶼΪλ 1ΪXΪӲλ 2ΪY 3ΪXY 4ΪZ 7ΪXYZ ĬΪ7 - m_IsEnableAxis = 7; //豸 Ϊ0ʾ᲻ 1ΪX 2ΪY 3ΪXY 4ΪZ 7ΪXYZ ĬΪ7 - m_IsHavePattern = 15; //Ƿйդ - m_IsUseExternalTrigger = 1; //Ƿⴥ 0Ϊ 1Ϊ ĬΪ1 - m_IsUseSixRingEightArea = 0; //Ƿƹ 0Ϊ 1Ϊ 2Ϊ ĬΪ0 - m_IsUseTwentySixLight = 0; //Ƿ26·ƹ 0Ϊ 1λ ĬΪ0 - m_IsUseEF3 = 0; //ǷEF3 - m_IsUseACS = 0; //ǷACS - m_IsUseRocker = 0; //Ƿҡ 0Ϊ 1Ϊþҡˣ2Ϊҡˣ ĬΪ0 + m_setPositionDelay = 0; //设置定位超时 + m_setPositionPrecision = 0; //设置定位精度 + m_IsUse_HSICompensation = 0; //是否启用HSI进行定位补偿 0为不启用 1为启用 默认为0 + m_Compensation_Pluse = 20; //补偿脉冲数 + m_IsHardLimit = 7; //设备轴硬限位设置 为0表示所有轴都为软限位 1为X轴为硬限位 2为Y轴 3为XY轴 4为Z轴 7为XYZ轴 默认为7 + m_IsEnableAxis = 7; //设备启用轴设置 为0表示所有轴不启用 1为X轴启用 2为Y轴启用 3为XY轴启用 4为Z轴启用 7为XYZ轴启用 默认为7 + m_IsHavePattern = 15; //是否有光栅 + m_IsUseExternalTrigger = 1; //是否启用外触发功能 0为不启用 1为启用 默认为1 + m_IsUseSixRingEightArea = 0; //是否启用六环八区灯功能 0为不启用 1为启用 2为二环八区灯 默认为0 + m_IsUseTwentySixLight = 0; //是否启用26路灯光 0为不启用 1位启用 默认为0 + m_IsUseEF3 = 0; //是否启用EF3 + m_IsUseACS = 0; //是否启用ACS + m_IsUseRocker = 0; //是否启用摇杆 0为不启用 1为启用旧摇杆,2为新摇杆, 默认为0 m_IsCloseRocker = 0; - m_DeviceType = 0; //豸ͣ0Ϊͨ豸1Ϊ, 2ΪҰ3Ϊת豸 ĬΪ0 - m_iJoyStick = 0; //ҡͣ0 1ʽҡ + m_DeviceType = 0; //设备类型,0为通用设备,1为三激光, 2为大视野,3为转盘设备 默认为0 + m_iJoyStick = 0; //摇杆类型:0:无 1:老式摇杆 m_IsProbe = 0; - m_ProbeAllAxis = 3; //̽봥ʱţĬ3ʾXYZ3ᣬ4ʾXYZA4 - m_ProbeReturnPos = 10.0; //̽봥ʱʱصľmmťʱ,Ĭ10.0mm - m_ProbeReturnSpeed = 40; //̽봥Ļٶ - m_IsHomeEncPos = 0; //ǷʵλжǷؼңĬ01ã0ر - m_IsHomePrfPos = 1; //Ƿ滮λжǷؼңĬ11ã0ر - m_IsIOFuntion = 0; //ǷIOܣ1Ϊ򿪣0Ϊر - m_IsStartInput = 0; //Ƿý̤عܣ1Ϊã0ΪرգĬ0 + m_ProbeAllAxis = 3; //探针触发时,锁存的轴号,默认3表示锁存XYZ共3轴,4表示XYZA共4轴 + m_ProbeReturnPos = 10.0; //探针触发时,调试时返回的距离mm,点击启动按钮时不起作用,默认10.0mm + m_ProbeReturnSpeed = 40; //探针触发后,轴的回退速度 + m_IsHomeEncPos = 0; //是否启动实际位置判断是否回家,默认0,1启用,0关闭 + m_IsHomePrfPos = 1; //是否启动规划位置判断是否回家,默认1,1启用,0关闭 + m_IsIOFuntion = 0; //是否启动IO功能,1为打开,0为关闭 + m_IsStartInput = 0; //是否启用脚踏开关功能,1为启用,0为关闭,默认0 m_IsUsePPS = false; - m_MSTRunFlag = false; //MSTб־trueMSTѾfalseMSTֹͣ - m_SendDataLength = 8; // ڷݳ + m_MSTRunFlag = false; //MST软件运行标志,trueMST软件已经启动,falseMST软件停止 + m_SendDataLength = 8; // 串口发送数据长度 m_LightType = 1; m_IsUseFourthSpeed = 0; - m_ETIPort = 1; //ⲿ˿ں + m_ETIPort = 1; //外部触发拍照输入端口号 m_EF3LightType = 1; - m_IbinCount = 0; //¼ȡķbin - m_IsUseJerk = 0; //Ƿüͣ 0Ϊ 1Ϊ - t_start = 0; //ȡjogеĿʼʱ - t_end = 0; //ȡjogеĽʱ - m_isOKGlint = 0; //Ƿok/ng ˸ + m_IbinCount = 0; //记录获取到的分bin数 + m_IsUseJerk = 0; //是否启用急停 0为不启用 1为启用 + t_start = 0; //获取jog运行的开始时间 + t_end = 0; //获取jog运行的结束时间 + m_isOKGlint = 0; //是否开启ok/ng 闪烁 m_selectedIndex = 0; m_setPositionNum = 5; - m_axisStatus = 0; //˶״̬ - m_axisAlarmStatus = 0; //ᱨ״̬ - m_EF3COMPort = 2; //EF3comڣĬΪ2 - m_AxisHomeDirection = 15; //ؼʱķ - m_PositionA = 0.0; //ĵλλ - m_ForSoft = 0; //ʹ 0ΪMST 1ΪMetus - m_SaveAxisNum = 0; // - m_SaveAxisSpeed = 0; //ٶ + m_axisStatus = 0; //运动各轴的状态 + m_axisAlarmStatus = 0; //轴报警状态 + m_EF3COMPort = 2; //EF3板com口,默认为2 + m_AxisHomeDirection = 15; //轴回家时的方向 + m_PositionA = 0.0; //第四轴的地位位置 + m_ForSoft = 0; //针对使用软件 0为MST 1为Metus + m_SaveAxisNum = 0; //保存轴号 + m_SaveAxisSpeed = 0; //保存速度 bSaveSpeedFlag = false; - m_IsUseManualRunin = 0; //Ƿֶ岹ֻԲ + m_IsUseManualRunin = 0; //是否开启手动插补(只针对步进电机) fourthAxisFlag = false; - bCircleRun = false; //Բ岹 - m_UseAxisNum = 1; //ת豸ʹ - jogAxisNum = 0; //jog˶ + bCircleRun = false; //圆弧插补 + m_UseAxisNum = 1; //转盘设备使用轴号 + jogAxisNum = 0; //jog运动的轴号 jogDirFlag = false; jogMoving = false; jogspeed = 0; - set_start = 0; //ȡλпʼʱ - set_end = 0; //ȡλнʱ + set_start = 0; //获取定位运行开始时间 + set_end = 0; //获取定位运行结束时间 m_iSpeedType = 0; - m_axisDirX = 0; //̽˶ʱX˶ - m_axisDirY = 0; //̽˶ʱY˶ - m_axisDirZ = 0; //̽˶ʱZ˶ + m_axisDirX = 0; //探针运动时X轴的运动方向 + m_axisDirY = 0; //探针运动时Y轴的运动方向 + m_axisDirZ = 0; //探针运动时Z轴的运动方向 m_probeSeekSpeed = 0; - bUseGlueDispenser = false; //Ƿ㽺 + bUseGlueDispenser = false; //是否开启点胶 m_iGlueStartSpeed = 1; m_iGlueDriveSpeed = 1; m_iGlueAccSpeed = 1; - GlueDispenserindexNum = 0; //㽺 + GlueDispenserindexNum = 0; //点胶段数 - m_isUseAport = 0; //A + m_isUseAport = 0; //A串口 m_portAnum = 0; - m_isUseBport = 0; //B + m_isUseBport = 0; //B串口 m_portBnum = 0; m_bEmergencyState = false; SpCompleteTStart = 0; @@ -205,61 +205,61 @@ HSI_Motion::HSI_Motion() SpTimeCount = 0; SetPotionRunEnd = false; PntToPntDistance = 0.0; - m_IsLightDebug = 0; //Ƿ񲻻ؼҲܵԵƹ 0Ϊ 1Ϊ ĬΪ0 + m_IsLightDebug = 0; //是否不回家也能调试灯光 0为不启用 1为启用 默认为0 for (int i = 0; i < 4; i++) { - m_IsOpenTCPIP[i] = ""; //ṩtcpͨŵip + m_IsOpenTCPIP[i] = ""; //可提供的tcp通信的ip m_tcpCntFlag[i] = false; - m_Led8MotionFlag[i] = false; //ǷΪ8·Դ + m_Led8MotionFlag[i] = false; //是否为8路光源板 } for (int i = 0; i < 4; i++) { - m_rockerHStartSpeed[i] = 5; //ҡXYZ߳ʼٶ - m_rockerHDriveSpeed[i] = 20; //ҡXYZٶ - m_rockerLStartSpeed[i] = 2; //ҡXYZͳʼٶ - m_rockerLDriveSpeed[i] = 10; //ҡXYZٶ - m_rockerDSpeed[i] = 100; //XYZӼ2 - m_rockerASpeed[i] = 100; //XYZӼ1 - begin_position[i] = 0; //ⴥʼҪ͵ + m_rockerHStartSpeed[i] = 5; //摇杆XYZ轴高初始速度 + m_rockerHDriveSpeed[i] = 20; //摇杆XYZ轴高驱动速度 + m_rockerLStartSpeed[i] = 2; //摇杆XYZ轴低初始速度 + m_rockerLDriveSpeed[i] = 10; //摇杆XYZ轴低驱动速度 + m_rockerDSpeed[i] = 100; //XYZ轴加减速2 + m_rockerASpeed[i] = 100; //XYZ轴加减速1 + begin_position[i] = 0; //外触发到初始点需要发送的脉冲数 } for (size_t i = 0; i < 8; i++) { - m_SixEightSubArea[i] = 0; // + m_SixEightSubArea[i] = 0; //六环八区分区功能 } - //־ + //日志处理 //DeleteDirectory() CTime tm = CTime::GetCurrentTime(); - //CString csTime = tm.Format("%Y-%m-%d_%H-%M-%S"); //ʱַ - CString csTime = tm.Format("%Y-%m-%d"); //ʱַ + //CString csTime = tm.Format("%Y-%m-%d_%H-%M-%S"); //构造时间字符串 + CString csTime = tm.Format("%Y-%m-%d"); //构造时间字符串 CString dir = L"\\Log\\" + csTime += L"_EF3.Log"; g_pLogger = new CLogger(dir); g_pLogger2 = new CLogger(L"\\Log\\EF3_SumTime.Log"); - //λ + //档位参数 for (int i = 0; i < 5; i++) { for (int j = 0; j < 5; j++) { - m_JogDriveSpeed[j][i] = 20; //ʾ5λ ,1ʼ5λ + m_JogDriveSpeed[j][i] = 20; //表示5个档位 轴号,从1开始;5:档位 m_JogStartSpeed[j][i] = 20; m_JogAccLine[j][i] = 5; m_JogAccCurve[j][i] = 0; m_JogDecLine[j][i] = 5; m_JogDecCurve[j][i] = 0; } - m_Home_Machine_Axis[i] = 1; //ʱҪԭѡ,ֵ1ʾҪؼ - m_Home_Pos_Axis[i] = 0; //סرյԴʱλãжǷҪԭ + m_Home_Machine_Axis[i] = 1; //用于启动时需要回原点的轴号选择,赋值1表示该轴需要回家 + m_Home_Pos_Axis[i] = 0; //记住关闭电源时的位置,用于判断是否还需要回原点 } - m_Home_Machine_Axis[4] = 0; //ʱҪԭѡ + m_Home_Machine_Axis[4] = 0; //用于启动时需要回原点的轴号选择 for (int i = 0; i < 5; i++) { - m_N_Work_Limit[i] = -40; //λ - m_P_Work_Limit[i] = 160; //λ - m_Resolution[i] = 0.0004; //1ʼ,0 + m_N_Work_Limit[i] = -40; //负限位 + m_P_Work_Limit[i] = 160; //正限位 + m_Resolution[i] = 0.0004; //从1开始,0不用 m_Home_AddJogGears[i] = 4; m_Home_DecJogGears[i] = 3; m_SetPotion_StartSpeed[i] = 20; @@ -274,30 +274,30 @@ HSI_Motion::HSI_Motion() m_precisionTime[i] = 350; m_Home_Time[i] = 1500; m_SetPotion_Count[i] = 200; - m_PosThread[i] = 0; //SetpositionXyzĿλ - m_PosNow[i] = 0; //SetpositionXyzʱȡǰλ - m_LogIsOpen[i] = 0; //Ƿ򿪼¼0Ϊ򿪣0Ϊر - m_StopJogMode[i] = 0; //JOGģʽüͣƽֹͣ + m_PosThread[i] = 0; //SetpositionXyz的目标位置 + m_PosNow[i] = 0; //调用SetpositionXyz时,读取当前位置 + m_LogIsOpen[i] = 0; //是否打开记录,0为打开,非0为关闭 + m_StopJogMode[i] = 0; //JOG模式采用急停还是平滑停止 m_LockPos[i] = 0.0; m_EncPos[i] = 0; m_PrfPos[i] = 0; - m_PosForAllAxis[i] = 0.0; //¼4λ + m_PosForAllAxis[i] = 0.0; //记录4轴位置 targetpos_n[i] = 0; targetpos_l[i] = 0; - m_ProbeCapturePos[i] = 0; //λ - iCircleRunPnt[i] = 0; //Բ岹ʱԲλ + m_ProbeCapturePos[i] = 0; //锁存各轴的位置 + iCircleRunPnt[i] = 0; //圆弧插补时的圆心位置 m_ijk[i] = 0; } - //Ƿ־ + //是否启用日志 GetAppPath(m_AppPath); m_LogIsOpen[0] = GetPrivateProfileInt(L"LOG", L"LOG_IS_OPEN_0", 0, m_AppPath + _T("\\Config\\EF3_Motion.ini")); g_pLogger->IsEnabledLog = m_LogIsOpen[0] == 1 ? true : false; g_pLogger->SendAndFlushWithTime(L"\n"); g_pLogger->SendAndFlushWithTime(L"==========================================================\n"); - m_Set_XYZA_Reserve = 0; //XYZA᷽ - m_motorType = 0; // 1Ϊŷ 0Ϊ + m_Set_XYZA_Reserve = 0; //XYZA轴方向 + m_motorType = 0; //电机类型 1为伺服电机 0为步进电机 m_AxisHex[0] = 0; m_direct_pos = 0; m_AxisHex[1] = AXIS_X; @@ -316,7 +316,7 @@ HSI_Motion::HSI_Motion() m_cSendData[4] = 4; m_cSendData[6] = 4; m_bConnected = false; - m_bACSConnected = false; //ʼĬϴʧ + m_bACSConnected = false; //初始化,默认打开失败 first = true; LightSend = 0; @@ -354,12 +354,12 @@ bool HSI_Motion::PortInit(int iSerialComPort, int iBuadRate) sprintf_s(buf, "COM%d", iSerialComPort); CString comName(buf); hCom = CreateFile(comName, - GENERIC_READ | GENERIC_WRITE, //д - 0, //ռʽ,ڱΪ0 + GENERIC_READ | GENERIC_WRITE, //允许读和写 + 0, //独占方式,串口必须为0 nullptr, - OPEN_EXISTING, //򿪶ǴڱΪ - 0, //ͬʽ,ִͬʱֱɺŷ - nullptr); //ڱΪNULL + OPEN_EXISTING, //打开而不是创建,串口必须为打开 + 0, //同步方式,同步执行时,函数直到操作完成后才返回 + nullptr); //串口必须为NULL if (hCom != (HANDLE)-1) { PurgeComm(hCom, PURGE_TXCLEAR | PURGE_RXCLEAR); @@ -376,7 +376,7 @@ bool HSI_Motion::PortInit(int iSerialComPort, int iBuadRate) return false; //Setting Error!!!! } - //öдʱʱ + //设置读写超时时间 COMMTIMEOUTS to; memset(&to, 0, sizeof(to)); to.ReadIntervalTimeout = 100; @@ -410,35 +410,35 @@ HSI_STATUS HSI_Motion::Startup(HWND _hWnd, bool _bOfflineOnly) { g_pHSI_Motion = new HSI_Motion(); } - if (CurrentHomeMachineState == E_EF3_HOME_ING) //ڻؼ + if (CurrentHomeMachineState == E_EF3_HOME_ING) //正在回家中 { g_pLogger->SendAndFlushWithTime(L"[Startup] Going Home\n"); return HSI_STATUS_NORMAL; } g_pLogger->SendAndFlushWithTime(L"[Startup] In\n"); g_pLogger->SendAndFlushWithTime(L"[Startup] HMQ HSI.dll version = %s, date = %s\n", HSI_VERSION_CSTRING, - HSI_FILE_CSDESCRIPTION); //HSI.dll 汾 + HSI_FILE_CSDESCRIPTION); //输出HSI.dll 版本号 GoogolMotionConfigFile = m_AppPath + _T("\\Config\\EF3_Config.ini"); - Load_EF3_Config_Inifile(GoogolMotionConfigFile); // EF3_Config.ini + Load_EF3_Config_Inifile(GoogolMotionConfigFile); //加载 EF3_Config.ini 配置项 GoogolMotionConfigFile = m_AppPath + _T("\\Config\\EF3_Motion.ini"); - Load_EF3_Motion_Inifile(GoogolMotionConfigFile); // EF3_Motion.ini - //ʹ EF3 + Load_EF3_Motion_Inifile(GoogolMotionConfigFile); // 加载 EF3_Motion.ini 配置项 + //如果使用 EF3 if (m_IsUseEF3 == 1) { if (!m_bConnected) { - //ֱߵƽ̨ôͨţ8λ1ֹͣλżУ飬256000 - m_SO7_Serial.SetPort(m_EF3COMPort, 256000, 0, 8, 1, 0); //򿪴 + //直线电机平台,采用串口通信,8个数据位,1个停止位,无奇偶校验,波特率256000 + m_SO7_Serial.SetPort(m_EF3COMPort, 256000, 0, 8, 1, 0); //打开串口 #ifndef OFFLINE - if (!m_SO7_Serial.Open()) //ڴʧ + if (!m_SO7_Serial.Open()) //如果串口打开失败 { g_pLogger->SendAndFlushWithTime(L"[Startup] m_SO7_Serial.Open is false,connected failed\n"); sEvenProp.Init(); sEvenProp.EventType = HSI_EVENT_ERROR; sEvenProp.EventID = HSI_EVENT_MOTION; sEvenProp.EventResponse = HSI_EVENT_RESPONSE_OK; - strcpy_s(sEvenProp.EventData, HSI_MaxStringLength, "EF3ʧ,"); + strcpy_s(sEvenProp.EventData, HSI_MaxStringLength, "EF3控制器打开失败,串口"); EventCallback(sEvenProp); return HSI_STATUS_FAILED; } @@ -455,17 +455,17 @@ HSI_STATUS HSI_Motion::Startup(HWND _hWnd, bool _bOfflineOnly) } } - //ACS + //如果启用ACS if (m_IsUseACS == 1) { if (!m_bACSConnected) { - //ԴACS + //尝试打开ACS控制器 g_pLogger->SendAndFlushWithTime(L"[ACS Motion] In\n"); g_pLogger->SendAndFlushWithTime( L"[ACS Motion] Wait for opening of communication with the controller... \n"); -#ifdef OFFLINE //ģʽ +#ifdef OFFLINE //如果定义离线模式 handleACS = acsc_OpenCommSimulator(); #else // 10.0.0.100 - default IP address of the controller @@ -473,7 +473,7 @@ HSI_STATUS HSI_Motion::Startup(HWND _hWnd, bool _bOfflineOnly) // for the connection to the controller via local network or Internet // hComm = acsc_OpenCommEthernet("10.0.0.100", ACSC_SOCKET_STREAM_PORT); - if (handleACS == ACSC_INVALID) //ʧ + if (handleACS == ACSC_INVALID) //打开失败 { g_pLogger->SendAndFlushWithTime(L"[ACS Motion] error while opening communication.\n"); ErrorsHandler(); @@ -482,13 +482,13 @@ HSI_STATUS HSI_Motion::Startup(HWND _hWnd, bool _bOfflineOnly) sEvenProp.EventType = HSI_EVENT_ERROR; sEvenProp.EventID = HSI_EVENT_MOTION; sEvenProp.EventResponse = HSI_EVENT_RESPONSE_OK; - strcpy_s(sEvenProp.EventData, HSI_MaxStringLength, "ACSʧ"); + strcpy_s(sEvenProp.EventData, HSI_MaxStringLength, "ACS控制器打开失败"); EventCallback(sEvenProp); return HSI_STATUS_FAILED; } #endif - //ʹܵ - int Axes[] = {ACSC_AXIS_1, ACSC_AXIS_0, ACSC_AXIS_8, -1}; //ݵ涨壬0ӦXᣬ1ӦYᣬ8ӦZ + //使能电机 + int Axes[] = {ACSC_AXIS_1, ACSC_AXIS_0, ACSC_AXIS_8, -1}; //根据电气层面定义,这里的0对应X轴,1对应Y轴,8对应Z轴 if (!acsc_EnableM(handleACS, Axes, nullptr)) { g_pLogger->SendAndFlushWithTime(L"[ACS Motion] ACS Motors Enable Failed!\n"); @@ -503,7 +503,7 @@ HSI_STATUS HSI_Motion::Startup(HWND _hWnd, bool _bOfflineOnly) g_pLogger->SendAndFlushWithTime(L"[ACS Motion] ACS Initialization Success!\n"); - //ȡACS 汾, ԣ2.70 + //获取ACS 控制器版本号, 待测试,2.70 char Firmware[256]; int Received; if (!acsc_GetFirmwareVersion(handleACS, Firmware, 255, &Received, nullptr)) @@ -515,10 +515,10 @@ HSI_STATUS HSI_Motion::Startup(HWND _hWnd, bool _bOfflineOnly) //printf("%s", Firmware); //https://www.cnblogs.com/MichaelOwen/articles/2128771.html - //g_pLogger->SendAndFlushWithTime(L"%s%s\n", _T("[ACS Motion] ACS Controller Version: "), L""); + //g_pLogger->SendAndFlushWithTime(L"%s%s\n", _T("[ACS Motion] ACS Controller Version: "), L"你好"); g_pLogger->SendAndFlushWithTime(L"[ACS Motion] ACS Controller Version: %S\n", Firmware); - //ȡSPiiPlus C Library version + //获取SPiiPlus C Library version unsigned int Ver = acsc_GetLibraryVersion(); /* printf("SPiiPlus C Library version is %d.%d.%d.%d\n", HIBYTE(HIWORD(Ver)), LOBYTE(HIWORD(Ver)), HIBYTE(LOWORD(Ver)), @@ -533,8 +533,8 @@ HSI_STATUS HSI_Motion::Startup(HWND _hWnd, bool _bOfflineOnly) L"[ACS Motion] Communication with the controller is already established successfully!\n"); } - //־λ δعңҪؼ - rStatus = g_pHSI_Motion->HomeMachine(TRUE); //ִлؼ + //如果各个轴标志位 未回过家,需要回家 + rStatus = g_pHSI_Motion->HomeMachine(TRUE); //执行回家 } // 04 05 0F 4A 04 00 04 00 00 00 00 00 00 00 00 00 @@ -562,7 +562,7 @@ HSI_STATUS HSI_Motion::Startup(HWND _hWnd, bool _bOfflineOnly) //01 06 07 53 01 0F 00 00 F4 01 00 00 F4 01 00 00 //AbortMotion(); - //m_cSendData[0] = CT_ORDER;//ֹͣ˶ + //m_cSendData[0] = CT_ORDER;//停止运动 //m_cSendData[1] = CT_STOP; //m_cSendData[2] = AXIS_XYZU; //m_StopJogMode[1] == 0 ? m_cSendData[3] = 0X4A : m_cSendData[3] = 0X05; @@ -572,7 +572,7 @@ HSI_STATUS HSI_Motion::Startup(HWND _hWnd, bool _bOfflineOnly) //m_WriteByte = Send_Command(0, (const char*)m_cSendData, m_SendDataLength); //Sleep(5); - if (m_DeviceType == 3) //ת豸,ǰδʹ + if (m_DeviceType == 3) //转盘设备,当前未使用 { m_cSendData[0] = CT_TURNTABLE; m_cSendData[1] = CT_RTSTOP; @@ -582,7 +582,7 @@ HSI_STATUS HSI_Motion::Startup(HWND _hWnd, bool _bOfflineOnly) SetEvent(m_hTriggerEventData); } - if (bUseGlueDispenser) //㽺ǰδʹ + if (bUseGlueDispenser) //点胶,当前未使用 { bUseGlueDispenser = false; m_cSendData[0] = CT_MOTOR; @@ -599,7 +599,7 @@ HSI_STATUS HSI_Motion::Startup(HWND _hWnd, bool _bOfflineOnly) //return HSI_STATUS_FAILED; } - //Чλǰδʹ + //无效软限位,当前未使用 //m_cSendData[0] = CT_MOTOR; //m_cSendData[1] = CT_MOTOR_SET; //m_cSendData[2] = AXIS_XYZU; @@ -612,12 +612,12 @@ HSI_STATUS HSI_Motion::Startup(HWND _hWnd, bool _bOfflineOnly) //m_cSendData[9] = 0; //m_cSendData[10] = 0; //m_cSendData[11] = 0; - //m_WriteByte = Send_Command(0, (const char*)m_cSendData, m_SendDataLength); //ʼֹһЧ + //m_WriteByte = Send_Command(0, (const char*)m_cSendData, m_SendDataLength); //初始化防止第一次无效 //Sleep(5); //m_WriteByte = Send_Command(0, (const char*)m_cSendData, m_SendDataLength); //g_pLogger->SendAndFlushWithTime(L"[Startup] Limit no Enable\n"); - //÷4ķ򣬰λ + //设置方向4个轴的方向,按位 //m_cSendData[0] = CT_MOTOR; //m_cSendData[1] = CT_MOTOR_SET; //m_cSendData[2] = AXIS_X; @@ -629,29 +629,29 @@ HSI_STATUS HSI_Motion::Startup(HWND _hWnd, bool _bOfflineOnly) //Sleep(10); //m_cSendData[0] = CT_MOTOR; //m_cSendData[1] = CT_MDATA_INIT; - //m_cSendData[2] = m_motorType & 0xff; //ͣŷ - //m_cSendData[3] = m_IsUseExternalTrigger; //Ƿⴥ - //m_cSendData[4] = m_IsUseSixRingEightArea; //Ƿƹ + //m_cSendData[2] = m_motorType & 0xff; //电机类型(步进电机或伺服电机) + //m_cSendData[3] = m_IsUseExternalTrigger; //是否启用外触发功能 + //m_cSendData[4] = m_IsUseSixRingEightArea; //是否启用六环八区灯功能 //m_cSendData[5] = m_IsHardLimit; //m_cSendData[6] = m_IsEnableAxis; - //m_cSendData[7] = m_IsProbe; //Ƿ̽ - //m_cSendData[8] = m_EF3LightType; //5VƵƹ - //m_cSendData[9] = m_IsUseRocker; //Ƿҡ - //m_cSendData[10] = m_IsHavePattern; //դ - //m_cSendData[11] = m_AxisHomeDirection; //ؼҷ - //m_cSendData[12] = m_IsCollectPos; //ǷӴڴӡλ - //m_cSendData[16] = m_IsLightDebug; //Ƿ񲻻ؼҲܵԵƹ + //m_cSendData[7] = m_IsProbe; //是否启用探针 + //m_cSendData[8] = m_EF3LightType; //5V高频灯光配置 + //m_cSendData[9] = m_IsUseRocker; //是否启用摇杆 + //m_cSendData[10] = m_IsHavePattern; //光栅 + //m_cSendData[11] = m_AxisHomeDirection; //轴回家方向 + //m_cSendData[12] = m_IsCollectPos; //是否从串口打印位置 + //m_cSendData[16] = m_IsLightDebug; //是否不回家也能调试灯光 - //ҡ,̤ + //新摇杆,并启动脚踏功能 //if (m_IsStartInput == 1 && m_IsUseRocker == 2) //{ - // m_cSendData[14] = m_StartInputPort >> 8 & 0xff; //ⲿ˿ں H - // m_cSendData[15] = m_StartInputPort & 0xff; //ⲿ˿ں L + // m_cSendData[14] = m_StartInputPort >> 8 & 0xff; //外部启动端口号 H + // m_cSendData[15] = m_StartInputPort & 0xff; //外部启动端口号 L //} //m_WriteByte = Send_Command(0, (const char*)m_cSendData, m_SendDataLength); //Sleep(10); - ////ֵ趨 + ////步进电机补偿值设定 //if (m_motorType == 0) //{ // m_cSendData[0] = CT_MOTOR; @@ -667,7 +667,7 @@ HSI_STATUS HSI_Motion::Startup(HWND _hWnd, bool _bOfflineOnly) // g_pLogger->SendAndFlushWithTime(L"[Startup] Set Encoder Dir\n"); //} - //Դ + //多光源板 if (m_bISUseMoreLights > 0) { for (int i = 0; i < m_bISUseMoreLights; i++) @@ -687,7 +687,7 @@ HSI_STATUS HSI_Motion::Startup(HWND _hWnd, bool _bOfflineOnly) sEvenProp.EventType = HSI_EVENT_ERROR; sEvenProp.EventID = HSI_EVENT_MOTION; sEvenProp.EventResponse = HSI_EVENT_RESPONSE_OK; - strcpy_s(sEvenProp.EventData, HSI_MaxStringLength, "Դʧ"); + strcpy_s(sEvenProp.EventData, HSI_MaxStringLength, "光源板打开网口失败"); EventCallback(sEvenProp); return HSI_STATUS_FAILED; } @@ -711,7 +711,7 @@ HSI_STATUS HSI_Motion::Startup(HWND _hWnd, bool _bOfflineOnly) } } - //ҡٶ + //摇杆速度设置 if (m_IsUseRocker == 1) { m_cSendData[0] = CT_MOTOR; @@ -740,7 +740,7 @@ HSI_STATUS HSI_Motion::Startup(HWND _hWnd, bool _bOfflineOnly) g_pLogger->SendAndFlushWithTime(L"[Startup] Set Rocker Success\n"); } - //ҡ2صλ + //摇杆2下载档位 if (m_IsUseRocker == 2) { SetAllGears(); @@ -748,19 +748,19 @@ HSI_STATUS HSI_Motion::Startup(HWND _hWnd, bool _bOfflineOnly) g_pLogger->SendAndFlushWithTime(L"[Startup] Set Gears Success\n"); } - //ˢλ״̬߳ + //刷新位置状态线程 CreateThread(); SetEvent(m_hTriggerEvent); m_Thread_State = HSI_THREAD_PAUSED; g_pLogger->SendAndFlushWithTime(L"[Startup] SetpositionXyz Enable\n"); - //ȡEF3״̬߳ + //读取EF3数据状态线程 //CreateThreadData(); //SetEvent(m_hTriggerEventData); //m_Thread_StateData = HSI_THREAD_RUNNING; //g_pLogger->SendAndFlushWithTime(L"[Startup] Read EF3 Status Run\n"); - //JOGеλ˶߳ + //JOG运行到软限位的运动调节线程 //if (m_DeviceType != 3) //{ // CreateThreadJOGStop(); @@ -768,40 +768,40 @@ HSI_STATUS HSI_Motion::Startup(HWND _hWnd, bool _bOfflineOnly) // m_Thread_StateJOGStop = HSI_THREAD_PAUSED; //} - //ǷIỌ߳ͨļ + //是否启用IO功能线程,通过配置文件启用 if (m_IsIOFuntion == 1) { m_Thread_StateIO = HSI_THREAD_RUNNING; - CreateThreadIO(); //IOϢʹ + CreateThreadIO(); //IO发消息使用 SetEvent(m_hTriggerEventIO); g_pLogger->SendAndFlushWithTime(L"[Startup] m_IsIOFuntion Enable\n"); SetDIO(HSI_MOTION_OUTPUT_CH1, 0xfffff); } - //Ƿ̽벶ܣͨļ + //是否启用探针捕获功能,通过配置文件启用 if (m_IsProbe == 1) { - CreateThreadProbe(); //̽벶 + CreateThreadProbe(); //探针捕获功能 m_Thread_StateProbe = HSI_THREAD_RUNNING; SetEvent(m_hTriggerEventProbe); g_pLogger->SendAndFlushWithTime(L"[Startup] m_IsProbe Enable\n"); } g_pLogger->SendAndFlushWithTime(L"[Startup] Out\n"); - //EF3ģʽãʱģʽ + //启用EF3锁存模式设置,定时模式 if (m_IsUseEF3 ) { - //Ƶ 1ӣ + //设置锁存频率 1秒钟() m_cSendData[0] = 0x01; m_cSendData[1] = 0x01; m_cSendData[2] = 0x02; - //m_cSendData[3] = 0x03; // 10000 0x27 0x10Ӧ1룬3-4ֽڱʾ + //m_cSendData[3] = 0x03; // 10000 (0x27 0x10)对应1秒,3-4字节表示锁存周期 //m_cSendData[4] = 0xE8; - //m_cSendData[3] = 0x01; // 10000 0x27 0x10Ӧ1룬3-4ֽڱʾ + //m_cSendData[3] = 0x01; // 10000 (0x27 0x10)对应1秒,3-4字节表示锁存周期 //m_cSendData[4] = 0xF4; - // 10000 0x27 0x10Ӧ1룬3-4ֽڱʾ + // 10000 (0x27 0x10)对应1秒,3-4字节表示锁存周期 m_cSendData[3] = (m_axisLatchFrequency >> 8) & 0xFF; m_cSendData[4] = m_axisLatchFrequency & 0xFF; m_WriteByte = Send_Command(0, (const char*)m_cSendData, 5, 2); @@ -820,7 +820,7 @@ HSI_STATUS HSI_Motion::Startup(HWND _hWnd, bool _bOfflineOnly) //=========================================================================== /** - * \brief ȡEF3̼汾 + * \brief 获取EF3固件版本 * \param version * \return */ @@ -855,7 +855,7 @@ HSI_STATUS HSI_Motion::GetFirmwareVersion(byte* version) if (waite_count > 100) { waite_count = 0; - m_WriteByte = Send_Command(0, (const char*)senddata, 2, 20); //ٴطȴӦ + m_WriteByte = Send_Command(0, (const char*)senddata, 2, 20); //再次重发,并等待回应 while ((m_SO7_Serial.m_RecvData[0] != 0x32) && (m_SO7_Serial.m_RecvData[1] != 0x30)) { waite_count++; @@ -884,13 +884,13 @@ HSI_STATUS HSI_Motion::GetFirmwareVersion(byte* version) g_pLogger->SendAndFlushWithTime(L"[GetFirmwareVersion] EF3 Firmware Version %S\n", version); m_Thread_StateData = HSI_THREAD_RUNNING; - SetEvent(m_hTriggerEventData); //¼hEventʾֵɹ򷵻طֵΪ0 + SetEvent(m_hTriggerEventData); //触发事件,其中hEvent表示句柄,返回值:如果操作成功,则返回非零值,否则为0。 return HSI_STATUS_NORMAL; } //=========================================================================== /** - * \brief ؼ + * \brief 回家 * \param bHomed * \return */ @@ -909,7 +909,7 @@ HSI_STATUS HSI_Motion::HomeMachineOld(bool bHomed) if (g_pHSI_Motion) { g_pLogger->SendAndFlushWithTime(L"[HomeMachine] In\n"); - //жǷҪؼ + //判断是否需要回家 bool home(false); IsHomed(home); if (home == true) @@ -930,11 +930,11 @@ HSI_STATUS HSI_Motion::HomeMachineOld(bool bHomed) if (m_bEmergencyState) { - AfxMessageBox(_T("ͣȫŻȫĻ")); + AfxMessageBox(_T("急停或安全门或安全光幕触发!")); return HSI_STATUS_FAILED; } - //ݵǰλãλã˶ - //ؼҺλ + //根据当前位置,保存位置,求解相对运动 + //回家后,设置正负限位 CurrentHomeMachineState = E_EF3_HOME_ING; int GetHomePos[5] = {0}; if (m_SO7_Serial.m_RecvData[0] == 2) @@ -969,7 +969,7 @@ HSI_STATUS HSI_Motion::HomeMachineOld(bool bHomed) //GetHomePos[4] = (m_SO7_Serial.m_RecvData[13] << 24 | m_SO7_Serial.m_RecvData[14] << 16 | m_SO7_Serial.m_RecvData[15] << 8 | m_SO7_Serial.m_RecvData[16]); } - //ȡλóʼٶȣӼٵȲ + //取消限位,设置初始速度,加减速等参数 if (HSI_STATUS_NORMAL != HomeFindIndex()) { return HSI_STATUS_FAILED; @@ -1015,8 +1015,8 @@ HSI_STATUS HSI_Motion::HomeMachineOld(bool bHomed) m_Thread_State = HSI_THREAD_RUNNING; g_pLogger->SendAndFlushWithTime(L"[HomeMachine] SetPositionXyz\n"); double PrinfMovePos[5] = {0}; - PrinfMovePos[1] = (GetHomePos[1] - SavePos[1]) * m_Resolution[1]; //˶λ - PrinfMovePos[2] = (GetHomePos[2] - SavePos[2]) * m_Resolution[2]; //˶Ŀλúλƶ + PrinfMovePos[1] = (GetHomePos[1] - SavePos[1]) * m_Resolution[1]; //求解相对运动位置 + PrinfMovePos[2] = (GetHomePos[2] - SavePos[2]) * m_Resolution[2]; //相对运动,目标位置和现在位置求移动距离 PrinfMovePos[3] = (GetHomePos[3] - SavePos[3]) * m_Resolution[3]; PrinfMovePos[4] = (GetHomePos[4] - SavePos[4]) * m_Resolution[4]; g_pLogger->SendAndFlushWithTime( @@ -1086,7 +1086,7 @@ HSI_STATUS HSI_Motion::HomeMachine(bool bHomed) if (g_pHSI_Motion && (handleACS != ACSC_INVALID)) { - //жǷҪؼ + //判断是否需要回家 bool home(false); IsHomed(home); if (home == true) @@ -1107,15 +1107,15 @@ HSI_STATUS HSI_Motion::HomeMachine(bool bHomed) if (m_bEmergencyState) { - AfxMessageBox(_T("ͣȫŻȫĻ")); + AfxMessageBox(_T("急停或安全门或安全光幕触发!")); return HSI_STATUS_FAILED; } - CurrentHomeMachineState = E_EF3_HOME_ING; //ڻؼ + CurrentHomeMachineState = E_EF3_HOME_ING; //正在回家中 - // ACS buffer6 ԶؼҶ + //运行 ACS 控制器内 buffer6 自动回家动作 g_pLogger->SendAndFlushWithTime(L"[HomeMachine] RunBuffer 6 \n"); - //ؼҺλ + //回家后,启用正负限位 if (!acsc_RunBuffer(handleACS, ACSC_BUFFER_6, nullptr, ACSC_SYNCHRONOUS)) { g_pLogger->SendAndFlushWithTime(L"[HomeMachine] ACS Run Buffer %d error\n", ACSC_BUFFER_6); @@ -1123,7 +1123,7 @@ HSI_STATUS HSI_Motion::HomeMachine(bool bHomed) return HSI_STATUS_FAILED; } - //ȴ˶ ʽ1 + //等待运动结束 ,方式1 /* acsc_WaitMotionEnd(handleACS, ACSC_AXIS_1, INFINITE); g_pLogger->SendAndFlushWithTime(L"[HomeMachine] X homed\n"); @@ -1133,25 +1133,25 @@ HSI_STATUS HSI_Motion::HomeMachine(bool bHomed) acsc_WaitMotionEnd(handleACS, ACSC_AXIS_4, INFINITE); g_pLogger->SendAndFlushWithTime(L"[HomeMachine] Z homed\n");*/ - //ȴ˶ ʽ2 + //等待运动结束 ,方式2 do { - //ٴζȡؼұ־λϸɻص + //再次读取回家标志位,或者上个动作完成回调 IsHomed(home); Sleep(200); } while (!home); - if (m_IsUseEF3) //EF3湦ܣҪٻؼɺλ + if (m_IsUseEF3) //启用EF3锁存功能,需要再回家完成后,设置锁存板的位置 { - //ؼҺ󣬽λΪ0 + //回家后,将锁存板的位置设置为0 unsigned char m_cSendData[8] = { 0 }; m_cSendData[0] = 0x01; m_cSendData[1] = 0x06; m_WriteByte = Send_Command(0, (const char*)m_cSendData, 2); Sleep(5); - //Flash + //清除锁存板Flash区 m_cSendData[0] = 0x01; m_cSendData[1] = 0x04; m_WriteByte = Send_Command(0, (const char*)m_cSendData, 2); @@ -1159,7 +1159,7 @@ HSI_STATUS HSI_Motion::HomeMachine(bool bHomed) } - //ؼұʾΪ1 + //回家表示改为1 m_Home_Machine_Axis[1] = 1; m_Home_Machine_Axis[0] = 1; m_Home_Machine_Axis[8] = 1; @@ -1188,7 +1188,7 @@ HSI_STATUS HSI_Motion::HomeJog(short AxisNumber, short Dir, bool Wait) //=========================================================================== /** - * \brief ȡλóʼٶȣӼٵȲ + * \brief 取消限位,设置初始速度,加减速等参数 * \return */ HSI_STATUS HSI_Motion::HomeFindIndex() @@ -1208,7 +1208,7 @@ HSI_STATUS HSI_Motion::HomeFindIndex() if (m_Home_Machine_Axis[i] == 1) { AxisTypes = IndexConvertAxis(i); - //Чλ + //无效软限位 m_cSendData[0] = CT_MOTOR; m_cSendData[1] = CT_MOTOR_SET; m_cSendData[2] = AxisTypes; @@ -1342,7 +1342,7 @@ HSI_STATUS HSI_Motion::HomeFindIndex() } if (m_bEmergencyState) { - AfxMessageBox(_T("ͣȫŻȫĻ")); + AfxMessageBox(_T("急停或安全门或安全光幕触发!")); return HSI_STATUS_FAILED; } @@ -1353,7 +1353,7 @@ HSI_STATUS HSI_Motion::HomeFindIndex() sEvenProp.EventType = HSI_EVENT_ERROR; sEvenProp.EventID = HSI_EVENT_MOTION; sEvenProp.EventResponse = HSI_EVENT_RESPONSE_OK; - strcpy_s(sEvenProp.EventData, HSI_MaxStringLength, "ؼҳʱ"); + strcpy_s(sEvenProp.EventData, HSI_MaxStringLength, "回家超时"); EventCallback(sEvenProp); return HSI_STATUS_FAILED; } @@ -1366,23 +1366,23 @@ HSI_STATUS HSI_Motion::HomeFindIndex() bool bHomed = true; if ((m_SO7_Serial.m_RecvData[38] & 0x01) == 0 && m_Home_Machine_Axis[1] == 1) { - /* strcat_s ϵͳİȫ΢ 2005 һϵͳνȫĺм strcat_s ȡ strcat ԭ strcat ûз֤ЧĻߴ磬ֻܼٶ㹻Ҫַ, ײstrcat_sܺܺõĹ*/ - strcat_s(MessageHome, 30, "1"); + /* strcat_s 是系统的安全函数,微软在 2005 后建议用一系统所谓安全的函数,这中间就有 strcat_s 取代了 strcat ,原来 strcat 函数,没有方法来保证有效的缓冲区尺寸,所以它只能假定缓冲足够大来容纳要拷贝的字符串, 容易产生程序崩溃。而strcat_s函数能很好的规避这个问题*/ + strcat_s(MessageHome, 30, "1、"); bHomed = false; } if ((m_SO7_Serial.m_RecvData[38] & 0x02) == 0 && m_Home_Machine_Axis[2] == 1) { - strcat_s(MessageHome, 30, "2"); + strcat_s(MessageHome, 30, "2、"); bHomed = false; } if ((m_SO7_Serial.m_RecvData[38] & 0x04) == 0 && m_Home_Machine_Axis[3] == 1) { - strcat_s(MessageHome, 30, "3"); + strcat_s(MessageHome, 30, "3、"); bHomed = false; } if ((m_SO7_Serial.m_RecvData[38] & 0x08) == 0 && m_Home_Machine_Axis[4] == 1) { - strcat_s(MessageHome, 30, "4"); + strcat_s(MessageHome, 30, "4、"); bHomed = false; } if (!bHomed) @@ -1391,7 +1391,7 @@ HSI_STATUS HSI_Motion::HomeFindIndex() sEvenProp.EventType = HSI_EVENT_ERROR; sEvenProp.EventID = HSI_EVENT_MOTION; sEvenProp.EventResponse = HSI_EVENT_RESPONSE_OK; - strcat_s(MessageHome, 100, "ؼʧ!"); + strcat_s(MessageHome, 100, "轴回家失败!"); strcpy_s(sEvenProp.EventData, HSI_MaxStringLength, MessageHome); EventCallback(sEvenProp); return HSI_STATUS_FAILED; @@ -1445,11 +1445,11 @@ HSI_STATUS HSI_Motion::IsHomedOld(bool& bHomed) g_pLogger->SendAndFlushWithTime(L"[IsHomed] In\n"); short isHomed[5] = {1, 1, 1, 1, 1}; //int Count = 0; - //if (bHomed == true)//λжϾ + //if (bHomed == true)//定位是增大判断精度 //{ // Count = 1000; //} - //ᶼҪؼ + //所有轴都不需要回家 if (m_Home_Machine_Axis[1] == 0 && m_Home_Machine_Axis[2] == 0 && m_Home_Machine_Axis[3] == 0 && m_Home_Machine_Axis[4] == 0) { @@ -1459,7 +1459,7 @@ HSI_STATUS HSI_Motion::IsHomedOld(bool& bHomed) return HSI_STATUS_NORMAL; } - //жǷҪؼ + //判断是否需要回家 int Delay = 0; while (m_SO7_Serial.m_RecvData[0] != 2) { @@ -1514,10 +1514,10 @@ HSI_STATUS HSI_Motion::IsHomed(bool& bHomed) if (g_pHSI_Motion && handleACS != ACSC_INVALID) { g_pLogger->SendAndFlushWithTime(L"[IsHomed] In\n"); - int isHomed[5] = {0, 1, 1, 1, 1}; //ݶֻһؼұ־λȫؼɣûаؼ + int isHomed[5] = {0, 1, 1, 1, 1}; //暂定只有一个回家标志位,即全部回家完成,没有按单个轴回家来看 - //ᶼҪؼ + //所有轴都不需要回家 if (m_Home_Machine_Axis[1] == 0 && m_Home_Machine_Axis[2] == 0 && m_Home_Machine_Axis[3] == 0 && m_Home_Machine_Axis[4] == 0) { @@ -1527,7 +1527,7 @@ HSI_STATUS HSI_Motion::IsHomed(bool& bHomed) return HSI_STATUS_NORMAL; } - // жǷҪؼңȡACSؼұ־λжϱϵǷѾع 1Ѿعң0δع + // 判断是否需要回家,读取ACS控制器回家标志位,来判断本次上电是否已经回过家 , 1:已经回过家,0:未回过家 if (!acsc_ReadInteger(handleACS, ACSC_NONE, "YAW_HOME_DONE", ACSC_NONE, ACSC_NONE, ACSC_NONE, ACSC_NONE, isHomed, nullptr)) @@ -1543,7 +1543,7 @@ HSI_STATUS HSI_Motion::IsHomed(bool& bHomed) g_pLogger->SendAndFlushWithTime(L"[IsHomed] ACS Read YAW_HOME_DONE X:[%d] Y:[%d] Z:[%d]\n", isHomed[0], isHomed[1], isHomed[2]); - //־λ Ѿع + //如果各个轴标志位 已经回过家 if (isHomed[0] == 1 && isHomed[1] == 1 && isHomed[2] == 1 && isHomed[3] == 1) { g_pLogger->SendAndFlushWithTime(L"[IsHomed] E_GTS_HOME_FINISHED\n"); @@ -1617,9 +1617,9 @@ HSI_STATUS HSI_Motion::ZeroPos(bool bZeroPos) //=========================================================================== /** - * \brief JOGģʽ - * \param AxisTypes - * \param Speed ٶȣSpeed > 0 ƶ + * \brief JOG模式 + * \param AxisTypes 单轴 + * \param Speed 速度,Speed > 0 正移动 * \return */ HSI_STATUS HSI_Motion::JogOld(UINT AxisTypes, double Speed) @@ -1650,12 +1650,12 @@ HSI_STATUS HSI_Motion::JogOld(UINT AxisTypes, double Speed) m_cSendData[1] = CT_MOTOR_SET; m_cSendData[2] = AxisTypes; m_cSendData[3] = SOFT_LIMIT_POS_NEG; - m_cSendData[4] = static_cast(m_P_Work_Limit[AxisNumber] / m_Resolution[AxisNumber]) & 0xff; //λ + m_cSendData[4] = static_cast(m_P_Work_Limit[AxisNumber] / m_Resolution[AxisNumber]) & 0xff; //正限位 m_cSendData[5] = (static_cast(m_P_Work_Limit[AxisNumber] / m_Resolution[AxisNumber]) >> 8) & 0xff; m_cSendData[6] = (static_cast(m_P_Work_Limit[AxisNumber] / m_Resolution[AxisNumber]) >> 16) & 0xff; m_cSendData[7] = (static_cast(m_P_Work_Limit[AxisNumber] / m_Resolution[AxisNumber]) >> 24) & 0xff; - m_cSendData[8] = static_cast(m_N_Work_Limit[AxisNumber] / m_Resolution[AxisNumber]) & 0xff; //λ + m_cSendData[8] = static_cast(m_N_Work_Limit[AxisNumber] / m_Resolution[AxisNumber]) & 0xff; //负限位 m_cSendData[9] = (static_cast(m_N_Work_Limit[AxisNumber] / m_Resolution[AxisNumber]) >> 8) & 0xff; m_cSendData[10] = (static_cast(m_N_Work_Limit[AxisNumber] / m_Resolution[AxisNumber]) >> 16) & 0xff; m_cSendData[11] = (static_cast(m_N_Work_Limit[AxisNumber] / m_Resolution[AxisNumber]) >> 24) & 0xff; @@ -1667,7 +1667,7 @@ HSI_STATUS HSI_Motion::JogOld(UINT AxisTypes, double Speed) } else { - //Чλ + //无效软限位 m_cSendData[0] = CT_MOTOR; m_cSendData[1] = CT_MOTOR_SET; m_cSendData[2] = AxisTypes; @@ -1700,7 +1700,7 @@ HSI_STATUS HSI_Motion::JogOld(UINT AxisTypes, double Speed) { if (AxisTypes == AXIS_X && m_motorType & 0x01) { - if (!bJOGDir) // + if (!bJOGDir) //负方向 { RemainPul = static_cast(now_pos[1] / m_Resolution[1]) - static_cast(m_N_Work_Limit[1] / m_Resolution[1]); @@ -1733,7 +1733,7 @@ HSI_STATUS HSI_Motion::JogOld(UINT AxisTypes, double Speed) } else if (AxisTypes == AXIS_Y && m_motorType & 0x02) { - if (!bJOGDir) // + if (!bJOGDir) //负方向 { RemainPul = static_cast(now_pos[2] / m_Resolution[2]) - static_cast(m_N_Work_Limit[2] / m_Resolution[2]); @@ -1766,7 +1766,7 @@ HSI_STATUS HSI_Motion::JogOld(UINT AxisTypes, double Speed) } if (AxisTypes == AXIS_Z && m_motorType & 0x04) { - if (!bJOGDir) // + if (!bJOGDir) //负方向 { RemainPul = static_cast(now_pos[3] / m_Resolution[3]) - static_cast(m_N_Work_Limit[3] / m_Resolution[3]); @@ -1799,7 +1799,7 @@ HSI_STATUS HSI_Motion::JogOld(UINT AxisTypes, double Speed) } if (AxisTypes == AXIS_U && m_motorType & 0x08) { - if (!bJOGDir) // + if (!bJOGDir) //负方向 { RemainPul = static_cast(now_pos[4] / m_Resolution[4]) - static_cast(m_N_Work_Limit[4] / m_Resolution[4]); @@ -1880,7 +1880,7 @@ HSI_STATUS HSI_Motion::JogOld(UINT AxisTypes, double Speed) m_cSendData[0] = CT_MOTOR; if (AxisNumber == 1 || AxisNumber == 2) { - if (!bJOGDir) // + if (!bJOGDir) //方向 { m_cSendData[1] = CT_START_JOG_NEG; } @@ -1891,7 +1891,7 @@ HSI_STATUS HSI_Motion::JogOld(UINT AxisTypes, double Speed) } else { - if (bJOGDir) // + if (bJOGDir) //方向 { m_cSendData[1] = CT_START_JOG_POS; } @@ -1916,7 +1916,7 @@ HSI_STATUS HSI_Motion::Jog(UINT AxisTypes, double Speed) g_pLogger->SendAndFlushWithTime(L"[Jog] Aixs: [%d] SpeedGear: [%lf]\n", AxisTypes, Speed); if (g_pHSI_Motion) { - if (m_DeviceType != 3) //ת豸 + if (m_DeviceType != 3) //非转盘设备 { m_Thread_StateJOGStop = HSI_THREAD_RUNNING; SetEvent(m_hTriggerEventJOGStop); @@ -1928,7 +1928,7 @@ HSI_STATUS HSI_Motion::Jog(UINT AxisTypes, double Speed) int AccCurve(1); int DecCurve(1); int JogSpeed(1); - bool bJOGDir = Speed > 0 ? true : false; //˶ + bool bJOGDir = Speed > 0 ? true : false; //运动方向 jogDirFlag = bJOGDir; @@ -1936,25 +1936,25 @@ HSI_STATUS HSI_Motion::Jog(UINT AxisTypes, double Speed) if (CurrentHomeMachineState == E_EF3_HOME_FINISHED) { - //λ + //软限位 g_pLogger->SendAndFlushWithTime( L"[Jog] Limit Enable, Axis = %d, m_P_Work_Limit = %f,m_N_Work_Limit = %f\n", AxisTypes,m_P_Work_Limit[AxisTypes], m_N_Work_Limit[AxisTypes]); } else { - //Чλ + //无效软限位 g_pLogger->SendAndFlushWithTime(L"[Jog] Limit No Enable\n"); } - //Ƿعж + //是否回过家判断 if (m_Home_Machine_Axis[AxisTypes] == 0) { g_pLogger->SendAndFlushWithTime(L"[Jog] Current Axis[%d] not homed \n", AxisTypes); return rStatus; } - // JOG˶ Ӽ JOG_SPEED_ACC_DEC + //设置 JOG运动参数 加减速 JOG_SPEED_ACC_DEC double now_pos[5] = {0}; double Prf_pos[5] = {0}; double limitpos[4] = {0}; @@ -1968,7 +1968,7 @@ HSI_STATUS HSI_Motion::Jog(UINT AxisTypes, double Speed) //{ // if (AxisTypes == AXIS_X /*&& m_motorType & 0x01*/) // { - // if (!bJOGDir) // + // if (!bJOGDir) //负方向 // { // RemainPul = static_cast(now_pos[1] / m_Resolution[1]) - static_cast(m_N_Work_Limit[1] / // m_Resolution[1]); @@ -2001,7 +2001,7 @@ HSI_STATUS HSI_Motion::Jog(UINT AxisTypes, double Speed) // } // else if (AxisTypes == AXIS_Y /*&& m_motorType & 0x02*/) // { - // if (!bJOGDir) // + // if (!bJOGDir) //负方向 // { // RemainPul = static_cast(now_pos[2] / m_Resolution[2]) - static_cast(m_N_Work_Limit[2] / // m_Resolution[2]); @@ -2034,7 +2034,7 @@ HSI_STATUS HSI_Motion::Jog(UINT AxisTypes, double Speed) // } // if (AxisTypes == AXIS_Z /*&& m_motorType & 0x04*/) // { - // if (!bJOGDir) // + // if (!bJOGDir) //负方向 // { // RemainPul = static_cast(now_pos[3] / m_Resolution[3]) - static_cast(m_N_Work_Limit[3] / // m_Resolution[3]); @@ -2067,19 +2067,19 @@ HSI_STATUS HSI_Motion::Jog(UINT AxisTypes, double Speed) // } //} - //ٶ + //速度限制 JogSpeed = abs(SpeedPercent(AxisTypes, Speed, DriveSpeed, StartSpeed, AccLine, DecLine, AccCurve, DecCurve)); g_pLogger->SendAndFlushWithTime( L"[Jog] Speed: [%d], DriveSpeed: [%d],AccLine: [%d], DecLine: [%d] AccCurve: [%d], DecCurve: [%d],\n", Speed, DriveSpeed, AccLine, DecLine,AccCurve, DecCurve ); - //תʵACSƽ̨ţʼִ + //转到真实ACS平台轴号,并开始执行 byte AxisNumber = static_cast(AxisConvertIndex(AxisTypes)); //Jog - double motionParam[5] = { DriveSpeed,AccLine*10 , DecLine*10, AccCurve,DecCurve }; //ٶȣٶȣٶȣKill, jerk + double motionParam[5] = { DriveSpeed,AccLine*10 , DecLine*10, AccCurve,DecCurve }; //速度,加速度,减速度,Kill, jerk SetSingleAxisMotionParams(AxisNumber, motionParam); - // ͣж + // 急停判断 if ((StartSpeed < 250) && (DriveSpeed < 6)) { m_IsUseJerk = 1; @@ -2091,8 +2091,8 @@ HSI_STATUS HSI_Motion::Jog(UINT AxisTypes, double Speed) g_pLogger->SendAndFlushWithTime(L"[Jog] No Use Jerk\n"); } - //ʹܵ - int Axes[] = { ACSC_AXIS_1, ACSC_AXIS_0, ACSC_AXIS_8, -1 }; //ݵ涨壬0ӦXᣬ1ӦYᣬ8ӦZ + //使能电机 + int Axes[] = { ACSC_AXIS_1, ACSC_AXIS_0, ACSC_AXIS_8, -1 }; //根据电气层面定义,这里的0对应X轴,1对应Y轴,8对应Z轴 if (!acsc_EnableM(handleACS, Axes, nullptr)) { g_pLogger->SendAndFlushWithTime(L"[ACS Motion] ACS Motors Enable Failed!\n"); @@ -2103,16 +2103,16 @@ HSI_STATUS HSI_Motion::Jog(UINT AxisTypes, double Speed) g_pLogger->SendAndFlushWithTime(L"[ACS Motion] ACS Motors Enable Success!\n"); } - //ʼJOG˶ + //开始JOG运动 if (!bJOGDir) { - DriveSpeed = DriveSpeed * (-1); // Negative direction : Using - (minus) velocity //򣬻 + DriveSpeed = DriveSpeed * (-1); // Negative direction : Using - (minus) velocity //正方向,或 负方向 } if (!acsc_Jog(handleACS, 0, AxisNumber, DriveSpeed, nullptr)) { - printf("[Jog] [%d] [%s] ƶʧ", AxisTypes, bJOGDir ? "" : ""); + printf("[Jog] 轴[%d] [%s] 方向移动失败", AxisTypes, bJOGDir ? "正" : "负"); g_pLogger->SendAndFlushWithTime(L"[Jog] failed, Aixs:[%d] JOGDir:[%S]\n", AxisTypes, bJOGDir ? "Positive" : "Negative"); ErrorsHandler(); @@ -2126,7 +2126,7 @@ HSI_STATUS HSI_Motion::Jog(UINT AxisTypes, double Speed) return rStatus; } -//JOGģʽ +//JOG模式 //=========================================================================== HSI_STATUS HSI_Motion::JoyStick(UINT AxisTypes, long Speed) { @@ -2173,7 +2173,7 @@ HSI_STATUS HSI_Motion::JoyStick(UINT AxisTypes, long Speed) } else { - //Чλ + //无效软限位 m_cSendData[0] = CT_MOTOR; m_cSendData[1] = CT_MOTOR_SET; m_cSendData[2] = AxisTypes; @@ -2211,7 +2211,7 @@ HSI_STATUS HSI_Motion::JoyStick(UINT AxisTypes, long Speed) { if (AxisTypes == AXIS_X && m_motorType & 0x01) { - if (!bJOGDir) // + if (!bJOGDir) //负方向 { RemainPul = static_cast(now_pos[1] / m_Resolution[1]) - static_cast(m_N_Work_Limit[1] / m_Resolution[1]); @@ -2244,7 +2244,7 @@ HSI_STATUS HSI_Motion::JoyStick(UINT AxisTypes, long Speed) } else if (AxisTypes == AXIS_Y && m_motorType & 0x02) { - if (!bJOGDir) // + if (!bJOGDir) //负方向 { RemainPul = static_cast(now_pos[2] / m_Resolution[2]) - static_cast(m_N_Work_Limit[2] / m_Resolution[2]); @@ -2277,7 +2277,7 @@ HSI_STATUS HSI_Motion::JoyStick(UINT AxisTypes, long Speed) } if (AxisTypes == AXIS_Z && m_motorType & 0x04) { - if (!bJOGDir) // + if (!bJOGDir) //负方向 { RemainPul = static_cast(now_pos[3] / m_Resolution[3]) - static_cast(m_N_Work_Limit[3] / m_Resolution[3]); @@ -2310,7 +2310,7 @@ HSI_STATUS HSI_Motion::JoyStick(UINT AxisTypes, long Speed) } if (AxisTypes == AXIS_U && m_motorType & 0x08) { - if (!bJOGDir) // + if (!bJOGDir) //负方向 { RemainPul = static_cast(now_pos[4] / m_Resolution[4]) - static_cast(m_N_Work_Limit[4] / m_Resolution[4]); @@ -2391,7 +2391,7 @@ HSI_STATUS HSI_Motion::JoyStick(UINT AxisTypes, long Speed) m_cSendData[0] = CT_MOTOR; if (AxisNumber == 1 || AxisNumber == 2) { - if (!bJOGDir) // + if (!bJOGDir) //方向 { m_cSendData[1] = CT_START_JOG_NEG; } @@ -2402,7 +2402,7 @@ HSI_STATUS HSI_Motion::JoyStick(UINT AxisTypes, long Speed) } else { - if (bJOGDir) // + if (bJOGDir) //方向 { m_cSendData[1] = CT_START_JOG_POS; } @@ -2423,7 +2423,7 @@ HSI_STATUS HSI_Motion::JoyStick(UINT AxisTypes, long Speed) //=========================================================================== /** - * \brief ֹͣJog˶ + * \brief 停止Jog运动 * \return */ HSI_STATUS HSI_Motion::StopJogOld() @@ -2490,7 +2490,7 @@ HSI_STATUS HSI_Motion::StopJog() } unsigned char m_SendJogData[64] = {0}; - //Ƿüͣ + //是否启用急停 /*if (m_IsUseJerk == 0) { m_SendJogData[0] = CT_MOTOR; @@ -2517,7 +2517,7 @@ HSI_STATUS HSI_Motion::StopJog() int Axes[] = {ACSC_AXIS_1, ACSC_AXIS_0, ACSC_AXIS_8, -1}; if (handleACS != ACSC_INVALID) { - if (!acsc_HaltM(handleACS, Axes, nullptr)) //ֹͣJOG˶ + if (!acsc_HaltM(handleACS, Axes, nullptr)) //停止JOG运动 { g_pLogger->SendAndFlushWithTime(L"[StopJog] ACS acsc_HaltM error!\n"); ErrorsHandler(); @@ -2598,10 +2598,10 @@ int HSI_Motion::P2P(short AxisNumber, long Pos, double Speed, double Acc) } //=========================================================================== -//˶Ʋ +//运动控制部分 //=========================================================================== /** - * \brief Աڱλúλ, positionϲõ, HSIڲõEncPrf + * \brief 对比现在编码器位置和期望位置, position给上层用的, HSI内部用的是EncPrf * \param AxisTypes * \param EncPos * \param PrfPos @@ -2754,12 +2754,12 @@ HSI_STATUS HSI_Motion::GetPositionEncPrfMulti(UINT AxisTypes, double* EncPos, do //=========================================================================== /** - * \brief ȡᵱǰ˶λ + * \brief 获取轴当前运动位置 * \param AxisTypes * \param PositionX * \param PositionY * \param PositionZ - * \param Time ʱ + * \param Time 耗时 * \return */ HSI_STATUS HSI_Motion::GetPositionXyzOld(UINT AxisTypes, double& PositionX, double& PositionY, double& PositionZ, @@ -2767,7 +2767,7 @@ HSI_STATUS HSI_Motion::GetPositionXyzOld(UINT AxisTypes, double& PositionX, doub { auto rStatus = HSI_STATUS_NORMAL; UNREFERENCED_PARAMETER(AxisTypes); - //ȡ3λ + //读取3个轴的位置 CString tempStr; if (g_pHSI_Motion) { @@ -2840,14 +2840,14 @@ HSI_STATUS HSI_Motion::GetPositionXyz(UINT AxisTypes, double& PositionX, double& double& Time) { auto rStatus = HSI_STATUS_NORMAL; - //UNREFERENCED_PARAMETER(AxisTypes)˼Ǹ߱ - // AxisTypesʹùˣ𱨾ˣ˶ѡ + //UNREFERENCED_PARAMETER(AxisTypes)的意思就是告诉编译器, + // AxisTypes参数我使用过了,别报警告了,仅此而已。 UNREFERENCED_PARAMETER(AxisTypes); - //ȡ3λ + //读取3个轴的位置 CString tempStr; bool bGetPosition = true; - if (g_pHSI_Motion && (handleACS != ACSC_INVALID)) //Ч + if (g_pHSI_Motion && (handleACS != ACSC_INVALID)) //句柄有效 { if (!acsc_GetFPosition(handleACS, ACSC_AXIS_1, &PositionX, nullptr)) { @@ -2871,12 +2871,12 @@ HSI_STATUS HSI_Motion::GetPositionXyz(UINT AxisTypes, double& PositionX, double& return HSI_ACS_ERROR; } - if (bGetPosition) //ȡɹ + if (bGetPosition) //读取成功 { m_EncPos[1] = PositionX; m_EncPos[2] = PositionY; m_EncPos[3] = PositionZ; - m_EncPos[4] = m_PosForAllAxis[4]; // m_PosForAllAxis ¼4λ + m_EncPos[4] = m_PosForAllAxis[4]; // m_PosForAllAxis 记录4轴位置 m_PosForAllAxis[1] = PositionX; m_PosForAllAxis[2] = PositionY; m_PosForAllAxis[3] = PositionZ; @@ -2885,12 +2885,12 @@ HSI_STATUS HSI_Motion::GetPositionXyz(UINT AxisTypes, double& PositionX, double& // L"[GetPositionEncPrfMulti] GetPosition Success, Pos[1] = %.4f, Pos[2] = %.4f, Pos[3] = %.4f\n", // PositionX, PositionY, PositionZ); } - else //ȡ֮ǰֵз + else //读取将之前的值进行返回 { PositionX = m_EncPos[1]; PositionY = m_EncPos[2]; PositionZ = m_EncPos[3]; - m_PosForAllAxis[1] = m_EncPos[1]; // m_PosForAllAxis ¼4λ + m_PosForAllAxis[1] = m_EncPos[1]; // m_PosForAllAxis 记录4轴位置 m_PosForAllAxis[2] = m_EncPos[2]; m_PosForAllAxis[3] = m_EncPos[3]; m_PosForAllAxis[4] = m_EncPos[4]; @@ -2906,10 +2906,10 @@ HSI_STATUS HSI_Motion::GetPositionXyz(UINT AxisTypes, double& PositionX, double& } //=========================================================================== -HSI_STATUS HSI_Motion::GetEncoderXyz(long* lEncoderVal)//ԭȡֵʹôڻȡEF3Ĺդ߶ +HSI_STATUS HSI_Motion::GetEncoderXyz(long* lEncoderVal)//原读取编码器值使用串口获取EF3的光栅尺读数,待测试 { auto rStatus = HSI_STATUS_NORMAL; - //ȡ3ıֵ + //读取3个轴的编码器值 if (g_pHSI_Motion) { if (m_SO7_Serial.m_RecvData[0] == 2) @@ -2991,7 +2991,7 @@ HSI_STATUS HSI_Motion::GetPositionXyzaProbe(UINT AxisTypes, double& PositionX, d //=========================================================================== /** - * \brief ö˶ָλ + * \brief 设置多轴运动到指定位置 * \param AxisTypes * \param PositionX * \param PositionY @@ -3014,7 +3014,7 @@ HSI_STATUS HSI_Motion::SetPositionXyzOld(UINT AxisTypes, double PositionX, doubl axis_start = 0; unsigned char direct_pos = 0; unsigned char xyzAxis = 0; - //״̬ ˶УΪ˶ + //如果状态非 运动中,设置为运动中 if (CurrentMotionState != E_SO7_MOTION_MOVETO) { CurrentMotionState = E_SO7_MOTION_MOVETO; @@ -3023,7 +3023,7 @@ HSI_STATUS HSI_Motion::SetPositionXyzOld(UINT AxisTypes, double PositionX, doubl LimitOver(HSI_MOTION_AXIS_Z, PositionZ); LimitOver(HSI_MOTION_AXIS_R, m_PositionA); - m_PosThread[1] = PositionX; //SetpositionXyzĿλ + m_PosThread[1] = PositionX; //SetpositionXyz的目标位置 m_PosThread[2] = PositionY; m_PosThread[3] = PositionZ; m_PosThread[4] = m_PositionA; @@ -3041,8 +3041,8 @@ HSI_STATUS HSI_Motion::SetPositionXyzOld(UINT AxisTypes, double PositionX, doubl if (m_SO7_Serial.m_RecvData[0] == 2) { - //豸ͻȡλ - if (m_DeviceType != 1) //豸ͷ + //根据设备类型获取现在位置 + if (m_DeviceType != 1) //设备类型非三激光 { if (m_IsHavePattern & 0x01 == 0x01) NowPos[1] = (m_SO7_Serial.m_RecvData[1] << 24 | m_SO7_Serial.m_RecvData[2] << 16 | m_SO7_Serial. @@ -3096,27 +3096,27 @@ HSI_STATUS HSI_Motion::SetPositionXyzOld(UINT AxisTypes, double PositionX, doubl } else { - /* ʽִеκתstatic_castʽɡ - static_castöתͣתɸ*/ + /* 编译器隐式执行的任何类型转换都可以由static_cast显式完成。 + static_cast可以用来将枚举类型转换成整型,或者整型转换成浮点型*/ Pos_t[1] = NowPos[1] = static_cast(m_EncPos[1] / m_Resolution[1]); Pos_t[2] = NowPos[2] = static_cast(m_EncPos[2] / m_Resolution[2]); Pos_t[3] = NowPos[3] = static_cast(m_EncPos[3] / m_Resolution[3]); Pos_t[4] = NowPos[4] = static_cast(m_EncPos[4] / m_Resolution[4]); } - if (m_motorType & 0x01) // + if (m_motorType & 0x01) //步进电机 Pos[1] = static_cast(PositionX / m_Resolution[1]) - NowPos[1]; else Pos[1] = static_cast(PositionX / m_Resolution[1]) - Pos_t[1]; - if (m_motorType & 0x02) // + if (m_motorType & 0x02) //步进电机 Pos[2] = static_cast(PositionX / m_Resolution[2]) - NowPos[2]; else Pos[2] = static_cast(PositionY / m_Resolution[2]) - Pos_t[2]; - if (m_motorType & 0x04) // + if (m_motorType & 0x04) //步进电机 Pos[3] = static_cast(PositionX / m_Resolution[3]) - NowPos[3]; else Pos[3] = static_cast(PositionZ / m_Resolution[3]) - Pos_t[3]; - if (m_motorType & 0x08) // + if (m_motorType & 0x08) //步进电机 Pos[4] = static_cast(PositionX / m_Resolution[4]) - NowPos[4]; else Pos[4] = static_cast(m_PositionA / m_Resolution[4]) - Pos_t[4]; @@ -3171,12 +3171,12 @@ HSI_STATUS HSI_Motion::SetPositionXyzOld(UINT AxisTypes, double PositionX, doubl Pos[4] = (int)(m_PositionA / m_Resolution[4]) - NowPos[4]; } }*/ - target_pos[1] = static_cast(PositionX / m_Resolution[1]); //㵽Ŀλ + target_pos[1] = static_cast(PositionX / m_Resolution[1]); //计算到目标位置 target_pos[2] = static_cast(PositionY / m_Resolution[2]); target_pos[3] = static_cast(PositionZ / m_Resolution[3]); target_pos[4] = static_cast(m_PositionA / m_Resolution[4]); - begin_position[1] = target_pos[1]; //ĿλΪ ʼλ + begin_position[1] = target_pos[1]; //将目标位置设置为 开始位置 begin_position[2] = target_pos[2]; begin_position[3] = target_pos[3]; begin_position[4] = target_pos[4]; @@ -3340,7 +3340,7 @@ HSI_STATUS HSI_Motion::SetPositionXyzOld(UINT AxisTypes, double PositionX, doubl //} int axisCount = 4; - if (fourthAxisFlag) //4 + if (fourthAxisFlag) //第4轴 { fourthAxisFlag = false; if (Pos[4] > 0) direct_pos |= 0x08; @@ -3351,7 +3351,7 @@ HSI_STATUS HSI_Motion::SetPositionXyzOld(UINT AxisTypes, double PositionX, doubl else xyzAxis = AXIS_XYZ; - //˶ + //设置运动参数 for (int i = 1; i < axisCount; i++) { int time_out_send = 0; @@ -3446,7 +3446,7 @@ HSI_STATUS HSI_Motion::SetPositionXyzOld(UINT AxisTypes, double PositionX, doubl Sleep(6); } - //λ + //清除缓存位置 while (m_SO7_Serial.m_RecvData[39]) { send_pos_data[0] = CT_ORDER; @@ -3456,7 +3456,7 @@ HSI_STATUS HSI_Motion::SetPositionXyzOld(UINT AxisTypes, double PositionX, doubl } Sleep(10); - //岹Ͷλ + //启动插补和定位功能 /* if (m_motorType == 1) { send_pos_data[0] = CT_MOTOR; @@ -3514,7 +3514,7 @@ HSI_STATUS HSI_Motion::SetPositionXyzOld(UINT AxisTypes, double PositionX, doubl send_pos_data[40] = Stepdriverspeed[4] & 0xff; - if (bCircleRun) //Բ岹 + if (bCircleRun) //圆弧插补 { bCircleRun = false; send_pos_data[1] = CT_CIRCLERUN_POSITION; @@ -3580,11 +3580,11 @@ HSI_STATUS HSI_Motion::SetPositionXyz(UINT AxisTypes, double PositionX, double P axis_start = 0; unsigned char direct_pos = 0; unsigned char xyzAxis = 0; - if (CurrentMotionState != E_SO7_MOTION_MOVETO) //ǰ˶״̬ + if (CurrentMotionState != E_SO7_MOTION_MOVETO) //当前运动状态 { CurrentMotionState = E_SO7_MOTION_MOVETO; - //λ + //限位功能 LimitOver(HSI_MOTION_AXIS_X, PositionX); LimitOver(HSI_MOTION_AXIS_Y, PositionY); LimitOver(HSI_MOTION_AXIS_Z, PositionZ); @@ -3593,17 +3593,17 @@ HSI_STATUS HSI_Motion::SetPositionXyz(UINT AxisTypes, double PositionX, double P L"[SetPositionXyz] LimitOver, PositionX = %.4f, PositionY = %.4f, PositionZ = %.4f, m_PositionA = %.4f\n", PositionX, PositionY, PositionZ, m_PositionA); - //SetpositionXyzĿλ + //SetpositionXyz的目标位置 m_PosThread[1] = PositionX; m_PosThread[2] = PositionY; m_PosThread[3] = PositionZ; m_PosThread[4] = m_PositionA; - //Ŀλ + //目标位置 g_pLogger->SendAndFlushWithTime(L"[SetPositionXyz] PositionX = %.4f, PositionY = %.4f, PositionZ = %.4f\n", PositionX,PositionY, PositionZ); - //ٶȣӦļжλϳٶ SET_POTION_DRIVESPEED_1 + //设置速度,对应配置文件中定位合成速度 SET_POTION_DRIVESPEED_1 g_pLogger->SendAndFlushWithTime(L"[SetPositionXyz] DriveSpeed[0] = %.4f, DriveSpeed[1] = %.4f, DriveSpeed[2] = %.4f, DriveSpeed[3] = %.4f, DriveSpeed[4] = %.4f\n", m_SetPotion_DriveSpeed[0], m_SetPotion_DriveSpeed[1], m_SetPotion_DriveSpeed[2], m_SetPotion_DriveSpeed[3], m_SetPotion_DriveSpeed[4]); @@ -3616,7 +3616,7 @@ HSI_STATUS HSI_Motion::SetPositionXyz(UINT AxisTypes, double PositionX, double P 0 }; - SetSingleAxisMotionParams(ACSC_AXIS_1, X_SetmotionParam);//Xᶨλٶ + SetSingleAxisMotionParams(ACSC_AXIS_1, X_SetmotionParam);//设置X轴定位速度 double Y_SetmotionParam[5] = { m_SetPotion_DriveSpeed[2], @@ -3627,7 +3627,7 @@ HSI_STATUS HSI_Motion::SetPositionXyz(UINT AxisTypes, double PositionX, double P }; - SetSingleAxisMotionParams(ACSC_AXIS_0, Y_SetmotionParam);//Yᶨλٶ + SetSingleAxisMotionParams(ACSC_AXIS_0, Y_SetmotionParam);//设置Y轴定位速度 double Z_SetmotionParam[5] = { m_SetPotion_DriveSpeed[3], @@ -3637,11 +3637,11 @@ HSI_STATUS HSI_Motion::SetPositionXyz(UINT AxisTypes, double PositionX, double P 0 }; - SetSingleAxisMotionParams(ACSC_AXIS_8, Z_SetmotionParam);//Zᶨλٶ + SetSingleAxisMotionParams(ACSC_AXIS_8, Z_SetmotionParam);//设置Z轴定位速度 - //ʹܵ - int Axes[] = { ACSC_AXIS_1, ACSC_AXIS_0, ACSC_AXIS_8, -1 }; //ݵ涨壬0ӦXᣬ1ӦYᣬ8ӦZ + //使能电机 + int Axes[] = { ACSC_AXIS_1, ACSC_AXIS_0, ACSC_AXIS_8, -1 }; //根据电气层面定义,这里的0对应X轴,1对应Y轴,8对应Z轴 if (!acsc_EnableM(handleACS, Axes, nullptr)) { g_pLogger->SendAndFlushWithTime(L"[ACS Motion] ACS Motors Enable Failed!\n"); @@ -3652,17 +3652,17 @@ HSI_STATUS HSI_Motion::SetPositionXyz(UINT AxisTypes, double PositionX, double P g_pLogger->SendAndFlushWithTime(L"[ACS Motion] ACS Motors Enable Success!\n"); } - //ʼ˶ָλã˶ - double Points[] = {PositionX, PositionY, PositionZ}; //Ŀλõ - if (!acsc_ToPointM(handleACS, 0, Axes, Points, nullptr)) //ƶλ + //开始运动到指定位置,多轴运动 + double Points[] = {PositionX, PositionY, PositionZ}; //目标位置点 + if (!acsc_ToPointM(handleACS, 0, Axes, Points, nullptr)) //移动到绝对位置 { g_pLogger->SendAndFlushWithTime(L"[SetPositionXyz] ACS Multi Motion Error\n"); ErrorsHandler(); } - //״̬ - if (eType == HSI_MOTION_MOVE_NOWAIT) //ǵȴ + //状态更新 + if (eType == HSI_MOTION_MOVE_NOWAIT) //非等待 { g_pLogger->SendAndFlushWithTime(L"[SetPositionXyz] Nowait SetEvent\n"); g_pLogger->SendAndFlushWithTime(L"[SetPositionXyz] Nowait move!\n"); @@ -3673,7 +3673,7 @@ HSI_STATUS HSI_Motion::SetPositionXyz(UINT AxisTypes, double PositionX, double P SetEvent(m_hTriggerEvent); } - if (eType == HSI_MOTION_MOVE_WAIT) //ȴģʽ + if (eType == HSI_MOTION_MOVE_WAIT) //等待模式 { g_pLogger->SendAndFlushWithTime(L"[SetPositionXyz] Out Success Wait Mode\n"); m_Thread_State = HSI_THREAD_RUNNING; @@ -3710,25 +3710,25 @@ int HSI_Motion::CaculateStepMotorACC(int pos, int maxacc, int minacc) } //=========================================================================== -//&һͨ - ݣȡĵַ +//&符号用来处理一个变量,但不是通常的 - 访问这个变量的内容,而是取出这个变量的地址 // -//int* bʱbһָintռָ룬Ҳ˵һδĵַ -//int* ֻ壬ıһַͨοռ +//int* b;此时b是一个指向int空间的指针,也就是说它是一个未分配的地址 +//int* 只用来定义,定义的变量是一个地址(索引),可以通过这个变量来对这段空间操作 // -// & ǶһѴڵıȡַȡַַ֮ͬͨ +//而 & 是对一个已存在的变量取地址,取完地址之后同样可以通过地址操作 // -//* xҵxַıȡֵ * & Ƿ & xõxĵַ * * xõxֵx -// -//ȨΪCSDNnick__huangԭ£ѭCC 4.0 BY - SAȨЭ飬ת븽ԭijӼ -//ԭӣhttps ://blog.csdn.net/u012610237/article/details/58599083 +//* x是找到x地址的变量,取它的值,所以 * 和 & 是反操作, & x得到x的地址 * , * x得到x的值x +//———————————————— +//版权声明:本文为CSDN博主「nick__huang」的原创文章,遵循CC 4.0 BY - SA版权协议,转载请附上原文出处链接及本声明。 +//原文链接:https ://blog.csdn.net/u012610237/article/details/58599083 -//void func3(void); //ȫֱ -//void func2(uchar* s); //ָ뷵 -//uchar* func1(); //ָ뺯 -//void func0(uchar*& r); //÷ +//void func3(void); //利用全局变量返回数组 +//void func2(uchar* s); //利用指针返回数组 +//uchar* func1(); //利用指针函数返回数组 +//void func0(uchar*& r); //利用引用返回数组 /** - * \brief ȡ˶ + * \brief 获取单轴运动参数 * \param AXIS * \param motionParam * \return @@ -3740,35 +3740,35 @@ HSI_STATUS HSI_Motion::GetSingleAxisParam(int AXIS, double motionParam[5]) { g_pLogger->SendAndFlushWithTime(L"[GetSingleAxisParam] In\n"); - // ٶ + //依次是 速度 if (!acsc_GetVelocity(handleACS, AXIS, motionParam + 0, nullptr)) { g_pLogger->SendAndFlushWithTime(L"[GetSingleAxisParam] acsc_GetVelocity error\n"); rStatus = HSI_ACS_ERROR; ErrorsHandler(); } - // ٶ + // 加速度 if (!acsc_GetAcceleration(handleACS, AXIS, motionParam + 1, nullptr)) { g_pLogger->SendAndFlushWithTime(L"[GetSingleAxisParam] acsc_GetAcceleration error\n"); rStatus = HSI_ACS_ERROR; ErrorsHandler(); } - //١ + //减速、 if (!acsc_GetDeceleration(handleACS, AXIS, motionParam + 2, nullptr)) { g_pLogger->SendAndFlushWithTime(L"[GetSingleAxisParam] acsc_GetDeceleration error\n"); rStatus = HSI_ACS_ERROR; ErrorsHandler(); } - // ɱٶ + // 杀死速度 if (!acsc_GetKillDeceleration(handleACS, AXIS, motionParam + 3, nullptr)) { g_pLogger->SendAndFlushWithTime(L"[GetSingleAxisParam] acsc_GetKillDeceleration error\n"); rStatus = HSI_ACS_ERROR; ErrorsHandler(); } - // + //抖动 if (!acsc_GetJerk(handleACS, AXIS, motionParam + 4, nullptr)) { g_pLogger->SendAndFlushWithTime(L"[GetSingleAxisParam] acsc_GetJerk error\n"); @@ -3789,35 +3789,35 @@ HSI_STATUS HSI_Motion::SetSingleAxisParam(int AXIS, double motionParam[5]) { g_pLogger->SendAndFlushWithTime(L"[SetSingleAxisParam] In\n"); - // ٶ + //依次是 速度 if (!acsc_SetVelocity(handleACS, AXIS, motionParam[0], nullptr)) { g_pLogger->SendAndFlushWithTime(L"[SetSingleAxisParam] acsc_SetVelocity error\n"); rStatus = HSI_ACS_ERROR; ErrorsHandler(); } - // ٶ + // 加速度 if (!acsc_SetAcceleration(handleACS, AXIS, motionParam[1], nullptr)) { g_pLogger->SendAndFlushWithTime(L"[SetSingleAxisParam] acsc_SetAcceleration error\n"); rStatus = HSI_ACS_ERROR; ErrorsHandler(); } - //ٶ + //减速度 if (!acsc_SetDeceleration(handleACS, AXIS, motionParam[2], nullptr)) { g_pLogger->SendAndFlushWithTime(L"[SetSingleAxisParam] acsc_SetDeceleration error\n"); rStatus = HSI_ACS_ERROR; ErrorsHandler(); } - //// ɱٶ + //// 杀死速度 //if (!acsc_SetKillDeceleration(handleACS, AXIS, motionParam[3], nullptr)) //{ // g_pLogger->SendAndFlushWithTime(L"[SetSingleAxisParam] acsc_SetKillDeceleration error\n"); // rStatus = HSI_ACS_ERROR; // ErrorsHandler(); //} - //// + ////抖动 //if (!acsc_SetJerk(handleACS, AXIS, motionParam[4], nullptr)) //{ // g_pLogger->SendAndFlushWithTime(L"[SetSingleAxisParam] acsc_SetJerk error\n"); @@ -3860,7 +3860,7 @@ HSI_STATUS HSI_Motion::SetPositionXyzCache(UINT AxisTypes, HSI_MOTION_MOVE_TYPE //=========================================================================== /** - * \brief ȡ + * \brief 获取缓存点 * \param CacheData * \param DataCount * \return @@ -3874,44 +3874,44 @@ HSI_STATUS HSI_Motion::GetPositionXyzCache(unsigned char* CacheData, int& DataCo if (m_SO7_Serial.IsOpen()) { - //ͻȡ 0x01 0x05 + //发送获取点数量命令 0x01 0x05 unsigned char m_cSendData[8] = {0}; m_cSendData[0] = 0x01; m_cSendData[1] = 0x05; - m_WriteByte = Send_Command(0, (const char*)m_cSendData, 2, 8); //ظ8ֽڣ 4-7ֽΪ + m_WriteByte = Send_Command(0, (const char*)m_cSendData, 2, 8); //期望回复8个字节,其中 4-7字节为点数量 - // + //解析缓存点数量 if (m_SO7_Serial.m_iRecvState) { - //֡ͷ, ʾΪظ + //特殊帧头, 表示该内容为回复点数 if ((m_SO7_Serial.m_RecvData[0] == 0x01) && (m_SO7_Serial.m_RecvData[1] == 0x1B) && (m_SO7_Serial. m_iRecvBytes == 8)) { DataCount = (m_SO7_Serial.m_RecvData[4] << 24 | m_SO7_Serial.m_RecvData[5] << 16 | m_SO7_Serial. m_RecvData[6] << 8 | m_SO7_Serial.m_RecvData[7]); - //ϸ https://blog.csdn.net/hebbely/article/details/79577880 - g_pLogger->SendAndFlushWithTime(L"[GetPositionXyzCache] DataCount%d, %s\n", DataCount, + //详细 https://blog.csdn.net/hebbely/article/details/79577880 + g_pLogger->SendAndFlushWithTime(L"[GetPositionXyzCache] DataCount:%d, %s\n", DataCount, m_SO7_Serial.HexToStr((const char*)m_SO7_Serial.m_RecvData, 8)); } - else //ѯʧ + else //查询失败 { - g_pLogger->SendAndFlushWithTime(L"[GetPositionXyzCache] DataCount%d, %s\n", DataCount, + g_pLogger->SendAndFlushWithTime(L"[GetPositionXyzCache] DataCount:%d, %s\n", DataCount, m_SO7_Serial.HexToStr((const char*)m_SO7_Serial.m_RecvData, 8)); } } - //ȡ㣬 + //读取锁存点,给出期望结果 m_cSendData[0] = 0x01; m_cSendData[1] = 0x09; m_WriteByte = Send_Command(0, (const char*)m_cSendData, 2, DataCount * 12); Sleep(100); - //ȡֽÿռ12ֽ + //读取点的字节数,每个点占用12个字节 if (m_SO7_Serial.m_iRecvBytes != (DataCount * 12)) { m_SO7_Serial.m_RecvData[0] = 0xff; - memcpy(CacheData, m_SO7_Serial.m_RecvData, m_SO7_Serial.m_iRecvBytes); // + memcpy(CacheData, m_SO7_Serial.m_RecvData, m_SO7_Serial.m_iRecvBytes); //返回内容 g_pLogger->SendAndFlushWithTime(L"[GetPositionXyzCache] m_iRecvBytes: %d != Points: %d\n", m_SO7_Serial.m_iRecvBytes, DataCount * 12); rStatus = HSI_STATUS_FAILED; @@ -3919,12 +3919,12 @@ HSI_STATUS HSI_Motion::GetPositionXyzCache(unsigned char* CacheData, int& DataCo else { m_SO7_Serial.m_RecvData[0] = 0xff; - memcpy(CacheData, m_SO7_Serial.m_RecvData, m_SO7_Serial.m_iRecvBytes); // + memcpy(CacheData, m_SO7_Serial.m_RecvData, m_SO7_Serial.m_iRecvBytes); //返回内容 - DataCount = m_SO7_Serial.m_iRecvBytes ; //ص + DataCount = m_SO7_Serial.m_iRecvBytes ; //返回点数 g_pLogger->SendAndFlushWithTime(L"[GetPositionXyzCache] m_iRecvBytes ok, Points: %d\n", m_SO7_Serial.m_iRecvBytes); - m_SO7_Serial.m_iRecvState = FALSE; //ձ־ + m_SO7_Serial.m_iRecvState = FALSE; //将接收标志重置 rStatus = HSI_STATUS_NORMAL; } } @@ -3941,7 +3941,7 @@ HSI_STATUS HSI_Motion::GetPositionXyzCache(unsigned char* CacheData, int& DataCo //=========================================================================== /** - * \brief Բ岹 + * \brief 圆弧插补 * \param PositionX * \param PositionY * \param PositionZ @@ -3964,7 +3964,7 @@ HSI_STATUS HSI_Motion::SetCircleInterpolate(double PositionX, double PositionY, //=========================================================================== /** - * \brief ̽ӿ + * \brief 探针接口 * \param RetractManDist */ void HSI_Motion::ProbeRetractManDist(int RetractManDist) @@ -4100,7 +4100,7 @@ HSI_STATUS HSI_Motion::JogProbe(UINT AxisTypes, double Speed) //=========================================================================== /** - * \brief ȡ + * \brief 读取配置 * \param GoogolIniFile * \return */ @@ -4114,7 +4114,7 @@ HSI_STATUS HSI_Motion::Load_EF3_Motion_Inifile(CString GoogolIniFile) CString temp = L""; CString strGear[5] = {L"GEAR0_", L"GEAR1_", L"GEAR2_", L"GEAR3_", L"GEAR4_"}; CString axisNum[5] = {L"0", L"1", L"2", L"3", L"4"}; - //жLogĿ¼Ƿڣھʹ + //判断Log目录是否存在,不存在就创建 if (CreateDirectory(m_AppPath + L"\\Log", nullptr)) { g_pLogger->SendAndFlushWithTime(L"[Load_EF3_Motion_Inifile] Create Log Directory\n"); @@ -4127,7 +4127,7 @@ HSI_STATUS HSI_Motion::Load_EF3_Motion_Inifile(CString GoogolIniFile) sEvenProp.EventType = HSI_EVENT_ERROR; sEvenProp.EventID = HSI_EVENT_MOTION; sEvenProp.EventResponse = HSI_EVENT_RESPONSE_OK; - strcpy_s(sEvenProp.EventData, HSI_MaxStringLength, "EF3_Motion.iniļڣ"); + strcpy_s(sEvenProp.EventData, HSI_MaxStringLength, "EF3_Motion.ini文件不存在!"); EventCallback(sEvenProp); return HSI_STATUS_FAILED; } @@ -4135,27 +4135,27 @@ HSI_STATUS HSI_Motion::Load_EF3_Motion_Inifile(CString GoogolIniFile) for (int i = 1; i < 5; i++) { m_precisionCount[i] = - GetPrivateProfileInt(L"PRECISION", L"PRECISION_COUNT_" + axisNum[i], 14000, csAppPath); //ؼ + GetPrivateProfileInt(L"PRECISION", L"PRECISION_COUNT_" + axisNum[i], 14000, csAppPath); //回家误差脉冲个数 m_precisionTime[i] = static_cast(GetPrivateProfileInt(L"PRECISION", L"PRECISION_TIME_" + axisNum[i], 14000, - csAppPath)); //ʱʱ(0.1ms) + csAppPath)); //超时时间(0.1ms) GetPrivateProfileString(L"RESOLUTION", L"SCALE_RESOLUTION_" + axisNum[i], L"0.0004", temp.GetBufferSetLength(50), 50, csAppPath); - m_Resolution[i] = (atof(T2A(temp)));//ֱ + m_Resolution[i] = (atof(T2A(temp)));//分辨率 GetPrivateProfileString(L"LIMIT", L"NEG_WORKING_LIMIT_" + axisNum[i], L"-40", temp.GetBufferSetLength(50), 50, csAppPath); - m_N_Work_Limit[i] = (atof(T2A(temp))); //Ḻλ + m_N_Work_Limit[i] = (atof(T2A(temp))); //各轴负限位 GetPrivateProfileString(L"LIMIT", L"POS_WORKING_LIMIT_" + axisNum[i], L"160", temp.GetBufferSetLength(50), 50, csAppPath); - m_P_Work_Limit[i] = (atof(T2A(temp)));//λ + m_P_Work_Limit[i] = (atof(T2A(temp)));//各轴正限位 - //ӡλ + //打印正负限位 g_pLogger->SendAndFlushWithTime(L"[Load_EF3_Motion_Inifile] m_N_Work_Limit[%d]: %.2f, m_P_Work_Limit[%d]: %.2f\n", i, m_N_Work_Limit[i], i, m_P_Work_Limit[i]); m_Home_Time[i] = static_cast(GetPrivateProfileInt(L"HOME", L"HOME_TIME_" + axisNum[i], 1500, - csAppPath)); //ؼҳʱʱ(0.1ms) + csAppPath)); //回家超时时间(0.1ms) m_Home_AddJogGears[i] = GetPrivateProfileInt(L"HOME", L"HOME_ADD_JOGCHOICE_" + axisNum[i], 100, csAppPath); m_Home_DecJogGears[i] = GetPrivateProfileInt(L"HOME", L"HOME_DEC_JOGCHOICE_" + axisNum[i], 100, csAppPath); m_SetPotion_Count[i] = GetPrivateProfileInt(L"SET_POSITION_SPEED", L"SET_POSITION_COUNT_" + axisNum[i], 10, @@ -4163,7 +4163,7 @@ HSI_STATUS HSI_Motion::Load_EF3_Motion_Inifile(CString GoogolIniFile) m_SetPotion_DriveSpeed[i] = GetPrivateProfileInt(L"SET_POSITION_SPEED", L"SET_POTION_DRIVESPEED_" + axisNum[i], 100, csAppPath); //m_SetPotion_DriveSpeed[i] = m_SetPotion_DriveSpeed[i] / (m_Resolution[i] * 50); - //ӡλϳٶ + //打印定位合成速度 g_pLogger->SendAndFlushWithTime(L"[Load_EF3_Motion_Inifile] m_SetPotion_DriveSpeed[%d]: %d\n", i, m_SetPotion_DriveSpeed[i]); @@ -4182,19 +4182,19 @@ HSI_STATUS HSI_Motion::Load_EF3_Motion_Inifile(CString GoogolIniFile) csAppPath); m_SpeedMax[i] = GetPrivateProfileInt(L"SET_POSITION_SPEED", L"SPEED_RUNMAX_" + axisNum[i], 150, csAppPath); } - for (int i = 0; i < 5; i++) // i + for (int i = 0; i < 5; i++) // i 轴 { - for (int j = 1; j < 5; j++) //j λ + for (int j = 1; j < 5; j++) //j 档位 { GetPrivateProfileString(L"JOG_SPEED", L"JOG_DRIVESPEED_" + strGear[i] + axisNum[j], L"10", temp.GetBufferSetLength(50), 10, csAppPath); float speed = (atof(T2A(temp))); - //printf("spedd:%.2F %S\n",speed, L"JOG_DRIVESPEED_" + strGear[i] + axisNum[j]); //Դӡ + //printf("spedd:%.2F %S\n",speed, L"JOG_DRIVESPEED_" + strGear[i] + axisNum[j]); //调试打印 /*m_JogDriveSpeed[j][i] = GetPrivateProfileInt(L"JOG_SPEED", L"JOG_DRIVESPEED_" , 10, csAppPath);*/ - //m_JogDriveSpeed[j][i] = speed / (m_Resolution[j] * 50);//ٶתΪ - m_JogDriveSpeed[j][i] = speed; //ֱӶȡٶ + //m_JogDriveSpeed[j][i] = speed / (m_Resolution[j] * 50);//速度转换为脉冲 + m_JogDriveSpeed[j][i] = speed; //直接读取速度 g_pLogger->SendAndFlushWithTime(L"[Load_EF3_Motion_Inifile] m_JogDriveSpeed[%d][%d]: %ld %ld\n", i, j, - speed, m_JogDriveSpeed[j][i]); //ӡļ λٶ + speed, m_JogDriveSpeed[j][i]); //打印配置文件 档位速度 GetPrivateProfileString(L"JOG_SPEED", L"JOG_STARTSPEED_" + strGear[i] + axisNum[j], L"10", temp.GetBufferSetLength(50), 10, csAppPath); @@ -4220,7 +4220,7 @@ HSI_STATUS HSI_Motion::Load_EF3_Motion_Inifile(CString GoogolIniFile) m_setPositionPrecision = GetPrivateProfileInt(L"SETPOSITION", L"SETPPSITION_PRECISION", 1, csAppPath); m_setPositionNum = GetPrivateProfileInt(L"SETPOSITION", L"SETPOSITION_NUMBER", 1, csAppPath); - //·Դ + //两块四路光源板 m_isUseAport = GetPrivateProfileInt(L"COMPORT", L"IS_COM_PORT_A", 0, csAppPath); m_portAnum = GetPrivateProfileInt(L"COMPORT", L"COM_PORT_A", 0, csAppPath); m_isUseBport = GetPrivateProfileInt(L"COMPORT", L"IS_COM_PORT_B", 0, csAppPath); @@ -4304,7 +4304,7 @@ HSI_STATUS HSI_Motion::Load_EF3_Config_Inifile(CString GoogolIniFile) sEvenProp.EventType = HSI_EVENT_ERROR; sEvenProp.EventID = HSI_EVENT_MOTION; sEvenProp.EventResponse = HSI_EVENT_RESPONSE_OK; - strcpy_s(sEvenProp.EventData, HSI_MaxStringLength, "EF3_Config.iniļڣ"); + strcpy_s(sEvenProp.EventData, HSI_MaxStringLength, "EF3_Config.ini文件不存在!"); EventCallback(sEvenProp); return HSI_STATUS_FAILED; } @@ -4337,7 +4337,7 @@ HSI_STATUS HSI_Motion::Load_EF3_Config_Inifile(CString GoogolIniFile) //case 5: // m_axisLatchFrequency = 16000; // break; - //} //Ƶʴ + //} //锁存频率处理 m_IsUseExternalTrigger = GetPrivateProfileInt(L"FUNCTION", L"IS_USEEXTERNALTRIGGER", 1, csAppPath); m_IsUseSixRingEightArea = GetPrivateProfileInt(L"FUNCTION", L"IS_USESIXRINGEIGHTAREA", 0, csAppPath); @@ -4346,18 +4346,18 @@ HSI_STATUS HSI_Motion::Load_EF3_Config_Inifile(CString GoogolIniFile) m_IsCollectPos = GetPrivateProfileInt(L"FUNCTION", L"IS_COLLECT_POS", 0, csAppPath); m_IsLightDebug = GetPrivateProfileInt(L"FUNCTION", L"IS_LIGHT_DEBUG", 0, csAppPath); - m_IsIOFuntion = GetPrivateProfileInt(L"IO", L"IS_IO_FUNTION", 0, csAppPath); //ǷIOܣ1Ϊã0ΪرգĬ0 + m_IsIOFuntion = GetPrivateProfileInt(L"IO", L"IS_IO_FUNTION", 0, csAppPath); //是否启用IO功能,1为启用,0为关闭,默认0 m_IsStartInput = GetPrivateProfileInt(L"IO", L"IS_START_INPUT", 0, csAppPath); m_StartInputPort = GetPrivateProfileInt(L"IO", L"START_INPUT_PORT", 1, csAppPath); - m_IsProbe = GetPrivateProfileInt(L"PROBE", L"IS_PROBE", 0, csAppPath); // Ƿ̽벶ܣ1ãĬ0ر + m_IsProbe = GetPrivateProfileInt(L"PROBE", L"IS_PROBE", 0, csAppPath); // 是否启用探针捕获功能,1启用,默认0关闭 m_ProbeAllAxis = GetPrivateProfileInt(L"PROBE", L"PROBE_All_AXIS", 3, csAppPath); m_ProbeReturnSpeed = GetPrivateProfileInt(L"PROBE", L"PROBE_RETURN_SPEED", 40, csAppPath); m_ProbeReturnSpeed = m_ProbeReturnSpeed * 50; GetPrivateProfileString(L"PROBE", L"PROBE_RETURN_POS", L"10.0", temp.GetBufferSetLength(50), 50, csAppPath); m_ProbeReturnPos = atof(T2A(temp)); - m_IsUseRocker = GetPrivateProfileInt(L"ROCKER", L"IS_USEROCKER", 0, csAppPath); //Ƿҡ˹ 0 1Ϊ ĬΪ0 + m_IsUseRocker = GetPrivateProfileInt(L"ROCKER", L"IS_USEROCKER", 0, csAppPath); //是否启用摇杆功能 0不启用 1为启用 默认为0 m_IsCloseRocker = GetPrivateProfileInt(L"ROCKER", L"IS_CLOSEROCKER", 0, csAppPath); m_bISUseMoreLights = GetPrivateProfileInt(L"IPADDRESS", L"IS_USENUM", 0, csAppPath); @@ -4394,7 +4394,7 @@ HSI_STATUS HSI_Motion::Load_EF3_Config_Inifile(CString GoogolIniFile) //=========================================================================== /** - * \brief ȡ/ùդ߾ + * \brief 读取/设置光栅尺精度 * \param _ScaleX * \param _ScaleY * \param _ScaleZ @@ -4427,20 +4427,20 @@ HSI_STATUS HSI_Motion::SetScaleResolution(double _ScaleX, double _ScaleY, double //=========================================================================== /** - * \brief λ¼ + * \brief 定位完成事件 */ void HSI_Motion::SendMsgMotionFinished() { sEvenProp.Init(); sEvenProp.EventType = HSI_EVENT_FUNCTION; - sEvenProp.EventID = HSI_EVENT_MOVE_POINT; //λ¼ + sEvenProp.EventID = HSI_EVENT_MOVE_POINT; //定位完成事件 sEvenProp.EventResponse = HSI_EVENT_FUNCTION_OK; EventCallback(sEvenProp); } //=========================================================================== /** - * \brief ص̽¼ + * \brief 回调探针运行事件 */ void HSI_Motion::SendMsgProbeFinished() { @@ -4453,7 +4453,7 @@ void HSI_Motion::SendMsgProbeFinished() //=========================================================================== /** - * \brief ˢ˶״̬˶ͨEF3жǷ˶ֹͣеλжϣǷʱŷʽжϣǷʱ˶ɡ + * \brief 刷新运动状态,运动命令发出后,通过EF3板判断是否运动停止,读脉冲数进行到位轴判断(是否超时),欧式距离判断(是否超时),发送运动完成。 */ void HSI_Motion::UpdateMotionState() { @@ -4511,17 +4511,17 @@ void HSI_Motion::UpdateMotionState() g_pLogger->SendAndFlushWithTime(L"[UpdateMotionState] Now wait Run End\n"); printf("\nWaiting for motion end\n"); - acsc_WaitMotionEnd(handleACS, ACSC_AXIS_1, INFINITE);//εȴ X,Y,Z˶λ + acsc_WaitMotionEnd(handleACS, ACSC_AXIS_1, INFINITE);//依次等待 X,Y,Z轴运动到位 acsc_WaitMotionEnd(handleACS, ACSC_AXIS_0, INFINITE); acsc_WaitMotionEnd(handleACS, ACSC_AXIS_8, INFINITE); printf("\nMotion end\n"); - //ؼ + //回家误差 unsigned int tempPrecision[5] = { 0, m_precisionCount[1], m_precisionCount[2], m_precisionCount[3], m_precisionCount[4] }; - //ʱҪԭѡ,ȡؼ + //用于启动时需要回原点的轴号选择,读取回家误差脉冲数 tempPrecision[1] = m_Home_Machine_Axis[1] == 0 ? 10000000 : m_precisionCount[1]; tempPrecision[2] = m_Home_Machine_Axis[2] == 0 ? 10000000 : m_precisionCount[2]; tempPrecision[3] = m_Home_Machine_Axis[3] == 0 ? 10000000 : m_precisionCount[3]; @@ -4534,10 +4534,10 @@ void HSI_Motion::UpdateMotionState() interpolationflag = true; if (interpolationflag && m_motorType) { - while (Count < m_SetPotion_Count[1]) //λж, ļ240 + while (Count < m_SetPotion_Count[1]) //到位次数判断, 读配置文件240 { - Sleep(2); //ʱ2룬1 =1000 - //ȡǰλ + Sleep(2); //延时2毫秒,1秒 =1000 毫秒 + //获取当前位置 GetPositionXyz(HSI_MOTION_AXIS_ALL, prfpos[1], prfpos[2], prfpos[3], prfpos[0]); //-----------TEST Begin------------------ @@ -4546,7 +4546,7 @@ void HSI_Motion::UpdateMotionState() m_PosThread[1], prfpos[1], fabs(m_PosThread[1] - prfpos[1])); //-----------TEST End-------------------- - //Ŀλ ͵ǰλ Сڻؼ + //目标位置 和当前位置 小于回家误差脉冲数 if ((fabs(m_PosThread[1] - prfpos[1]) <= tempPrecision[1] * m_Resolution[1]) && ( fabs(m_PosThread[2] - prfpos[2]) <= tempPrecision[2] * m_Resolution[2]) && ( @@ -4574,7 +4574,7 @@ void HSI_Motion::UpdateMotionState() Count++; //g_pLogger->SendAndFlushWithTime(L"[UpdateMotionState] m_SetPotion_Count = %d\n", Count); } - //if (Count == m_SetPotion_Count[1]) //ʱ˳ + //if (Count == m_SetPotion_Count[1]) //超时退出 //{ // if (g_IsClose == false) // { @@ -4583,7 +4583,7 @@ void HSI_Motion::UpdateMotionState() // sEvenProp.EventType = HSI_EVENT_ERROR; // sEvenProp.EventID = HSI_EVENT_MOTION; // sEvenProp.EventResponse = HSI_EVENT_RESPONSE_OK; - // strcpy_s(sEvenProp.EventData, HSI_MaxStringLength, "Nowait_HSIλʱ!"); + // strcpy_s(sEvenProp.EventData, HSI_MaxStringLength, "Nowait_HSI定位超时!"); // EventCallback(sEvenProp); // } // else @@ -4593,7 +4593,7 @@ void HSI_Motion::UpdateMotionState() //} } - // + //计算距离 if (interpolationflag) { SpCompleteTEnd = GetTickCount(); @@ -4602,7 +4602,7 @@ void HSI_Motion::UpdateMotionState() m_PrfPos[3] - m_EncPos[3], 2.0); if (dis > 0) { - PntToPntDistance = sqrt(dis); //ŷϾ + PntToPntDistance = sqrt(dis); //欧氏距离 } else { @@ -4617,14 +4617,14 @@ void HSI_Motion::UpdateMotionState() L"[UpdateMotionState] Pos[1] = %.4f,Pos[2] = %.4f,Pos[3] = %.4f PntToPntDistance = %.4f\n", prfpos[1], prfpos[2], prfpos[3], PntToPntDistance); - if (timeoutflag) //λʱ + if (timeoutflag) //定位超时 { g_pLogger->SendAndFlushWithTime(L"[UpdateMotionState] Nowait Timeout\n"); sEvenProp.Init(); sEvenProp.EventType = HSI_EVENT_ERROR; sEvenProp.EventID = HSI_EVENT_MOTION; sEvenProp.EventResponse = HSI_EVENT_RESPONSE_OK; - strcpy_s(sEvenProp.EventData, HSI_MaxStringLength, "Nowait_EF3λʱ!"); + strcpy_s(sEvenProp.EventData, HSI_MaxStringLength, "Nowait_EF3定位超时!"); EventCallback(sEvenProp); } switch (CurrentMotionState) @@ -4636,7 +4636,7 @@ void HSI_Motion::UpdateMotionState() m_Thread_State = HSI_THREAD_PAUSED; CurrentMotionState = E_SO7_MOTION_NONE; m_IsExMotion = 2; - SendMsgMotionFinished(); //λ + SendMsgMotionFinished(); //定位完成 break; } default: @@ -4709,7 +4709,7 @@ void HSI_Motion::UpdateMotionStateOld() unsigned int tempPrecision[5] = { 0, m_precisionCount[1], m_precisionCount[2], m_precisionCount[3], m_precisionCount[4] }; - tempPrecision[1] = m_Home_Machine_Axis[1] == 0 ? 10000000 : m_precisionCount[1]; //ʱҪԭѡ,ȡؼ + tempPrecision[1] = m_Home_Machine_Axis[1] == 0 ? 10000000 : m_precisionCount[1]; //用于启动时需要回原点的轴号选择,读取回家误差脉冲数 tempPrecision[2] = m_Home_Machine_Axis[2] == 0 ? 10000000 : m_precisionCount[2]; tempPrecision[3] = m_Home_Machine_Axis[3] == 0 ? 10000000 : m_precisionCount[3]; tempPrecision[4] = m_Home_Machine_Axis[4] == 0 ? 10000000 : m_precisionCount[4]; @@ -4722,11 +4722,11 @@ void HSI_Motion::UpdateMotionStateOld() // double ProPulse[5] = { 0.0 }; if (interpolationflag && m_motorType) { - while (Count < m_SetPotion_Count[1]) //λж + while (Count < m_SetPotion_Count[1]) //到位次数判断 { Sleep(2); GetPositionXyz(HSI_MOTION_AXIS_ALL, prfpos[1], prfpos[2], prfpos[3], prfpos[0]); - //Ŀλ ͵ǰλ Сڻؼ + //目标位置 和当前位置 小于回家误差脉冲数 if ((fabs(m_PosThread[1] - prfpos[1]) <= tempPrecision[1] * m_Resolution[1]) && ( fabs(m_PosThread[2] - prfpos[2]) <= tempPrecision[2] * m_Resolution[2]) && ( fabs(m_PosThread[3] - prfpos[3]) <= tempPrecision[3] * m_Resolution[3]) && (fabs( @@ -4751,9 +4751,9 @@ void HSI_Motion::UpdateMotionStateOld() { } Count++; - g_pLogger->SendAndFlushWithTime(L"[UpdateMotionState] m_SetPotion_Count = %d\n", Count); //ӡλ + g_pLogger->SendAndFlushWithTime(L"[UpdateMotionState] m_SetPotion_Count = %d\n", Count); //打印到位轴数量 } - //if (Count == m_SetPotion_Count[1]) //ʱ˳ + //if (Count == m_SetPotion_Count[1]) //超时退出 //{ // if (g_IsClose == false) // { @@ -4762,7 +4762,7 @@ void HSI_Motion::UpdateMotionStateOld() // sEvenProp.EventType = HSI_EVENT_ERROR; // sEvenProp.EventID = HSI_EVENT_MOTION; // sEvenProp.EventResponse = HSI_EVENT_RESPONSE_OK; - // strcpy_s(sEvenProp.EventData, HSI_MaxStringLength, "Nowait_HSIλʱ!"); + // strcpy_s(sEvenProp.EventData, HSI_MaxStringLength, "Nowait_HSI定位超时!"); // EventCallback(sEvenProp); // } // else @@ -4779,7 +4779,7 @@ void HSI_Motion::UpdateMotionStateOld() m_PrfPos[3] - m_EncPos[3], 2.0); if (dis > 0) { - PntToPntDistance = sqrt(dis); //ŷϾ + PntToPntDistance = sqrt(dis); //欧氏距离 } else { @@ -4792,14 +4792,14 @@ void HSI_Motion::UpdateMotionStateOld() m_PosThread[1], m_PosThread[2], m_PosThread[3]); g_pLogger->SendAndFlushWithTime(L"[UpdateMotionState] Pos[1] = %.4f,Pos[2] = %.4f,Pos[3] = %.4f\n", prfpos[1], prfpos[2], prfpos[3]); - if (timeoutflag) //λʱ + if (timeoutflag) //定位超时 { g_pLogger->SendAndFlushWithTime(L"[UpdateMotionState] Nowait Timeout\n"); sEvenProp.Init(); sEvenProp.EventType = HSI_EVENT_ERROR; sEvenProp.EventID = HSI_EVENT_MOTION; sEvenProp.EventResponse = HSI_EVENT_RESPONSE_OK; - strcpy_s(sEvenProp.EventData, HSI_MaxStringLength, "Nowait_EF3λʱ!"); + strcpy_s(sEvenProp.EventData, HSI_MaxStringLength, "Nowait_EF3定位超时!"); EventCallback(sEvenProp); } switch (CurrentMotionState) @@ -4845,7 +4845,7 @@ void HSI_Motion::UpdateMotionStateIO() UINT recvData = 0; while (m_Thread_StateIO == HSI_THREAD_RUNNING) { - //1̤ + //1个脚踏开关 Sleep(3); GetDIO(HSI_MOTION_INPUT_CH1, m_InputStatus); if (m_IsStartInput == 1) @@ -4920,7 +4920,7 @@ void HSI_Motion::UpdateMotionStateIO() //=========================================================================== /** - * \brief ȡ˶״̬ + * \brief 获取运动状态 */ void HSI_Motion::UpdateMotionStateData() { @@ -5001,17 +5001,17 @@ void HSI_Motion::UpdateMotionStateProbe() void HSI_Motion::DoEvents() { MSG msg; - //GetMessage:ϵͳȡϢϢϵͳƳϵͳϢʱGetMessageȴһϢ + //GetMessage:从系统获取消息,将消息从系统中移除,属于阻塞函数。当系统无消息时,GetMessage会等待下一条消息。 - //PeekMesssgeԲ鿴ķʽϵͳлȡϢԲϢϵͳƳǷ - //ϵͳϢʱFALSEִк + //PeekMesssge是以查看的方式从系统中获取消息,可以不将消息从系统中移除,是非阻塞函数; + //当系统无消息时,返回FALSE,继续执行后续代码 while (PeekMessage(&msg, nullptr, 0, 0, PM_REMOVE)) { __try { - //DispatchMessage ַһϢڳͨϢGetMessageûTranslateMessageݵġ - // Ϣַص̺)Ϣݸϵͳ - // ȻϵͳȥǵĻصҲ˵ڴĹ̺дϢ + //DispatchMessage 函数分发一个消息给窗口程序。通常消息从GetMessage函数获得或者TranslateMessage函数传递的。 + // 消息被分发到回调函数(过程函数),作用是消息传递给操作系统, + // 然后操作系统去调用我们的回调函数,也就是说我们在窗体的过程函数中处理消息。 DispatchMessage(&msg); TranslateMessage(&msg); } @@ -5022,7 +5022,7 @@ void HSI_Motion::DoEvents() sEvenProp.EventType = HSI_EVENT_ERROR; sEvenProp.EventID = HSI_EVENT_MOTION; sEvenProp.EventResponse = HSI_EVENT_RESPONSE_OK; - strcpy_s(sEvenProp.EventData, HSI_MaxStringLength, "DoEvents_쳣"); + strcpy_s(sEvenProp.EventData, HSI_MaxStringLength, "DoEvents_异常"); EventCallback(sEvenProp); } if (g_IsClose) @@ -5105,12 +5105,12 @@ HSI_STATUS HSI_Motion::GetDIOOld(UINT IOChannel, UINT& _Status) { _Status = m_SO7_Serial.m_RecvData[40]; } - if (IOChannel == HSI_MOTION_INPUT_CH1) //ȡͨ + if (IOChannel == HSI_MOTION_INPUT_CH1) //获取通用输入 { _Status = m_SO7_Serial.m_RecvData[34]; _Status = (m_SO7_Serial.m_RecvData[35] | (_Status << 8)) & 0xffff; } - if (IOChannel == HSI_MOTION_OUTPUT_CH1) //ȡͨ + if (IOChannel == HSI_MOTION_OUTPUT_CH1) //获取通用输出 { _Status = m_SO7_Serial.m_RecvData[36]; _Status = (m_SO7_Serial.m_RecvData[37] | (_Status << 8)) & 0xffff; @@ -5159,12 +5159,12 @@ HSI_STATUS HSI_Motion::GetDIO(UINT IOChannel, UINT& _Status) { _Status = m_SO7_Serial.m_RecvData[40]; } - if (IOChannel == HSI_MOTION_INPUT_CH1) //ȡͨ + if (IOChannel == HSI_MOTION_INPUT_CH1) //获取通用输入 { _Status = m_SO7_Serial.m_RecvData[34]; _Status = (m_SO7_Serial.m_RecvData[35] | (_Status << 8)) & 0xffff; } - if (IOChannel == HSI_MOTION_OUTPUT_CH1) //ȡͨ + if (IOChannel == HSI_MOTION_OUTPUT_CH1) //获取通用输出 { _Status = m_SO7_Serial.m_RecvData[36]; _Status = (m_SO7_Serial.m_RecvData[37] | (_Status << 8)) & 0xffff; @@ -5338,10 +5338,10 @@ HSI_STATUS HSI_Motion::GetAxisStatus(int* _Status) //=========================================================================== /** - * \brief ͣ͹ر + * \brief 暂停和关闭 * \return */ -HSI_STATUS HSI_Motion::AbortMotionOld() //Ҫ˶ʵ +HSI_STATUS HSI_Motion::AbortMotionOld() //需要运动实现 { auto rStatus = HSI_STATUS_NORMAL; if (g_pHSI_Motion) @@ -5380,7 +5380,7 @@ HSI_STATUS HSI_Motion::AbortMotionOld() // return rStatus; } -HSI_STATUS HSI_Motion::AbortMotion() //Ҫ˶ʵ +HSI_STATUS HSI_Motion::AbortMotion() //需要运动实现 { auto rStatus = HSI_STATUS_NORMAL; if (g_pHSI_Motion) @@ -5391,7 +5391,7 @@ HSI_STATUS HSI_Motion::AbortMotion() // int Axes[] = {ACSC_AXIS_1, ACSC_AXIS_0, ACSC_AXIS_8, -1}; if (handleACS != ACSC_INVALID) { - if (!acsc_HaltM(handleACS, Axes, nullptr)) //ֹͣJOG˶ + if (!acsc_HaltM(handleACS, Axes, nullptr)) //停止JOG运动 { g_pLogger->SendAndFlushWithTime(L"[AbortMotion] ACS acsc_HaltM error!\n"); ErrorsHandler(); @@ -5404,7 +5404,7 @@ HSI_STATUS HSI_Motion::AbortMotion() // //=========================================================================== /** - * \brief ر + * \brief 关闭 * \return */ HSI_STATUS HSI_Motion::Shutdown() @@ -5472,7 +5472,7 @@ HSI_STATUS HSI_Motion::Shutdown() //=========================================================================== /** - * \brief ƹ + * \brief 触发灯光 * \param triggleNum * \param delayLighting * \param delayLightBefor @@ -5544,7 +5544,7 @@ HSI_STATUS HSI_Motion::SetTriggerLight(int triggleNum, int delayLighting, int de //=========================================================================== /** - * \brief Ӳ + * \brief 硬件触发拍照 * \param startPoint * \return */ @@ -5568,7 +5568,7 @@ HSI_STATUS HSI_Motion::DCCScanSetDataOld(UINT AxisTypes, HSI_SCAN_MOTION_TYPE eT auto rStatus = HSI_STATUS_NORMAL; if (g_pHSI_Motion) { - //λΪλ,÷һƶλãٿʼôλ(λ)յλ + //触发的位置为相对位置,用法一般是移动到起点位置,再开始设置触发位置(相对位置),最终设置终点位置 g_pLogger->SendAndFlushWithTime(L"[DCCScanSetData] In\n"); int axisNum; unsigned char m_SendDCCData[64] = {0}; @@ -5989,7 +5989,7 @@ HSI_STATUS HSI_Motion::DCCScanSetData(UINT AxisTypes, HSI_SCAN_MOTION_TYPE eType auto rStatus = HSI_STATUS_NORMAL; if (g_pHSI_Motion) { - //λΪλ,÷һƶλãٿʼôλ(λ)յλ + //触发的位置为相对位置,用法一般是移动到起点位置,再开始设置触发位置(相对位置),最终设置终点位置 g_pLogger->SendAndFlushWithTime(L"[DCCScanSetData] In AxisTypes:%d eType:%d lTrigNumber:%d dTrigDis:ld\n", AxisTypes, eType, lTrigNumber, dTrigDis); int axisNum; @@ -6400,14 +6400,14 @@ HSI_STATUS HSI_Motion::DCCScanSetData(UINT AxisTypes, HSI_SCAN_MOTION_TYPE eType break; } - //ʱͬʱɨ ⲿIO + //启动定时锁存的同时,启动扫描 外部IO unsigned char m_cSendData[8] = {0}; - //EF3Flash + //清空EF3缓存Flash m_cSendData[0] = 0x01; m_cSendData[1] = 0x04; m_WriteByte = Send_Command(0, (const char*)m_cSendData, 2); - Sleep(2000);//ʱ2룬ȴɣEF3FlashȽ + Sleep(2000);//延时2秒,等待清空完成,EF3清空Flash比较慢 g_pLogger->SendAndFlushWithTime(L"[DCCScanSetData] Out\n"); } ReleaseMutex(g_WR_ToMove_Mutex); @@ -6535,14 +6535,14 @@ HSI_STATUS HSI_Motion::DCCScanStart() iTriggleNum, iMotionDirection, begin_position[1]); //m_WriteByte = Send_Command(0, (const char*)m_SendDCCData, m_SendDataLength); - //ʱɨ裬˴վɻֵ + //启动定时扫描,此处清空旧缓存值 unsigned char m_cSendData[8] = {0}; m_cSendData[0] = 0x01; m_cSendData[1] = 0x04; m_WriteByte = Send_Command(0, (const char*)m_cSendData, 2, 2); Sleep(100); - //ʱͬʱɨⲿIO + //启动定时锁存的同时启动扫描外部IO m_cSendData[0] = 0x01; m_cSendData[1] = 0x02; m_WriteByte = Send_Command(0, (const char*)m_cSendData, 2, 2); @@ -6630,7 +6630,7 @@ HSI_STATUS HSI_Motion::DCCForLightPlate() //=========================================================================== /** - * \brief ת + * \brief 转盘 * \param CamerasDis * \param BinsDis * \param SubArea @@ -6653,7 +6653,7 @@ HSI_STATUS HSI_Motion::StartPlcJob(int* CamerasDis, int* BinsDis, int SubArea, i sEvenProp.EventType = HSI_EVENT_ERROR; sEvenProp.EventID = HSI_EVENT_MOTION; sEvenProp.EventResponse = HSI_EVENT_RESPONSE_OK; - strcpy_s(sEvenProp.EventData, HSI_MaxStringLength, "ʼǰȷϵǰλô㣡"); + strcpy_s(sEvenProp.EventData, HSI_MaxStringLength, "开始前请确认当前位置大于零!"); EventCallback(sEvenProp); return HSI_STATUS_FAILED; } @@ -6771,7 +6771,7 @@ HSI_STATUS HSI_Motion::GetTriggleCount(int* nCount, int& nArea) } //=========================================================================== -//㽺 +//点胶 //=========================================================================== HSI_STATUS HSI_Motion::GluePPSpnts(int* ppsDir, double* gluePPSPos, int* delayLightBefore, int* lightTime, double* lightData, int num) @@ -6781,20 +6781,20 @@ HSI_STATUS HSI_Motion::GluePPSpnts(int* ppsDir, double* gluePPSPos, int* delayLi { unsigned char send_gluePPS_data[64] = {0}; send_gluePPS_data[0] = CT_GLUEDISPENSER; - send_gluePPS_data[1] = 0x01; //ָ + send_gluePPS_data[1] = 0x01; //擦除指令 m_WriteByte = Send_Command(0, (const char*)send_gluePPS_data, m_SendDataLength); Sleep(200); int posIndex = 0; int loadFeet[4]; int j = 0; - int c = 0; // + int c = 0; //触发计数 int dirType = 0; int saveDir = 0; int duanNum = 0; double triggerPnt[4]; double savePPSPnt[4]; GlueDispenserindexNum = 0; -#pragma region յ +#pragma region 拍照点 for (size_t i = 0; i < num; i++) { if (i == 0) @@ -7605,7 +7605,7 @@ HSI_STATUS HSI_Motion::GlueDispenserStart(double xOffset, double yOffset, double return rStatus; } -void HSI_Motion::GluedispenserDone() //Ϳ +void HSI_Motion::GluedispenserDone() //涂胶机完成 { if (bRunGlueDispenser == HSI_THREAD_RUNNING) { @@ -7622,7 +7622,7 @@ void HSI_Motion::GluedispenserDone() //Ϳ { if ((m_SO7_Serial.m_RecvData[60] & 0x0f)) { - g_pLogger->SendAndFlushWithTime(L"[GluedispenserDone] Run End Normal\n"); //Ϳ + g_pLogger->SendAndFlushWithTime(L"[GluedispenserDone] Run End Normal\n"); //涂胶机完成 m_SO7_Serial.m_RecvData[60] = 0; break; } @@ -7670,7 +7670,7 @@ HSI_STATUS HSI_Motion::GetPntsDistance(double& pDistance, int& spTimeCount) //=========================================================================== /** - * \brief 浲λȡٶ + * \brief 界面挡位获取速度 * \param AxisNum * \param Speed * \param DirveSpeed @@ -7761,7 +7761,7 @@ int HSI_Motion::SpeedPercent(int AxisNum, double& Speed, int& DirveSpeed, int& S //=========================================================================== /** - * \brief JoyStick˶Ʋȡ + * \brief JoyStick运动控制参数读取及设置 * \param AxisNum * \param Speed * \param DirveSpeed @@ -7828,7 +7828,7 @@ bool HSI_Motion::SpeedPercentJoyStick(int AxisNum, long& Speed, int& DirveSpeed, //=========================================================================== /** - * \brief ȡõٶ + * \brief 获取单轴设置的速度 * \param AxisNum * \param Speed * \return @@ -7961,14 +7961,14 @@ HSI_STATUS HSI_Motion::SetAccelerationXyz(double AccelX, double AccelY, double A } //=========================================================================== -double HSI_Motion::LimitOver(UINT AxisTypes, double& LimitPos) //λ +double HSI_Motion::LimitOver(UINT AxisTypes, double& LimitPos) //单轴软限位 { short AxisNumber = AxisConvertIndex(AxisTypes); if (g_pHSI_Motion) { switch (AxisNumber) { - case HSI_MOTION_AXIS_X: // X + case HSI_MOTION_AXIS_X: // X 轴 { if (LimitPos >= m_P_Work_Limit[1]) { @@ -7980,7 +7980,7 @@ double HSI_Motion::LimitOver(UINT AxisTypes, double& LimitPos) // } break; } - case HSI_MOTION_AXIS_Y: //Y + case HSI_MOTION_AXIS_Y: //Y 轴 { if (LimitPos >= m_P_Work_Limit[2]) { @@ -8060,22 +8060,22 @@ short HSI_Motion::AxisConvertIndex(UINT AxisTypes) } //=========================================================================== -void HSI_Motion::SetSingleAxisMotionParams(UINT AxisTypes, double SetmotionParam[5]) //õ˶ +void HSI_Motion::SetSingleAxisMotionParams(UINT AxisTypes, double SetmotionParam[5]) //设置单轴运动参数 { g_pLogger->SendAndFlushWithTime(L"[SetSingleAxisMotionParams] In\n"); double getMotionParam[5] = { 0 }; - //ӡᵱǰ˶ - GetSingleAxisParam(AxisTypes, getMotionParam); //ȡ˶ + //打印轴当前运动参数 + GetSingleAxisParam(AxisTypes, getMotionParam); //获取单轴运动参数 g_pLogger->SendAndFlushWithTime( L"[before] Axis= %.2f, Velocity = %.2f, Acceleration= %.2f, Deceleration= %.2f, KillDeceleration= %.2f, Jerk= %.2f\n", jogAxisNum, getMotionParam[0], getMotionParam[1], getMotionParam[2], getMotionParam[3], getMotionParam[4]); - //õ + //设置单轴参数 SetSingleAxisParam(AxisTypes, SetmotionParam); - //ӡᵱǰ˶ - GetSingleAxisParam(AxisTypes, getMotionParam); //ȡ˶ + //打印轴当前运动参数 + GetSingleAxisParam(AxisTypes, getMotionParam); //获取单轴运动参数 g_pLogger->SendAndFlushWithTime( L"[after] Axis= %.2f, Velocity = %.2f, Acceleration= %.2f, Deceleration= %.2f, KillDeceleration= %.2f, Jerk= %.2f\n", jogAxisNum, getMotionParam[0], getMotionParam[1], getMotionParam[2], getMotionParam[3], getMotionParam[4]); @@ -8250,7 +8250,7 @@ HSI_STATUS HSI_Motion::GetSpeedEx(UINT AxisTypes, double& Speed) //=========================================================================== /** - * \brief õ˶ٶ + * \brief 设置单轴运动速度 * \param AxisTypes * \param Speed * \return @@ -8772,17 +8772,17 @@ unsigned __stdcall HSI_Motion::m_ThreadData(LPVOID pThis) TRACE("m_ThreadData!\n"); if (m_Thread_StateData == THREAD_EXIT) ExitThread(0); - //WaitForSingleObjecthHandle¼ź״̬ - //ijһ߳еøúʱ߳ʱ - //ڹdwMillisecondsڣ߳ȴĶΪź״̬úأ - //ʱѾdwMilliseconds룬hHandleָĶûбź״̬ء + //WaitForSingleObject函数用来检测hHandle事件的信号状态, + //在某一线程中调用该函数时,线程暂时挂起, + //如果在挂起的dwMilliseconds毫秒内,线程所等待的对象变为有信号状态,则该函数立即返回; + //如果时间已经到达dwMilliseconds毫秒,但hHandle所指向的对象还没有变成有信号状态,函数照样返回。 WaitForSingleObject(m_hTriggerEventData, INFINITE); switch (m_Thread_StateData) { case HSI_THREAD_RUNNING: { TRACE("HSI_THREAD_RUNNING.\r\n"); - _This->UpdateMotionStateData(); //ȡ˶״̬ + _This->UpdateMotionStateData(); //获取运动状态命令 break; } case HSI_THREAD_PAUSED: @@ -8805,7 +8805,7 @@ unsigned __stdcall HSI_Motion::m_ThreadData(LPVOID pThis) //=========================================================================== /** - * \brief JOGеλ˶ + * \brief JOG运行到软限位的运动调节 */ void HSI_Motion::UpdateMotionStateJOGStop() { @@ -8917,7 +8917,7 @@ void HSI_Motion::UpdateMotionStateJOGStop() break; case 4: { - //δ + //第四轴未添加 } break; default: @@ -8929,7 +8929,7 @@ void HSI_Motion::UpdateMotionStateJOGStop() } //=========================================================================== -void HSI_Motion::CreateThreadJOGStop() //JOGеλ˶ +void HSI_Motion::CreateThreadJOGStop() //JOG运行到软限位的运动调节 { if (m_Thread_IdJOGStop == nullptr) { @@ -8974,7 +8974,7 @@ void HSI_Motion::CloseThreadJOGStop() } //=========================================================================== -unsigned __stdcall HSI_Motion::m_ThreadJOGStop(LPVOID pThis) //JOGеλ˶ +unsigned __stdcall HSI_Motion::m_ThreadJOGStop(LPVOID pThis) //JOG运行到软限位的运动调节 { auto _This = static_cast(pThis); for (;;) @@ -9009,7 +9009,7 @@ unsigned __stdcall HSI_Motion::m_ThreadJOGStop(LPVOID pThis) //JOG } //=========================================================================== -// +//无用 HSI_STATUS HSI_Motion::IOStep(bool RunSts) { auto rStatus = HSI_STATUS_NORMAL; @@ -9053,11 +9053,11 @@ HSI_STATUS HSI_Motion::FindOriginTest(bool type) //=========================================================================== /** - * \brief ڷ + * \brief 串口发送命令 * \param com - * \param _SendData ָ - * \param SendDataLength ֽڳ - * \param expectType ڴسȣ2ok88ֽڣN:Nֽڣηݲڴֽڣȴط + * \param _SendData 发送内容指针 + * \param SendDataLength 发送字节长度 + * \param expectType 期待返回长度,2:返回ok,8:返回8个字节,N:返回N字节,如果本次返回内容不是期待字节,等待或重发该命令。 * \return */ BOOL HSI_Motion::Send_Command(int com, const char* _SendData, DWORD SendDataLength) @@ -9084,7 +9084,7 @@ BOOL HSI_Motion::Send_Command(int com, const char* _SendData, DWORD SendDataLeng sEvenProp.EventType = HSI_EVENT_ERROR; sEvenProp.EventID = HSI_EVENT_MOTION; sEvenProp.EventResponse = HSI_EVENT_RESPONSE_OK; - strcpy_s(sEvenProp.EventData, HSI_MaxStringLength, "EF3ѶϿ"); + strcpy_s(sEvenProp.EventData, HSI_MaxStringLength, "EF3控制器已断开连接"); EventCallback(sEvenProp); } } @@ -9097,30 +9097,30 @@ BOOL HSI_Motion::Send_Command(int com, const char* _SendData, DWORD SendDataLeng ReleaseMutex(g_RW_Data_Mutex); return rStatus; }; -//3δ⣺ZZX -//1û㣺ҵ߼洦ڷ͵ʱ򣬸Ӧֵ -//2Ͳ㣺֤ͳɹԷݽһжϣͨѶʱط߼ -//3̣߳õݺ󣬸ֵƴжϴƴ +//分3个层次处理该问题:ZZX +//1、用户层:业务逻辑层面处理,并在发送的时候,给出期望回应值 +//2、发送层:保证发送成功,并对返回数据进行一定的判断,如果通讯超时,进行重发逻辑 +//3、接收数据线程,获得单包数据后,根据期望值进行拼包判断处理,返回拼包后的数据 BOOL HSI_Motion::Send_Command(int com, const char* _SendData, DWORD SendDataLength, int expectType) { BOOL rStatus = TRUE; WaitForSingleObject(g_RW_Data_Mutex, INFINITE); - //ָظ: - //12ֽڣظ OK0x6F 0x6B - //2ضֽ + //指令回复分两种情况: + //1、正常2字节,回复 OK,(0x6F 0x6B ) + //2、返回多字节 if (m_bConnected && (m_IsUseEF3 == 1) /*&& (com == 0)*/) { - //-----------------------------------------------------------------// - //ԭӣhttps://blog.csdn.net/qq_31073871/article/details/85696092 + //------------------------------调试区-----------------------------------// + //原文链接:https://blog.csdn.net/qq_31073871/article/details/85696092 //printf("Send_Command: "); //for (int i = 0; i < SendDataLength; i++) //{ // printf("%02X ", ((uint8_t*)_SendData)[i]); //} //printf("\r\n"); - //-----------------------------------------------------------------// + //------------------------------调试区-----------------------------------// g_pLogger->SendAndFlushWithTime(L"[Send_Command] lenth:%d, expectType:%d, %s\n", SendDataLength, expectType, m_SO7_Serial.HexToStr(_SendData, SendDataLength)); @@ -9141,7 +9141,7 @@ BOOL HSI_Motion::Send_Command(int com, const char* _SendData, DWORD SendDataLeng sEvenProp.EventType = HSI_EVENT_ERROR; sEvenProp.EventID = HSI_EVENT_MOTION; sEvenProp.EventResponse = HSI_EVENT_RESPONSE_OK; - strcpy_s(sEvenProp.EventData, HSI_MaxStringLength, "EF3ѶϿ"); + strcpy_s(sEvenProp.EventData, HSI_MaxStringLength, "EF3控制器已断开连接"); EventCallback(sEvenProp); } } @@ -9149,25 +9149,25 @@ BOOL HSI_Motion::Send_Command(int com, const char* _SendData, DWORD SendDataLeng rStatus = FALSE; } - if (iWriteByte != SendDataLength) // дֽڷֽ + if (iWriteByte != SendDataLength) // 写入字节数不等于发送字节数 { rStatus = FALSE; g_pLogger->SendAndFlushWithTime(L"[Send_Command] WriteByte:%d,!= SendDataLength:%d\n", iWriteByte, SendDataLength); } - m_SO7_Serial.m_iRecvState = false; //ϣ״̬ΪfalseʼȴEF3ظ - m_SO7_Serial.m_iExpectBytes = expectType; //ݵ²㣬²ƴ + m_SO7_Serial.m_iRecvState = false; //发送完毕,接收状态置为false,并开始等待EF3回复 + m_SO7_Serial.m_iExpectBytes = expectType; //给出期望结果,传递到下层,由下层进行拼包 - //жϻظֵǷΪok 6F 6B + //判断回复值,是否为ok 6F 6B int iRetrys = 0; - while (!m_SO7_Serial.m_iRecvState && iRetrys < 100) //ٴνյȴ + while (!m_SO7_Serial.m_iRecvState && iRetrys < 100) //再次接收等待 { iRetrys++; Sleep(3); } g_pLogger->SendAndFlushWithTime(L"[Send_Command] Timeout Retrys:%d\n", iRetrys); - //1ɹֵ2ʱ + //两种情况,1、成功获得期望值;2、如果超时 if (m_SO7_Serial.m_iRecvState && (m_SO7_Serial.m_iRecvBytes == expectType)) { rStatus = TRUE; @@ -9178,13 +9178,13 @@ BOOL HSI_Motion::Send_Command(int com, const char* _SendData, DWORD SendDataLeng /* g_pLogger->SendAndFlushWithTime(L"[Send_Command] EF3 Reply OK, RecvBytes:%d\n", m_SO7_Serial.m_iRecvBytes);*/ } - else if (iRetrys > 100) //ȡʱط + else if (iRetrys > 100) //获取超时,重发 { iRetrys = 0; g_pLogger->SendAndFlushWithTime(L"[Send_Command] EF3 Reply Timeout ,ReSend\n"); - int iWriteByte = m_SO7_Serial.Send(_SendData, SendDataLength); //ٴطȴӦ - m_SO7_Serial.m_iRecvState = false; //ϣ״̬ΪfalseʼȴEF3ظ - m_SO7_Serial.m_iExpectBytes = expectType; //ݵ²㣬²ƴ + int iWriteByte = m_SO7_Serial.Send(_SendData, SendDataLength); //再次重发,并等待回应 + m_SO7_Serial.m_iRecvState = false; //发送完毕,接收状态置为false,并开始等待EF3回复 + m_SO7_Serial.m_iExpectBytes = expectType; //给出期望结果,传递到下层,由下层进行拼包 while (!m_SO7_Serial.m_iRecvState && iRetrys < 100) { @@ -9197,7 +9197,7 @@ BOOL HSI_Motion::Send_Command(int com, const char* _SendData, DWORD SendDataLeng rStatus = HSI_STATUS_FAILED; g_pLogger->SendAndFlushWithTime(L"[Send_Command] EF3 Reply Error!"); } - else // + else //获得期望结果 { rStatus = HSI_STATUS_NORMAL; g_pLogger->SendAndFlushWithTime(L"[Send_Command] EF3 Reply OK, RecvBytes:%d, %s\n", @@ -9207,16 +9207,16 @@ BOOL HSI_Motion::Send_Command(int com, const char* _SendData, DWORD SendDataLeng } } - //굱ǰָ󣬵һνɱ־ - //if (m_SO7_Serial.m_iRecvBytes != expectType) //ȡӡ󣬲ط + //发送完当前指令后,第一次结束完成标志 + //if (m_SO7_Serial.m_iRecvBytes != expectType) //获取数量不等于期望数量,打印错误,并重发 //{ // g_pLogger->SendAndFlushWithTime(L"[Send_Command] EF3 Reply Error, RecvBytes:%d, %s\n", // m_SO7_Serial.m_iRecvBytes, // m_SO7_Serial.HexToStr((const char*)m_SO7_Serial.m_RecvData, // m_SO7_Serial.m_iRecvBytes)); // m_SO7_Serial.m_iRecvState = false; - // int iWriteByte = m_SO7_Serial.Send(_SendData, SendDataLength); //ٴطȴӦ - // while (!m_SO7_Serial.m_iRecvState && iRetrys < 100) //ȴ300 + // int iWriteByte = m_SO7_Serial.Send(_SendData, SendDataLength); //再次重发,并等待回应 + // while (!m_SO7_Serial.m_iRecvState && iRetrys < 100) //等待300毫秒 // { // iRetrys++; // Sleep(3); @@ -9239,7 +9239,7 @@ BOOL HSI_Motion::Send_Command(int com, const char* _SendData, DWORD SendDataLeng // rStatus = HSI_STATUS_FAILED; // g_pLogger->SendAndFlushWithTime(L"[Send_Command] EF3 Reply Error!"); // } - // else // + // else //获得期望结果 // { // rStatus = HSI_STATUS_NORMAL; // g_pLogger->SendAndFlushWithTime(L"[Send_Command] EF3 Reply OK, RecvBytes:%d, %s\n", @@ -9266,7 +9266,7 @@ BOOL HSI_Motion::Send_Command(int com, const char* _SendData, DWORD SendDataLeng ///////////////////////////////////////////////////////////////////////// -#pragma region //ͨ8· 26·Դͨ +#pragma region //网口通信8路 26路光源板通信 #pragma warning(disable:4996) TCPIP_RETURN_CODE HSI_Motion::TCPConnect(int index, char* Address, u_short port) @@ -9290,7 +9290,7 @@ TCPIP_RETURN_CODE HSI_Motion::TCPConnect(int index, char* Address, u_short port) { int iMode = 1; int i = 0; - int retVal = ioctlsocket(m_socket[index], FIONBIO, (u_long FAR*)&iMode); // + int retVal = ioctlsocket(m_socket[index], FIONBIO, (u_long FAR*)&iMode); //非阻塞连接 if (retVal == SOCKET_ERROR) { closesocket(m_socket[index]); @@ -9327,7 +9327,7 @@ TCPIP_RETURN_CODE HSI_Motion::TCPConnect(int index, char* Address, u_short port) } } iMode = 0; - retVal = ioctlsocket(m_socket[index], FIONBIO, (u_long FAR*)&iMode); // + retVal = ioctlsocket(m_socket[index], FIONBIO, (u_long FAR*)&iMode); //设置阻塞 if (retVal == SOCKET_ERROR) { closesocket(m_socket[index]); @@ -9461,7 +9461,7 @@ TCPIP_RETURN_CODE HSI_Motion::TCPSend() sEvenProp.EventType = HSI_EVENT_ERROR; sEvenProp.EventID = HSI_EVENT_MOTION; sEvenProp.EventResponse = HSI_EVENT_RESPONSE_OK; - strcpy_s(sEvenProp.EventData, HSI_MaxStringLength, "ԴѶϿ"); + strcpy_s(sEvenProp.EventData, HSI_MaxStringLength, "光源板已断开连接"); EventCallback(sEvenProp); m_ThreadTCP_State = TCPIP_THREAD_EXIT; closesocket(m_socket[m_selectedIndex]); @@ -9504,7 +9504,7 @@ TCPIP_RETURN_CODE HSI_Motion::TCPSend() sEvenProp.EventType = HSI_EVENT_ERROR; sEvenProp.EventID = HSI_EVENT_MOTION; sEvenProp.EventResponse = HSI_EVENT_RESPONSE_OK; - strcpy_s(sEvenProp.EventData, HSI_MaxStringLength, "ԴѶϿ"); + strcpy_s(sEvenProp.EventData, HSI_MaxStringLength, "光源板已断开连接"); EventCallback(sEvenProp); m_ThreadTCP_State = TCPIP_THREAD_EXIT; closesocket(m_socket[m_selectedIndex]); @@ -9625,7 +9625,7 @@ HSI_STATUS HSI_Motion::SetAllGears() unsigned char send_glue_data[64] = {0}; send_glue_data[0] = 0x01; send_glue_data[1] = 0x01; - send_glue_data[2] = 0x01 << (i - 1); // + send_glue_data[2] = 0x01 << (i - 1); //轴号 send_glue_data[3] = 0x08; for (size_t j = 0; j < 5; j++) diff --git a/HSI_HexagonMI_EF3/HSI_Sevenocean_EF3.cpp b/HSI_HexagonMI_EF3/HSI_Sevenocean_EF3.cpp index 4d82cc0..731e20e 100644 --- a/HSI_HexagonMI_EF3/HSI_Sevenocean_EF3.cpp +++ b/HSI_HexagonMI_EF3/HSI_Sevenocean_EF3.cpp @@ -1,4 +1,4 @@ -// HSI_Sevenocean_EF3.cpp : DLL ijʼ̡ +// HSI_Sevenocean_EF3.cpp : 定义 DLL 的初始化例程。 // #include "stdafx.h" @@ -31,10 +31,10 @@ HSI_Sevenocean_EF3::~HSI_Sevenocean_EF3() //=========================================================================== /** - * HSI ʼ + * HSI 初始化 * - * \param _hWnd Ϣ - * \param _bOfflineOnly ãĬ False + * \param _hWnd :消息传输句柄 + * \param _bOfflineOnly :暂无用,默认 False * \return */ HSI_STATUS HSI_Sevenocean_EF3::Startup(HWND _hWnd, bool _bOfflineOnly) @@ -49,7 +49,7 @@ HSI_STATUS HSI_Sevenocean_EF3::Startup(HWND _hWnd, bool _bOfflineOnly) HSI_STATUS HSI_Sevenocean_EF3::GetMachineInfo(int& _NumMachineTypes) { auto rStatus = HSI_STATUS_NORMAL; - _NumMachineTypes = HSI_MACHINE_EF3; //EF3 + _NumMachineTypes = HSI_MACHINE_EF3; //机器类型EF3 return rStatus; } diff --git a/HSI_HexagonMI_EF3/HSI_Sevenocean_EF3.h b/HSI_HexagonMI_EF3/HSI_Sevenocean_EF3.h index 6c48457..2f9d18a 100644 --- a/HSI_HexagonMI_EF3/HSI_Sevenocean_EF3.h +++ b/HSI_HexagonMI_EF3/HSI_Sevenocean_EF3.h @@ -1,13 +1,13 @@ -// HSI_Sevenocean_EF3.h : HSI_Sevenocean_EF3 DLL ͷļ +// HSI_Sevenocean_EF3.h : HSI_Sevenocean_EF3 DLL 的主头文件 // #pragma once #ifndef __AFXWIN_H__ -#error "ڰļ֮ǰstdafx.h PCH ļ" +#error "在包含此文件之前包含“stdafx.h”以生成 PCH 文件" #endif -#include "resource.h" // +#include "resource.h" // 主符号 #include diff --git a/HSI_HexagonMI_EF3/resource.h b/HSI_HexagonMI_EF3/resource.h index 014ede3..3897fdf 100644 --- a/HSI_HexagonMI_EF3/resource.h +++ b/HSI_HexagonMI_EF3/resource.h @@ -2,7 +2,7 @@ // Microsoft Visual C++ generated include file. // Used by HSI_Sevenocean_EF3.rc -// ¶һĬֵ +// 新对象的下一组默认值 // #ifdef APSTUDIO_INVOKED #ifndef APSTUDIO_READONLY_SYMBOLS diff --git a/HSI_HexagonMI_EF3/stdafx.cpp b/HSI_HexagonMI_EF3/stdafx.cpp index 3f80e8e..9d90014 100644 --- a/HSI_HexagonMI_EF3/stdafx.cpp +++ b/HSI_HexagonMI_EF3/stdafx.cpp @@ -1,8 +1,8 @@ -// stdafx.cpp : ֻ׼ļԴļ -// HSI_Sevenocean_EF3.pch ΪԤͷ -// stdafx.obj ԤϢ +// stdafx.cpp : 只包括标准包含文件的源文件 +// HSI_Sevenocean_EF3.pch 将作为预编译头 +// stdafx.obj 将包含预编译类型信息 #include "stdafx.h" -// TODO: STDAFX.H -// κĸͷļڴļ +// TODO: 在 STDAFX.H 中 +// 引用任何所需的附加头文件,而不是在此文件中引用 diff --git a/HSI_HexagonMI_EF3/stdafx.h b/HSI_HexagonMI_EF3/stdafx.h index ee9627a..889f7cd 100644 --- a/HSI_HexagonMI_EF3/stdafx.h +++ b/HSI_HexagonMI_EF3/stdafx.h @@ -1,14 +1,14 @@ -// stdafx.h : ׼ϵͳļİļ -// Ǿʹõĵ -// ضĿİļ +// stdafx.h : 标准系统包含文件的包含文件, +// 或是经常使用但不常更改的 +// 特定于项目的包含文件 // #pragma once #include "targetver.h" -#define WIN32_LEAN_AND_MEAN // Windows ͷļųʹõϢ -// Windows ͷļ: +#define WIN32_LEAN_AND_MEAN // 从 Windows 头文件中排除极少使用的信息 +// Windows 头文件: //#include #include -// TODO: ڴ˴óҪͷļ +// TODO: 在此处引用程序需要的其他头文件 diff --git a/HSI_HexagonMI_EF3/x64/Debug/HSI_HexagonMI_EF3.dll b/HSI_HexagonMI_EF3/x64/Debug/HSI_HexagonMI_EF3.dll deleted file mode 100644 index 3900f21..0000000 Binary files a/HSI_HexagonMI_EF3/x64/Debug/HSI_HexagonMI_EF3.dll and /dev/null differ diff --git a/HSI_HexagonMI_EF3/x64/Debug/HSI_HexagonMI_EF3.exp b/HSI_HexagonMI_EF3/x64/Debug/HSI_HexagonMI_EF3.exp deleted file mode 100644 index 3c8f306..0000000 Binary files a/HSI_HexagonMI_EF3/x64/Debug/HSI_HexagonMI_EF3.exp and /dev/null differ diff --git a/HSI_HexagonMI_EF3/x64/Debug/HSI_HexagonMI_EF3.lib b/HSI_HexagonMI_EF3/x64/Debug/HSI_HexagonMI_EF3.lib deleted file mode 100644 index b88262b..0000000 Binary files a/HSI_HexagonMI_EF3/x64/Debug/HSI_HexagonMI_EF3.lib and /dev/null differ diff --git a/HSI_HexagonMI_EF3/x64/Debug/HSI_HexagonMI_EF3.pdb b/HSI_HexagonMI_EF3/x64/Debug/HSI_HexagonMI_EF3.pdb deleted file mode 100644 index 7074624..0000000 Binary files a/HSI_HexagonMI_EF3/x64/Debug/HSI_HexagonMI_EF3.pdb and /dev/null differ diff --git a/HSI_SEVENOCEAN_EF1_CsTest/bin/Debug/HSI_SEVENOCEAN_EF1_CsTest.exe b/HSI_SEVENOCEAN_EF1_CsTest/bin/Debug/HSI_SEVENOCEAN_EF1_CsTest.exe deleted file mode 100644 index 2ca8d41..0000000 Binary files a/HSI_SEVENOCEAN_EF1_CsTest/bin/Debug/HSI_SEVENOCEAN_EF1_CsTest.exe and /dev/null differ diff --git a/HSI_SEVENOCEAN_EF1_CsTest/bin/Debug/HSI_SEVENOCEAN_EF1_CsTest.exe.config b/HSI_SEVENOCEAN_EF1_CsTest/bin/Debug/HSI_SEVENOCEAN_EF1_CsTest.exe.config deleted file mode 100644 index 8e15646..0000000 --- a/HSI_SEVENOCEAN_EF1_CsTest/bin/Debug/HSI_SEVENOCEAN_EF1_CsTest.exe.config +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - \ No newline at end of file diff --git a/HSI_SEVENOCEAN_EF1_CsTest/bin/Debug/HSI_SEVENOCEAN_EF1_CsTest.pdb b/HSI_SEVENOCEAN_EF1_CsTest/bin/Debug/HSI_SEVENOCEAN_EF1_CsTest.pdb deleted file mode 100644 index 8301782..0000000 Binary files a/HSI_SEVENOCEAN_EF1_CsTest/bin/Debug/HSI_SEVENOCEAN_EF1_CsTest.pdb and /dev/null differ