diff --git a/.hgignore b/.gitignore similarity index 62% rename from .hgignore rename to .gitignore index a7da54a..d2afcf5 100644 --- a/.hgignore +++ b/.gitignore @@ -1,46 +1,59 @@ -syntax: glob -*.~h -*.~CPP -*.sdf -*.dll -*.aps -*.pch -*.ilk -*.pdb -*.exe -*.obj -*.jpg -*.~* -*.orig -PcDmis/Base/Interfac/Msi/Hsi/MicroVu/Win32/Release -PcDmis/Base/Interfac/Msi/Hsi/MicroVu/Win32/Debug -PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/UsbUtil/Debug -PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/UsbUtil/Release -PcDmis/UsbSupport/libusb-win32-src-1.2.4.0/projects/Win32 -PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/LITE/Utility_Lite/Debug/ -PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/LITE/Utility_Lite/Release -*.lnk -*.bak -*.ORIG -*.log -*.txt -*.db -PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/Release/ -PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/Debug/ -PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/ReleaseSO7/ -PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/UsbUtil/ReleaseSO7/ -PcDmis/Base/Interfac/Msi/Hsi/KeyenceTM065/LKIF_Multi_US英語版 -PcDmis/Base/Interfac/Msi/Hsi/KeyenceTM065/LK-G通信用DLL-20090427 -*.ipch -*.opensdf -*.tmp -PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/MachineInterfaceDll/Debug -PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/MachineInterfaceDll/Release -PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/Win32TestDll/Debug -PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/Win32TestDll/Release -PcDmis/Base/Interfac/Msi/Hsi/Videocard/TC4000/V6.0 -PcDmis/Base/Interfac/Msi/Hsi/Videocard/TC4000/V7.5 -PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/ConsoleTestDll/bin -PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/ConsoleTestDll/obj -PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/UsbUtil/DebugS07/ -PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/DebugS07/ +*.~h +*.~CPP +*.sdf +*.dll +*.aps +*.pch +*.ilk +*.pdb +*.exe +*.obj +*.jpg +*.~* +*.orig +PcDmis/Base/Interfac/Msi/Hsi/MicroVu/Win32/Release +PcDmis/Base/Interfac/Msi/Hsi/MicroVu/Win32/Debug +PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/UsbUtil/Debug +PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/UsbUtil/Release +PcDmis/UsbSupport/libusb-win32-src-1.2.4.0/projects/Win32 +PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/LITE/Utility_Lite/Debug/ +PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/LITE/Utility_Lite/Release +*.lnk +*.bak +*.ORIG +*.log +*.txt +*.db +PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/Release/ +PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/Debug/ +PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/ReleaseSO7/ +PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/UsbUtil/ReleaseSO7/ +PcDmis/Base/Interfac/Msi/Hsi/KeyenceTM065/LKIF_Multi_US英锟絑锟斤拷 +PcDmis/Base/Interfac/Msi/Hsi/KeyenceTM065/LK-G通锟斤拷锟斤拷DLL-20090427 +*.ipch +*.opensdf +*.tmp +PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/MachineInterfaceDll/Debug +PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/MachineInterfaceDll/Release +PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/Win32TestDll/Debug +PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/Win32TestDll/Release +PcDmis/Base/Interfac/Msi/Hsi/Videocard/TC4000/V6.0 +PcDmis/Base/Interfac/Msi/Hsi/Videocard/TC4000/V7.5 +PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/ConsoleTestDll/bin +PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/ConsoleTestDll/obj +PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/UsbUtil/DebugS07/ +PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/DebugS07/ +PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/RobotControlDll/Debug +PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/RobotDll/Debug +PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/RobotDll/Release +PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/RobotControlDll/Release/ +PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/RS232_DLL/Debug +PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/RS232_DLL/Release/ +*/Debug/* +*/Release/* +PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/Utility_Config.ini +PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/UtilityDebug.Log +*.suo +PcDmis/Base/Interfac/Msi/Hsi/SevenOcean/UtilityForSo7Light/Debug/ +PcDmis/Base/Interfac/Msi/Hsi/SevenOcean/UtilityForSo7Light/UtilityForSo7Light/Debug/ +*.opendb diff --git a/PcDmis/Base/Interfac/Msi/Hsi/ART/ART_PCI8622.cpp b/PcDmis/Base/Interfac/Msi/Hsi/ART/ART_PCI8622.cpp index e503eb0..c09c1d7 100644 --- a/PcDmis/Base/Interfac/Msi/Hsi/ART/ART_PCI8622.cpp +++ b/PcDmis/Base/Interfac/Msi/Hsi/ART/ART_PCI8622.cpp @@ -118,9 +118,9 @@ BOOL CART_PCI8622::SetSamplePara(int _Mode,int _ReadDataSize) m_ADPara.ADMode = PCI8622_ADMODE_GROUP; // AD模式为连续模式 m_ADPara.FirstChannel = m_iFirstChannel; // 首通道 m_ADPara.LastChannel = m_iLastChannel; // 末通道 - m_ADPara.Frequency = 10000; // 采样频率(Hz) + m_ADPara.Frequency = 250000; // 采样频率(Hz) m_ADPara.GroupInterval = 50; // 组间间隔(uS) - m_ADPara.LoopsOfGroup = 1; // 组内各通道点数 + m_ADPara.LoopsOfGroup = 10; // 组内各通道点数 m_ADPara.Gains = PCI8622_GAINS_1MULT; m_ADPara.InputRange = m_InputRange; // 模拟量输入量程范围 @@ -395,8 +395,16 @@ BOOL CART_PCI8622::GetData(double (*_Data)[HALF_SIZE_WORDS],int* _DataNumber) break; } m_SegmentID=0; - LONG nReadSizeWords = m_iReadDataSize; + + LONG nReadSizeWords = (m_iReadDataSize+1)*(1+m_iLastChannel-m_iFirstChannel)*10; LONG nRetSizeWords(0); + + //if (ADStatus.nRemainWords>>> In Interfaces + public delegate void PEventCallback( + Def.HSI_EVENT_TYPE eventType, Def.HSI_EVENT_RESPONSE_TYPE responseType, uint eventId, string eventData, + ref uint eventCallbackId); + + public static PEventCallback HsiCallback; + + [DllImport("HSI.dll", EntryPoint = "HSI_GET_INTERFACE_VERSION", CharSet = CharSet.Unicode)] + public static extern Def.HSI_STATUS GetInterfaceVersion(ref uint apiVersionMajor, ref uint apiVersionMinor); + + [DllImport("HSI.dll", EntryPoint = "HSI_STARTUP", CharSet = CharSet.Unicode)] + public static extern Def.HSI_STATUS Startup(IntPtr hWnd, bool bOfflineOnly); + + [DllImport("HSI.dll", EntryPoint = "HSI_GET_INTERFACE_VERSION", CharSet = CharSet.Unicode)] + public static extern Def.HSI_STATUS GetInterfaceVersion(); + + [DllImport("HSI.dll", EntryPoint = "HSI_GET_MACHINE_INFO", CharSet = CharSet.Unicode)] + public static extern Def.HSI_STATUS GetMachineInfo(ref int numMachineTypes); + + [DllImport("HSI.dll", EntryPoint = "HSI_SET_EVENT_CALLBACK", CharSet = CharSet.Unicode)] + public static extern Def.HSI_STATUS SetEventCallback(PEventCallback pCallback); + + [DllImport("HSI.dll", EntryPoint = "HSI_SHUTDOWM", CharSet = CharSet.Unicode)] + public static extern Def.HSI_STATUS Shutdown(); + + // <<<< Out Interfacess + + public static void EventCallback(Def.HSI_EVENT_TYPE eventType, Def.HSI_EVENT_RESPONSE_TYPE responseType, + uint eventId, string eventData, ref uint eventCallbackId) + { + var msgBtn = MessageBoxButtons.OK; + switch (responseType) + { + case Def.HSI_EVENT_RESPONSE_TYPE.HSI_EVENT_RESPONSE_OK: + msgBtn = MessageBoxButtons.OK; + break; + case Def.HSI_EVENT_RESPONSE_TYPE.HSI_EVENT_RESPONSE_RETRY: + msgBtn = MessageBoxButtons.RetryCancel; + break; + case Def.HSI_EVENT_RESPONSE_TYPE.HSI_EVENT_RESPONSE_CANCEL: + msgBtn = MessageBoxButtons.OKCancel; + break; + case Def.HSI_EVENT_RESPONSE_TYPE.HSI_EVENT_RESPONSE_YES: + msgBtn = MessageBoxButtons.YesNo; + break; + } + switch (eventType) + { + case Def.HSI_EVENT_TYPE.HSI_EVENT_NONE: + break; + case Def.HSI_EVENT_TYPE.HSI_EVENT_ERROR: + break; + case Def.HSI_EVENT_TYPE.HSI_EVENT_FUNCTION: + var eventFunctionId = (Def.HSI_EVENT_FUNCTION_ID) eventId; + switch (eventFunctionId) + { + case Def.HSI_EVENT_FUNCTION_ID.HSI_EVENT_MOTION_DCC_HOME: + { + System.Windows.Forms.MessageBox.Show(Resources.Interface_Tips_Home_Machine, Resources.Interface_Tips, + msgBtn, MessageBoxIcon.Information); + break; + } + case Def.HSI_EVENT_FUNCTION_ID.HSI_EVENT_DEBUG_LOG: + { + System.Windows.Forms.MessageBox.Show(eventData, Resources.Interface_Tips, + msgBtn, MessageBoxIcon.Information); + break; + } + case Def.HSI_EVENT_FUNCTION_ID.HSI_EVENT_MOVE_POINT: + { + System.Windows.Forms.MessageBox.Show(Resources.Interface_Tips_Motion_Finished, Resources.Interface_Tips, + msgBtn, MessageBoxIcon.Information); + ; //Motion completed + break; + } + } + break; + } + } + } + + internal class Motion + { + // >>>> In Interfaces + [DllImport("HSI.dll", EntryPoint = "HSI_MOTION_IS_SUPPORTED", CharSet = CharSet.Unicode)] + public static extern Def.HSI_STATUS IsSupported(ref uint types); + + [DllImport("HSI.dll", EntryPoint = "HSI_MOTION_STARTUP", CharSet = CharSet.Unicode)] + public static extern Def.HSI_STATUS Startup(bool bHome); + + [DllImport("HSI.dll", EntryPoint = "HSI_MOTION_IS_HOMED", CharSet = CharSet.Unicode)] + public static extern Def.HSI_STATUS IsHomed(ref bool bHomed); + + [DllImport("HSI.dll", EntryPoint = "HSI_MOTION_GET_SPEED_XYZ", CharSet = CharSet.Unicode)] + public static extern Def.HSI_STATUS GetSpeedXyz(ref double speed); + + [DllImport("HSI.dll", EntryPoint = "HSI_MOTION_SET_SPEED_XYZ", CharSet = CharSet.Unicode)] + public static extern Def.HSI_STATUS SetSpeedXyz(double speed); + + [DllImport("HSI.dll", EntryPoint = "HSI_MOTION_GET_SPEED_R", CharSet = CharSet.Unicode)] + public static extern Def.HSI_STATUS GetSpeedR(ref double speed); + + [DllImport("HSI.dll", EntryPoint = "HSI_MOTION_SET_SPEED_R", CharSet = CharSet.Unicode)] + public static extern Def.HSI_STATUS SetSpeedR(double speed); + + [DllImport("HSI.dll", EntryPoint = "HSI_MOTION_GET_SCALE_RESOLUTION", CharSet = CharSet.Unicode)] + public static extern Def.HSI_STATUS GetScaleResolution( + ref double scaleX, ref double scaleY, ref double scaleZ); + + [DllImport("HSI.dll", EntryPoint = "HSI_MOTION_SET_SCALE_RESOLUTION", CharSet = CharSet.Unicode)] + public static extern Def.HSI_STATUS SetScaleResolution(double scaleX, double scaleY, double scaleZ); + + [DllImport("HSI.dll", EntryPoint = "HSI_MOTION_GET_DEADBAND", CharSet = CharSet.Unicode)] + public static extern Def.HSI_STATUS GetDeadBand( + ref double deadbandX, ref double deadbandY, ref double deadbandZ, ref double deadbandR); + + [DllImport("HSI.dll", EntryPoint = "HSI_MOTION_GET_REFRESH_DEADBAND", CharSet = CharSet.Unicode)] + public static extern Def.HSI_STATUS GetRefreshDeadBand(ref double deadband); + + [DllImport("HSI.dll", EntryPoint = "HSI_MOTION_JOG", CharSet = CharSet.Unicode)] + public static extern Def.HSI_STATUS Jog(uint axisTypes, double speed); + + [DllImport("HSI.dll", EntryPoint = "HSI_MOTION_STOP_JOG", CharSet = CharSet.Unicode)] + public static extern Def.HSI_STATUS StopJog(); + + [DllImport("HSI.dll", EntryPoint = "HSI_MOTION_GET_POSITION_XYZ", CharSet = CharSet.Unicode)] + public static extern Def.HSI_STATUS GetPositionXyz( + uint axisTypes, ref double positionX, ref double positionY, ref double positionZ, ref double time); + + [DllImport("HSI.dll", EntryPoint = "HSI_MOTION_SET_POSITION_XYZ", CharSet = CharSet.Unicode)] + public static extern Def.HSI_STATUS SetPositionXyz( + uint axisTypes, double positionX, double positionY, double positionZ, Def.HSI_MOTION_MOVE_TYPE eType, + double dFlyRadius); + + [DllImport("HSI.dll", EntryPoint = "HSI_MOTION_GET_POSITION_R", CharSet = CharSet.Unicode)] + public static extern Def.HSI_STATUS GetPositionR(uint axisTypes, ref double positionR, ref double time); + + [DllImport("HSI.dll", EntryPoint = "HSI_MOTION_SET_POSITION_R", CharSet = CharSet.Unicode)] + public static extern Def.HSI_STATUS SetPositionR( + uint axisTypes, double positionR, Def.HSI_MOTION_AXIS_R_MOVE_TYPE directionType, bool bWait); + + [DllImport("HSI.dll", EntryPoint = "HSI_MOTION_ABORT_MOTION", CharSet = CharSet.Unicode)] + public static extern Def.HSI_STATUS AbortMotion(); + + [DllImport("HSI.dll", EntryPoint = "HSI_MOTION_GET_DIO", CharSet = CharSet.Unicode)] + public static extern Def.HSI_STATUS GetDIO(uint ioChannel, ref uint status); + + [DllImport("HSI.dll", EntryPoint = "HSI_MOTION_SET_DIO", CharSet = CharSet.Unicode)] + public static extern Def.HSI_STATUS SetDIO(uint ioChannel, uint status); + + [DllImport("HSI.dll", EntryPoint = "HSI_MOTION_SHUTDOWN", CharSet = CharSet.Unicode)] + public static extern Def.HSI_STATUS Shutdown(); + + // <<<< Out Interfaces + public Motion() + { + _supported = 0; + _bFirst = true; + } + + public static bool IsActive(bool bForce = false) + { + if (_bFirst || bForce) + { + IsSupported(ref _supported); + _bFirst = false; + } + return (_supported != 0); + } + + private static bool _bFirst; + private static uint _supported; + } + + internal class Illumination + { + // >>>> In Interfaces + [DllImport("HSI.dll", EntryPoint = "HSI_MOTION_IS_SUPPORTED", CharSet = CharSet.Unicode)] + public static extern Def.HSI_STATUS IsSupported(ref uint types); + + [DllImport("HSI.dll", EntryPoint = "HSI_MOTION_IS_SUPPORTED", CharSet = CharSet.Unicode)] + public static extern Def.HSI_STATUS HSI_ILLUMINATION_STARTUP(); + + [DllImport("HSI.dll", EntryPoint = "HSI_MOTION_IS_SUPPORTED", CharSet = CharSet.Unicode)] + public static extern Def.HSI_STATUS HSI_ILLUMINATION_GET_LAMP_COUNT(ref int nLamps); + + [DllImport("HSI.dll", EntryPoint = "HSI_MOTION_IS_SUPPORTED", CharSet = CharSet.Unicode)] + public static extern Def.HSI_STATUS HSI_ILLUMINATION_GET_LAMP_INFO(ref int lampInfo, ref int numLamps, + int[] lampsType, + int[] numRings, int[] numSectors, int[] color, double[] angle, ref bool bCanBeCalibrated); + + [DllImport("HSI.dll", EntryPoint = "HSI_MOTION_IS_SUPPORTED", CharSet = CharSet.Unicode)] + public static extern Def.HSI_STATUS HSI_ILLUMINATION_GET_LAMP_STATE( + int nLamp, bool[] bBulbStates, double[] intensities, ref int color, ref double angle); + + [DllImport("HSI.dll", EntryPoint = "HSI_MOTION_IS_SUPPORTED", CharSet = CharSet.Unicode)] + public static extern Def.HSI_STATUS HSI_ILLUMINATION_SET_LAMP_STATE( + int nLamp, bool[] bBulbStates, double[] intensities, int color, double angle, bool bWait); + + [DllImport("HSI.dll", EntryPoint = "HSI_MOTION_IS_SUPPORTED", CharSet = CharSet.Unicode)] + public static extern Def.HSI_STATUS HSI_ILLUMINATION_GET_LAMP_STATE_ALL( + int lampInfo, int numLamps, int[] lampsType, int[,] bBulbStates, double[,] intensities); + + [DllImport("HSI.dll", EntryPoint = "HSI_MOTION_IS_SUPPORTED", CharSet = CharSet.Unicode)] + public static extern Def.HSI_STATUS HSI_ILLUMINATION_SET_LAMP_STATE_ALL( + int lampInfo, int numLamps, int[] lampsType, int[,] bBulbStates, double[,] intensities, bool bWait); + + [DllImport("HSI.dll", EntryPoint = "HSI_MOTION_IS_SUPPORTED", CharSet = CharSet.Unicode)] + public static extern Def.HSI_STATUS HSI_ILLUMINATION_SHUTDOWN(); + + // <<<< Out Interfaces + public Illumination() + { + _supported = 0; + _bFirst = true; + } + + public static bool IsActive(bool bForce = false) + { + if (_bFirst || bForce) + { + IsSupported(ref _supported); + _bFirst = false; + } + return (_supported != 0); + } + + private static bool _bFirst; + private static uint _supported; + } + + internal class Def + { + public const int HSI_APIVersionMajor = 1; + public const int HSI_APIVersionMinor = 3; + + public const int HSI_MaxStringLength = 255; // Maximum string length (buffer size - 1) + /////////////////////////////////////////////////////////////////////////////// + // Interface API + /////////////////////////////////////////////////////////////////////////////// + public enum HSI_STATUS + { + HSI_STATUS_NOT_SUPPORTED = -1, + HSI_STATUS_NORMAL = 0, + HSI_STATUS_FAILED, + HSI_FAILED_DLL_LOAD, + + HSI_STATUS_PORTLOCK_HSI_MISMATCH, + + HSI_STATUS_FILE_NOT_FOUND, + HSI_STATUS_HARDWARE_NOT_FOUND, + HSI_STATUS_INVALID_PARAMETERS, + HSI_STATUS_INVALID_POINTS, + HSI_STATUS_PART_NOT_DETECTED, + HSI_STATUS_MEASURE_ERROR, + HSI_STATUS_TEMPERATURE_ERROR, + + HSI_STATUS_ILLUMINATION_COMM = 50, + + HSI_STATUS_OPTICS_COMM = 100, + HSI_STATUS_OPTICS_HOMING, + HSI_STATUS_OPTICS_TIMEOUT, + HSI_STATUS_OPTICS_CALIBRATIONDATA, + HSI_STATUS_OPTICS_CALIBRATIONDATADEFAULT, + HSI_STATUS_OPTICS_CALFILEDATACOUNTMISMATCH, + + HSI_STATUS_MOTION_COMM = 150, + HSI_STATUS_MOTION_HOMING, + HSI_STATUS_MOTION_TIMEOUT, + HSI_STATUS_MOTION_EMERGENCY_STOP, + HSI_STATUS_MOTION_EXCEED_LIMIT, + HSI_STATUS_MOTION_UNKNOWN_ERROR, + HSI_STATUS_MOTION_EXCEED_SW_LIMIT, + HSI_STATUS_MOTION_POSITION_ERROR, + HSI_STATUS_MOTION_MOVING, + + HSI_STATUS_TP_UNEXPECTED_HIT = 200, + HSI_STATUS_TP_TIMEOUT = 201, + HSI_STATUS_TP_APPROACH_TIMEOUT = 202, + HSI_STATUS_TP_WRIST_ERROR, + + HSI_STATUS_FG_COMM = 250, + HSI_STATUS_FG_TIMEOUT, + HSI_STATUS_FG_DIRECTX, + HSI_STATUS_FG_COLORDEPTH, + + HSI_STATUS_LP_TIMEOUT = 300, + HSI_STATUS_LP_EXCEED_LIMIT = 301, + + HSI_STATUS_VP_TIMEOUT = 350, + HSI_STATUS_VP_IMAGEPROCESS_FAIL + }; + + public enum HSI_MACHINE_TYPE + { + HSI_MACHINE_UNKNOWN = 0, + HSI_MACHINE_SO7 = 1, + HSI_MACHINE_TYPE_TOTAL, + }; + + public enum HSI_EVENT_TYPE + { + HSI_EVENT_NONE = 0, + HSI_EVENT_ERROR = 1, + HSI_EVENT_FUNCTION = 2 + }; + + public enum HSI_EVENT_FUNCTION_ID //EventData + { + //SendReceive + // V4.2 & V4.3 + + HSI_EVENT_DONE = 0, //N/A N/A + HSI_EVENT_TAKE_HIT = 1, //N/A N/A + HSI_EVENT_ERASE_HIT = 2, //N/AN/A + HSI_EVENT_TIME_CRITICAL = 3, //"ON", or "OFF" N/A + HSI_EVENT_ZOOM_IN = 4, //"MAX", "COARSE", or "FINE" N/A + HSI_EVENT_ZOOM_OUT = 5, //"MAX", "COARSE", or "FINE" N/A + HSI_EVENT_REFRESH_LIVE_VIEW = 6, //N/AN/A + HSI_EVENT_UPDATE_READOUTS = 7, //"AxisFlags,%lf{x},%lf{y},%lf{z},%lf{r}"N/A + HSI_EVENT_READ_MC_POSITION = 8, //"AxisFlags""AxisFlags,%lf{x},%lf{y},%lf{z},%lf{r}" + HSI_EVENT_MOVE_MC_POSITION = 9, //"AxisFlags,%lf{x},%lf{y},%lf{z},%lf{r},%lf{speed},%1d{bWait}"N/A + HSI_EVENT_CONVERT_MC_TO_GLOBAL = 10, //"%lf{x},%lf{y},%lf{z}" "%lf{x},%lf{y},%lf{z}" + HSI_EVENT_UPDATE_STATUS_MESSAGE = 11, //N/AN/A + HSI_EVENT_OPENFILE_DLG = 12, //N/A"FileName" + HSI_EVENT_DISPLAY_YESNO_MESSAGE = 13, //N/AN/A + HSI_EVENT_DISPLAY_OKCANCEL_MESSAGE = 14, //N/AN/A + HSI_EVENT_DISPLAY_OK_MESSAGE = 15, //N/AN/A + + // V4.3 + Only + HSI_EVENT_DEBUG_LOG = 20, //"%s" N/A + HSI_EVENT_MOVE_MC_POSITION_AND_SETTLE = 21, //"AxisFlags,%lf{x},%lf{y},%lf{z},%lf{r},%lf{speed}" N/A + HSI_EVENT_CONVERT_GLOBAL_TO_MM = 22, //"%lf{x},%lf{y},%lf{z}" "%lf{x},%lf{y},%lf{z}" + HSI_EVENT_CONVERT_ROT_TO_TABLE_POINT = 23, //"%lf{x},%lf{y},%lf{z}" "%lf{x},%lf{y},%lf{z}" + HSI_EVENT_CONVERT_ROT_OUT_TABLE_POINT = 24, //"%lf{x},%lf{y},%lf{z}" "%lf{x},%lf{y},%lf{z}" + HSI_EVENT_CONVERT_ROT_TO_TABLE_VECTOR = 25, //"%lf{x},%lf{y},%lf{z}" "%lf{x},%lf{y},%lf{z}" + HSI_EVENT_CONVERT_ROT_OUT_TABLE_VECTOR = 26, //"%lf{x},%lf{y},%lf{z}" "%lf{x},%lf{y},%lf{z}" + HSI_EVENT_ILLUMINATION_REFRESH = 27, + HSI_EVENT_ILLUMINATION_LOCK = 28, + HSI_EVENT_ILLUMINATION_STORE_SET = 29, + HSI_EVENT_ILLUMINATION_RESTORE_SET = 30, + HSI_EVENT_ILLUMINATION_DECREASE_ACTIVE = 31, // "%d" + HSI_EVENT_ILLUMINATION_INCREASE_ACTIVE = 32, // "%d" + HSI_EVENT_ILLUMINATION_DECREASE_ALL = 33, // "%d" + HSI_EVENT_ILLUMINATION_INCREASE_ALL = 34, // "%d" + HSI_EVENT_ILLUMINATION_SELECT_LAMP = 35, // "%d" + HSI_EVENT_ILLUMINATION_SET_LAMP_INTENSITY = 36, // "%d" + HSI_EVENT_ILLUMINATION_GET_LAMP_INTENSITY = 37, // "%d" + HSI_EVENT_ILLUMINATION_SET_LAMP_CALIBRATION_OVERRIDE = 38, // "%d" + HSI_EVENT_ILLUMINATION_NEXT_RING = 39, + HSI_EVENT_ILLUMINATION_PREV_RING = 40, + HSI_EVENT_ILLUMINATION_NEXT_SECTOR = 41, + HSI_EVENT_ILLUMINATION_PREV_SECTOR = 42, + HSI_EVENT_ILLUMINATION_NUM_LAMPS_INSTALLED = 43, + HSI_EVENT_ILLUMINATION_IS_LAMP_INSTALLED = 44, + HSI_EVENT_ILLUMINATION_APPLY = 45, + HSI_EVENT_ILLUMINATION_ALLOFF = 46, + HSI_EVENT_ILLUMINATION_ALLON = 47, + HSI_EVENT_ILLUMINATION_UNLOCK = 48, + HSI_EVENT_IS_PROGRAMMING_MODE = 49, //1/0 + HSI_EVENT_IS_PORTLOCK_DCC = 50, //1/0 + HSI_EVENT_IS_ROTAB_ENABLED = 51, //1/0 + HSI_EVENT_IS_TIME_CRITICAL = 52, // 1/0 + HSI_EVENT_CONVERT_MM_TO_GLOBAL = 53, + HSI_EVENT_CONVERT_GLOBAL_TO_MC = 54, + HSI_EVENT_LASER_FOCUS_ENABLE = 55, // "%d" 0 = not available, 1 = available + HSI_EVENT_MOVE_POINT = 56, //N/AN/A + HSI_EVENT_MAG_CHANGED = 57, + HSI_EVENT_ILLUMINATION_SET_LAMP_INTENSITY_IN_MACHINE_LEVELx100 = 58, + // "%d" //PR251359-- Instructed to "Please focus on slide" but it's rather unhelpfully turned the lights off for us. + HSI_EVENT_DCC_SCAN_POINTS_AVAILABLE = 59, //"%d"= more to come, 1 = last set N/A + HSI_EVENT_ILLUMINATION_IS_ALL_OFF = 60, + //1/0//PR253777-- Sensilight does not work if the target has 'ALL OFF' for illum setting--4/16/2008 + HSI_EVENT_ILLUMINATION_DECREASE_ALL_NONZERO = 61, + // Sensilight command that wont change a lamp currently set to zero + HSI_EVENT_ILLUMINATION_INCREASE_ALL_NONZERO = 62, + // Sensilight command that wont change a lamp currently set to zero22 + + HSI_EVENT_LP_QUALITY = 63, //"%d" 0-100% + HSI_EVENT_TP_QUALITY = 64, //"%d" 0-100% + HSI_EVENT_VP_QUALITY = 65, //"%d" 0-100% + + HSI_EVENT_FLYMODE_MOVE_COMPLETE = 66, // A queued flymode move has completed + HSI_EVENT_PENDANT_SPEED_PERCENT = 67, // 108336 HMV : Add calls to HSI.H for Speed + HSI_EVENT_PENDANT_AXES_SELECTED = 68, // 108335 HMV : Need to add calls to the HSI.H for Stacked Rotary + + HSI_EVENT_MOTION = 500, + HSI_EVENT_MOTION_DCC_HOME = 501, + HSI_EVENT_SHUTDOWN_ = 999 //N/AN/A + }; + + public enum HSI_NOTIFY_TYPE + { + HSI_NOTIFY_PROGRAM_EXECUTION_START = 0, + HSI_NOTIFY_PROGRAM_EXECUTION_STOP = 1, + + HSI_NOTIFY_TIME_CRITICAL_EVENT_START = 2, + HSI_NOTIFY_TIME_CRITICAL_EVENT_STOP = 3, + HSI_NOTIFY_PROGRAM_OPEN = 4, + HSI_NOTIFY_PROGRAM_CLOSE = 5, + HSI_NOTIFY_PCDMIS_SHUTDOWN = 6 + }; + + public enum HSI_EVENT_RESPONSE_TYPE + { + HSI_EVENT_CALLBACK = 0, + HSI_EVENT_RESPONSE_OK = 1, + HSI_EVENT_RESPONSE_RETRY = 2, + HSI_EVENT_RESPONSE_CANCEL = 3, + HSI_EVENT_RESPONSE_YES = 4, + HSI_EVENT_RESPONSE_NO = 5, + HSI_EVENT_FUNCTION_OK = 6, + HSI_EVENT_FUNCTION_FAILED = 7 + }; + + public struct SHsiEventProperties + { + public uint EventId; + public uint EventCallbackId; + public HSI_EVENT_TYPE EventType; + public HSI_EVENT_RESPONSE_TYPE EventResponse; + public char[] EventData; + + public void Init() + { + EventId = (uint) HSI_EVENT_FUNCTION_ID.HSI_EVENT_DONE; + EventCallbackId = 0; + EventType = HSI_EVENT_TYPE.HSI_EVENT_NONE; + EventResponse = HSI_EVENT_RESPONSE_TYPE.HSI_EVENT_CALLBACK; + EventData = new char[HSI_MaxStringLength + 1]; + } + }; + + + /////////////////////////////////////////////////////////////////////////////// + // Motion API + /////////////////////////////////////////////////////////////////////////////// + + public enum HSI_MOTION_TYPE + { + HSI_MOTION_SUPPORTS_DCC_CONTROL = 0x0001, + HSI_MOTION_SUPPORTS_MANUAL_CONTROL = 0x0002, + HSI_MOTION_SUPPORTS_HOMING = 0x0004, + HSI_MOTION_SUPPORTS_CIRCULAR_MOVES = 0x0008, + HSI_MOTION_SUPPORTS_CMM_WRIST = 0x0010, + HSI_MOTION_SUPPORTS_BUFFERED_MOVES = 0x0020, + HSI_MOTION_SUPPORTS_FLY_MOVES = 0x0040, + HSI_MOTION_SUPPORTS_SCAN = 0x0080, + HSI_MOTION_SUPPORTS_ALL_AXIS_MOVE = 0x0100, + HSI_MOTION_SUPPORTS_MEASPOINT_VW = 0x0200 + }; + + public enum HSI_MOTION_AXIS_TYPE + { + HSI_MOTION_AXIS_X = 0x0001, // This is the default "Sensor level" X Axis - use on single X axis machines + HSI_MOTION_AXIS_Y = 0x0002, // This is the default "Sensor level" Y Axis - use on single Y axis machines + HSI_MOTION_AXIS_Z = 0x0004, // This is the default "Sensor level" Z Axis - use on single Z axis machines + HSI_MOTION_AXIS_R = 0x0008, // This is the default "Sensor level" R Axis - use on single R axis machines + HSI_MOTION_AXIS_X1 = 0x0010, // This is the 1st X Axis - use on multiple axis machines when specific axis needed + HSI_MOTION_AXIS_Y1 = 0x0020, // This is the 1st Y Axis - use on multiple axis machines when specific axis needed + HSI_MOTION_AXIS_Z1 = 0x0040, // This is the 1st Z Axis - use on multiple axis machines when specific axis needed + HSI_MOTION_AXIS_R1 = 0x0080, // This is the 1st R Axis - use on multiple axis machines when specific axis needed + HSI_MOTION_AXIS_X2 = 0x0100, // This is the 2nd X Axis - use on multiple axis machines when specific axis needed + HSI_MOTION_AXIS_Y2 = 0x0200, // This is the 2nd Y Axis - use on multiple axis machines when specific axis needed + HSI_MOTION_AXIS_Z2 = 0x0400, // This is the 2nd Z Axis - use on multiple axis machines when specific axis needed + HSI_MOTION_AXIS_R2 = 0x0800, // This is the 2nd R Axis - use on multiple axis machines when specific axis needed + HSI_MOTION_AXIS_X3 = 0x1000, // This is the 3rd X Axis - use on multiple axis machines when specific axis needed + HSI_MOTION_AXIS_Y3 = 0x2000, // This is the 3rd Y Axis - use on multiple axis machines when specific axis needed + HSI_MOTION_AXIS_Z3 = 0x4000, // This is the 3rd Z Axis - use on multiple axis machines when specific axis needed + HSI_MOTION_AXIS_R3 = 0x8000 // This is the 3rd R Axis - use on multiple axis machines when specific axis needed + }; + + public enum HSI_MOTION_IO_TYPE + { + HSI_MOTION_INPUT1 = 0x0001, + HSI_MOTION_INPUT2, + + HSI_MOTION_OUTPUT1 = 0x0100, + HSI_MOTION_OUTPUT2 + }; + + public const uint HSI_MOTION_AXIS_ALL = + (uint) + (HSI_MOTION_AXIS_TYPE.HSI_MOTION_AXIS_X | HSI_MOTION_AXIS_TYPE.HSI_MOTION_AXIS_Y | + HSI_MOTION_AXIS_TYPE.HSI_MOTION_AXIS_Z); + + public enum HSI_MOTION_MOVE_TYPE + { + HSI_MOTION_MOVE_WAIT = 1, + HSI_MOTION_MOVE_NOWAIT = 2, + HSI_MOTION_MOVE_INTERMEDIATE_POSITION = 3, + HSI_MOTION_MOVE_FINAL_POSITION = 4, + HSI_MOTION_IN_POSITION_EVENT = 5, + HSI_MOTION_MOVE_FLYMODE = 6, + HSI_MOTION_MOVE_START_POSITION = 7, + HSI_MOTION_MOVE_START_FINAL_POSITION = 8 + }; + + public enum HSI_MOTION_AXIS_R_MOVE_TYPE + { + HSI_MOTION_AXIS_R_CLOCKWISE = 1, + HSI_MOTION_AXIS_R_ANTICLOCKWISE = 2, + HSI_MOTION_AXIS_R_FASTEST = 3 + }; + + public const int HSI_MAX_POSITIONS_STORED = 500; + + + /////////////////////////////////////////////////////////////////////////////// + //Illumination API + /////////////////////////////////////////////////////////////////////////////// + public enum HSI_ILLUMINATION_INFO + { + HSI_ILLUMINATION_INFO_UNKNOWN = 0, + HSI_ILLUMINATION_INFO_HSI = 0x01, + HSI_ILLUMINATION_INFO_HSI_II = 0x02, //lvgang + HSI_ILLUMINATION_INFO_HSI_III = 0x04, //shixuyong + HSI_ILLUMINATION_INFO_TOTAL + }; + + public enum HSI_ILLUMINATION_BULB_TYPE + { + HSI_ILLUMINATION_BULB_ROUND = 1, + HSI_ILLUMINATION_BULB_SQUARE = 2, + HSI_ILLUMINATION_BULB_RING = 3, + HSI_ILLUMINATION_BULB_GRID = 4 + }; + + public enum HSI_ILLUMINATION_LAMP_TYPE + { + HSI_ILLUMINATION_LAMP_NONE = 0, + HSI_ILLUMINATION_LAMP_COAXIAL = 1, + HSI_ILLUMINATION_LAMP_SURFACE = 2, + HSI_ILLUMINATION_LAMP_PROFILE = 3, + HSI_ILLUMINATION_LAMP_PROFILE_OUTER = 4 + }; + + public enum HSI_ILLUMINATION_LAMP_CONTROL_TYPE + { + HSI_ILLUMINATION_LAMP_CONTROL_NONE = 0x0000, + HSI_ILLUMINATION_LAMP_CONTROL_BY_WHOLE_LAMP = 0x0001, + HSI_ILLUMINATION_LAMP_CONTROL_BY_RINGS = 0x0002, + HSI_ILLUMINATION_LAMP_CONTROL_BY_OCTANTS = 0x0004, + HSI_ILLUMINATION_LAMP_CONTROL_BY_SEGMENTS = 0x0008, + HSI_ILLUMINATION_LAMP_CONTROL_BY_OTHER + }; + + public enum HSI_ILLUMINATION_BULB_STATE + { + HSI_ILLUMINATION_BULB_STATE_TURN_ON = 0, + HSI_ILLUMINATION_BULB_STATE_TURN_OFF = 1, + HSI_ILLUMINATION_BULB_STATE_TOTAL + }; + + public enum HSI_ILLUMINATION_TYPE + { + HSI_ILLUMINATION_SUPPORTS_DCC_CONTROL = 0x0001, + HSI_ILLUMINATION_SUPPORTS_MANUAL_CONTROL = 0x0002 + }; + + public enum HSI_ILLUMINATION_LAMP_LOCATION_TYPE + { + HSI_ILLUMINATION_LAMP_LOCATION_NONE = 0, + HSI_ILLUMINATION_LAMP_LOCATION_TOP_ON_AXIS = 1, + HSI_ILLUMINATION_LAMP_LOCATION_TOP_ANGLED = 2, + HSI_ILLUMINATION_LAMP_LOCATION_BOTTOM = 3, + HSI_ILLUMINATION_LAMP_LOCATION_MOVABLE = 4 + }; + + public const int HSI_ILLUMINATION_MAX_LAMPS = 6; + public const int HSI_ILLUMINATION_MAX_BULB_COLORS = 3; + public const int HSI_ILLUMINATION_MAX_RINGS = 12; + public const int HSI_ILLUMINATION_MAX_SECTORS = 16; + public const int HSI_ILLUMINATION_MAX_BULBS = HSI_ILLUMINATION_MAX_RINGS*HSI_ILLUMINATION_MAX_SECTORS; + + public const int HSI_MaxLampNameLength = 29, HSI_MaxLampDescriptionLength = 255; + // Maximum string length (buffer size - 1) + } +} \ No newline at end of file diff --git a/PcDmis/Base/Interfac/Msi/Hsi/HSI.h b/PcDmis/Base/Interfac/Msi/Hsi/HSI.h new file mode 100644 index 0000000..4c56f29 --- /dev/null +++ b/PcDmis/Base/Interfac/Msi/Hsi/HSI.h @@ -0,0 +1,503 @@ + +#ifndef HSI_H_INCLUDED_ +#define HSI_H_INCLUDED_ + +#include +#include + +#pragma once +/////////////////////////////////////////////////////////////////////////////// +// +// HSI.h +// +/////////////////////////////////////////////////////////////////////////////// +// +// Definition for Hardware Specific Interface DLL (HSI) +// +/////////////////////////////////////////////////////////////////////////////// +#ifdef HSI_EXPORTS +#define HSI_API extern "C" __declspec(dllexport) +#else +#define HSI_API extern "C" __declspec(dllimport) +#endif + +const int HSI_APIVersionMajor = 1; +const int HSI_APIVersionMinor = 9; + +const int HSI_MaxStringLength = 255; // Maximum string length (buffer size - 1) +/////////////////////////////////////////////////////////////////////////////// +// Interface API +/////////////////////////////////////////////////////////////////////////////// +enum HSI_STATUS +{ + HSI_STATUS_NOT_SUPPORTED = -1, + HSI_STATUS_NORMAL = 0, + HSI_STATUS_FAILED, + HSI_FAILED_DLL_LOAD, + + HSI_STATUS_PORTLOCK_HSI_MISMATCH, + + HSI_STATUS_FILE_NOT_FOUND, + HSI_STATUS_HARDWARE_NOT_FOUND, + HSI_STATUS_INVALID_PARAMETERS, + HSI_STATUS_INVALID_POINTS, + HSI_STATUS_PART_NOT_DETECTED, + HSI_STATUS_MEASURE_ERROR, + HSI_STATUS_TEMPERATURE_ERROR, + + HSI_STATUS_ILLUMINATION_COMM = 50, + + HSI_STATUS_OPTICS_COMM = 100, + HSI_STATUS_OPTICS_HOMING, + HSI_STATUS_OPTICS_TIMEOUT, + HSI_STATUS_OPTICS_CALIBRATIONDATA, + HSI_STATUS_OPTICS_CALIBRATIONDATADEFAULT, + HSI_STATUS_OPTICS_CALFILEDATACOUNTMISMATCH, + + HSI_STATUS_MOTION_COMM = 150, + HSI_STATUS_MOTION_HOMING, + HSI_STATUS_MOTION_TIMEOUT, + HSI_STATUS_MOTION_EMERGENCY_STOP, + HSI_STATUS_MOTION_EXCEED_LIMIT, + HSI_STATUS_MOTION_UNKNOWN_ERROR, + HSI_STATUS_MOTION_EXCEED_SW_LIMIT, + HSI_STATUS_MOTION_POSITION_ERROR, + HSI_STATUS_MOTION_MOVING, + + HSI_STATUS_TP_UNEXPECTED_HIT = 200, + HSI_STATUS_TP_TIMEOUT = 201, + HSI_STATUS_TP_APPROACH_TIMEOUT = 202, + HSI_STATUS_TP_WRIST_ERROR, + + HSI_STATUS_FG_COMM = 250, + HSI_STATUS_FG_TIMEOUT, + HSI_STATUS_FG_DIRECTX, + HSI_STATUS_FG_COLORDEPTH, + + HSI_STATUS_LP_TIMEOUT = 300, + HSI_STATUS_LP_EXCEED_LIMIT = 301, + + HSI_STATUS_VP_TIMEOUT = 350, + HSI_STATUS_VP_IMAGEPROCESS_FAIL +}; +enum HSI_MACHINE_TYPE +{ + HSI_MACHINE_UNKNOWN = 0, + HSI_MACHINE_SO7 = 1, + HSI_MACHINE_NAVITAR_AUTOZOOM = 2, + HSI_MACHINE_EF3 = 3, + HSI_MACHINE_GOOGOL = 4, + HSI_MACHINE_TYPE_TOTAL, +}; +enum HSI_EVENT_TYPE +{ + HSI_EVENT_NONE = 0, + HSI_EVENT_ERROR = 1, + HSI_EVENT_FUNCTION = 2, + HSI_EVENT_NOTIFY = 3, + HSI_EVENT_SAFETY = 4, + HSI_EVENT_SAFETY_KEEP = 5 +}; +enum HSI_EVENT_FUNCTION_ID // EventData +{ // Send Receive + // V4.2 & V4.3 + + HSI_EVENT_DONE = 0, // N/A N/A + HSI_EVENT_TAKE_HIT = 1, // N/A N/A + HSI_EVENT_ERASE_HIT = 2, // N/A N/A + HSI_EVENT_TIME_CRITICAL = 3, // "ON", or "OFF" N/A + HSI_EVENT_ZOOM_IN = 4, // "MAX", "COARSE", or "FINE" N/A + HSI_EVENT_ZOOM_OUT = 5, // "MAX", "COARSE", or "FINE" N/A + HSI_EVENT_REFRESH_LIVE_VIEW = 6, // N/A N/A + HSI_EVENT_UPDATE_READOUTS = 7, // "AxisFlags,%lf{x},%lf{y},%lf{z},%lf{r}" N/A + HSI_EVENT_READ_MC_POSITION = 8, // "AxisFlags" "AxisFlags,%lf{x},%lf{y},%lf{z},%lf{r}" + HSI_EVENT_MOVE_MC_POSITION = 9, // "AxisFlags,%lf{x},%lf{y},%lf{z},%lf{r},%lf{speed},%1d{bWait}" N/A + HSI_EVENT_CONVERT_MC_TO_GLOBAL = 10, // "%lf{x},%lf{y},%lf{z}" "%lf{x},%lf{y},%lf{z}" + HSI_EVENT_UPDATE_STATUS_MESSAGE = 11, // N/A N/A + HSI_EVENT_OPENFILE_DLG = 12, // N/A "FileName" + HSI_EVENT_DISPLAY_YESNO_MESSAGE = 13, // N/A N/A + HSI_EVENT_DISPLAY_OKCANCEL_MESSAGE = 14, // N/A N/A + HSI_EVENT_DISPLAY_OK_MESSAGE = 15, // N/A N/A + + // V4.3 + Only + HSI_EVENT_DEBUG_LOG = 20, // "%s" N/A + HSI_EVENT_MOVE_MC_POSITION_AND_SETTLE = 21, // "AxisFlags,%lf{x},%lf{y},%lf{z},%lf{r},%lf{speed}" N/A + HSI_EVENT_CONVERT_GLOBAL_TO_MM = 22, // "%lf{x},%lf{y},%lf{z}" "%lf{x},%lf{y},%lf{z}" + HSI_EVENT_CONVERT_ROT_TO_TABLE_POINT = 23, // "%lf{x},%lf{y},%lf{z}" "%lf{x},%lf{y},%lf{z}" + HSI_EVENT_CONVERT_ROT_OUT_TABLE_POINT = 24, // "%lf{x},%lf{y},%lf{z}" "%lf{x},%lf{y},%lf{z}" + HSI_EVENT_CONVERT_ROT_TO_TABLE_VECTOR = 25, // "%lf{x},%lf{y},%lf{z}" "%lf{x},%lf{y},%lf{z}" + HSI_EVENT_CONVERT_ROT_OUT_TABLE_VECTOR = 26, // "%lf{x},%lf{y},%lf{z}" "%lf{x},%lf{y},%lf{z}" + HSI_EVENT_ILLUMINATION_REFRESH = 27, + HSI_EVENT_ILLUMINATION_LOCK = 28, + HSI_EVENT_ILLUMINATION_STORE_SET = 29, + HSI_EVENT_ILLUMINATION_RESTORE_SET = 30, + HSI_EVENT_ILLUMINATION_DECREASE_ACTIVE = 31, // "%d" + HSI_EVENT_ILLUMINATION_INCREASE_ACTIVE = 32, // "%d" + HSI_EVENT_ILLUMINATION_DECREASE_ALL = 33, // "%d" + HSI_EVENT_ILLUMINATION_INCREASE_ALL = 34, // "%d" + HSI_EVENT_ILLUMINATION_SELECT_LAMP = 35, // "%d" + HSI_EVENT_ILLUMINATION_SET_LAMP_INTENSITY = 36, // "%d" + HSI_EVENT_ILLUMINATION_GET_LAMP_INTENSITY = 37, // "%d" + HSI_EVENT_ILLUMINATION_SET_LAMP_CALIBRATION_OVERRIDE = 38, // "%d" + HSI_EVENT_ILLUMINATION_NEXT_RING = 39, + HSI_EVENT_ILLUMINATION_PREV_RING = 40, + HSI_EVENT_ILLUMINATION_NEXT_SECTOR = 41, + HSI_EVENT_ILLUMINATION_PREV_SECTOR = 42, + HSI_EVENT_ILLUMINATION_NUM_LAMPS_INSTALLED = 43, + HSI_EVENT_ILLUMINATION_IS_LAMP_INSTALLED = 44, + HSI_EVENT_ILLUMINATION_APPLY = 45, + HSI_EVENT_ILLUMINATION_ALLOFF = 46, + HSI_EVENT_ILLUMINATION_ALLON = 47, + HSI_EVENT_ILLUMINATION_UNLOCK = 48, + HSI_EVENT_IS_PROGRAMMING_MODE = 49, // 1/0 + HSI_EVENT_IS_PORTLOCK_DCC = 50, // 1/0 + HSI_EVENT_IS_ROTAB_ENABLED = 51, // 1/0 + HSI_EVENT_IS_TIME_CRITICAL = 52, // 1/0 + HSI_EVENT_CONVERT_MM_TO_GLOBAL = 53, + HSI_EVENT_CONVERT_GLOBAL_TO_MC = 54, + HSI_EVENT_LASER_FOCUS_ENABLE = 55, // "%d" 0 = not available, 1 = available + HSI_EVENT_MOVE_POINT = 56, // N/A N/A + HSI_EVENT_MAG_CHANGED = 57, + HSI_EVENT_ILLUMINATION_SET_LAMP_INTENSITY_IN_MACHINE_LEVELx100 = 58, // "%d" //PR251359-- Instructed to "Please focus on slide" but it's rather unhelpfully turned the lights off for us. + HSI_EVENT_DCC_SCAN_POINTS_AVAILABLE = 59, // "%d" = more to come, 1 = last set N/A + HSI_EVENT_ILLUMINATION_IS_ALL_OFF = 60, // 1/0 //PR253777-- Sensilight does not work if the target has 'ALL OFF' for illum setting--4/16/2008 + HSI_EVENT_ILLUMINATION_DECREASE_ALL_NONZERO = 61, // Sensilight command that wont change a lamp currently set to zero + HSI_EVENT_ILLUMINATION_INCREASE_ALL_NONZERO = 62, // Sensilight command that wont change a lamp currently set to zero22 + + HSI_EVENT_LP_QUALITY = 63, // "%d" 0-100% + HSI_EVENT_TP_QUALITY = 64, // "%d" 0-100% + HSI_EVENT_VP_QUALITY = 65, // "%d" 0-100% + + HSI_EVENT_FLYMODE_MOVE_COMPLETE = 66, // A queued flymode move has completed + HSI_EVENT_PENDANT_SPEED_PERCENT = 67, // 108336 HMV : Add calls to HSI.H for Speed + HSI_EVENT_PENDANT_AXES_SELECTED = 68, // 108335 HMV : Need to add calls to the HSI.H for Stacked Rotary + + HSI_EVENT_MOTION = 500, + HSI_EVENT_MOTION_DCC_HOME = 501, + HSI_EVENT_MOTION_FOCUS_HOME = 502, + HSI_EVENT_MOTION_EMERGENT_STOP = 503, + HSI_EVENT_SHUTDOWN_ = 999, // N/A N/A + HSI_EVENT_MOTION_DRIVER_ALARM = 1000, + HSI_EVENT_MOTION_PROBE = 1001, + HSI_EVENT_MOTION_DISPENSER = 1002 +}; +enum HSI_NOTIFY_TYPE +{ + HSI_NOTIFY_PROGRAM_EXECUTION_START = 0, + HSI_NOTIFY_PROGRAM_EXECUTION_STOP = 1, + + HSI_NOTIFY_TIME_CRITICAL_EVENT_START = 2, + HSI_NOTIFY_TIME_CRITICAL_EVENT_STOP = 3, + HSI_NOTIFY_PROGRAM_OPEN = 4, + HSI_NOTIFY_PROGRAM_CLOSE = 5, + HSI_NOTIFY_PCDMIS_SHUTDOWN = 6, + HSI_NOTIFY_CLEAR_ITERATIONS = 7, + HSI_NOTIFY_EMERGENCY_STATE = 9 +}; +enum HSI_EVENT_RESPONSE_TYPE +{ + HSI_EVENT_CALLBACK = 0, + HSI_EVENT_RESPONSE_OK = 1, + HSI_EVENT_RESPONSE_RETRY = 2, + HSI_EVENT_RESPONSE_CANCEL = 3, + HSI_EVENT_RESPONSE_YES = 4, + HSI_EVENT_RESPONSE_NO = 5, + HSI_EVENT_FUNCTION_OK = 6, + HSI_EVENT_FUNCTION_FAILED = 7 +}; + +const int HSI_THREAD_EXIT = -1; +const int HSI_THREAD_RUNNING = 0; +const int HSI_THREAD_PAUSED = 1; + +struct sHSIEventProperties +{ + UINT EventID; + UINT EventCallbackID; + HSI_EVENT_TYPE EventType; + HSI_EVENT_RESPONSE_TYPE EventResponse; + char EventData[HSI_MaxStringLength + 1]; + void Init() + { + EventID = 0; + EventCallbackID = 0; + EventType = HSI_EVENT_NONE; + EventResponse = HSI_EVENT_CALLBACK; + memset(EventData, 0, (HSI_MaxStringLength + 1)*sizeof(char)); + }; + sHSIEventProperties() + { + Init(); + } +}; + + + +// >>>> In Interfaces +typedef VOID(WINAPI *pEventCallback)(HSI_EVENT_TYPE EventType, HSI_EVENT_RESPONSE_TYPE ResponseType, UINT EventID, char EventData[HSI_MaxStringLength + 1], UINT &EventCallbackID); +HSI_API HSI_STATUS WINAPI HSI_STARTUP(HWND _hWnd, bool _bOfflineOnly); +HSI_API HSI_STATUS WINAPI HSI_GET_INTERFACE_VERSION(UINT &APIVersionMajor, UINT &APIVersionMinor); +HSI_API HSI_STATUS WINAPI HSI_GET_MACHINE_INFO(int &_NumMachineTypes); +HSI_API HSI_STATUS WINAPI HSI_SET_EVENT_CALLBACK(pEventCallback _pCallback); +HSI_API HSI_STATUS WINAPI HSI_SHUTDOWM(); + +// <<<< Out Interfaces + + +/////////////////////////////////////////////////////////////////////////////// +// Motion API +/////////////////////////////////////////////////////////////////////////////// + +enum HSI_MOTION_TYPE +{ + HSI_MOTION_SUPPORTS_DCC_CONTROL = 0x0001, + HSI_MOTION_SUPPORTS_MANUAL_CONTROL = 0x0002, + HSI_MOTION_SUPPORTS_HOMING = 0x0004, + HSI_MOTION_SUPPORTS_CIRCULAR_MOVES = 0x0008, + HSI_MOTION_SUPPORTS_CMM_WRIST = 0x0010, + HSI_MOTION_SUPPORTS_BUFFERED_MOVES = 0x0020, + HSI_MOTION_SUPPORTS_FLY_MOVES = 0x0040, + HSI_MOTION_SUPPORTS_SCAN = 0x0080, + HSI_MOTION_SUPPORTS_ALL_AXIS_MOVE = 0x0100, + HSI_MOTION_SUPPORTS_MEASPOINT_VW = 0x0200 +}; + +enum HSI_MOTION_AXIS_TYPE +{ + HSI_MOTION_AXIS_X = 0x0001, // This is the default "Sensor level" X Axis - use on single X axis machines + HSI_MOTION_AXIS_Y = 0x0002, // This is the default "Sensor level" Y Axis - use on single Y axis machines + HSI_MOTION_AXIS_Z = 0x0004, // This is the default "Sensor level" Z Axis - use on single Z axis machines + HSI_MOTION_AXIS_R = 0x0008, // This is the default "Sensor level" R Axis - use on single R axis machines + HSI_MOTION_AXIS_X1 = 0x0010, // This is the 1st X Axis - use on multiple axis machines when specific axis needed + HSI_MOTION_AXIS_Y1 = 0x0020, // This is the 1st Y Axis - use on multiple axis machines when specific axis needed + HSI_MOTION_AXIS_Z1 = 0x0040, // This is the 1st Z Axis - use on multiple axis machines when specific axis needed + HSI_MOTION_AXIS_R1 = 0x0080, // This is the 1st R Axis - use on multiple axis machines when specific axis needed + HSI_MOTION_AXIS_X2 = 0x0100, // This is the 2nd X Axis - use on multiple axis machines when specific axis needed + HSI_MOTION_AXIS_Y2 = 0x0200, // This is the 2nd Y Axis - use on multiple axis machines when specific axis needed + HSI_MOTION_AXIS_Z2 = 0x0400, // This is the 2nd Z Axis - use on multiple axis machines when specific axis needed + HSI_MOTION_AXIS_R2 = 0x0800, // This is the 2nd R Axis - use on multiple axis machines when specific axis needed + HSI_MOTION_AXIS_X3 = 0x1000, // This is the 3rd X Axis - use on multiple axis machines when specific axis needed + HSI_MOTION_AXIS_Y3 = 0x2000, // This is the 3rd Y Axis - use on multiple axis machines when specific axis needed + HSI_MOTION_AXIS_Z3 = 0x4000, // This is the 3rd Z Axis - use on multiple axis machines when specific axis needed + HSI_MOTION_AXIS_R3 = 0x8000 // This is the 3rd R Axis - use on multiple axis machines when specific axis needed +}; +enum HSI_MOTION_IO_TYPE +{ + HSI_MOTION_INPUT = 0x0001, + HSI_MOTION_INPUT_LIMIT_SWITCH, + HSI_MOTION_INPUT_CH1,//固高、众为兴、EF1输入 + HSI_MOTION_INPUT_CH2, + HSI_MOTION_INPUT_CH3,//串口控制器输入 + HSI_MOTION_INPUT_CH4,//众为兴运动控制卡测试输入 + HSI_MOTION_INPUT_ALARM,//驱动报警 + + HSI_MOTION_OUTPUT = 0x0100, + HSI_MOTION_OUTPUT_LASER_PEN, + HSI_MOTION_OUTPUT_CH1,//固高、众为兴、EF1输出 + HSI_MOTION_OUTPUT_CH2, + HSI_MOTION_OUTPUT_CH3,//串口控制器输出 + HSI_MOTION_OUTPUT_CH4//众为兴运动控制卡测试输出 +}; + +const UINT HSI_MOTION_AXIS_ALL = HSI_MOTION_AXIS_X | HSI_MOTION_AXIS_Y | HSI_MOTION_AXIS_Z; + +enum HSI_MOTION_MOVE_TYPE +{ + HSI_MOTION_MOVE_WAIT = 1, + HSI_MOTION_MOVE_NOWAIT = 2, + HSI_MOTION_MOVE_INTERMEDIATE_POSITION = 3, + HSI_MOTION_MOVE_FINAL_POSITION = 4, + HSI_MOTION_IN_POSITION_EVENT = 5, + HSI_MOTION_MOVE_FLYMODE = 6, + HSI_MOTION_MOVE_START_POSITION = 7, + HSI_MOTION_MOVE_START_FINAL_POSITION = 8 +}; + +enum HSI_MOTION_AXIS_R_MOVE_TYPE +{ + HSI_MOTION_AXIS_R_CLOCKWISE = 1, + HSI_MOTION_AXIS_R_ANTICLOCKWISE = 2, + HSI_MOTION_AXIS_R_FASTEST = 3 +}; +enum HSI_SCAN_MOTION_TYPE +{ + HSI_SCAN_MOTION_LINEAR = 1, + HSI_SCAN_MOTION_CIRCULAR, + + HSI_SCAN_MOTION_SPEC_LOCA = 100,//EF1 + HSI_SCAN_MOTION_EQ_DIS, + HSI_SCAN_MOTION_EQ_DIS_II, + HSI_SCAN_MOTION_LINEAR_TEST,//测试使用 + HSI_SCAN_MOTION_EQ_TEST,//测试使用 + HSI_SCAN_MOTION_MANUAL_TEST//测试使用 +}; + +enum HSI_ZOOM_TYPE +{ + HSI_ZOOM_MANUAL = 0, + HSI_ZOOM_NAVITAR=3 +}; + +typedef struct +{ + double x; + double y; + double z; +}Point; +const int HSI_MAX_POSITIONS_STORED = 500; + +// >>>> In Interfaces +HSI_API HSI_STATUS WINAPI HSI_MOTION_IS_SUPPORTED(UINT &Types); +HSI_API HSI_STATUS WINAPI HSI_MOTION_STARTUP(bool bHome); +HSI_API HSI_STATUS WINAPI HSI_MOTION_IS_HOMED(bool &bHomed); + +HSI_API HSI_STATUS WINAPI HSI_MOTION_GET_SPEED_XYZ(double &Speed); +HSI_API HSI_STATUS WINAPI HSI_EF3MOTION_GET_SPEED_XYZ(int axis, double &Speed); +HSI_API HSI_STATUS WINAPI HSI_MOTION_SET_SPEED_XYZ(double Speed); +HSI_API HSI_STATUS WINAPI HSI_MOTION_GET_ACCELERATION_XYZ(double &AccelX, double &AccelY, double &AccelZ); +HSI_API HSI_STATUS WINAPI HSI_MOTION_SET_ACCELERATION_XYZ(double AccelX, double AccelY, double AccelZ); + +HSI_API HSI_STATUS WINAPI HSI_MOTION_GET_SPEED_R(double &Speed); +HSI_API HSI_STATUS WINAPI HSI_MOTION_SET_SPEED_R(double Speed); +HSI_API HSI_STATUS WINAPI HSI_MOTION_GET_ACCELERATION_R(double &AccelR); +HSI_API HSI_STATUS WINAPI HSI_MOTION_SET_ACCELERATION_R(double AccelR); + +HSI_API HSI_STATUS WINAPI HSI_MOTION_GET_SCALE_RESOLUTION(double &ScaleX, double &ScaleY, double &ScaleZ); +HSI_API HSI_STATUS WINAPI HSI_MOTION_SET_SCALE_RESOLUTION(double ScaleX, double ScaleY, double ScaleZ); +HSI_API HSI_STATUS WINAPI HSI_MOTION_GET_DEADBAND(double &DeadbandX, double &DeadbandY, double &DeadbandZ, double &DeadbandR); +HSI_API HSI_STATUS WINAPI HSI_MOTION_GET_REFRESH_DEADBAND(double &Deadband); + +HSI_API HSI_STATUS WINAPI HSI_MOTION_JOG(UINT AxisTypes, double Speed); +HSI_API HSI_STATUS WINAPI HSI_MOTION_STOP_JOG(); +HSI_API BOOL WINAPI HSI_MOTION_GET_PROBE_TOUCH(); +HSI_API HSI_STATUS WINAPI HSI_MOTION_TOUCH_MOVE(double dSpeed, double dEndPosX, double dEndPosY, double dEndPosZ, double dI, double dJ, double dK); +HSI_API HSI_STATUS WINAPI HSI_MOTION_GET_POSITION_XYZ(UINT AxisTypes, double &PositionX, double &PositionY, double &PositionZ, double &Time); +HSI_API HSI_STATUS WINAPI HSI_MOTION_GET_POSITION_XYZA_PROBE(UINT AxisTypes, double &PositionX, double &PositionY, double &PositionZ, double &dI, double &dJ, double &dK, double &PositionA); +HSI_API HSI_STATUS WINAPI HSI_MOTION_GET_POSITIONPROBE(UINT AxisTypes, double &PositionX, double &PositionY, double &PositionZ, double &PositionA); +HSI_API HSI_STATUS WINAPI HSI_MOTION_GET_ENCODER_XYZ(long *lEncVal); + +HSI_API HSI_STATUS WINAPI HSI_MOTION_SET_POSITION_XYZ(UINT AxisTypes, double PositionX, double PositionY, double PositionZ, HSI_MOTION_MOVE_TYPE eType, double dSpeedGear); +HSI_API HSI_STATUS WINAPI HSI_MOTION_SET_POSITION_XYZ_CACHE(UINT AxisTypes, HSI_MOTION_MOVE_TYPE eType, int DataCount, Point *CacheData); +HSI_API HSI_STATUS WINAPI HSI_MOTION_GET_POSITION_R(UINT AxisTypes, double &PositionR, double &Time); +HSI_API HSI_STATUS WINAPI HSI_MOTION_SET_POSITION_R(UINT AxisTypes, double PositionR, HSI_MOTION_AXIS_R_MOVE_TYPE DirectionType, bool bWait); +HSI_API HSI_STATUS WINAPI HSI_MOTION_ABORT_MOTION(); +HSI_API HSI_STATUS WINAPI HSI_MOTION_SET_PLAN_SCAN(double *pdStartPosX, double *pdStartPosY, double *pdStartPosZ, double *pdEndPosX, double *pdEndPosY, double *pdEndPosZ, double *pdStepDis, bool *pbTrig, int iCount); + +HSI_API HSI_STATUS WINAPI HSI_MOTION_GET_DIO(UINT IOChannel, UINT& _Status); +HSI_API HSI_STATUS WINAPI HSI_MOTION_SET_DIO(UINT IOChannel, UINT _Status); + +HSI_API HSI_STATUS WINAPI HSI_MOTION_DCC_SCAN_SET_DATA(UINT AxisTypes, HSI_SCAN_MOTION_TYPE eType, UINT lTrigNumber, double* dTrigDis); +HSI_API HSI_STATUS WINAPI HSI_MOTION_DCC_SCAN_START(); +HSI_API HSI_STATUS WINAPI HSI_MOTION_DCC_SCAN_STOP(); + +HSI_API HSI_STATUS WINAPI HSI_MOTION_IS_SUPPORTED_EX(UINT AxisTypes, UINT &Types); +HSI_API HSI_STATUS WINAPI HSI_MOTION_STARTUP_EX(UINT AxisTypes, bool bHome); +HSI_API HSI_STATUS WINAPI HSI_MOTION_GET_SCALE_RESOLUTION_EX(UINT AxisTypes, double &Scale); +HSI_API HSI_STATUS WINAPI HSI_MOTION_SET_SCALE_RESOLUTION_EX(UINT AxisTypes, double Scale); +HSI_API HSI_STATUS WINAPI HSI_MOTION_GET_POSITION_EX(UINT AxisTypes, double &Position, double &Time); +HSI_API HSI_STATUS WINAPI HSI_MOTION_SET_POSITION_EX(UINT AxisTypes, double Position, HSI_MOTION_MOVE_TYPE eType, double dSpeedGear); +HSI_API HSI_STATUS WINAPI HSI_MOTION_GET_SPEED_EX(UINT AxisTypes, double &Speed); +HSI_API HSI_STATUS WINAPI HSI_MOTION_SET_SPEED_EX(UINT AxisTypes, double Speed); +HSI_API HSI_STATUS WINAPI HSI_MOTION_GET_ACCELERATION_EX(UINT AxisTypes, double &Accel); +HSI_API HSI_STATUS WINAPI HSI_MOTION_SET_ACCELERATION_EX(UINT AxisTypes, double Accel); + +HSI_API HSI_STATUS WINAPI HSI_MOTION_SET_MAGNIFICATION(UINT AxisTypes, double mag, HSI_MOTION_MOVE_TYPE eType, double dSpeedGear); +HSI_API HSI_STATUS WINAPI HSI_MOTION_GET_MAGNIFICATION(UINT AxisTypes, double &mag); +HSI_API HSI_STATUS WINAPI HSI_MOTION_SET_SCALE_POS(UINT AxisTypes, double ScalePos, HSI_MOTION_MOVE_TYPE eType, double dSpeedGear); +HSI_API HSI_STATUS WINAPI HSI_MOTION_GET_SCALE_POS(UINT AxisTypes, double &ScalePos); + +HSI_API HSI_STATUS WINAPI HSI_MOTION_SHUTDOWN(); +// <<<< Out Interfaces + +/////////////////////////////////////////////////////////////////////////////// +// Illumination API +/////////////////////////////////////////////////////////////////////////////// +enum HSI_ILLUMINATION_INFO +{ + HSI_ILLUMINATION_INFO_UNKNOWN = 0, + HSI_ILLUMINATION_INFO_SO7 = 0x01, + HSI_ILLUMINATION_INFO_SO7_II = 0x02,//lvgang + HSI_ILLUMINATION_INFO_SO7_III = 0x04,//shixuyong + HSI_ILLUMINATION_INFO_TOTAL +}; +enum HSI_ILLUMINATION_BULB_TYPE +{ + HSI_ILLUMINATION_BULB_ROUND = 1, + HSI_ILLUMINATION_BULB_SQUARE = 2, + HSI_ILLUMINATION_BULB_RING = 3, + HSI_ILLUMINATION_BULB_GRID = 4 +}; + +enum HSI_ILLUMINATION_LAMP_TYPE +{ + HSI_ILLUMINATION_LAMP_COAXIAL = 0, + HSI_ILLUMINATION_LAMP_SURFACE = 1, + HSI_ILLUMINATION_LAMP_PROFILE = 2, + HSI_ILLUMINATION_LAMP_PROFILE_OUTER = 3 +}; +enum HSI_ILLUMINATION_LAMP_CONTROL_TYPE +{ + HSI_ILLUMINATION_LAMP_CONTROL_BY_WHOLE_LAMP = 0x0000, + HSI_ILLUMINATION_LAMP_CONTROL_BY_RINGS = 0x0001, + HSI_ILLUMINATION_LAMP_CONTROL_BY_OCTANTS = 0x0002, + HSI_ILLUMINATION_LAMP_CONTROL_BY_SEGMENTS = 0x0004, + HSI_ILLUMINATION_LAMP_CONTROL_BY_OTHER +}; +enum HSI_ILLUMINATION_BULB_STATE +{ + HSI_ILLUMINATION_BULB_STATE_TURN_ON = 0, + HSI_ILLUMINATION_BULB_STATE_TURN_OFF = 1, + HSI_ILLUMINATION_BULB_STATE_TOTAL +}; +enum HSI_ILLUMINATION_TYPE +{ + HSI_ILLUMINATION_SUPPORTS_DCC_CONTROL = 0x0001, + HSI_ILLUMINATION_SUPPORTS_MANUAL_CONTROL = 0x0002 +}; + +enum HSI_ILLUMINATION_LAMP_LOCATION_TYPE +{ + HSI_ILLUMINATION_LAMP_LOCATION_NONE = 0, + HSI_ILLUMINATION_LAMP_LOCATION_TOP_ON_AXIS = 1, + HSI_ILLUMINATION_LAMP_LOCATION_TOP_ANGLED = 2, + HSI_ILLUMINATION_LAMP_LOCATION_BOTTOM = 3, + HSI_ILLUMINATION_LAMP_LOCATION_MOVABLE = 4 +}; + +const int HSI_ILLUMINATION_MAX_LAMPS = 6; +const int HSI_ILLUMINATION_MAX_BULB_COLORS = 3; +const int HSI_ILLUMINATION_MAX_RINGS = 12; +const int HSI_ILLUMINATION_MAX_SECTORS = 16; +const int HSI_ILLUMINATION_MAX_BULBS = HSI_ILLUMINATION_MAX_RINGS*HSI_ILLUMINATION_MAX_SECTORS; +const int HSI_ILLUMINATION_MAX_BULB_TYPE = 2; + +const int HSI_MaxLampNameLength = 29, HSI_MaxLampDescriptionLength = 255; // Maximum string length (buffer size - 1) + +// >>>> In Interfaces +HSI_API HSI_STATUS WINAPI HSI_ILLUMINATION_IS_SUPPORTED(UINT &Types); +HSI_API HSI_STATUS WINAPI HSI_ILLUMINATION_STARTUP(); +HSI_API HSI_STATUS WINAPI HSI_ILLUMINATION_GET_LAMP_COUNT(int &nLamps); +HSI_API HSI_STATUS WINAPI HSI_ILLUMINATION_GET_LAMP_INFO(int& _LampInfo, int& _NumLamps, int(*_LampsType)[HSI_ILLUMINATION_MAX_BULB_TYPE], + int *NumRings, int *NumSectors, int* _Color, double *_Angle, bool &bCanBeCalibrated); +HSI_API HSI_STATUS WINAPI HSI_ILLUMINATION_GET_LAMP_STATE(int nLamp, bool *bBulbStates, double *Intensities, int &Color, double &Angle); +HSI_API HSI_STATUS WINAPI HSI_ILLUMINATION_SET_LAMP_STATE(int nLamp, bool *bBulbStates, double *Intensities, int Color, double Angle, bool bWait); +HSI_API HSI_STATUS WINAPI HSI_ILLUMINATION_GET_LAMP_STATE_ALL(int _LampInfo, int _NumLamps, int(*_LampsType)[HSI_ILLUMINATION_MAX_BULB_TYPE], int(*bBulbStates)[HSI_ILLUMINATION_MAX_BULBS], double(*Intensities)[HSI_ILLUMINATION_MAX_BULBS]); +HSI_API HSI_STATUS WINAPI HSI_ILLUMINATION_SET_LAMP_STATE_ALL(int _LampInfo, int _NumLamps, int(*_LampsType)[HSI_ILLUMINATION_MAX_BULB_TYPE], int(*bBulbStates)[HSI_ILLUMINATION_MAX_BULBS], double(*Intensities)[HSI_ILLUMINATION_MAX_BULBS], bool bWait); +HSI_API HSI_STATUS WINAPI HSI_ILLUMINATION_SHUTDOWN(); +// <<<< Out Interfaces + + +class HSI +{ +public: + HSI() : hWnd(nullptr), bOfflineOnly(false){} + virtual ~HSI(){} + virtual HSI_STATUS IsSupported(UINT &Types){ Types = 0; return HSI_STATUS_NORMAL; } + virtual HSI_STATUS Startup(HWND _hWnd, bool _bOfflineOnly){ hWnd = _hWnd; bOfflineOnly = _bOfflineOnly; return HSI_STATUS_NORMAL; } + virtual HSI_STATUS Shutdown(){ return HSI_STATUS_NORMAL; } +protected: + HWND hWnd; + bool bOfflineOnly; + sHSIEventProperties sEvenProp; + +}; +#endif \ No newline at end of file diff --git a/PcDmis/Base/Interfac/Msi/Hsi/PCDA_Report/Debug/Pcda.exp b/PcDmis/Base/Interfac/Msi/Hsi/PCDA_Report/Debug/Pcda.exp new file mode 100644 index 0000000..803994f Binary files /dev/null and b/PcDmis/Base/Interfac/Msi/Hsi/PCDA_Report/Debug/Pcda.exp differ diff --git a/PcDmis/Base/Interfac/Msi/Hsi/PCDA_Report/Debug/Pcda.lib b/PcDmis/Base/Interfac/Msi/Hsi/PCDA_Report/Debug/Pcda.lib new file mode 100644 index 0000000..67bb6d5 Binary files /dev/null and b/PcDmis/Base/Interfac/Msi/Hsi/PCDA_Report/Debug/Pcda.lib differ diff --git a/PcDmis/Base/Interfac/Msi/Hsi/PCDA_Report/PCDA_Report.sln b/PcDmis/Base/Interfac/Msi/Hsi/PCDA_Report/PCDA_Report.sln new file mode 100644 index 0000000..03499c4 --- /dev/null +++ b/PcDmis/Base/Interfac/Msi/Hsi/PCDA_Report/PCDA_Report.sln @@ -0,0 +1,34 @@ +锘 +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio 14 +VisualStudioVersion = 14.0.25420.1 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Pdca", "PCDA_Report\PCDA_Report.vcxproj", "{363F54B0-75E1-4E24-AF89-F0053BAA7117}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|x64 = Debug|x64 + Debug|x86 = Debug|x86 + DebugRelease|x64 = DebugRelease|x64 + DebugRelease|x86 = DebugRelease|x86 + Release|x64 = Release|x64 + Release|x86 = Release|x86 + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {363F54B0-75E1-4E24-AF89-F0053BAA7117}.Debug|x64.ActiveCfg = Debug|x64 + {363F54B0-75E1-4E24-AF89-F0053BAA7117}.Debug|x64.Build.0 = Debug|x64 + {363F54B0-75E1-4E24-AF89-F0053BAA7117}.Debug|x86.ActiveCfg = Debug|Win32 + {363F54B0-75E1-4E24-AF89-F0053BAA7117}.Debug|x86.Build.0 = Debug|Win32 + {363F54B0-75E1-4E24-AF89-F0053BAA7117}.DebugRelease|x64.ActiveCfg = DebugRelease|x64 + {363F54B0-75E1-4E24-AF89-F0053BAA7117}.DebugRelease|x64.Build.0 = DebugRelease|x64 + {363F54B0-75E1-4E24-AF89-F0053BAA7117}.DebugRelease|x86.ActiveCfg = DebugRelease|Win32 + {363F54B0-75E1-4E24-AF89-F0053BAA7117}.DebugRelease|x86.Build.0 = DebugRelease|Win32 + {363F54B0-75E1-4E24-AF89-F0053BAA7117}.Release|x64.ActiveCfg = Release|x64 + {363F54B0-75E1-4E24-AF89-F0053BAA7117}.Release|x64.Build.0 = Release|x64 + {363F54B0-75E1-4E24-AF89-F0053BAA7117}.Release|x86.ActiveCfg = Release|Win32 + {363F54B0-75E1-4E24-AF89-F0053BAA7117}.Release|x86.Build.0 = Release|Win32 + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/PcDmis/Base/Interfac/Msi/Hsi/PCDA_Report/PCDA_Report/Debug/PCDA_Report.tlog/CL.command.1.tlog b/PcDmis/Base/Interfac/Msi/Hsi/PCDA_Report/PCDA_Report/Debug/PCDA_Report.tlog/CL.command.1.tlog new file mode 100644 index 0000000..d0a508e Binary files /dev/null and b/PcDmis/Base/Interfac/Msi/Hsi/PCDA_Report/PCDA_Report/Debug/PCDA_Report.tlog/CL.command.1.tlog differ diff --git a/PcDmis/Base/Interfac/Msi/Hsi/PCDA_Report/PCDA_Report/Debug/PCDA_Report.tlog/CL.read.1.tlog b/PcDmis/Base/Interfac/Msi/Hsi/PCDA_Report/PCDA_Report/Debug/PCDA_Report.tlog/CL.read.1.tlog new file mode 100644 index 0000000..18dc8f8 Binary files /dev/null and b/PcDmis/Base/Interfac/Msi/Hsi/PCDA_Report/PCDA_Report/Debug/PCDA_Report.tlog/CL.read.1.tlog differ diff --git a/PcDmis/Base/Interfac/Msi/Hsi/PCDA_Report/PCDA_Report/Debug/PCDA_Report.tlog/CL.write.1.tlog b/PcDmis/Base/Interfac/Msi/Hsi/PCDA_Report/PCDA_Report/Debug/PCDA_Report.tlog/CL.write.1.tlog new file mode 100644 index 0000000..96808ce Binary files /dev/null and b/PcDmis/Base/Interfac/Msi/Hsi/PCDA_Report/PCDA_Report/Debug/PCDA_Report.tlog/CL.write.1.tlog differ diff --git a/PcDmis/Base/Interfac/Msi/Hsi/PCDA_Report/PCDA_Report/Debug/PCDA_Report.tlog/PCDA_Report.lastbuildstate b/PcDmis/Base/Interfac/Msi/Hsi/PCDA_Report/PCDA_Report/Debug/PCDA_Report.tlog/PCDA_Report.lastbuildstate new file mode 100644 index 0000000..7fe5a37 --- /dev/null +++ b/PcDmis/Base/Interfac/Msi/Hsi/PCDA_Report/PCDA_Report/Debug/PCDA_Report.tlog/PCDA_Report.lastbuildstate @@ -0,0 +1,2 @@ +#TargetFrameworkVersion=v4.0:PlatformToolSet=v140:EnableManagedIncrementalBuild=false:VCToolArchitecture=Native32Bit:WindowsTargetPlatformVersion=8.1 +Debug|Win32|D:\Pdca\PCDA_Report\| diff --git a/PcDmis/Base/Interfac/Msi/Hsi/PCDA_Report/PCDA_Report/Debug/PCDA_Report.tlog/PCDA_Report.write.1u.tlog b/PcDmis/Base/Interfac/Msi/Hsi/PCDA_Report/PCDA_Report/Debug/PCDA_Report.tlog/PCDA_Report.write.1u.tlog new file mode 100644 index 0000000..7272c71 Binary files /dev/null and b/PcDmis/Base/Interfac/Msi/Hsi/PCDA_Report/PCDA_Report/Debug/PCDA_Report.tlog/PCDA_Report.write.1u.tlog differ diff --git a/PcDmis/Base/Interfac/Msi/Hsi/PCDA_Report/PCDA_Report/Debug/PCDA_Report.tlog/link.command.1.tlog b/PcDmis/Base/Interfac/Msi/Hsi/PCDA_Report/PCDA_Report/Debug/PCDA_Report.tlog/link.command.1.tlog new file mode 100644 index 0000000..bea6c99 Binary files /dev/null and b/PcDmis/Base/Interfac/Msi/Hsi/PCDA_Report/PCDA_Report/Debug/PCDA_Report.tlog/link.command.1.tlog differ diff --git a/PcDmis/Base/Interfac/Msi/Hsi/PCDA_Report/PCDA_Report/Debug/PCDA_Report.tlog/link.read.1.tlog b/PcDmis/Base/Interfac/Msi/Hsi/PCDA_Report/PCDA_Report/Debug/PCDA_Report.tlog/link.read.1.tlog new file mode 100644 index 0000000..be87657 Binary files /dev/null and b/PcDmis/Base/Interfac/Msi/Hsi/PCDA_Report/PCDA_Report/Debug/PCDA_Report.tlog/link.read.1.tlog differ diff --git a/PcDmis/Base/Interfac/Msi/Hsi/PCDA_Report/PCDA_Report/Debug/PCDA_Report.tlog/link.write.1.tlog b/PcDmis/Base/Interfac/Msi/Hsi/PCDA_Report/PCDA_Report/Debug/PCDA_Report.tlog/link.write.1.tlog new file mode 100644 index 0000000..8ea4867 Binary files /dev/null and b/PcDmis/Base/Interfac/Msi/Hsi/PCDA_Report/PCDA_Report/Debug/PCDA_Report.tlog/link.write.1.tlog differ diff --git a/PcDmis/Base/Interfac/Msi/Hsi/PCDA_Report/PCDA_Report/Debug/PCDA_Report.tlog/rc.command.1.tlog b/PcDmis/Base/Interfac/Msi/Hsi/PCDA_Report/PCDA_Report/Debug/PCDA_Report.tlog/rc.command.1.tlog new file mode 100644 index 0000000..19c9fbb Binary files /dev/null and b/PcDmis/Base/Interfac/Msi/Hsi/PCDA_Report/PCDA_Report/Debug/PCDA_Report.tlog/rc.command.1.tlog differ diff --git a/PcDmis/Base/Interfac/Msi/Hsi/PCDA_Report/PCDA_Report/Debug/PCDA_Report.tlog/rc.read.1.tlog b/PcDmis/Base/Interfac/Msi/Hsi/PCDA_Report/PCDA_Report/Debug/PCDA_Report.tlog/rc.read.1.tlog new file mode 100644 index 0000000..1546632 Binary files /dev/null and b/PcDmis/Base/Interfac/Msi/Hsi/PCDA_Report/PCDA_Report/Debug/PCDA_Report.tlog/rc.read.1.tlog differ diff --git a/PcDmis/Base/Interfac/Msi/Hsi/PCDA_Report/PCDA_Report/Debug/PCDA_Report.tlog/rc.write.1.tlog b/PcDmis/Base/Interfac/Msi/Hsi/PCDA_Report/PCDA_Report/Debug/PCDA_Report.tlog/rc.write.1.tlog new file mode 100644 index 0000000..fdb1b54 Binary files /dev/null and b/PcDmis/Base/Interfac/Msi/Hsi/PCDA_Report/PCDA_Report/Debug/PCDA_Report.tlog/rc.write.1.tlog differ diff --git a/PcDmis/Base/Interfac/Msi/Hsi/PCDA_Report/PCDA_Report/Debug/Pcda.tlog/CL.command.1.tlog b/PcDmis/Base/Interfac/Msi/Hsi/PCDA_Report/PCDA_Report/Debug/Pcda.tlog/CL.command.1.tlog new file mode 100644 index 0000000..ea0d3dd Binary files /dev/null and b/PcDmis/Base/Interfac/Msi/Hsi/PCDA_Report/PCDA_Report/Debug/Pcda.tlog/CL.command.1.tlog differ diff --git a/PcDmis/Base/Interfac/Msi/Hsi/PCDA_Report/PCDA_Report/Debug/Pcda.tlog/CL.read.1.tlog b/PcDmis/Base/Interfac/Msi/Hsi/PCDA_Report/PCDA_Report/Debug/Pcda.tlog/CL.read.1.tlog new file mode 100644 index 0000000..cb8c240 Binary files /dev/null and b/PcDmis/Base/Interfac/Msi/Hsi/PCDA_Report/PCDA_Report/Debug/Pcda.tlog/CL.read.1.tlog differ diff --git a/PcDmis/Base/Interfac/Msi/Hsi/PCDA_Report/PCDA_Report/Debug/Pcda.tlog/CL.write.1.tlog b/PcDmis/Base/Interfac/Msi/Hsi/PCDA_Report/PCDA_Report/Debug/Pcda.tlog/CL.write.1.tlog new file mode 100644 index 0000000..1e068b8 Binary files /dev/null and b/PcDmis/Base/Interfac/Msi/Hsi/PCDA_Report/PCDA_Report/Debug/Pcda.tlog/CL.write.1.tlog differ diff --git a/PcDmis/Base/Interfac/Msi/Hsi/PCDA_Report/PCDA_Report/Debug/Pcda.tlog/Pcda.lastbuildstate b/PcDmis/Base/Interfac/Msi/Hsi/PCDA_Report/PCDA_Report/Debug/Pcda.tlog/Pcda.lastbuildstate new file mode 100644 index 0000000..7fe5a37 --- /dev/null +++ b/PcDmis/Base/Interfac/Msi/Hsi/PCDA_Report/PCDA_Report/Debug/Pcda.tlog/Pcda.lastbuildstate @@ -0,0 +1,2 @@ +#TargetFrameworkVersion=v4.0:PlatformToolSet=v140:EnableManagedIncrementalBuild=false:VCToolArchitecture=Native32Bit:WindowsTargetPlatformVersion=8.1 +Debug|Win32|D:\Pdca\PCDA_Report\| diff --git a/PcDmis/Base/Interfac/Msi/Hsi/PCDA_Report/PCDA_Report/Debug/Pcda.tlog/Pcda.write.1u.tlog b/PcDmis/Base/Interfac/Msi/Hsi/PCDA_Report/PCDA_Report/Debug/Pcda.tlog/Pcda.write.1u.tlog new file mode 100644 index 0000000..8b4ec94 Binary files /dev/null and b/PcDmis/Base/Interfac/Msi/Hsi/PCDA_Report/PCDA_Report/Debug/Pcda.tlog/Pcda.write.1u.tlog differ diff --git a/PcDmis/Base/Interfac/Msi/Hsi/PCDA_Report/PCDA_Report/Debug/Pcda.tlog/link.command.1.tlog b/PcDmis/Base/Interfac/Msi/Hsi/PCDA_Report/PCDA_Report/Debug/Pcda.tlog/link.command.1.tlog new file mode 100644 index 0000000..cfb599f Binary files /dev/null and b/PcDmis/Base/Interfac/Msi/Hsi/PCDA_Report/PCDA_Report/Debug/Pcda.tlog/link.command.1.tlog differ diff --git a/PcDmis/Base/Interfac/Msi/Hsi/PCDA_Report/PCDA_Report/Debug/Pcda.tlog/link.read.1.tlog b/PcDmis/Base/Interfac/Msi/Hsi/PCDA_Report/PCDA_Report/Debug/Pcda.tlog/link.read.1.tlog new file mode 100644 index 0000000..d5375db Binary files /dev/null and b/PcDmis/Base/Interfac/Msi/Hsi/PCDA_Report/PCDA_Report/Debug/Pcda.tlog/link.read.1.tlog differ diff --git a/PcDmis/Base/Interfac/Msi/Hsi/PCDA_Report/PCDA_Report/Debug/Pcda.tlog/link.write.1.tlog b/PcDmis/Base/Interfac/Msi/Hsi/PCDA_Report/PCDA_Report/Debug/Pcda.tlog/link.write.1.tlog new file mode 100644 index 0000000..340c404 Binary files /dev/null and b/PcDmis/Base/Interfac/Msi/Hsi/PCDA_Report/PCDA_Report/Debug/Pcda.tlog/link.write.1.tlog differ diff --git a/PcDmis/Base/Interfac/Msi/Hsi/PCDA_Report/PCDA_Report/Debug/Pcda.tlog/rc.command.1.tlog b/PcDmis/Base/Interfac/Msi/Hsi/PCDA_Report/PCDA_Report/Debug/Pcda.tlog/rc.command.1.tlog new file mode 100644 index 0000000..19c9fbb Binary files /dev/null and b/PcDmis/Base/Interfac/Msi/Hsi/PCDA_Report/PCDA_Report/Debug/Pcda.tlog/rc.command.1.tlog differ diff --git a/PcDmis/Base/Interfac/Msi/Hsi/PCDA_Report/PCDA_Report/Debug/Pcda.tlog/rc.read.1.tlog b/PcDmis/Base/Interfac/Msi/Hsi/PCDA_Report/PCDA_Report/Debug/Pcda.tlog/rc.read.1.tlog new file mode 100644 index 0000000..1546632 Binary files /dev/null and b/PcDmis/Base/Interfac/Msi/Hsi/PCDA_Report/PCDA_Report/Debug/Pcda.tlog/rc.read.1.tlog differ diff --git a/PcDmis/Base/Interfac/Msi/Hsi/PCDA_Report/PCDA_Report/Debug/Pcda.tlog/rc.write.1.tlog b/PcDmis/Base/Interfac/Msi/Hsi/PCDA_Report/PCDA_Report/Debug/Pcda.tlog/rc.write.1.tlog new file mode 100644 index 0000000..fdb1b54 Binary files /dev/null and b/PcDmis/Base/Interfac/Msi/Hsi/PCDA_Report/PCDA_Report/Debug/Pcda.tlog/rc.write.1.tlog differ diff --git a/PcDmis/Base/Interfac/Msi/Hsi/PCDA_Report/PCDA_Report/Debug/Pdca.tlog/CL.command.1.tlog b/PcDmis/Base/Interfac/Msi/Hsi/PCDA_Report/PCDA_Report/Debug/Pdca.tlog/CL.command.1.tlog new file mode 100644 index 0000000..4bb9776 Binary files /dev/null and b/PcDmis/Base/Interfac/Msi/Hsi/PCDA_Report/PCDA_Report/Debug/Pdca.tlog/CL.command.1.tlog differ diff --git a/PcDmis/Base/Interfac/Msi/Hsi/PCDA_Report/PCDA_Report/Debug/Pdca.tlog/CL.read.1.tlog b/PcDmis/Base/Interfac/Msi/Hsi/PCDA_Report/PCDA_Report/Debug/Pdca.tlog/CL.read.1.tlog new file mode 100644 index 0000000..1e4119e Binary files /dev/null and b/PcDmis/Base/Interfac/Msi/Hsi/PCDA_Report/PCDA_Report/Debug/Pdca.tlog/CL.read.1.tlog differ diff --git a/PcDmis/Base/Interfac/Msi/Hsi/PCDA_Report/PCDA_Report/Debug/Pdca.tlog/CL.write.1.tlog b/PcDmis/Base/Interfac/Msi/Hsi/PCDA_Report/PCDA_Report/Debug/Pdca.tlog/CL.write.1.tlog new file mode 100644 index 0000000..80fbc7f Binary files /dev/null and b/PcDmis/Base/Interfac/Msi/Hsi/PCDA_Report/PCDA_Report/Debug/Pdca.tlog/CL.write.1.tlog differ diff --git a/PcDmis/Base/Interfac/Msi/Hsi/PCDA_Report/PCDA_Report/Debug/Pdca.tlog/Pdca.lastbuildstate b/PcDmis/Base/Interfac/Msi/Hsi/PCDA_Report/PCDA_Report/Debug/Pdca.tlog/Pdca.lastbuildstate new file mode 100644 index 0000000..7fe5a37 --- /dev/null +++ b/PcDmis/Base/Interfac/Msi/Hsi/PCDA_Report/PCDA_Report/Debug/Pdca.tlog/Pdca.lastbuildstate @@ -0,0 +1,2 @@ +#TargetFrameworkVersion=v4.0:PlatformToolSet=v140:EnableManagedIncrementalBuild=false:VCToolArchitecture=Native32Bit:WindowsTargetPlatformVersion=8.1 +Debug|Win32|D:\Pdca\PCDA_Report\| diff --git a/PcDmis/Base/Interfac/Msi/Hsi/PCDA_Report/PCDA_Report/Debug/Pdca.tlog/unsuccessfulbuild b/PcDmis/Base/Interfac/Msi/Hsi/PCDA_Report/PCDA_Report/Debug/Pdca.tlog/unsuccessfulbuild new file mode 100644 index 0000000..e69de29 diff --git a/PcDmis/Base/Interfac/Msi/Hsi/PCDA_Report/PCDA_Report/Debug/vc140.idb b/PcDmis/Base/Interfac/Msi/Hsi/PCDA_Report/PCDA_Report/Debug/vc140.idb new file mode 100644 index 0000000..ee0646c Binary files /dev/null and b/PcDmis/Base/Interfac/Msi/Hsi/PCDA_Report/PCDA_Report/Debug/vc140.idb differ diff --git a/PcDmis/Base/Interfac/Msi/Hsi/PCDA_Report/PCDA_Report/FileIO.cpp b/PcDmis/Base/Interfac/Msi/Hsi/PCDA_Report/PCDA_Report/FileIO.cpp new file mode 100644 index 0000000..4d19440 --- /dev/null +++ b/PcDmis/Base/Interfac/Msi/Hsi/PCDA_Report/PCDA_Report/FileIO.cpp @@ -0,0 +1,368 @@ +#include "stdafx.h" +#include "FileIO.h" + +#define UNICODE_BOM 0xFEFF // Unicode "byte order mark" + +FileIOException::FileIOException() +{ +} + +FileIOException::~FileIOException() +{ +} + + +CFileIO::CFileIO(void): + m_bFirst(true), + m_bOpen(false) +{ +} + + +CFileIO::~CFileIO(void) +{ + if (IsActive()) + { + Close(); + } +} + +CFileIO::CFileIO(const CString fileName): + m_bFirst(true), + m_bOpen(false), + m_strFileName(fileName) +{ + +} + +bool CFileIO::IsActive(bool bForce) +{ + if(m_bFirst || bForce) + { + if(m_bOpen==false) + { + m_bFirst=false; + } + } + return m_bOpen; +} + +void CFileIO::SetFileName(CString fileName) +{ + m_strFileName=fileName; +} + +CString CFileIO::GetFileName() +{ + return m_strFileName; +} + +bool CFileIO::Open(CString fileName) +{ + bool bOpen=false; +// if (m_strFileName.IsEmpty()&&(!fileName.IsEmpty())) +// { + SetFileName(fileName); + bOpen=Open(); +// } +// else if ((!m_strFileName.IsEmpty())&&(!fileName.IsEmpty())&&(m_strFileName.CompareNoCase(fileName)!=0)) +// { +// SetFileName(fileName); +// bOpen=ReOpen(); +// } + return bOpen; +} + +ULONGLONG CFileIO::Seek(LONGLONG lOff, UINT nFrom) +{ + try + { + return stdioFile.Seek(lOff,nFrom); + } + catch (CException* e) + { + // return 0; + } + +} + +ULONGLONG CFileIO::GetPosition() const +{ + try + { + return stdioFile.GetPosition(); + } + catch (CException* e) + { + // return 0; + } +} + +ULONGLONG CFileIO::GetLength() const +{ + try + { + return stdioFile.GetLength(); + } + catch (CException* e) + { + // return 0; + } +} + +bool CFileIO::Open() +{ + try + { + //stdioFile=CStdioFile(GetUnicodeWriteStream(m_strFileName)); + m_bOpen = stdioFile.Open(m_strFileName,CFile::modeCreate|CFile::modeReadWrite|CFile::modeNoTruncate|CFile::shareDenyNone); + m_bFirst=false; + //m_bOpen=true; + } + catch (...) + { + } + return m_bOpen; +} + +bool CFileIO::Open(const CString& fileName, const BOOL& bCreateReadMode) +{ + try + { + if (bCreateReadMode) + { + m_bOpen = stdioFile.Open(fileName, CFile::modeCreate | CFile::modeReadWrite); + } + else + { + m_bOpen = stdioFile.Open(fileName, CFile::modeCreate | CFile::modeReadWrite | CFile::modeNoTruncate | CFile::shareDenyNone); + } + m_bFirst = false; + } + catch (...) + { + } + return m_bOpen; +} + +bool CFileIO::ReOpen() +{ + //Close(); + return Open(); +} + +void CFileIO::Close() +{ + stdioFile.Flush(); + stdioFile.Close(); + m_bFirst=true; + m_bOpen=false; +} + +void CFileIO::NewLine() +{ + WirteText(_T("\n")); +} + +void CFileIO::WirteText(const CString &text) +{ + WirteText(m_strFileName,text); +} + +void CFileIO::WirteTextArray(const CStringArray &textArray,CString tabString) +{ + WirteTextArray(m_strFileName,textArray,tabString); +} + +BOOL CFileIO::ReadText(CString &text) +{ + try + { + return stdioFile.ReadString(text); + } + catch (CException* e) + { + return FALSE; + } +} + +void CFileIO::WirteText(const CString &fileName,const CString &text) +{ + try + { + // if (IsActive()) + // { + stdioFile.WriteString(text); + stdioFile.Flush(); + // } + // else + // { + // Open(fileName); + // stdioFile.WriteString(text); + // stdioFile.Flush(); + // } + } + catch (CException* e) + { + } + +} + +void CFileIO::WirteTextArray(const CString &fileName,const CStringArray &textArray,CString tabString) +{ + try + { + CString textWrite; + for(INT_PTR i=0; i 0 && wcFirstChar == (wchar_t)UNICODE_BOM) + { + bIsUnicode = true; + } + + file.Close(); + } + else + { + throw FileIOException(); + } + + return bIsUnicode; +} + +FILE* CFileIO::GetUnicodeWriteStream(const CString &fileName) +{ + const CString mode = GetUnicodeWriteMode(); + return GetFileStream(fileName, mode); +} + +FILE* CFileIO::GetAnsiWriteStream(const CString &fileName) +{ + const CString mode = GetAnsiWriteMode(); + return GetFileStream(fileName, mode); +} + +FILE* CFileIO::GetUnicodeReadStream(const CString &fileName) +{ + const CString mode = GetUnicodeReadMode(); + return GetFileStream(fileName, mode); +} + +FILE* CFileIO::GetAnsiReadStream(const CString &fileName) +{ + const CString mode = GetAnsiReadMode(); + return GetFileStream(fileName, mode); +} + +FILE* CFileIO::GetWriteStream(const CString &fileName, const CString &text) +{ + FILE *fStream = nullptr; + bool extended = StringHasExtendedCharacters(text); + if(extended) + { + fStream = GetUnicodeWriteStream(fileName); + } + else + { + fStream = GetAnsiWriteStream(fileName); + } + return fStream; +} + +FILE* CFileIO::GetReadStream(const CString &fileName, const FILE_CODE_TYPE fileCodeType) +{ + FILE *fStream = nullptr; + switch(fileCodeType) + { + case FILE_CODE_TYPE_ANSI: + fStream = GetAnsiReadStream(fileName); + break; + case FILE_CODE_TYPE_UNICODE: + fStream = GetUnicodeReadStream(fileName); + break; + default: + throw FileIOException(); + break; + } + return fStream; +} + +FILE* CFileIO::GetFileStream(const CString &fileName, const CString &mode) +{ + FILE *fStream=nullptr; + errno_t err = _tfopen_s(&fStream, fileName, mode); + if(err != 0) + { + throw FileIOException(); + } + return fStream; +} + +bool CFileIO::StringHasExtendedCharacters(const CString &str) +{ + TCHAR ch; + for(int i=0; i< str.GetLength(); i++) + { + ch = str[i]; + if(ch > 127) + { + return true; + } + } + return false; +} \ No newline at end of file diff --git a/PcDmis/Base/Interfac/Msi/Hsi/PCDA_Report/PCDA_Report/FileIO.h b/PcDmis/Base/Interfac/Msi/Hsi/PCDA_Report/PCDA_Report/FileIO.h new file mode 100644 index 0000000..11140c3 --- /dev/null +++ b/PcDmis/Base/Interfac/Msi/Hsi/PCDA_Report/PCDA_Report/FileIO.h @@ -0,0 +1,74 @@ +#pragma once +#include + +class FileIOException :public std::exception +{ +public: + FileIOException (); + ~ FileIOException (); +}; + +class CFileIO +{ +public: + typedef enum FILE_CODE_TYPE + { + FILE_CODE_TYPE_ANSI, + FILE_CODE_TYPE_UNICODE, + FILE_CODE_TYPE_UNKNOWN + }; + +public: + CFileIO(void); + ~CFileIO(void); + CFileIO(const CString fileName); + CString GetFileName(); + bool Open(CString fileName); + bool Open(const CString& fileName, const BOOL& bCreateReadMode); + ULONGLONG Seek(LONGLONG lOff, UINT nFrom); + ULONGLONG GetPosition() const; + ULONGLONG GetLength() const; + void Close(); + void NewLine(); + void WirteText(const CString &text); + void WirteTextArray(const CStringArray &textArray,CString tabString=_T("\t")); + BOOL ReadText(CString &text); + +private: + void WirteText(const CString &fileName,const CString &text); + void WirteTextArray(const CString &fileName,const CStringArray &textArray,CString tabString=_T("\t")); + +private: + bool Open(); + bool ReOpen(); + bool IsActive(bool bForce=false); + void SetFileName(CString fileName); + + +public: + static const CString GetUnicodeWriteMode(); + static const CString GetAnsiWriteMode(); + static const CString GetUnicodeReadMode(); + static const CString GetAnsiReadMode(); + static CFileIO::FILE_CODE_TYPE GetFileCodeType(const CString &fileName); + static bool IsFileUnicode(const CString& fileName); + static FILE* GetUnicodeWriteStream(const CString &fileName); + static FILE* GetAnsiWriteStream(const CString &fileName); + static FILE* GetUnicodeReadStream(const CString &fileName); + static FILE* GetAnsiReadStream(const CString &fileName); + static FILE* GetWriteStream(const CString &fileName, const CString &text); + static FILE* GetReadStream(const CString &fileName, const FILE_CODE_TYPE fileCodeType); + static FILE* GetFileStream(const CString &fileName, const CString &mode); + static bool StringHasExtendedCharacters(const CString &str); + +private: + CFileIO(const CFileIO &value); + CFileIO & operator=(const CFileIO &value); + +private: + bool m_bFirst; + bool m_bOpen; + CString m_strFileName; + CStdioFile stdioFile; +}; + diff --git a/PcDmis/Base/Interfac/Msi/Hsi/PCDA_Report/PCDA_Report/PCDA_Report.cpp b/PcDmis/Base/Interfac/Msi/Hsi/PCDA_Report/PCDA_Report/PCDA_Report.cpp new file mode 100644 index 0000000..693aa32 --- /dev/null +++ b/PcDmis/Base/Interfac/Msi/Hsi/PCDA_Report/PCDA_Report/PCDA_Report.cpp @@ -0,0 +1,71 @@ +// PCDA_Report.cpp : Defines the initialization routines for the DLL. +// + +#include "stdafx.h" +#include "PCDA_Report.h" +#include "PdcaReport.h" + +#ifdef _DEBUG +#define new DEBUG_NEW +#endif + +// +//TODO: If this DLL is dynamically linked against the MFC DLLs, +// any functions exported from this DLL which call into +// MFC must have the AFX_MANAGE_STATE macro added at the +// very beginning of the function. +// +// For example: +// +// extern "C" BOOL PASCAL EXPORT ExportedFunction() +// { +// AFX_MANAGE_STATE(AfxGetStaticModuleState()); +// // normal function body here +// } +// +// It is very important that this macro appear in each +// function, prior to any calls into MFC. This means that +// it must appear as the first statement within the +// function, even before any object variable declarations +// as their constructors may generate calls into the MFC +// DLL. +// +// Please see MFC Technical Notes 33 and 58 for additional +// details. +// + +// CPCDA_ReportApp + +BEGIN_MESSAGE_MAP(CPCDA_ReportApp, CWinApp) +END_MESSAGE_MAP() + + +// CPCDA_ReportApp construction + +CPCDA_ReportApp::CPCDA_ReportApp() +{ + // TODO: add construction code here, + // Place all significant initialization in InitInstance +} + + +// The one and only CPCDA_ReportApp object + +CPCDA_ReportApp theApp; +CPcdaReport g_ReportObject; + +// CPCDA_ReportApp initialization + +BOOL CPCDA_ReportApp::InitInstance() +{ + CWinApp::InitInstance(); + + return TRUE; +} + +extern "C" __PDCADLL_API void GenerateArchiveFile(const CString szFileName, const CString& strSerialNumber, const CString& strProductNumber, const bool bToSingleFile, const PdcaReport* vPdcaReport, + const int iItemSize, const bool bChangeRow, const int iReportSize, const BOOL bDefFormat, const int iBeginIndex, const ReportType& iReportType, + const BOOL& bFirstAppend, const BOOL bIncludeHead) +{ + g_ReportObject.AdjustPathAndGenerateArchiveFile(szFileName, strSerialNumber, strProductNumber, bToSingleFile, vPdcaReport, iItemSize, bChangeRow, iReportSize, bDefFormat, iBeginIndex, iReportType, bFirstAppend, bIncludeHead); +} \ No newline at end of file diff --git a/PcDmis/Base/Interfac/Msi/Hsi/PCDA_Report/PCDA_Report/PCDA_Report.def b/PcDmis/Base/Interfac/Msi/Hsi/PCDA_Report/PCDA_Report/PCDA_Report.def new file mode 100644 index 0000000..b9b1554 --- /dev/null +++ b/PcDmis/Base/Interfac/Msi/Hsi/PCDA_Report/PCDA_Report/PCDA_Report.def @@ -0,0 +1,6 @@ +; PCDA_Report.def : Declares the module parameters for the DLL. + +LIBRARY + +EXPORTS + ; Explicit exports can go here diff --git a/PcDmis/Base/Interfac/Msi/Hsi/PCDA_Report/PCDA_Report/PCDA_Report.h b/PcDmis/Base/Interfac/Msi/Hsi/PCDA_Report/PCDA_Report/PCDA_Report.h new file mode 100644 index 0000000..1f80f30 --- /dev/null +++ b/PcDmis/Base/Interfac/Msi/Hsi/PCDA_Report/PCDA_Report/PCDA_Report.h @@ -0,0 +1,73 @@ +// PCDA_Report.h : main header file for the PCDA_Report DLL +// + +#pragma once +#include + + +#ifdef __PDCADLL_H +#define __PDCADLL_API __declspec(dllexport) +#else +#define __PDCADLL_API __declspec(dllimport) +#endif // !__PDCADLL_H + +using namespace std; +// CPCDA_ReportApp +// See PCDA_Report.cpp for the implementation of this class +// + + +enum ENUM_UNIT_TYPE +{ + UNIT_TYPE_MM = 0, + UNIT_TYPE_INCH, + UNIT_TYPE_MIL, + UNIT_TYPE_UM +}; + +struct PdcaReport +{ + CString m_strRecordName; + ENUM_UNIT_TYPE m_iUnit; + double m_dTheoryValue; + double m_dMeasureValue; + double m_dUpperTol; + double m_dLowerTol; + double m_dOutTol; + int m_iPrecision; + int m_iIndex; + PdcaReport() + { + m_iUnit = UNIT_TYPE_MM; + m_dTheoryValue = 0.0; + m_dMeasureValue = 0.0; + m_dUpperTol = 0.0; + m_dLowerTol = 0.0; + m_dOutTol = 0.0; + m_iPrecision = 4; + m_iIndex = 0; + } +}; + +typedef enum ENUM_REPORT_TYPE +{ + REPORT_NORMAL = 0, + REPORT_APPEND, + REPORT_OVER_WRITE +}ReportType; + +class CPCDA_ReportApp : public CWinApp +{ +public: + CPCDA_ReportApp(); + +// Overrides +public: + virtual BOOL InitInstance(); + + DECLARE_MESSAGE_MAP() +}; + +extern "C" __PDCADLL_API void GenerateArchiveFile(const CString szFileName, const CString& strSerialNumber, const CString& strProductNumber, const bool bToSingleFile, const PdcaReport* vPdcaReport, + const int iItemSize, const bool bChangeRow, const int iReportSize, const BOOL bDefFormat = FALSE, const int iBeginIndex = 1, + const ReportType& iReportType = REPORT_NORMAL, const BOOL& bFirstAppend = FALSE, const BOOL bIncludeHead = FALSE); diff --git a/PcDmis/Base/Interfac/Msi/Hsi/PCDA_Report/PCDA_Report/PCDA_Report.rc b/PcDmis/Base/Interfac/Msi/Hsi/PCDA_Report/PCDA_Report/PCDA_Report.rc new file mode 100644 index 0000000..b4cbe68 Binary files /dev/null and b/PcDmis/Base/Interfac/Msi/Hsi/PCDA_Report/PCDA_Report/PCDA_Report.rc differ diff --git a/PcDmis/Base/Interfac/Msi/Hsi/PCDA_Report/PCDA_Report/PCDA_Report.vcxproj b/PcDmis/Base/Interfac/Msi/Hsi/PCDA_Report/PCDA_Report/PCDA_Report.vcxproj new file mode 100644 index 0000000..e3743db --- /dev/null +++ b/PcDmis/Base/Interfac/Msi/Hsi/PCDA_Report/PCDA_Report/PCDA_Report.vcxproj @@ -0,0 +1,318 @@ +锘 + + + + DebugRelease + Win32 + + + DebugRelease + x64 + + + Debug + Win32 + + + Release + Win32 + + + Debug + x64 + + + Release + x64 + + + + {363F54B0-75E1-4E24-AF89-F0053BAA7117} + PCDA_Report + 8.1 + MFCDLLProj + Pdca + + + + DynamicLibrary + true + v140 + Unicode + Static + + + DynamicLibrary + false + v140 + true + Unicode + Static + + + DynamicLibrary + false + v140 + true + Unicode + Static + + + DynamicLibrary + true + v140 + Unicode + Static + + + DynamicLibrary + false + v140 + true + Unicode + Static + + + DynamicLibrary + false + v140 + true + Unicode + Static + + + + + + + + + + + + + + + + + + + + + + + + + + + true + + + true + + + false + + + false + + + false + + + false + + + + Use + Level3 + Disabled + WIN32;_WINDOWS;_DEBUG;_USRDLL;%(PreprocessorDefinitions) + true + + + Windows + .\PCDA_Report.def + + + false + _DEBUG;%(PreprocessorDefinitions) + + + 0x0409 + _DEBUG;%(PreprocessorDefinitions) + $(IntDir);%(AdditionalIncludeDirectories) + + + + + Use + Level3 + Disabled + _WINDOWS;_DEBUG;_USRDLL;%(PreprocessorDefinitions) + true + + + Windows + .\PCDA_Report.def + + + false + _DEBUG;%(PreprocessorDefinitions) + + + 0x0409 + _DEBUG;%(PreprocessorDefinitions) + $(IntDir);%(AdditionalIncludeDirectories) + + + copy $(OutDir)$(TargetName)$(TargetExt) C:\_vse\_bin + + + + + Level3 + Use + MaxSpeed + true + true + WIN32;_WINDOWS;NDEBUG;_USRDLL;%(PreprocessorDefinitions) + true + + + Windows + true + true + .\PCDA_Report.def + + + false + NDEBUG;%(PreprocessorDefinitions) + + + 0x0409 + NDEBUG;%(PreprocessorDefinitions) + $(IntDir);%(AdditionalIncludeDirectories) + + + + + Level3 + Use + MaxSpeed + true + true + WIN32;_WINDOWS;NDEBUG;_USRDLL;%(PreprocessorDefinitions) + true + + + Windows + true + true + .\PCDA_Report.def + + + false + NDEBUG;%(PreprocessorDefinitions) + + + 0x0409 + NDEBUG;%(PreprocessorDefinitions) + $(IntDir);%(AdditionalIncludeDirectories) + + + + + Level3 + Use + MaxSpeed + true + true + _WINDOWS;NDEBUG;_USRDLL;%(PreprocessorDefinitions) + true + + + Windows + true + true + .\PCDA_Report.def + + + false + NDEBUG;%(PreprocessorDefinitions) + + + 0x0409 + NDEBUG;%(PreprocessorDefinitions) + $(IntDir);%(AdditionalIncludeDirectories) + + + + + + + + + Level3 + Use + Disabled + true + true + _WINDOWS;NDEBUG;_USRDLL;%(PreprocessorDefinitions) + true + + + Windows + true + true + .\PCDA_Report.def + true + + + false + NDEBUG;%(PreprocessorDefinitions) + + + 0x0409 + NDEBUG;%(PreprocessorDefinitions) + $(IntDir);%(AdditionalIncludeDirectories) + + + copy $(OutDir)$(TargetName)$(TargetExt) C:\_vse\_bin + + + + + + + + + + + Create + Create + Create + Create + Create + Create + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/PcDmis/Base/Interfac/Msi/Hsi/PCDA_Report/PCDA_Report/PCDA_Report.vcxproj.filters b/PcDmis/Base/Interfac/Msi/Hsi/PCDA_Report/PCDA_Report/PCDA_Report.vcxproj.filters new file mode 100644 index 0000000..8d9e842 --- /dev/null +++ b/PcDmis/Base/Interfac/Msi/Hsi/PCDA_Report/PCDA_Report/PCDA_Report.vcxproj.filters @@ -0,0 +1,67 @@ +锘 + + + + {4FC737F1-C7A5-4376-A066-2A32D752A2FF} + cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx + + + {93995380-89BD-4b04-88EB-625FBE52EBFB} + h;hh;hpp;hxx;hm;inl;inc;xsd + + + {67DA6AB6-F800-4c08-8B7A-83BB121AAD01} + rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms + + + + + + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + + + Source Files + + + Resource Files + + + + + Resource Files + + + \ No newline at end of file diff --git a/PcDmis/Base/Interfac/Msi/Hsi/PCDA_Report/PCDA_Report/PCDA_Report.vcxproj.user b/PcDmis/Base/Interfac/Msi/Hsi/PCDA_Report/PCDA_Report/PCDA_Report.vcxproj.user new file mode 100644 index 0000000..df57878 --- /dev/null +++ b/PcDmis/Base/Interfac/Msi/Hsi/PCDA_Report/PCDA_Report/PCDA_Report.vcxproj.user @@ -0,0 +1,18 @@ +锘 + + + C:\_vse\_bin\MaxCloud.exe + C:\_vse\_bin + WindowsLocalDebugger + + + C:\Users\Tuser\Desktop\VSE_DEBUG\MaxCloud.exe + C:\Users\Tuser\Desktop\VSE_DEBUG + WindowsLocalDebugger + + + C:\_vse\_bin\MaxCloud.exe + C:\_vse\_bin + WindowsLocalDebugger + + \ No newline at end of file diff --git a/PcDmis/Base/Interfac/Msi/Hsi/PCDA_Report/PCDA_Report/PdcaReport.cpp b/PcDmis/Base/Interfac/Msi/Hsi/PCDA_Report/PCDA_Report/PdcaReport.cpp new file mode 100644 index 0000000..11459f6 --- /dev/null +++ b/PcDmis/Base/Interfac/Msi/Hsi/PCDA_Report/PCDA_Report/PdcaReport.cpp @@ -0,0 +1,1692 @@ +#include "stdafx.h" +#include "PdcaReport.h" +#include "PCDA_Report.h" + +#define PRODUCT _T("Product") +#define DISPLAY_NAME _T("Label") +#define PDCA_PRIORITY _T("PDCA Priority ----->") +#define THEORY_VALUE _T("Theory Value ----->") +#define UPPER_LIMIT _T("Upper Limit ----->") +#define LOWER_LIMIT _T("Lower Limit ----->") +#define MEASUREMENT_UNIT _T("Measurement Unit ----->") +#define CSV_PASS _T("Pass") +#define CSV_FAIL _T("Fail") +#define TAB_CSV _T(",") +#define ENTER_CSV _T("\n") +#define TEXTNEWLINE _T("NL") + +#define ROW_HEAD_LABEL_ARROW _T("Display Name ----->") +#define ROW_HEAD_THEORETICAL_ARROW _T("Theory Value ----->") +#define ROW_HEAD_PLUS_TOL_ARROW _T("Plus Tol ----->") +#define ROW_HEAD_MINUS_TOL_ARROW _T("Minus Tol ----->") +#define ROW_HEAD_UPPER_LIMIT_ARROW _T("Upper Limit ----->") +#define ROW_HEAD_LOWER_LIMIT_ARROW _T("Lower limit ----->") +#define ROW_HEAD_OUT_TOL_ARROW _T("Out Tol ----->") +#define ROW_HEAD_MAX_DEV_ARROW _T("Max Dev") +#define ROW_HEAD_MIN_DEV_ARROW _T("Min Dev") +#define ROW_HEAD_AVE_DEV_ARROW _T("Ave Dev") +#define ROW_HEAD_MAX_OUT_TOL_ARROW _T("Max Out Tol") +#define ROW_HEAD_CA_ARROW _T("CA") +#define ROW_HEAD_CP_ARROW _T("CP") +#define ROW_HEAD_CPK_ARROW _T("CPK") +#define ROW_HEAD_PP_ARROW _T("PP") +#define ROW_HEAD_PPK_ARROW _T("PPK") +#define ROW_HEAD_PDCA_PRIORITY_ARROW _T("PDCA Priority ----->") +#define ROW_HEAD_MEASUREMENT_UINT_ARROW _T("Measurement Unit ----->") + + +CPcdaReport::CSVHeadMap CPcdaReport::csvHeadMap[CPcdaReport::CSV_HEAD_TOTAL] = +{ + { CPcdaReport::CSV_HEAD_MEASUREMENT, false, _T("Measurement") }, + { CPcdaReport::CSV_HEAD_PRODUCT, true, _T("Product") }, + { CPcdaReport::CSV_HEAD_SERIAL_NUBER, true, _T("SerialNumber") }, + { CPcdaReport::CSV_HEAD_SPECIAL_BUILD_NAME, true, _T("Special Build Name") }, + { CPcdaReport::CSV_HEAD_SPECIAL_BUILD_DESCRIPTION, true, _T("Special Build Description") }, + { CPcdaReport::CSV_HEAD_STATION_ID, true, _T("Station ID") }, + { CPcdaReport::CSV_HEAD_ARCHIVE, true, _T("Archive") }, + { CPcdaReport::CSV_HEAD_CG_SN, false, _T("CG_SN") }, + { CPcdaReport::CSV_HEAD_HOUSINGSN, false, _T("HOUSINGSN") }, + { CPcdaReport::CSV_HEAD_UNTI_NUMBER, true, _T("Unit Number") }, + { CPcdaReport::CSV_HEAD_TEST_STATUS, false, _T("Test Pass/Fail Status") }, + { CPcdaReport::CSV_HEAD_LIST_OF_FAILING_TESTS, true, _T("List Of Failing Tests") }, + { CPcdaReport::CSV_HEAD_VERSION, true, _T("Version") }, + { CPcdaReport::CSV_HEAD_IMAGE_FLAG, true, _T("Image Flag") }, + { CPcdaReport::CSV_HEAD_MACHINE_ID, false, _T("Machine ID") }, + { CPcdaReport::CSV_HEAD_MACHINE_NUMBER, false, _T("Machine Number") }, + { CPcdaReport::CSV_HEAD_OPERATOR, false, _T("Operator") }, + { CPcdaReport::CSV_HEAD_CHECK_ID, false, _T("CheckID") }, + { CPcdaReport::CSV_HEAD_SERIAL_ID, false, _T("SerialID") }, + { CPcdaReport::CSV_HEAD_SAMPLE_NAME, false, _T("Sample Name") }, + { CPcdaReport::CSV_HEAD_SAMPLE_RULES, false, _T("Sample Rules") }, + { CPcdaReport::CSV_HEAD_SAMPLE_BATCH, false, _T("Sample Batch") }, + { CPcdaReport::CSV_HEAD_SAMPLE_METHOD, false, _T("Sample Method") }, + { CPcdaReport::CSV_HEAD_SAMPLE_MANUFACTURER, false, _T("Sample Manufacturer") }, + { CPcdaReport::CSV_HEAD_REMARKS, false, _T("Remarks") }, +}; + +CPcdaReport::CSVRowHeadMap CPcdaReport::csvRowHeadMap[CPcdaReport::CSV_ROW_HEAD_TOTAL] = +{ + { CPcdaReport::CSV_ROW_HEAD_TEST_DATE, false, _T("Test Date") }, + { CPcdaReport::CSV_ROW_HEAD_START_TIME, true, _T("Start Time") }, + { CPcdaReport::CSV_ROW_HEAD_END_TIME, true, _T("End Time") }, + { CPcdaReport::CSV_ROW_HEAD_LABEL, true, _T("Label") }, + { CPcdaReport::CSV_ROW_HEAD_THEORETICAL, true, _T("Theoretical") }, + { CPcdaReport::CSV_ROW_HEAD_PLUS_TOL, false, _T("Plus Tol") }, + { CPcdaReport::CSV_ROW_HEAD_MINUS_TOL, false, _T("Minus Tol") }, + { CPcdaReport::CSV_ROW_HEAD_UPPER_LIMIT, true, _T("Upper Limit") }, + { CPcdaReport::CSV_ROW_HEAD_LOWER_LIMIT, true, _T("Lower limit") }, + { CPcdaReport::CSV_ROW_HEAD_OUT_TOL, false, _T("Out Tol") }, + { CPcdaReport::CSV_ROW_HEAD_MAX_DEV, false, _T("Max Dev") }, + { CPcdaReport::CSV_ROW_HEAD_MIN_DEV, false, _T("Min Dev") }, + { CPcdaReport::CSV_ROW_HEAD_AVE_DEV, false, _T("Ave Dev") }, + { CPcdaReport::CSV_ROW_HEAD_MAX_OUT_TOL, false, _T("Max Out Tol") }, + { CPcdaReport::CSV_ROW_HEAD_CA, false, _T("CA") }, + { CPcdaReport::CSV_ROW_HEAD_CP, false, _T("CP") }, + { CPcdaReport::CSV_ROW_HEAD_CPK, false, _T("CPK") }, + { CPcdaReport::CSV_ROW_HEAD_PP, false, _T("PP") }, + { CPcdaReport::CSV_ROW_HEAD_PPK, false, _T("PPK") }, + { CPcdaReport::CSV_ROW_HEAD_PDCA_PRIORITY, true, _T("PDCA Priority") }, + { CPcdaReport::CSV_ROW_HEAD_MEASUREMENT_UINT, true, _T("Measurement Unit") }, +}; + +CPcdaReport::CPcdaReport() +{ + m_bOpen = false; + m_bArchiveToSingleFile = true; + m_bLastArchiveToSingleFile = m_bArchiveToSingleFile; + m_dCountArchiveToOneFile = 0; + m_vPdcaReport.clear(); + m_vPdcaReportReserve.clear(); +} + + +CPcdaReport::~CPcdaReport() +{ + m_vPdcaReport.clear(); + m_vPdcaReportReserve.clear(); +} + +void CPcdaReport::Open(const CString& ReportArchiveFile, bool append) +{ + m_bOpen = m_fileIoArchive.Open(ReportArchiveFile); + if (m_bOpen&&append) + { + m_fileIoArchive.Seek(m_fileIoArchive.GetLength(), CFile::begin); + } +} + + +void CPcdaReport::Close() +{ + if (m_bOpen) + { + try + { + m_fileIoArchive.Close(); + m_bOpen = false; + } + catch (CException* e) + { + m_bOpen = false; + } + } + + m_strSerNum = _T(""); + m_strDataTime = _T(""); +} + +bool CPcdaReport::GetSerialNumAndTestDataTime(const CString& strSerialNumber, int& iLastNum, const bool bChangeRow) +{ + bool ret = false; + int index = -1; + int indexB = -1; + CString strT, strD; + CString strSerNum, strDataTime, strLastNum; + index = strSerialNumber.ReverseFind(_T('\\')); + if (index >= 0) + { + strT = strSerialNumber.Left(index); + strD = strSerialNumber.Mid(index + 1); + index = strT.ReverseFind(_T('\\')); + if (index >= 0) + { + strT = strT.Mid(index + 1); + } + + index = strD.Find(_T(".")); + if (-1 != index) + { + strD = strD.Left(index); + } + } + else + { + strT = strSerialNumber; + } + + index = strD.ReverseFind(_T('_')); + indexB = strD.ReverseFind(_T('-')); + if ((-1 != index) || (-1 != indexB)) + { + strLastNum = strD.Mid(index + 1); + if (strLastNum.GetLength() < 3) + { + iLastNum = _ttoi(strLastNum); + } + else + { + iLastNum = 0; + } + } + else + { + iLastNum = _ttoi(strD); + } + + index = strT.Find(_T("7O_")); + indexB = strT.Find(_T("7O-")); + if ((-1 != index) || (-1 != indexB)) + { + strT = strT.Mid(index + 3); + } + else + { + index = strT.Find(_T("_")); + indexB = strT.Find(_T("-")); + if ((-1 != index) || (-1 != indexB)) + { + strT = strT.Mid(index + 1); + } + } + + + index = strT.Find(_T("_1")); + indexB = strT.Find(_T("-1")); + if ((-1 != index) || (-1 != indexB)) + { + strSerNum = strT.Left(index); + strT = strT.Mid(index+1); + } + else if ((-1 != strT.Find(_T("_"))) || (-1 != strT.Find(_T("-")))) + { + strSerNum = strT.Left(index); + if (strSerNum == _T("")) + { + strSerNum = strT; + } + strT = strT.Mid(index + 1); + } + else + { + strSerNum = strT; + } + + int iCount = 0; + CString tempStr = strT; + for (int i = 0; i < tempStr.GetLength(); i++) + { + index = tempStr.Find(_T("_")); + indexB = tempStr.Find(_T("-")); + if ((-1 != index) || (-1 != indexB)) + { + iCount++; + index = (index == -1) ? tempStr.GetLength() : index; + indexB = (indexB == -1) ? tempStr.GetLength() : indexB; + if (index < indexB) + { + tempStr = tempStr.Mid(index + 1); + } + else + { + tempStr = tempStr.Mid(indexB + 1); + } + } + else + { + break; + } + } + + if (iCount < 2) + { + strDataTime = strT; + } + else + { + index = strT.Find(_T("_")); + indexB = strT.Find(_T("-")); + if ((-1 != index) || (-1 != indexB)) + { + strDataTime = strT.Left(index); + strT = strT.Mid(index); + index = strT.ReverseFind(_T('_')); + indexB = strT.ReverseFind(_T('-')); + if ((0 < index) || (0 < indexB)) + { + strDataTime.Append(strT.Left(index)); + } + else + { + index = strT.Find(_T("_")); + indexB = strT.Find(_T("-")); + if ((-1 != index) || (-1 != indexB)) + { + strDataTime.Append(strT.Left(index)); + } + } + } + else + { + CTime curTime = GetCurrentTime(); + strDataTime = curTime.Format(_T("%Y%m%d-%H:%M:%S")); + } + } + + if ((m_strSerNumCompare.IsEmpty()) && (m_strDataTimeCompare.IsEmpty())) + { + m_strSerNumCompare = strSerNum; + m_strDataTimeCompare = strDataTime; + m_strSerNum = strSerNum; + m_strDataTime = strDataTime; + } + else + { + if ((!bChangeRow) && ((m_strSerNumCompare.CompareNoCase(strSerNum)) || (m_strDataTimeCompare.CompareNoCase(strDataTime)))) + { + ret = true; + m_strSerNumCompare = strSerNum; + m_strDataTimeCompare = strDataTime; + } + else if (bChangeRow) + { + ret = true; + m_strSerNumCompare = strSerNum; + m_strDataTimeCompare = strDataTime; + m_strSerNum = strSerNum; + m_strDataTime = strDataTime; + } + else + { + m_strSerNum = strSerNum; + m_strDataTime = strDataTime; + } + } + + return ret; +} + +bool CPcdaReport::CompareCondition(PdcaReport vReportA, PdcaReport vReportB) +{ + return (vReportA.m_iIndex < vReportB.m_iIndex); +} + +bool CPcdaReport::AdjustHaveExist(const CString& szFileName, const int& iItemSize, const int& iLastNum) +{ + int iSize = static_cast(m_vPdcaReportReserve.size()); + BOOL bExist = FALSE; + int iIndex = 0; + for (; iIndex < iSize; iIndex++) + { + if (m_vPdcaReportReserve.at(iIndex).m_reportName == szFileName) + { + bExist = TRUE; + break; + } + } + if (FALSE == bExist) + { + return false; + } + int iSubSize = static_cast(m_vPdcaReportReserve.at(iIndex).m_vPcdaReport.size()); + if (iSubSize >= iItemSize) + { + for (int i = 0; i < iSubSize; i += iItemSize) + { + if (iLastNum == m_vPdcaReportReserve.at(iIndex).m_vPcdaReport.at(i).m_iIndex) + { + return true; + } + } + } + return false; +} + +bool CPcdaReport::AdjustReportAndFillWhenEmpty(vector& vPdcaReportOutput, const CString& szFileName, const int& iItemSize, const int& iReportSize, const int& iBeginIndex) +{ + if (iReportSize > 0) + { + m_vEmptyIndex.clear(); + int iCount = iBeginIndex + iReportSize; + for (int i = iBeginIndex; i < iCount; i++) + { + if (!AdjustHaveExist(szFileName, iItemSize, i)) + { + m_vEmptyIndex.push_back(i); + } + } + + for (size_t ii = 0; ii < m_vEmptyIndex.size(); ii++) + { + CString strT,strTR; + PdcaReport PdcaReportKeep; + vector vPdcaReportTemp; + int indexReplace = 0; + int indexUse = 0; + int indexT = 0; + int indexInsert = 0; + for (int i = 0; i < iItemSize; i++) + { + PdcaReportKeep.m_iIndex = m_vEmptyIndex.at(ii); + indexT = ((PdcaReportKeep.m_iIndex - 2)*iItemSize + i); + if ((indexT < vPdcaReportOutput.size())&&(indexT) >= 0) + { + indexUse = ((PdcaReportKeep.m_iIndex - 2)*iItemSize + i); + } + else if ((((PdcaReportKeep.m_iIndex - 1)*iItemSize + i) < vPdcaReportOutput.size()) && + (((PdcaReportKeep.m_iIndex - 1)*iItemSize + i)) >= 0) + { + indexUse = ((PdcaReportKeep.m_iIndex - 1)*iItemSize + i); + } + indexUse = (indexUse) < 0? 0 : (indexUse); + PdcaReportKeep = vPdcaReportOutput.at(indexUse); + indexReplace = vPdcaReportOutput.at(indexUse).m_iIndex; + strT.Format(_T("%d"), m_vEmptyIndex.at(ii)); + strTR.Format(_T("%d"), indexReplace); + PdcaReportKeep.m_strRecordName.Replace(strTR, strT); + PdcaReportKeep.m_iIndex = m_vEmptyIndex.at(ii); + PdcaReportKeep.m_dMeasureValue = -9999.0; + vPdcaReportTemp.push_back(PdcaReportKeep); + } + indexInsert = (m_vEmptyIndex.at(ii)-1)*iItemSize; + vPdcaReportOutput.insert(vPdcaReportOutput.begin() + indexInsert, vPdcaReportTemp.begin(), vPdcaReportTemp.end()); + } + return true; + } + + return false; +} + +void CPcdaReport::GetDataAndPushInKeepVector(const CString& szFileName, const PdcaReport* vPdcaReport, const int& iItemSize) +{ + ReportReserve ReportResTemp; + for (int i = 0; i < iItemSize; i++) + { + if ((0 == i) && (AdjustHaveExist(szFileName, iItemSize, vPdcaReport[i].m_iIndex))) + { + break; + } + if (!m_vPdcaReportReserve.empty()) + { + vector::iterator it = m_vPdcaReportReserve.begin(); + BOOL bExist = FALSE; + for (; it != m_vPdcaReportReserve.end(); it++) + { + if ((*it).m_reportName == szFileName) + { + (*it).m_vPcdaReport.push_back(vPdcaReport[i]); + bExist = TRUE; + break; + } + } + if (FALSE == bExist) + { + ReportResTemp.m_reportName = szFileName; + ReportResTemp.m_vPcdaReport.push_back(vPdcaReport[i]); + m_vPdcaReportReserve.push_back(ReportResTemp); + } + } + else + { + ReportResTemp.m_reportName = szFileName; + ReportResTemp.m_vPcdaReport.push_back(vPdcaReport[i]); + m_vPdcaReportReserve.push_back(ReportResTemp); + } + } +} + +void CPcdaReport::AdjustPathAndGenerateArchiveFile(const CString& szFileName, const CString& strSerialNumber, const CString& strProductNumber, const bool& bToSingleFile, + const PdcaReport* vPdcaReport, const int& iItemSize, const bool& bChangeRow, const int& iReportSize, const BOOL& bDefFormat, + const int& iBeginIndex, const ReportType& iReportType, const BOOL& bFirstAppend, const BOOL bIncludeHead) +{ + if (szFileName.IsEmpty()) + { + AfxMessageBox(_T("Must Set The CSV File Name")); + return; + } + static int iLabel = 0; + int itemSize = iItemSize > 0? iItemSize : 1; + //int iLastNum = 1; + //bool bNewRow = GetSerialNumAndTestDataTime(strSerialNumber, iLastNum, bChangeRow); + //if (!AdjustHaveExist(iItemSize, iLastNum)) + //{ + // ReportReserve PdcaReportKeep; + // CString strT; + // for (int i = 0; i < iItemSize; i++) + // { + // PdcaReportKeep.m_iIndex = iLastNum; + // PdcaReportKeep.m_PcdaReport = vPdcaReport[i]; + // strT.Format(_T("%d"), iLastNum); + // PdcaReportKeep.m_PcdaReport.m_strRecordName += strT; + // //PdcaReportKeep.m_PcdaReport.m_strRecordName = strT; + // m_vPdcaReportReserve.push_back(PdcaReportKeep); + // } + //} + + if (bChangeRow) + { + m_vPdcaReport.clear(); + if (vPdcaReport) + { + GetDataAndPushInKeepVector(szFileName, vPdcaReport, itemSize); + } + m_strSerNum = strSerialNumber; + m_strProNum = strProductNumber; + CTime curTime = CTime::GetCurrentTime(); + m_strDataTime = curTime.Format(_T("%Y%m%d-%H:%M:%S")); + + vector vPdcaReportOutput; + if (!m_vPdcaReportReserve.empty()) + { + vector::iterator it = m_vPdcaReportReserve.begin(); + BOOL bExist = FALSE; + for (; it != m_vPdcaReportReserve.end(); it++) + { + if ((*it).m_reportName == szFileName) + { + vPdcaReportOutput = (*it).m_vPcdaReport; + bExist = TRUE; + break; + } + } + if (FALSE == bExist) + { + return; + } + } + + std::sort(vPdcaReportOutput.begin(), vPdcaReportOutput.end(), CompareCondition); + AdjustReportAndFillWhenEmpty(vPdcaReportOutput, szFileName, itemSize, iReportSize, iBeginIndex); + m_vPdcaReport.reserve(vPdcaReportOutput.size()); + m_vPdcaReport = vPdcaReportOutput; + if (!bDefFormat) + { + vector vPdcaReport1; + vector vPdcaReport2; + vector vPdcaReport3; + vector vPdcaReport4; + int iSize = (int)m_vPdcaReport.size(); + for (int ik = 0; ik < iSize; ik++) + { + switch (ik % iItemSize) + { + case 0: + { + vPdcaReport1.push_back(m_vPdcaReport.at(ik)); + break; + } + case 1: + { + vPdcaReport2.push_back(m_vPdcaReport.at(ik)); + break; + } + case 2: + { + vPdcaReport3.push_back(m_vPdcaReport.at(ik)); + break; + } + case 3: + { + vPdcaReport4.push_back(m_vPdcaReport.at(ik)); + break; + } + default:break; + } + } + + m_vPdcaReport.clear(); + m_vPdcaReport.insert(m_vPdcaReport.begin(), vPdcaReport1.begin(), vPdcaReport1.end()); + m_vPdcaReport.insert(m_vPdcaReport.end(), vPdcaReport2.begin(), vPdcaReport2.end()); + m_vPdcaReport.insert(m_vPdcaReport.end(), vPdcaReport3.begin(), vPdcaReport3.end()); + m_vPdcaReport.insert(m_vPdcaReport.end(), vPdcaReport4.begin(), vPdcaReport4.end()); + vPdcaReport1.clear(); + vPdcaReport2.clear(); + vPdcaReport3.clear(); + vPdcaReport4.clear(); + } + } + else + { + if (vPdcaReport) + { + GetDataAndPushInKeepVector(szFileName, vPdcaReport, itemSize); + } + return; + } + + m_bArchiveToSingleFile = bToSingleFile; + + m_iReportSize = (int)m_vPdcaReport.size(); + + if (m_iReportSize>0) + { + if (m_bArchiveToSingleFile == false) + { + CTime time = CTime::GetCurrentTime(); + m_dCountArchiveToOneFile = 0; + } + else if ((szFileName.IsEmpty() && m_bArchiveToSingleFile == true) || (m_bLastArchiveToSingleFile == false && m_bArchiveToSingleFile)) + { + CTime time = CTime::GetCurrentTime(); + } + m_bLastArchiveToSingleFile = m_bArchiveToSingleFile; + int index = szFileName.ReverseFind(_T('\\')); + CString szFilePath = szFileName.Left(index); + SHCreateDirectoryEx(NULL, szFilePath, NULL); + if ((!PathIsDirectory(szFilePath)) || (!PathFileExists(szFilePath))) + { + AfxMessageBox(_T("Warning! Csv file path can't be created!"), MB_OK | MB_SYSTEMMODAL); + return; + } + + bool fileExist = FileExists(szFileName); + if (m_bArchiveToSingleFile&&fileExist == false) + { + m_dCountArchiveToOneFile = 0; + } + if (m_bArchiveToSingleFile) + { + m_dCountArchiveToOneFile = m_dCountArchiveToOneFile + 1; + } + if (fileExist) + { + OverWirteOrAppendInTheExistFile(szFileName, iReportType, bFirstAppend, bIncludeHead); + } + else + { + GenerateArchiveFileCSV(szFileName); + } + m_vPdcaReport.clear(); + iLabel++; + if (iLabel == static_cast(m_vPdcaReportReserve.size())) + { + m_vPdcaReportReserve.clear(); + iLabel = 0; + } + } +} + +void CPcdaReport::CountAndFindSubStrInString(const CString& strAll, const CString& strSub, const CString& sliptStr, UINT& iCount, UINT& iSubPos) +{ + CString strT, _strAll; + _strAll = strAll; + int index = strAll.Find(sliptStr); + if (index > 0) + { + iCount++; + strT = strAll.Left(index); + _strAll = strAll.Right(strAll.GetLength() - index - 1); + if (-1 != strT.Find(strSub)) + { + iSubPos = iCount - 1 > 0? iCount - 1 : 0; + } + CountAndFindSubStrInString(_strAll, strSub, sliptStr, iCount, iSubPos); + } +} + +void CPcdaReport::OverWirteOrAppendInTheExistFile(const CString& szFileName, const ReportType& iReportType, const BOOL& bFirstAppend, const BOOL bIncludeHead) +{ + vector vStrLine; + BOOL bHaveIncludeSeriNum = FALSE; + m_bOpen = m_fileIoArchive.Open(szFileName); + if (!m_bOpen) + { + AfxMessageBox(_T("Creat csv file fail!"), MB_OK | MB_SYSTEMMODAL); + return; + } + else + { + while (m_fileIoArchive.ReadText(struLine.strLine)) + { + struLine.bSerNumRow = FALSE; + if (-1 != struLine.strLine.Find(m_strSerNum)) + { + struLine.bSerNumRow = TRUE; + bHaveIncludeSeriNum = TRUE; + } + vStrLine.push_back(struLine); + } + if (vStrLine.size() > 1) + { + m_fileIoArchive.Close(); + m_bOpen = m_fileIoArchive.Open(szFileName,TRUE); + if (!m_bOpen) + { + AfxMessageBox(_T("Creat csv file fail!"), MB_OK | MB_SYSTEMMODAL); + return; + } + UINT iCount = 0; + UINT iSubPos = 0; + CString strT; + CString sliptStr = TAB_CSV; + CString subStr = m_vPdcaReport.front().m_strRecordName; + CountAndFindSubStrInString(vStrLine.at(1).strLine, subStr, sliptStr, iCount, iSubPos); + m_fileIoArchive.Seek(0, CFile::begin); + int iRowNum = static_cast(vStrLine.size()); + if (iReportType == REPORT_APPEND) + { + ReportHeadData _ReportHeadData; + bool bAllNotShow = true; + if (bHaveIncludeSeriNum) + { + GetReportHeadData(_ReportHeadData, bAllNotShow, bIncludeHead); + int iReportSize = m_vPdcaReport.size(); + vector vMissIndex(iReportSize); + for (int i = 0; i < iRowNum; i++) + { + vMissIndex.clear(); + for (int m = 0; m < iReportSize; m++) + { + iCount = 0; + iSubPos = 0; + CountAndFindSubStrInString(vStrLine.at(1).strLine, m_vPdcaReport.at(m).m_strRecordName, sliptStr, iCount, iSubPos); + if (0 == iSubPos) + { + if (0 == m) + { + strT = vStrLine.at(i).strLine.TrimRight(ENTER_CSV); + m_fileIoArchive.WirteText(strT); + } + if ((csvHeadMap[CSV_HEAD_PRODUCT].show) && (1 == i)) + { + m_fileIoArchive.WirteText(_ReportHeadData.m_LabelArray.GetAt(m)); + m_fileIoArchive.WirteText(TAB_CSV); + } + if ((csvRowHeadMap[CSV_ROW_HEAD_LABEL].rowShow) && (2 == i)) + { + m_fileIoArchive.WirteText(TAB_CSV); + } + if ((csvRowHeadMap[CSV_ROW_HEAD_PDCA_PRIORITY].rowShow) && (3 == i)) + { + m_fileIoArchive.WirteText(_ReportHeadData.m_PDCAPriorityArray.GetAt(m)); + m_fileIoArchive.WirteText(TAB_CSV); + } + if ((csvRowHeadMap[CSV_ROW_HEAD_THEORETICAL].rowShow) && (4 == i)) + { + m_fileIoArchive.WirteText(_ReportHeadData.m_theoryTolArray.GetAt(m)); + m_fileIoArchive.WirteText(TAB_CSV); + } + if ((csvRowHeadMap[CSV_ROW_HEAD_UPPER_LIMIT].rowShow) && (5 == i)) + { + m_fileIoArchive.WirteText(_ReportHeadData.m_upperLimitArray.GetAt(m)); + m_fileIoArchive.WirteText(TAB_CSV); + } + if ((csvRowHeadMap[CSV_ROW_HEAD_LOWER_LIMIT].rowShow) && (6 == i)) + { + m_fileIoArchive.WirteText(_ReportHeadData.m_lowerLimitArray.GetAt(m)); + m_fileIoArchive.WirteText(TAB_CSV); + } + if ((csvRowHeadMap[CSV_ROW_HEAD_MEASUREMENT_UINT].rowShow) && (7 == i)) + { + m_fileIoArchive.WirteText(_ReportHeadData.m_measurementUnitArray.GetAt(m)); + m_fileIoArchive.WirteText(TAB_CSV); + } + vMissIndex.push_back(m); + } + else + { + if (vStrLine.at(i).bSerNumRow) + { + if ((iSubPos > 0) && (iSubPos < iCount)) + { + OverWrite(&m_fileIoArchive, vStrLine, m, iSubPos, FALSE); + } + if (m == iReportSize - 1) + { + m_fileIoArchive.WirteText(vStrLine.at(i).strLine); + if (vStrLine.at(i).bSerNumRow) + { + for (size_t i = 0; i < vMissIndex.size(); i++) + { + m_fileIoArchive.WirteText(_ReportHeadData.m_actualValueArray.GetAt(vMissIndex.at(i))); + m_fileIoArchive.WirteText(TAB_CSV); + } + } + } + } + else + { + if (0 == m) + { + strT = vStrLine.at(i).strLine.TrimRight(ENTER_CSV); + m_fileIoArchive.WirteText(strT); + } + } + } + } + m_fileIoArchive.NewLine(); + } + } + else + { + GetReportHeadData(_ReportHeadData, bAllNotShow, TRUE); + for (int i = 0; i < iRowNum; i++) + { + strT = vStrLine.at(i).strLine.TrimRight(ENTER_CSV); + m_fileIoArchive.WirteText(strT); + m_fileIoArchive.NewLine(); + } + _ReportHeadData.m_actualValueArray.InsertAt(0, (&_ReportHeadData.m_actualColumnValueArray)); + m_fileIoArchive.WirteTextArray(_ReportHeadData.m_actualValueArray, TAB_CSV); + _ReportHeadData.m_actualValueArray.RemoveAll(); + _ReportHeadData.m_actualColumnValueArray.RemoveAll(); + m_fileIoArchive.NewLine(); + } + } + else if (iReportType == REPORT_OVER_WRITE) + { + OverWrite(&m_fileIoArchive, vStrLine, iCount, iSubPos); + } + } + Close(); + } +} + +BOOL CPcdaReport::OverWrite(CFileIO* _file, vector& _vStrLine, const UINT& iCount, const UINT& iSubPos, const BOOL& bNewLine) +{ + BOOL bRet = FALSE; + m_iReportSize = (int)m_vPdcaReport.size(); + CString strAll, strLeft; + CString strLeftKeep; + CString strT; + CString sliptStr = TAB_CSV; + int iRowNum = static_cast(_vStrLine.size()); + for (int i = 0; i < iRowNum; i++) + { + if (_vStrLine.at(i).bSerNumRow) + { + strAll = _vStrLine.at(i).strLine; + int index = -1; + int iSub = iSubPos; + while (iSub) + { + index = strAll.Find(sliptStr); + if (index > 0) + { + strLeftKeep += strAll.Left(index + 1); + strAll = strAll.Right(strAll.GetLength() - index - 1); + } + iSub--; + } + if (bNewLine) + { + for (int m = iSubPos; m < iCount; m++) + { + index = strAll.Find(sliptStr); + if (index > 0) + { + if ((m - iSubPos) < m_vPdcaReport.size()) + { + strT = Pro_Precision(m_vPdcaReport.at(m - iSubPos).m_dMeasureValue, m_vPdcaReport.at(m - iSubPos).m_iPrecision); + } + if (-1 != strT.Find(_T("-9999.0"))) + { + strT = strAll.Left(index); + } + strLeft.Append(strT); + strLeft.Append(sliptStr); + strAll = strAll.Right(strAll.GetLength() - index - 1); + } + } + if (-1 == strAll.Find(sliptStr)) + { + strLeftKeep.Append(strLeft); + _vStrLine.at(i).strLine = strLeftKeep; + } + } + else + { + index = strAll.Find(sliptStr); + if (index > 0) + { + strT = Pro_Precision(m_vPdcaReport.at(iCount).m_dMeasureValue, m_vPdcaReport.at(iCount).m_iPrecision); + if (-1 != strT.Find(_T("-9999.0"))) + { + //strT = _T("NA"); + strT = strAll.Left(index); + } + strLeft.Append(strT); + strLeft.Append(sliptStr); + strAll = strAll.Right(strAll.GetLength() - index - 1); + } + strLeftKeep.Append(strLeft); + strLeftKeep.Append(strAll); + _vStrLine.at(i).strLine = strLeftKeep; + } + } + if (bNewLine) + { + _file->WirteText(_vStrLine.at(i).strLine); + _file->NewLine(); + } + } + return bRet; +} + +void CPcdaReport::GetReportHeadData(ReportHeadData& _ReportHeadData, bool& bAllNotShow, const BOOL bIncludeHead) +{ + if (bIncludeHead) + { + CTime testDate = CTime::GetCurrentTime(); + CTime endDateTime = CTime::GetCurrentTime(); + + int unitNumber = 0; + CString unitNumberStr; + bool dimensionResult = true; + CString listOfFailingTests; + if (csvRowHeadMap[CSV_ROW_HEAD_LABEL].rowShow) + { + _ReportHeadData.m_displayNameArray.Add(ROW_HEAD_LABEL_ARROW); + } + if (csvRowHeadMap[CSV_ROW_HEAD_PDCA_PRIORITY].rowShow) + { + _ReportHeadData.m_PDCAPriorityArray.Add(ROW_HEAD_PDCA_PRIORITY_ARROW); + } + if (csvRowHeadMap[CSV_ROW_HEAD_MEASUREMENT_UINT].rowShow) + { + _ReportHeadData.m_measurementUnitArray.Add(ROW_HEAD_MEASUREMENT_UINT_ARROW); + } + if (csvRowHeadMap[CSV_ROW_HEAD_THEORETICAL].rowShow) + { + _ReportHeadData.m_theoryTolArray.Add(ROW_HEAD_THEORETICAL_ARROW); + } + if (csvRowHeadMap[CSV_ROW_HEAD_PLUS_TOL].rowShow) + { + _ReportHeadData.m_plusTolArray.Add(ROW_HEAD_PLUS_TOL_ARROW); + } + if (csvRowHeadMap[CSV_ROW_HEAD_MINUS_TOL].rowShow) + { + _ReportHeadData.m_minusTolArray.Add(ROW_HEAD_MINUS_TOL_ARROW); + } + if (csvRowHeadMap[CSV_ROW_HEAD_UPPER_LIMIT].rowShow) + { + _ReportHeadData.m_upperLimitArray.Add(ROW_HEAD_UPPER_LIMIT_ARROW); + } + if (csvRowHeadMap[CSV_ROW_HEAD_LOWER_LIMIT].rowShow) + { + _ReportHeadData.m_lowerLimitArray.Add(ROW_HEAD_LOWER_LIMIT_ARROW); + } + if (csvRowHeadMap[CSV_ROW_HEAD_OUT_TOL].rowShow) + { + _ReportHeadData.m_outTolArray.Add(ROW_HEAD_OUT_TOL_ARROW); + } + if (csvRowHeadMap[CSV_ROW_HEAD_MAX_DEV].rowShow) + { + _ReportHeadData.m_maxDevArray.Add(ROW_HEAD_MAX_DEV_ARROW); + } + if (csvRowHeadMap[CSV_ROW_HEAD_MIN_DEV].rowShow) + { + _ReportHeadData.m_minDevArray.Add(ROW_HEAD_MIN_DEV_ARROW); + } + if (csvRowHeadMap[CSV_ROW_HEAD_AVE_DEV].rowShow) + { + _ReportHeadData.m_aveDevArray.Add(ROW_HEAD_AVE_DEV_ARROW); + } + if (csvRowHeadMap[CSV_ROW_HEAD_MAX_OUT_TOL].rowShow) + { + _ReportHeadData.m_maxOutTolArray.Add(ROW_HEAD_MAX_OUT_TOL_ARROW); + } + if (csvRowHeadMap[CSV_ROW_HEAD_CA].rowShow) + { + _ReportHeadData.m_CAArray.Add(ROW_HEAD_CA_ARROW); + } + if (csvRowHeadMap[CSV_ROW_HEAD_CP].rowShow) + { + _ReportHeadData.m_CPArray.Add(ROW_HEAD_CP_ARROW); + } + if (csvRowHeadMap[CSV_ROW_HEAD_CPK].rowShow) + { + _ReportHeadData.m_CPKArray.Add(ROW_HEAD_CPK_ARROW); + } + if (csvRowHeadMap[CSV_ROW_HEAD_PP].rowShow) + { + _ReportHeadData.m_PPArray.Add(ROW_HEAD_PP_ARROW); + } + if (csvRowHeadMap[CSV_ROW_HEAD_PPK].rowShow) + { + _ReportHeadData.m_PPKArray.Add(ROW_HEAD_PPK_ARROW); + } + int iFirstOutIndex = 0; + bAllNotShow = true; + bool bOutLabelHead = true; + for (int rowIndex = CSV_ROW_HEAD_THEORETICAL; rowIndex < CSV_ROW_HEAD_TOTAL; rowIndex++) + { + if (csvRowHeadMap[rowIndex].rowShow) + { + bAllNotShow = false; + } + } + + int iActualSize = 0; + CString strT; + CString strupperLimit; + CString strlowerLimit; + + for (int nIndex = 0; nIndex < m_iReportSize; nIndex++) + { + if (bOutLabelHead) + { + iFirstOutIndex++; + double upperLimit = m_vPdcaReport[nIndex].m_dTheoryValue + m_vPdcaReport[nIndex].m_dUpperTol; + double lowerLimit = m_vPdcaReport[nIndex].m_dTheoryValue + m_vPdcaReport[nIndex].m_dLowerTol; + strupperLimit = Pro_Precision(upperLimit, m_vPdcaReport[nIndex].m_iPrecision); + strlowerLimit = Pro_Precision(lowerLimit, m_vPdcaReport[nIndex].m_iPrecision); + _ReportHeadData.m_LabelArray.Add(m_vPdcaReport[nIndex].m_strRecordName); + _ReportHeadData.m_PDCAPriorityArray.Add(_T("A")); + switch (m_vPdcaReport[nIndex].m_iUnit) + { + case UNIT_TYPE_MM: + { + _ReportHeadData.m_measurementUnitArray.Add(_T("mm")); + break; + } + case UNIT_TYPE_INCH: + { + _ReportHeadData.m_measurementUnitArray.Add(_T("inch")); + break; + } + case UNIT_TYPE_MIL: + { + _ReportHeadData.m_measurementUnitArray.Add(_T("mil")); + break; + } + case UNIT_TYPE_UM: + { + _ReportHeadData.m_measurementUnitArray.Add(_T("um")); + break; + } + default: + break; + } + + strT = Pro_Precision(m_vPdcaReport[nIndex].m_dTheoryValue, m_vPdcaReport[nIndex].m_iPrecision); + _ReportHeadData.m_theoryTolArray.Add(strT); + strT = Pro_Precision(m_vPdcaReport[nIndex].m_dUpperTol, m_vPdcaReport[nIndex].m_iPrecision); + _ReportHeadData.m_plusTolArray.Add(strT); + strT = Pro_Precision(m_vPdcaReport[nIndex].m_dLowerTol, m_vPdcaReport[nIndex].m_iPrecision); + _ReportHeadData.m_minusTolArray.Add(strT); + _ReportHeadData.m_upperLimitArray.Add(strupperLimit); + _ReportHeadData.m_lowerLimitArray.Add(strlowerLimit); + if ((fabs(m_vPdcaReport[nIndex].m_dMeasureValue) > (fabs(upperLimit))) || + (fabs(m_vPdcaReport[nIndex].m_dMeasureValue) > (fabs(lowerLimit)))) + { + if (m_vPdcaReport[nIndex].m_dMeasureValue > m_vPdcaReport[nIndex].m_dTheoryValue) + { + if (m_vPdcaReport[nIndex].m_dMeasureValue > upperLimit) + { + m_vPdcaReport[nIndex].m_dOutTol = m_vPdcaReport[nIndex].m_dMeasureValue - upperLimit; + } + } + else + { + if (m_vPdcaReport[nIndex].m_dMeasureValue < upperLimit) + { + m_vPdcaReport[nIndex].m_dOutTol = m_vPdcaReport[nIndex].m_dMeasureValue - lowerLimit; + } + } + } + strT = Pro_Precision(m_vPdcaReport[nIndex].m_dOutTol, m_vPdcaReport[nIndex].m_iPrecision); + _ReportHeadData.m_outTolArray.Add(strT); + if (1 == iFirstOutIndex && false == bAllNotShow && true == csvRowHeadMap[CSV_ROW_HEAD_LABEL].rowShow) + { + //actualValueArray.Add(_T("")); + strT = Pro_Precision(m_vPdcaReport[nIndex].m_dMeasureValue, m_vPdcaReport[nIndex].m_iPrecision); + if (-1 != strT.Find(_T("-9999.0"))) + { + strT = _T("NA"); + } + _ReportHeadData.m_actualValueArray.Add(strT); + } + else if (1 == iFirstOutIndex && true == bAllNotShow) + { + strT = Pro_Precision(m_vPdcaReport[nIndex].m_dMeasureValue, m_vPdcaReport[nIndex].m_iPrecision); + if (-1 != strT.Find(_T("-9999.0"))) + { + strT = _T("NA"); + } + _ReportHeadData.m_actualValueArray.Add(strT); + } + else + { + strT = Pro_Precision(m_vPdcaReport[nIndex].m_dMeasureValue, m_vPdcaReport[nIndex].m_iPrecision); + if (-1 != strT.Find(_T("-9999.0"))) + { + strT = _T("NA"); + } + _ReportHeadData.m_actualValueArray.Add(strT); + } + } + } + iActualSize = (int)_ReportHeadData.m_actualValueArray.GetSize(); + unitNumberStr.Format(_T("%d"), unitNumber); + CStringArray LabelArrayHead; + CStringArray displayNameArrayHead; + CStringArray PDCAPriorityArrayHead; + CStringArray measurementUnitArrayHead; + CStringArray theoryTolArrayHead; + CStringArray plusTolArrayHead; + CStringArray minusTolArrayHead; + CStringArray upperLimitArrayHead; + CStringArray lowerLimitArrayHead; + CStringArray outTolArrayHead; + CStringArray maxDevArrayHead; + CStringArray minDevArrayHead; + CStringArray aveDevArrayHead; + CStringArray maxOutTolArrayHead; + CStringArray CAArrayHead; + CStringArray CPArrayHead; + CStringArray CPKArrayHead; + CStringArray PPArrayHead; + CStringArray PPKArrayHead; + CStringArray actualValueArrayHead; + for (int headIndex = CSV_ROW_HEAD_TEST_DATE; headIndex < CSV_ROW_HEAD_LABEL; headIndex++) + { + if (csvRowHeadMap[headIndex].rowShow) + { + LabelArrayHead.Add(csvRowHeadMap[headIndex].csvRowHeadName); + PDCAPriorityArrayHead.Add(_T("")); + measurementUnitArrayHead.Add(_T("")); + theoryTolArrayHead.Add(_T("")); + plusTolArrayHead.Add(_T("")); + minusTolArrayHead.Add(_T("")); + upperLimitArrayHead.Add(_T("")); + lowerLimitArrayHead.Add(_T("")); + outTolArrayHead.Add(_T("")); + maxDevArrayHead.Add(_T("")); + minDevArrayHead.Add(_T("")); + aveDevArrayHead.Add(_T("")); + maxOutTolArrayHead.Add(_T("")); + CAArrayHead.Add(_T("")); + CPArrayHead.Add(_T("")); + CPKArrayHead.Add(_T("")); + PPArrayHead.Add(_T("")); + PPKArrayHead.Add(_T("")); + } + } + + int headIndex = 0; + if (csvHeadMap[CSV_HEAD_MEASUREMENT].show) + { + headIndex = CSV_HEAD_MEASUREMENT; + } + int iLoopIndex = CSV_HEAD_TOTAL; + + for (headIndex; headIndex < iLoopIndex; headIndex++) + { + if (csvHeadMap[headIndex].show) + { + LabelArrayHead.Add(csvHeadMap[headIndex].csvHeadName); + PDCAPriorityArrayHead.Add(_T("")); + measurementUnitArrayHead.Add(_T("")); + theoryTolArrayHead.Add(_T("")); + plusTolArrayHead.Add(_T("")); + minusTolArrayHead.Add(_T("")); + upperLimitArrayHead.Add(_T("")); + lowerLimitArrayHead.Add(_T("")); + outTolArrayHead.Add(_T("")); + maxDevArrayHead.Add(_T("")); + minDevArrayHead.Add(_T("")); + aveDevArrayHead.Add(_T("")); + maxOutTolArrayHead.Add(_T("")); + CAArrayHead.Add(_T("")); + CPArrayHead.Add(_T("")); + CPKArrayHead.Add(_T("")); + PPArrayHead.Add(_T("")); + PPKArrayHead.Add(_T("")); + } + } + if (csvHeadMap[CSV_HEAD_PRODUCT].show) + { + _ReportHeadData.m_measurementVersionArray.Add(_T("TEST")); + CString version = _T("Version:"); + version = version + _T("110-A"); + _ReportHeadData.m_measurementVersionArray.Add(version); + } + if (csvHeadMap[CSV_HEAD_MEASUREMENT].show) + { + actualValueArrayHead.Add(csvHeadMap[CSV_HEAD_MEASUREMENT].csvHeadName); + } + if (csvHeadMap[CSV_HEAD_PRODUCT].show) + { + //actualValueArrayHead.Add(csvHeadMap[CSV_HEAD_PRODUCT].csvHeadName); + actualValueArrayHead.Add(m_strProNum); + } + + if (csvHeadMap[CSV_HEAD_SERIAL_NUBER].show) + { + actualValueArrayHead.Add(m_strSerNum); + } + if (csvHeadMap[CSV_HEAD_SPECIAL_BUILD_NAME].show) + { + actualValueArrayHead.Add(csvHeadMap[CSV_HEAD_SPECIAL_BUILD_NAME].csvHeadName); + } + if (csvHeadMap[CSV_HEAD_SPECIAL_BUILD_DESCRIPTION].show) + { + actualValueArrayHead.Add(csvHeadMap[CSV_HEAD_SPECIAL_BUILD_DESCRIPTION].csvHeadName); + } + if (csvHeadMap[CSV_HEAD_UNTI_NUMBER].show) + { + CString str; + str.Format(_T("%d"), m_iReportSize); + actualValueArrayHead.Add(str); + } + if (csvHeadMap[CSV_HEAD_STATION_ID].show) + { + actualValueArrayHead.Add(csvHeadMap[CSV_HEAD_STATION_ID].csvHeadName); + } + if (csvHeadMap[CSV_HEAD_ARCHIVE].show) + { + actualValueArrayHead.Add(csvHeadMap[CSV_HEAD_ARCHIVE].csvHeadName); + } + if (csvRowHeadMap[CSV_ROW_HEAD_TEST_DATE].rowShow) + { + actualValueArrayHead.Add(testDate.Format(_T("%Y/%m/%d"))); + } + if (csvRowHeadMap[CSV_ROW_HEAD_START_TIME].rowShow) + { + actualValueArrayHead.Add(m_strDataTime); + } + if (csvRowHeadMap[CSV_ROW_HEAD_END_TIME].rowShow) + { + actualValueArrayHead.Add(endDateTime.Format(_T("%Y%m%d-%H:%M:%S"))); + } + if (csvHeadMap[CSV_HEAD_CG_SN].show) + { + actualValueArrayHead.Add(csvHeadMap[CSV_HEAD_CG_SN].csvHeadName); + } + if (csvHeadMap[CSV_HEAD_HOUSINGSN].show) + { + actualValueArrayHead.Add(csvHeadMap[CSV_HEAD_HOUSINGSN].csvHeadName); + } + if (csvHeadMap[CSV_HEAD_TEST_STATUS].show) + { + actualValueArrayHead.Add(csvHeadMap[CSV_HEAD_TEST_STATUS].csvHeadName); + } + if (csvHeadMap[CSV_HEAD_LIST_OF_FAILING_TESTS].show) + { + actualValueArrayHead.Add(csvHeadMap[CSV_HEAD_LIST_OF_FAILING_TESTS].csvHeadName); + } + if (csvHeadMap[CSV_HEAD_VERSION].show) + { + actualValueArrayHead.Add(csvHeadMap[CSV_HEAD_VERSION].csvHeadName); + } + if (csvHeadMap[CSV_HEAD_IMAGE_FLAG].show) + { + actualValueArrayHead.Add(csvHeadMap[CSV_HEAD_IMAGE_FLAG].csvHeadName); + } + if (csvHeadMap[CSV_HEAD_MACHINE_ID].show) + { + actualValueArrayHead.Add(csvHeadMap[CSV_HEAD_MACHINE_ID].csvHeadName); + } + if (csvHeadMap[CSV_HEAD_MACHINE_NUMBER].show) + { + actualValueArrayHead.Add(csvHeadMap[CSV_HEAD_MACHINE_NUMBER].csvHeadName); + } + if (csvHeadMap[CSV_HEAD_OPERATOR].show) + { + actualValueArrayHead.Add(csvHeadMap[CSV_HEAD_OPERATOR].csvHeadName); + } + if (csvHeadMap[CSV_HEAD_CHECK_ID].show) + { + actualValueArrayHead.Add(csvHeadMap[CSV_HEAD_CHECK_ID].csvHeadName); + } + if (csvHeadMap[CSV_HEAD_SERIAL_ID].show) + { + actualValueArrayHead.Add(csvHeadMap[CSV_HEAD_SERIAL_ID].csvHeadName); + } + if (csvHeadMap[CSV_HEAD_SAMPLE_NAME].show) + { + actualValueArrayHead.Add(csvHeadMap[CSV_HEAD_SAMPLE_NAME].csvHeadName); + } + if (csvHeadMap[CSV_HEAD_SAMPLE_RULES].show) + { + actualValueArrayHead.Add(csvHeadMap[CSV_HEAD_SAMPLE_RULES].csvHeadName); + } + if (csvHeadMap[CSV_HEAD_SAMPLE_BATCH].show) + { + actualValueArrayHead.Add(csvHeadMap[CSV_HEAD_SAMPLE_BATCH].csvHeadName); + } + if (csvHeadMap[CSV_HEAD_SAMPLE_METHOD].show) + { + actualValueArrayHead.Add(csvHeadMap[CSV_HEAD_SAMPLE_METHOD].csvHeadName); + } + if (csvHeadMap[CSV_HEAD_SAMPLE_MANUFACTURER].show) + { + actualValueArrayHead.Add(csvHeadMap[CSV_HEAD_SAMPLE_MANUFACTURER].csvHeadName); + } + if (csvHeadMap[CSV_HEAD_REMARKS].show) + { + actualValueArrayHead.Add(csvHeadMap[CSV_HEAD_REMARKS].csvHeadName); + } + int headCount = (int)LabelArrayHead.GetCount(); + for (int index = 0; index < headCount; index++) + { + int outIndex = 0; + if (bAllNotShow) + { + outIndex = index; + } + else + { + outIndex = index + 1; + } + if (csvRowHeadMap[CSV_ROW_HEAD_LABEL].rowShow) + { + if (0 == index) + { + _ReportHeadData.m_LabelArray.InsertAt(index, LabelArrayHead.GetAt(2)); + } + else if (1 == index) + { + _ReportHeadData.m_LabelArray.InsertAt(index, LabelArrayHead.GetAt(3)); + } + else if (2 == index) + { + _ReportHeadData.m_LabelArray.InsertAt(index, LabelArrayHead.GetAt(4)); + } + else if (3 == index) + { + _ReportHeadData.m_LabelArray.InsertAt(index, LabelArrayHead.GetAt(5)); + } + else if (4 == index) + { + _ReportHeadData.m_LabelArray.InsertAt(index, LabelArrayHead.GetAt(8)); + } + else if (5 == index) + { + _ReportHeadData.m_LabelArray.InsertAt(index, LabelArrayHead.GetAt(6)); + } + else if (6 == index) + { + _ReportHeadData.m_LabelArray.InsertAt(index, LabelArrayHead.GetAt(7)); + } + else if (7 == index) + { + _ReportHeadData.m_LabelArray.InsertAt(index, LabelArrayHead.GetAt(0)); + } + else if (8 == index) + { + _ReportHeadData.m_LabelArray.InsertAt(index, LabelArrayHead.GetAt(1)); + } + else + { + _ReportHeadData.m_LabelArray.InsertAt(index, LabelArrayHead.GetAt(index)); + } + } + if ((!bAllNotShow) && (index == headCount - 1)) + { + break; + } + if (csvRowHeadMap[CSV_ROW_HEAD_PDCA_PRIORITY].rowShow) + { + _ReportHeadData.m_PDCAPriorityArray.InsertAt(outIndex, PDCAPriorityArrayHead.GetAt(index)); + } + if (csvRowHeadMap[CSV_ROW_HEAD_THEORETICAL].rowShow) + { + _ReportHeadData.m_theoryTolArray.InsertAt(outIndex, theoryTolArrayHead.GetAt(index)); + } + if (csvRowHeadMap[CSV_ROW_HEAD_PLUS_TOL].rowShow) + { + _ReportHeadData.m_plusTolArray.InsertAt(outIndex, plusTolArrayHead.GetAt(index)); + } + if (csvRowHeadMap[CSV_ROW_HEAD_MINUS_TOL].rowShow) + { + _ReportHeadData.m_minusTolArray.InsertAt(outIndex, minusTolArrayHead.GetAt(index)); + } + if (csvRowHeadMap[CSV_ROW_HEAD_UPPER_LIMIT].rowShow) + { + _ReportHeadData.m_upperLimitArray.InsertAt(outIndex, upperLimitArrayHead.GetAt(index)); + } + if (csvRowHeadMap[CSV_ROW_HEAD_LOWER_LIMIT].rowShow) + { + _ReportHeadData.m_lowerLimitArray.InsertAt(outIndex, lowerLimitArrayHead.GetAt(index)); + } + if (csvRowHeadMap[CSV_ROW_HEAD_OUT_TOL].rowShow) + { + _ReportHeadData.m_outTolArray.InsertAt(outIndex, outTolArrayHead.GetAt(index)); + } + if (csvRowHeadMap[CSV_ROW_HEAD_MAX_DEV].rowShow) + { + _ReportHeadData.m_maxDevArray.InsertAt(outIndex, maxDevArrayHead.GetAt(index)); + } + if (csvRowHeadMap[CSV_ROW_HEAD_MIN_DEV].rowShow) + { + _ReportHeadData.m_minDevArray.InsertAt(outIndex, minDevArrayHead.GetAt(index)); + } + if (csvRowHeadMap[CSV_ROW_HEAD_AVE_DEV].rowShow) + { + _ReportHeadData.m_aveDevArray.InsertAt(outIndex, aveDevArrayHead.GetAt(index)); + } + if (csvRowHeadMap[CSV_ROW_HEAD_MAX_OUT_TOL].rowShow) + { + _ReportHeadData.m_maxOutTolArray.InsertAt(outIndex, maxOutTolArrayHead.GetAt(index)); + } + if (csvRowHeadMap[CSV_ROW_HEAD_CA].rowShow) + { + _ReportHeadData.m_CAArray.InsertAt(outIndex, CAArrayHead.GetAt(index)); + } + if (csvRowHeadMap[CSV_ROW_HEAD_CP].rowShow) + { + _ReportHeadData.m_CPArray.InsertAt(outIndex, CPArrayHead.GetAt(index)); + } + if (csvRowHeadMap[CSV_ROW_HEAD_CPK].rowShow) + { + _ReportHeadData.m_CPKArray.InsertAt(outIndex, CPKArrayHead.GetAt(index)); + } + if (csvRowHeadMap[CSV_ROW_HEAD_PP].rowShow) + { + _ReportHeadData.m_PPArray.InsertAt(outIndex, PPArrayHead.GetAt(index)); + } + if (csvRowHeadMap[CSV_ROW_HEAD_PPK].rowShow) + { + _ReportHeadData.m_PPKArray.InsertAt(outIndex, PPKArrayHead.GetAt(index)); + } + if (csvRowHeadMap[CSV_ROW_HEAD_MEASUREMENT_UINT].rowShow) + { + _ReportHeadData.m_measurementUnitArray.InsertAt(outIndex, measurementUnitArrayHead.GetAt(index)); + } + } + _ReportHeadData.m_actualColumnValueArray.InsertAt(0, (&actualValueArrayHead)); + } + else + { + int iActualSize = 0; + CString strT; + CString strupperLimit; + CString strlowerLimit; + for (int nIndex = 0; nIndex < m_iReportSize; nIndex++) + { + double upperLimit = m_vPdcaReport[nIndex].m_dTheoryValue + m_vPdcaReport[nIndex].m_dUpperTol; + double lowerLimit = m_vPdcaReport[nIndex].m_dTheoryValue + m_vPdcaReport[nIndex].m_dLowerTol; + strupperLimit = Pro_Precision(upperLimit, m_vPdcaReport[nIndex].m_iPrecision); + strlowerLimit = Pro_Precision(lowerLimit, m_vPdcaReport[nIndex].m_iPrecision); + _ReportHeadData.m_LabelArray.Add(m_vPdcaReport[nIndex].m_strRecordName); + _ReportHeadData.m_PDCAPriorityArray.Add(_T("A")); + switch (m_vPdcaReport[nIndex].m_iUnit) + { + case UNIT_TYPE_MM: + { + _ReportHeadData.m_measurementUnitArray.Add(_T("mm")); + break; + } + case UNIT_TYPE_INCH: + { + _ReportHeadData.m_measurementUnitArray.Add(_T("inch")); + break; + } + case UNIT_TYPE_MIL: + { + _ReportHeadData.m_measurementUnitArray.Add(_T("mil")); + break; + } + case UNIT_TYPE_UM: + { + _ReportHeadData.m_measurementUnitArray.Add(_T("um")); + break; + } + default: + break; + } + + strT = Pro_Precision(m_vPdcaReport[nIndex].m_dTheoryValue, m_vPdcaReport[nIndex].m_iPrecision); + _ReportHeadData.m_theoryTolArray.Add(strT); + strT = Pro_Precision(m_vPdcaReport[nIndex].m_dUpperTol, m_vPdcaReport[nIndex].m_iPrecision); + _ReportHeadData.m_plusTolArray.Add(strT); + strT = Pro_Precision(m_vPdcaReport[nIndex].m_dLowerTol, m_vPdcaReport[nIndex].m_iPrecision); + _ReportHeadData.m_minusTolArray.Add(strT); + _ReportHeadData.m_upperLimitArray.Add(strupperLimit); + _ReportHeadData.m_lowerLimitArray.Add(strlowerLimit); + if ((fabs(m_vPdcaReport[nIndex].m_dMeasureValue) > (fabs(upperLimit))) || + (fabs(m_vPdcaReport[nIndex].m_dMeasureValue) > (fabs(lowerLimit)))) + { + if (m_vPdcaReport[nIndex].m_dMeasureValue > m_vPdcaReport[nIndex].m_dTheoryValue) + { + if (m_vPdcaReport[nIndex].m_dMeasureValue > upperLimit) + { + m_vPdcaReport[nIndex].m_dOutTol = m_vPdcaReport[nIndex].m_dMeasureValue - upperLimit; + } + } + else + { + if (m_vPdcaReport[nIndex].m_dMeasureValue < upperLimit) + { + m_vPdcaReport[nIndex].m_dOutTol = m_vPdcaReport[nIndex].m_dMeasureValue - lowerLimit; + } + } + } + strT = Pro_Precision(m_vPdcaReport[nIndex].m_dOutTol, m_vPdcaReport[nIndex].m_iPrecision); + _ReportHeadData.m_outTolArray.Add(strT); + strT = Pro_Precision(m_vPdcaReport[nIndex].m_dMeasureValue, m_vPdcaReport[nIndex].m_iPrecision); + if (-1 != strT.Find(_T("-9999.0"))) + { + strT = _T("NA"); + } + _ReportHeadData.m_actualValueArray.Add(strT); + } + } +} + +void CPcdaReport::GenerateArchiveFileCSV(CString csvFileFullPath) +{ + ReportHeadData _ReportHeadData; + bool bAllNotShow = true; + GetReportHeadData(_ReportHeadData, bAllNotShow, TRUE); + bool bFileExist = PathFileExists(csvFileFullPath); + Open(csvFileFullPath); + if (!m_bOpen) + { + AfxMessageBox(_T("Creat csv file fail!"), MB_OK | MB_SYSTEMMODAL); + return; + } + + if (m_bArchiveToSingleFile == false || m_bArchiveToSingleFile && false == bFileExist) + { + if (csvHeadMap[CSV_HEAD_PRODUCT].show) + { + m_fileIoArchive.WirteTextArray(_ReportHeadData.m_measurementVersionArray, TAB_CSV); + _ReportHeadData.m_measurementVersionArray.RemoveAll(); + m_fileIoArchive.NewLine(); + } + if (csvRowHeadMap[CSV_ROW_HEAD_LABEL].rowShow) + { + m_fileIoArchive.WirteTextArray(_ReportHeadData.m_LabelArray, TAB_CSV); + _ReportHeadData.m_LabelArray.RemoveAll(); + m_fileIoArchive.NewLine(); + + m_fileIoArchive.WirteTextArray(_ReportHeadData.m_displayNameArray, TAB_CSV); + _ReportHeadData.m_displayNameArray.RemoveAll(); + m_fileIoArchive.NewLine(); + } + if (csvRowHeadMap[CSV_ROW_HEAD_PDCA_PRIORITY].rowShow) + { + m_fileIoArchive.WirteTextArray(_ReportHeadData.m_PDCAPriorityArray, TAB_CSV); + _ReportHeadData.m_PDCAPriorityArray.RemoveAll(); + m_fileIoArchive.NewLine(); + } + if (csvRowHeadMap[CSV_ROW_HEAD_THEORETICAL].rowShow) + { + m_fileIoArchive.WirteTextArray(_ReportHeadData.m_theoryTolArray, TAB_CSV); + _ReportHeadData.m_theoryTolArray.RemoveAll(); + m_fileIoArchive.NewLine(); + } + if (csvRowHeadMap[CSV_ROW_HEAD_PLUS_TOL].rowShow) + { + m_fileIoArchive.WirteTextArray(_ReportHeadData.m_plusTolArray, TAB_CSV); + _ReportHeadData.m_plusTolArray.RemoveAll(); + m_fileIoArchive.NewLine(); + } + if (csvRowHeadMap[CSV_ROW_HEAD_MINUS_TOL].rowShow) + { + m_fileIoArchive.WirteTextArray(_ReportHeadData.m_minusTolArray, TAB_CSV); + _ReportHeadData.m_minusTolArray.RemoveAll(); + m_fileIoArchive.NewLine(); + } + if (csvRowHeadMap[CSV_ROW_HEAD_UPPER_LIMIT].rowShow) + { + m_fileIoArchive.WirteTextArray(_ReportHeadData.m_upperLimitArray, TAB_CSV); + _ReportHeadData.m_upperLimitArray.RemoveAll(); + m_fileIoArchive.NewLine(); + } + if (csvRowHeadMap[CSV_ROW_HEAD_LOWER_LIMIT].rowShow) + { + m_fileIoArchive.WirteTextArray(_ReportHeadData.m_lowerLimitArray, TAB_CSV); + _ReportHeadData.m_lowerLimitArray.RemoveAll(); + m_fileIoArchive.NewLine(); + } + if (csvRowHeadMap[CSV_ROW_HEAD_OUT_TOL].rowShow) + { + m_fileIoArchive.WirteTextArray(_ReportHeadData.m_outTolArray, TAB_CSV); + _ReportHeadData.m_outTolArray.RemoveAll(); + m_fileIoArchive.NewLine(); + } + if (csvRowHeadMap[CSV_ROW_HEAD_MAX_DEV].rowShow) + { + m_fileIoArchive.WirteTextArray(_ReportHeadData.m_maxDevArray, TAB_CSV); + _ReportHeadData.m_maxDevArray.RemoveAll(); + m_fileIoArchive.NewLine(); + } + if (csvRowHeadMap[CSV_ROW_HEAD_MIN_DEV].rowShow) + { + m_fileIoArchive.WirteTextArray(_ReportHeadData.m_minDevArray, TAB_CSV); + _ReportHeadData.m_minDevArray.RemoveAll(); + m_fileIoArchive.NewLine(); + } + if (csvRowHeadMap[CSV_ROW_HEAD_AVE_DEV].rowShow) + { + m_fileIoArchive.WirteTextArray(_ReportHeadData.m_aveDevArray, TAB_CSV); + _ReportHeadData.m_aveDevArray.RemoveAll(); + m_fileIoArchive.NewLine(); + } + if (csvRowHeadMap[CSV_ROW_HEAD_MAX_OUT_TOL].rowShow) + { + m_fileIoArchive.WirteTextArray(_ReportHeadData.m_maxOutTolArray, TAB_CSV); + _ReportHeadData.m_maxOutTolArray.RemoveAll(); + m_fileIoArchive.NewLine(); + } + if (csvRowHeadMap[CSV_ROW_HEAD_CA].rowShow) + { + m_fileIoArchive.WirteTextArray(_ReportHeadData.m_CAArray, TAB_CSV); + _ReportHeadData.m_CAArray.RemoveAll(); + m_fileIoArchive.NewLine(); + } + if (csvRowHeadMap[CSV_ROW_HEAD_CP].rowShow) + { + m_fileIoArchive.WirteTextArray(_ReportHeadData.m_CPArray, TAB_CSV); + _ReportHeadData.m_CPArray.RemoveAll(); + m_fileIoArchive.NewLine(); + } + if (csvRowHeadMap[CSV_ROW_HEAD_CPK].rowShow) + { + m_fileIoArchive.WirteTextArray(_ReportHeadData.m_CPKArray, TAB_CSV); + _ReportHeadData.m_CPKArray.RemoveAll(); + m_fileIoArchive.NewLine(); + } + if (csvRowHeadMap[CSV_ROW_HEAD_PP].rowShow) + { + m_fileIoArchive.WirteTextArray(_ReportHeadData.m_PPArray, TAB_CSV); + _ReportHeadData.m_PPArray.RemoveAll(); + m_fileIoArchive.NewLine(); + } + if (csvRowHeadMap[CSV_ROW_HEAD_PPK].rowShow) + { + m_fileIoArchive.WirteTextArray(_ReportHeadData.m_PPKArray, TAB_CSV); + _ReportHeadData.m_PPKArray.RemoveAll(); + m_fileIoArchive.NewLine(); + } + if (csvRowHeadMap[CSV_ROW_HEAD_MEASUREMENT_UINT].rowShow) + { + m_fileIoArchive.WirteTextArray(_ReportHeadData.m_measurementUnitArray, TAB_CSV); + _ReportHeadData.m_measurementUnitArray.RemoveAll(); + m_fileIoArchive.NewLine(); + } + } + if (bAllNotShow) + { + _ReportHeadData.m_actualValueArray.InsertAt(0, (&_ReportHeadData.m_actualColumnValueArray)); + for (int i = 0; i < _ReportHeadData.m_actualValueArray.GetSize(); i++) + { + if (ENTER_CSV != _ReportHeadData.m_actualValueArray.GetAt(i)) + { + m_fileIoArchive.WirteText(_ReportHeadData.m_actualValueArray.GetAt(i)); + m_fileIoArchive.WirteText(TAB_CSV); + } + else + { + m_fileIoArchive.WirteText(_ReportHeadData.m_actualValueArray.GetAt(i)); + } + } + } + else + { + _ReportHeadData.m_actualValueArray.InsertAt(0, (&_ReportHeadData.m_actualColumnValueArray)); + m_fileIoArchive.WirteTextArray(_ReportHeadData.m_actualValueArray, TAB_CSV); + } + _ReportHeadData.m_actualValueArray.RemoveAll(); + m_fileIoArchive.NewLine(); + Close(); +} + +BOOL CPcdaReport::FileExists(LPCTSTR pstrFileName) +{ + _ASSERTE(!::IsBadStringPtr(pstrFileName, MAX_PATH)); + DWORD dwErrMode = ::SetErrorMode(SEM_FAILCRITICALERRORS); + BOOL bRes = ::GetFileAttributes(pstrFileName) != 0xFFFFFFFF; + ::SetErrorMode(dwErrMode); + return bRes; +} + +CString CPcdaReport::Pro_Precision(const double& value, const int& iPreci) +{ + CString as; + switch (iPreci) + { + case 0: + as.Format(_T("%.0f"), value); + break; + case 1: + as.Format(_T("%.1f"), value); + break; + case 2: + as.Format(_T("%.2f"), value); + break; + case 3: + as.Format(_T("%.3f"), value); + break; + case 4: + as.Format(_T("%.4f"), value); + break; + case 5: + as.Format(_T("%.5f"), value); + break; + case 6: + as.Format(_T("%.6f"), value); + break; + case 7: + as.Format(_T("%.7f"), value); + break; + case 8: + as.Format(_T("%.8f"), value); + break; + case 9: + as.Format(_T("%.9f"), value); + break; + case 10: + as.Format(_T("%.10f"), value); + break; + default: + { + as.Format(_T("%.4f"), value); + break; + } + } + return as; +} diff --git a/PcDmis/Base/Interfac/Msi/Hsi/PCDA_Report/PCDA_Report/PdcaReport.h b/PcDmis/Base/Interfac/Msi/Hsi/PCDA_Report/PCDA_Report/PdcaReport.h new file mode 100644 index 0000000..fd8da3b --- /dev/null +++ b/PcDmis/Base/Interfac/Msi/Hsi/PCDA_Report/PCDA_Report/PdcaReport.h @@ -0,0 +1,165 @@ +#pragma once +#include "stdafx.h" +#include "FileIO.h" + +class CPcdaReport +{ +public: + CPcdaReport(); + ~CPcdaReport(); + +private: + + +public: + typedef enum ENUM_CSV_HEAD + { + CSV_HEAD_MEASUREMENT, + CSV_HEAD_PRODUCT, + CSV_HEAD_SERIAL_NUBER, + CSV_HEAD_SPECIAL_BUILD_NAME, + CSV_HEAD_SPECIAL_BUILD_DESCRIPTION, + CSV_HEAD_STATION_ID, + CSV_HEAD_ARCHIVE, + CSV_HEAD_CG_SN, + CSV_HEAD_HOUSINGSN, + CSV_HEAD_UNTI_NUMBER, + CSV_HEAD_TEST_STATUS, + CSV_HEAD_LIST_OF_FAILING_TESTS, + CSV_HEAD_VERSION, + CSV_HEAD_IMAGE_FLAG, + CSV_HEAD_MACHINE_ID, + CSV_HEAD_MACHINE_NUMBER, + CSV_HEAD_OPERATOR, + CSV_HEAD_CHECK_ID, + CSV_HEAD_SERIAL_ID, + CSV_HEAD_SAMPLE_NAME, + CSV_HEAD_SAMPLE_RULES, + CSV_HEAD_SAMPLE_BATCH, + CSV_HEAD_SAMPLE_METHOD, + CSV_HEAD_SAMPLE_MANUFACTURER, + CSV_HEAD_REMARKS, + CSV_HEAD_TOTAL + }CSVHead; + + typedef enum ENUM_CSV_ROW_HEAD + { + CSV_ROW_HEAD_TEST_DATE, + CSV_ROW_HEAD_START_TIME, + CSV_ROW_HEAD_END_TIME, + CSV_ROW_HEAD_LABEL, + CSV_ROW_HEAD_THEORETICAL, + CSV_ROW_HEAD_PLUS_TOL, + CSV_ROW_HEAD_MINUS_TOL, + CSV_ROW_HEAD_UPPER_LIMIT, + CSV_ROW_HEAD_LOWER_LIMIT, + CSV_ROW_HEAD_OUT_TOL, + CSV_ROW_HEAD_MAX_DEV, + CSV_ROW_HEAD_MIN_DEV, + CSV_ROW_HEAD_AVE_DEV, + CSV_ROW_HEAD_MAX_OUT_TOL, + CSV_ROW_HEAD_CA, + CSV_ROW_HEAD_CP, + CSV_ROW_HEAD_CPK, + CSV_ROW_HEAD_PP, + CSV_ROW_HEAD_PPK, + CSV_ROW_HEAD_PDCA_PRIORITY, + CSV_ROW_HEAD_MEASUREMENT_UINT, + CSV_ROW_HEAD_TOTAL + }CSVRowHead; + + typedef struct + { + CSVHead csvHead; + bool show; + CString csvHeadName; + }CSVHeadMap; + + typedef struct + { + CSVRowHead csvRowHead; + bool rowShow; + CString csvRowHeadName; + }CSVRowHeadMap; + +public: + struct ReportReserve + { + CString m_reportName; + vector m_vPcdaReport; + ReportReserve() + { + m_reportName = _T("Profile"); + } + }; + struct ReportHeadData + { + CStringArray m_measurementVersionArray; + CStringArray m_LabelArray; + CStringArray m_displayNameArray; + CStringArray m_PDCAPriorityArray; + CStringArray m_theoryTolArray; + CStringArray m_plusTolArray; + CStringArray m_minusTolArray; + CStringArray m_upperLimitArray; + CStringArray m_lowerLimitArray; + CStringArray m_outTolArray; + CStringArray m_maxDevArray; + CStringArray m_minDevArray; + CStringArray m_aveDevArray; + CStringArray m_maxOutTolArray; + CStringArray m_CAArray; + CStringArray m_CPArray; + CStringArray m_CPKArray; + CStringArray m_PPArray; + CStringArray m_PPKArray; + CStringArray m_measurementUnitArray; + CStringArray m_actualValueArray; + CStringArray m_actualColumnValueArray; + }; + + struct STRU_LINE + { + CString strLine; + BOOL bSerNumRow; + }struLine; +public: + + static CSVHeadMap csvHeadMap[CSV_HEAD_TOTAL]; + static CSVRowHeadMap csvRowHeadMap[CSV_ROW_HEAD_TOTAL]; + + void Open(const CString& ReportArchiveFile, bool append = true); + void Close(); + void AdjustPathAndGenerateArchiveFile(const CString& szFileName, const CString& strSerialNumber, const CString& strProductNumber, const bool& bToSingleFile, const PdcaReport* vPdcaReport, + const int& iItemSize, const bool& bChangeRow, const int& iReportSize, const BOOL& bDefFormat = FALSE, const int& iBeginIndex = 1, + const ReportType& iReportType = REPORT_NORMAL, const BOOL& bFirstAppend = FALSE, const BOOL bIncludeHead = FALSE); + void GenerateArchiveFileCSV(CString csvFileFullPath); + BOOL FileExists(LPCTSTR pstrFileName); + CString Pro_Precision(const double& value, const int& iPreci = 4); + bool GetSerialNumAndTestDataTime(const CString& strSerialNumber, int& iLastNum, const bool bChangeRow); + bool AdjustHaveExist(const CString& szFileName, const int& iItemSize, const int& iLastNum); + bool AdjustReportAndFillWhenEmpty(vector& vPdcaReportOutput, const CString& szFileName, const int& iItemSize, const int& iReportSize, const int& iBeginIndex); + static bool CompareCondition(PdcaReport vReportA, PdcaReport vReportB); + void GetDataAndPushInKeepVector(const CString& szFileName, const PdcaReport* vPdcaReport, const int& iItemSize); + void OverWirteOrAppendInTheExistFile(const CString& szFileName, const ReportType& iReportType, const BOOL& bFirstAppend = FALSE, const BOOL bIncludeHead = FALSE); + void CountAndFindSubStrInString(const CString& strAll, const CString& strSub, const CString& sliptStr, UINT& iCount, UINT& iSubPos); + void GetReportHeadData(ReportHeadData& _ReportHeadData, bool& bAllNotShow, const BOOL bIncludeHead = FALSE); + BOOL OverWrite(CFileIO* _file, vector& _vStrLine, const UINT& iCount, const UINT& iSubPos, const BOOL& bNewLine = TRUE); +public: + + bool m_bOpen; + bool m_bArchiveToSingleFile; + bool m_bLastArchiveToSingleFile; + int m_dCountArchiveToOneFile; + CFileIO m_fileIoArchive; + int m_iReportSize; + vector m_vEmptyIndex; + vector m_vPdcaReport; + vector m_vPdcaReportReserve; + CString m_strSerNum; + CString m_strProNum; + CString m_strDataTime; + CString m_strSerNumCompare; + CString m_strDataTimeCompare; + CString m_strSerBuild; +}; diff --git a/PcDmis/Base/Interfac/Msi/Hsi/PCDA_Report/PCDA_Report/Resource.h b/PcDmis/Base/Interfac/Msi/Hsi/PCDA_Report/PCDA_Report/Resource.h new file mode 100644 index 0000000..fd48060 --- /dev/null +++ b/PcDmis/Base/Interfac/Msi/Hsi/PCDA_Report/PCDA_Report/Resource.h @@ -0,0 +1,16 @@ +//{{NO_DEPENDENCIES}} +// Microsoft Visual C++ generated include file. +// Used by PCDA_Report.rc +// + +// Next default values for new objects +// +#ifdef APSTUDIO_INVOKED +#ifndef APSTUDIO_READONLY_SYMBOLS + +#define _APS_NEXT_RESOURCE_VALUE 1000 +#define _APS_NEXT_CONTROL_VALUE 1000 +#define _APS_NEXT_SYMED_VALUE 1000 +#define _APS_NEXT_COMMAND_VALUE 32771 +#endif +#endif diff --git a/PcDmis/Base/Interfac/Msi/Hsi/PCDA_Report/PCDA_Report/res/PCDA_Report.rc2 b/PcDmis/Base/Interfac/Msi/Hsi/PCDA_Report/PCDA_Report/res/PCDA_Report.rc2 new file mode 100644 index 0000000..ff2089e Binary files /dev/null and b/PcDmis/Base/Interfac/Msi/Hsi/PCDA_Report/PCDA_Report/res/PCDA_Report.rc2 differ diff --git a/PcDmis/Base/Interfac/Msi/Hsi/PCDA_Report/PCDA_Report/stdafx.cpp b/PcDmis/Base/Interfac/Msi/Hsi/PCDA_Report/PCDA_Report/stdafx.cpp new file mode 100644 index 0000000..04d811a --- /dev/null +++ b/PcDmis/Base/Interfac/Msi/Hsi/PCDA_Report/PCDA_Report/stdafx.cpp @@ -0,0 +1,7 @@ +// stdafx.cpp : source file that includes just the standard includes +// PCDA_Report.pch will be the pre-compiled header +// stdafx.obj will contain the pre-compiled type information + +#include "stdafx.h" + + diff --git a/PcDmis/Base/Interfac/Msi/Hsi/PCDA_Report/PCDA_Report/stdafx.h b/PcDmis/Base/Interfac/Msi/Hsi/PCDA_Report/PCDA_Report/stdafx.h new file mode 100644 index 0000000..ebf6569 --- /dev/null +++ b/PcDmis/Base/Interfac/Msi/Hsi/PCDA_Report/PCDA_Report/stdafx.h @@ -0,0 +1,47 @@ +// stdafx.h : include file for standard system include files, +// or project specific include files that are used frequently, but +// are changed infrequently + +#pragma once + +#ifndef VC_EXTRALEAN +#define VC_EXTRALEAN // Exclude rarely-used stuff from Windows headers +#endif + +#include "targetver.h" + +#define _ATL_CSTRING_EXPLICIT_CONSTRUCTORS // some CString constructors will be explicit + +#include // MFC core and standard components +#include // MFC extensions + +#ifndef _AFX_NO_OLE_SUPPORT +#include // MFC OLE classes +#include // MFC OLE dialog classes +#include // MFC Automation classes +#endif // _AFX_NO_OLE_SUPPORT + +#ifndef _AFX_NO_DB_SUPPORT +#include // MFC ODBC database classes +#endif // _AFX_NO_DB_SUPPORT + +#ifndef _AFX_NO_DAO_SUPPORT +#include // MFC DAO database classes +#endif // _AFX_NO_DAO_SUPPORT + +#ifndef _AFX_NO_OLE_SUPPORT +#include // MFC support for Internet Explorer 4 Common Controls +#endif +#ifndef _AFX_NO_AFXCMN_SUPPORT +#include // MFC support for Windows Common Controls +#endif // _AFX_NO_AFXCMN_SUPPORT + +#ifndef __AFXWIN_H__ +#error "include 'stdafx.h' before including this file for PCH" +#endif + +#define __PDCADLL_H + +#include "PCDA_Report.h" +#include "resource.h" // main symbols +#include \ No newline at end of file diff --git a/PcDmis/Base/Interfac/Msi/Hsi/PCDA_Report/PCDA_Report/targetver.h b/PcDmis/Base/Interfac/Msi/Hsi/PCDA_Report/PCDA_Report/targetver.h new file mode 100644 index 0000000..87c0086 --- /dev/null +++ b/PcDmis/Base/Interfac/Msi/Hsi/PCDA_Report/PCDA_Report/targetver.h @@ -0,0 +1,8 @@ +#pragma once + +// Including SDKDDKVer.h defines the highest available Windows platform. + +// If you wish to build your application for a previous Windows platform, include WinSDKVer.h and +// set the _WIN32_WINNT macro to the platform you wish to support before including SDKDDKVer.h. + +#include diff --git a/PcDmis/Base/Interfac/Msi/Hsi/PCDA_Report/PCDA_Report/x64/Debug/PCDA_Report.res b/PcDmis/Base/Interfac/Msi/Hsi/PCDA_Report/PCDA_Report/x64/Debug/PCDA_Report.res new file mode 100644 index 0000000..d79bbf0 Binary files /dev/null and b/PcDmis/Base/Interfac/Msi/Hsi/PCDA_Report/PCDA_Report/x64/Debug/PCDA_Report.res differ diff --git a/PcDmis/Base/Interfac/Msi/Hsi/PCDA_Report/PCDA_Report/x64/Debug/Pdca.tlog/CL.command.1.tlog b/PcDmis/Base/Interfac/Msi/Hsi/PCDA_Report/PCDA_Report/x64/Debug/Pdca.tlog/CL.command.1.tlog new file mode 100644 index 0000000..53408f9 Binary files /dev/null and b/PcDmis/Base/Interfac/Msi/Hsi/PCDA_Report/PCDA_Report/x64/Debug/Pdca.tlog/CL.command.1.tlog differ diff --git a/PcDmis/Base/Interfac/Msi/Hsi/PCDA_Report/PCDA_Report/x64/Debug/Pdca.tlog/CL.read.1.tlog b/PcDmis/Base/Interfac/Msi/Hsi/PCDA_Report/PCDA_Report/x64/Debug/Pdca.tlog/CL.read.1.tlog new file mode 100644 index 0000000..5aaccec Binary files /dev/null and b/PcDmis/Base/Interfac/Msi/Hsi/PCDA_Report/PCDA_Report/x64/Debug/Pdca.tlog/CL.read.1.tlog differ diff --git a/PcDmis/Base/Interfac/Msi/Hsi/PCDA_Report/PCDA_Report/x64/Debug/Pdca.tlog/CL.write.1.tlog b/PcDmis/Base/Interfac/Msi/Hsi/PCDA_Report/PCDA_Report/x64/Debug/Pdca.tlog/CL.write.1.tlog new file mode 100644 index 0000000..a0c211c Binary files /dev/null and b/PcDmis/Base/Interfac/Msi/Hsi/PCDA_Report/PCDA_Report/x64/Debug/Pdca.tlog/CL.write.1.tlog differ diff --git a/PcDmis/Base/Interfac/Msi/Hsi/PCDA_Report/PCDA_Report/x64/Debug/Pdca.tlog/Pdca.lastbuildstate b/PcDmis/Base/Interfac/Msi/Hsi/PCDA_Report/PCDA_Report/x64/Debug/Pdca.tlog/Pdca.lastbuildstate new file mode 100644 index 0000000..7c6b7a0 --- /dev/null +++ b/PcDmis/Base/Interfac/Msi/Hsi/PCDA_Report/PCDA_Report/x64/Debug/Pdca.tlog/Pdca.lastbuildstate @@ -0,0 +1,2 @@ +#TargetFrameworkVersion=v4.0:PlatformToolSet=v140:EnableManagedIncrementalBuild=false:VCToolArchitecture=Native32Bit:WindowsTargetPlatformVersion=8.1 +Debug|x64|D:\Git_Metus\METUS_2020R1\HG_EF7_HSI_EF1\PcDmis\Base\Interfac\Msi\Hsi\PCDA_Report\| diff --git a/PcDmis/Base/Interfac/Msi/Hsi/PCDA_Report/PCDA_Report/x64/Debug/Pdca.tlog/Pdca.write.1u.tlog b/PcDmis/Base/Interfac/Msi/Hsi/PCDA_Report/PCDA_Report/x64/Debug/Pdca.tlog/Pdca.write.1u.tlog new file mode 100644 index 0000000..f9fa9a3 Binary files /dev/null and b/PcDmis/Base/Interfac/Msi/Hsi/PCDA_Report/PCDA_Report/x64/Debug/Pdca.tlog/Pdca.write.1u.tlog differ diff --git a/PcDmis/Base/Interfac/Msi/Hsi/PCDA_Report/PCDA_Report/x64/Debug/Pdca.tlog/link.command.1.tlog b/PcDmis/Base/Interfac/Msi/Hsi/PCDA_Report/PCDA_Report/x64/Debug/Pdca.tlog/link.command.1.tlog new file mode 100644 index 0000000..692bb9a Binary files /dev/null and b/PcDmis/Base/Interfac/Msi/Hsi/PCDA_Report/PCDA_Report/x64/Debug/Pdca.tlog/link.command.1.tlog differ diff --git a/PcDmis/Base/Interfac/Msi/Hsi/PCDA_Report/PCDA_Report/x64/Debug/Pdca.tlog/link.read.1.tlog b/PcDmis/Base/Interfac/Msi/Hsi/PCDA_Report/PCDA_Report/x64/Debug/Pdca.tlog/link.read.1.tlog new file mode 100644 index 0000000..20ff74d Binary files /dev/null and b/PcDmis/Base/Interfac/Msi/Hsi/PCDA_Report/PCDA_Report/x64/Debug/Pdca.tlog/link.read.1.tlog differ diff --git a/PcDmis/Base/Interfac/Msi/Hsi/PCDA_Report/PCDA_Report/x64/Debug/Pdca.tlog/link.write.1.tlog b/PcDmis/Base/Interfac/Msi/Hsi/PCDA_Report/PCDA_Report/x64/Debug/Pdca.tlog/link.write.1.tlog new file mode 100644 index 0000000..30989e8 Binary files /dev/null and b/PcDmis/Base/Interfac/Msi/Hsi/PCDA_Report/PCDA_Report/x64/Debug/Pdca.tlog/link.write.1.tlog differ diff --git a/PcDmis/Base/Interfac/Msi/Hsi/PCDA_Report/PCDA_Report/x64/Debug/Pdca.tlog/rc.command.1.tlog b/PcDmis/Base/Interfac/Msi/Hsi/PCDA_Report/PCDA_Report/x64/Debug/Pdca.tlog/rc.command.1.tlog new file mode 100644 index 0000000..a5f38b4 Binary files /dev/null and b/PcDmis/Base/Interfac/Msi/Hsi/PCDA_Report/PCDA_Report/x64/Debug/Pdca.tlog/rc.command.1.tlog differ diff --git a/PcDmis/Base/Interfac/Msi/Hsi/PCDA_Report/PCDA_Report/x64/Debug/Pdca.tlog/rc.read.1.tlog b/PcDmis/Base/Interfac/Msi/Hsi/PCDA_Report/PCDA_Report/x64/Debug/Pdca.tlog/rc.read.1.tlog new file mode 100644 index 0000000..5b38b24 Binary files /dev/null and b/PcDmis/Base/Interfac/Msi/Hsi/PCDA_Report/PCDA_Report/x64/Debug/Pdca.tlog/rc.read.1.tlog differ diff --git a/PcDmis/Base/Interfac/Msi/Hsi/PCDA_Report/PCDA_Report/x64/Debug/Pdca.tlog/rc.write.1.tlog b/PcDmis/Base/Interfac/Msi/Hsi/PCDA_Report/PCDA_Report/x64/Debug/Pdca.tlog/rc.write.1.tlog new file mode 100644 index 0000000..d262597 Binary files /dev/null and b/PcDmis/Base/Interfac/Msi/Hsi/PCDA_Report/PCDA_Report/x64/Debug/Pdca.tlog/rc.write.1.tlog differ diff --git a/PcDmis/Base/Interfac/Msi/Hsi/PCDA_Report/PCDA_Report/x64/Debug/vc140.idb b/PcDmis/Base/Interfac/Msi/Hsi/PCDA_Report/PCDA_Report/x64/Debug/vc140.idb new file mode 100644 index 0000000..4a617c3 Binary files /dev/null and b/PcDmis/Base/Interfac/Msi/Hsi/PCDA_Report/PCDA_Report/x64/Debug/vc140.idb differ diff --git a/PcDmis/Base/Interfac/Msi/Hsi/PCDA_Report/PCDA_Report/x64/DebugRelease/PCDA_Report.res b/PcDmis/Base/Interfac/Msi/Hsi/PCDA_Report/PCDA_Report/x64/DebugRelease/PCDA_Report.res new file mode 100644 index 0000000..055e29a Binary files /dev/null and b/PcDmis/Base/Interfac/Msi/Hsi/PCDA_Report/PCDA_Report/x64/DebugRelease/PCDA_Report.res differ diff --git a/PcDmis/Base/Interfac/Msi/Hsi/PCDA_Report/PCDA_Report/x64/DebugRelease/Pdca.tlog/CL.command.1.tlog b/PcDmis/Base/Interfac/Msi/Hsi/PCDA_Report/PCDA_Report/x64/DebugRelease/Pdca.tlog/CL.command.1.tlog new file mode 100644 index 0000000..cc98eb0 Binary files /dev/null and b/PcDmis/Base/Interfac/Msi/Hsi/PCDA_Report/PCDA_Report/x64/DebugRelease/Pdca.tlog/CL.command.1.tlog differ diff --git a/PcDmis/Base/Interfac/Msi/Hsi/PCDA_Report/PCDA_Report/x64/DebugRelease/Pdca.tlog/CL.read.1.tlog b/PcDmis/Base/Interfac/Msi/Hsi/PCDA_Report/PCDA_Report/x64/DebugRelease/Pdca.tlog/CL.read.1.tlog new file mode 100644 index 0000000..55be2c8 Binary files /dev/null and b/PcDmis/Base/Interfac/Msi/Hsi/PCDA_Report/PCDA_Report/x64/DebugRelease/Pdca.tlog/CL.read.1.tlog differ diff --git a/PcDmis/Base/Interfac/Msi/Hsi/PCDA_Report/PCDA_Report/x64/DebugRelease/Pdca.tlog/CL.write.1.tlog b/PcDmis/Base/Interfac/Msi/Hsi/PCDA_Report/PCDA_Report/x64/DebugRelease/Pdca.tlog/CL.write.1.tlog new file mode 100644 index 0000000..3a69722 Binary files /dev/null and b/PcDmis/Base/Interfac/Msi/Hsi/PCDA_Report/PCDA_Report/x64/DebugRelease/Pdca.tlog/CL.write.1.tlog differ diff --git a/PcDmis/Base/Interfac/Msi/Hsi/PCDA_Report/PCDA_Report/x64/DebugRelease/Pdca.tlog/Pdca.lastbuildstate b/PcDmis/Base/Interfac/Msi/Hsi/PCDA_Report/PCDA_Report/x64/DebugRelease/Pdca.tlog/Pdca.lastbuildstate new file mode 100644 index 0000000..8f03fc0 --- /dev/null +++ b/PcDmis/Base/Interfac/Msi/Hsi/PCDA_Report/PCDA_Report/x64/DebugRelease/Pdca.tlog/Pdca.lastbuildstate @@ -0,0 +1,2 @@ +#TargetFrameworkVersion=v4.0:PlatformToolSet=v140:EnableManagedIncrementalBuild=false:VCToolArchitecture=Native32Bit:WindowsTargetPlatformVersion=8.1 +DebugRelease|x64|D:\Git_Metus\METUS_2020R1\HG_EF7_HSI_EF1\PcDmis\Base\Interfac\Msi\Hsi\PCDA_Report\| diff --git a/PcDmis/Base/Interfac/Msi/Hsi/PCDA_Report/PCDA_Report/x64/DebugRelease/Pdca.tlog/Pdca.write.1u.tlog b/PcDmis/Base/Interfac/Msi/Hsi/PCDA_Report/PCDA_Report/x64/DebugRelease/Pdca.tlog/Pdca.write.1u.tlog new file mode 100644 index 0000000..fec7cdb Binary files /dev/null and b/PcDmis/Base/Interfac/Msi/Hsi/PCDA_Report/PCDA_Report/x64/DebugRelease/Pdca.tlog/Pdca.write.1u.tlog differ diff --git a/PcDmis/Base/Interfac/Msi/Hsi/PCDA_Report/PCDA_Report/x64/DebugRelease/Pdca.tlog/link.command.1.tlog b/PcDmis/Base/Interfac/Msi/Hsi/PCDA_Report/PCDA_Report/x64/DebugRelease/Pdca.tlog/link.command.1.tlog new file mode 100644 index 0000000..6ffff16 Binary files /dev/null and b/PcDmis/Base/Interfac/Msi/Hsi/PCDA_Report/PCDA_Report/x64/DebugRelease/Pdca.tlog/link.command.1.tlog differ diff --git a/PcDmis/Base/Interfac/Msi/Hsi/PCDA_Report/PCDA_Report/x64/DebugRelease/Pdca.tlog/link.read.1.tlog b/PcDmis/Base/Interfac/Msi/Hsi/PCDA_Report/PCDA_Report/x64/DebugRelease/Pdca.tlog/link.read.1.tlog new file mode 100644 index 0000000..93df054 Binary files /dev/null and b/PcDmis/Base/Interfac/Msi/Hsi/PCDA_Report/PCDA_Report/x64/DebugRelease/Pdca.tlog/link.read.1.tlog differ diff --git a/PcDmis/Base/Interfac/Msi/Hsi/PCDA_Report/PCDA_Report/x64/DebugRelease/Pdca.tlog/link.write.1.tlog b/PcDmis/Base/Interfac/Msi/Hsi/PCDA_Report/PCDA_Report/x64/DebugRelease/Pdca.tlog/link.write.1.tlog new file mode 100644 index 0000000..1d2d267 Binary files /dev/null and b/PcDmis/Base/Interfac/Msi/Hsi/PCDA_Report/PCDA_Report/x64/DebugRelease/Pdca.tlog/link.write.1.tlog differ diff --git a/PcDmis/Base/Interfac/Msi/Hsi/PCDA_Report/PCDA_Report/x64/DebugRelease/Pdca.tlog/rc.command.1.tlog b/PcDmis/Base/Interfac/Msi/Hsi/PCDA_Report/PCDA_Report/x64/DebugRelease/Pdca.tlog/rc.command.1.tlog new file mode 100644 index 0000000..c131eb7 Binary files /dev/null and b/PcDmis/Base/Interfac/Msi/Hsi/PCDA_Report/PCDA_Report/x64/DebugRelease/Pdca.tlog/rc.command.1.tlog differ diff --git a/PcDmis/Base/Interfac/Msi/Hsi/PCDA_Report/PCDA_Report/x64/DebugRelease/Pdca.tlog/rc.read.1.tlog b/PcDmis/Base/Interfac/Msi/Hsi/PCDA_Report/PCDA_Report/x64/DebugRelease/Pdca.tlog/rc.read.1.tlog new file mode 100644 index 0000000..5b38b24 Binary files /dev/null and b/PcDmis/Base/Interfac/Msi/Hsi/PCDA_Report/PCDA_Report/x64/DebugRelease/Pdca.tlog/rc.read.1.tlog differ diff --git a/PcDmis/Base/Interfac/Msi/Hsi/PCDA_Report/PCDA_Report/x64/DebugRelease/Pdca.tlog/rc.write.1.tlog b/PcDmis/Base/Interfac/Msi/Hsi/PCDA_Report/PCDA_Report/x64/DebugRelease/Pdca.tlog/rc.write.1.tlog new file mode 100644 index 0000000..490ed6d Binary files /dev/null and b/PcDmis/Base/Interfac/Msi/Hsi/PCDA_Report/PCDA_Report/x64/DebugRelease/Pdca.tlog/rc.write.1.tlog differ diff --git a/PcDmis/Base/Interfac/Msi/Hsi/PCDA_Report/PCDA_Report/x64/Release/PCDA_Report.res b/PcDmis/Base/Interfac/Msi/Hsi/PCDA_Report/PCDA_Report/x64/Release/PCDA_Report.res new file mode 100644 index 0000000..055e29a Binary files /dev/null and b/PcDmis/Base/Interfac/Msi/Hsi/PCDA_Report/PCDA_Report/x64/Release/PCDA_Report.res differ diff --git a/PcDmis/Base/Interfac/Msi/Hsi/PCDA_Report/PCDA_Report/x64/Release/Pdca.tlog/CL.command.1.tlog b/PcDmis/Base/Interfac/Msi/Hsi/PCDA_Report/PCDA_Report/x64/Release/Pdca.tlog/CL.command.1.tlog new file mode 100644 index 0000000..9e02a14 Binary files /dev/null and b/PcDmis/Base/Interfac/Msi/Hsi/PCDA_Report/PCDA_Report/x64/Release/Pdca.tlog/CL.command.1.tlog differ diff --git a/PcDmis/Base/Interfac/Msi/Hsi/PCDA_Report/PCDA_Report/x64/Release/Pdca.tlog/CL.read.1.tlog b/PcDmis/Base/Interfac/Msi/Hsi/PCDA_Report/PCDA_Report/x64/Release/Pdca.tlog/CL.read.1.tlog new file mode 100644 index 0000000..2290448 Binary files /dev/null and b/PcDmis/Base/Interfac/Msi/Hsi/PCDA_Report/PCDA_Report/x64/Release/Pdca.tlog/CL.read.1.tlog differ diff --git a/PcDmis/Base/Interfac/Msi/Hsi/PCDA_Report/PCDA_Report/x64/Release/Pdca.tlog/CL.write.1.tlog b/PcDmis/Base/Interfac/Msi/Hsi/PCDA_Report/PCDA_Report/x64/Release/Pdca.tlog/CL.write.1.tlog new file mode 100644 index 0000000..e588303 Binary files /dev/null and b/PcDmis/Base/Interfac/Msi/Hsi/PCDA_Report/PCDA_Report/x64/Release/Pdca.tlog/CL.write.1.tlog differ diff --git a/PcDmis/Base/Interfac/Msi/Hsi/PCDA_Report/PCDA_Report/x64/Release/Pdca.tlog/Pdca.lastbuildstate b/PcDmis/Base/Interfac/Msi/Hsi/PCDA_Report/PCDA_Report/x64/Release/Pdca.tlog/Pdca.lastbuildstate new file mode 100644 index 0000000..875e6d6 --- /dev/null +++ b/PcDmis/Base/Interfac/Msi/Hsi/PCDA_Report/PCDA_Report/x64/Release/Pdca.tlog/Pdca.lastbuildstate @@ -0,0 +1,2 @@ +#TargetFrameworkVersion=v4.0:PlatformToolSet=v140:EnableManagedIncrementalBuild=false:VCToolArchitecture=Native32Bit:WindowsTargetPlatformVersion=8.1 +Release|x64|D:\Git_Metus\METUS_2020R1\HG_EF7_HSI_EF1\PcDmis\Base\Interfac\Msi\Hsi\PCDA_Report\| diff --git a/PcDmis/Base/Interfac/Msi/Hsi/PCDA_Report/PCDA_Report/x64/Release/Pdca.tlog/Pdca.write.1u.tlog b/PcDmis/Base/Interfac/Msi/Hsi/PCDA_Report/PCDA_Report/x64/Release/Pdca.tlog/Pdca.write.1u.tlog new file mode 100644 index 0000000..e43ae4b Binary files /dev/null and b/PcDmis/Base/Interfac/Msi/Hsi/PCDA_Report/PCDA_Report/x64/Release/Pdca.tlog/Pdca.write.1u.tlog differ diff --git a/PcDmis/Base/Interfac/Msi/Hsi/PCDA_Report/PCDA_Report/x64/Release/Pdca.tlog/link.command.1.tlog b/PcDmis/Base/Interfac/Msi/Hsi/PCDA_Report/PCDA_Report/x64/Release/Pdca.tlog/link.command.1.tlog new file mode 100644 index 0000000..a023440 Binary files /dev/null and b/PcDmis/Base/Interfac/Msi/Hsi/PCDA_Report/PCDA_Report/x64/Release/Pdca.tlog/link.command.1.tlog differ diff --git a/PcDmis/Base/Interfac/Msi/Hsi/PCDA_Report/PCDA_Report/x64/Release/Pdca.tlog/link.read.1.tlog b/PcDmis/Base/Interfac/Msi/Hsi/PCDA_Report/PCDA_Report/x64/Release/Pdca.tlog/link.read.1.tlog new file mode 100644 index 0000000..9994887 Binary files /dev/null and b/PcDmis/Base/Interfac/Msi/Hsi/PCDA_Report/PCDA_Report/x64/Release/Pdca.tlog/link.read.1.tlog differ diff --git a/PcDmis/Base/Interfac/Msi/Hsi/PCDA_Report/PCDA_Report/x64/Release/Pdca.tlog/link.write.1.tlog b/PcDmis/Base/Interfac/Msi/Hsi/PCDA_Report/PCDA_Report/x64/Release/Pdca.tlog/link.write.1.tlog new file mode 100644 index 0000000..bd29e94 Binary files /dev/null and b/PcDmis/Base/Interfac/Msi/Hsi/PCDA_Report/PCDA_Report/x64/Release/Pdca.tlog/link.write.1.tlog differ diff --git a/PcDmis/Base/Interfac/Msi/Hsi/PCDA_Report/PCDA_Report/x64/Release/Pdca.tlog/rc.command.1.tlog b/PcDmis/Base/Interfac/Msi/Hsi/PCDA_Report/PCDA_Report/x64/Release/Pdca.tlog/rc.command.1.tlog new file mode 100644 index 0000000..cfd154b Binary files /dev/null and b/PcDmis/Base/Interfac/Msi/Hsi/PCDA_Report/PCDA_Report/x64/Release/Pdca.tlog/rc.command.1.tlog differ diff --git a/PcDmis/Base/Interfac/Msi/Hsi/PCDA_Report/PCDA_Report/x64/Release/Pdca.tlog/rc.read.1.tlog b/PcDmis/Base/Interfac/Msi/Hsi/PCDA_Report/PCDA_Report/x64/Release/Pdca.tlog/rc.read.1.tlog new file mode 100644 index 0000000..5b38b24 Binary files /dev/null and b/PcDmis/Base/Interfac/Msi/Hsi/PCDA_Report/PCDA_Report/x64/Release/Pdca.tlog/rc.read.1.tlog differ diff --git a/PcDmis/Base/Interfac/Msi/Hsi/PCDA_Report/PCDA_Report/x64/Release/Pdca.tlog/rc.write.1.tlog b/PcDmis/Base/Interfac/Msi/Hsi/PCDA_Report/PCDA_Report/x64/Release/Pdca.tlog/rc.write.1.tlog new file mode 100644 index 0000000..be27ee0 Binary files /dev/null and b/PcDmis/Base/Interfac/Msi/Hsi/PCDA_Report/PCDA_Report/x64/Release/Pdca.tlog/rc.write.1.tlog differ diff --git a/PcDmis/Base/Interfac/Msi/Hsi/PCDA_Report/x64/Debug/Pdca.exp b/PcDmis/Base/Interfac/Msi/Hsi/PCDA_Report/x64/Debug/Pdca.exp new file mode 100644 index 0000000..f36ab09 Binary files /dev/null and b/PcDmis/Base/Interfac/Msi/Hsi/PCDA_Report/x64/Debug/Pdca.exp differ diff --git a/PcDmis/Base/Interfac/Msi/Hsi/PCDA_Report/x64/Debug/Pdca.lib b/PcDmis/Base/Interfac/Msi/Hsi/PCDA_Report/x64/Debug/Pdca.lib new file mode 100644 index 0000000..be505dd Binary files /dev/null and b/PcDmis/Base/Interfac/Msi/Hsi/PCDA_Report/x64/Debug/Pdca.lib differ diff --git a/PcDmis/Base/Interfac/Msi/Hsi/PCDA_Report/x64/DebugRelease/Pdca.exp b/PcDmis/Base/Interfac/Msi/Hsi/PCDA_Report/x64/DebugRelease/Pdca.exp new file mode 100644 index 0000000..4e76f73 Binary files /dev/null and b/PcDmis/Base/Interfac/Msi/Hsi/PCDA_Report/x64/DebugRelease/Pdca.exp differ diff --git a/PcDmis/Base/Interfac/Msi/Hsi/PCDA_Report/x64/DebugRelease/Pdca.iobj b/PcDmis/Base/Interfac/Msi/Hsi/PCDA_Report/x64/DebugRelease/Pdca.iobj new file mode 100644 index 0000000..d8a58a2 Binary files /dev/null and b/PcDmis/Base/Interfac/Msi/Hsi/PCDA_Report/x64/DebugRelease/Pdca.iobj differ diff --git a/PcDmis/Base/Interfac/Msi/Hsi/PCDA_Report/x64/DebugRelease/Pdca.ipdb b/PcDmis/Base/Interfac/Msi/Hsi/PCDA_Report/x64/DebugRelease/Pdca.ipdb new file mode 100644 index 0000000..d98561a Binary files /dev/null and b/PcDmis/Base/Interfac/Msi/Hsi/PCDA_Report/x64/DebugRelease/Pdca.ipdb differ diff --git a/PcDmis/Base/Interfac/Msi/Hsi/PCDA_Report/x64/DebugRelease/Pdca.lib b/PcDmis/Base/Interfac/Msi/Hsi/PCDA_Report/x64/DebugRelease/Pdca.lib new file mode 100644 index 0000000..c3a787b Binary files /dev/null and b/PcDmis/Base/Interfac/Msi/Hsi/PCDA_Report/x64/DebugRelease/Pdca.lib differ diff --git a/PcDmis/Base/Interfac/Msi/Hsi/PCDA_Report/x64/Release/Pdca.exp b/PcDmis/Base/Interfac/Msi/Hsi/PCDA_Report/x64/Release/Pdca.exp new file mode 100644 index 0000000..6fdf3f3 Binary files /dev/null and b/PcDmis/Base/Interfac/Msi/Hsi/PCDA_Report/x64/Release/Pdca.exp differ diff --git a/PcDmis/Base/Interfac/Msi/Hsi/PCDA_Report/x64/Release/Pdca.iobj b/PcDmis/Base/Interfac/Msi/Hsi/PCDA_Report/x64/Release/Pdca.iobj new file mode 100644 index 0000000..4899dd5 Binary files /dev/null and b/PcDmis/Base/Interfac/Msi/Hsi/PCDA_Report/x64/Release/Pdca.iobj differ diff --git a/PcDmis/Base/Interfac/Msi/Hsi/PCDA_Report/x64/Release/Pdca.ipdb b/PcDmis/Base/Interfac/Msi/Hsi/PCDA_Report/x64/Release/Pdca.ipdb new file mode 100644 index 0000000..78b54f7 Binary files /dev/null and b/PcDmis/Base/Interfac/Msi/Hsi/PCDA_Report/x64/Release/Pdca.ipdb differ diff --git a/PcDmis/Base/Interfac/Msi/Hsi/PCDA_Report/x64/Release/Pdca.lib b/PcDmis/Base/Interfac/Msi/Hsi/PCDA_Report/x64/Release/Pdca.lib new file mode 100644 index 0000000..bdc602a Binary files /dev/null and b/PcDmis/Base/Interfac/Msi/Hsi/PCDA_Report/x64/Release/Pdca.lib differ diff --git a/PcDmis/Base/Interfac/Msi/Hsi/SevenOcean/CMD_H.h b/PcDmis/Base/Interfac/Msi/Hsi/SevenOcean/CMD_H.h index a6c1c87..13fde3c 100644 --- a/PcDmis/Base/Interfac/Msi/Hsi/SevenOcean/CMD_H.h +++ b/PcDmis/Base/Interfac/Msi/Hsi/SevenOcean/CMD_H.h @@ -369,6 +369,12 @@ enum PRO_DATA CT_READ_Z_CONTROL_MODE, CT_WRITE_Z_CONTROL_MODE, + CT_READ_EXTRA_IO, + CT_WRITE_EXTRA_IO, + + CT_READ_MOTION_TYPE, + CT_WRITE_MOTION_TYPE, + CT_DATA_TOTAL=255 }; enum EHOME_MODE diff --git a/PcDmis/Base/Interfac/Msi/Hsi/SevenOcean/CMMIO_BASE.H b/PcDmis/Base/Interfac/Msi/Hsi/SevenOcean/CMMIO_BASE.H index 72c58fd..7bccbce 100644 --- a/PcDmis/Base/Interfac/Msi/Hsi/SevenOcean/CMMIO_BASE.H +++ b/PcDmis/Base/Interfac/Msi/Hsi/SevenOcean/CMMIO_BASE.H @@ -6,7 +6,7 @@ #define MAX_OUTPUT_BUFFER_SIZE 2048 -#define MAX_RECIEVE_BUFFER_SIZE 30000 +#define MAX_RECIEVE_BUFFER_SIZE 3000 // TCP, serial style routines struct SerialList { diff --git a/PcDmis/Base/Interfac/Msi/Hsi/SevenOcean/CMMIO_SERIAL.CPP b/PcDmis/Base/Interfac/Msi/Hsi/SevenOcean/CMMIO_SERIAL.CPP index 2bf8d20..3c4d937 100644 --- a/PcDmis/Base/Interfac/Msi/Hsi/SevenOcean/CMMIO_SERIAL.CPP +++ b/PcDmis/Base/Interfac/Msi/Hsi/SevenOcean/CMMIO_SERIAL.CPP @@ -7,7 +7,7 @@ ////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////// #define LONG_TIMEOUT 5000 - +#define MAXBLOCK 4096 /* ///////////////////////////////////////////////////////////////////////////// // Code - Text for debug window @@ -70,13 +70,14 @@ CPSerial::CPSerial() m_hWaitCMMResponse = CreateEvent( NULL, TRUE, FALSE, NULL ); m_hNewRx = CreateEvent( NULL, TRUE, FALSE, NULL ); // to trigger OnRx + m_ReadOLap.hEvent = CreateEvent(NULL, TRUE, FALSE, NULL); //m_RXTempPtr = NULL; m_DebugInPtr = 0; m_DebugCount = 0; m_Item = 0; m_MaxTXRetries = 5; - + m_iRecvCount=252; /* // CriticalSection for locking lists InitializeCriticalSection( &m_QueueLock ); @@ -157,14 +158,14 @@ DWORD CPSerial::Open() // Setup the timeouts CommTimeOut.ReadIntervalTimeout = 25; CommTimeOut.ReadTotalTimeoutMultiplier = 1; - CommTimeOut.ReadTotalTimeoutConstant = 0; - CommTimeOut.WriteTotalTimeoutMultiplier = 0; + CommTimeOut.ReadTotalTimeoutConstant = 1; + CommTimeOut.WriteTotalTimeoutMultiplier = 1; CommTimeOut.WriteTotalTimeoutConstant = m_TXTimeout; if( SetCommTimeouts( m_PortHandle, &CommTimeOut ) ) { // Setup the buffer sizes if( SetupComm( m_PortHandle, 2048, 2048 ) ) - { + { // Setup the event masks for the monitoring task if( SetCommMask( m_PortHandle, EV_RXCHAR | EV_TXEMPTY | EV_BREAK | EV_CTS | EV_DSR | EV_ERR | EV_RLSD ) ) @@ -263,6 +264,14 @@ void CPSerial::GetPortData(int *Port,int *Baud,char *Parity,int *Bits,int *StopB *HandShake = m_HandShake; } +DWORD CPSerial::SendWriteFile(const char *Buffer, DWORD Bytes) +{ + DWORD BytesWritten; + BOOL WriteState; + WriteState = WriteFile(m_PortHandle, &Buffer[0], Bytes, &BytesWritten, + &m_WriteOLap); + return WriteState; +} ///////////////////////////////////////////////////////////////////////////// // ClosePort() : Close the port and shut down the monitoring thread @@ -379,7 +388,7 @@ DWORD CPSerial::WritePort(const char *Buffer,DWORD Bytes) &m_WriteOLap ); if( !WriteState ) { - Sleep(50); + Sleep(5); // Ensure the write is going on in the background if( GetLastError() == ERROR_IO_PENDING ) { @@ -413,6 +422,43 @@ DWORD CPSerial::WritePort(const char *Buffer,DWORD Bytes) return( TotalWritten ); } + +//========================================================================== + +int CPSerial::ReadBlock(BYTE *abIn, int MaxLength) +{ + BOOL JudgeRead; + COMSTAT ComStat; + DWORD dwErrorFlags, dwLength; + ClearCommError(m_PortHandle, &dwErrorFlags, &ComStat); + if (dwErrorFlags>0) + { + PurgeComm(m_PortHandle, PURGE_RXABORT | PURGE_RXCLEAR); + return 0; + } + dwLength = ((DWORD)MaxLength0) && (lenBuffer, BytesWritten, 2 ); - OnTransmit( 0, BytesWritten ); - SendBuffer(TRUE); - } - } - */ - if(Events & EV_BREAK) - TRACE(_T("Break detected\n")); - if(Events & EV_CTS) - TRACE(_T("CTS Changed State\n")); - if(Events & EV_DSR) - TRACE(_T("DSR Changed State\n")); - if(Events & EV_ERR) - TRACE(_T("Line error\n")); - if(Events & EV_RLSD) - TRACE(_T("EV_RLSD error\n")); - } + // Events=0; + // + // // Wait for a comm event + // State=WaitCommEvent(m_PortHandle,&Events,&m_ReceiveOLap); + // if(!State) + // { + // // Since we are using overlapping IO we may have to wait + // // for the result + // if(GetLastError() == ERROR_IO_PENDING) + // GetOverlappedResult(m_PortHandle,&m_ReceiveOLap,&State,TRUE); + // } + ////m_iRecvState=FALSE; + // // If we have a result then OK otherwise the event was probable + // // the serial port being closed and we shall exit the loop + // if( State && IsOpen( ) ) + // { + // // Check the events and act accordingly + // if( Events & EV_RXCHAR ) + // { + // OnReceive( ); + // } + // //ZH + // /* + // if( Events & EV_TXEMPTY ) + // { + // if( m_TXHead ) + // { + // GetOverlappedResult(m_PortHandle,&m_TransmitOLap,&BytesWritten,TRUE); + // if( BytesWritten ) + // AddToDebug( m_TXHead->Buffer, BytesWritten, 2 ); + // OnTransmit( 0, BytesWritten ); + // SendBuffer(TRUE); + // } + // } + // */ + // if(Events & EV_BREAK) + // TRACE(_T("Break detected\n")); + // if(Events & EV_CTS) + // TRACE(_T("CTS Changed State\n")); + // if(Events & EV_DSR) + // TRACE(_T("DSR Changed State\n")); + // if(Events & EV_ERR) + // TRACE(_T("Line error\n")); + // if(Events & EV_RLSD) + // TRACE(_T("EV_RLSD error\n")); + // } // Go round while the port is open } @@ -512,10 +569,10 @@ void CPSerial::OnReceive() } else { - int num = ReadPort(s, 252); + int num = ReadPort(s, m_iRecvCount); if ((num>0) && (num #include "SO7_Proto.h" - +#include "..\Tools\UsbUtility\UsbUtil\EF1A_Manual_Machine.h" #define MY_CONFIG 1 #define MAX_DEVPATH_LENGTH 256 #define ENDPOINT_TIMEOUT 500 #define MAX_IN_BUFF_SIZE 1024 #define M_PI 3.14159265358979323846 -const INT HOME_TIMEOUT=300000; +const INT HOME_TIMEOUT=5000; const INT MOVETO_TIMEOUT=60000; -const INT MIN_SLEEP_TIME=20; +INT MIN_SLEEP_TIME=20; const DOUBLE ROTARY_MMtoScale_RESOLUTION=0.0005; //***** Static Data ***** static char *outBuff = NULL; @@ -28,6 +26,8 @@ HANDLE CSO7_Proto::g_hEP02_Serial_Mutex; //================================================================ struct_so7_machine CSO7_Proto::g_machine; +s_so7_machine_interface_config CSO7_Proto::g_so7_config; + usb_dev_handle *CSO7_Proto::g_dev=NULL; CLogger *CSO7_Proto::g_pLogger=NULL; HANDLE CSO7_Proto::g_hHomedEvent = NULL; @@ -72,8 +72,8 @@ unsigned __stdcall CSO7_Proto::g_EP02_Thread(LPVOID pThis) ExitThread(0); } }; - g_hEP02_Thread_State = THREAD_EXIT; - ExitThread(0); + //g_hEP02_Thread_State = THREAD_EXIT; + //ExitThread(0); }; //****************************************************************************** @@ -263,7 +263,19 @@ void CSO7_Proto::_process_rcv_transfer_data(int iEP) case CT_READ_Y_CONTROL_MODE: case CT_READ_Z_CONTROL_MODE: _process_SO7_CMD_GET_CONTROL_MODE(); - break; + break; + case CT_WRITE_EXTRA_IO: + _process_SO7_CMD_SET_EXTRA_IO_STATUS(); + break; + case CT_READ_EXTRA_IO: + _process_SO7_CMD_GET_EXTRA_IO_STATUS(); + break; + case CT_READ_MOTION_TYPE: + _process_SO7_CMD_GET_MOTION_TYPE(); + break; + case CT_WRITE_MOTION_TYPE: + _process_SO7_CMD_SET_MOTION_TYPE(); + break; default: TRACE1("_process_rcv_transfer_data() : Unknown ep_buff[EP_02_CMD_IDX]._save_send_cmd : %X \r\n", ep_buff[EP_02_CMD_IDX]._save_send_cmd); TRACE1("_process_rcv_transfer_data() : Unknown ep_buff[EP_81_DATA_IDX]._buffer[0] : %X \r\n", ep_buff[EP_81_DATA_IDX]._buffer[0]); @@ -484,7 +496,7 @@ CSO7_Proto::CSO7_Proto() } } g_machine.IsSupportReadInterrputMsg=FALSE; - g_machine.IsOffline=TRUE; + g_machine.IsOffline=FALSE; g_machine.FPGAData=0; g_machine.FirmwareVer=FirmwareVer_3_X; g_machine.x._Move_Speed_Gear =2; @@ -518,7 +530,7 @@ CSO7_Proto::CSO7_Proto() g_machine.s_lights_value._spare_light1=1; g_machine.s_lights_value.segment[0]=0; g_machine.s_lights_value.segment[1]=0; - g_machine.dRotaryCirclDis=100; + g_machine.dRotaryCirDisTestZSig=100; g_machine.Light_Size=0; g_machine.Light_Switch=0; g_machine.SEQ_NUMBER=0; @@ -545,6 +557,19 @@ CSO7_Proto::CSO7_Proto() g_machine.s_machine_config.z_axis._MoveToSpeed[1]=0.0; g_machine.s_machine_config.z_axis._MotionSpeedScale=1.0; + g_machine.s_machine_config.x_axis._dMinSpeed = 0.0; + g_machine.s_machine_config.x_axis._dMaxSpeed = 10.0; + g_machine.s_machine_config.x_axis._dMinAccel = 0.0; + g_machine.s_machine_config.x_axis._dMaxAccel = 10.0; + g_machine.s_machine_config.y_axis._dMinSpeed = 0.0; + g_machine.s_machine_config.y_axis._dMaxSpeed = 10.0; + g_machine.s_machine_config.y_axis._dMinAccel = 0.0; + g_machine.s_machine_config.y_axis._dMaxAccel = 10.0; + g_machine.s_machine_config.z_axis._dMinSpeed = 0.0; + g_machine.s_machine_config.z_axis._dMaxSpeed = 10.0; + g_machine.s_machine_config.z_axis._dMinAccel = 0.0; + g_machine.s_machine_config.z_axis._dMaxAccel = 10.0; + g_machine.s_machine_config.zm_axis._ProductID=_T("So7123456"); g_machine.s_machine_config.zm_axis._ComPort=1; g_machine.s_machine_config.zm_axis._StartDegree=0.0; @@ -590,10 +615,13 @@ CSO7_Proto::CSO7_Proto() g_machine.InterruptFlag[0]=0; g_machine.InterruptFlag[1]=0; g_machine.InPortStatus=0; - so7_motion_reset_controller_parameter(); - so7_config_para_set_default(); + g_machine.s_status._bXYZZMIdle=true; + so7_motion_cfg_set_default_para(); + so7_config_cfg_set_default_para(); m_bHomingActive = false; - g_pLogger = new CLogger(_T("\\MachineInterface.Log")); + g_pLogger = new CLogger(_T("\\Log\\HSI_So7_EF1.Log")); + isEF1AController = FALSE; + g_EF1AUsbDevice = nullptr; }; //****************************************************************************** @@ -605,8 +633,13 @@ CSO7_Proto::~CSO7_Proto() }; if (g_pLogger) { - delete g_pLogger; - g_pLogger = NULL; + delete g_pLogger; + g_pLogger = NULL; + } + if (g_EF1AUsbDevice) + { + delete g_EF1AUsbDevice; + g_EF1AUsbDevice = nullptr; } } @@ -614,60 +647,108 @@ CSO7_Proto::~CSO7_Proto() //============================================================================== //****************************************************************************** -SSI_STATUS_MOTION CSO7_Proto::so7_config_para_set_default() +SSI_STATUS_MOTION CSO7_Proto::so7_config_cfg_set_default_para() { - g_machine.s_machine_config.motion._EnCloseLoop=FALSE; - g_machine.s_machine_config.motion._RetryTimes=0; - g_machine.s_machine_config.motion._ShiftPositionX=0.0; - g_machine.s_machine_config.motion._ShiftPositionY=0.0; - g_machine.s_machine_config.motion._ShiftPositionZ=0.0; - g_machine.s_machine_config.motion._ShiftPositionZ=0.0; - - g_machine.s_machine_config.motion.GetInterruptMsgMethod=E_GET_INTERRUPT_MSG_INQUIRY; - g_machine.s_machine_config.motion.m_WriteDataSleepTime=0; - g_machine.s_machine_config.motion.m_AccuraErrPulseX=1; - g_machine.s_machine_config.motion.m_AccuraErrPulseY=1; - g_machine.s_machine_config.motion.m_AccuraErrPulseZ=1; - g_machine.s_machine_config.motion.m_EQUIDIS_X=0; - g_machine.s_machine_config.motion.m_EQUIDIS_Y=0; - g_machine.s_machine_config.motion.m_EQUIDIS_Z=0; - g_machine.s_machine_config.motion.m_CNC_Deadlock_Solution=1; - g_machine.s_machine_config.motion.m_CNC_Deadlock_JudgeMaxCnts=6; - g_machine.s_machine_config.motion.m_TouchProbeEnable=0; - g_machine.s_machine_config.motion.m_FootSwitchEnable=0; - g_machine.s_machine_config.motion.m_JoyStickEnable=0; - g_machine.s_machine_config.motion.m_STIL_CCS_PRIMA_Enable=0; - g_machine.s_machine_config.motion.m_DebugOutputEnable=0; + g_so7_config.m_DestinationX=0.0; + g_so7_config.m_DestinationY=0.0; + g_so7_config.m_DestinationZ=0.0; + g_so7_config.m_PrecisionX=0.1; + g_so7_config.m_PrecisionY=0.1; + g_so7_config.m_PrecisionZ=0.1; + g_so7_config.m_ShiftPositionX=0.0; + g_so7_config.m_ShiftPositionY=0.0; + g_so7_config.m_ShiftPositionZ=0.0; + g_so7_config.m_RetryTimes=1; + g_so7_config.m_MotionRetryCnt=0; + g_so7_config.m_EnCloseLoop=FALSE; + g_so7_config.m_MotionType=0; + g_so7_config.m_CntThreadSleepVal=550000; + g_so7_config.m_MachineType=MACHINE_SO7_CONTROLLER; + g_so7_config.m_VideoCardType=0; + g_so7_config.GetInterruptMsgMethod=E_GET_INTERRUPT_MSG_INQUIRY; + g_so7_config.m_WriteDataSleepTime=0; + g_so7_config.m_AccuraErrPulseX=1; + g_so7_config.m_AccuraErrPulseY=1; + g_so7_config.m_AccuraErrPulseZ=1; + g_so7_config.m_EQUIDIS_X=0; + g_so7_config.m_EQUIDIS_Y=0; + g_so7_config.m_EQUIDIS_Z=0; + g_so7_config.m_FirmWareVersion=FirmwareVer_3_X; + g_so7_config.m_CNC_Deadlock_Solution=0; + g_so7_config.m_CNC_Deadlock_JudgeMaxCnts=6; + g_so7_config.m_TouchProbeEnable=0; + g_so7_config.m_bJoyStickEnable=0; + g_so7_config.m_bMoveToEnable = 0; + g_so7_config.m_bMoveToCount = 3; + g_so7_config.m_bDebugOutputEnable = 0; + g_so7_config.m_FootSwitchEnable=0; + g_so7_config.m_STIL_CCS_PRIMA_Enable=0; + g_so7_config.m_ART_PCI8622_Enable=0; + g_so7_config.m_bTrigIOEnable=1; + g_so7_config.m_DeviceSleepTime=0; + g_so7_config.m_IsVideocardVacant=0; + for (int i=0;i<5;i++) + { + g_so7_config.m_iMotionStartCnts[i]=0; + g_so7_config.m_iMotionStopCnts[i]=0; + } + g_so7_config.m_iTrigHoldTimeCnts=8; + g_so7_config.m_iHomeMode=CT_HOME_XYZ; + for (int i=0;i<4;i++) + { + g_so7_config.m_SV4000E_DenoisePara[i]=70; + } + g_so7_config.m_EnJudgeMotionStatus=FALSE; + g_so7_config.m_DisableControllerMotionStatus=FALSE; + g_so7_config.m_bOptexCD5Enable=0; + g_so7_config.m_iOptexCD5ComPort=1; + g_so7_config.m_iOptexCD5BaudRate=115200; + g_so7_config.m_iSo7IllumType=1; + g_so7_config.m_iSo7IllumComPort=1; + g_so7_config.m_iSo7IllumBaudRate=4800; + g_so7_config.m_iSo7IllumResponseTime = 50; + g_so7_config.m_iSo7DoubleSurface = 0; - g_machine.s_machine_config.motion.m_SDK3000_CntThreadSleepVal=550000; - g_machine.s_machine_config.motion.m_SV4000E_DenoisePara[0]=70; - g_machine.s_machine_config.motion.m_SV4000E_DenoisePara[1]=70; - g_machine.s_machine_config.motion.m_SV4000E_DenoisePara[2]=70; - g_machine.s_machine_config.motion.m_SV4000E_DenoisePara[3]=70; + for (int i=0;i<3;i++) + { + g_so7_config.m_AxisResolution[i]=0.0; + } + g_so7_config.m_ZoomType=3; + g_so7_config.Navitar_Precision=0; + g_so7_config.Navitar_Timeout=30; + g_so7_config.Navitar_Motor_GoHomeV=5; + g_so7_config.Navitar_ZoomPosSpeed=20; + g_so7_config.Navitar_ZoomPosSpeed_Accurate=5; + g_so7_config.Navitar_ZoomStartPos=24000.0; + g_so7_config.Navitar_ZoomEndPos=3000.0; + g_so7_config.Navitar_ZoomBackPos=500.0; + g_so7_config.Navitar_ZoomDeadband=20.0; + g_so7_config.Navitar_ZoomFinishPos=1; + g_so7_config.Navitar_ZoomFinishCnts=3; + g_so7_config.Navitar_SleepTime=0; - g_machine.s_machine_config.motion.m_MachineType=MACHINE_SO7_CONTROLLER; - g_machine.s_machine_config.motion.m_VideoCardType=0; + g_so7_config.Navitar_SerialComPort=0; + g_so7_config.Navitar_ZoomOrgPos=0.0; + g_so7_config.Navitar_ZoomScale=0.0; + g_so7_config.Navitar_MotorSpeedFast=5; + g_so7_config.Navitar_MotorSpeedSlow=3; + g_so7_config.Navitar_iReadingInterval=0; + g_so7_config.m_iSo7TempSensorEnable=0; + g_so7_config.m_iSo7TempComPort=1; + g_so7_config.m_iSo7TempBaudRate=38400; + g_so7_config.m_iFreeMemoryInterval=0; - g_machine.s_machine_config.x_axis._scale_resolution=0.5; - g_machine.s_machine_config.y_axis._scale_resolution=0.5; - g_machine.s_machine_config.z_axis._scale_resolution=0.5; - - g_machine.s_machine_config.x_axis._neg_working_limit=0; - g_machine.s_machine_config.x_axis._pos_working_limit=200; - g_machine.s_machine_config.y_axis._neg_working_limit=0; - g_machine.s_machine_config.y_axis._pos_working_limit=100; - g_machine.s_machine_config.z_axis._neg_working_limit=0; - g_machine.s_machine_config.z_axis._pos_working_limit=200; - - g_machine.s_machine_config.motion.m_RotaryCircleDis=7.2; - g_machine.s_machine_config.motion.m_RotaryCirclePulse=14400; - g_machine.s_machine_config.motion.m_RotaryAxisNO=MACHINE_AXIS_NONE; - - + g_so7_config.m_iLJVSleepTime=50; + g_so7_config.m_iLJGSleepTime=50; + g_so7_config.m_iTestDll_Enable=0; + g_so7_config.m_isOpenIO=0; + g_so7_config.m_PositionX = 0.0; + g_so7_config.m_PositionY = 0.0; + g_so7_config.m_PositionZ = 0.0; return SSI_STATUS_MOTION_NORMAL; } -SSI_STATUS_MOTION CSO7_Proto::so7_motion_reset_controller_parameter() +SSI_STATUS_MOTION CSO7_Proto::so7_motion_cfg_set_default_para() { for(int i=0;i<5;i++) { @@ -694,16 +775,30 @@ SSI_STATUS_MOTION CSO7_Proto::so7_motion_reset_controller_parameter() g_machine.s_machine_config.z_axis._motor_wheelbase=0; g_machine._motor_pulse_num=10000; - g_machine.s_machine_config.x_axis._motor_precision=0; - g_machine.s_machine_config.y_axis._motor_precision=0; - g_machine.s_machine_config.z_axis._motor_precision=0; + g_machine.s_machine_config.x_axis._motor_precision = 0.005; + g_machine.s_machine_config.y_axis._motor_precision = 0.005; + g_machine.s_machine_config.z_axis._motor_precision = 0.005; + g_machine.s_machine_config.x_axis._scale_resolution=0.5; + g_machine.s_machine_config.y_axis._scale_resolution=0.5; + g_machine.s_machine_config.z_axis._scale_resolution=0.5; + + g_machine.s_machine_config.x_axis._neg_working_limit=0; + g_machine.s_machine_config.x_axis._pos_working_limit=200; + g_machine.s_machine_config.y_axis._neg_working_limit=0; + g_machine.s_machine_config.y_axis._pos_working_limit=100; + g_machine.s_machine_config.z_axis._neg_working_limit=0; + g_machine.s_machine_config.z_axis._pos_working_limit=200; + + g_machine.s_machine_config.r_axis.m_RotaryCircleDis=7.2; + g_machine.s_machine_config.r_axis.m_RotaryCirclePulse=14400; + g_machine.s_machine_config.r_axis.m_RotaryAxisNO=MACHINE_AXIS_NONE; return SSI_STATUS_MOTION_NORMAL; } //========================================================================================= -SSI_STATUS_MOTION CSO7_Proto::Save_SevenOcean_Inifile(CString path_and_fileName) +SSI_STATUS_MOTION CSO7_Proto::Save_So7_Motion_Inifile(CString path_and_fileName) { FILE* m_pOutFile; char *outBuff = NULL; @@ -716,52 +811,10 @@ SSI_STATUS_MOTION CSO7_Proto::Save_SevenOcean_Inifile(CString path_and_fileName) } else { - outBuff="[HARDWARE]"; + outBuff="[SPEED PARAMETER]"; fprintf(m_pOutFile,"%s", outBuff); fprintf(m_pOutFile, "\n"); - outBuff="MOVETOSPEED_FAST_X="; - fprintf(m_pOutFile,"%s", outBuff); - fprintf(m_pOutFile,"%9.8f", g_machine.s_machine_config.x_axis._MoveToSpeed[0]); - fprintf(m_pOutFile, "\n"); - outBuff="MOVETOSPEED_SLOW_X="; - fprintf(m_pOutFile,"%s", outBuff); - fprintf(m_pOutFile,"%9.8f", g_machine.s_machine_config.x_axis._MoveToSpeed[1]); - fprintf(m_pOutFile, "\n"); - outBuff="MOVETOSPEED_SCALE_X="; - fprintf(m_pOutFile,"%s", outBuff); - fprintf(m_pOutFile,"%9.8f", g_machine.s_machine_config.x_axis._MotionSpeedScale); - fprintf(m_pOutFile, "\n"); - fprintf(m_pOutFile,"%s", ";\n"); - - outBuff="MOVETOSPEED_FAST_Y="; - fprintf(m_pOutFile,"%s", outBuff); - fprintf(m_pOutFile,"%9.8f", g_machine.s_machine_config.y_axis._MoveToSpeed[0]); - fprintf(m_pOutFile, "\n"); - outBuff="MOVETOSPEED_SLOW_Y="; - fprintf(m_pOutFile,"%s", outBuff); - fprintf(m_pOutFile,"%9.8f", g_machine.s_machine_config.y_axis._MoveToSpeed[1]); - fprintf(m_pOutFile, "\n"); - outBuff="MOVETOSPEED_SCALE_Y="; - fprintf(m_pOutFile,"%s", outBuff); - fprintf(m_pOutFile,"%9.8f", g_machine.s_machine_config.y_axis._MotionSpeedScale); - fprintf(m_pOutFile, "\n"); - fprintf(m_pOutFile,"%s", ";\n"); - - outBuff="MOVETOSPEED_FAST_Z="; - fprintf(m_pOutFile,"%s", outBuff); - fprintf(m_pOutFile,"%9.8f", g_machine.s_machine_config.z_axis._MoveToSpeed[0]); - fprintf(m_pOutFile, "\n"); - outBuff="MOVETOSPEED_SLOW_Z="; - fprintf(m_pOutFile,"%s", outBuff); - fprintf(m_pOutFile,"%9.8f", g_machine.s_machine_config.z_axis._MoveToSpeed[1]); - fprintf(m_pOutFile, "\n"); - outBuff="MOVETOSPEED_SCALE_Z="; - fprintf(m_pOutFile,"%s", outBuff); - fprintf(m_pOutFile,"%9.8f", g_machine.s_machine_config.z_axis._MotionSpeedScale); - fprintf(m_pOutFile, "\n"); - fprintf(m_pOutFile,"%s", ";\n"); - outBuff="SPEED_BASE_X1="; fprintf(m_pOutFile,"%s", outBuff); fprintf(m_pOutFile,"%d", (byte)g_machine.s_machine_config.x_axis._speed_base[0]); @@ -781,7 +834,7 @@ SSI_STATUS_MOTION CSO7_Proto::Save_SevenOcean_Inifile(CString path_and_fileName) fprintf(m_pOutFile, "\n"); outBuff="SPEED_SLOW_X1="; fprintf(m_pOutFile,"%s", outBuff); - fprintf(m_pOutFile,"%.3f",g_machine.s_machine_config.x_axis._speed_slow_dis[0]); + fprintf(m_pOutFile,"%.4f",g_machine.s_machine_config.x_axis._speed_slow_dis[0]); fprintf(m_pOutFile, "\n"); fprintf(m_pOutFile,"%s", ";\n"); @@ -803,7 +856,7 @@ SSI_STATUS_MOTION CSO7_Proto::Save_SevenOcean_Inifile(CString path_and_fileName) fprintf(m_pOutFile, "\n"); outBuff="SPEED_SLOW_X2="; fprintf(m_pOutFile,"%s", outBuff); - fprintf(m_pOutFile,"%.3f",g_machine.s_machine_config.x_axis._speed_slow_dis[1]); + fprintf(m_pOutFile,"%.4f",g_machine.s_machine_config.x_axis._speed_slow_dis[1]); fprintf(m_pOutFile, "\n"); fprintf(m_pOutFile,"%s", ";\n"); outBuff="SPEED_BASE_X3="; @@ -824,7 +877,7 @@ SSI_STATUS_MOTION CSO7_Proto::Save_SevenOcean_Inifile(CString path_and_fileName) fprintf(m_pOutFile, "\n"); outBuff="SPEED_SLOW_X3="; fprintf(m_pOutFile,"%s", outBuff); - fprintf(m_pOutFile,"%.3f",g_machine.s_machine_config.x_axis._speed_slow_dis[2]); + fprintf(m_pOutFile,"%.4f",g_machine.s_machine_config.x_axis._speed_slow_dis[2]); fprintf(m_pOutFile, "\n"); fprintf(m_pOutFile,"%s", ";\n"); @@ -847,7 +900,7 @@ SSI_STATUS_MOTION CSO7_Proto::Save_SevenOcean_Inifile(CString path_and_fileName) outBuff="SPEED_SLOW_X4="; fprintf(m_pOutFile,"%s", outBuff); - fprintf(m_pOutFile,"%.3f",g_machine.s_machine_config.x_axis._speed_slow_dis[3]); + fprintf(m_pOutFile,"%.4f",g_machine.s_machine_config.x_axis._speed_slow_dis[3]); fprintf(m_pOutFile, "\n"); fprintf(m_pOutFile,"%s", ";\n"); @@ -869,7 +922,7 @@ SSI_STATUS_MOTION CSO7_Proto::Save_SevenOcean_Inifile(CString path_and_fileName) fprintf(m_pOutFile, "\n"); outBuff="SPEED_SLOW_X5="; fprintf(m_pOutFile,"%s", outBuff); - fprintf(m_pOutFile,"%.3f",g_machine.s_machine_config.x_axis._speed_slow_dis[4]); + fprintf(m_pOutFile,"%.4f",g_machine.s_machine_config.x_axis._speed_slow_dis[4]); fprintf(m_pOutFile, "\n"); fprintf(m_pOutFile,"%s", ";\n"); @@ -891,7 +944,7 @@ SSI_STATUS_MOTION CSO7_Proto::Save_SevenOcean_Inifile(CString path_and_fileName) fprintf(m_pOutFile, "\n"); outBuff="SPEED_SLOW_Y1="; fprintf(m_pOutFile,"%s", outBuff); - fprintf(m_pOutFile,"%.3f",g_machine.s_machine_config.y_axis._speed_slow_dis[0]); + fprintf(m_pOutFile,"%.4f",g_machine.s_machine_config.y_axis._speed_slow_dis[0]); fprintf(m_pOutFile, "\n"); fprintf(m_pOutFile,"%s", ";\n"); @@ -913,7 +966,7 @@ SSI_STATUS_MOTION CSO7_Proto::Save_SevenOcean_Inifile(CString path_and_fileName) fprintf(m_pOutFile, "\n"); outBuff="SPEED_SLOW_Y2="; fprintf(m_pOutFile,"%s", outBuff); - fprintf(m_pOutFile,"%.3f",g_machine.s_machine_config.y_axis._speed_slow_dis[1]); + fprintf(m_pOutFile,"%.4f",g_machine.s_machine_config.y_axis._speed_slow_dis[1]); fprintf(m_pOutFile, "\n"); fprintf(m_pOutFile,"%s", ";\n"); @@ -935,7 +988,7 @@ SSI_STATUS_MOTION CSO7_Proto::Save_SevenOcean_Inifile(CString path_and_fileName) fprintf(m_pOutFile, "\n"); outBuff="SPEED_SLOW_Y3="; fprintf(m_pOutFile,"%s", outBuff); - fprintf(m_pOutFile,"%.3f",g_machine.s_machine_config.y_axis._speed_slow_dis[2]); + fprintf(m_pOutFile,"%.4f",g_machine.s_machine_config.y_axis._speed_slow_dis[2]); fprintf(m_pOutFile, "\n"); fprintf(m_pOutFile,"%s", ";\n"); @@ -957,7 +1010,7 @@ SSI_STATUS_MOTION CSO7_Proto::Save_SevenOcean_Inifile(CString path_and_fileName) fprintf(m_pOutFile, "\n"); outBuff="SPEED_SLOW_Y4="; fprintf(m_pOutFile,"%s", outBuff); - fprintf(m_pOutFile,"%.3f",g_machine.s_machine_config.y_axis._speed_slow_dis[3]); + fprintf(m_pOutFile,"%.4f",g_machine.s_machine_config.y_axis._speed_slow_dis[3]); fprintf(m_pOutFile, "\n"); fprintf(m_pOutFile,"%s", ";\n"); @@ -979,7 +1032,7 @@ SSI_STATUS_MOTION CSO7_Proto::Save_SevenOcean_Inifile(CString path_and_fileName) fprintf(m_pOutFile, "\n"); outBuff="SPEED_SLOW_Y5="; fprintf(m_pOutFile,"%s", outBuff); - fprintf(m_pOutFile,"%.3f",g_machine.s_machine_config.y_axis._speed_slow_dis[4]); + fprintf(m_pOutFile,"%.4f",g_machine.s_machine_config.y_axis._speed_slow_dis[4]); fprintf(m_pOutFile, "\n"); fprintf(m_pOutFile,"%s", ";\n"); @@ -1001,7 +1054,7 @@ SSI_STATUS_MOTION CSO7_Proto::Save_SevenOcean_Inifile(CString path_and_fileName) fprintf(m_pOutFile, "\n"); outBuff="SPEED_SLOW_Z1="; fprintf(m_pOutFile,"%s", outBuff); - fprintf(m_pOutFile,"%.3f",g_machine.s_machine_config.z_axis._speed_slow_dis[0]); + fprintf(m_pOutFile,"%.4f",g_machine.s_machine_config.z_axis._speed_slow_dis[0]); fprintf(m_pOutFile, "\n"); fprintf(m_pOutFile,"%s", ";\n"); @@ -1023,7 +1076,7 @@ SSI_STATUS_MOTION CSO7_Proto::Save_SevenOcean_Inifile(CString path_and_fileName) fprintf(m_pOutFile, "\n"); outBuff="SPEED_SLOW_Z2="; fprintf(m_pOutFile,"%s", outBuff); - fprintf(m_pOutFile,"%.3f",g_machine.s_machine_config.z_axis._speed_slow_dis[1]); + fprintf(m_pOutFile,"%.4f",g_machine.s_machine_config.z_axis._speed_slow_dis[1]); fprintf(m_pOutFile, "\n"); fprintf(m_pOutFile,"%s", ";\n"); @@ -1045,7 +1098,7 @@ SSI_STATUS_MOTION CSO7_Proto::Save_SevenOcean_Inifile(CString path_and_fileName) fprintf(m_pOutFile, "\n"); outBuff="SPEED_SLOW_Z3="; fprintf(m_pOutFile,"%s", outBuff); - fprintf(m_pOutFile,"%.3f",g_machine.s_machine_config.z_axis._speed_slow_dis[2]); + fprintf(m_pOutFile,"%.4f",g_machine.s_machine_config.z_axis._speed_slow_dis[2]); fprintf(m_pOutFile, "\n"); fprintf(m_pOutFile,"%s", ";\n"); @@ -1067,7 +1120,7 @@ SSI_STATUS_MOTION CSO7_Proto::Save_SevenOcean_Inifile(CString path_and_fileName) fprintf(m_pOutFile, "\n"); outBuff="SPEED_SLOW_Z4="; fprintf(m_pOutFile,"%s", outBuff); - fprintf(m_pOutFile,"%.3f",g_machine.s_machine_config.z_axis._speed_slow_dis[3]); + fprintf(m_pOutFile,"%.4f",g_machine.s_machine_config.z_axis._speed_slow_dis[3]); fprintf(m_pOutFile, "\n"); fprintf(m_pOutFile,"%s", ";\n"); @@ -1093,40 +1146,82 @@ SSI_STATUS_MOTION CSO7_Proto::Save_SevenOcean_Inifile(CString path_and_fileName) outBuff="SPEED_SLOW_Z5="; fprintf(m_pOutFile,"%s", outBuff); - fprintf(m_pOutFile,"%.3f",g_machine.s_machine_config.z_axis._speed_slow_dis[4]); + fprintf(m_pOutFile,"%.4f",g_machine.s_machine_config.z_axis._speed_slow_dis[4]); fprintf(m_pOutFile, "\n"); fprintf(m_pOutFile,"%s", ";\n"); + + outBuff = "MOVETOSPEED_FAST_X="; + fprintf(m_pOutFile, "%s", outBuff); + fprintf(m_pOutFile, "%9.8f", g_machine.s_machine_config.x_axis._MoveToSpeed[0]); + fprintf(m_pOutFile, "\n"); + outBuff = "MOVETOSPEED_SLOW_X="; + fprintf(m_pOutFile, "%s", outBuff); + fprintf(m_pOutFile, "%9.8f", g_machine.s_machine_config.x_axis._MoveToSpeed[1]); + fprintf(m_pOutFile, "\n"); + outBuff = "MOVETOSPEED_SCALE_X="; + fprintf(m_pOutFile, "%s", outBuff); + fprintf(m_pOutFile, "%9.8f", g_machine.s_machine_config.x_axis._MotionSpeedScale); + fprintf(m_pOutFile, "\n"); + fprintf(m_pOutFile, "%s", ";\n"); + + outBuff = "MOVETOSPEED_FAST_Y="; + fprintf(m_pOutFile, "%s", outBuff); + fprintf(m_pOutFile, "%9.8f", g_machine.s_machine_config.y_axis._MoveToSpeed[0]); + fprintf(m_pOutFile, "\n"); + outBuff = "MOVETOSPEED_SLOW_Y="; + fprintf(m_pOutFile, "%s", outBuff); + fprintf(m_pOutFile, "%9.8f", g_machine.s_machine_config.y_axis._MoveToSpeed[1]); + fprintf(m_pOutFile, "\n"); + outBuff = "MOVETOSPEED_SCALE_Y="; + fprintf(m_pOutFile, "%s", outBuff); + fprintf(m_pOutFile, "%9.8f", g_machine.s_machine_config.y_axis._MotionSpeedScale); + fprintf(m_pOutFile, "\n"); + fprintf(m_pOutFile, "%s", ";\n"); + + outBuff = "MOVETOSPEED_FAST_Z="; + fprintf(m_pOutFile, "%s", outBuff); + fprintf(m_pOutFile, "%9.8f", g_machine.s_machine_config.z_axis._MoveToSpeed[0]); + fprintf(m_pOutFile, "\n"); + outBuff = "MOVETOSPEED_SLOW_Z="; + fprintf(m_pOutFile, "%s", outBuff); + fprintf(m_pOutFile, "%9.8f", g_machine.s_machine_config.z_axis._MoveToSpeed[1]); + fprintf(m_pOutFile, "\n"); + outBuff = "MOVETOSPEED_SCALE_Z="; + fprintf(m_pOutFile, "%s", outBuff); + fprintf(m_pOutFile, "%9.8f", g_machine.s_machine_config.z_axis._MotionSpeedScale); + fprintf(m_pOutFile, "\n"); + fprintf(m_pOutFile, "%s", ";\n"); + outBuff="X_MOTOR_PRECISION="; fprintf(m_pOutFile,"%s", outBuff); - fprintf(m_pOutFile,"%.3f",g_machine.s_machine_config.x_axis._motor_precision); + fprintf(m_pOutFile,"%.4f",g_machine.s_machine_config.x_axis._motor_precision); fprintf(m_pOutFile, "\n"); - - + outBuff="Y_MOTOR_PRECISION="; fprintf(m_pOutFile,"%s", outBuff); - fprintf(m_pOutFile,"%.3f",g_machine.s_machine_config.y_axis._motor_precision); + fprintf(m_pOutFile,"%.4f",g_machine.s_machine_config.y_axis._motor_precision); fprintf(m_pOutFile, "\n"); outBuff="Z_MOTOR_PRECISION="; fprintf(m_pOutFile,"%s", outBuff); - fprintf(m_pOutFile,"%.3f",g_machine.s_machine_config.z_axis._motor_precision); + fprintf(m_pOutFile,"%.4f",g_machine.s_machine_config.z_axis._motor_precision); fprintf(m_pOutFile, "\n"); fprintf(m_pOutFile,"%s", ";\n"); outBuff="X_MOTOR_WHEELBASE="; fprintf(m_pOutFile,"%s", outBuff); - fprintf(m_pOutFile,"%.3f",g_machine.s_machine_config.x_axis._motor_wheelbase); + fprintf(m_pOutFile,"%.4f",g_machine.s_machine_config.x_axis._motor_wheelbase); fprintf(m_pOutFile, "\n"); outBuff="Y_MOTOR_WHEELBASE="; fprintf(m_pOutFile,"%s", outBuff); - fprintf(m_pOutFile,"%.3f",g_machine.s_machine_config.y_axis._motor_wheelbase); + fprintf(m_pOutFile,"%.4f",g_machine.s_machine_config.y_axis._motor_wheelbase); fprintf(m_pOutFile, "\n"); outBuff="Z_MOTOR_WHEELBASE="; fprintf(m_pOutFile,"%s", outBuff); - fprintf(m_pOutFile,"%.3f",g_machine.s_machine_config.z_axis._motor_wheelbase); + fprintf(m_pOutFile,"%.4f",g_machine.s_machine_config.z_axis._motor_wheelbase); fprintf(m_pOutFile, "\n"); fprintf(m_pOutFile,"%s", ";\n"); @@ -1136,6 +1231,19 @@ SSI_STATUS_MOTION CSO7_Proto::Save_SevenOcean_Inifile(CString path_and_fileName) fprintf(m_pOutFile, "\n"); fprintf(m_pOutFile,"%s", ";\n"); + outBuff = "[ROTARY TABLE]"; + fprintf(m_pOutFile,"%s", outBuff); + fprintf(m_pOutFile, "\n"); + outBuff="ROTARY_AXIS_NUMBER="; + fprintf(m_pOutFile,"%s", outBuff); + fprintf(m_pOutFile,"%d", g_machine.s_machine_config.r_axis.m_RotaryAxisNO); + fprintf(m_pOutFile, "\n"); + outBuff="ROTARY_CIR_DIS="; + fprintf(m_pOutFile,"%s", outBuff); + fprintf(m_pOutFile,"%.6f", g_machine.s_machine_config.r_axis.m_RotaryCircleDis); + fprintf(m_pOutFile, "\n"); + + fprintf(m_pOutFile,"%s", ";\n"); //===========worktable===================== outBuff="[WORKTABLE]"; @@ -1144,56 +1252,52 @@ SSI_STATUS_MOTION CSO7_Proto::Save_SevenOcean_Inifile(CString path_and_fileName) outBuff="X_SCALE_RESOLUTION="; fprintf(m_pOutFile,"%s", outBuff); - fprintf(m_pOutFile,"%.3f", g_machine.s_machine_config.x_axis._scale_resolution); + fprintf(m_pOutFile,"%.9f", g_machine.s_machine_config.x_axis._scale_resolution*0.001); fprintf(m_pOutFile, "\n"); outBuff="Y_SCALE_RESOLUTION="; fprintf(m_pOutFile,"%s", outBuff); - fprintf(m_pOutFile,"%.3f", g_machine.s_machine_config.y_axis._scale_resolution); + fprintf(m_pOutFile, "%.9f", g_machine.s_machine_config.y_axis._scale_resolution*0.001); fprintf(m_pOutFile, "\n"); outBuff="Z_SCALE_RESOLUTION="; fprintf(m_pOutFile,"%s", outBuff); - fprintf(m_pOutFile,"%.3f", g_machine.s_machine_config.z_axis._scale_resolution); + fprintf(m_pOutFile, "%.9f", g_machine.s_machine_config.z_axis._scale_resolution*0.001); fprintf(m_pOutFile, "\n"); fprintf(m_pOutFile,"%s", ";\n"); outBuff="X_NEG_WORKING_LIMIT="; fprintf(m_pOutFile,"%s", outBuff); - fprintf(m_pOutFile,"%.3f", g_machine.s_machine_config.x_axis._neg_working_limit); + fprintf(m_pOutFile,"%.4f", g_machine.s_machine_config.x_axis._neg_working_limit); fprintf(m_pOutFile, "\n"); outBuff="Y_NEG_WORKING_LIMIT="; fprintf(m_pOutFile,"%s", outBuff); - fprintf(m_pOutFile,"%.3f", g_machine.s_machine_config.y_axis._neg_working_limit); + fprintf(m_pOutFile,"%.4f", g_machine.s_machine_config.y_axis._neg_working_limit); fprintf(m_pOutFile, "\n"); outBuff="Z_NEG_WORKING_LIMIT="; fprintf(m_pOutFile,"%s", outBuff); - fprintf(m_pOutFile,"%.3f", g_machine.s_machine_config.z_axis._neg_working_limit); + fprintf(m_pOutFile,"%.4f", g_machine.s_machine_config.z_axis._neg_working_limit); fprintf(m_pOutFile, "\n"); fprintf(m_pOutFile,"%s", ";\n"); outBuff="X_POS_WORKING_LIMIT="; fprintf(m_pOutFile,"%s", outBuff); - fprintf(m_pOutFile,"%.3f", g_machine.s_machine_config.x_axis._pos_working_limit); + fprintf(m_pOutFile,"%.4f", g_machine.s_machine_config.x_axis._pos_working_limit); fprintf(m_pOutFile, "\n"); outBuff="Y_POS_WORKING_LIMIT="; fprintf(m_pOutFile,"%s", outBuff); - fprintf(m_pOutFile,"%.3f", g_machine.s_machine_config.y_axis._pos_working_limit); + fprintf(m_pOutFile,"%.4f", g_machine.s_machine_config.y_axis._pos_working_limit); fprintf(m_pOutFile, "\n"); outBuff="Z_POS_WORKING_LIMIT="; fprintf(m_pOutFile,"%s", outBuff); - fprintf(m_pOutFile,"%.3f", g_machine.s_machine_config.z_axis._pos_working_limit); + fprintf(m_pOutFile,"%.4f", g_machine.s_machine_config.z_axis._pos_working_limit); fprintf(m_pOutFile, "\n"); + fprintf(m_pOutFile, "%s", ";\n"); - outBuff="ROTARY_CIR_DIS="; - fprintf(m_pOutFile,"%s", outBuff); - fprintf(m_pOutFile,"%.3f", g_machine.dRotaryCirclDis); - fprintf(m_pOutFile, "\n"); - fprintf(m_pOutFile,"%s", ";\n"); fclose(m_pOutFile); @@ -1202,14 +1306,14 @@ SSI_STATUS_MOTION CSO7_Proto::Save_SevenOcean_Inifile(CString path_and_fileName) } //****************************************************************************** //log file shows the machine speed data -SSI_STATUS_MOTION CSO7_Proto::Load_SevenOcean_Inifile(CString cso7IniFile) +SSI_STATUS_MOTION CSO7_Proto::Load_So7_Motion_Inifile(CString cso7IniFile) { FILE *hConfigFile = NULL; char szLine[MAX_BUFF_SIZE]; char *token = NULL; char seps[] = " =,\t\n"; - char cTemp[20]={0}; - CString csSO7ConfigFile =cso7IniFile;//csAppPath+_T("\\so7_config.ini"); + char cTemp[100]={0}; + CString csSO7ConfigFile =cso7IniFile; _wfopen_s(&hConfigFile,csSO7ConfigFile,_T("rt")); if(hConfigFile) { @@ -2058,7 +2162,35 @@ SSI_STATUS_MOTION CSO7_Proto::Load_SevenOcean_Inifile(CString cso7IniFile) g_machine._motor_pulse_num=atoi(cTemp); } } - /* + else if (!_stricmp(token,"ROTARY_AXIS_NUMBER")) + { + token = strtok( NULL, seps); + if (token) + { + strcpy(cTemp,token); + g_machine.s_machine_config.r_axis.m_RotaryAxisNO=atoi(cTemp); + } + } + else if (!_stricmp(token,"ROTARY_CIR_DIS")) + { + token = strtok( NULL, seps); + if (token) + { + strcpy(cTemp,token); + g_machine.dRotaryCirDisTestZSig=atof(cTemp); + g_machine.s_machine_config.r_axis.m_RotaryCircleDis=atof(cTemp); + g_machine.s_machine_config.r_axis.m_RotaryCirclePulse=g_machine.s_machine_config.r_axis.m_RotaryCircleDis/ROTARY_MMtoScale_RESOLUTION; + } + } + else if (!_stricmp(token,"ROTARY_CIR_DIS_TEST_Z_SIG")) + { + token = strtok( NULL, seps); + if (token) + { + strcpy(cTemp,token); + g_machine.dRotaryCirDisTestZSig=atof(cTemp); + } + } //=====================[WORKTABLE]======================== else if(!_stricmp(token, "X_SCALE_RESOLUTION")) { @@ -2066,7 +2198,8 @@ SSI_STATUS_MOTION CSO7_Proto::Load_SevenOcean_Inifile(CString cso7IniFile) if (token) { strcpy(cTemp,token); - g_machine.s_machine_config.x_axis._scale_resolution=atof(cTemp); + double dTmp=atof(cTemp); + g_machine.s_machine_config.x_axis._scale_resolution=1000.0*dTmp; } } else if(!_stricmp(token, "Y_SCALE_RESOLUTION")) @@ -2075,7 +2208,8 @@ SSI_STATUS_MOTION CSO7_Proto::Load_SevenOcean_Inifile(CString cso7IniFile) if (token) { strcpy(cTemp,token); - g_machine.s_machine_config.y_axis._scale_resolution=atof(cTemp); + double dTmp=atof(cTemp); + g_machine.s_machine_config.y_axis._scale_resolution=1000.0*dTmp; } } else if(!_stricmp(token, "Z_SCALE_RESOLUTION")) @@ -2084,7 +2218,8 @@ SSI_STATUS_MOTION CSO7_Proto::Load_SevenOcean_Inifile(CString cso7IniFile) if (token) { strcpy(cTemp,token); - g_machine.s_machine_config.z_axis._scale_resolution=atof(cTemp); + double dTmp=atof(cTemp); + g_machine.s_machine_config.z_axis._scale_resolution=1000.0*dTmp; } } else if(!_stricmp(token, "X_NEG_WORKING_LIMIT")) @@ -2141,16 +2276,6 @@ SSI_STATUS_MOTION CSO7_Proto::Load_SevenOcean_Inifile(CString cso7IniFile) g_machine.s_machine_config.z_axis._pos_working_limit=atof(cTemp); } } - else if (!_stricmp(token,"ROTARY_CIR_DIS")) - { - token = strtok( NULL, seps); - if (token) - { - strcpy(cTemp,token); - g_machine.dRotaryCirclDis=atof(cTemp); - } - } - */ } } fclose(hConfigFile); @@ -2158,15 +2283,45 @@ SSI_STATUS_MOTION CSO7_Proto::Load_SevenOcean_Inifile(CString cso7IniFile) return SSI_STATUS_MOTION_NORMAL; } +//========================================================================================= +SSI_STATUS_MOTION CSO7_Proto::Load_So7_Motion_Config(int _LoadType) +{ + CString csAppPath; + GetAppPath(csAppPath); + CString csSO7MotionConfigFile(_T("")); + if(_LoadType == 1) + { + csSO7MotionConfigFile = csAppPath + _T("\\Config\\so7_motion.ini"); + } + else + { + csSO7MotionConfigFile = csAppPath + _T("\\So7Motion_Utility.ini"); + } + + return Load_So7_Motion_Inifile(csSO7MotionConfigFile); +} +//========================================================================================= +SSI_STATUS_MOTION CSO7_Proto::Save_So7_Motion_Config(int _SaveType) +{ + CString csAppPath; + GetAppPath(csAppPath); + CString csSO7MotionConfigFile(_T("")); + if (_SaveType == 0) + { + csSO7MotionConfigFile = csAppPath + _T("\\So7Motion_Utility.ini"); + Save_So7_Motion_Inifile(csSO7MotionConfigFile); + } + return Load_So7_Motion_Inifile(csSO7MotionConfigFile); +} //========================================================================================= -SSI_STATUS_MOTION CSO7_Proto::Save_So7_Config() +SSI_STATUS_MOTION CSO7_Proto::Save_So7_Config_Inifile() { FILE* m_pOutFile= NULL; char *outBuff = NULL; CString csAppPath; GetAppPath(csAppPath); - CString cFileName=csAppPath+_T("\\UtilitySo7Config.ini"); + CString cFileName=csAppPath+_T("\\So7Config_Utility.ini"); _wfopen_s(&m_pOutFile, cFileName, _T("wt")); if (!m_pOutFile) { @@ -2226,83 +2381,91 @@ SSI_STATUS_MOTION CSO7_Proto::Save_So7_Config() fprintf(m_pOutFile, "\n"); outBuff="CLOSE_LOOP_ENABLED="; fprintf(m_pOutFile,"%s", outBuff); - fprintf(m_pOutFile,"%d", g_machine.s_machine_config.motion._EnCloseLoop); + fprintf(m_pOutFile,"%d", g_so7_config.m_EnCloseLoop); fprintf(m_pOutFile, "\n"); outBuff="MOTION_RETRY_TIMES="; fprintf(m_pOutFile,"%s", outBuff); - fprintf(m_pOutFile,"%d", g_machine.s_machine_config.motion._RetryTimes); + fprintf(m_pOutFile,"%d", g_so7_config.m_RetryTimes); fprintf(m_pOutFile, "\n"); outBuff="SHIFT_POSITION_X="; fprintf(m_pOutFile,"%s", outBuff); - fprintf(m_pOutFile,"%.6f", g_machine.s_machine_config.motion._ShiftPositionX); + fprintf(m_pOutFile,"%.6f", g_so7_config.m_ShiftPositionX); fprintf(m_pOutFile, "\n"); outBuff="SHIFT_POSITION_Y="; fprintf(m_pOutFile,"%s", outBuff); - fprintf(m_pOutFile,"%.6f", g_machine.s_machine_config.motion._ShiftPositionY); + fprintf(m_pOutFile,"%.6f", g_so7_config.m_ShiftPositionY); fprintf(m_pOutFile, "\n"); outBuff="SHIFT_POSITION_Z="; fprintf(m_pOutFile,"%s", outBuff); - fprintf(m_pOutFile,"%.6f", g_machine.s_machine_config.motion._ShiftPositionZ); + fprintf(m_pOutFile,"%.6f", g_so7_config.m_ShiftPositionZ); fprintf(m_pOutFile, "\n"); outBuff="GET_USB_MESSAGE_METHOD="; fprintf(m_pOutFile,"%s", outBuff); - fprintf(m_pOutFile,"%d", g_machine.s_machine_config.motion.GetInterruptMsgMethod); + fprintf(m_pOutFile,"%d", g_so7_config.GetInterruptMsgMethod); fprintf(m_pOutFile, "\n"); outBuff="WRITE_DATA_SLEEP_TIME="; fprintf(m_pOutFile,"%s", outBuff); - fprintf(m_pOutFile,"%d", g_machine.s_machine_config.motion.m_WriteDataSleepTime); + fprintf(m_pOutFile,"%d", g_so7_config.m_WriteDataSleepTime); fprintf(m_pOutFile, "\n"); outBuff="ACCURA_ERROR_PULSE_X="; fprintf(m_pOutFile,"%s", outBuff); - fprintf(m_pOutFile,"%d", g_machine.s_machine_config.motion.m_AccuraErrPulseX); + fprintf(m_pOutFile,"%d", g_so7_config.m_AccuraErrPulseX); fprintf(m_pOutFile, "\n"); outBuff="ACCURA_ERROR_PULSE_Y="; fprintf(m_pOutFile,"%s", outBuff); - fprintf(m_pOutFile,"%d", g_machine.s_machine_config.motion.m_AccuraErrPulseY); + fprintf(m_pOutFile,"%d", g_so7_config.m_AccuraErrPulseY); fprintf(m_pOutFile, "\n"); outBuff="ACCURA_ERROR_PULSE_Z="; fprintf(m_pOutFile,"%s", outBuff); - fprintf(m_pOutFile,"%d", g_machine.s_machine_config.motion.m_AccuraErrPulseZ); + fprintf(m_pOutFile,"%d", g_so7_config.m_AccuraErrPulseZ); fprintf(m_pOutFile, "\n"); outBuff="EQUIDISTANCE_PULSE_X="; fprintf(m_pOutFile,"%s", outBuff); - fprintf(m_pOutFile,"%d", g_machine.s_machine_config.motion.m_EQUIDIS_X); + fprintf(m_pOutFile,"%d", g_so7_config.m_EQUIDIS_X); fprintf(m_pOutFile, "\n"); outBuff="EQUIDISTANCE_PULSE_Y="; fprintf(m_pOutFile,"%s", outBuff); - fprintf(m_pOutFile,"%d", g_machine.s_machine_config.motion.m_EQUIDIS_Y); + fprintf(m_pOutFile,"%d", g_so7_config.m_EQUIDIS_Y); fprintf(m_pOutFile, "\n"); outBuff="EQUIDISTANCE_PULSE_Z="; fprintf(m_pOutFile,"%s", outBuff); - fprintf(m_pOutFile,"%d", g_machine.s_machine_config.motion.m_EQUIDIS_Z); + fprintf(m_pOutFile,"%d", g_so7_config.m_EQUIDIS_Z); fprintf(m_pOutFile, "\n"); outBuff="CNC_DEADLOCK_SOLUTION="; fprintf(m_pOutFile,"%s", outBuff); - fprintf(m_pOutFile,"%d", g_machine.s_machine_config.motion.m_CNC_Deadlock_Solution); + fprintf(m_pOutFile,"%d", g_so7_config.m_CNC_Deadlock_Solution); fprintf(m_pOutFile, "\n"); outBuff="CNC_DEADLOCK_MAX_CNTS="; fprintf(m_pOutFile,"%s", outBuff); - fprintf(m_pOutFile,"%d", g_machine.s_machine_config.motion.m_CNC_Deadlock_JudgeMaxCnts); + fprintf(m_pOutFile,"%d", g_so7_config.m_CNC_Deadlock_JudgeMaxCnts); fprintf(m_pOutFile, "\n"); outBuff="TOUCH_PROBE_ENABLE="; fprintf(m_pOutFile,"%s", outBuff); - fprintf(m_pOutFile,"%d", g_machine.s_machine_config.motion.m_TouchProbeEnable); + fprintf(m_pOutFile,"%d", g_so7_config.m_TouchProbeEnable); fprintf(m_pOutFile, "\n"); outBuff="FOOT_SWITCH_ENABLE="; fprintf(m_pOutFile,"%s", outBuff); - fprintf(m_pOutFile,"%d", g_machine.s_machine_config.motion.m_FootSwitchEnable); + fprintf(m_pOutFile,"%d", g_so7_config.m_FootSwitchEnable); fprintf(m_pOutFile, "\n"); outBuff="JOYSTICK_ENABLE="; fprintf(m_pOutFile,"%s", outBuff); - fprintf(m_pOutFile,"%d", g_machine.s_machine_config.motion.m_JoyStickEnable); + fprintf(m_pOutFile,"%d", g_so7_config.m_bJoyStickEnable); fprintf(m_pOutFile, "\n"); outBuff="CCS_PRIMA_ENABLE="; fprintf(m_pOutFile,"%s", outBuff); - fprintf(m_pOutFile,"%d", g_machine.s_machine_config.motion.m_STIL_CCS_PRIMA_Enable); + fprintf(m_pOutFile,"%d", g_so7_config.m_STIL_CCS_PRIMA_Enable); fprintf(m_pOutFile, "\n"); + outBuff = "MOVE_TO_CLOSELOOP_ENABLE="; + fprintf(m_pOutFile, "%s", outBuff); + fprintf(m_pOutFile, "%d", g_so7_config.m_bMoveToEnable); + fprintf(m_pOutFile, "\n"); + outBuff = "MOVE_TO_CLOSELOOP_COUNT="; + fprintf(m_pOutFile, "%s", outBuff); + fprintf(m_pOutFile, "%d", g_so7_config.m_bMoveToCount); + fprintf(m_pOutFile, "\n"); outBuff="DEBUG_LOG_ENABLE="; fprintf(m_pOutFile,"%s", outBuff); - fprintf(m_pOutFile,"%d", g_machine.s_machine_config.motion.m_DebugOutputEnable); + fprintf(m_pOutFile,"%d", g_so7_config.m_bDebugOutputEnable); fprintf(m_pOutFile, "\n"); fprintf(m_pOutFile, ";\n"); @@ -2311,23 +2474,23 @@ SSI_STATUS_MOTION CSO7_Proto::Save_So7_Config() fprintf(m_pOutFile, "\n"); outBuff="SDK3000_SLEEP_COUNT="; fprintf(m_pOutFile,"%s", outBuff); - fprintf(m_pOutFile,"%d", g_machine.s_machine_config.motion.m_SDK3000_CntThreadSleepVal); + fprintf(m_pOutFile,"%d", g_so7_config.m_CntThreadSleepVal); fprintf(m_pOutFile, "\n"); outBuff="SV4000E_DENOISE_PARA_CHANNEL1="; fprintf(m_pOutFile,"%s", outBuff); - fprintf(m_pOutFile,"%d", g_machine.s_machine_config.motion.m_SV4000E_DenoisePara[0]); + fprintf(m_pOutFile,"%d", g_so7_config.m_SV4000E_DenoisePara[0]); fprintf(m_pOutFile, "\n"); outBuff="SV4000E_DENOISE_PARA_CHANNEL2="; fprintf(m_pOutFile,"%s", outBuff); - fprintf(m_pOutFile,"%d", g_machine.s_machine_config.motion.m_SV4000E_DenoisePara[1]); + fprintf(m_pOutFile,"%d", g_so7_config.m_SV4000E_DenoisePara[1]); fprintf(m_pOutFile, "\n"); outBuff="SV4000E_DENOISE_PARA_CHANNEL3="; fprintf(m_pOutFile,"%s", outBuff); - fprintf(m_pOutFile,"%d", g_machine.s_machine_config.motion.m_SV4000E_DenoisePara[2]); + fprintf(m_pOutFile,"%d", g_so7_config.m_SV4000E_DenoisePara[2]); fprintf(m_pOutFile, "\n"); outBuff="SV4000E_DENOISE_PARA_CHANNEL4="; fprintf(m_pOutFile,"%s", outBuff); - fprintf(m_pOutFile,"%d", g_machine.s_machine_config.motion.m_SV4000E_DenoisePara[3]); + fprintf(m_pOutFile,"%d", g_so7_config.m_SV4000E_DenoisePara[3]); fprintf(m_pOutFile, "\n"); fprintf(m_pOutFile, ";\n"); @@ -2336,62 +2499,11 @@ SSI_STATUS_MOTION CSO7_Proto::Save_So7_Config() fprintf(m_pOutFile, "\n"); outBuff="MACHINE_CONTROLLER_TYPE="; fprintf(m_pOutFile,"%s", outBuff); - fprintf(m_pOutFile,"%d", g_machine.s_machine_config.motion.m_MachineType); + fprintf(m_pOutFile,"%d", g_so7_config.m_MachineType); fprintf(m_pOutFile, "\n"); outBuff="MACHINE_VIDEOCARD_TYPE="; fprintf(m_pOutFile,"%s", outBuff); - fprintf(m_pOutFile,"%d", g_machine.s_machine_config.motion.m_VideoCardType); - fprintf(m_pOutFile, "\n"); - fprintf(m_pOutFile, ";\n"); - - - outBuff="[CUSTOM_MACHINE]"; - fprintf(m_pOutFile,"%s", outBuff); - - fprintf(m_pOutFile, "\n"); - outBuff="X_SCALE_RESOLUTION="; - fprintf(m_pOutFile,"%s", outBuff); - fprintf(m_pOutFile,"%.6f", g_machine.s_machine_config.x_axis._scale_resolution); - fprintf(m_pOutFile, "\n"); - outBuff="Y_SCALE_RESOLUTION="; - fprintf(m_pOutFile,"%s", outBuff); - fprintf(m_pOutFile,"%.6f", g_machine.s_machine_config.y_axis._scale_resolution); - fprintf(m_pOutFile, "\n"); - outBuff="Z_SCALE_RESOLUTION="; - fprintf(m_pOutFile,"%s", outBuff); - fprintf(m_pOutFile,"%.6f", g_machine.s_machine_config.z_axis._scale_resolution); - fprintf(m_pOutFile, "\n"); - outBuff="X_NEG_WORKING_LIMIT="; - fprintf(m_pOutFile,"%s", outBuff); - fprintf(m_pOutFile,"%.6f", g_machine.s_machine_config.x_axis._neg_working_limit); - fprintf(m_pOutFile, "\n"); - outBuff="X_POS_WORKING_LIMIT="; - fprintf(m_pOutFile,"%s", outBuff); - fprintf(m_pOutFile,"%.6f", g_machine.s_machine_config.x_axis._pos_working_limit); - fprintf(m_pOutFile, "\n"); - outBuff="Y_NEG_WORKING_LIMIT="; - fprintf(m_pOutFile,"%s", outBuff); - fprintf(m_pOutFile,"%.6f", g_machine.s_machine_config.y_axis._neg_working_limit); - fprintf(m_pOutFile, "\n"); - outBuff="Y_POS_WORKING_LIMIT="; - fprintf(m_pOutFile,"%s", outBuff); - fprintf(m_pOutFile,"%.6f", g_machine.s_machine_config.y_axis._pos_working_limit); - fprintf(m_pOutFile, "\n"); - outBuff="Z_NEG_WORKING_LIMIT="; - fprintf(m_pOutFile,"%s", outBuff); - fprintf(m_pOutFile,"%.6f", g_machine.s_machine_config.z_axis._neg_working_limit); - fprintf(m_pOutFile, "\n"); - outBuff="Z_POS_WORKING_LIMIT="; - fprintf(m_pOutFile,"%s", outBuff); - fprintf(m_pOutFile,"%.6f", g_machine.s_machine_config.z_axis._pos_working_limit); - fprintf(m_pOutFile, "\n"); - outBuff="ROTARY_AXIS_NUMBER="; - fprintf(m_pOutFile,"%s", outBuff); - fprintf(m_pOutFile,"%d", g_machine.s_machine_config.motion.m_RotaryAxisNO); - fprintf(m_pOutFile, "\n"); - outBuff="ROTARY_CIR_DIS="; - fprintf(m_pOutFile,"%s", outBuff); - fprintf(m_pOutFile,"%.6f", g_machine.s_machine_config.motion.m_RotaryCircleDis); + fprintf(m_pOutFile,"%d", g_so7_config.m_VideoCardType); fprintf(m_pOutFile, "\n"); fprintf(m_pOutFile, ";\n"); @@ -2400,474 +2512,893 @@ SSI_STATUS_MOTION CSO7_Proto::Save_So7_Config() return SSI_STATUS_MOTION_NORMAL; } //****************************************************************************** -SSI_STATUS_MOTION CSO7_Proto::Load_So7_Config(int _FileName) +SSI_STATUS_MOTION CSO7_Proto::Load_So7_Config_Inifile(int _LoadType) { FILE *hConfigFile = NULL; char szLine[MAX_BUFF_SIZE]; char *token = NULL; char seps[] = " =,\t\n"; - char cTemp[30]={0}; + char cTemp[100]={0}; CString csAppPath; GetAppPath(csAppPath); CString csSO7ConfigFile(_T("")); - if (_FileName==1) + if (_LoadType==1) { csSO7ConfigFile=csAppPath+_T("\\so7_config.ini"); } + if (_LoadType==2) + { + static bool bFirst(true); + if (!bFirst) + { + return SSI_STATUS_MOTION_NORMAL; + } + bFirst = false; + csSO7ConfigFile = csAppPath + _T("\\Config\\so7_config.ini"); + } else { - csSO7ConfigFile=csAppPath+_T("\\UtilitySo7Config.ini"); + csSO7ConfigFile=csAppPath+_T("\\So7Config_Utility.ini"); } _wfopen_s(&hConfigFile,csSO7ConfigFile,_T("rt")); if(hConfigFile) { while (!feof(hConfigFile)) { - fgets(szLine,MAX_BUFF_SIZE,hConfigFile);//read a line - if((szLine[0]!=';')&&(strlen(szLine)>2)) + fgets(szLine, MAX_BUFF_SIZE, hConfigFile);//read a line + if ((szLine[0] != ';') && (strlen(szLine) > 2)) { - token = strtok(szLine,seps); - //==============7OceanAutozoom============================== + token = strtok(szLine, seps); + //===============AUTO ZOOM================== + if (!_stricmp(token, "ZOOM_COM_PORT")) + { + token = strtok(NULL, seps); + if (token) + { + strcpy_s(cTemp, 20, token); + g_so7_config.SerialComPort = atoi(cTemp); + } + } + else if (!_stricmp(token, "ZOOM_START_DEG")) + { + token = strtok(NULL, seps); + if (token) + { + strcpy_s(cTemp, 20, token); + g_so7_config.ZoomStartPos = atof(cTemp); + } + } + else if (!_stricmp(token, "ZOOM_END_DEG")) + { + token = strtok(NULL, seps); + if (token) + { + strcpy_s(cTemp, 20, token); + g_so7_config.ZoomEndPos = atof(cTemp); + } + } + else if (!_stricmp(token, "ZOOM_ORG_DEG")) + { + token = strtok(NULL, seps); + if (token) + { + strcpy_s(cTemp, 20, token); + g_so7_config.ZoomOrgPos = atof(cTemp); + } + } + else if (!_stricmp(token, "ZOOM_DEADBAND_DEG")) + { + token = strtok(NULL, seps); + if (token) + { + strcpy_s(cTemp, 20, token); + g_so7_config.ZoomDeadband = atof(cTemp); + } + } + else if (!_stricmp(token, "ZOOM_PULSE_PER_DEG")) + { + token = strtok(NULL, seps); + if (token) + { + strcpy_s(cTemp, 20, token); + g_so7_config.ZoomScale = atof(cTemp); + } + } + else if (!_stricmp(token, "ZOOM_READING_INTERVAL_TIME")) + { + token = strtok(NULL, seps); + if (token) + { + strcpy_s(cTemp, 20, token); + g_so7_config.iReadingInterval = atoi(cTemp); + } + } + else if (!_stricmp(token, "ZOOM_MOTOR_SPEED_FAST")) + { + token = strtok(NULL, seps); + if (token) + { + strcpy_s(cTemp, 20, token); + g_so7_config.MotorSpeedFast = static_cast(atoi(cTemp)); + } + } + else if (!_stricmp(token, "ZOOM_MOTOR_SPEED_SLOW")) + { + token = strtok(NULL, seps); + if (token) + { + strcpy_s(cTemp, 20, token); + g_so7_config.MotorSpeedSlow = static_cast(atoi(cTemp)); + } + } + //=================MOTION======================== + else if (!_stricmp(token, "CLOSE_LOOP_ENABLED")) + { + token = strtok(NULL, seps); + if (token) + { + strcpy_s(cTemp, 20, token); + g_so7_config.m_EnCloseLoop = atoi(cTemp); + } + } + else if (!_stricmp(token, "MOTION_RETRY_TIMES")) + { + token = strtok(NULL, seps); + if (token) + { + strcpy_s(cTemp, 20, token); + g_so7_config.m_RetryTimes = atoi(cTemp); + } + } + else if (!_stricmp(token, "SHIFT_POSITION_X")) + { + token = strtok(NULL, seps); + if (token) + { + strcpy_s(cTemp, 20, token); + g_so7_config.m_ShiftPositionX = atof(cTemp); + } + } + else if (!_stricmp(token, "SHIFT_POSITION_Y")) + { + token = strtok(NULL, seps); + if (token) + { + strcpy_s(cTemp, 20, token); + g_so7_config.m_ShiftPositionY = atof(cTemp); + } + } + else if (!_stricmp(token, "SHIFT_POSITION_Z")) + { + token = strtok(NULL, seps); + if (token) + { + strcpy_s(cTemp, 20, token); + g_so7_config.m_ShiftPositionZ = atof(cTemp); + } + } + else if (!_stricmp(token, "GET_USB_MESSAGE_METHOD")) + { + token = strtok(NULL, seps); + if (token) + { + strcpy_s(cTemp, 20, token); + g_so7_config.GetInterruptMsgMethod = static_cast(atoi(cTemp)); + } + } + else if (!_stricmp(token, "WRITE_DATA_SLEEP_TIME")) + { + token = strtok(NULL, seps); + if (token) + { + strcpy_s(cTemp, 20, token); + g_so7_config.m_WriteDataSleepTime = atoi(cTemp); + MIN_SLEEP_TIME = g_so7_config.m_WriteDataSleepTime; + } + } + else if (!_stricmp(token, "ACCURA_ERROR_PULSE_X")) + { + token = strtok(NULL, seps); + if (token) + { + strcpy_s(cTemp, 20, token); + g_so7_config.m_AccuraErrPulseX = atoi(cTemp); + } + } + else if (!_stricmp(token, "ACCURA_ERROR_PULSE_Y")) + { + token = strtok(NULL, seps); + if (token) + { + strcpy_s(cTemp, 20, token); + g_so7_config.m_AccuraErrPulseY = atoi(cTemp); + } + } + else if (!_stricmp(token, "ACCURA_ERROR_PULSE_Z")) + { + token = strtok(NULL, seps); + if (token) + { + strcpy_s(cTemp, 20, token); + g_so7_config.m_AccuraErrPulseZ = atoi(cTemp); + } + } + else if (!_stricmp(token, "EQUIDISTANCE_PULSE_X")) + { + token = strtok(NULL, seps); + if (token) + { + strcpy_s(cTemp, 20, token); + g_so7_config.m_EQUIDIS_X = atoi(cTemp); + } + } + else if (!_stricmp(token, "EQUIDISTANCE_PULSE_Y")) + { + token = strtok(NULL, seps); + if (token) + { + strcpy_s(cTemp, 20, token); + g_so7_config.m_EQUIDIS_Y = atoi(cTemp); + } + } + else if (!_stricmp(token, "EQUIDISTANCE_PULSE_Z")) + { + token = strtok(NULL, seps); + if (token) + { + strcpy_s(cTemp, 20, token); + g_so7_config.m_EQUIDIS_Z = atoi(cTemp); + } + } + else if (!_stricmp(token, "X_SCALE_RESOLUTION")) + { + token = strtok(NULL, seps); + if (token) + { + strcpy_s(cTemp, 20, token); + g_so7_config.m_AxisResolution[0] = atof(cTemp); + } + } + else if (!_stricmp(token, "Y_SCALE_RESOLUTION")) + { + token = strtok(NULL, seps); + if (token) + { + strcpy_s(cTemp, 20, token); + g_so7_config.m_AxisResolution[1] = atof(cTemp); + } + } + else if (!_stricmp(token, "Z_SCALE_RESOLUTION")) + { + token = strtok(NULL, seps); + if (token) + { + strcpy_s(cTemp, 20, token); + g_so7_config.m_AxisResolution[2] = atof(cTemp); + } + } + else if (!_stricmp(token, "CNC_DEADLOCK_SOLUTION")) + { + token = strtok(NULL, seps); + if (token) + { + strcpy_s(cTemp, 20, token); + g_so7_config.m_CNC_Deadlock_Solution = atoi(cTemp); + } + } + else if (!_stricmp(token, "CNC_DEADLOCK_MAX_CNTS")) + { + token = strtok(NULL, seps); + if (token) + { + strcpy_s(cTemp, 20, token); + g_so7_config.m_CNC_Deadlock_JudgeMaxCnts = atoi(cTemp); + } + } + else if (!_stricmp(token, "TOUCH_PROBE_ENABLE")) + { + token = strtok(NULL, seps); + if (token) + { + strcpy_s(cTemp, 20, token); + g_so7_config.m_TouchProbeEnable = atoi(cTemp); + } + } + else if (!_stricmp(token, "FOOT_SWITCH_ENABLE")) + { + token = strtok(NULL, seps); + if (token) + { + strcpy_s(cTemp, 20, token); + g_so7_config.m_FootSwitchEnable = atoi(cTemp); + } + } + else if (!_stricmp(token, "JOYSTICK_ENABLE")) + { + token = strtok(NULL, seps); + if (token) + { + strcpy_s(cTemp, 20, token); + g_so7_config.m_bJoyStickEnable = atoi(cTemp); + } + } + else if (!_stricmp(token, "IO_PURPOSE_EXT_TRIG")) + { + token = strtok(NULL, seps); + if (token) + { + strcpy_s(cTemp, 20, token); + g_so7_config.m_bTrigIOEnable = atoi(cTemp); + } + } + else if (!_stricmp(token, "EXT_TRIG_HOLD_TIME")) + { + token = strtok(NULL, seps); + if (token) + { + strcpy_s(cTemp, 20, token); + g_so7_config.m_iTrigHoldTimeCnts = atoi(cTemp); + } + } + else if (!_stricmp(token, "MOTION_START_COUNTS_GEAR1")) + { + token = strtok(NULL, seps); + if (token) + { + strcpy_s(cTemp, 20, token); + g_so7_config.m_iMotionStartCnts[0] = atoi(cTemp); + } + } + else if (!_stricmp(token, "MOTION_STOP_COUNTS_GEAR1")) + { + token = strtok(NULL, seps); + if (token) + { + strcpy_s(cTemp, 20, token); + g_so7_config.m_iMotionStopCnts[0] = atoi(cTemp); + } + } + else if (!_stricmp(token, "MOTION_START_COUNTS_GEAR2")) + { + token = strtok(NULL, seps); + if (token) + { + strcpy_s(cTemp, 20, token); + g_so7_config.m_iMotionStartCnts[1] = atoi(cTemp); + } + } + else if (!_stricmp(token, "MOTION_STOP_COUNTS_GEAR2")) + { + token = strtok(NULL, seps); + if (token) + { + strcpy_s(cTemp, 20, token); + g_so7_config.m_iMotionStopCnts[1] = atoi(cTemp); + } + } + else if (!_stricmp(token, "MOTION_START_COUNTS_GEAR3")) + { + token = strtok(NULL, seps); + if (token) + { + strcpy_s(cTemp, 20, token); + g_so7_config.m_iMotionStartCnts[2] = atoi(cTemp); + } + } + else if (!_stricmp(token, "MOTION_STOP_COUNTS_GEAR3")) + { + token = strtok(NULL, seps); + if (token) + { + strcpy_s(cTemp, 20, token); + g_so7_config.m_iMotionStopCnts[2] = atoi(cTemp); + } + } + else if (!_stricmp(token, "MOTION_START_COUNTS_GEAR4")) + { + token = strtok(NULL, seps); + if (token) + { + strcpy_s(cTemp, 20, token); + g_so7_config.m_iMotionStartCnts[3] = atoi(cTemp); + } + } + else if (!_stricmp(token, "MOTION_STOP_COUNTS_GEAR4")) + { + token = strtok(NULL, seps); + if (token) + { + strcpy_s(cTemp, 20, token); + g_so7_config.m_iMotionStopCnts[3] = atoi(cTemp); + } + } + else if (!_stricmp(token, "MOTION_START_COUNTS_GEAR5")) + { + token = strtok(NULL, seps); + if (token) + { + strcpy_s(cTemp, 20, token); + g_so7_config.m_iMotionStartCnts[4] = atoi(cTemp); + } + } + else if (!_stricmp(token, "MOTION_STOP_COUNTS_GEAR5")) + { + token = strtok(NULL, seps); + if (token) + { + strcpy_s(cTemp, 20, token); + g_so7_config.m_iMotionStopCnts[4] = atoi(cTemp); + } + } + else if (!_stricmp(token, "EXT_DEVICE_SLEEEP_TIME")) + { + token = strtok(NULL, seps); + if (token) + { + strcpy_s(cTemp, 20, token); + g_so7_config.m_DeviceSleepTime = atoi(cTemp); + } + } - if(!_stricmp(token,"ZOOM_PRODUCT_ID")) + else if (!_stricmp(token, "MACHINE_HOME_MODE")) { - token = strtok( NULL, seps); + token = strtok(NULL, seps); if (token) { - strcpy(cTemp,token); - g_machine.s_machine_config.zm_axis._ProductID=cTemp; + strcpy_s(cTemp, 20, token); + g_so7_config.m_iHomeMode = atoi(cTemp); } } - else if(!_stricmp(token,"ZOOM_COM_PORT")) + else if (!_stricmp(token, "CCS_PRIMA_ENABLE")) { - token = strtok( NULL, seps); + token = strtok(NULL, seps); if (token) { - strcpy(cTemp,token); - g_machine.s_machine_config.zm_axis._ComPort=atoi(cTemp); + strcpy_s(cTemp, 20, token); + g_so7_config.m_STIL_CCS_PRIMA_Enable = atoi(cTemp); } } - else if(!_stricmp(token,"ZOOM_START_DEG")) + else if (!_stricmp(token, "ART_PCI8622_ENABLE")) { - token = strtok( NULL, seps); + token = strtok(NULL, seps); if (token) { - strcpy(cTemp,token); - g_machine.s_machine_config.zm_axis._StartDegree=atof(cTemp); + strcpy_s(cTemp, 20, token); + g_so7_config.m_ART_PCI8622_Enable = atoi(cTemp); } } - else if (!_stricmp(token,"ZOOM_END_DEG")) + else if (!_stricmp(token, "MOVE_TO_CLOSELOOP_ENABLE")) { - token = strtok( NULL, seps); + token = strtok(NULL, seps); if (token) { - strcpy(cTemp,token); - g_machine.s_machine_config.zm_axis._EndDegree=atof(cTemp); + strcpy_s(cTemp, 20, token); + g_so7_config.m_bMoveToEnable = atoi(cTemp); } } - else if (!_stricmp(token,"ZOOM_ORG_DEG")) + else if (!_stricmp(token, "MOVE_TO_CLOSELOOP_COUNT")) { - token = strtok( NULL, seps); + token = strtok(NULL, seps); if (token) { - strcpy(cTemp,token); - g_machine.s_machine_config.zm_axis._RelativeZeroDegree=atof(cTemp); + strcpy_s(cTemp, 20, token); + g_so7_config.m_bMoveToCount = atoi(cTemp); } } - else if (!_stricmp(token,"ZOOM_DEADBAND_DEG")) + else if (!_stricmp(token, "DEBUG_LOG_ENABLE")) { - token = strtok( NULL, seps); + token = strtok(NULL, seps); if (token) { - strcpy(cTemp,token); - g_machine.s_machine_config.zm_axis._Deadband=atof(cTemp); + strcpy_s(cTemp, 20, token); + g_so7_config.m_bDebugOutputEnable = atoi(cTemp); + g_pLogger->IsEnabledLog = g_so7_config.m_bDebugOutputEnable >= 1 ? true : false; } } - else if (!_stricmp(token,"ZOOM_PULSE_PER_DEG")) + + //==============PROBE SYSTEM================== + else if (!_stricmp(token, "OPTEX_CD5_ENABLE")) { - token = strtok( NULL, seps); + token = strtok(NULL, seps); if (token) { - strcpy(cTemp,token); - g_machine.s_machine_config.zm_axis._PulseScale=atof(cTemp); + strcpy_s(cTemp, 20, token); + g_so7_config.m_bOptexCD5Enable = atoi(cTemp); } } - else if (!_stricmp(token,"ZOOM_READING_INTERVAL_TIME")) + else if (!_stricmp(token, "OPTEX_CD5_COMPORT")) { - token = strtok( NULL, seps); + token = strtok(NULL, seps); if (token) { - strcpy(cTemp,token); - g_machine.s_machine_config.zm_axis._ReadingInterval=atoi(cTemp); + strcpy_s(cTemp, 20, token); + g_so7_config.m_iOptexCD5ComPort = atoi(cTemp); } } - else if (!_stricmp(token,"ZOOM_MOTOR_SPEED_FAST")) + else if (!_stricmp(token, "OPTEX_CD5_BAUDRATE")) { - token = strtok( NULL, seps); + token = strtok(NULL, seps); if (token) { - strcpy(cTemp,token); - g_machine.s_machine_config.zm_axis._SpeedFast=static_cast(atoi(cTemp)); + strcpy_s(cTemp, 20, token); + g_so7_config.m_iOptexCD5BaudRate = atoi(cTemp); } } - else if (!_stricmp(token,"ZOOM_MOTOR_SPEED_SLOW")) + //=================ILLUMINATION================== + else if (!_stricmp(token, "SO7_ILLUM_TYPE")) { - token = strtok( NULL, seps); + token = strtok(NULL, seps); if (token) { - strcpy(cTemp,token); - g_machine.s_machine_config.zm_axis._SpeedSlow=static_cast(atoi(cTemp)); + strcpy_s(cTemp, 20, token); + g_so7_config.m_iSo7IllumType = atoi(cTemp); } } - //==============Motion===================== - else if(!_stricmp(token,"CLOSE_LOOP_ENABLED")) + else if (!_stricmp(token, "SO7_ILLUM_COMPORT")) { - token = strtok( NULL, seps); + token = strtok(NULL, seps); if (token) { - strcpy(cTemp,token); - g_machine.s_machine_config.motion._EnCloseLoop=atoi(cTemp); + strcpy_s(cTemp, 20, token); + g_so7_config.m_iSo7IllumComPort = atoi(cTemp); } } - else if (!_stricmp(token,"MOTION_RETRY_TIMES")) + else if (!_stricmp(token, "SO7_ILLUM_BAUDRATE")) { - token = strtok( NULL, seps); + token = strtok(NULL, seps); if (token) { - strcpy(cTemp,token); - g_machine.s_machine_config.motion._RetryTimes=atoi(cTemp); + strcpy_s(cTemp, 20, token); + g_so7_config.m_iSo7IllumBaudRate = atoi(cTemp); } } - else if (!_stricmp(token,"SHIFT_POSITION_X")) + else if (!_stricmp(token, "SO7_ILLUM_RESPONSE_TIME")) { - token = strtok( NULL, seps); + token = strtok(NULL, seps); if (token) { - strcpy(cTemp,token); - g_machine.s_machine_config.motion._ShiftPositionX=atof(cTemp); + strcpy_s(cTemp, 20, token); + g_so7_config.m_iSo7IllumResponseTime = atoi(cTemp); } } - else if (!_stricmp(token,"SHIFT_POSITION_Y")) + else if (!_stricmp(token, "SO7_ILLUM_DOUBLE_SURFACE")) { - token = strtok( NULL, seps); + token = strtok(NULL, seps); if (token) { - strcpy(cTemp,token); - g_machine.s_machine_config.motion._ShiftPositionY=atof(cTemp); - } - } - else if (!_stricmp(token,"SHIFT_POSITION_Z")) - { - token = strtok( NULL, seps); - if (token) - { - strcpy(cTemp,token); - g_machine.s_machine_config.motion._ShiftPositionZ=atof(cTemp); - } - } - else if (!_stricmp(token,"GET_USB_MESSAGE_METHOD")) - { - token = strtok( NULL, seps); - if (token) - { - strcpy(cTemp,token); - g_machine.s_machine_config.motion.GetInterruptMsgMethod=static_cast(atoi(cTemp)); - } - } - else if (!_stricmp(token,"WRITE_DATA_SLEEP_TIME")) - { - token = strtok( NULL, seps); - if (token) - { - strcpy(cTemp,token); - g_machine.s_machine_config.motion.m_WriteDataSleepTime=atoi(cTemp); - } - } - else if (!_stricmp(token,"ACCURA_ERROR_PULSE_X")) - { - token = strtok( NULL, seps); - if (token) - { - strcpy(cTemp,token); - g_machine.s_machine_config.motion.m_AccuraErrPulseX=atoi(cTemp); - } - } - else if (!_stricmp(token,"ACCURA_ERROR_PULSE_Y")) - { - token = strtok( NULL, seps); - if (token) - { - strcpy(cTemp,token); - g_machine.s_machine_config.motion.m_AccuraErrPulseY=atoi(cTemp); - } - } - else if (!_stricmp(token,"ACCURA_ERROR_PULSE_Z")) - { - token = strtok( NULL, seps); - if (token) - { - strcpy(cTemp,token); - g_machine.s_machine_config.motion.m_AccuraErrPulseZ=atoi(cTemp); - } - } - else if (!_stricmp(token,"EQUIDISTANCE_PULSE_X")) - { - token = strtok( NULL, seps); - if (token) - { - strcpy(cTemp,token); - g_machine.s_machine_config.motion.m_EQUIDIS_X=atoi(cTemp); - } - } - else if (!_stricmp(token,"EQUIDISTANCE_PULSE_Y")) - { - token = strtok( NULL, seps); - if (token) - { - strcpy(cTemp,token); - g_machine.s_machine_config.motion.m_EQUIDIS_Y=atoi(cTemp); - } - } - else if (!_stricmp(token,"EQUIDISTANCE_PULSE_Z")) - { - token = strtok( NULL, seps); - if (token) - { - strcpy(cTemp,token); - g_machine.s_machine_config.motion.m_EQUIDIS_Z=atoi(cTemp); - } - } - else if (!_stricmp(token,"CNC_DEADLOCK_SOLUTION")) - { - token = strtok( NULL, seps); - if (token) - { - strcpy(cTemp,token); - g_machine.s_machine_config.motion.m_CNC_Deadlock_Solution=atoi(cTemp); - } - } - else if (!_stricmp(token,"CNC_DEADLOCK_MAX_CNTS")) - { - token = strtok( NULL, seps); - if (token) - { - strcpy(cTemp,token); - g_machine.s_machine_config.motion.m_CNC_Deadlock_JudgeMaxCnts=atoi(cTemp); - } - } - else if (!_stricmp(token,"TOUCH_PROBE_ENABLE")) - { - token = strtok( NULL, seps); - if (token) - { - strcpy(cTemp,token); - g_machine.s_machine_config.motion.m_TouchProbeEnable=atoi(cTemp); - } - } - else if (!_stricmp(token,"FOOT_SWITCH_ENABLE")) - { - token = strtok( NULL, seps); - if (token) - { - strcpy(cTemp,token); - g_machine.s_machine_config.motion.m_FootSwitchEnable=atoi(cTemp); + strcpy_s(cTemp, 20, token); + g_so7_config.m_iSo7DoubleSurface = atoi(cTemp); } } - else if (!_stricmp(token,"JOYSTICK_ENABLE")) + //=================TEMPERATURE================== + else if (!_stricmp(token, "SO7_TEMP_SENSOR_ENABLE")) { - token = strtok( NULL, seps); + token = strtok(NULL, seps); if (token) { - strcpy(cTemp,token); - g_machine.s_machine_config.motion.m_JoyStickEnable=atoi(cTemp); + strcpy_s(cTemp, 20, token); + g_so7_config.m_iSo7TempSensorEnable = atoi(cTemp); } } - else if (!_stricmp(token,"CCS_PRIMA_ENABLE")) + else if (!_stricmp(token, "SO7_TEMP_SENSOR_COMPORT")) { - token = strtok( NULL, seps); + token = strtok(NULL, seps); if (token) { - strcpy(cTemp,token); - g_machine.s_machine_config.motion.m_STIL_CCS_PRIMA_Enable=atoi(cTemp); - } - } - else if (!_stricmp(token,"DEBUG_LOG_ENABLE")) - { - token = strtok( NULL, seps); - if (token) - { - strcpy(cTemp,token); - g_machine.s_machine_config.motion.m_DebugOutputEnable=atoi(cTemp); + strcpy_s(cTemp, 20, token); + g_so7_config.m_iSo7TempComPort = atoi(cTemp); } } - //=================VideoCard======================== - else if (!_stricmp(token,"SDK3000_SLEEP_COUNT")) + else if (!_stricmp(token, "SO7_TEMP_SENSOR_BAUDRATE")) { - token = strtok( NULL, seps); + token = strtok(NULL, seps); if (token) { - strcpy(cTemp,token); - g_machine.s_machine_config.motion.m_SDK3000_CntThreadSleepVal=atoi(cTemp); + strcpy_s(cTemp, 20, token); + g_so7_config.m_iSo7TempBaudRate = atoi(cTemp); } } - else if (!_stricmp(token,"SV4000E_DENOISE_PARA_CHANNEL1")) + //=================VIDEOCARD================== + else if (!_stricmp(token, "VIDEOCARD_ENABLE")) { - token = strtok( NULL, seps); + token = strtok(NULL, seps); if (token) { - strcpy(cTemp,token); - g_machine.s_machine_config.motion.m_SV4000E_DenoisePara[0]=atoi(cTemp); + strcpy_s(cTemp, 20, token); + g_so7_config.m_IsVideocardVacant = atoi(cTemp); + if (g_so7_config.m_IsVideocardVacant > 0) + { + g_so7_config.m_IsVideocardVacant = 0; + } + else + { + g_so7_config.m_IsVideocardVacant = 1; + } } } - else if (!_stricmp(token,"SV4000E_DENOISE_PARA_CHANNEL2")) + else if (!_stricmp(token, "SDK3000_SLEEP_COUNT")) { - token = strtok( NULL, seps); + token = strtok(NULL, seps); if (token) { - strcpy(cTemp,token); - g_machine.s_machine_config.motion.m_SV4000E_DenoisePara[1]=atoi(cTemp); + strcpy_s(cTemp, 20, token); + g_so7_config.m_CntThreadSleepVal = atoi(cTemp); } } - else if (!_stricmp(token,"SV4000E_DENOISE_PARA_CHANNEL3")) + else if (!_stricmp(token, "SV4000E_DENOISE_PARA_CHANNEL1")) { - token = strtok( NULL, seps); + token = strtok(NULL, seps); if (token) { - strcpy(cTemp,token); - g_machine.s_machine_config.motion.m_SV4000E_DenoisePara[2]=atoi(cTemp); + strcpy_s(cTemp, 20, token); + g_so7_config.m_SV4000E_DenoisePara[0] = atoi(cTemp); } } - else if (!_stricmp(token,"SV4000E_DENOISE_PARA_CHANNEL4")) + else if (!_stricmp(token, "SV4000E_DENOISE_PARA_CHANNEL2")) { - token = strtok( NULL, seps); + token = strtok(NULL, seps); if (token) { - strcpy(cTemp,token); - g_machine.s_machine_config.motion.m_SV4000E_DenoisePara[3]=atoi(cTemp); + strcpy_s(cTemp, 20, token); + g_so7_config.m_SV4000E_DenoisePara[1] = atoi(cTemp); + } + } + else if (!_stricmp(token, "SV4000E_DENOISE_PARA_CHANNEL3")) + { + token = strtok(NULL, seps); + if (token) + { + strcpy_s(cTemp, 20, token); + g_so7_config.m_SV4000E_DenoisePara[2] = atoi(cTemp); + } + } + else if (!_stricmp(token, "SV4000E_DENOISE_PARA_CHANNEL4")) + { + token = strtok(NULL, seps); + if (token) + { + strcpy_s(cTemp, 20, token); + g_so7_config.m_SV4000E_DenoisePara[3] = atoi(cTemp); } } //=================MSI======================== - else if(!_stricmp(token,"MACHINE_CONTROLLER_TYPE")) + else if (!_stricmp(token, "MACHINE_CONTROLLER_TYPE")) { - token = strtok( NULL, seps); + token = strtok(NULL, seps); if (token) { - strcpy(cTemp,token); - g_machine.s_machine_config.motion.m_MachineType=atoi(cTemp); + strcpy_s(cTemp, 20, token); + g_so7_config.m_MachineType = atoi(cTemp); } } - else if(!_stricmp(token,"MACHINE_VIDEOCARD_TYPE")) + else if (!_stricmp(token, "MACHINE_VIDEOCARD_TYPE")) { - token = strtok( NULL, seps); + token = strtok(NULL, seps); if (token) { - strcpy(cTemp,token); - g_machine.s_machine_config.motion.m_VideoCardType=atoi(cTemp); + strcpy_s(cTemp, 20, token); + g_so7_config.m_VideoCardType = atoi(cTemp); } } - - //=================Custom machine======================== - else if(!_stricmp(token, "X_SCALE_RESOLUTION")) + //================= Auto Zoom ======================== + else if (!_stricmp(token, "ZOOM_TYPE")) { - token = strtok( NULL, seps); + token = strtok(NULL, seps); if (token) { - strcpy(cTemp,token); - g_machine.s_machine_config.x_axis._scale_resolution=atof(cTemp); + strcpy_s(cTemp, 20, token); + g_so7_config.m_ZoomType = atoi(cTemp); } } - else if(!_stricmp(token, "Y_SCALE_RESOLUTION")) + else if (!_stricmp(token, "NAVITAR_ZOOM_PRECISION")) { - token = strtok( NULL, seps); + token = strtok(NULL, seps); if (token) { - strcpy(cTemp,token); - g_machine.s_machine_config.y_axis._scale_resolution=atof(cTemp); + strcpy_s(cTemp, 20, token); + g_so7_config.Navitar_Precision = atoi(cTemp); } } - else if(!_stricmp(token, "Z_SCALE_RESOLUTION")) + else if (!_stricmp(token, "NAVITAR_ZOOM_COM_PORT")) { - token = strtok( NULL, seps); + token = strtok(NULL, seps); if (token) { - strcpy(cTemp,token); - g_machine.s_machine_config.z_axis._scale_resolution=atof(cTemp); + strcpy_s(cTemp, 20, token); + g_so7_config.Navitar_SerialComPort = atoi(cTemp); } } - else if(!_stricmp(token, "X_NEG_WORKING_LIMIT")) + else if (!_stricmp(token, "NAVITAR_ZOOM_START_DEG")) { - token = strtok( NULL, seps); + token = strtok(NULL, seps); if (token) { - strcpy(cTemp,token); - g_machine.s_machine_config.x_axis._neg_working_limit=atof(cTemp); + strcpy_s(cTemp, 20, token); + g_so7_config.Navitar_ZoomStartPos = atof(cTemp); } } - else if(!_stricmp(token, "X_POS_WORKING_LIMIT")) + else if (!_stricmp(token, "NAVITAR_ZOOM_END_DEG")) { - token = strtok( NULL, seps); + token = strtok(NULL, seps); if (token) { - strcpy(cTemp,token); - g_machine.s_machine_config.x_axis._pos_working_limit=atof(cTemp); + strcpy_s(cTemp, 20, token); + g_so7_config.Navitar_ZoomEndPos = atof(cTemp); } } - else if(!_stricmp(token, "Y_NEG_WORKING_LIMIT")) + else if (!_stricmp(token, "NAVITAR_ZOOM_ORG_DEG")) { - token = strtok( NULL, seps); + token = strtok(NULL, seps); if (token) { - strcpy(cTemp,token); - g_machine.s_machine_config.y_axis._neg_working_limit=atof(cTemp); + strcpy_s(cTemp, 20, token); + g_so7_config.Navitar_ZoomOrgPos = atof(cTemp); } } - else if(!_stricmp(token, "Y_POS_WORKING_LIMIT")) + else if (!_stricmp(token, "NAVITAR_ZOOM_DEADBAND_DEG")) { - token = strtok( NULL, seps); + token = strtok(NULL, seps); if (token) { - strcpy(cTemp,token); - g_machine.s_machine_config.y_axis._pos_working_limit=atof(cTemp); + strcpy_s(cTemp, 20, token); + g_so7_config.Navitar_ZoomDeadband = atof(cTemp); } } - else if(!_stricmp(token, "Z_NEG_WORKING_LIMIT")) + else if (!_stricmp(token, "NAVITAR_ZOOM_SLEEP_TIME")) { - token = strtok( NULL, seps); + token = strtok(NULL, seps); if (token) { - strcpy(cTemp,token); - g_machine.s_machine_config.z_axis._neg_working_limit=atof(cTemp); + strcpy_s(cTemp, 20, token); + g_so7_config.Navitar_SleepTime = atoi(cTemp); } } - else if(!_stricmp(token, "Z_POS_WORKING_LIMIT")) + else if (!_stricmp(token, "NAVITAR_ZOOM_TIME_OUT")) { - token = strtok( NULL, seps); + token = strtok(NULL, seps); if (token) { - strcpy(cTemp,token); - g_machine.s_machine_config.z_axis._pos_working_limit=atof(cTemp); + strcpy_s(cTemp, 20, token); + g_so7_config.Navitar_Timeout = atoi(cTemp); } } - else if (!_stricmp(token,"ROTARY_AXIS_NUMBER")) + else if (!_stricmp(token, "NAVITAR_ZOOM_POS_SPEED_FAST")) { - token = strtok( NULL, seps); + token = strtok(NULL, seps); if (token) { - strcpy(cTemp,token); - g_machine.s_machine_config.motion.m_RotaryAxisNO=atoi(cTemp); + strcpy_s(cTemp, 20, token); + g_so7_config.Navitar_ZoomPosSpeed = atoi(cTemp); } } - else if (!_stricmp(token,"ROTARY_CIR_DIS")) + else if (!_stricmp(token, "NAVITAR_ZOOM_POS_SPEED_SLOW")) { - token = strtok( NULL, seps); + token = strtok(NULL, seps); if (token) { - strcpy(cTemp,token); - g_machine.s_machine_config.motion.m_RotaryCircleDis=atof(cTemp); - g_machine.s_machine_config.motion.m_RotaryCirclePulse=g_machine.s_machine_config.motion.m_RotaryCircleDis/ROTARY_MMtoScale_RESOLUTION; + strcpy_s(cTemp, 20, token); + g_so7_config.Navitar_ZoomPosSpeed_Accurate = atoi(cTemp); } } + else if (!_stricmp(token, "NAVITAR_ZOOM_FINISH_POS")) + { + token = strtok(NULL, seps); + if (token) + { + strcpy_s(cTemp, 20, token); + g_so7_config.Navitar_ZoomFinishPos = atoi(cTemp); + } + } + else if (!_stricmp(token, "NAVITAR_ZOOM_FINISH_CNTS")) + { + token = strtok(NULL, seps); + if (token) + { + strcpy_s(cTemp, 20, token); + g_so7_config.Navitar_ZoomFinishCnts = atoi(cTemp); + } + } + else if (!_stricmp(token, "NAVITAR_ZOOM_PULSE_PER_DEG")) + { + token = strtok(NULL, seps); + if (token) + { + strcpy_s(cTemp, 20, token); + g_so7_config.Navitar_ZoomScale = atof(cTemp); + } + } + else if (!_stricmp(token, "NAVITAR_ZOOM_READING_INTERVAL_TIME")) + { + token = strtok(NULL, seps); + if (token) + { + strcpy_s(cTemp, 20, token); + g_so7_config.Navitar_iReadingInterval = atoi(cTemp); + } + } + else if (!_stricmp(token, "NAVITAR_ZOOM_MOTOR_SPEED_FAST")) + { + token = strtok(NULL, seps); + if (token) + { + strcpy_s(cTemp, 20, token); + g_so7_config.Navitar_MotorSpeedFast = static_cast(atoi(cTemp)); + } + } + else if (!_stricmp(token, "NAVITAR_ZOOM_MOTOR_SPEED_SLOW")) + { + token = strtok(NULL, seps); + if (token) + { + strcpy_s(cTemp, 20, token); + g_so7_config.Navitar_MotorSpeedSlow = static_cast(atoi(cTemp)); + } + } + else if (!_stricmp(token, "NAVITAR_ZOOM_MOTOR_GOHOME_V")) + { + token = strtok(NULL, seps); + if (token) + { + strcpy_s(cTemp, 20, token); + g_so7_config.Navitar_Motor_GoHomeV = static_cast(atoi(cTemp)); + } + } + else if (!_stricmp(token, "NAVITAR_ZOOM_BACK_POS")) + { + token = strtok(NULL, seps); + if (token) + { + strcpy_s(cTemp, 20, token); + g_so7_config.Navitar_ZoomBackPos = static_cast(atoi(cTemp)); + } + } + else if (!_stricmp(token, "FREE_MEMORY_INTERVAL")) + { + token = strtok(NULL, seps); + if (token) + { + strcpy_s(cTemp, 20, token); + g_so7_config.m_iFreeMemoryInterval = atoi(cTemp); + } + } + else if (!_stricmp(token, "LJV_LASER_SLEEEP_TIME")) + { + token = strtok(NULL, seps); + if (token) + { + strcpy_s(cTemp, 20, token); + g_so7_config.m_iLJVSleepTime = atoi(cTemp); + } + } + else if (!_stricmp(token, "LJG_LASER_SLEEEP_TIME")) + { + token = strtok(NULL, seps); + if (token) + { + strcpy_s(cTemp, 20, token); + g_so7_config.m_iLJGSleepTime = atoi(cTemp); + } + } + else if (!_stricmp(token, "TEST_DLL_ENABLE")) + { + token = strtok(NULL, seps); + if (token) + { + strcpy_s(cTemp, 20, token); + g_so7_config.m_iTestDll_Enable = atoi(cTemp); + } + } + else if (!_stricmp(token, "IS_OPEN_IO")) + { + token = strtok(NULL, seps); + if (token) + { + strcpy_s(cTemp, 20, token); + g_so7_config.m_isOpenIO = atoi(cTemp); + } + } } + } fclose(hConfigFile); } @@ -3036,14 +3567,24 @@ int CSO7_Proto::Get_SeqNumber(usb_dev_handle *udev) ep_buff[EP_02_CMD_IDX]._size = 0x02; ep_buff[EP_82_DATA_IDX]._size = 0x01; - int _ret; - _ret = usb_bulk_write(udev, ep_buff[2]._ep, (char *)ep_buff[2]._buffer,(int) ep_buff[2]._size, 50); + int _ret=0; + if(isEF1AController) + { + g_EF1AUsbDevice->EF1AWriteData(0,(char *)ep_buff[2]._buffer,(int) ep_buff[2]._size); + } + else + _ret = usb_bulk_write(udev, ep_buff[2]._ep, (char *)ep_buff[2]._buffer,(int) ep_buff[2]._size, 50); if (_ret < 0) { return -1; } - _ret = usb_bulk_read(udev, ep_buff[3]._ep, (char *)ep_buff[3]._buffer,(int) ep_buff[3]._size, 5000); + if(isEF1AController) + { + _ret = g_EF1AUsbDevice->EF1AReadData(0,(char *)ep_buff[3]._buffer,(int) ep_buff[3]._size); + } + else + _ret = usb_bulk_read(udev, ep_buff[3]._ep, (char *)ep_buff[3]._buffer,(int) ep_buff[3]._size, 5000); if (_ret < 0) { return -1; @@ -3057,9 +3598,9 @@ int CSO7_Proto::Get_SeqNumber(usb_dev_handle *udev) // Send is direct and async. // The receive thread will receive data and interpret it. //****************************************************************************** -SSI_STATUS_MOTION CSO7_Proto::Init_SO7Usb() +SSI_STATUS_MOTION CSO7_Proto::Init_SO7Usb(HWND _hwnd) { - if (g_machine.s_machine_config.motion.m_DebugOutputEnable>=1) + if (g_so7_config.m_bDebugOutputEnable>=1) { g_pLogger->SendAndFlushWithTime(_T("Enter Initialize Usb.\n")); } @@ -3067,10 +3608,20 @@ SSI_STATUS_MOTION CSO7_Proto::Init_SO7Usb() g_machine.s_status._machine_running = false; SSI_STATUS_MOTION rStatus=SSI_STATUS_MOTION_NORMAL; - if (!g_dev) + + if (!g_dev && g_machine.IsOffline == FALSE) { - g_machine.IsOffline=FALSE; - + if(isEF1AController) + { + if (g_EF1AUsbDevice==nullptr) + { + g_EF1AUsbDevice = new CEF1AUsbDevice(); + } + if(!g_EF1AUsbDevice->EF1AOpenDevice()) + rStatus = SSI_STATUS_MOTION_DATALINK_ERROR; + } + else + { int usb_status = NULL; usb_init(); // initialize the library usb_status = usb_find_busses(); // find all busses @@ -3078,14 +3629,14 @@ SSI_STATUS_MOTION CSO7_Proto::Init_SO7Usb() g_dev = _open_usb_dev(); if (!g_dev) { - MessageBox(NULL, _T("Unable to open device"), _T("Message"), MB_OK|MB_ICONERROR); + MessageBox(_hwnd, _T("Unable to open device"), _T("Message"), MB_OK|MB_ICONERROR); g_machine.IsOffline=TRUE; rStatus= SSI_STATUS_MOTION_DATALINK_ERROR; } else if (usb_set_configuration(g_dev, MY_CONFIG) < 0) { g_dev=NULL; - MessageBox(NULL, _T("Unable to SET CONFIGURATION"), _T("Message"), MB_OK|MB_ICONERROR); + MessageBox(_hwnd, _T("Unable to SET CONFIGURATION"), _T("Message"), MB_OK|MB_ICONERROR); g_machine.IsOffline=TRUE; rStatus=SSI_STATUS_MOTION_DATALINK_ERROR; } @@ -3093,55 +3644,60 @@ SSI_STATUS_MOTION CSO7_Proto::Init_SO7Usb() { usb_close(g_dev); g_dev=NULL; - MessageBox(NULL, _T("Unable to CLAIM DEVICE"), _T("Message"), MB_OK|MB_ICONERROR); + MessageBox(_hwnd, _T("Unable to CLAIM DEVICE"), _T("Message"), MB_OK|MB_ICONERROR); g_machine.IsOffline=TRUE; rStatus=SSI_STATUS_MOTION_DATALINK_ERROR; } + } + { + // ******************************************************************** + // This event is used to kick the Serial Usb Command process. This threading model + // is important because the underlying library is not thread-safe. + // + ep_buff[EP_02_CMD_IDX]._event = CreateEvent(NULL, // default security attributes + FALSE, // manual reset event object + NULL, // signaled + NULL); // unamed object - // ******************************************************************** - // This event is used to kick the Serial Usb Command process. This threading model - // is important because the underlying library is not thread-safe. - // - ep_buff[EP_02_CMD_IDX]._event = CreateEvent(NULL, // default security attributes - FALSE, // manual reset event object - NULL, // signaled - NULL); // unamed object + g_hEP02_Thread_Id = CreateThread((LPSECURITY_ATTRIBUTES)NULL, + 0, + (LPTHREAD_START_ROUTINE)g_EP02_Thread, + (LPVOID) this, + 0, + NULL); + g_hEP02_Thread_State = THREAD_RUNNING_STATE1; - g_hEP02_Thread_Id = CreateThread( (LPSECURITY_ATTRIBUTES) NULL, - 0, - (LPTHREAD_START_ROUTINE) g_EP02_Thread, - (LPVOID) this, - 0, - NULL); - g_hEP02_Thread_State = THREAD_RUNNING_STATE1; - - // ******************************************************************** - // Prepare and start EP_S07_81 Thread - Use async commit. - // - ep_buff[EP_82_DATA_IDX]._event = CreateEvent(NULL, // default security attributes - FALSE, // manual reset event object - NULL, // signaled - NULL); // unamed object - g_hEP8x_Thread_State = THREAD_PAUSED; - g_hEP8x_Thread_Id = CreateThread( (LPSECURITY_ATTRIBUTES) NULL, - 0, - (LPTHREAD_START_ROUTINE) g_EP8x_Thread, - (LPVOID) this, - 0, - NULL); - g_hEP02_Serial_Mutex = CreateMutex(NULL, // default security attributes - FALSE, // initial owner - NULL); // name + // ******************************************************************** + // Prepare and start EP_S07_81 Thread - Use async commit. + // + ep_buff[EP_82_DATA_IDX]._event = CreateEvent(NULL, // default security attributes + FALSE, // manual reset event object + NULL, // signaled + NULL); // unamed object + g_hEP8x_Thread_State = THREAD_PAUSED; + g_hEP8x_Thread_Id = CreateThread((LPSECURITY_ATTRIBUTES)NULL, + 0, + (LPTHREAD_START_ROUTINE)g_EP8x_Thread, + (LPVOID) this, + 0, + NULL); + g_hEP02_Serial_Mutex = CreateMutex(NULL, // default security attributes + FALSE, // initial owner + NULL); // name - // ********************************************************************* - g_hHomedEvent = CreateEvent(NULL, // default security attributes - TRUE, // manual reset event object - FALSE, // initial state is signaled - NULL); // unamed object + // ********************************************************************* + g_hHomedEvent = CreateEvent(NULL, // default security attributes + TRUE, // manual reset event object + FALSE, // initial state is signaled + NULL); // unamed object + } + } + else if (!g_dev) + { + rStatus = SSI_STATUS_MOTION_DATALINK_ERROR; } - return rStatus; } @@ -3175,13 +3731,17 @@ SSI_STATUS_MOTION CSO7_Proto::Exit_SO7Usb() } } - if (g_dev) + if(isEF1AController) + g_EF1AUsbDevice->EF1ACloseDevice(); + else { - usb_release_interface(g_dev,0); - usb_close(g_dev); - g_dev = NULL; + if (g_dev) + { + usb_release_interface(g_dev,0); + usb_close(g_dev); + g_dev = NULL; + } } - SetEvent(ep_buff[EP_82_DATA_IDX]._event); CloseHandle(ep_buff[EP_82_DATA_IDX]._event); SetEvent(ep_buff[EP_02_CMD_IDX]._event); @@ -3189,7 +3749,7 @@ SSI_STATUS_MOTION CSO7_Proto::Exit_SO7Usb() g_hEP02_Thread_State = THREAD_EXIT; ReleaseMutex(g_hEP02_Serial_Mutex); CloseHandle(g_hEP02_Serial_Mutex); - if (g_machine.s_machine_config.motion.m_DebugOutputEnable>=1) + if (g_so7_config.m_bDebugOutputEnable>=1) { g_pLogger->SendAndFlushWithTime(_T("Exit Exit_SO7Usb.\n")); } @@ -3228,14 +3788,13 @@ SSI_STATUS_MOTION CSO7_Proto::_do_single_threaded_usb_comm(int iEP_Base) //****************************************************************************** SSI_STATUS_MOTION CSO7_Proto::_start_machine() { - if (g_machine.s_machine_config.motion.m_DebugOutputEnable>=1) + if (g_so7_config.m_bDebugOutputEnable>=1) { g_pLogger->SendAndFlushWithTime(_T("_start_machine.\n")); } g_hEP8x_Thread_State = THREAD_RUNNING_STATE2; g_machine.s_status._machine_running = true; SetEvent(g_hHomedEvent); - //so7_motion_probe_on_off_(false); //so7_motion_fixture_on_off(true); //so7_motion_fixture_up_down(true); @@ -3245,10 +3804,17 @@ SSI_STATUS_MOTION CSO7_Proto::_start_machine() //=============================================================================== SSI_STATUS_MOTION CSO7_Proto::_shutdown_machine() { - if (g_machine.s_machine_config.motion.m_DebugOutputEnable>=1) + if (g_so7_config.m_bDebugOutputEnable>=1) { g_pLogger->SendAndFlushWithTime(_T("_shutdown_machine.\n")); } + _send_cmd_SO7_CMD_STOP_MOVE_XYZ(); + so7_light_set_light_off(); + Sleep(20); + if (g_machine.IsSupportReadInterrputMsg) + { + _send_cmd_SO7_CMD_SET_GET_INTERRUPT_MSG_METHOD(E_GET_INTERRUPT_MSG_INTERRUPT); + } g_machine.s_status._machine_running = false; return SSI_STATUS_MOTION_NORMAL; }; @@ -3271,7 +3837,12 @@ SSI_STATUS_MOTION CSO7_Proto::_read_data_8x(int iEP_Base) { //TRACE2("_read_data_81() iEP : %X - ep_buff[iEP]._size : %X \r\n", iEP_Base, ep_buff[iEP_Base]._size); int _ret; - _ret = usb_bulk_read(g_dev, ep_buff[iEP_Base]._ep, (char *)ep_buff[iEP_Base]._buffer,(int) ep_buff[iEP_Base]._size, 5000); + if(isEF1AController) + { + _ret = g_EF1AUsbDevice->EF1AReadData(0,(char *)ep_buff[iEP_Base]._buffer,(int)ep_buff[iEP_Base]._size); + } + else + _ret = usb_bulk_read(g_dev, ep_buff[iEP_Base]._ep, (char *)ep_buff[iEP_Base]._buffer,(int)ep_buff[iEP_Base]._size, 5000); if (_ret > 0) { _process_rcv_transfer_data(iEP_Base); @@ -3279,8 +3850,8 @@ SSI_STATUS_MOTION CSO7_Proto::_read_data_8x(int iEP_Base) } else { - TRACE1("Read Timeout %xx\n", *((char *)ep_buff[iEP_Base]._buffer)); - ASSERT(0); + //TRACE1("Read Timeout %xx\n", *((char *)ep_buff[iEP_Base]._buffer)); + //ASSERT(0); return SSI_STATUS_MOTION_TIMEOUT; } return SSI_STATUS_MOTION_NORMAL; @@ -3297,7 +3868,7 @@ SSI_STATUS_MOTION CSO7_Proto::_read_data_8x(int iEP_Base) else { g_machine.InterruptFlag[0] = 0; - TRACE1("There is no data interrupt read from controller. %xx\n", *((char *)ep_buff[iEP_Base]._buffer)); + //TRACE1("There is no data interrupt read from controller. %xx\n", *((char *)ep_buff[iEP_Base]._buffer)); } ep_buff[EP_01_CMD_IDX]._hProtoPending = false; ep_buff[EP_81_DATA_IDX]._hProtoPending = false; @@ -3324,12 +3895,16 @@ SSI_STATUS_MOTION CSO7_Proto::_send_usb_cmd(int iEP_Base) ep_buff[iEP_Base]._save_send_cmd2= ep_buff[iEP_Base]._buffer[3]; //TRACE3("_send_usb_cmd() iEP : %X - ep_buff[iEP]._save_send_cmd : %X ._buffer[0] : %X\r\n", iEP_Base, ep_buff[iEP_Base]._save_send_cmd, ep_buff[iEP_Base]._buffer[0]); - - _ret = usb_bulk_write(g_dev, ep_buff[iEP_Base]._ep, (char *)ep_buff[iEP_Base]._buffer,(int) ep_buff[iEP_Base]._size, 50); + if(isEF1AController) + { + _ret = g_EF1AUsbDevice->EF1AWriteData(0,(char *)ep_buff[iEP_Base]._buffer,(int) ep_buff[iEP_Base]._size); + } + else + _ret = usb_bulk_write(g_dev, ep_buff[iEP_Base]._ep, (char *)ep_buff[iEP_Base]._buffer,(int) ep_buff[iEP_Base]._size, 50); if (_ret < 0) { - TRACE("Write Timeout \n"); - ASSERT(0); + //TRACE("Write Timeout \n"); + //ASSERT(0); return SSI_STATUS_MOTION_TIMEOUT; } SetEvent(ep_buff[iEP_Base+1]._event); @@ -3357,14 +3932,19 @@ SSI_STATUS_MOTION CSO7_Proto::_write_usb_data_only(int iEP_Base) ep_buff[iEP_Base]._save_send_cmd2 = ep_buff[iEP_Base]._buffer[3]; //TRACE3("_send_usb_cmd() iEP : %X - ep_buff[iEP]._save_send_cmd : %X ._buffer[0] : %X\r\n", iEP_Base, ep_buff[iEP_Base]._save_send_cmd, ep_buff[iEP_Base]._buffer[0]); - - _ret = usb_bulk_write(g_dev, ep_buff[iEP_Base]._ep, (char *)ep_buff[iEP_Base]._buffer,(int) ep_buff[iEP_Base]._size, 50); + if(isEF1AController) + { + _ret = g_EF1AUsbDevice->EF1AWriteData(0,(char *)ep_buff[iEP_Base]._buffer,(int) ep_buff[iEP_Base]._size); + } + else + _ret = usb_bulk_write(g_dev, ep_buff[iEP_Base]._ep, (char *)ep_buff[iEP_Base]._buffer,(int) ep_buff[iEP_Base]._size, 50); if (_ret < 0) { TRACE("Write Timeout \n"); ASSERT(0); return SSI_STATUS_MOTION_TIMEOUT; } + Sleep(MIN_SLEEP_TIME); ep_buff[iEP_Base]._hProtoPending = false; ep_buff[iEP_Base+1]._hProtoPending = false; return SSI_STATUS_MOTION_NORMAL; @@ -3449,35 +4029,21 @@ SSI_STATUS_MOTION CSO7_Proto::so7_motion_init_firmware_para() _send_cmd_SO7_CMD_GET_RESET_FLAG(); if(g_machine.IsSupportReadInterrputMsg) { - _send_cmd_SO7_CMD_SET_GET_INTERRUPT_MSG_METHOD(g_machine.s_machine_config.motion.GetInterruptMsgMethod); - Sleep(MIN_SLEEP_TIME); + _send_cmd_SO7_CMD_SET_GET_INTERRUPT_MSG_METHOD(g_so7_config.GetInterruptMsgMethod); + _send_cmd_SO7_CMD_READ_FIRMWARE_VERSION_INFO(); - if (g_machine.s_machine_config.motion.m_DebugOutputEnable>=1) + if (g_so7_config.m_bDebugOutputEnable>=1) { CStringA csAStr(""); csAStr.Format("FirmwareVersion:%s.\n",g_machine.FirmwareInfo); CString csStr(csAStr); g_pLogger->SendAndFlushWithTime(csStr); } - if (g_machine.FirmwareVer>=FirmwareVer_6_X) - { - _send_cmd_SO7_CMD_WRITE_DATA_TO_FPGA(E_AXIS_X,E_WRITE_ACCURA_ERR,static_cast(g_machine.s_machine_config.motion.m_AccuraErrPulseX)); - Sleep(MIN_SLEEP_TIME); - _send_cmd_SO7_CMD_WRITE_DATA_TO_FPGA(E_AXIS_Y,E_WRITE_ACCURA_ERR,static_cast(g_machine.s_machine_config.motion.m_AccuraErrPulseY)); - Sleep(MIN_SLEEP_TIME); - _send_cmd_SO7_CMD_WRITE_DATA_TO_FPGA(E_AXIS_Z,E_WRITE_ACCURA_ERR,static_cast(g_machine.s_machine_config.motion.m_AccuraErrPulseZ)); - Sleep(MIN_SLEEP_TIME); - //_send_cmd_SO7_CMD_WRITE_DATA_TO_FPGA(E_AXIS_X,E_WRITE_EQUIDISTANCE,static_cast(g_machine.s_machine_config.motion.m_EQUIDIS_X)); - //Sleep(MIN_SLEEP_TIME); - //_send_cmd_SO7_CMD_WRITE_DATA_TO_FPGA(E_AXIS_Y,E_WRITE_EQUIDISTANCE,static_cast(g_machine.s_machine_config.motion.m_EQUIDIS_Y)); - //Sleep(MIN_SLEEP_TIME); - //_send_cmd_SO7_CMD_WRITE_DATA_TO_FPGA(E_AXIS_Z,E_WRITE_EQUIDISTANCE,static_cast(g_machine.s_machine_config.motion.m_EQUIDIS_Z)); - //Sleep(MIN_SLEEP_TIME); - } } else { - if (g_machine.s_machine_config.motion.m_DebugOutputEnable>=1) + g_so7_config.GetInterruptMsgMethod = E_GET_INTERRUPT_MSG_INTERRUPT; + if (g_so7_config.m_bDebugOutputEnable >= 1) { g_pLogger->SendAndFlushWithTime(_T("FirmwareVersion:UNKNOWN.\n")); } @@ -3485,18 +4051,76 @@ SSI_STATUS_MOTION CSO7_Proto::so7_motion_init_firmware_para() return SSI_STATUS_MOTION_NORMAL; } +SSI_STATUS_MOTION CSO7_Proto::so7_motion_set_all_so7_config() +{ + if (g_machine.FirmwareVer >= FirmwareVer_7_X) + { + _send_cmd_SO7_CMD_WRITE_DATA_TO_FPGA(E_AXIS_X, E_WRITE_ACCURA_ERR, static_cast(g_so7_config.m_AccuraErrPulseX)); + + _send_cmd_SO7_CMD_WRITE_DATA_TO_FPGA(E_AXIS_Y, E_WRITE_ACCURA_ERR, static_cast(g_so7_config.m_AccuraErrPulseY)); + + _send_cmd_SO7_CMD_WRITE_DATA_TO_FPGA(E_AXIS_Z, E_WRITE_ACCURA_ERR, static_cast(g_so7_config.m_AccuraErrPulseZ)); + + _send_cmd_SO7_CMD_WRITE_DATA_TO_FPGA(E_AXIS_X, E_WRITE_TRIG_HOLDTIME, static_cast(g_so7_config.m_iTrigHoldTimeCnts)); + + _send_cmd_SO7_CMD_WRITE_DATA_TO_FPGA(E_AXIS_Y, E_WRITE_TRIG_HOLDTIME, static_cast(g_so7_config.m_iTrigHoldTimeCnts)); + + _send_cmd_SO7_CMD_WRITE_DATA_TO_FPGA(E_AXIS_Z, E_WRITE_TRIG_HOLDTIME, static_cast(g_so7_config.m_iTrigHoldTimeCnts)); + + + if (g_so7_config.m_bTrigIOEnable >= 1) + { + _send_cmd_SO7_CMD_IO_PURPOSE(TRUE); + } + else + { + _send_cmd_SO7_CMD_IO_PURPOSE(FALSE); + } + for (int i = 0; i < 4; i++) + { + if (g_so7_config.m_iMotionStartCnts[i] >= 1 && + g_so7_config.m_iMotionStopCnts[i] >= 1) + { + _send_cmd_SO7_CMD_SET_MOTION_CNTS(static_cast((4 - i)), static_cast(g_so7_config.m_iMotionStartCnts[i]), static_cast(g_so7_config.m_iMotionStopCnts[i])); + } + } + if (g_so7_config.m_iMotionStartCnts[4] >= 1 && + g_so7_config.m_iMotionStopCnts[4] >= 1) + { + _send_cmd_SO7_CMD_SET_MOTION_CNTS(5, static_cast(g_so7_config.m_iMotionStartCnts[4]), static_cast(g_so7_config.m_iMotionStopCnts[4])); + } + } + else if (g_machine.FirmwareVer >= FirmwareVer_6_X) + { + _send_cmd_SO7_CMD_WRITE_DATA_TO_FPGA(E_AXIS_X, E_WRITE_ACCURA_ERR, static_cast(g_so7_config.m_AccuraErrPulseX)); + + _send_cmd_SO7_CMD_WRITE_DATA_TO_FPGA(E_AXIS_Y, E_WRITE_ACCURA_ERR, static_cast(g_so7_config.m_AccuraErrPulseY)); + + _send_cmd_SO7_CMD_WRITE_DATA_TO_FPGA(E_AXIS_Z, E_WRITE_ACCURA_ERR, static_cast(g_so7_config.m_AccuraErrPulseZ)); + + _send_cmd_SO7_CMD_WRITE_DATA_TO_FPGA(E_AXIS_X, 10, static_cast(g_so7_config.m_EQUIDIS_X)); + + _send_cmd_SO7_CMD_WRITE_DATA_TO_FPGA(E_AXIS_Y, 10, static_cast(g_so7_config.m_EQUIDIS_Y)); + + _send_cmd_SO7_CMD_WRITE_DATA_TO_FPGA(E_AXIS_Z, 10, static_cast(g_so7_config.m_EQUIDIS_Z)); + + } + return SSI_STATUS_MOTION_NORMAL; +} + //================================================================== bool CSO7_Proto::so7_motion_is_homed() { - //if (g_machine.IsOffline) - //{ - // g_machine.Sys_Reset_Flag =1; - // SetEvent(g_hHomedEvent); - //} + if (g_machine.IsOffline) + { + g_machine.Sys_Reset_Flag =1; + SetEvent(g_hHomedEvent); + return true; + } _send_cmd_SO7_CMD_GET_RESET_FLAG(); if (g_machine.Sys_Reset_Flag == 1) { - if (g_machine.s_machine_config.motion.m_DebugOutputEnable>=1) + if (g_so7_config.m_bDebugOutputEnable>=1) { g_pLogger->SendAndFlushWithTime(_T("so7_motion_is_homed:true.\n")); } @@ -3505,7 +4129,7 @@ bool CSO7_Proto::so7_motion_is_homed() } else { - if (g_machine.s_machine_config.motion.m_DebugOutputEnable>=1) + if (g_so7_config.m_bDebugOutputEnable>=1) { g_pLogger->SendAndFlushWithTime(_T("so7_motion_is_homed:false.\n")); } @@ -3522,41 +4146,12 @@ SSI_STATUS_MOTION CSO7_Proto::so7_motion_Dcc_Home() SetEvent(g_hHomedEvent); return SSI_STATUS_MOTION_NORMAL; } - //查询是否复位 - _send_cmd_SO7_CMD_GET_RESET_FLAG(); - g_machine.cVerNumber=3; - if (g_machine.Sys_Reset_Flag == 1) - { - _send_cmd_SO7_CMD_SET_VER_NUMBER(); - SetEvent(g_hHomedEvent); - return SSI_STATUS_MOTION_NORMAL; - } - - m_bHomingActive = true; // Tell the world we need to home the stage - - // Home - so7_motion_reset_worktable_lower_left(CT_HOME_XYZ); - - TRACE0(" - waiting for X,Y,Zm to stop moving\n"); - //======================================== - // Wait until X-Y-Zm stopped moving - INT iRetry(0); - while (g_machine.Sys_Reset_Flag != 1) - { - Sleep(50); - _send_cmd_SO7_CMD_GET_RESET_FLAG(); - iRetry++; - } - //_get_xyz_index(g_machine.s_machine_config.x_axis._neg_working_limit,g_machine.s_machine_config.y_axis._neg_working_limit,g_machine.s_machine_config.z_axis._neg_working_limit); - _send_cmd_SO7_CMD_SET_VER_NUMBER(); - m_bHomingActive = false; - SetEvent(g_hHomedEvent); - return SSI_STATUS_MOTION_NORMAL; + return so7_motion_Dcc_HomeXYZ(CT_HOME_XYZ); } //======================================================================== SSI_STATUS_MOTION CSO7_Proto::so7_motion_Dcc_HomeXYZ(char cHomeMachineMode) { - if (g_machine.s_machine_config.motion.m_DebugOutputEnable>=1) + if (g_so7_config.m_bDebugOutputEnable>=1) { g_pLogger->SendAndFlushWithTime(_T("Enter so7_motion_Dcc_HomeXYZ(%d).\n"),cHomeMachineMode); } @@ -3576,7 +4171,6 @@ SSI_STATUS_MOTION CSO7_Proto::so7_motion_Dcc_HomeXYZ(char cHomeMachineMode) } m_bHomingActive = true; // Tell the world we need to home the stage - // Home so7_motion_reset_worktable_lower_left(cHomeMachineMode); @@ -3587,12 +4181,30 @@ SSI_STATUS_MOTION CSO7_Proto::so7_motion_Dcc_HomeXYZ(char cHomeMachineMode) INT lSleep = 20; INT lMaxLoopCnt = HOME_TIMEOUT/lSleep; INT lLoopCnt = 0; + long lPreX(0),lPreY(0),lPreZ(0); + + g_machine.cVerNumber = 2; + _send_cmd_SO7_CMD_SET_VER_NUMBER(); + g_machine.cVerNumber = 3; Sleep(lSleep); do - { + { Sleep(lSleep); _send_cmd_SO7_CMD_GET_RESET_FLAG(); - lLoopCnt++; + _send_cmd_SO7_CMD_READ_AXIS_XYZ(); + if (abs(g_machine.x._scale_pos._long_ - lPreX) < 10 + && abs(g_machine.y._scale_pos._long_ - lPreY) < 10 + && abs(g_machine.z._scale_pos._long_ - lPreZ) < 10) + { + lLoopCnt++; + } + else + { + lLoopCnt = 0; + } + lPreX = g_machine.x._scale_pos._long_; + lPreY = g_machine.y._scale_pos._long_; + lPreZ = g_machine.z._scale_pos._long_; } while (g_machine.Sys_Reset_Flag != 1 && lLoopCnt < lMaxLoopCnt); //_get_xyz_index(g_machine.s_machine_config.x_axis._neg_working_limit,g_machine.s_machine_config.y_axis._neg_working_limit,g_machine.s_machine_config.z_axis._neg_working_limit); m_bHomingActive = false; @@ -3628,7 +4240,7 @@ SSI_STATUS_MOTION CSO7_Proto::so7_Motion_R_IsHomed(bool &bHomed) SSI_STATUS_MOTION CSO7_Proto::so7_motion_Dcc_Home_R() { //查询是否复位 - if (g_machine.s_machine_config.motion.m_DebugOutputEnable>=1) + if (g_so7_config.m_bDebugOutputEnable>=1) { g_pLogger->SendAndFlushWithTime(_T("Enter so7_motion_Dcc_Home_R.\n")); } @@ -3645,16 +4257,16 @@ SSI_STATUS_MOTION CSO7_Proto::so7_motion_Dcc_Home_R() g_machine.x._pos_fixed._long_=0; g_machine.y._pos_fixed._long_=0; g_machine.z._pos_fixed._long_=0; - lMoveToDis=MMtoScale(2.0*g_machine.s_machine_config.motion.m_RotaryCircleDis,ROTARY_MMtoScale_RESOLUTION); - if (g_machine.s_machine_config.motion.m_RotaryAxisNO==MACHINE_AXIS_X) + lMoveToDis=MMtoScale(2.0*g_machine.s_machine_config.r_axis.m_RotaryCircleDis,ROTARY_MMtoScale_RESOLUTION); + if (g_machine.s_machine_config.r_axis.m_RotaryAxisNO==MACHINE_AXIS_X) { g_machine.x._pos_fixed._long_=lMoveToDis; } - else if (g_machine.s_machine_config.motion.m_RotaryAxisNO==MACHINE_AXIS_Y) + else if (g_machine.s_machine_config.r_axis.m_RotaryAxisNO==MACHINE_AXIS_Y) { g_machine.y._pos_fixed._long_=lMoveToDis; } - else if (g_machine.s_machine_config.motion.m_RotaryAxisNO==MACHINE_AXIS_Z) + else if (g_machine.s_machine_config.r_axis.m_RotaryAxisNO==MACHINE_AXIS_Z) { g_machine.z._pos_fixed._long_=lMoveToDis; } @@ -3695,21 +4307,21 @@ SSI_STATUS_MOTION CSO7_Proto::so7_motion_get_position_R(double & dRad) long lX_Ref=0, lY_Ref=0, lZ_Ref=0; double dR(0.0); _send_cmd_SO7_CMD_READ_AXIS_XYZ(); - if (g_machine.s_machine_config.motion.m_RotaryAxisNO==MACHINE_AXIS_X) + if (g_machine.s_machine_config.r_axis.m_RotaryAxisNO==MACHINE_AXIS_X) { lX = g_machine.x._scale_pos._long_; _send_cmd_SO7_CMD_READ_ZSIGNAL_POS_X(); lX_Ref=g_machine.x._ZSignal_pos._long_; dR=static_cast(lX-lX_Ref); } - else if (g_machine.s_machine_config.motion.m_RotaryAxisNO==MACHINE_AXIS_Y) + else if (g_machine.s_machine_config.r_axis.m_RotaryAxisNO==MACHINE_AXIS_Y) { lY = g_machine.y._scale_pos._long_; _send_cmd_SO7_CMD_READ_ZSIGNAL_POS_Y(); lY_Ref=g_machine.y._ZSignal_pos._long_; dR=static_cast(lY-lY_Ref); } - else if (g_machine.s_machine_config.motion.m_RotaryAxisNO==MACHINE_AXIS_Z) + else if (g_machine.s_machine_config.r_axis.m_RotaryAxisNO==MACHINE_AXIS_Z) { lZ = g_machine.z._scale_pos._long_; _send_cmd_SO7_CMD_READ_ZSIGNAL_POS_Z(); @@ -3726,7 +4338,7 @@ SSI_STATUS_MOTION CSO7_Proto::so7_motion_get_position_R(double & dRad) bPlus=false; } int iRetryCnts(0); - if (fabs(dR)-fabs(2.0*g_machine.s_machine_config.motion.m_RotaryCirclePulse)>100) + if (fabs(dR)-fabs(2.0*g_machine.s_machine_config.r_axis.m_RotaryCirclePulse)>100) { do { @@ -3741,9 +4353,9 @@ SSI_STATUS_MOTION CSO7_Proto::so7_motion_get_position_R(double & dRad) } //m_csMessage.Format("[CONVERT RotaryY]CNTS:%d;PLUS:%d;ScaleYResult:%.4f.",iRetryCnts,bPlus,dR); } while ((iRetryCnts<5)&& - (fabs(dR)-fabs(g_machine.s_machine_config.motion.m_RotaryCirclePulse)>100)); + (fabs(dR)-fabs(g_machine.s_machine_config.r_axis.m_RotaryCirclePulse)>100)); } - dRad = 2.0*M_PI*dR/(g_machine.s_machine_config.motion.m_RotaryCirclePulse); + dRad = 2.0*M_PI*dR/(g_machine.s_machine_config.r_axis.m_RotaryCirclePulse); return SSI_STATUS_MOTION_NORMAL; }; @@ -3776,24 +4388,24 @@ SSI_STATUS_MOTION CSO7_Proto::so7_motion_set_position_R(double dRad,bool bWait) { dRMovetoDis=dRMovetoDis; } - if (g_machine.s_machine_config.motion.m_DebugOutputEnable>=1) + if (g_so7_config.m_bDebugOutputEnable>=1) { g_pLogger->SendAndFlushWithTime(_T("so7_motion_set_position_R:[From]%.4f;[To]%.4f;[Dis]%.4F.\n") ,dRStart,dRad,dRMovetoDis); } - lMoveToDis=static_cast(dRMovetoDis*(static_cast(g_machine.s_machine_config.motion.m_RotaryCirclePulse))/(2.0*M_PI)); + lMoveToDis=static_cast(dRMovetoDis*(static_cast(g_machine.s_machine_config.r_axis.m_RotaryCirclePulse))/(2.0*M_PI)); g_machine.x._pos_fixed._long_=0; g_machine.y._pos_fixed._long_=0; g_machine.z._pos_fixed._long_=0; - if (g_machine.s_machine_config.motion.m_RotaryAxisNO==MACHINE_AXIS_X) + if (g_machine.s_machine_config.r_axis.m_RotaryAxisNO==MACHINE_AXIS_X) { g_machine.x._pos_fixed._long_=lMoveToDis; } - else if (g_machine.s_machine_config.motion.m_RotaryAxisNO==MACHINE_AXIS_Y) + else if (g_machine.s_machine_config.r_axis.m_RotaryAxisNO==MACHINE_AXIS_Y) { g_machine.y._pos_fixed._long_=lMoveToDis; } - else if (g_machine.s_machine_config.motion.m_RotaryAxisNO==MACHINE_AXIS_Z) + else if (g_machine.s_machine_config.r_axis.m_RotaryAxisNO==MACHINE_AXIS_Z) { g_machine.z._pos_fixed._long_=lMoveToDis; } @@ -3861,15 +4473,15 @@ SSI_STATUS_MOTION CSO7_Proto::so7_Motion_R_IsMotionFInished(bool &bFinished) SSI_STATUS_MOTION CSO7_Proto::so7_motion_move_R(char _SpeedGear) { //4-FASTER,1-SLOWER - if (g_machine.s_machine_config.motion.m_RotaryAxisNO==MACHINE_AXIS_X) + if (g_machine.s_machine_config.r_axis.m_RotaryAxisNO==MACHINE_AXIS_X) { _send_cmd_SO7_CMD_MOVE_X(_SpeedGear); } - else if (g_machine.s_machine_config.motion.m_RotaryAxisNO==MACHINE_AXIS_Y) + else if (g_machine.s_machine_config.r_axis.m_RotaryAxisNO==MACHINE_AXIS_Y) { _send_cmd_SO7_CMD_MOVE_Y(_SpeedGear); } - else if (g_machine.s_machine_config.motion.m_RotaryAxisNO==MACHINE_AXIS_Z) + else if (g_machine.s_machine_config.r_axis.m_RotaryAxisNO==MACHINE_AXIS_Z) { _send_cmd_SO7_CMD_MOVE_Z(_SpeedGear); } @@ -3902,9 +4514,10 @@ SSI_STATUS_MOTION CSO7_Proto::_get_xyz_index(long & lX, long & lY, long & lZ) return SSI_STATUS_MOTION_NORMAL; }; -SSI_STATUS_MOTION CSO7_Proto::so7_motion_jog(EMACHINE_AXIS cAxis,char cSpeedGear) +//======================================================================== +SSI_STATUS_MOTION CSO7_Proto::so7_motion_jog(EMACHINE_AXIS cAxis, char cSpeedGear) { - if (abs(cSpeedGear)>4) + if (abs(cSpeedGear)>5) { if (cSpeedGear>0) { @@ -3925,15 +4538,28 @@ SSI_STATUS_MOTION CSO7_Proto::so7_motion_jog(EMACHINE_AXIS cAxis,char cSpeedGear { if (cSpeedGear==4) { + //if (!isEF1AController) + //{ + // + //} double dXStart(0.0), dYStart(0.0), dZStart(0.0); so7_motion_get_position_xyz(dXStart, dYStart, dZStart); - return so7_motion_set_position_xyz(g_machine.s_machine_config.x_axis._pos_working_limit,dYStart,dZStart,false); + if(dXStart < g_machine.s_machine_config.x_axis._pos_working_limit) + _send_cmd_SO7_CMD_MOVE_X(cSpeedGear); + //return so7_motion_set_position_xyz(g_machine.s_machine_config.x_axis._pos_working_limit,dYStart,dZStart,false); + } else if (cSpeedGear==-4) { + //if (!isEF1AController) + //{ + // _send_cmd_SO7_CMD_MOVE_X(cSpeedGear); + //} double dXStart(0.0), dYStart(0.0), dZStart(0.0); so7_motion_get_position_xyz(dXStart, dYStart, dZStart); - return so7_motion_set_position_xyz(g_machine.s_machine_config.x_axis._neg_working_limit,dYStart,dZStart,false); + if(dXStart > g_machine.s_machine_config.x_axis._neg_working_limit) + _send_cmd_SO7_CMD_MOVE_X(cSpeedGear); + //return so7_motion_set_position_xyz(g_machine.s_machine_config.x_axis._neg_working_limit,dYStart,dZStart,false); } else { @@ -3945,15 +4571,27 @@ SSI_STATUS_MOTION CSO7_Proto::so7_motion_jog(EMACHINE_AXIS cAxis,char cSpeedGear { if (cSpeedGear==4) { + /*if (!isEF1AController) + { + _send_cmd_SO7_CMD_MOVE_Y(cSpeedGear); + }*/ double dXStart(0.0), dYStart(0.0), dZStart(0.0); so7_motion_get_position_xyz(dXStart, dYStart, dZStart); - return so7_motion_set_position_xyz(dXStart,g_machine.s_machine_config.y_axis._pos_working_limit,dZStart,false); + if(dYStart < g_machine.s_machine_config.y_axis._pos_working_limit) + _send_cmd_SO7_CMD_MOVE_Y(cSpeedGear); + //return so7_motion_set_position_xyz(dXStart,g_machine.s_machine_config.y_axis._pos_working_limit,dZStart,false); } else if (cSpeedGear==-4) { + /* if (!isEF1AController) + { + _send_cmd_SO7_CMD_MOVE_Y(cSpeedGear); + }*/ double dXStart(0.0), dYStart(0.0), dZStart(0.0); so7_motion_get_position_xyz(dXStart, dYStart, dZStart); - return so7_motion_set_position_xyz(dXStart,g_machine.s_machine_config.y_axis._neg_working_limit,dZStart,false); + if(dYStart > g_machine.s_machine_config.y_axis._neg_working_limit) + _send_cmd_SO7_CMD_MOVE_Y(cSpeedGear); + //return so7_motion_set_position_xyz(dXStart,g_machine.s_machine_config.y_axis._neg_working_limit,dZStart,false); } else { @@ -3965,15 +4603,27 @@ SSI_STATUS_MOTION CSO7_Proto::so7_motion_jog(EMACHINE_AXIS cAxis,char cSpeedGear { if (cSpeedGear==4) { +// if (!isEF1AController) +// { +// _send_cmd_SO7_CMD_MOVE_Z(cSpeedGear); +// } double dXStart(0.0), dYStart(0.0), dZStart(0.0); so7_motion_get_position_xyz(dXStart, dYStart, dZStart); - return so7_motion_set_position_xyz(dXStart,dYStart,g_machine.s_machine_config.z_axis._pos_working_limit,false); + if(dZStart < g_machine.s_machine_config.z_axis._pos_working_limit) + _send_cmd_SO7_CMD_MOVE_Z(cSpeedGear); + //return so7_motion_set_position_xyz(dXStart,dYStart,g_machine.s_machine_config.z_axis._pos_working_limit,false); } else if (cSpeedGear==-4) { + /* if (!isEF1AController) + { + _send_cmd_SO7_CMD_MOVE_Z(cSpeedGear); + }*/ double dXStart(0.0), dYStart(0.0), dZStart(0.0); so7_motion_get_position_xyz(dXStart, dYStart, dZStart); - return so7_motion_set_position_xyz(dXStart,dYStart,g_machine.s_machine_config.z_axis._neg_working_limit,false); + if(dZStart > g_machine.s_machine_config.z_axis._neg_working_limit) + _send_cmd_SO7_CMD_MOVE_Z(cSpeedGear); + //return so7_motion_set_position_xyz(dXStart,dYStart,g_machine.s_machine_config.z_axis._neg_working_limit,false); } else { @@ -4041,7 +4691,7 @@ SSI_STATUS_MOTION CSO7_Proto::so7_motion_jog(EMACHINE_AXIS cAxis,char cSpeedGear break; } } - return SSI_STATUS_MOTION_NORMAL; +// return SSI_STATUS_MOTION_NORMAL; } //================================================================== @@ -4070,7 +4720,12 @@ SSI_STATUS_MOTION CSO7_Proto::so7_motion_get_position_xyz(double & dX, double & //================================================================== SSI_STATUS_MOTION CSO7_Proto::so7_motion_set_position_xyz(double dX, double dY, double dZ, bool bWait) { + if (!g_machine.s_status._bXYZZMIdle) + { + return SSI_STATUS_MOTION_NORMAL; + } WaitForSingleObject(g_hHomedEvent, INFINITE); // machine start and homing is done + g_machine.s_status._bXYZZMIdle=false; if (g_machine.IsOffline) { @@ -4131,10 +4786,10 @@ SSI_STATUS_MOTION CSO7_Proto::so7_motion_set_position_xyz(double dX, double dY, Y.to = MMtoScale(dY, g_machine.s_machine_config.y_axis._scale_resolution); Z.from = MMtoScale(dZStart, g_machine.s_machine_config.z_axis._scale_resolution); Z.to = MMtoScale(dZ, g_machine.s_machine_config.z_axis._scale_resolution); - if (g_machine.s_machine_config.motion.m_DebugOutputEnable>=1) + if (g_so7_config.m_bDebugOutputEnable>=1) { - g_pLogger->SendAndFlushWithTime(_T("so7_motion_set_position_xyz:[From]X:%.4f,Y:%.4f,Z:%.4f;[To]X:%.4f,Y:%.4f,Z:%.4f.\n") - ,dXStart,dYStart,dZStart,dX,dY,dZ); + g_pLogger->SendAndFlushWithTime(_T("so7_motion_set_position_xyz:[From]X:%.4f,Y:%.4f,Z:%.4f;[To]X:%.4f,Y:%.4f,Z:%.4f.Wait:%d.\n") + ,dXStart,dYStart,dZStart,dX,dY,dZ,bWait); } // move the position to make the -X, -Y, -Z position 0,0,0 //X.to += g_machine.s_machine_config.x_axis._neg_working_limit; @@ -4150,14 +4805,20 @@ SSI_STATUS_MOTION CSO7_Proto::so7_motion_set_position_xyz(double dX, double dY, g_machine.z._pos_fixed._long_=Z.to-Z.from; // _calculate_straightline_motion(g_machine.s_machine_config._dXYZSpeed); + g_machine.MotionType = EMSG_STOPXYZ_1_MOVETOXYZ; so7_motion_clear_finished_flag(); _send_cmd_SO7_CMD_MOVE_TO_POS_XYZ(CT_MOVETOXYZ); - g_machine.MotionType=EMSG_STOPXYZ_1_MOVETOXYZ; #pragma message("Test settle wait comparing the status bit to the scale monitor") - TRACE1("Presettle Time: %lf\n", TimeInSecs()); if (bWait) { + double PreTime(0.0); + PreTime = TimeInSecs(); + TRACE1("Presettle Time: %lf;\r\n", PreTime); + if (g_so7_config.m_bDebugOutputEnable >= 1) + { + g_pLogger->SendAndFlushWithTime(_T("so7_motion_set_position_xyz:Presettle Time: %lf.\n"),PreTime); + } INT lSleep = 20; INT lMaxLoopCnt = MOVETO_TIMEOUT/lSleep; // use max homing time of 20 seconds INT lLoopCnt = 0; @@ -4165,11 +4826,31 @@ SSI_STATUS_MOTION CSO7_Proto::so7_motion_set_position_xyz(double dX, double dY, bool IsFinished(FALSE); do { + if (g_so7_config.m_bDebugOutputEnable>=1) + { + so7_motion_get_position_xyz(dXStart, dYStart, dZStart); + g_pLogger->SendAndFlushWithTime(_T("so7_motion_set_position_xyz:[Cnt%d]X:%.4f,Y:%.4f,Z:%.4f.\n") + ,lLoopCnt,dXStart,dYStart,dZStart); + } + g_machine.MotionType = EMSG_STOPXYZ_1_MOVETOXYZ; so7_Motion_XYZ_IsMotionFinished(IsFinished); Sleep(lSleep); ++lLoopCnt; } while (!IsFinished && lLoopCnt < lMaxLoopCnt); - TRACE1("Postsettle Time: %lf\n", TimeInSecs()); + double PostTime(0.0); + PostTime = TimeInSecs(); + TRACE2("Postsettle Time: %lf;Settle time: %lf.\r\n", PostTime, PostTime - PreTime); + if (g_so7_config.m_bDebugOutputEnable >= 1) + { + g_pLogger->SendAndFlushWithTime(_T("so7_motion_set_position_xyz:Postsettle Time: %lf;Settle time: %lf.\n"), PostTime, PostTime - PreTime); + } + if (g_so7_config.m_bDebugOutputEnable>=1) + { + so7_motion_get_position_xyz(dXStart, dYStart, dZStart); + g_pLogger->SendAndFlushWithTime(_T("so7_motion_set_position_xyz:[Done]X:%.4f,Y:%.4f,Z:%.4f.\n") + ,dXStart,dYStart,dZStart); + } + g_machine.s_status._bXYZZMIdle=true; if (IsFinished) { g_machine.MotionType=-1; @@ -4185,33 +4866,81 @@ SSI_STATUS_MOTION CSO7_Proto::so7_motion_set_position_xyz(double dX, double dY, //================================================================== SSI_STATUS_MOTION CSO7_Proto::so7_Motion_XYZ_IsMotionFinished(bool &bFinished) { - if (g_machine.MotionType= EMSG_STOPXYZ_1_MOVETOXYZ) + { + BOOL IsFinished(FALSE); + so7_motion_is_finished(g_machine.MotionType, IsFinished); + if (IsFinished) + { + g_machine.MotionType = -1; + bFinished = true; + IsMotionFinishedManual(TRUE); + + if (g_so7_config.m_bDebugOutputEnable >= 1) + { + g_pLogger->SendAndFlushWithTime(_T("so7_motion_is_finished:true.\n")); + } + } + else + { + IsFinished = IsMotionFinishedManual(); + if (IsFinished) + { + if (g_so7_config.m_bDebugOutputEnable >= 1) + { + g_pLogger->SendAndFlushWithTime(_T("so7_motion_is_finished:true.\n")); + } + so7_motion_clear_finished_flag(); + IsMotionFinishedManual(TRUE); + g_machine.MotionType = -1; + bFinished = true; + } + else + { + bFinished = false; + } + } + } + } else { BOOL IsFinished(FALSE); - so7_motion_is_finished(g_machine.MotionType,IsFinished); + so7_motion_is_finished(g_machine.MotionType, IsFinished); if (IsFinished) { - g_machine.MotionType=-1; - bFinished=true; + g_machine.MotionType = -1; + bFinished = true; IsMotionFinishedManual(TRUE); - } - else - { - IsFinished=IsMotionFinishedManual(); - if (IsFinished) + + if (g_so7_config.m_bDebugOutputEnable >= 1) { - g_machine.MotionType=-1; - bFinished=true; - } - else - { - bFinished=false; + g_pLogger->SendAndFlushWithTime(_T("so7_motion_is_finished:true.\n")); } } + else if (g_machine.MotionType >= EMSG_STOPXYZ_1_MOVETOXYZ) + { + IsFinished = IsMotionFinishedManual(); + if (IsFinished) + { + if (g_so7_config.m_bDebugOutputEnable >= 1) + { + g_pLogger->SendAndFlushWithTime(_T("so7_motion_is_finished:true.\n")); + } + IsMotionFinishedManual(TRUE); + g_machine.MotionType = -1; + bFinished = true; + } + else + { + bFinished = false; + } + } + } + if (bFinished) + { + g_machine.s_status._bXYZZMIdle=true; } return SSI_STATUS_MOTION_NORMAL; } @@ -4225,7 +4954,7 @@ BOOL CSO7_Proto::IsMotionFinishedManual(BOOL _BResetCnts) } else { - if (g_machine.s_machine_config.motion.m_CNC_Deadlock_Solution>=1) + if (g_so7_config.m_CNC_Deadlock_Solution>=1) { double dPosX(0.0),dPosY(0.0),dPosZ(0.0); so7_motion_get_position_xyz(dPosX,dPosY,dPosZ); @@ -4234,7 +4963,13 @@ BOOL CSO7_Proto::IsMotionFinishedManual(BOOL _BResetCnts) && (fabs(dPosZ-g_machine.z._ReCorded_Pos)<=g_machine.s_machine_config.z_axis._motor_precision)) { g_machine.MotionFinishedCnts++; - if (g_machine.MotionFinishedCnts>g_machine.s_machine_config.motion.m_CNC_Deadlock_JudgeMaxCnts) + TRACE("IsMotionFinishedManual Cnts=%d.\r\n", g_machine.MotionFinishedCnts); + if (g_so7_config.m_bDebugOutputEnable >= 1) + { + g_pLogger->SendAndFlushWithTime(_T("IsMotionFinishedManual Cnts=%d;X=%.4f,Y=%.4f,Z=%.4f.\n"), + g_machine.MotionFinishedCnts, dPosX, dPosY, dPosZ); + } + if (g_machine.MotionFinishedCnts>g_so7_config.m_CNC_Deadlock_JudgeMaxCnts) { g_machine.MotionFinished=TRUE; } @@ -4263,10 +4998,15 @@ BOOL CSO7_Proto::IsMotionFinishedManual(BOOL _BResetCnts) SSI_STATUS_MOTION CSO7_Proto::so7_motion_clear_finished_flag() { WaitForSingleObject(g_hHomedEvent, INFINITE); // machine start and homing is done - if (g_machine.s_machine_config.motion.GetInterruptMsgMethod==E_GET_INTERRUPT_MSG_INQUIRY) + if (g_so7_config.GetInterruptMsgMethod==E_GET_INTERRUPT_MSG_INQUIRY) { _send_cmd_SO7_CMD_SET_INTERRUPT_MSG(g_machine.MotionType,0); } + else + { + IsMotionFinishedManual(TRUE); + g_machine.InterruptFlag[0] = 0; + } return SSI_STATUS_MOTION_NORMAL; } @@ -4276,7 +5016,7 @@ SSI_STATUS_MOTION CSO7_Proto::so7_motion_is_finished(char MotionType,BOOL& IsFin WaitForSingleObject(g_hHomedEvent, INFINITE); // machine start and homing is done BOOL bIsFinised(FALSE); - if (g_machine.s_machine_config.motion.GetInterruptMsgMethod==E_GET_INTERRUPT_MSG_INQUIRY) + if (g_so7_config.GetInterruptMsgMethod==E_GET_INTERRUPT_MSG_INQUIRY) { _send_cmd_SO7_CMD_GET_INTERRUPT_MSG(MotionType); if (g_machine.GetInterruptMsg[MotionType][0]==CT_STOPXYZ) @@ -4298,6 +5038,100 @@ SSI_STATUS_MOTION CSO7_Proto::so7_motion_is_finished(char MotionType,BOOL& IsFin return SSI_STATUS_MOTION_NORMAL; }; +//======================================================================== +SSI_STATUS_MOTION CSO7_Proto::so7_motion_set_speed_percent(EMACHINE_AXIS cAxis, char cSpeedGear, double dSpeedPercent, double dAccelPercent) +{ + char SetSpeedGear(0); + SetSpeedGear = static_cast(abs(cSpeedGear)); + if (SetSpeedGear > 4 || SetSpeedGear < 0) + { + return SSI_STATUS_MOTION_INVALID_PARAMETERS; + } + double dTmp(0.0); + switch (cAxis) + { + case MACHINE_AXIS_X: + { + if (g_machine.FirmwareVer >= FirmwareVer_6_X) + { + dTmp = ((g_machine.s_machine_config.x_axis._dMaxAccel - g_machine.s_machine_config.x_axis._dMinAccel) + *dAccelPercent) + g_machine.s_machine_config.x_axis._dMinAccel; + g_machine.s_machine_config.x_axis._speed_base[SetSpeedGear] = static_cast(dTmp); + + dTmp = ((g_machine.s_machine_config.x_axis._dMaxSpeed - g_machine.s_machine_config.x_axis._dMinSpeed) + *dSpeedPercent) + g_machine.s_machine_config.x_axis._dMinSpeed; + g_machine.s_machine_config.x_axis._speed_slow_dis[SetSpeedGear] = dTmp; + } + else + { + dTmp = ((g_machine.s_machine_config.x_axis._dMaxAccel - g_machine.s_machine_config.x_axis._dMinAccel) + *dAccelPercent) + g_machine.s_machine_config.x_axis._dMinAccel; + g_machine.s_machine_config.x_axis._speed_base[SetSpeedGear] = static_cast(dTmp); + + dTmp = ((g_machine.s_machine_config.x_axis._dMaxSpeed - g_machine.s_machine_config.x_axis._dMinSpeed) + *dSpeedPercent) + g_machine.s_machine_config.x_axis._dMinSpeed; + g_machine.s_machine_config.x_axis._speed_max[SetSpeedGear] = static_cast(dTmp); + } + _send_cmd_SO7_CMD_SET_SPEED_PARAMETER(0, SetSpeedGear); + + break; + } + case MACHINE_AXIS_Y: + { + if (g_machine.FirmwareVer >= FirmwareVer_6_X) + { + dTmp = ((g_machine.s_machine_config.y_axis._dMaxAccel - g_machine.s_machine_config.y_axis._dMinAccel) + *dAccelPercent) + g_machine.s_machine_config.y_axis._dMinAccel; + g_machine.s_machine_config.y_axis._speed_base[SetSpeedGear] = static_cast(dTmp); + + dTmp = ((g_machine.s_machine_config.y_axis._dMaxSpeed - g_machine.s_machine_config.y_axis._dMinSpeed) + *dSpeedPercent) + g_machine.s_machine_config.y_axis._dMinSpeed; + g_machine.s_machine_config.y_axis._speed_slow_dis[SetSpeedGear] = dTmp; + } + else + { + dTmp = ((g_machine.s_machine_config.y_axis._dMaxAccel - g_machine.s_machine_config.y_axis._dMinAccel) + *dAccelPercent) + g_machine.s_machine_config.y_axis._dMinAccel; + g_machine.s_machine_config.y_axis._speed_base[SetSpeedGear] = static_cast(dTmp); + + dTmp = ((g_machine.s_machine_config.y_axis._dMaxSpeed - g_machine.s_machine_config.y_axis._dMinSpeed) + *dSpeedPercent) + g_machine.s_machine_config.y_axis._dMinSpeed; + g_machine.s_machine_config.y_axis._speed_max[SetSpeedGear] = static_cast(dTmp); + } + _send_cmd_SO7_CMD_SET_SPEED_PARAMETER(1, SetSpeedGear); + + break; + } + case MACHINE_AXIS_Z: + { + if (g_machine.FirmwareVer >= FirmwareVer_6_X) + { + dTmp = ((g_machine.s_machine_config.z_axis._dMaxAccel - g_machine.s_machine_config.z_axis._dMinAccel) + *dAccelPercent) + g_machine.s_machine_config.z_axis._dMinAccel; + g_machine.s_machine_config.z_axis._speed_base[SetSpeedGear] = static_cast(dTmp); + + dTmp = ((g_machine.s_machine_config.z_axis._dMaxSpeed - g_machine.s_machine_config.z_axis._dMinSpeed) + *dSpeedPercent) + g_machine.s_machine_config.z_axis._dMinSpeed; + g_machine.s_machine_config.z_axis._speed_slow_dis[SetSpeedGear] = dTmp; + } + else + { + dTmp = ((g_machine.s_machine_config.z_axis._dMaxAccel - g_machine.s_machine_config.z_axis._dMinAccel) + *dAccelPercent) + g_machine.s_machine_config.z_axis._dMinAccel; + g_machine.s_machine_config.z_axis._speed_base[SetSpeedGear] = static_cast(dTmp); + + dTmp = ((g_machine.s_machine_config.z_axis._dMaxSpeed - g_machine.s_machine_config.z_axis._dMinSpeed) + *dSpeedPercent) + g_machine.s_machine_config.z_axis._dMinSpeed; + g_machine.s_machine_config.z_axis._speed_max[SetSpeedGear] = static_cast(dTmp); + } + _send_cmd_SO7_CMD_SET_SPEED_PARAMETER(2, SetSpeedGear); + + break; + } + default:break; + } + return SSI_STATUS_MOTION_NORMAL; +} //======================================================================== // This speed setting will be carried out in the next DCC move @@ -4309,26 +5143,26 @@ SSI_STATUS_MOTION CSO7_Proto::so7_motion_set_speed_xyz(EMACHINE_AXIS cAxis,char char SetSpeedGear(0); EMACHINE_AXIS SetAXIS(MACHINE_AXIS_NONE); SetSpeedGear=static_cast(abs(cSpeedGear)); - if (SetSpeedGear>4) + if (SetSpeedGear>5) { - SetSpeedGear=4; + SetSpeedGear=5; } - else if (SetSpeedGear<1) + else if (SetSpeedGear<0) { - SetSpeedGear=1; + SetSpeedGear=0; } - SetSpeedGear=4-SetSpeedGear; + //SetSpeedGear=4-SetSpeedGear; if (cAxis==MACHINE_AXIS_R) { - if (g_machine.s_machine_config.motion.m_RotaryAxisNO==MACHINE_AXIS_X) + if (g_machine.s_machine_config.r_axis.m_RotaryAxisNO==MACHINE_AXIS_X) { SetAXIS=MACHINE_AXIS_X; } - else if (g_machine.s_machine_config.motion.m_RotaryAxisNO==MACHINE_AXIS_Y) + else if (g_machine.s_machine_config.r_axis.m_RotaryAxisNO==MACHINE_AXIS_Y) { SetAXIS=MACHINE_AXIS_Y; } - else if (g_machine.s_machine_config.motion.m_RotaryAxisNO==MACHINE_AXIS_Z) + else if (g_machine.s_machine_config.r_axis.m_RotaryAxisNO==MACHINE_AXIS_Z) { SetAXIS=MACHINE_AXIS_Z; } @@ -4344,7 +5178,7 @@ SSI_STATUS_MOTION CSO7_Proto::so7_motion_set_speed_xyz(EMACHINE_AXIS cAxis,char g_machine.s_machine_config.x_axis._speed_fresh[SetSpeedGear]=cRefreshCycle; g_machine.s_machine_config.x_axis._speed_slow_dis[SetSpeedGear]=dBufferDis; _send_cmd_SO7_CMD_SET_SPEED_PARAMETER(0,SetSpeedGear); - Sleep(MIN_SLEEP_TIME); + break; } case MACHINE_AXIS_Y: @@ -4355,7 +5189,7 @@ SSI_STATUS_MOTION CSO7_Proto::so7_motion_set_speed_xyz(EMACHINE_AXIS cAxis,char g_machine.s_machine_config.y_axis._speed_fresh[SetSpeedGear]=cRefreshCycle; g_machine.s_machine_config.y_axis._speed_slow_dis[SetSpeedGear]=dBufferDis; _send_cmd_SO7_CMD_SET_SPEED_PARAMETER(1,SetSpeedGear); - Sleep(MIN_SLEEP_TIME); + break; } case MACHINE_AXIS_Z: @@ -4366,7 +5200,7 @@ SSI_STATUS_MOTION CSO7_Proto::so7_motion_set_speed_xyz(EMACHINE_AXIS cAxis,char g_machine.s_machine_config.z_axis._speed_fresh[SetSpeedGear]=cRefreshCycle; g_machine.s_machine_config.z_axis._speed_slow_dis[SetSpeedGear]=dBufferDis; _send_cmd_SO7_CMD_SET_SPEED_PARAMETER(2,SetSpeedGear); - Sleep(MIN_SLEEP_TIME); + break; } case MACHINE_AXIS_ZOOM: @@ -4390,7 +5224,7 @@ SSI_STATUS_MOTION CSO7_Proto::so7_motion_set_speed_xyz(EMACHINE_AXIS cAxis,char g_machine.s_machine_config.zm_axis._speed._char_[0]=cStartSpeed; g_machine.s_machine_config.zm_axis._speed._char_[1]=cHoldSpeed; _send_cmd_SO7_CMD_SET_ZOOM_SPEED(SetSpeedGear); - Sleep(MIN_SLEEP_TIME); + break; } default:break; @@ -4416,49 +5250,144 @@ SSI_STATUS_MOTION CSO7_Proto::so7_motion_get_3D_max_speed(double &dMaxSpeed) return SSI_STATUS_MOTION_NORMAL; } +//======================================================================== +void CSO7_Proto::so7_motion_set_speed_accel_range() +{ + /********************************************************** + if (g_machine.FirmwareVer >= FirmwareVer_7_C) + { + g_machine.s_machine_config.x_axis._dMaxAccel = 255.0; + g_machine.s_machine_config.x_axis._dMinAccel = 0.0; + g_machine.s_machine_config.x_axis._dMaxSpeed = 50.0; + g_machine.s_machine_config.x_axis._dMinSpeed = 0.001; + + g_machine.s_machine_config.y_axis._dMaxAccel = 255.0; + g_machine.s_machine_config.y_axis._dMinAccel = 0.0; + g_machine.s_machine_config.y_axis._dMaxSpeed = 50.0; + g_machine.s_machine_config.y_axis._dMinSpeed = 0.001; + + g_machine.s_machine_config.z_axis._dMaxAccel = 255.0; + g_machine.s_machine_config.z_axis._dMinAccel = 0.0; + g_machine.s_machine_config.z_axis._dMaxSpeed = 50.0; + g_machine.s_machine_config.z_axis._dMinSpeed = 0.001; + } + else if (g_machine.FirmwareVer >= FirmwareVer_6_X) + { + g_machine.s_machine_config.x_axis._dMaxAccel = 100.0; + g_machine.s_machine_config.x_axis._dMinAccel = 0.0; + g_machine.s_machine_config.x_axis._dMaxSpeed = 3.0; + g_machine.s_machine_config.x_axis._dMinSpeed = 0.001; + + g_machine.s_machine_config.y_axis._dMaxAccel = 100.0; + g_machine.s_machine_config.y_axis._dMinAccel = 0.0; + g_machine.s_machine_config.y_axis._dMaxSpeed = 3.0; + g_machine.s_machine_config.y_axis._dMinSpeed = 0.001; + + g_machine.s_machine_config.z_axis._dMaxAccel = 100.0; + g_machine.s_machine_config.z_axis._dMinAccel = 0.0; + g_machine.s_machine_config.z_axis._dMaxSpeed = 3.0; + g_machine.s_machine_config.z_axis._dMinSpeed = 0.001; + } + else + { + g_machine.s_machine_config.x_axis._dMaxAccel = 255.0; + g_machine.s_machine_config.x_axis._dMinAccel = 0.0; + g_machine.s_machine_config.x_axis._dMaxSpeed = 255.0; + g_machine.s_machine_config.x_axis._dMinSpeed = 1.0; + + g_machine.s_machine_config.y_axis._dMaxAccel = 255.0; + g_machine.s_machine_config.y_axis._dMinAccel = 0.0; + g_machine.s_machine_config.y_axis._dMaxSpeed = 255.0; + g_machine.s_machine_config.y_axis._dMinSpeed = 1.0; + + g_machine.s_machine_config.z_axis._dMaxAccel = 255.0; + g_machine.s_machine_config.z_axis._dMinAccel = 0.0; + g_machine.s_machine_config.z_axis._dMaxSpeed = 255.0; + g_machine.s_machine_config.z_axis._dMinSpeed = 1.0; + } + **********************************************************/ + int xyz_gear(4); + + if (g_machine.FirmwareVer >= FirmwareVer_6_X) + { + g_machine.s_machine_config.x_axis._dMaxAccel = 1.0*(BYTE)g_machine.s_machine_config.x_axis._speed_base[xyz_gear]; + g_machine.s_machine_config.x_axis._dMinAccel = 0.0; + g_machine.s_machine_config.x_axis._dMaxSpeed = g_machine.s_machine_config.x_axis._speed_slow_dis[xyz_gear]; + g_machine.s_machine_config.x_axis._dMinSpeed = 0.001; + + g_machine.s_machine_config.y_axis._dMaxAccel = 1.0*(BYTE)g_machine.s_machine_config.y_axis._speed_base[xyz_gear]; + g_machine.s_machine_config.y_axis._dMinAccel = 0.0; + g_machine.s_machine_config.y_axis._dMaxSpeed = g_machine.s_machine_config.y_axis._speed_slow_dis[xyz_gear]; + g_machine.s_machine_config.y_axis._dMinSpeed = 0.001; + + g_machine.s_machine_config.z_axis._dMaxAccel = 1.0*(BYTE)g_machine.s_machine_config.z_axis._speed_base[xyz_gear]; + g_machine.s_machine_config.z_axis._dMinAccel = 0.0; + g_machine.s_machine_config.z_axis._dMaxSpeed = g_machine.s_machine_config.z_axis._speed_slow_dis[xyz_gear]; + g_machine.s_machine_config.z_axis._dMinSpeed = 0.001; + } + else + { + g_machine.s_machine_config.x_axis._dMaxAccel = 1.0*(BYTE)g_machine.s_machine_config.x_axis._speed_base[xyz_gear]; + g_machine.s_machine_config.x_axis._dMinAccel = 0.0; + g_machine.s_machine_config.x_axis._dMaxSpeed = 1.0*(BYTE)g_machine.s_machine_config.x_axis._speed_max[xyz_gear]; + g_machine.s_machine_config.x_axis._dMinSpeed = 1.0; + + g_machine.s_machine_config.y_axis._dMaxAccel = 1.0*(BYTE)g_machine.s_machine_config.y_axis._speed_base[xyz_gear]; + g_machine.s_machine_config.y_axis._dMinAccel = 0.0; + g_machine.s_machine_config.y_axis._dMaxSpeed = 1.0*(BYTE)g_machine.s_machine_config.y_axis._speed_max[xyz_gear]; + g_machine.s_machine_config.y_axis._dMinSpeed = 1.0; + + g_machine.s_machine_config.z_axis._dMaxAccel = 1.0*(BYTE)g_machine.s_machine_config.z_axis._speed_base[xyz_gear]; + g_machine.s_machine_config.z_axis._dMinAccel = 0.0; + g_machine.s_machine_config.z_axis._dMaxSpeed = 1.0*(BYTE)g_machine.s_machine_config.z_axis._speed_max[xyz_gear]; + g_machine.s_machine_config.z_axis._dMinSpeed = 1.0; + } + +} + //======================================================================== SSI_STATUS_MOTION CSO7_Proto::so7_motion_set_all_speed_para() { - _send_cmd_SO7_CMD_SET_SPEED_PARAMETER(0,0); - Sleep(MIN_SLEEP_TIME); + _send_cmd_SO7_CMD_SET_SPEED_PARAMETER(0, 0); + _send_cmd_SO7_CMD_SET_SPEED_PARAMETER(0,1); - Sleep(MIN_SLEEP_TIME); + _send_cmd_SO7_CMD_SET_SPEED_PARAMETER(0,2); - Sleep(MIN_SLEEP_TIME); + _send_cmd_SO7_CMD_SET_SPEED_PARAMETER(0,3); - Sleep(MIN_SLEEP_TIME); + _send_cmd_SO7_CMD_SET_SPEED_PARAMETER(0,4); - Sleep(MIN_SLEEP_TIME); + _send_cmd_SO7_CMD_SET_SPEED_PARAMETER(1,0); - Sleep(MIN_SLEEP_TIME); + _send_cmd_SO7_CMD_SET_SPEED_PARAMETER(1,1); - Sleep(MIN_SLEEP_TIME); + _send_cmd_SO7_CMD_SET_SPEED_PARAMETER(1,2); - Sleep(MIN_SLEEP_TIME); + _send_cmd_SO7_CMD_SET_SPEED_PARAMETER(1,3); - Sleep(MIN_SLEEP_TIME); + _send_cmd_SO7_CMD_SET_SPEED_PARAMETER(1,4); - Sleep(MIN_SLEEP_TIME); + _send_cmd_SO7_CMD_SET_SPEED_PARAMETER(2,0); - Sleep(MIN_SLEEP_TIME); + _send_cmd_SO7_CMD_SET_SPEED_PARAMETER(2,1); - Sleep(MIN_SLEEP_TIME); + _send_cmd_SO7_CMD_SET_SPEED_PARAMETER(2,2); - Sleep(MIN_SLEEP_TIME); + _send_cmd_SO7_CMD_SET_SPEED_PARAMETER(2,3); - Sleep(MIN_SLEEP_TIME); + _send_cmd_SO7_CMD_SET_SPEED_PARAMETER(2,4); - Sleep(MIN_SLEEP_TIME); + _send_cmd_SO7_CMD_SET_SPEED_PRECISION(0); - Sleep(MIN_SLEEP_TIME); + _send_cmd_SO7_CMD_SET_SPEED_PRECISION(1); - Sleep(MIN_SLEEP_TIME); + _send_cmd_SO7_CMD_SET_SPEED_PRECISION(2); - Sleep(MIN_SLEEP_TIME); + _send_cmd_SO7_CMD_SET_MOTOR_SPEED_WHEELBASE_PARAMETER(); - Sleep(MIN_SLEEP_TIME); + return SSI_STATUS_MOTION_NORMAL; } //======================================================================== @@ -4491,11 +5420,7 @@ SSI_STATUS_MOTION CSO7_Proto::so7_motion_get_all_speed_para() //======================================================================== SSI_STATUS_MOTION CSO7_Proto::_calculate_straightline_motion(double dSpeedMM) { - CString csAppPath; - GetAppPath(csAppPath); - CString csSO7ConfigFile = csAppPath + _T("\\Utility_config.ini"); - Load_SevenOcean_Inifile(csSO7ConfigFile); - + Load_So7_Motion_Config(); g_machine.s_machine_config.x_axis._speed_max[0]=static_cast(g_machine.s_machine_config.x_axis._speed_max[0]*dSpeedMM); g_machine.s_machine_config.y_axis._speed_max[0]=static_cast(g_machine.s_machine_config.y_axis._speed_max[0]*dSpeedMM); g_machine.s_machine_config.z_axis._speed_max[0]=static_cast(g_machine.s_machine_config.z_axis._speed_max[0]*dSpeedMM); @@ -4592,7 +5517,7 @@ SSI_STATUS_MOTION CSO7_Proto::so7_light_set_light_off() g_machine.s_lights_value.segment[0]=0; g_machine.s_lights_value.segment[1]=0; _send_cmd_SO7_CMD_SET_ALL_LIGHT_VALUE(); - Sleep(3*MIN_SLEEP_TIME); + Sleep(50); return SSI_STATUS_MOTION_NORMAL; }; @@ -4603,8 +5528,14 @@ SSI_STATUS_MOTION CSO7_Proto::so7_light_set_light() WaitForSingleObject(g_hHomedEvent, INFINITE); // machine start and homing is done _send_cmd_SO7_CMD_SET_ALL_LIGHT_VALUE(); - Sleep(3*MIN_SLEEP_TIME); - + Sleep(50); + if (g_so7_config.m_bDebugOutputEnable >= 1) + { + g_pLogger->SendAndFlushWithTime(_T("so7_light_set_lamp_state:TOP:%d,BOT:%d,COAXIAL:%d,RESERVED:%d,RING:%d,ORING:%d,IRING:%d.\n") + , (BYTE)g_machine.s_lights_value._top_light, (BYTE)g_machine.s_lights_value._bottom_light, (BYTE)g_machine.s_lights_value._coaxial_light + , (BYTE)g_machine.s_lights_value._spare_light1, (BYTE)g_machine.s_lights_value._ring_light, (BYTE)g_machine.s_lights_value.segment[0] + , (BYTE)g_machine.s_lights_value.segment[1]); + } return SSI_STATUS_MOTION_NORMAL; }; @@ -4620,8 +5551,8 @@ SSI_STATUS_MOTION CSO7_Proto::so7_light_set_lamp_state(double dTopLightPercent,d g_machine.s_lights_value.segment[0] = cOuterRingLightSwitch; g_machine.s_lights_value.segment[1] = cInnerRingLightSwitch; _send_cmd_SO7_CMD_SET_ALL_LIGHT_VALUE(); - Sleep(3*MIN_SLEEP_TIME); - if (g_machine.s_machine_config.motion.m_DebugOutputEnable>=1) + Sleep(50); + if (g_so7_config.m_bDebugOutputEnable>=1) { g_pLogger->SendAndFlushWithTime(_T("so7_light_set_lamp_state:TOP:%d,BOT:%d,COAXIAL:%d,RESERVED:%d,RING:%d,ORING:%d,IRING:%d.\n") ,(BYTE)g_machine.s_lights_value._bottom_light,(BYTE)g_machine.s_lights_value._top_light,(BYTE)g_machine.s_lights_value._coaxial_light @@ -4639,32 +5570,32 @@ SSI_STATUS_MOTION CSO7_Proto::so7_GetDIO(int Channel,BYTE& bDISts) switch(Channel) { case INPORT_J2: - { - Addr=ESO7_CONTROLLER_INPUT_PORT_ADDR; - break; - } - case OUTPORT_J1: - { - Addr=ESO7_CONTROLLER_WOUTPUT_PORT_ADDR; - break; - } - case OUTPORT_J3: - { - Addr=ESO7_CONTROLLER_OUTPUT_PORT_ADDR; - break; - } - case LIMIT_SWITCH_J4: - { - Addr=ESO7_CONTROLLER_LIMIT_SWITCH_ADDR; - break; - } - default: - { - Addr=-1; - break; - } + { + Addr = ESO7_CONTROLLER_INPUT_PORT_ADDR; + break; } - if (Addr>=0) + case OUTPORT_J1: + { + Addr = ESO7_CONTROLLER_WOUTPUT_PORT_ADDR; + break; + } + case OUTPORT_J3: + { + Addr = ESO7_CONTROLLER_OUTPUT_PORT_ADDR; + break; + } + case LIMIT_SWITCH_J4: + { + Addr = ESO7_CONTROLLER_LIMIT_SWITCH_ADDR; + break; + } + default: + { + Addr = -1; + break; + } + } + if (Addr >= 0) { _send_cmd_SO7_CMD_READ_INPUT_PORT_STATUS(Addr); bDISts=static_cast(g_machine.InPortStatus); @@ -4843,35 +5774,92 @@ SSI_STATUS_MOTION CSO7_Proto::so7_SetDO(int Channel,BYTE bDOSts) SSI_STATUS_MOTION CSO7_Proto::so7_motion_set_trig_para(char _cAxis,char _TrigMode,long _ParaNumber,long* _ParaData) { - long SetStartIndex(0); - long SetParaNumber(0); - if (_TrigMode==E_DIS_TRIG_PULSE_EQDIS) + if (g_machine.FirmwareVer >= FirmwareVer_7_X) { - SetParaNumber=_ParaNumber; - _send_cmd_SO7_CMD_WRITE_TRIG_PULSE_PARA(_cAxis,_TrigMode,SetStartIndex,SetParaNumber,_ParaData); - } - else if (_TrigMode==E_DIS_TRIG_PULSE_EQDIS_II) - { - SetParaNumber=_ParaNumber; - _send_cmd_SO7_CMD_WRITE_TRIG_PULSE_PARA(_cAxis,_TrigMode,SetStartIndex,SetParaNumber,_ParaData); - } - else - { - do + long SetStartIndex(0); + long SetParaNumber(0); + if (_TrigMode == E_DIS_TRIG_PULSE_EQDIS) { - if ((_ParaNumber-SetStartIndex)>15) + SetParaNumber = _ParaNumber; + _send_cmd_SO7_CMD_WRITE_TRIG_PULSE_PARA(_cAxis, _TrigMode, SetStartIndex, SetParaNumber, _ParaData); + } + else if (_TrigMode == E_DIS_TRIG_PULSE_EQDIS_II) + { + SetParaNumber = _ParaNumber; + _send_cmd_SO7_CMD_WRITE_TRIG_PULSE_PARA(_cAxis, _TrigMode, SetStartIndex, SetParaNumber, _ParaData); + } + else + { + do { - SetParaNumber=15; - } + if ((_ParaNumber - SetStartIndex) > 15) + { + SetParaNumber = 15; + } + else + { + SetParaNumber = (_ParaNumber - SetStartIndex); + } + _send_cmd_SO7_CMD_WRITE_TRIG_PULSE_PARA(_cAxis, _TrigMode, SetStartIndex, SetParaNumber, _ParaData); + SetStartIndex += SetParaNumber; + } while ((_ParaNumber - SetStartIndex) > 0); + } + + if (g_so7_config.m_bDebugOutputEnable >= 1) + { + TCHAR cLogBuffer[1024] = { 0 }; + int iLogBufSize(0); + iLogBufSize = wcslen(cLogBuffer); + wcscpy_s(&cLogBuffer[iLogBufSize], 1024 - iLogBufSize, L"[Motion_Set_ExternalTrigPara] "); + iLogBufSize = wcslen(cLogBuffer); + if (_cAxis == E_AXIS_X) + { + wcscpy_s(&cLogBuffer[iLogBufSize], 1024 - iLogBufSize, L"Axis=X,"); + } + else if (_cAxis == E_AXIS_Y) + { + wcscpy_s(&cLogBuffer[iLogBufSize], 1024 - iLogBufSize, L"Axis=Y,"); + } else { - SetParaNumber=(_ParaNumber-SetStartIndex); + wcscpy_s(&cLogBuffer[iLogBufSize], 1024 - iLogBufSize, L"Axis=Z,"); } - _send_cmd_SO7_CMD_WRITE_TRIG_PULSE_PARA(_cAxis,_TrigMode,SetStartIndex,SetParaNumber,_ParaData); - SetStartIndex+=SetParaNumber; - } while ((_ParaNumber-SetStartIndex)>0); + iLogBufSize = wcslen(cLogBuffer); + if (_TrigMode == E_DIS_TRIG_PULSE_SPEC_LOCA) + { + wcscpy_s(&cLogBuffer[iLogBufSize], 1024 - iLogBufSize, L"Trig Mode=SPEC_LOCA,"); + } + else if (_TrigMode == E_DIS_TRIG_PULSE_EQDIS_II) + { + wcscpy_s(&cLogBuffer[iLogBufSize], 1024 - iLogBufSize, L"Trig Mode=EQDIS_II,"); + } + else + { + wcscpy_s(&cLogBuffer[iLogBufSize], 1024 - iLogBufSize, L"Trig Mode=EQDIS,"); + } + iLogBufSize = wcslen(cLogBuffer); + swprintf_s(&cLogBuffer[iLogBufSize], 1024 - iLogBufSize, L"Trig Pnts=%d", _ParaNumber); + for (int i = 0; i < _ParaNumber; i++) + { + iLogBufSize = wcslen(cLogBuffer); + if (iLogBufSize < 1000) + swprintf_s(&cLogBuffer[iLogBufSize], 1024 - iLogBufSize, L",Trig Dis[%d]=%d", i, _ParaData[i]); + else + break; + } + iLogBufSize = wcslen(cLogBuffer); + cLogBuffer[iLogBufSize++] = '.'; + cLogBuffer[iLogBufSize++] = '\n'; + cLogBuffer[iLogBufSize++] = 0; + g_pLogger->SendAndFlushWithTime(cLogBuffer); + } + + return SSI_STATUS_MOTION_NORMAL; + } + else + { + return SSI_STATUS_MOTION_NOT_SUPPORTED; } - return SSI_STATUS_MOTION_NORMAL; } SSI_STATUS_MOTION CSO7_Proto::so7_motion_get_trig_para(long _Index,char& _cAxis,char& _TrigMode,long& _ParaNumber,long& _ParaData) @@ -4901,7 +5889,7 @@ SSI_STATUS_MOTION CSO7_Proto::_send_cmd_SO7_CMD_MOVE_X(char SpeedGear) *(ep_buff[EP_02_CMD_IDX]._buffer+2) = SpeedGear; TRACE1("[MOVE_X]:%d\n",static_cast(SpeedGear)); - if (g_machine.s_machine_config.motion.m_DebugOutputEnable>=1) + if (g_so7_config.m_bDebugOutputEnable>=1) { g_pLogger->SendAndFlushWithTime(_T("Jog X:%d.\n"),SpeedGear); } @@ -4925,7 +5913,7 @@ SSI_STATUS_MOTION CSO7_Proto::_send_cmd_SO7_CMD_MOVE_Y(char SpeedGear) *(ep_buff[EP_02_CMD_IDX]._buffer+2) = SpeedGear; TRACE1("[MOVE_Y]:%d\n",static_cast(SpeedGear)); - if (g_machine.s_machine_config.motion.m_DebugOutputEnable>=1) + if (g_so7_config.m_bDebugOutputEnable>=1) { g_pLogger->SendAndFlushWithTime(_T("Jog Y:%d.\n"),SpeedGear); } @@ -4949,7 +5937,7 @@ SSI_STATUS_MOTION CSO7_Proto::_send_cmd_SO7_CMD_MOVE_Z(char SpeedGear) *(ep_buff[EP_02_CMD_IDX]._buffer+2) = SpeedGear; TRACE1("[MOVE_Z]:%d\n",static_cast(SpeedGear)); - if (g_machine.s_machine_config.motion.m_DebugOutputEnable>=1) + if (g_so7_config.m_bDebugOutputEnable>=1) { g_pLogger->SendAndFlushWithTime(_T("Jog Z:%d.\n"),SpeedGear); } @@ -4998,6 +5986,7 @@ SSI_STATUS_MOTION CSO7_Proto::_send_cmd_SO7_CMD_STOP_MOVE_XYZ() g_hEP02_Thread_State=THREAD_RUNNING_STATE2; _do_single_threaded_usb_comm(EP_02_CMD_IDX); + g_machine.s_status._bXYZZMIdle=true; ReleaseMutex(g_hEP02_Serial_Mutex); return SSI_STATUS_MOTION_NORMAL; }; @@ -5466,8 +6455,8 @@ SSI_STATUS_MOTION CSO7_Proto::_send_cmd_SO7_CMD_SET_ALL_LIGHT_VALUE() pSO7_CMD_02->s_SO7_CMD_SET_LIGHT._ring_light =g_machine.s_lights_value._ring_light; pSO7_CMD_02->s_SO7_CMD_SET_LIGHT._coaxial_light =g_machine.s_lights_value._coaxial_light; pSO7_CMD_02->s_SO7_CMD_SET_LIGHT._spare_light1 =g_machine.s_lights_value._spare_light1; - pSO7_CMD_02->s_SO7_CMD_SET_LIGHT._outer_ring_light_switch =g_machine.s_lights_value.segment[0]; - pSO7_CMD_02->s_SO7_CMD_SET_LIGHT._inner_ring_light_switch =g_machine.s_lights_value.segment[1]; + pSO7_CMD_02->s_SO7_CMD_SET_LIGHT._outer_ring_light_switch =g_machine.s_lights_value.segment[1]; + pSO7_CMD_02->s_SO7_CMD_SET_LIGHT._inner_ring_light_switch =g_machine.s_lights_value.segment[0]; pSO7_CMD_02->s_SO7_CMD_SET_LIGHT.uEndCmdByte =(BYTE)0xB1; ep_buff[EP_02_CMD_IDX]._size = 0x0B; @@ -5576,9 +6565,9 @@ SSI_STATUS_MOTION CSO7_Proto::_send_cmd_SO7_CMD_COMMON_COMMAND_DATA(char Cmd,cha WaitForSingleObject(g_hEP02_Serial_Mutex, INFINITE); memset(ep_buff[EP_02_CMD_IDX]._buffer, 0x00, MAX_BUFF_SIZE); - if (g_machine.s_machine_config.motion.m_DebugOutputEnable>=1) + if (g_so7_config.m_bDebugOutputEnable>=1) { - g_pLogger->SendAndFlushWithTime(_T("SEND_SYS_COMMAND:Cmd:%d,BOT:%d,SubCmd:%d,Type:%d,Data:%d.\n") + g_pLogger->SendAndFlushWithTime(_T("SEND_SYS_COMMAND:Cmd:%d,SubCmd:%d,Type:%d,Data:%d.\n") ,Cmd,SubCmd,Type,Data); } @@ -6308,37 +7297,43 @@ SSI_STATUS_MOTION CSO7_Proto::_send_cmd_SO7_CMD_WRITE_TRIG_PULSE_PARA(char Activ //============================================================== SSI_STATUS_MOTION CSO7_Proto::_send_cmd_SO7_CMD_TRIG_PULSE_START() { - WaitForSingleObject(g_hEP02_Serial_Mutex, INFINITE); - memset(ep_buff[EP_02_CMD_IDX]._buffer, 0x00, MAX_BUFF_SIZE); + if (g_machine.FirmwareVer >= FirmwareVer_7_X) + { + WaitForSingleObject(g_hEP02_Serial_Mutex, INFINITE); + memset(ep_buff[EP_02_CMD_IDX]._buffer, 0x00, MAX_BUFF_SIZE); - *(ep_buff[EP_02_CMD_IDX]._buffer) = CT_DATA; - *(ep_buff[EP_02_CMD_IDX]._buffer+1) = CT_START_TRIG_PULSE; - *(ep_buff[EP_02_CMD_IDX]._buffer+2)=g_machine.TrigPara.TrigPulseActiveAxis; + *(ep_buff[EP_02_CMD_IDX]._buffer) = CT_DATA; + *(ep_buff[EP_02_CMD_IDX]._buffer + 1) = CT_START_TRIG_PULSE; + *(ep_buff[EP_02_CMD_IDX]._buffer + 2) = g_machine.TrigPara.TrigPulseActiveAxis; - ep_buff[EP_02_CMD_IDX]._size = 0x03; - ep_buff[EP_81_DATA_IDX]._size = 0x00; + ep_buff[EP_02_CMD_IDX]._size = 0x03; + ep_buff[EP_81_DATA_IDX]._size = 0x00; - g_hEP02_Thread_State=THREAD_RUNNING_STATE2; - _do_single_threaded_usb_comm(EP_02_CMD_IDX); - ReleaseMutex(g_hEP02_Serial_Mutex); + g_hEP02_Thread_State = THREAD_RUNNING_STATE2; + _do_single_threaded_usb_comm(EP_02_CMD_IDX); + ReleaseMutex(g_hEP02_Serial_Mutex); + } return SSI_STATUS_MOTION_NORMAL; } //============================================================== SSI_STATUS_MOTION CSO7_Proto::_send_cmd_SO7_CMD_TRIG_PULSE_STOP() { - WaitForSingleObject(g_hEP02_Serial_Mutex, INFINITE); - memset(ep_buff[EP_02_CMD_IDX]._buffer, 0x00, MAX_BUFF_SIZE); + if (g_machine.FirmwareVer >= FirmwareVer_7_X) + { + WaitForSingleObject(g_hEP02_Serial_Mutex, INFINITE); + memset(ep_buff[EP_02_CMD_IDX]._buffer, 0x00, MAX_BUFF_SIZE); - *(ep_buff[EP_02_CMD_IDX]._buffer) = CT_DATA; - *(ep_buff[EP_02_CMD_IDX]._buffer+1) = CT_STOP_TRIG_PULSE; - *(ep_buff[EP_02_CMD_IDX]._buffer+2)=g_machine.TrigPara.TrigPulseActiveAxis; + *(ep_buff[EP_02_CMD_IDX]._buffer) = CT_DATA; + *(ep_buff[EP_02_CMD_IDX]._buffer + 1) = CT_STOP_TRIG_PULSE; + *(ep_buff[EP_02_CMD_IDX]._buffer + 2) = g_machine.TrigPara.TrigPulseActiveAxis; - ep_buff[EP_02_CMD_IDX]._size = 0x03; - ep_buff[EP_81_DATA_IDX]._size = 0x00; + ep_buff[EP_02_CMD_IDX]._size = 0x03; + ep_buff[EP_81_DATA_IDX]._size = 0x00; - g_hEP02_Thread_State=THREAD_RUNNING_STATE2; - _do_single_threaded_usb_comm(EP_02_CMD_IDX); - ReleaseMutex(g_hEP02_Serial_Mutex); + g_hEP02_Thread_State = THREAD_RUNNING_STATE2; + _do_single_threaded_usb_comm(EP_02_CMD_IDX); + ReleaseMutex(g_hEP02_Serial_Mutex); + } return SSI_STATUS_MOTION_NORMAL; } //============================================================== @@ -6859,9 +7854,16 @@ SSI_STATUS_MOTION CSO7_Proto::_process_SO7_CMD_READ_FIRMWARE_VERSION_INFO() } else if (g_machine.FirmwareInfo[3]=='7') { - if (g_machine.FirmwareInfo[5]=='1') + if (g_machine.FirmwareInfo[5] == '1') { - g_machine.FirmwareVer=FirmwareVer_7_A; + if (g_machine.FirmwareInfo[6] >= '2') + { + g_machine.FirmwareVer = FirmwareVer_7_C; + } + else + { + g_machine.FirmwareVer = FirmwareVer_7_A; + } } else if (g_machine.FirmwareInfo[5]=='0' && g_machine.FirmwareInfo[6]=='9' ) { @@ -6876,6 +7878,7 @@ SSI_STATUS_MOTION CSO7_Proto::_process_SO7_CMD_READ_FIRMWARE_VERSION_INFO() { g_machine.FirmwareVer=FirmwareVer_8_X; } + else if (g_machine.FirmwareInfo[3]=='9') { g_machine.FirmwareVer=FirmwareVer_9_X; @@ -6984,4 +7987,152 @@ SSI_STATUS_MOTION CSO7_Proto::_process_SO7_CMD_GET_MOTION_SEGMENT_DIS(BYTE axis_ g_machine.s_machine_config.z_axis._MotionSegmentDis[_SegmentIndex]=rBuffer[0]*65536+rBuffer[1]*256+rBuffer[2]; } return SSI_STATUS_MOTION_NORMAL; +} + +void CSO7_Proto::so7_load_ef1a_config(int _LoadType) +{ + FILE *hConfigFile = NULL; + char szLine[MAX_BUFF_SIZE]; + char *token = NULL; + char seps[] = " =,\t\n"; + char cTemp[100]={0}; + CString csAppPath; + GetAppPath(csAppPath); + CString csSO7ConfigFile(_T("")); + if (_LoadType==1) + { + csSO7ConfigFile=csAppPath+_T("\\so7_config.ini"); + } + if (_LoadType==2) + { + + csSO7ConfigFile = csAppPath + _T("\\Config\\so7_config.ini"); + } + else + { + csSO7ConfigFile=csAppPath+_T("\\So7Config_Utility.ini"); + } + _wfopen_s(&hConfigFile,csSO7ConfigFile,_T("rt")); + if(hConfigFile) + { + while (!feof(hConfigFile)) + { + fgets(szLine, MAX_BUFF_SIZE, hConfigFile);//read a line + if ((szLine[0] != ';') && (strlen(szLine) > 2)) + { + token = strtok(szLine, seps); + //===============AUTO ZOOM================== + if (!_stricmp(token, "IS_USER_EF1A_CONTROLLER")) + { + token = strtok(NULL, seps); + if (token) + { + strcpy_s(cTemp, 20, token); + int nIsUserEF1A = atoi(cTemp); + isEF1AController = nIsUserEF1A >= 1 ? true:false; + } + } + } + } + fclose(hConfigFile); + } +} + +SSI_STATUS_MOTION CSO7_Proto::_process_SO7_CMD_GET_EXTRA_IO_STATUS() +{ + g_machine.cIOStatus = *(ep_buff[EP_82_DATA_IDX]._buffer); + return SSI_STATUS_MOTION_NORMAL; +} + +SSI_STATUS_MOTION CSO7_Proto::_process_SO7_CMD_SET_EXTRA_IO_STATUS() +{ + return SSI_STATUS_MOTION_NORMAL; +} + +SSI_STATUS_MOTION CSO7_Proto::_send_cmd_SO7_CMD_SET_EXTRA_IO(int nIONmmber,char bValue) +{ + WaitForSingleObject(g_hEP02_Serial_Mutex, INFINITE); + memset(ep_buff[EP_02_CMD_IDX]._buffer, 0x00, MAX_BUFF_SIZE); + + *(ep_buff[EP_02_CMD_IDX]._buffer) = CT_DATA; + + *(ep_buff[EP_02_CMD_IDX]._buffer+1) = CT_WRITE_EXTRA_IO; + *(ep_buff[EP_02_CMD_IDX]._buffer+2) = nIONmmber; + *(ep_buff[EP_02_CMD_IDX]._buffer+3) = bValue; + + ep_buff[EP_02_CMD_IDX]._size = 0x08; + ep_buff[EP_81_DATA_IDX]._size = 0x00; + + g_hEP02_Thread_State=THREAD_RUNNING_STATE2; + _do_single_threaded_usb_comm(EP_02_CMD_IDX); + ReleaseMutex(g_hEP02_Serial_Mutex); + return SSI_STATUS_MOTION_NORMAL; +} + +SSI_STATUS_MOTION CSO7_Proto::_send_cmd_SO7_CMD_GET_EXTRA_IO(int nIONumber) +{ + WaitForSingleObject(g_hEP02_Serial_Mutex, INFINITE); + memset(ep_buff[EP_02_CMD_IDX]._buffer, 0x00, MAX_BUFF_SIZE); + + *(ep_buff[EP_02_CMD_IDX]._buffer) = CT_DATA; + *(ep_buff[EP_02_CMD_IDX]._buffer+1) = CT_READ_EXTRA_IO; + *(ep_buff[EP_02_CMD_IDX]._buffer+2)=nIONumber; + + ep_buff[EP_02_CMD_IDX]._size = 0x05; + ep_buff[EP_82_DATA_IDX]._size = 0x08; + + g_hEP02_Thread_State=THREAD_RUNNING_STATE1; + g_hEP8x_Thread_State=THREAD_RUNNING_STATE2; + _do_single_threaded_usb_comm(EP_02_CMD_IDX); + ReleaseMutex(g_hEP02_Serial_Mutex); + return SSI_STATUS_MOTION_NORMAL; +} + +SSI_STATUS_MOTION CSO7_Proto::_process_SO7_CMD_GET_MOTION_TYPE() +{ + g_machine.bMotionType = *(ep_buff[EP_82_DATA_IDX]._buffer); + return SSI_STATUS_MOTION_NORMAL; +} + +SSI_STATUS_MOTION CSO7_Proto::_process_SO7_CMD_SET_MOTION_TYPE() +{ + return SSI_STATUS_MOTION_NORMAL; +} + +SSI_STATUS_MOTION CSO7_Proto::_send_cmd_SO7_CMD_SET_MOTION_TYPE(BOOL type) +{ + WaitForSingleObject(g_hEP02_Serial_Mutex, INFINITE); + memset(ep_buff[EP_02_CMD_IDX]._buffer, 0x00, MAX_BUFF_SIZE); + + *(ep_buff[EP_02_CMD_IDX]._buffer) = CT_DATA; + + *(ep_buff[EP_02_CMD_IDX]._buffer+1) = CT_WRITE_MOTION_TYPE; + *(ep_buff[EP_02_CMD_IDX]._buffer+2) = type; + + ep_buff[EP_02_CMD_IDX]._size = 0x08; + ep_buff[EP_81_DATA_IDX]._size = 0x00; + + g_hEP02_Thread_State=THREAD_RUNNING_STATE2; + _do_single_threaded_usb_comm(EP_02_CMD_IDX); + ReleaseMutex(g_hEP02_Serial_Mutex); + return SSI_STATUS_MOTION_NORMAL; +} + +SSI_STATUS_MOTION CSO7_Proto::_send_cmd_SO7_CMD_GET_MOTION_TYPE() +{ + WaitForSingleObject(g_hEP02_Serial_Mutex, INFINITE); + memset(ep_buff[EP_02_CMD_IDX]._buffer, 0x00, MAX_BUFF_SIZE); + + *(ep_buff[EP_02_CMD_IDX]._buffer) = CT_DATA; + + *(ep_buff[EP_02_CMD_IDX]._buffer+1) = CT_READ_MOTION_TYPE; + + ep_buff[EP_02_CMD_IDX]._size = 0x05; + ep_buff[EP_82_DATA_IDX]._size = 0x08; + + g_hEP02_Thread_State=THREAD_RUNNING_STATE1; + g_hEP8x_Thread_State=THREAD_RUNNING_STATE2; + _do_single_threaded_usb_comm(EP_02_CMD_IDX); + ReleaseMutex(g_hEP02_Serial_Mutex); + return SSI_STATUS_MOTION_NORMAL; } \ No newline at end of file diff --git a/PcDmis/Base/Interfac/Msi/Hsi/SevenOcean/SO7_Proto.h b/PcDmis/Base/Interfac/Msi/Hsi/SevenOcean/SO7_Proto.h index 4af65e0..dc20efe 100644 --- a/PcDmis/Base/Interfac/Msi/Hsi/SevenOcean/SO7_Proto.h +++ b/PcDmis/Base/Interfac/Msi/Hsi/SevenOcean/SO7_Proto.h @@ -11,7 +11,7 @@ #include "..\Tools\UsbUtility\logger.h" #include "CMD_H.h" #include "..\..\..\..\..\ThirdParty\UsbSupport\LibUsb_Win\Include\lusb0_usb.h" -#include "..\Tools\UsbUtility\MachineInterfaceDll\MachineInterfaceDll.h" +#include "SO7_Proto_Def.h" #define MAX_BUFF_SIZE 0x200 @@ -69,6 +69,8 @@ const long MAX_INTENSITY = 0x3FF; #define MAXLIGHTVALUE 255 #define MINLIGHTVALUE 1 +const double SCALE_UNITS = 1000.0; + enum EMACHINETYPE { MACHINE_SO7_CONTROLLER, @@ -82,6 +84,7 @@ enum EFirmwareVer FirmwareVer_7_X, FirmwareVer_7_9,//add control mode FirmwareVer_7_A,//add segment dis + FirmwareVer_7_C,//different speed para FirmwareVer_8_X, FirmwareVer_9_X, FirmwareVer_Total @@ -157,23 +160,34 @@ typedef struct s_so7_axis // axis parameters } SO7AXIS; struct s_so7_axis_config // axis configuration { - double _motor_precision;//set precision - double _motor_wheelbase;//set wheelbase - char _speed_base[5]; - char _speed_fresh[5]; - char _speed_start[5]; - char _speed_max[5]; - double _speed_slow_dis[5]; + double _motor_precision;//set precision + double _motor_wheelbase;//set wheelbase + char _speed_base[5]; + char _speed_fresh[5]; + char _speed_start[5]; + char _speed_max[5]; + double _speed_slow_dis[5]; double _MoveToSpeed[2]; double _MotionSpeedScale; long _MotionSegmentDis[3]; - long _scale_range; - double _neg_working_limit; - double _pos_working_limit; + long _scale_range; + double _neg_working_limit; + double _pos_working_limit; double _scale_resolution; - bool _bhomed; + bool _bhomed; + + double _dMinSpeed; + double _dMaxSpeed; + double _dMinAccel; + double _dMaxAccel; +}; +struct s_so7_R_axis_config // rotary configuration +{ + INT m_RotaryAxisNO; + double m_RotaryCircleDis; + double m_RotaryCirclePulse; }; struct s_so7_zm_axis_config // zm configuration { @@ -200,11 +214,21 @@ struct s_so7_zm_axis_config // zm configuration }; struct s_so7_machine_interface_config { - BOOL _EnCloseLoop; - int _RetryTimes; - double _ShiftPositionX; - double _ShiftPositionY; - double _ShiftPositionZ; + //=====MOTION===================== + double m_DestinationX; + double m_DestinationY; + double m_DestinationZ; + double m_PrecisionX; + double m_PrecisionY; + double m_PrecisionZ; + int m_RetryTimes; + int m_MotionRetryCnt; + double m_ShiftPositionX; + double m_ShiftPositionY; + double m_ShiftPositionZ; + + BOOL m_EnCloseLoop; + char m_MotionType; char GetInterruptMsgMethod; INT m_WriteDataSleepTime; INT m_AccuraErrPulseX; @@ -213,20 +237,91 @@ struct s_so7_machine_interface_config INT m_EQUIDIS_X; INT m_EQUIDIS_Y; INT m_EQUIDIS_Z; + INT m_FirmWareVersion; INT m_CNC_Deadlock_Solution; INT m_CNC_Deadlock_JudgeMaxCnts; INT m_TouchProbeEnable; INT m_FootSwitchEnable; - INT m_JoyStickEnable; + INT m_bJoyStickEnable; + INT m_bTrigIOEnable; + INT m_iTrigHoldTimeCnts; + INT m_iMotionStartCnts[5]; + INT m_iMotionStopCnts[5]; + INT m_DeviceSleepTime; + INT m_iHomeMode; INT m_STIL_CCS_PRIMA_Enable; - INT m_DebugOutputEnable; - INT m_SDK3000_CntThreadSleepVal; - INT m_SV4000E_DenoisePara[4]; - INT m_MachineType; - INT m_VideoCardType; - INT m_RotaryAxisNO; - double m_RotaryCircleDis; - double m_RotaryCirclePulse; + INT m_ART_PCI8622_Enable; + INT m_bMoveToEnable; + INT m_bMoveToCount; + INT m_bDebugOutputEnable; + double m_AxisResolution[3]; + //===PROBE SYSTEM========= + INT m_bOptexCD5Enable; + INT m_iOptexCD5ComPort; + INT m_iOptexCD5BaudRate; + INT m_iLJVSleepTime; + INT m_iLJGSleepTime; + //===ILLUMINATION========= + INT m_iSo7IllumType; + INT m_iSo7IllumComPort; + INT m_iSo7IllumBaudRate; + INT m_iSo7IllumResponseTime; + INT m_iSo7DoubleSurface; + + //===VIDEOCARD====== + int m_IsVideocardVacant; + INT m_CntThreadSleepVal; + INT m_SV4000E_DenoisePara[4]; + //===NavitarAutoZoom====== + int m_ZoomType; //scf + int Navitar_Precision; + int Navitar_SerialComPort; + double Navitar_ZoomStartPos; + double Navitar_ZoomEndPos; + double Navitar_ZoomOrgPos; + double Navitar_ZoomDeadband; + double Navitar_ZoomScale; + int Navitar_iReadingInterval; + short Navitar_MotorSpeedFast; + short Navitar_MotorSpeedSlow; + int Navitar_Motor_GoHomeV; + double Navitar_ZoomBackPos; + int Navitar_SleepTime; + int Navitar_Timeout; + int Navitar_ZoomPosSpeed; + int Navitar_ZoomPosSpeed_Accurate; + int Navitar_ZoomFinishPos; + int Navitar_ZoomFinishCnts; + + int SerialComPort; + double ZoomStartPos; + double ZoomEndPos; + double ZoomOrgPos; + double ZoomDeadband; + double ZoomScale; + int iReadingInterval; + short MotorSpeedFast; + short MotorSpeedSlow; + //=========MSI====== + int m_MachineType; + int m_VideoCardType; + + BOOL m_EnJudgeMotionStatus; + BOOL m_DisableControllerMotionStatus; + + //===TEMPERATURE========= + INT m_iSo7TempSensorEnable; + INT m_iSo7TempComPort; + INT m_iSo7TempBaudRate; + //===SYS================= + INT m_iFreeMemoryInterval; + INT m_iTestDll_Enable; + //===PORT================= + INT m_isOpenIO; + //===Setposition Pos================= + double m_PositionX; + double m_PositionY; + double m_PositionZ; }; //====================== @@ -276,12 +371,12 @@ struct struct_so7_machine struct s_machine_config { double _dXYZSpeed; - struct s_so7_axis_config x_axis; struct s_so7_axis_config y_axis; - struct s_so7_axis_config z_axis; + struct s_so7_axis_config z_axis; + struct s_so7_R_axis_config r_axis; + struct s_so7_zm_axis_config zm_axis; - struct s_so7_machine_interface_config motion; } s_machine_config; struct s_status { @@ -316,6 +411,7 @@ struct struct_so7_machine char cVerNumber; char InterruptFlag[2]; char FPGAData; + char MotionType; char InPortStatus; int _motor_pulse_num; char FirmwareInfo[10]; @@ -323,9 +419,9 @@ struct struct_so7_machine char GetInterruptMsg[20][2]; BOOL IsOffline; BOOL IsSupportReadInterrputMsg; - double dRotaryCirclDis; + double dRotaryCirDisTestZSig; char SEQ_NUMBER; - char MotionType; + int MotionFinishedCnts; BOOL MotionFinished; char Arm_MotionStartCnts[5]; @@ -336,6 +432,8 @@ struct struct_so7_machine struct s_so7_axis z; struct s_so7_axis zm; struct s_so7_trigger_pulse TrigPara; + char cIOStatus; + int bMotionType; }; #define SEVENOCEAN_VID 0x4532 @@ -397,6 +495,7 @@ struct struct_so7_ep_buff }; //====================================================================================== +class CEF1AUsbDevice; class CSO7_Proto { public: @@ -420,10 +519,11 @@ public: // Global Structures static struct_so7_ep_buff ep_buff[lEPSIZE]; static struct_so7_machine g_machine; + static struct s_so7_machine_interface_config g_so7_config; int Get_SeqNumber(usb_dev_handle *udev); - SSI_STATUS_MOTION Init_SO7Usb(); + SSI_STATUS_MOTION Init_SO7Usb(HWND _hwnd=nullptr); SSI_STATUS_MOTION Exit_SO7Usb(); usb_dev_handle* _open_usb_dev(unsigned short sSeqNumber=256); @@ -436,6 +536,7 @@ public: static double TimeInSecs(void); static CLogger* g_pLogger; + static usb_dev_handle *g_dev; bool m_bHomingActive; @@ -453,10 +554,13 @@ public: SSI_STATUS_MOTION _replay_capture(CString cFileName); SSI_STATUS_MOTION _process_replay_capture_commands(char *inBuff, FILE* pInFile); - SSI_STATUS_MOTION Load_SevenOcean_Inifile(CString csSO7INIFile); - SSI_STATUS_MOTION Save_SevenOcean_Inifile(CString csSO7INIFile); - SSI_STATUS_MOTION Load_So7_Config(int _FileName=0); - SSI_STATUS_MOTION Save_So7_Config(); + SSI_STATUS_MOTION Load_So7_Motion_Inifile(CString csSO7INIFile); + SSI_STATUS_MOTION Save_So7_Motion_Inifile(CString csSO7INIFile); + SSI_STATUS_MOTION Load_So7_Motion_Config(int _LoadType = 0); + SSI_STATUS_MOTION Save_So7_Motion_Config(int _SaveType = 0); + + SSI_STATUS_MOTION Load_So7_Config_Inifile(int _LoadType = 0); + SSI_STATUS_MOTION Save_So7_Config_Inifile(); SSI_STATUS_MOTION GetAppPath(CString &Path); SSI_STATUS_MOTION ExtractAppPath(CString &Path); @@ -478,8 +582,8 @@ public: SSI_STATUS_MOTION so7_motion_laser_on_off(bool _bOnOff); SSI_STATUS_MOTION so7_motion_fixture_on_off(bool _bOnOff); SSI_STATUS_MOTION so7_motion_fixture_up_down(bool _bOnOff); - SSI_STATUS_MOTION so7_config_para_set_default(); - SSI_STATUS_MOTION so7_motion_reset_controller_parameter(); + SSI_STATUS_MOTION so7_config_cfg_set_default_para(); + SSI_STATUS_MOTION so7_motion_cfg_set_default_para(); SSI_STATUS_MOTION _get_xyz_index(long & lX, long & lY, long & lZ); SSI_STATUS_MOTION so7_motion_jog(EMACHINE_AXIS cAxis,char cSpeedGear); @@ -488,6 +592,7 @@ public: SSI_STATUS_MOTION so7_Motion_XYZ_IsMotionFinished(bool &bFinished); BOOL IsMotionFinishedManual(BOOL _BResetCnts=FALSE); + SSI_STATUS_MOTION so7_motion_set_speed_percent(EMACHINE_AXIS cAxis, char cSpeedGear, double dSpeedPercent,double dAccelPercent); SSI_STATUS_MOTION so7_motion_set_speed_xyz(EMACHINE_AXIS cAxis,char cSpeedGear,char Acce,char cHoldSpeed,char cStartSpeed,char cRefreshCycle,double dBufferDis); SSI_STATUS_MOTION so7_motion_get_speed_xyz(double &dPercentSpeed); SSI_STATUS_MOTION so7_motion_set_position_R(double dR,bool bWait); @@ -499,7 +604,9 @@ public: SSI_STATUS_MOTION so7_motion_clear_finished_flag(); SSI_STATUS_MOTION so7_motion_set_all_speed_para(); + void so7_motion_set_speed_accel_range(); SSI_STATUS_MOTION so7_motion_get_all_speed_para(); + SSI_STATUS_MOTION so7_motion_set_all_so7_config(); SSI_STATUS_MOTION _calculate_straightline_motion(double dSpeedMM); @@ -584,6 +691,10 @@ public: SSI_STATUS_MOTION _send_cmd_SO7_CMD_GET_CONTROL_MODE(char axis_type); SSI_STATUS_MOTION _send_cmd_SO7_CMD_SET_MOTION_SEGMENT_DIS(char axis_type,char _SegmentIndex,long _lDis); SSI_STATUS_MOTION _send_cmd_SO7_CMD_GET_MOTION_SEGMENT_DIS(char axis_type,char _SegmentIndex); + SSI_STATUS_MOTION _send_cmd_SO7_CMD_SET_EXTRA_IO(int nIONmmber,char bValue); + SSI_STATUS_MOTION _send_cmd_SO7_CMD_GET_EXTRA_IO(int nIONumber); + SSI_STATUS_MOTION _send_cmd_SO7_CMD_SET_MOTION_TYPE(BOOL type); + SSI_STATUS_MOTION _send_cmd_SO7_CMD_GET_MOTION_TYPE(); static SSI_STATUS_MOTION _process_SO7_CMD_MOVE_X(); static SSI_STATUS_MOTION _process_SO7_CMD_MOVE_Y(); @@ -627,7 +738,14 @@ public: static SSI_STATUS_MOTION _process_SO7_CMD_GET_MOTION_CNTS(); static SSI_STATUS_MOTION _process_SO7_CMD_GET_CONTROL_MODE(); static SSI_STATUS_MOTION _process_SO7_CMD_GET_MOTION_SEGMENT_DIS(BYTE axis_type,BYTE _SegmentIndex); - + static SSI_STATUS_MOTION _process_SO7_CMD_GET_EXTRA_IO_STATUS(); + static SSI_STATUS_MOTION _process_SO7_CMD_SET_EXTRA_IO_STATUS(); + static SSI_STATUS_MOTION _process_SO7_CMD_SET_MOTION_TYPE(); + static SSI_STATUS_MOTION _process_SO7_CMD_GET_MOTION_TYPE(); + CEF1AUsbDevice *g_EF1AUsbDevice; + bool isEF1AController; + bool m_bIoStatus; + void so7_load_ef1a_config(int _LoadType); }; #endif diff --git a/PcDmis/Base/Interfac/Msi/Hsi/SevenOcean/SO7_Proto_Def.h b/PcDmis/Base/Interfac/Msi/Hsi/SevenOcean/SO7_Proto_Def.h new file mode 100644 index 0000000..7d8e6a5 --- /dev/null +++ b/PcDmis/Base/Interfac/Msi/Hsi/SevenOcean/SO7_Proto_Def.h @@ -0,0 +1,51 @@ +#ifndef SO7_Proto_Def_H_INCLUDED_ + #define SO7_Proto_Def_H_INCLUDED_ + +#if _MSC_VER > 1000 + #pragma once +#endif // _MSC_VER > 1000 + +enum EMACHINE_AXIS +{ + MACHINE_AXIS_NONE = 0, + MACHINE_AXIS_X, + MACHINE_AXIS_Y, + MACHINE_AXIS_Z, + MACHINE_AXIS_ZOOM, + MACHINE_AXIS_R, + MACHINE_AXIS_ALL = 5 +}; +enum EHOME_MACHINE_MODE +{ + HOME_NONE, + HOME_XYZ=1, + HOME_X=10, + HOME_Y, + HOME_Z, + HOME_XY=20, + HOME_XZ, + HOME_YZ, + HOME_R=30, + HOME_TOATAL=255 +}; +enum EIO_PORT +{ + INPORT_J2=0,//Effective bit:0-5 + OUTPORT_J1,//Effective bit:0-5 + OUTPORT_J3,//Effective bit:0-5 + LIMIT_SWITCH_J4//Effective bit:0-5 +}; +enum SSI_STATUS_MOTION +{ + SSI_STATUS_MOTION_NORMAL = 0, + SSI_STATUS_MOTION_DATALINK_ERROR, + SSI_STATUS_MOTION_LIMIT_REACHED, + SSI_STATUS_MOTION_INVALID_PARAMETERS, + SSI_STATUS_MOTION_TIMEOUT, + SSI_STATUS_SO7_CONFIG_FILE_NOT_FOUND, + SSI_STATUS_MOTOR_DAT_FILE_NOT_FOUND, + SSI_STATUS_MACHINE_UNINITIALIZED, + SSI_STATUS_MOTION_NOT_SUPPORTED, + SSI_STATUS_UNKNOWN_ERROR +}; +#endif diff --git a/PcDmis/Base/Interfac/Msi/Hsi/SevenOcean/So7_TCPIP.cpp b/PcDmis/Base/Interfac/Msi/Hsi/SevenOcean/So7_TCPIP.cpp index 6913b2a..a824a71 100644 --- a/PcDmis/Base/Interfac/Msi/Hsi/SevenOcean/So7_TCPIP.cpp +++ b/PcDmis/Base/Interfac/Msi/Hsi/SevenOcean/So7_TCPIP.cpp @@ -202,7 +202,7 @@ TCPIP_RETURN_CODE CSo7_TCPIP::Connect(const HWND& _hWnd,const in_addr& _IPAddres { Create_Thread(); // 设置socket为窗口通知消息类型 - ::WSAAsyncSelect(m_Socket, m_hMsgWnd,WM_SOCKET, FD_CONNECT | FD_CLOSE | FD_WRITE | FD_READ); + retVal=::WSAAsyncSelect(m_Socket, m_hMsgWnd,WM_SOCKET, FD_CONNECT | FD_CLOSE | FD_WRITE | FD_READ); // 填写服务器地址信息 sockaddr_in remote; @@ -211,7 +211,7 @@ TCPIP_RETURN_CODE CSo7_TCPIP::Connect(const HWND& _hWnd,const in_addr& _IPAddres remote.sin_family = AF_INET; remote.sin_port = htons(m_iServerPortNumber); // 连接到远程机 - retVal=connect(m_Socket, (sockaddr*)&remote, sizeof(sockaddr)); + retVal=::connect(m_Socket, (sockaddr*)&remote, sizeof(sockaddr)); if(retVal) { errorCode = WSAGetLastError(); @@ -260,12 +260,15 @@ TCPIP_RETURN_CODE CSo7_TCPIP::Handshaking() { WaitForSingleObject(m_Thread_Mutex, INFINITE); m_ClearSendBuf(); +#ifdef PLC_KEYENCE +#else m_TCPIPBuf[CH_SEND]._size=sizeof(HandShaking); memcpy(m_TCPIPBuf[CH_SEND]._buffer,HandShaking,m_TCPIPBuf[CH_SEND]._size); m_TCPIPBuf[CH_SEND]._buffer[m_TCPIPBuf[CH_SEND]._size-1]=m_ClientIPAddress.S_un.S_un_b.s_b4; m_TCPIPBuf[CH_SEND]._save_send_cmd=TCPIP_CMD_HANDSHAKING; m_Thread_State=TCPIP_THREAD_RUNNING; _do_single_threaded_tcpip_comm(); +#endif ReleaseMutex(m_Thread_Mutex); return m_TCPIPData.s_status._SendReturnCode; } @@ -279,6 +282,23 @@ TCPIP_RETURN_CODE CSo7_TCPIP::_Send_Cmd_Write_D_Data(const short& _Addr,short* _ } WaitForSingleObject(m_Thread_Mutex, INFINITE); m_ClearSendBuf(); +#ifdef PLC_KEYENCE + memset(m_TCPIPBuf[CH_SEND]._buffer,0,sizeof(m_TCPIPBuf[CH_SEND]._buffer)); + int iBufSize(0); + + sprintf_s(m_TCPIPBuf[CH_SEND]._buffer,TCPIP_MAX_BUFF_SIZE,"WRS DM%d.U %d",_Addr,_DataSize); + for(int i=0;i<_DataSize;i++) + { + iBufSize=strlen(m_TCPIPBuf[CH_SEND]._buffer); + sprintf_s(&m_TCPIPBuf[CH_SEND]._buffer[iBufSize],TCPIP_MAX_BUFF_SIZE-iBufSize," %d",_Data[i]); + } + iBufSize=strlen(m_TCPIPBuf[CH_SEND]._buffer); + m_TCPIPBuf[CH_SEND]._buffer[iBufSize++]=0x0d; + m_TCPIPBuf[CH_SEND]._buffer[iBufSize++]=0x0a; + m_TCPIPBuf[CH_SEND]._buffer[iBufSize]=0; + m_TCPIPBuf[CH_SEND]._size=iBufSize; +#else + memcpy(m_TCPIPBuf[CH_SEND]._buffer,DRW_SData,sizeof(DRW_SData)); m_TCPIPBuf[CH_SEND]._buffer[DRW_SDataIndexDA1]=m_SreverIPAddress.S_un.S_un_b.s_b4; @@ -300,6 +320,7 @@ TCPIP_RETURN_CODE CSo7_TCPIP::_Send_Cmd_Write_D_Data(const short& _Addr,short* _ m_TCPIPBuf[CH_SEND]._buffer[DRW_RSDataIndexBufSize2]=sTmpData & 0x0ff; m_TCPIPBuf[CH_SEND]._size=DRW_SDataIndexData+2*_DataSize; +#endif m_TCPIPBuf[CH_SEND]._save_send_cmd=TCPIP_CMD_WRITE_D_DATA; m_TCPIPData.s_status._WriteDataCompleted=false; @@ -317,6 +338,17 @@ TCPIP_RETURN_CODE CSo7_TCPIP::_Send_Cmd_Read_D_Data(const short& _Addr,const sho } WaitForSingleObject(m_Thread_Mutex, INFINITE); m_ClearSendBuf(); +#ifdef PLC_KEYENCE + memset(m_TCPIPBuf[CH_SEND]._buffer,0,sizeof(m_TCPIPBuf[CH_SEND]._buffer)); + int iBufSize(0); + + sprintf_s(m_TCPIPBuf[CH_SEND]._buffer,TCPIP_MAX_BUFF_SIZE,"RDS DM%d.U %d",_Addr,_DataSize); + iBufSize=strlen(m_TCPIPBuf[CH_SEND]._buffer); + m_TCPIPBuf[CH_SEND]._buffer[iBufSize++]=0x0d; + m_TCPIPBuf[CH_SEND]._buffer[iBufSize++]=0x0a; + m_TCPIPBuf[CH_SEND]._buffer[iBufSize]=0; + m_TCPIPBuf[CH_SEND]._size=iBufSize; +#else memcpy(m_TCPIPBuf[CH_SEND]._buffer,DRW_SData,sizeof(DRW_SData)); m_TCPIPBuf[CH_SEND]._buffer[DRW_SDataIndexDA1]=m_SreverIPAddress.S_un.S_un_b.s_b4; @@ -327,9 +359,8 @@ TCPIP_RETURN_CODE CSo7_TCPIP::_Send_Cmd_Read_D_Data(const short& _Addr,const sho m_TCPIPBuf[CH_SEND]._buffer[DRW_SDataIndexAddr2]=_Addr & 0x0ff; m_TCPIPBuf[CH_SEND]._buffer[DRW_SDataIndexCh1]=(_DataSize>>8) & 0x0ff; m_TCPIPBuf[CH_SEND]._buffer[DRW_SDataIndexCh2]=_DataSize & 0x0ff; - - m_TCPIPBuf[CH_SEND]._size=DRW_SDataIndexData; +#endif m_TCPIPBuf[CH_SEND]._save_send_cmd=TCPIP_CMD_READ_D_DATA; m_TCPIPData.s_status._ReadDataCompleted=false; @@ -353,7 +384,7 @@ LRESULT CSo7_TCPIP::OnSocket(WPARAM wParam, LPARAM lParam) { case FD_CONNECT: { - + m_ClearSendBuf(); } break; case FD_READ: @@ -481,6 +512,7 @@ void CSo7_TCPIP::m_ProcessSocketReadEvent(SOCKET s) } m_TCPIPBuf[CH_RECV]._CompletedSize += bytesReceived; m_TCPIPBuf[CH_RECV]._size = m_TCPIPBuf[CH_RECV]._CompletedSize; + m_TCPIPBuf[CH_RECV]._buffer[m_TCPIPBuf[CH_RECV]._size]=0; switch (m_TCPIPBuf[CH_SEND]._save_send_cmd) { case TCPIP_CMD_HANDSHAKING: @@ -497,6 +529,8 @@ void CSo7_TCPIP::m_ProcessSocketReadEvent(SOCKET s) } case TCPIP_CMD_READ_D_DATA: { +#ifdef PLC_KEYENCE +#else int _BufferSize(0); BYTE _bData[4]={0,0,0,0}; _bData[0]=static_cast(m_TCPIPBuf[CH_RECV]._buffer[DRW_RSDataIndexBufSize1]); @@ -517,6 +551,7 @@ void CSo7_TCPIP::m_ProcessSocketReadEvent(SOCKET s) m_TCPIPData.s_recv_data._lData[m_TCPIPData.s_recv_data._DataSize]=static_cast(+(_bData[2]<<24)+(_bData[3]<<16)+(_bData[0]<<8)+(_bData[1])); m_TCPIPData.s_recv_data._DataSize++; } +#endif m_TCPIPData.s_status._ReadDataCompleted=true; break; } diff --git a/PcDmis/Base/Interfac/Msi/Hsi/SevenOcean/So7_TCPIP.h b/PcDmis/Base/Interfac/Msi/Hsi/SevenOcean/So7_TCPIP.h index 0dde9e4..b624aac 100644 --- a/PcDmis/Base/Interfac/Msi/Hsi/SevenOcean/So7_TCPIP.h +++ b/PcDmis/Base/Interfac/Msi/Hsi/SevenOcean/So7_TCPIP.h @@ -18,13 +18,15 @@ #define CH_SEND 0 #define CH_RECV 1 -#define TCPIP_MAX_BUFF_SIZE 1024 -#define TCPIP_MAX_DAT_SIZE 1024 +#define TCPIP_MAX_BUFF_SIZE 10240 +#define TCPIP_MAX_DAT_SIZE 10240 #define TCPIP_THREAD_RUNNING 0 #define TCPIP_THREAD_PAUSED 1 #define TCPIP_THREAD_EXIT -1 +#define PLC_KEYENCE + #pragma pack(push) #pragma pack(1) diff --git a/PcDmis/Base/Interfac/Msi/Hsi/SevenOcean/So7_TCPIP_Server.cpp b/PcDmis/Base/Interfac/Msi/Hsi/SevenOcean/So7_TCPIP_Server.cpp index 6a5f303..e983e32 100644 --- a/PcDmis/Base/Interfac/Msi/Hsi/SevenOcean/So7_TCPIP_Server.cpp +++ b/PcDmis/Base/Interfac/Msi/Hsi/SevenOcean/So7_TCPIP_Server.cpp @@ -37,6 +37,13 @@ const int DRW_RSDataIndexBufSize2=7; struct_so7_tcpip_buff CSo7_TCPIP_Server::m_TCPIPBuf[lChannelSize]; s_tcpip_state CSo7_TCPIP_Server::m_TCPIPServerState; +HANDLE CSo7_TCPIP_Server::m_Thread_Id=NULL; +HANDLE CSo7_TCPIP_Server::m_Thread_Mutex=NULL; +HANDLE CSo7_TCPIP_Server::m_MultiThread_Mutex=NULL; +int CSo7_TCPIP_Server::m_Thread_State=TCPIP_THREAD_PAUSED; +WSAEVENT CSo7_TCPIP_Server::m_SocketEvents[WSA_MAXIMUM_WAIT_EVENTS] = { NULL }; +SOCKET CSo7_TCPIP_Server::m_ClientSocket[WSA_MAXIMUM_WAIT_EVENTS] = { NULL }; +int CSo7_TCPIP_Server::m_nClients = 0; //================================================================ CSo7_TCPIP_Server::CSo7_TCPIP_Server() @@ -48,10 +55,11 @@ CSo7_TCPIP_Server::CSo7_TCPIP_Server() m_SreverIPAddress.S_un.S_un_b.s_b2=0; m_SreverIPAddress.S_un.S_un_b.s_b3=0; m_SreverIPAddress.S_un.S_un_b.s_b4=1; - m_iServerPortNumber=static_cast(0); + m_iServerPortNumber=static_cast(0); for (int i=0;iOnSocket(m_ClientSocket[i], FD_ACCEPT); + } + else if (event.lNetworkEvents & FD_CONNECT) // 处理FD_ACCEPT通知消息 + { + _This->OnSocket(m_ClientSocket[i], FD_CONNECT); + } + else if (event.lNetworkEvents & FD_READ) // 处理FD_READ通知消息 + { + _This->OnSocket(m_ClientSocket[i], FD_READ); + } + else if (event.lNetworkEvents & FD_CLOSE) // 处理FD_CLOSE通知消息 + { + _This->OnSocket(m_ClientSocket[i], FD_CLOSE); + } + else if (event.lNetworkEvents & FD_WRITE) // 处理FD_WRITE通知消息 + { + _This->OnSocket(m_ClientSocket[i], FD_WRITE); + } + } + break; + } + case TCPIP_THREAD_PAUSED: + { + break; + } + case TCPIP_THREAD_EXIT: + { + ExitThread(0); + break; + } + } + }; + m_Thread_State=TCPIP_THREAD_EXIT; + ExitThread(0); +} +//================================================================ BOOL CSo7_TCPIP_Server::AddClient(SOCKET s) { - if(m_nClients < MAX_SOCKET) + if(m_nClients < WSA_MAXIMUM_WAIT_EVENTS) { - m_ClientSocket[m_nClients++] = s; + WSAEVENT _SocketEvent = ::WSACreateEvent(); + ::WSAEventSelect(s, _SocketEvent, FD_READ|FD_WRITE|FD_CLOSE); + m_SocketEvents[m_nClients] = _SocketEvent; + m_ClientSocket[m_nClients] = s; + m_nClients++; return TRUE; } return FALSE; @@ -244,6 +365,7 @@ void CSo7_TCPIP_Server::RemoveClient(SOCKET s) for(int j=i; j=MAX_DM_PAGE_NUMBER) { _DataSize=MAX_DM_PAGE_NUMBER-_StartAddr; } + +#ifdef PLC_KEYENCE + + for(int i=0;i<_DataSize;i++) + { + int iBufSize=strlen(m_TCPIPBuf[CH_SEND]._buffer); + sprintf_s(&m_TCPIPBuf[CH_SEND]._buffer[iBufSize],TCPIP_MAX_BUFF_SIZE-iBufSize,"%05u ",(unsigned short)DM200[_StartAddr+i]); + } + int iBufSize=strlen(m_TCPIPBuf[CH_SEND]._buffer); + m_TCPIPBuf[CH_SEND]._buffer[iBufSize-1]=0x0D; + m_TCPIPBuf[CH_SEND]._buffer[iBufSize++]=0x0A; + m_TCPIPBuf[CH_SEND]._buffer[iBufSize]=0x00; + m_TCPIPBuf[CH_SEND]._size=iBufSize; +#else for (int i=0;i<_DataSize;i++) { sData=DM200[_StartAddr+i]; m_TCPIPBuf[CH_SEND]._buffer[DRW_SDataIndexData+2*i]=(sData>>8) & 0x0ff; m_TCPIPBuf[CH_SEND]._buffer[DRW_SDataIndexData+2*i+1]=sData & 0x0ff; - } + } short sDataSize(0); sDataSize=(DRW_SDataIndexData-DRW_SDataHeadDataSize+_DataSize*2); m_TCPIPBuf[CH_SEND]._buffer[DRW_SDataIndexDataSize1]=static_cast((sDataSize>>8) & 0x0ff); m_TCPIPBuf[CH_SEND]._buffer[DRW_SDataIndexDataSize2]=static_cast(sDataSize & 0x0ff); m_TCPIPBuf[CH_SEND]._size=DRW_SDataIndexData+_DataSize*2; +#endif SendBuffer(); @@ -352,13 +506,25 @@ BOOL CSo7_TCPIP_Server::Response_PLC_DM5000_R(short _StartAddr,short _DataSize) return FALSE; } m_ClearSendBuf(); - memcpy(m_TCPIPBuf[CH_SEND]._buffer,DRW_SData,sizeof(DRW_SData)); - short sData(0); _StartAddr-=5000; if ((_StartAddr+_DataSize)>=MAX_DM_PAGE_NUMBER) { _DataSize=MAX_DM_PAGE_NUMBER-_StartAddr; } +#ifdef PLC_KEYENCE + + for(int i=0;i<_DataSize;i++) + { + int iBufSize=strlen(m_TCPIPBuf[CH_SEND]._buffer); + sprintf_s(&m_TCPIPBuf[CH_SEND]._buffer[iBufSize],TCPIP_MAX_BUFF_SIZE-iBufSize,"%05u ",(unsigned short)DM5000[_StartAddr+i]); + } + int iBufSize=strlen(m_TCPIPBuf[CH_SEND]._buffer); + m_TCPIPBuf[CH_SEND]._buffer[iBufSize-1]=0x0D; + m_TCPIPBuf[CH_SEND]._buffer[iBufSize++]=0x0A; + m_TCPIPBuf[CH_SEND]._buffer[iBufSize]=0x00; + m_TCPIPBuf[CH_SEND]._size=iBufSize; +#else + memcpy(m_TCPIPBuf[CH_SEND]._buffer,DRW_SData,sizeof(DRW_SData)); for (int i=0;i<_DataSize;i++) { sData=DM5000[_StartAddr+i]; @@ -370,27 +536,39 @@ BOOL CSo7_TCPIP_Server::Response_PLC_DM5000_R(short _StartAddr,short _DataSize) m_TCPIPBuf[CH_SEND]._buffer[DRW_SDataIndexDataSize1]=static_cast((sDataSize>>8) & 0x0ff); m_TCPIPBuf[CH_SEND]._buffer[DRW_SDataIndexDataSize2]=static_cast(sDataSize & 0x0ff); m_TCPIPBuf[CH_SEND]._size=DRW_SDataIndexData+_DataSize*2; - +#endif SendBuffer(); return TRUE; } //================================================================ -BOOL CSo7_TCPIP_Server::Response_PLC_DM10000_R(short _StartAddr,short _DataSize) +BOOL CSo7_TCPIP_Server::Response_PLC_DM20000_R(short _StartAddr,short _DataSize) { if(m_ClientSocket[m_nActiveClient] == INVALID_SOCKET) { return FALSE; } m_ClearSendBuf(); - memcpy(m_TCPIPBuf[CH_SEND]._buffer,DRW_SData,sizeof(DRW_SData)); - short sData(0); - _StartAddr-=10000; - if ((_StartAddr+_DataSize)>=MAX_DM_PAGE_NUMBER) + unsigned long lStartAddr=static_cast(_StartAddr-20000); + if ((lStartAddr+_DataSize)>=MAX_DM_PAGE_NUMBER) { - _DataSize=MAX_DM_PAGE_NUMBER-_StartAddr; + lStartAddr=MAX_DM_PAGE_NUMBER-lStartAddr; } +#ifdef PLC_KEYENCE + + for(int i=0;i<_DataSize;i++) + { + int iBufSize=strlen(m_TCPIPBuf[CH_SEND]._buffer); + sprintf_s(&m_TCPIPBuf[CH_SEND]._buffer[iBufSize],TCPIP_MAX_BUFF_SIZE-iBufSize,"%05u ",(unsigned short)DM10000[lStartAddr+i]); + } + int iBufSize=strlen(m_TCPIPBuf[CH_SEND]._buffer); + m_TCPIPBuf[CH_SEND]._buffer[iBufSize-1]=0x0D; + m_TCPIPBuf[CH_SEND]._buffer[iBufSize++]=0x0A; + m_TCPIPBuf[CH_SEND]._buffer[iBufSize]=0x00; + m_TCPIPBuf[CH_SEND]._size=iBufSize; +#else + memcpy(m_TCPIPBuf[CH_SEND]._buffer,DRW_SData,sizeof(DRW_SData)); for (int i=0;i<_DataSize;i++) { sData=DM10000[_StartAddr+i]; @@ -403,7 +581,120 @@ BOOL CSo7_TCPIP_Server::Response_PLC_DM10000_R(short _StartAddr,short _DataSize) m_TCPIPBuf[CH_SEND]._buffer[DRW_SDataIndexDataSize2]=static_cast(sDataSize & 0x0ff); m_TCPIPBuf[CH_SEND]._size=DRW_SDataIndexData+_DataSize*2; +#endif + SendBuffer(); + return TRUE; +} + +//================================================================ +BOOL CSo7_TCPIP_Server::Response_PLC_DM10000_R(short _StartAddr,short _DataSize) +{ + if(m_ClientSocket[m_nActiveClient] == INVALID_SOCKET) + { + return FALSE; + } + m_ClearSendBuf(); + + _StartAddr-=10000; + if ((_StartAddr+_DataSize)>=MAX_DM_PAGE_NUMBER) + { + _DataSize=MAX_DM_PAGE_NUMBER-_StartAddr; + } +#ifdef PLC_KEYENCE + + for(int i=0;i<_DataSize;i++) + { + int iBufSize=strlen(m_TCPIPBuf[CH_SEND]._buffer); + sprintf_s(&m_TCPIPBuf[CH_SEND]._buffer[iBufSize],TCPIP_MAX_BUFF_SIZE-iBufSize,"%05u ",(unsigned short)DM10000[_StartAddr+i]); + } + int iBufSize=strlen(m_TCPIPBuf[CH_SEND]._buffer); + m_TCPIPBuf[CH_SEND]._buffer[iBufSize-1]=0x0D; + m_TCPIPBuf[CH_SEND]._buffer[iBufSize++]=0x0A; + m_TCPIPBuf[CH_SEND]._buffer[iBufSize]=0x00; + m_TCPIPBuf[CH_SEND]._size=iBufSize; +#else + memcpy(m_TCPIPBuf[CH_SEND]._buffer,DRW_SData,sizeof(DRW_SData)); + for (int i=0;i<_DataSize;i++) + { + sData=DM10000[_StartAddr+i]; + m_TCPIPBuf[CH_SEND]._buffer[DRW_SDataIndexData+2*i]=(sData>>8) & 0x0ff; + m_TCPIPBuf[CH_SEND]._buffer[DRW_SDataIndexData+2*i+1]=sData & 0x0ff; + } + short sDataSize(0); + sDataSize=(DRW_SDataIndexData-DRW_SDataHeadDataSize+_DataSize*2); + m_TCPIPBuf[CH_SEND]._buffer[DRW_SDataIndexDataSize1]=static_cast((sDataSize>>8) & 0x0ff); + m_TCPIPBuf[CH_SEND]._buffer[DRW_SDataIndexDataSize2]=static_cast(sDataSize & 0x0ff); + + m_TCPIPBuf[CH_SEND]._size=DRW_SDataIndexData+_DataSize*2; +#endif + SendBuffer(); + + return TRUE; +} + + +//================================================================ +BOOL CSo7_TCPIP_Server::RESPONSE_PLC_DM36000_R(short _StartAddr,short _DataSize) +{ + if(m_ClientSocket[m_nActiveClient] == INVALID_SOCKET) + { + return FALSE; + } + m_ClearSendBuf(); + short DM36000[100]={0}; + int m_CCDData_D36000[20]={0}; + int iDataNumber(1); + int Index(0); + for (int iFix=0;iFix<2;iFix++) + { + m_CCDData_D36000[Index++]=(0xA001+iFix)*1000; + double dRand(0.0); + + if(iDataNumber>0) + m_CCDData_D36000[Index++]=iDataNumber*1000; + double dRandMin=0.0; + double dRandMax=1.0; + static int iTestCnts=0; + iTestCnts++; + for (int ii=0;ii(dRand*1000); + } + } + m_CCDData_D36000[0]=(Index)*1000; + + int iData(0); + BYTE DM_Data[4]={0,0,0,0}; + int StartAddr(0); + for (int i=0;i<20;i++) + { + iData=m_CCDData_D36000[i]; + DM_Data[0]=(iData>>24) & 0x0ff; + DM_Data[1]=(iData>>16) & 0x0ff; + DM_Data[2]=(iData>>8) & 0x0ff; + DM_Data[3]=iData & 0x0ff; + DM36000[StartAddr+2*i]=(DM_Data[2]<<8)+DM_Data[3]; + DM36000[StartAddr+2*i+1]=(DM_Data[0]<<8)+DM_Data[1]; + } + _StartAddr-=36000; + if ((_StartAddr+_DataSize)>=MAX_DM_PAGE_NUMBER) + { + _DataSize=MAX_DM_PAGE_NUMBER-_StartAddr; + } + for(int i=0;i<_DataSize;i++) + { + int iBufSize=strlen(m_TCPIPBuf[CH_SEND]._buffer); + sprintf_s(&m_TCPIPBuf[CH_SEND]._buffer[iBufSize],TCPIP_MAX_BUFF_SIZE-iBufSize,"%05u ",(unsigned short)DM36000[_StartAddr+i]); + } + int iBufSize=strlen(m_TCPIPBuf[CH_SEND]._buffer); + m_TCPIPBuf[CH_SEND]._buffer[iBufSize-1]=0x0D; + m_TCPIPBuf[CH_SEND]._buffer[iBufSize++]=0x0A; + m_TCPIPBuf[CH_SEND]._buffer[iBufSize]=0x00; + m_TCPIPBuf[CH_SEND]._size=iBufSize; SendBuffer(); return TRUE; @@ -416,8 +707,17 @@ BOOL CSo7_TCPIP_Server::_Send_Cmd_Write_State() return FALSE; } m_ClearSendBuf(); +#ifdef PLC_KEYENCE + int iBufSize=0; + m_TCPIPBuf[CH_SEND]._buffer[iBufSize++]='O'; + m_TCPIPBuf[CH_SEND]._buffer[iBufSize++]='K'; + m_TCPIPBuf[CH_SEND]._buffer[iBufSize++]=0x0D; + m_TCPIPBuf[CH_SEND]._buffer[iBufSize++]=0x0A; + m_TCPIPBuf[CH_SEND]._buffer[iBufSize]=0x00; + m_TCPIPBuf[CH_SEND]._size=iBufSize; +#else m_TCPIPBuf[CH_SEND]._size=0; - +#endif SendBuffer(); return TRUE; @@ -425,33 +725,21 @@ BOOL CSo7_TCPIP_Server::_Send_Cmd_Write_State() //================================================================ LRESULT CSo7_TCPIP_Server::OnSocket(WPARAM wParam, LPARAM lParam) { - // 取得有事件发生的套节字句柄 SOCKET s = wParam; - // 查看是否出错 - - int errorCode = WSAGETSELECTERROR(lParam); - if(errorCode) - { - RemoveClient(s); - ::closesocket(s); - return errorCode; - } - int event = WSAGETSELECTEVENT(lParam); - switch(event) + switch (lParam) { case FD_ACCEPT: { - if(m_nClients < MAX_SOCKET) + if(m_nClients < WSA_MAXIMUM_WAIT_EVENTS) { SOCKET client = ::accept(s, NULL, NULL); - ::WSAAsyncSelect(client,m_hMsgWnd, WM_SOCKET, FD_READ|FD_WRITE|FD_CLOSE); AddClient(client); } else { AfxMessageBox(_T("连接客户太多!")); }; - ::PostMessage(m_hMsgWnd,WM_TCPIP_MSG,FD_ACCEPT,0); + ::SendMessage(m_hMsgWnd,WM_TCPIP_MSG,FD_ACCEPT,0); } break; case FD_READ: @@ -466,13 +754,13 @@ LRESULT CSo7_TCPIP_Server::OnSocket(WPARAM wParam, LPARAM lParam) //So if there is not enough room for the first write the event will happen //and then the buffers are ready for more. m_ProcessSocketWriteEvent(); - ::PostMessage(m_hMsgWnd,WM_TCPIP_MSG,FD_WRITE,0); + ::SendMessage(m_hMsgWnd,WM_TCPIP_MSG,FD_WRITE,0); break; case FD_CLOSE: { RemoveClient(s); ::closesocket(s); - ::PostMessage(m_hMsgWnd,WM_TCPIP_MSG,FD_CLOSE,0); + ::SendMessage(m_hMsgWnd,WM_TCPIP_MSG,FD_CLOSE,0); } break; } @@ -585,6 +873,218 @@ void CSo7_TCPIP_Server::m_ProcessSocketReadEvent(SOCKET s) m_TCPIPBuf[CH_RECV]._CompletedSize += bytesReceived; m_TCPIPBuf[CH_RECV]._size = m_TCPIPBuf[CH_RECV]._CompletedSize; m_TCPIPMsg.Init(); + TRACE0("m_ProcessSocketReadEvent\r\n"); +#ifdef PLC_KEYENCE + if (strstr(m_TCPIPBuf[CH_RECV]._buffer, "RD")) + { + unsigned long iAddr(0); + unsigned long iDataSize(1); + + char cRecvDataTmp[30]={0}; + int iRecvDataIndex(0); + int iBufferSize=m_TCPIPBuf[CH_RECV]._size; + int index(0); + iRecvDataIndex=0; + int iLoopCount(0); + do + { + cRecvDataTmp[index++]=m_TCPIPBuf[CH_RECV]._buffer[iRecvDataIndex++]; + if (m_TCPIPBuf[CH_RECV]._buffer[iRecvDataIndex]==0x20 + ||m_TCPIPBuf[CH_RECV]._buffer[iRecvDataIndex]==0x0D) + { + if (iLoopCount==1) + { + char cTmp[30]={0}; + int iii(0); + for (int i=0;i(atoi(cTmp)); + } + else if (iLoopCount==2) + { + iDataSize=static_cast(atoi(cRecvDataTmp)); + } + iLoopCount++; + index=0; + memset(cRecvDataTmp,0,30*sizeof(char)); + } + } while (iRecvDataIndex<=iBufferSize&&m_TCPIPBuf[CH_RECV]._buffer[iRecvDataIndex]!=0x0D); + + + m_TCPIPMsg._CmdType=0; + m_TCPIPMsg._DataAddr=iAddr; + m_TCPIPMsg._DataSize=iDataSize; + if (iAddr>=36000) + { + RESPONSE_PLC_DM36000_R((short)iAddr,(short)iDataSize); + m_TCPIPMsg._MsgType=RESPONSE_UNKNOWN; + m_TCPIPMsg._MsgType=RESPONSE_READ_ERRCODE; + } + else if (iAddr>=30000) + { + RESPONSE_PLC_DM_UNKNOWN((short)iDataSize); + m_TCPIPMsg._MsgType=RESPONSE_UNKNOWN; + m_TCPIPMsg._MsgType=RESPONSE_READ_ERRCODE; + } + else if (iAddr>=28000) + { + RESPONSE_PLC_DM_UNKNOWN((short)iDataSize); + m_TCPIPMsg._MsgType=RESPONSE_UNKNOWN; + } + else if (iAddr>=26000) + { + short saddr=(short)(iAddr-6000+800); + Response_PLC_DM20000_R((short)saddr,(short)iDataSize); + m_TCPIPMsg._MsgType=RESPONSE_READ_CCD_DATA; + } + else if (iAddr>=22000) + { + Response_PLC_DM20000_R((short)iAddr,(short)iDataSize); + m_TCPIPMsg._MsgType=RESPONSE_READ_CCD_DATA; + } + else if (iAddr>=20000) + { + Response_PLC_DM20000_R((short)iAddr,(short)iDataSize); + m_TCPIPMsg._MsgType=RESPONSE_READ_CCD_DATA; + } + else if (iAddr>=10000) + { + Response_PLC_DM10000_R((short)iAddr,(short)iDataSize); + m_TCPIPMsg._MsgType=RESPONSE_READ_CCD_DATA; + } + else if (iAddr>=5100) + { + Response_PLC_DM5000_R((short)iAddr,(short)iDataSize); + m_TCPIPMsg._MsgType=RESPONSE_READ_PLC_CALIB_POS; + } + else if (iAddr>=5000) + { + Response_PLC_DM5000_R((short)iAddr,(short)iDataSize); + m_TCPIPMsg._MsgType=RESPONSE_READ_PLC_STATE; + } + else if (iAddr>=200) + { + Response_PLC_DM200_R((short)iAddr,(short)iDataSize); + m_TCPIPMsg._MsgType=RESPONSE_READ_PLC_STATE; + } + else + { + RESPONSE_PLC_DM_UNKNOWN((short)iDataSize); + m_TCPIPMsg._MsgType=RESPONSE_UNKNOWN; + } + } + else if (strstr(m_TCPIPBuf[CH_RECV]._buffer, "WR")) + { + short iAddr(0); + short iDataSize(1); + short sRecvData[1024]={0}; + int iRecvDataSize=0; + + char cRecvDataTmp[30]={0}; + int iRecvDataIndex(0); + int iBufferSize=m_TCPIPBuf[CH_RECV]._size; + int index(0); + iRecvDataIndex=0; + int iLoopCount(0); + do + { + cRecvDataTmp[index++]=m_TCPIPBuf[CH_RECV]._buffer[iRecvDataIndex++]; + if (m_TCPIPBuf[CH_RECV]._buffer[iRecvDataIndex]==0x20 + ||m_TCPIPBuf[CH_RECV]._buffer[iRecvDataIndex]==0x0D) + { + if (iLoopCount==1) + { + char cTmp[30]={0}; + int iii(0); + for (int i=0;i(atoi(cTmp)); + } + else if (iLoopCount==2) + { + iDataSize=static_cast(atoi(cRecvDataTmp)); + } + else if (iLoopCount>=3) + { + sRecvData[iRecvDataSize++]=static_cast(atoi(cRecvDataTmp)); + } + iLoopCount++; + index=0; + memset(cRecvDataTmp,0,30*sizeof(char)); + } + } while (iRecvDataIndex<=iBufferSize&&m_TCPIPBuf[CH_RECV]._buffer[iRecvDataIndex]!=0x0D); + + m_TCPIPMsg._CmdType=1; + m_TCPIPMsg._DataAddr=iAddr; + m_TCPIPMsg._DataSize=iDataSize; + if (iAddr>=8000) + { + static clock_t m_FinishTime(0),m_StartTime(0),m_AverageTime(0),m_Count(0); + int iStartAddr(0); + iStartAddr=iAddr-8000; + if (iStartAddr==11) + { + if (m_Count>0) + { + m_FinishTime=clock(); + } + m_AverageTime+=m_FinishTime-m_StartTime; + m_Count++; + TRACE2("Bin Result=%d;Time=%d.\r\n",DM8000[iStartAddr],m_FinishTime-m_StartTime); + m_StartTime=clock(); + } + for (int i=0;i=200) + { + int iStartAddr(0); + iStartAddr=iAddr-200; + for (int i=0;iMAX_OUTPUT_BUFFER_SIZE) + { + length = MAX_OUTPUT_BUFFER_SIZE; + } + + unsigned short* ptr = (unsigned short*)buffer.GetBuffer (MAX_OUTPUT_BUFFER_SIZE); + + for (int i=0;iNext; + + // Point the temp pointer at the block + m_RXTempPtr = Free->Buffer; + cnt = Free->Bytes; + // delete the list entry + delete Free; + --m_iNbMsgWaiting; // mp + + // move over the data to the user's buffer + if (NULL != inputBuf) + memcpy (inputBuf, m_RXTempPtr, cnt); + } + + if( m_RXHead == NULL ) + m_RXTail = NULL; + + // All done so out of the CriticalSection + // LeaveCriticalSection( &m_QueueLock ); + + return(cnt); +} + +int CMMIO::AddReceived( const char *Buffer,DWORD Bytes) +{ + DWORD index = 0; //primary buffer index + struct SerialList *Ptr; + static char Buffer2[MAX_RECIEVE_BUFFER_SIZE]; // result buffer + static char* pBuffer2 = &Buffer2[0]; + unsigned char c; + bool bArmed; + /************************************************************************/ + /* Greg Guilbeau - 2011/08/23 */ + /* The following line(s) have been modified to handle x64 conversion */ + /************************************************************************/ + /* int count; */ + INT_PTR count; + static int escape = 0; + static int tilde = 0; + static int tildeseqcount = 0; + + bool bDone = false; + bool bEventRequest = false; + + //TRACE(_T("AddReceived> pBuffer2 = %x\n"),pBuffer2); + // TRACE(_T("Content %s\n"),Buffer); + if (FALSE /*Bytes==0*/) + { + TRACE(_T("CMMIO> Exiting , no real input")); + return TRUE; + } + do + { + bArmed = false; + + for (;indexBuffer = new char[count + 1 ]; + /************************************************************************/ + /* Greg Guilbeau - 2011/08/23 */ + /* The following line(s) have been modified to handle x64 conversion */ + /************************************************************************/ + /* Ptr->Bytes = count; */ +#ifdef _WIN64 + Ptr->Bytes = WAI64bit::to32bit(count,__FILE__,__LINE__); +#else + Ptr->Bytes = count,__FILE__,__LINE__; +#endif + Ptr->Next = NULL; + memcpy( Ptr->Buffer, Buffer2, count ); + Ptr->Buffer[count] = 0; + + memcpy(m_sLastMessage,Buffer2,count); //copy to last message + m_sLastMessage[count]=0; + + if( m_RXTail ) + m_RXTail->Next = Ptr; + else + m_RXHead = Ptr; + m_RXTail = Ptr; + + // All done so out of the CriticalSection + ++m_iNbMsgWaiting; + } + // LeaveCriticalSection( &m_QueueLock ); + pBuffer2=&Buffer2[0]; // reset out buffer + count = 0; + bEventRequest = true; + } + } + while (!bDone); + //TRACE (_T("CMMIO> Done\n")); + + return(TRUE); +} + +void CMMIO::LineReceive(char* s, int nbCharAvail, BOOL ignoreDelimiter /*= FALSE*/) +{ + if (nbCharAvail != -1) + { + //TRACE(_T("LineReceive got %d chars \n"),nbCharAvail); + char c; + for (int i=0 ; iNext; + delete[] Free->Buffer; + delete Free; + } + m_RXHead = NULL; + + // for now we are not using the Transmit list +#if 0 + + while( m_TXHead ) + { + Free = m_TXHead; + m_TXHead = m_TXHead->Next; + delete[] Free->Buffer; + delete Free; + } + m_TXHead = NULL; +#endif + // LeaveCriticalSection( &m_QueueLock ); + return(TRUE); + +} +/////////////////////////////////////////////////////////////////////////////// +// END OF BASE CLASS CMMIO +/////////////////////////////////////////////////////////////////////////////// + diff --git a/PcDmis/Base/Interfac/Msi/Hsi/SevenOcean/UtilityForSo7Light/UtilityForSo7Light/CMMIO_BASE.H b/PcDmis/Base/Interfac/Msi/Hsi/SevenOcean/UtilityForSo7Light/UtilityForSo7Light/CMMIO_BASE.H new file mode 100644 index 0000000..1e0cbb2 --- /dev/null +++ b/PcDmis/Base/Interfac/Msi/Hsi/SevenOcean/UtilityForSo7Light/UtilityForSo7Light/CMMIO_BASE.H @@ -0,0 +1,115 @@ +#ifndef CMMIO_BASE_H +#define CMMIO_BASE_H + +#include +#include + + +#define MAX_OUTPUT_BUFFER_SIZE 2048 +#define MAX_RECIEVE_BUFFER_SIZE 30000 +// TCP, serial style routines +struct SerialList +{ + struct SerialList *Next; + DWORD Bytes; + int Item; + char *Buffer; +}; + +class CMMIO +{ +private: + // For now we are not using the transmit list + // struct SerialList *m_TXHead; + char m_terminator; + BOOL m_usesTerminator; + char m_InputBuffer[MAX_RECIEVE_BUFFER_SIZE]; + int CurrentPointer; + char m_sLastMessage[MAX_RECIEVE_BUFFER_SIZE]; + + struct SerialList *m_RXHead; + struct SerialList *m_RXTail; + char *m_RXTempPtr; + CString m_LastError; + BOOL m_hasError; + +protected: + CString m_lastErrMsg; + int m_iNbMsgWaiting; + BOOL m_UseBuffferedSend; + CRITICAL_SECTION m_QueueLock; + CRITICAL_SECTION m_ReadLock; + CRITICAL_SECTION m_WriteLock; + + struct SerialList *m_SXHead; + struct SerialList *m_SXTail; + char *m_SXTempPtr; + +protected: + virtual void Init(); + int AddReceived( const char *Buffer,DWORD Bytes); // [7/30/2004] + void Error(CString sErr) { + TRACE(sErr); + m_LastError = sErr; + m_hasError = TRUE; + } + + virtual DWORD Close(); + +public: + CMMIO() + { + InitializeCriticalSection( &m_QueueLock ); // Sean Flynn mutex needs to be initialized prior to attempting to lock otherwise it will core + InitializeCriticalSection( &m_ReadLock ); // initializing here will ensure the mutex is always initialized + InitializeCriticalSection( &m_WriteLock ); + Init(); + }; + + virtual ~CMMIO() + { + DeleteCriticalSection( &m_QueueLock ); // Clean up the mutexes resources when the destructor is called. + DeleteCriticalSection( &m_ReadLock ); + DeleteCriticalSection( &m_WriteLock ); + }; + + virtual DWORD Open() { + return 0; + } + + BOOL getError(CString& sErr) { + BOOL hasError = m_hasError; + if (m_hasError) + { + sErr = m_LastError; + m_hasError = FALSE; + } + return (hasError); + } + + virtual int GetNextReceived(char *inputBuf=NULL); + + virtual int HasNextReceived(void) { + return (m_RXHead ? m_RXHead->Bytes : FALSE); + } + virtual void SetTerminateChar(char ch) { + m_terminator=ch; + m_usesTerminator=TRUE; + } + virtual void LineReceive(char* s, int nbCharAvail, BOOL ignoreDelimiter = FALSE); + virtual CString GetLastErrStr() { + return m_lastErrMsg; + } + + typedef void(*p_fstr)(CString); + void SetCallback(p_fstr); + + virtual DWORD Send(LPCSTR buffer, int l, BOOL needsResponse=FALSE) = 0; // [8/11/2004] + virtual DWORD Send(CString buffer, BOOL needsResponse=FALSE); // [8/11/2004] + + virtual bool IsValid() = 0; // pure virtual function +protected: + p_fstr m_pReceiveNotify; +}; + + +#endif // CMMIO_BASE_H \ No newline at end of file diff --git a/PcDmis/Base/Interfac/Msi/Hsi/SevenOcean/UtilityForSo7Light/UtilityForSo7Light/CMMIO_SERIAL.CPP b/PcDmis/Base/Interfac/Msi/Hsi/SevenOcean/UtilityForSo7Light/UtilityForSo7Light/CMMIO_SERIAL.CPP new file mode 100644 index 0000000..5a302b0 --- /dev/null +++ b/PcDmis/Base/Interfac/Msi/Hsi/SevenOcean/UtilityForSo7Light/UtilityForSo7Light/CMMIO_SERIAL.CPP @@ -0,0 +1,1275 @@ +#include "stdafx.h" + +#include + +#include "CMMIO_SERIAL.H " + +////////////////////////////////////////////////////////////////// +///////////////////////////////////////////////////////////////// +#define LONG_TIMEOUT 5000 + +/* +///////////////////////////////////////////////////////////////////////////// +// Code - Text for debug window +static char Codes[][6] = +{ + "","","","","","","","", + "","","","","","","","","", + "","","","","","","","", + "","","","","","","" +}; +*/ + +///////////////////////////////////////////////////////////////////////////// +// CPSerial() : Constructor + +///////////////////////////////////////////////////////////////////////////// +// CSerialTask() : Function to run ReceiveTask() method as a task +// + +unsigned int WINAPI CSerialTask(LPVOID CSerialPtr) +{ + TRACE( TEXT("Serial task has started \n") ); + // Call the ControlTask function in the specified plugin + ((CPSerial *)CSerialPtr)->ReceiveTask(); + + TRACE( TEXT("Serial task has completed \n") ); + + _endthreadex(0); + + return(0); +} + +CPSerial::CPSerial() +{ + // Serial port is not open + m_PortHandle = INVALID_HANDLE_VALUE; + m_IsWrtingData=FALSE; + // Default port settings + m_Port = 1; + m_Baud = CBR_115200; + m_Parity ='N'; + m_Bits = 8; + m_StopBits = 1; + m_HandShake =CS_HANDSHAKE_FOR_SO7; + m_RXTimeout = CS_DEFAULT_RX_TIMEOUT; + m_TXTimeout = CS_DEFAULT_TX_TIMEOUT; + m_iRecvState=FALSE; + m_iRecvBytes=0; + memset(m_RecvData,0,MAX_RECIEVE_BUFFER_SIZE); + // Everything else set to NULL + m_ThreadHandle = NULL; + //m_TXHead = NULL; + //m_TXTail = NULL; + //m_RXHead = NULL; + //m_RXTail =NULL; + memset( &m_ReceiveOLap, 0, sizeof( OVERLAPPED )); + memset( &m_TransmitOLap, 0, sizeof( OVERLAPPED )); + memset( &m_ReadOLap, 0, sizeof( OVERLAPPED )); + memset( &m_WriteOLap, 0, sizeof( OVERLAPPED )); + + m_hWaitCMMResponse = CreateEvent( NULL, TRUE, FALSE, NULL ); + m_hNewRx = CreateEvent( NULL, TRUE, FALSE, NULL ); // to trigger OnRx + m_ReadOLap.hEvent = CreateEvent(NULL, TRUE, FALSE, NULL); + + //m_RXTempPtr = NULL; + m_DebugInPtr = 0; + m_DebugCount = 0; + m_Item = 0; + m_MaxTXRetries = 5; + m_iRecvCount=252; + /* + // CriticalSection for locking lists + InitializeCriticalSection( &m_QueueLock ); + InitializeCriticalSection( &m_WriteLock ); + InitializeCriticalSection( &m_ReadLock ); + */ + // IsValidBuffer = FALSE; + CurrentPointer = 0; + + m_hWaitCMMResponse = CreateEvent( NULL, TRUE, FALSE, NULL ); + m_hNewRx = CreateEvent( NULL, TRUE, FALSE, NULL ); // to trigger OnRx + // pParent = NULL; +} + + +///////////////////////////////////////////////////////////////////////////// +// ~CPSerial() : Destructor - Close the port and free up the CriticalSection + +CPSerial::~CPSerial() +{ + if( IsOpen( ) ) + { + TRACE(TEXT("Warning : closing serial port in destructor\n")); + Close(); + } + while(GetNextReceived()) + ; // mp 3/3/99 prevents leaks + /* + DeleteCriticalSection( &m_QueueLock ); + DeleteCriticalSection( &m_ReadLock ); + DeleteCriticalSection( &m_WriteLock ); + */ + // close the overlapped io event + CloseHandle( m_ReadOLap.hEvent ); + CloseHandle( m_WriteOLap.hEvent ); + // + CloseHandle( m_hWaitCMMResponse ); + CloseHandle( m_hNewRx); +} + + +///////////////////////////////////////////////////////////////////////////// +// OpenPort() : Opens the serial port using the parameters set by default +// or a call to SetPort + +DWORD CPSerial::Open() +{ + CString PortName; + COMMTIMEOUTS CommTimeOut; + int Ok; + unsigned int ThreadID; + + // Ensure the debug window is registered + // RegisterDebugWindow( ); + + // Close the port incase it is already open + Close( ); + + // Start of assuming the worst + Ok = FALSE; + + // Format the file name and open it + // COM opens ports from 1..9 for two-difit ports it's becessary to use \\\\.\\COM +#if 0 + PortName.Format( TEXT("\\\\.\\COM%d"), m_Port ); +#else + PortName.Format( TEXT("COM%d"), m_Port ); +#endif + m_PortHandle = CreateFile( PortName, GENERIC_WRITE | GENERIC_READ, 0, NULL, + OPEN_EXISTING, + FILE_ATTRIBUTE_NORMAL | FILE_FLAG_OVERLAPPED, + NULL ); + if( IsOpen( ) ) + { + // Setup the port according to the stored parameters + if( ProgramPort( m_Port, m_Baud, m_Parity, m_Bits, m_StopBits, m_HandShake ) ) + { + // Setup the timeouts + CommTimeOut.ReadIntervalTimeout = 25; + CommTimeOut.ReadTotalTimeoutMultiplier = 1; + CommTimeOut.ReadTotalTimeoutConstant = 0; + CommTimeOut.WriteTotalTimeoutMultiplier = 0; + CommTimeOut.WriteTotalTimeoutConstant = m_TXTimeout; + if( SetCommTimeouts( m_PortHandle, &CommTimeOut ) ) + { + // Setup the buffer sizes + if( SetupComm( m_PortHandle, 2048, 2048 ) ) + { + // Setup the event masks for the monitoring task + if( SetCommMask( m_PortHandle, EV_RXCHAR | EV_TXEMPTY | EV_BREAK | + EV_CTS | EV_DSR | EV_ERR | EV_RLSD ) ) + { + // Initialise the Overlapping structures and start the + // monitoring task + m_ReceiveOLap.hEvent = CreateEvent( NULL, TRUE, FALSE, NULL ); + m_TransmitOLap.hEvent = CreateEvent( NULL, TRUE, FALSE, NULL ); + m_ThreadHandle = (HANDLE)_beginthreadex( NULL, 0, CSerialTask, this, + 0, &ThreadID ); + //Sleep(1000); + Ok = TRUE; + } + } + } + // clear msg waiting + m_iNbMsgWaiting = 0; + } + + // Things have gone wrong so close the port + if( Ok == FALSE ) + { + TRACE(_T("CmmIO> Port OPEN issue -> CLOSED\n"),Ok); + Close( ); + } + } + TRACE(_T("CmmIO> Port OPEN = %d \n"),Ok); + // Return the state + return( IsOpen( ) ); +} + + +///////////////////////////////////////////////////////////////////////////// +// IsOpen() : returns true if the serial port is open +// + +int CPSerial::IsOpen( ) +{ + return( m_PortHandle != INVALID_HANDLE_VALUE ); +} + + +///////////////////////////////////////////////////////////////////////////// +// SetPort() : Store the serial settings. If the port is open then these +// settings are applied now + +int CPSerial::SetPort(int Port,int Baud,char Parity,int Bits,int StopBits,int HandShake) +{ + // Use the current settings if the value has the default of 0 + m_Port = Port; + if(Baud == 0) + Baud = m_Baud; + if(Parity == 0) + Parity = m_Parity; + if(Bits == 0) + Bits = m_Bits; + if(StopBits == 0) + StopBits = m_StopBits; + if (HandShake==0) + HandShake=m_HandShake; + + + // If the values are ok then store them + if( ProgramPort( Port, Baud, Parity, Bits, StopBits, HandShake ) ) + { + m_Port = Port; + m_Baud = Baud; + m_Parity = Parity; + m_Bits = Bits; + m_StopBits = StopBits; + m_HandShake = HandShake; + return(TRUE); + } + return(FALSE); +} + + +///////////////////////////////////////////////////////////////////////////// +// GetPortData() : return the current settings +// + +void CPSerial::GetPortData(int *Port,int *Baud,char *Parity,int *Bits,int *StopBits,int *HandShake) +{ + // return the requested settings + if( Port ) + *Port = m_Port; + if( m_Baud ) + *Baud = m_Baud; + if( Parity ) + *Parity = m_Parity; + if( Bits ) + *Bits = m_Bits; + if( StopBits ) + *StopBits = m_StopBits; + if( HandShake ) + *HandShake = m_HandShake; +} + +DWORD CPSerial::SendWriteFile(const char *Buffer, DWORD Bytes) +{ + DWORD BytesWritten; + BOOL WriteState; + WriteState = WriteFile(m_PortHandle, &Buffer[0], Bytes, &BytesWritten, + &m_WriteOLap); + return WriteState; +} + +///////////////////////////////////////////////////////////////////////////// +// ClosePort() : Close the port and shut down the monitoring thread +// + +DWORD CPSerial::Close() +{ + //struct SerialList *Free; + HANDLE Port; + + // If the port is open then close it + if( IsOpen( ) ) + { + Port = m_PortHandle; + m_PortHandle = INVALID_HANDLE_VALUE; + CloseHandle( Port ); + if( WaitForSingleObject( m_ThreadHandle, (5 * LONG_TIMEOUT) ) != WAIT_OBJECT_0 ) + TRACE( TEXT("ERR:Serial port thread failed to terminate\n") ); + m_ThreadHandle = NULL; + CloseHandle( m_ReceiveOLap.hEvent ); + CloseHandle( m_TransmitOLap.hEvent ); + } + + CMMIO::Close(); + //ZH + /* + // Delete the contents of the temp rx pointer if any + delete[] m_RXTempPtr; + m_RXTempPtr = NULL; + + // Clear down all internal lists + EnterCriticalSection( &m_QueueLock ); + while( m_RXHead ) + { + Free = m_RXHead; + m_RXHead = m_RXHead->Next; + delete[] Free->Buffer; + delete Free; + } + m_RXHead = NULL; + while( m_TXHead ) + { + Free = m_TXHead; + m_TXHead = m_TXHead->Next; + delete[] Free->Buffer; + delete Free; + } + m_TXHead = NULL; + + LeaveCriticalSection( &m_QueueLock ); + */ + return(TRUE); +} + + +///////////////////////////////////////////////////////////////////////////// +// Send functions // [8/11/2004] +// + +DWORD CPSerial::Send(LPCSTR buffer, int l, BOOL /*needsResponse=FALSE*/) +{ + m_IsWrtingData=TRUE; + + return ( WritePort ((const char*) buffer, (DWORD) l)); +} +/* +DWORD CPSerial::Send(CString buffer) +{ +char LocBuffer[MAX_OUTPUT_BUFFER_SIZE]; +int length = buffer.GetLength (); +if (length >MAX_OUTPUT_BUFFER_SIZE) +{ +length = MAX_OUTPUT_BUFFER_SIZE; +} +unsigned short* ptr = (unsigned short*)buffer.GetBuffer (MAX_OUTPUT_BUFFER_SIZE); +for (int i=0;iBuffer, BytesWritten, 2 ); + OnTransmit( 0, BytesWritten ); + SendBuffer(TRUE); + } + } + */ + if(Events & EV_BREAK) + TRACE(_T("Break detected\n")); + if(Events & EV_CTS) + TRACE(_T("CTS Changed State\n")); + if(Events & EV_DSR) + TRACE(_T("DSR Changed State\n")); + if(Events & EV_ERR) + TRACE(_T("Line error\n")); + if(Events & EV_RLSD) + TRACE(_T("EV_RLSD error\n")); + } + + // Go round while the port is open + } + while( IsOpen( ) ); + +} + +///////////////////////////////////////////////////////////////////////////// +// OnReceive() : Default OnReceive() +// V114 + +void CPSerial::OnReceive() +{ + // Dummy OnReceieve if not used + char s[MAX_RECIEVE_BUFFER_SIZE]={0}; + s[1]='\0'; + CurrentPointer = 0; + if (m_HandShake==CS_HANDSHAKE_FOR_TRESASTR_E) + { + int num = ReadPort(s, MAX_RECIEVE_BUFFER_SIZE); + if ((num>0) && (num0) && (num Port was OPEN, ProgramPort done \n")); + } + else + { + TRACE(_T("CmmIO> Port was not OPEN ProgramPort not done \n")); + Ok = TRUE; + } + } + return(Ok); +} + +///////////////////////////////////////////////////////////////////////////// +// OnTransmit() : Default OnTransmit() +// + +void CPSerial::OnTransmit(int /*Item*/, DWORD /*Error*/) +{ + // Dummy OnTransmit if not used +} + + +///////////////////////////////////////////////////////////////////////////// +// SetTimeouts() : Sets the rx and tx timeouts +// + +void CPSerial::SetTimeouts( int RXTimeout, int TXTimeout ) +{ + COMMTIMEOUTS CommTimeOut; + + // Store the timeouts + m_RXTimeout = RXTimeout; + m_TXTimeout = TXTimeout; + + // If the port is open then configure the port also + // Currently we only use the Fixed timeouts + if( IsOpen( ) ) + { + CommTimeOut.ReadIntervalTimeout = 25; + CommTimeOut.ReadTotalTimeoutMultiplier = 1; + CommTimeOut.ReadTotalTimeoutConstant = 0; + CommTimeOut.WriteTotalTimeoutMultiplier = 0; + CommTimeOut.WriteTotalTimeoutConstant = m_TXTimeout; + SetCommTimeouts( m_PortHandle, &CommTimeOut ); + } +} + + +///////////////////////////////////////////////////////////////////////////// +// AddToDebug() : Add the data to the debug output. State is 1 = rx 2 = tx +// 3 = user + +void CPSerial::AddToDebug( const char * /*Ptr*/, DWORD /*BytesToCopy*/, int /*State*/ ) +{ + //ZH +#if 0 + // We are messing with pointers so use the CriticalSection + EnterCriticalSection(&m_QueueLock); + + // If ptr = NULL the change to string containing + if( Ptr == NULL ) + { + BytesToCopy = 0; + //Ptr = _T(""); + Ptr = ""; + } + + // If zero length then use length of string instead + if( BytesToCopy == 0) + BytesToCopy = strlen( Ptr ); + + // If length of data is greater then the debug buffer then just + // use the end of the data + if(BytesToCopy > CS_DEBUG_SIZE) + { + Ptr += BytesToCopy - CS_DEBUG_SIZE; + BytesToCopy = CS_DEBUG_SIZE; + } + + // If the data will wrap around then just copy the first block + if( ( m_DebugInPtr + BytesToCopy ) > CS_DEBUG_SIZE) + { + // Copy data to the end of the debug buffer + memcpy(m_DebugData + m_DebugInPtr, Ptr, CS_DEBUG_SIZE - m_DebugInPtr); + memset(m_DebugState + m_DebugInPtr, State, CS_DEBUG_SIZE - m_DebugInPtr); + m_DebugWnd.AddData( m_DebugData + m_DebugInPtr, + m_DebugState + m_DebugInPtr, + CS_DEBUG_SIZE - m_DebugInPtr ); + + // Move on by the amount copied + Ptr += CS_DEBUG_SIZE - m_DebugInPtr; + BytesToCopy -= CS_DEBUG_SIZE - m_DebugInPtr; + + // Point at the begining of the buffer + m_DebugInPtr = 0; + } + + // Copy the rest into the buffer + memcpy(m_DebugData + m_DebugInPtr, Ptr, BytesToCopy); + memset(m_DebugState + m_DebugInPtr, State, BytesToCopy); + m_DebugWnd.AddData( m_DebugData + m_DebugInPtr, + m_DebugState + m_DebugInPtr, BytesToCopy ); + m_DebugInPtr += BytesToCopy; + m_DebugCount += BytesToCopy; + + // Keep a count of howmany bytes are in the buffer + if( m_DebugCount > CS_DEBUG_SIZE ) + m_DebugCount = CS_DEBUG_SIZE; + + // All done so out of the CriticalSection + LeaveCriticalSection(&m_QueueLock); +#endif +} + + +///////////////////////////////////////////////////////////////////////////// +// FlushPort() : Removes all characters in the serial buffer +// +/* +int CPSerial::FlushPort(void) +{ +int TXTimeout,RXTimeout; +char FlushBuffer[256]; +DWORD BytesRead,BytesTotal; +struct SerialList *Free; + +if( IsOpen( ) ) +{ +// We are messing with pointers so use the CriticalSection +EnterCriticalSection(&m_QueueLock); + +// Make a copy of the timeouts and set back to the defaults +RXTimeout = m_RXTimeout; +TXTimeout = m_TXTimeout; +SetTimeouts( 10, 10 ); + +// Read all data from the port +BytesTotal=0; +while( ( BytesRead = ReadPort( FlushBuffer, 256 ) ) == 256 ) +BytesTotal+=BytesRead; +BytesTotal+=BytesRead; + +// Clear the Received list +while(m_RXHead) +{ +Free=m_RXHead; +m_RXHead=m_RXHead->Next; +delete[] Free->Buffer; +delete Free; +} + +// put the timeouts back +SetTimeouts( RXTimeout, TXTimeout ); + +m_iNbMsgWaiting = 0; + +// All done so out of the CriticalSection +LeaveCriticalSection(&m_QueueLock); +} +return(BytesTotal); +} +*/ + +///////////////////////////////////////////////////////////////////////////// +// MaxPort() : +// + +int CPSerial::MaxPort() +{ + // return the max port, :-) + return(8); +} + + +///////////////////////////////////////////////////////////////////////////// +// Transmit() : Adds data into a list to be transmitted when possible. +// the function OnTransmit() will be called for each block of +// data sent. +// + +int CPSerial::Transmit(const char * /*Buffer*/,DWORD /*Bytes*/) +{ + /* + struct SerialList *Ptr; + int Start; + + // Is the port open + if( IsOpen( ) ) + { + TRACE(_T("CmmIo> Port OPEN ... transmitting %d bytes \n"),Bytes); + // Yes so CriticalSection again + EnterCriticalSection(&m_QueueLock); + // Create a new list entry structure for the block of data + Ptr = new struct SerialList; + Ptr->Buffer = new char[Bytes]; + Ptr->Bytes = Bytes; + Ptr->Next = NULL; + Ptr->Item = m_Item++; + if(Ptr->Item == 0 ) + Ptr->Item = m_Item++; + memcpy( Ptr->Buffer, Buffer, Bytes ); + + // Add it into the list + if( m_TXTail ) + { + Start = FALSE; + m_TXTail->Next = Ptr; + } + else + { + Start = TRUE; + m_TXHead = Ptr; + } + m_TXTail = Ptr; + + // If the list was empty then start sending the data, otherwise + // it will be sentout when the previous data has been sent + if(Start) + SendBuffer(FALSE); + + // All done so out of the CriticalSection + LeaveCriticalSection(&m_QueueLock); + + //return the ID for this block + return( Ptr->Item ); + } + else{ + TRACE(_T("CmmIo> Port NOT OPEN ... FAILED TO TRANSMIT %d bytes \n"),Bytes); + } + */ + + return(0); +} + +///////////////////////////////////////////////////////////////////////////// +// AddReceived() : Helper function, this adds a block of data to a list which +// read back by GetNextReceived() +// + +/* +int CPSerial::AddReceived( const char *Buffer,DWORD Bytes) +{ +DWORD index = 0; //primary buffer index +struct SerialList *Ptr; +static char Buffer2[1000]; // result buffer +static char* pBuffer2 = &Buffer2[0]; +unsigned char c; +bool bArmed; +int count; +static int escape = 0; +static int tilde = 0; +static int tildeseqcount = 0; + +bool bDone = false; +bool bEventRequest = false; + +// ATLTRACE("AddReceived> pBuffer2 = %x\n",pBuffer2); +// ATLTRACE("Content %s\n",Buffer); +if (Bytes==0){ +// TRACE("CMMIO> Exiting , no real input"); +return TRUE; +} +do { +bArmed = false; +for (;index0x80 ){ +++ escape; // max will be 1 +// ATLTRACE(" ESCAPE ___>> %d\n",escape); +} + +if( c=='~' ){ +++ tilde; // max = 1 +// ATLTRACE(" TILDE ESC___>> %d\n",tilde); +} + +} +if (index == Bytes) bDone=true; +// else TRACE("\nCMMIO> (Serial)Splitting received stream....\n"); + +// We are messing with pointers so use the CriticalSection +if (bArmed ){ +EnterCriticalSection(&m_QueueLock); +//Allocate a new list and add it in +count = pBuffer2-(&Buffer2[0]); +Ptr = new struct SerialList; +Ptr->Buffer = new char[count + 1 ]; +Ptr->Bytes = count; +Ptr->Next = NULL; +memcpy( Ptr->Buffer, Buffer2, count ); +Ptr->Buffer[count] = 0; + +memcpy(m_sLastMessage,Buffer2,count); //copy to last message +m_sLastMessage[count]=0; + +if( m_RXTail ) +m_RXTail->Next = Ptr; +else +m_RXHead = Ptr; +m_RXTail = Ptr; + +// All done so out of the CriticalSection +++m_iNbMsgWaiting; +LeaveCriticalSection( &m_QueueLock ); +pBuffer2=&Buffer2[0]; // reset out buffer +count = 0; +escape = 0; +//new +tilde = 0; +tildeseqcount = 0; +///n + +bEventRequest = true; +} +} while (!bDone); +// ATLTRACE ("CMMIO> Done\n"); + +//ZH +#if 0 +if(bEventRequest){ +if (!(pParent->m_bNoFireEvent)) { +// ATLTRACE("CmmIO Serial> Setting Event m_hNewRx \n"); +SetEvent(m_hNewRx);// tell the system to fire event if needed... +} +else { +// ATLTRACE("CmmIO Serial> Setting Event pParent->m_hCmmResponded \n"); +// SetEvent(pParent->m_hCmmResponded); +} +} +#endif + +// if(bEventRequest){ +// if (pParent){ +// SetEvent(pParent->m_hCmmResponded); +// } +// } + +// else ATLTRACE("--- AddReceived> Leaving with part of msg in buffer, pBuffer2= %x\n",pBuffer2); +return(TRUE); +} +*/ + +///////////////////////////////////////////////////////////////////////////// +// GetNextReceived() : Helper function, receives messages placed in the queue +// by AddReceievd() +// +//ZH +/* +char *CPSerial::GetNextReceived(void) +{ +struct SerialList *Free; + +// If there is a previous block then delete it +delete[] m_RXTempPtr; +m_RXTempPtr = NULL; + +// We are messing with pointers so use the CriticalSection +EnterCriticalSection(&m_QueueLock); + +// If there any more to return +if( m_RXHead ) +{ +Free = m_RXHead; +m_RXHead = m_RXHead->Next; + +// Point the temp pointer at the block +m_RXTempPtr = Free->Buffer; + +// delete the list entry +delete Free; +--m_iNbMsgWaiting; // mp +} +if( m_RXHead == NULL ) +m_RXTail = NULL; + +// All done so out of the CriticalSection +LeaveCriticalSection( &m_QueueLock ); + +return( m_RXTempPtr ); +} +*/ + +///////////////////////////////////////////////////////////////////////////// +// HexToInt() : Helper function, converts the specifed number of bytes from +// ascii hex +// + +int CPSerial::HexToInt(char *Data, int Bytes) +{ + int Byte; + int HexChar, Value; + + Value = 0; + for( Byte = 0; Byte < Bytes; Byte++ ) + { + Value <<= 4; + HexChar = *Data++ -= '0'; + if( HexChar > 32 ) + HexChar -= 39; + else if( HexChar > 9 ) + HexChar -= 7; + Value += HexChar; + } + + return( Value ); +} + + +///////////////////////////////////////////////////////////////////////////// +// Private functions +// + +///////////////////////////////////////////////////////////////////////////// +// RegisterDebugWindow() : Registers the window class for the debug window. +// +//ZH +/* +void CPSerial::RegisterDebugWindow() +{ +// Register the CSerialRaw window for future use +WNDCLASS wndcls; +memset( &wndcls, 0, sizeof( WNDCLASS ) ); +wndcls.lpfnWndProc = DefWindowProc; +wndcls.hInstance = AfxGetInstanceHandle( ); +wndcls.hCursor = LoadCursor( NULL, IDC_ARROW ); +wndcls.hbrBackground = (HBRUSH)(COLOR_WINDOW + 1); +wndcls.style = CS_DBLCLKS | CS_HREDRAW | CS_VREDRAW; +wndcls.lpszClassName = TEXT("CPSerial"); +AfxRegisterClass( &wndcls ); +} +*/ + + + +#if 0 +///////////////////////////////////////////////////////////////////////////// +// SendBuffer() : Internal function, this writes the next block of data +// queued to the serial port. + +void CPSerial::SendBuffer(int Next) +{ + struct SerialList *Free; + // DWORD BytesWritten; + + // We are messing with pointers so use the CriticalSection + EnterCriticalSection(&m_QueueLock); + + // If we been told to go the next then do it + if(Next && m_TXHead) + { + Free=m_TXHead; + m_TXHead=m_TXHead->Next; + delete[] Free->Buffer; + delete Free; + + } + + // If there is still some data then send it + if(m_TXHead) + // WriteFile(m_PortHandle,m_TXHead->Buffer,m_TXHead->Bytes,&BytesWritten,&m_TransmitOLap); + WritePort(m_TXHead->Buffer,m_TXHead->Bytes); + else + m_TXTail=NULL; + + // All done so out of the CriticalSection + LeaveCriticalSection(&m_QueueLock); +} +#endif diff --git a/PcDmis/Base/Interfac/Msi/Hsi/SevenOcean/UtilityForSo7Light/UtilityForSo7Light/CMMIO_SERIAL.H b/PcDmis/Base/Interfac/Msi/Hsi/SevenOcean/UtilityForSo7Light/UtilityForSo7Light/CMMIO_SERIAL.H new file mode 100644 index 0000000..8803bef --- /dev/null +++ b/PcDmis/Base/Interfac/Msi/Hsi/SevenOcean/UtilityForSo7Light/UtilityForSo7Light/CMMIO_SERIAL.H @@ -0,0 +1,196 @@ +#ifndef CMMIO_SERIAL_H +#define CMMIO_SERIAL_H + +#include +#include +#include "CMMIO_BASE.H " + +//////////////////////////////////////////////////////////////////////////////// +/* +*$!!*************************************************************************** +*$!! MODULE NAME +*$!! Serial.h +*$!! +*$!! DESCRIPTION +*$!! Header file for CPSerial. +*$!! +*$!! AUTHOR +*$!! M.J.S.Gooder. +*$!! +*$!! HISTORY +*$!! $Log: /Plugins/BPI/Serial.h $ +*$!! +*$!! 28 19/03/98 14:04 Mgooder +*$!!*************************************************************************** +*/ + + +/////////////////////////////////////////////////////////////////////////////// +// Function for starting serial monitor thread +unsigned int WINAPI CSerialTask(LPVOID CSerialPtr); + +/////////////////////////////////////////////////////////////////////////////// +// Useful serial codes +const char CS_NUL = 0; +const char CS_SOH = 1; +const char CS_STX = 2; +const char CS_ETX = 3; +const char CS_EOT = 4; +const char CS_ENQ = 5; +const char CS_ACK = 6; +const char CS_BEL = 7; +const char CS_LF = 10; +const char CS_DLE = 16; +const char CS_X_ON = 17; +const char CS_X_OFF = 19; +const char CS_NAK = 21; +const char CS_ETB = 23; +const char CS_CAN = 24; +const char CS_ESC = 27; + + +/////////////////////////////////////////////////////////////////////////////// +// Handshake settings +const int CS_HANDSHAKE_RTSCTS = 1; +const int CS_HANDSHAKE_XONXOFF = 2; +const int CS_HANDSHAKE_NONE = 3; +const int CS_HANDSHAKE_RTSCTS_DTRDSR = 4; +const int CS_HANDSHAKE_FOR_SO7 = 5; +const int CS_HANDSHAKE_FOR_TRESASTR_E = 6; + + + +/////////////////////////////////////////////////////////////////////////////// +// Debug constants +const int CS_DEBUG_SIZE = 1024; + +/////////////////////////////////////////////////////////////////////////////// +// Timeouts (ms) +const int CS_DEFAULT_RX_TIMEOUT = 25; +const int CS_DEFAULT_TX_TIMEOUT = 1000; + +/////////////////////////////////////////////////////////////////////////////// +// The CPSerial class + +class CPSerial : public CMMIO +{ + // Construction +public: + CPSerial(); + + // Implementation +public: + virtual ~CPSerial(); + + // Attributes +public: + + // Operations +public: + // Open the serial port ( if possible ) using the parameters set by SetPort() + DWORD Open(); + // Setup the serial port prior to opening it + int SetPort( int Port, int Baud = 0, char Parity = 0, int Bits = 0, + int StopBits = 0, int HandShake = 0 ); + // Set up the port timeouts + void SetTimeouts( int RXTimeout = CS_DEFAULT_RX_TIMEOUT, + int TXTimeout = CS_DEFAULT_TX_TIMEOUT ); + // Get the serial port settings + void GetPortData( int *Port, int *Baud, char *Parity, int *Bits, + int *StopBits, int *HandShake ); + // Test if the serial port is open + bool IsValid() { + return IsOpen()!=0; + } + int IsOpen( void ); + // Close the serial port + DWORD Close( void ); + // Flush all data in any serial port buffers + int FlushPort( void ); + // Attempt to read the specified number of bytes + DWORD ReadPort( char *Buffer, DWORD Bytes ); + DWORD ReadPort( CString &Buffer, DWORD Bytes ); + // Attempt to write the specified number of bytes + DWORD WritePort( const char *Buffer, DWORD Bytes ); + DWORD SendWriteFile(const char *Buffer, DWORD Bytes); + // Send the specifed number of bytes out when possible + int Transmit( const char *Buffer, DWORD Bytes ); + // Add a block of data to the internal list of receieved blocks + int AddReceived( const char *Buffer, DWORD Bytes ); + // Get the next block of data added with AddReceived() + // char *GetNextReceived( void ); + // Find the maximum port number available + int MaxPort( void ); + // Add text to the debug output + void AddToDebug( const char *Ptr, DWORD BytesToCopy, int State ); + // Attach this serial port to a debug window + //CSerialRaw *AttachWnd( CWnd *Wnd ); + // Convert ascii hex into an int + int HexToInt( char *Data, int Bytes ); + + virtual DWORD Send(LPCSTR buffer, int l, BOOL needsResponse=FALSE); + //virtual DWORD Send(CString what); + + // Called when data is received on the serial port + virtual void OnReceive( void ); + // Called when data has been sent using the Transmit() function + virtual void OnTransmit( int Item, DWORD Error ); + +private: + // Private so no comment :-) + void RegisterDebugWindow(void); + void SendBuffer(int Next); + void ReceiveTask(void); + int ProgramPort(int Port,int Baud,char Parity,int Bits,int StopBits,int HandShake); + + // Attributes +protected: + int m_RXTimeout; + int m_TXTimeout; + + // Attributes +private: + char m_Parity; + // char m_DebugData[CS_DEBUG_SIZE]; + // char m_DebugState[CS_DEBUG_SIZE]; + // char *m_RXTempPtr; + int m_Port; + int m_Baud; + int m_Bits; + int m_StopBits; + int m_HandShake; + int m_MaxTXRetries; + int m_DebugInPtr; + int m_DebugCount; + int m_Item; + // struct SerialList *m_TXHead; + // struct SerialList *m_TXTail; + // struct SerialList *m_RXHead; + // struct SerialList *m_RXTail; + OVERLAPPED m_ReceiveOLap; + OVERLAPPED m_TransmitOLap; + OVERLAPPED m_ReadOLap; + OVERLAPPED m_WriteOLap; + HANDLE m_PortHandle; + HANDLE m_ThreadHandle; + HANDLE m_ReceiveTaskEvent; + +private: + friend unsigned int WINAPI CSerialTask(LPVOID CSerialPtr); + + //Buffer for incomming commands: + int CurrentPointer; + BOOL m_IsWrtingData; +public: + HANDLE m_hWaitCMMResponse; + HANDLE m_hNewRx; + + // BV Nov 2001: Made public + // CRITICAL_SECTION m_QueueLock; + BOOL m_iRecvState; + INT m_iRecvBytes; + INT m_iRecvCount; + unsigned char m_RecvData[MAX_RECIEVE_BUFFER_SIZE]; +}; + +#endif // CMMIO_SERIAL_H \ No newline at end of file diff --git a/PcDmis/Base/Interfac/Msi/Hsi/SevenOcean/UtilityForSo7Light/UtilityForSo7Light/GetDigitalLuxMeterValue.cpp b/PcDmis/Base/Interfac/Msi/Hsi/SevenOcean/UtilityForSo7Light/UtilityForSo7Light/GetDigitalLuxMeterValue.cpp new file mode 100644 index 0000000..972d4c8 --- /dev/null +++ b/PcDmis/Base/Interfac/Msi/Hsi/SevenOcean/UtilityForSo7Light/UtilityForSo7Light/GetDigitalLuxMeterValue.cpp @@ -0,0 +1,287 @@ +#include "stdafx.h" +#include "So7_Illumination.h" +#include "ReadWriteIni.h" +#include "GetDigitalLuxMeterValue.h" + + +enum eThreadSignal +{ + THREAD_STATE_RUNNING, // Current state of the thread + THREAD_STATE_EXIT // Signal to thread to exit +}; +unsigned __stdcall ReadLightData(LPVOID pThis); +eThreadSignal _serial_WatchThreadState; +const char DigitalLuxMeter_StopDatas[9] = { 0X3C,0X02,0X00,0X00,0X00,0X00,0X00,0XDE,0X00 }; +const char DigitalLuxMeter_StartDatas[9] = { 0X1E,0X00,0X00,0X00,0X00,0X00,0X00,0X1E,0X00 }; +const char DigitalLuxMeter_BeginDatas[9] = { 0X3C,0X01,0X00,0X00,0X00,0X00,0X00,0X3D,0X00 }; +HANDLE _smc_WatchThreadHandle; +CGetDigitalLuxMeterValue::CGetDigitalLuxMeterValue() +{ + m_iSerialComPort = 1; + m_iBuadRate = 19200; + m_iSleepTime = 50; + m_dCabStep = 0.1; + m_iCompareGap = 25; + m_iSelectLightType = 0; + m_iRoadBoardNum = 1; + m_iGetWhichRingForInitValue = 2; + m_iRingGapSleepTime = 20; + m_bIsEnableToGetLuxValue = true; + m_bGetSingleRingInitValue = true; + m_bPopUpPromptDialog = false; +} + + +CGetDigitalLuxMeterValue::~CGetDigitalLuxMeterValue() +{ + _serial_WatchThreadState = THREAD_STATE_EXIT; +} + +void CGetDigitalLuxMeterValue::LoadConfig() +{ + CString filePath; + CSo7_Illumination oSo7Illum; + oSo7Illum.GetAppPath(filePath); + CString strFileName = filePath + _T("\\Device.Config.ini"); + CString strKeyName = _T("DIGITAL_LUX_METER_RS232_SERIALCOMPORT"); + CString strRS232Enable = _T("DigitalLuxMeterRS232Enable"); + CString strRS232ComNum = _T("DigitalLuxMeterRS232ComNum"); + //CString strRS232BuadRate = _T("DigitalLuxMeterRS232BuadRate"); + CString strRS232SleepTime = _T("DigitalLuxMeterRS232SleepTime"); + CString strRS232CabStep = _T("DigitalLuxMeterCabStep"); + CString strRS232LightType= _T("LightType"); + CString strRS232RoadBoardNum = _T("RoadBoardNum"); + CString strRS232CabCompGap = _T("DigitalLuxMeterCabCompGap"); + CString strRS232CabGetSingRingInitValue = _T("DigitalLuxMeterGetSingRingInitValue"); + CString strRS232CabGetWhichRingForInitValue = _T("DigitalLuxMeterGetWhichRingForInitValue"); + CString strPopUpPromptDialog = _T("PopUpPromptDialog"); + CString strRingGapSleepTime = _T("RingGapSleepTime"); + ReadWriteIni rIni(strFileName); + rIni.setSection(strKeyName); + m_bIsEnableToGetLuxValue = rIni.getBool(strRS232Enable, false, true); + m_bPopUpPromptDialog = rIni.getBool(strPopUpPromptDialog, false, true); + m_iSerialComPort = rIni.getInt(strRS232ComNum, 1, true); + m_iBuadRate = 19200; + //m_iBuadRate = rIni.getInt(strRS232BuadRate, 19200); + m_iSleepTime = rIni.getInt(strRS232SleepTime, 100, true); + m_dCabStep = rIni.getDouble(strRS232CabStep, 0.1, true); + m_iCompareGap = rIni.getInt(strRS232CabCompGap, 25, true); + m_iRoadBoardNum = rIni.getInt(strRS232RoadBoardNum, 1, true); + m_iSelectLightType = rIni.getInt(strRS232LightType, 0, true); + m_bGetSingleRingInitValue = rIni.getBool(strRS232CabGetSingRingInitValue, true, true); + m_iGetWhichRingForInitValue = rIni.getInt(strRS232CabGetWhichRingForInitValue, 2, true); + m_iRingGapSleepTime = rIni.getInt(strRingGapSleepTime, 20, true); + if ((m_iGetWhichRingForInitValue > 5) || (m_iGetWhichRingForInitValue < 0)) + { + m_iGetWhichRingForInitValue = 2; + } +} + +void CGetDigitalLuxMeterValue::SaveIni() +{ + CString filePath; + CSo7_Illumination oSo7Illum; + oSo7Illum.GetAppPath(filePath); + CString strFileName = filePath + _T("\\Device.Config.ini"); + CString strKeyName = _T("DIGITAL_LUX_METER_RS232_SERIALCOMPORT"); + CString strRS232Enable = _T("DigitalLuxMeterRS232Enable"); + CString strRS232ComNum = _T("DigitalLuxMeterRS232ComNum"); + //CString strRS232BuadRate = _T("DigitalLuxMeterRS232BuadRate"); + CString strRS232SleepTime = _T("DigitalLuxMeterRS232SleepTime"); + CString strRS232CabStep = _T("DigitalLuxMeterCabStep"); + CString strRS232LightType = _T("LightType"); + CString strRS232RoadBoardNum = _T("RoadBoardNum"); + CString strRS232CabCompGap = _T("DigitalLuxMeterCabCompGap"); + CString strRS232CabGetSingRingInitValue = _T("DigitalLuxMeterGetSingRingInitValue"); + CString strRS232CabGetWhichRingForInitValue = _T("DigitalLuxMeterGetWhichRingForInitValue"); + ReadWriteIni wIni(strFileName); + wIni.setSection(strKeyName); + wIni.setBool(strRS232Enable, m_bIsEnableToGetLuxValue); + wIni.setInt(strRS232ComNum, m_iSerialComPort); + wIni.setInt(strRS232SleepTime, m_iSleepTime); + wIni.setDouble(strRS232CabStep, m_dCabStep); + wIni.setInt(strRS232RoadBoardNum, m_iRoadBoardNum); + wIni.setInt(strRS232LightType, m_iSelectLightType); + wIni.setInt(strRS232CabCompGap, m_iCompareGap); + wIni.setBool(strRS232CabGetSingRingInitValue, m_bGetSingleRingInitValue); + wIni.setInt(strRS232CabGetWhichRingForInitValue, m_iGetWhichRingForInitValue); + //wIni.setInt(strRS232BuadRate, m_iBuadRate); +} + +unsigned __stdcall ReadLightData(LPVOID pThis) +{ + CGetDigitalLuxMeterValue* _pThis = (CGetDigitalLuxMeterValue*)pThis; + while (_serial_WatchThreadState == THREAD_STATE_RUNNING) + { + _pThis->OnGetRealTimeDigitalLuxMeterValueResult(); + } + return 0; +}; + +BOOL CGetDigitalLuxMeterValue::OnInit() +{ + BOOL bInitState = FALSE; + LoadConfig(); + + if (m_bIsEnableToGetLuxValue) + { + m_SO7_Serial.SetPort(m_iSerialComPort, m_iBuadRate); + if (m_SO7_Serial.Open()) + { + bInitState = TRUE; + } + else + { + bInitState = FALSE; + } + + if (bInitState == FALSE) + { + CString str = (L"Serial port open failed!"); + str.AppendFormat((L"Port Number:")); + str.AppendFormat(_T("%d "), m_iSerialComPort); + MessageBoxEx(NULL, str, (L"Serial port"), MB_OK | MB_SYSTEMMODAL, MB_SYSTEMMODAL); + } + BOOL bReady = OnStartDigitalLuxMeter(); + if (bReady) + { + _serial_WatchThreadState = THREAD_STATE_RUNNING; + _smc_WatchThreadHandle = CreateThread((LPSECURITY_ATTRIBUTES)NULL, + 0, (LPTHREAD_START_ROUTINE)ReadLightData, + this, 0, NULL); + } + } + return bInitState; +} + +BOOL CGetDigitalLuxMeterValue::OnUninit() +{ + if (m_bIsEnableToGetLuxValue) + { + m_SO7_Serial.Close(); + _serial_WatchThreadState = THREAD_STATE_EXIT; + ExitThread(0); + } + return TRUE; +} + +BOOL CGetDigitalLuxMeterValue::OnStartDigitalLuxMeter() +{ + BOOL bState = FALSE; + + DWORD iWriteByte = m_SO7_Serial.Send(DigitalLuxMeter_StopDatas, 9); + INT iRetrys(0); + Sleep(50); + + iWriteByte = m_SO7_Serial.Send(DigitalLuxMeter_StartDatas, 9); + iRetrys = 0; + while (!m_SO7_Serial.m_iRecvState && iRetrys < 18 && iWriteByte == 9) + { + iRetrys++; + Sleep(50); + } + if (m_SO7_Serial.m_iRecvState) + { + m_SO7_Serial.m_iRecvState = FALSE; + } + else + { + bState = FALSE; + MessageBox(nullptr, L"Start digital lux meter error", L"Error", MB_ICONERROR); + } + + iWriteByte = m_SO7_Serial.Send(DigitalLuxMeter_BeginDatas, 9); + iRetrys = 0; + while (!m_SO7_Serial.m_iRecvState && iRetrys < 18 && iWriteByte == 9) + { + iRetrys++; + Sleep(50); + } + if (m_SO7_Serial.m_iRecvState) + { + m_SO7_Serial.m_iRecvState = FALSE; + } + else + { + bState = FALSE; + MessageBox(nullptr, L"Start digital lux meter error", L"Error", MB_ICONERROR); + } + bState = TRUE; + return bState; +} + +BOOL CGetDigitalLuxMeterValue::OnStopToGetRealTimeDigitalLuxMeterValue() +{ + BOOL bState = FALSE; + DWORD iWriteByte = m_SO7_Serial.Send(DigitalLuxMeter_StopDatas, 9); + INT iRetrys(0); + while (!m_SO7_Serial.m_iRecvState && iRetrys < 18 && iWriteByte == 9) + { + iRetrys++; + Sleep(50); + } + if (m_SO7_Serial.m_iRecvState) + { + m_SO7_Serial.m_iRecvState = FALSE; + } + else + { + bState = FALSE; + MessageBox(nullptr, L"Stop digital lux meter error", L"Error", MB_ICONERROR); + } + bState = TRUE; + return bState; +} + +void CGetDigitalLuxMeterValue::OnGetRealTimeDigitalLuxMeterValueResult() +{ + INT iRetrys(0); + if (m_SO7_Serial.m_iRecvState) + { + if (m_SO7_Serial.m_iRecvBytes == 8) + { + int num3 = 0.0; + double num4 = 0.0; + int num5 = 0; + int num6 = 0.0; + num3 = m_SO7_Serial.m_RecvData[2] >> 6; + switch (num3) + { + case 0: + num4 = 1.0; + break; + + case 1: + num4 = 10.0; + break; + + case 2: + num4 = 100.0; + break; + + case 3: + num4 = 1000.0; + break; + } + num5 = m_SO7_Serial.m_RecvData[2] & 0x3f; + num6 = m_SO7_Serial.m_RecvData[3]; + double value1 = ((num5 * 0x100) + num6) * 0.1; + m_dLuxVal = value1 * num4; + m_dTempVal = (m_SO7_Serial.m_RecvData[5] * 0x100) + m_SO7_Serial.m_RecvData[6]; + if (m_SO7_Serial.m_RecvData[4] == 0) + { + m_dTempVal *= -0.1; + } + else + { + m_dTempVal *= 0.1; + } + } + + m_SO7_Serial.m_iRecvState = FALSE; + } + else + { + Sleep(50); + } +} \ No newline at end of file diff --git a/PcDmis/Base/Interfac/Msi/Hsi/SevenOcean/UtilityForSo7Light/UtilityForSo7Light/GetDigitalLuxMeterValue.h b/PcDmis/Base/Interfac/Msi/Hsi/SevenOcean/UtilityForSo7Light/UtilityForSo7Light/GetDigitalLuxMeterValue.h new file mode 100644 index 0000000..ac8e8ad --- /dev/null +++ b/PcDmis/Base/Interfac/Msi/Hsi/SevenOcean/UtilityForSo7Light/UtilityForSo7Light/GetDigitalLuxMeterValue.h @@ -0,0 +1,34 @@ +#pragma once +#include "CMMIO_SERIAL.H" + +class CGetDigitalLuxMeterValue +{ +public: + CGetDigitalLuxMeterValue(); + ~CGetDigitalLuxMeterValue(); + BOOL OnInit(); + BOOL OnUninit(); + BOOL OnStartDigitalLuxMeter(); + BOOL OnStopToGetRealTimeDigitalLuxMeterValue(); + void OnGetRealTimeDigitalLuxMeterValueResult(); + void SaveIni(); +public: + int m_iSerialComPort; + int m_iBuadRate; + int m_iSleepTime; + int m_iCompareGap; + int m_iRoadBoardNum; + int m_iSelectLightType; + int m_iRingGapSleepTime; + bool m_bGetSingleRingInitValue; + int m_iGetWhichRingForInitValue; + double m_dCabStep; + bool m_bIsEnableToGetLuxValue; + bool m_bPopUpPromptDialog; + double m_dLuxVal; + double m_dTempVal; +protected: + void LoadConfig(); + CPSerial m_SO7_Serial; +}; + diff --git a/PcDmis/Base/Interfac/Msi/Hsi/SevenOcean/UtilityForSo7Light/UtilityForSo7Light/ReadWriteIni.cpp b/PcDmis/Base/Interfac/Msi/Hsi/SevenOcean/UtilityForSo7Light/UtilityForSo7Light/ReadWriteIni.cpp new file mode 100644 index 0000000..4a21fe8 --- /dev/null +++ b/PcDmis/Base/Interfac/Msi/Hsi/SevenOcean/UtilityForSo7Light/UtilityForSo7Light/ReadWriteIni.cpp @@ -0,0 +1,150 @@ + +#include "stdafx.h" +#include "ReadWriteIni.h" + +#pragma warning(push) +#pragma warning(disable: 4786) +#pragma warning(disable: 4996) +#pragma warning(disable: 4800) + +///////////////////////////////////////////////////////////////////////////////////// + +ReadWriteIni::ReadWriteIni() +{ + m_nDefDoubleBitNum = 6; + setSection(_T("Defalut")); +} + +ReadWriteIni::ReadWriteIni(const wchar_t* szFilePath) +{ + m_nDefDoubleBitNum = 6; + LoadFile(szFilePath); + setSection(_T("Defalut")); +} + +ReadWriteIni::ReadWriteIni(const wchar_t* szFilePath, const wchar_t* szSection) +{ + m_nDefDoubleBitNum = 6; + LoadFile(szFilePath); + setSection(szSection); +} + +bool ReadWriteIni::LoadFile(const wchar_t* szFilePath) +{ + ::GetFullPathNameW(szFilePath, MAX_PATH, m_szFilePath, NULL); + setSection(_T("Defalut")); + return true; +} + +bool ReadWriteIni::SaveFile() +{ + setSection(L"XXX{B1CAE400-AF03-40E4-A1CE-30F2134309DE}XXX"); + delSection(L"XXX{B1CAE400-AF03-40E4-A1CE-30F2134309DE}XXX"); + setSection(m_szSection); + return true; +} + +void ReadWriteIni::setSection(const wchar_t* szSection) +{ + wcscpy_s(m_szSection, szSection); + return; +} + +bool ReadWriteIni::delSection(const wchar_t* szSection) +{ + return ::WritePrivateProfileStringW(szSection, NULL, NULL, m_szFilePath); +} + +bool ReadWriteIni::delKeyName(const wchar_t* szKeyName) +{ + return ::WritePrivateProfileStringW(m_szSection, szKeyName, NULL, m_szFilePath); +} + +bool ReadWriteIni::setInt(const wchar_t* szKey, int nVal) +{ + swprintf_s(m_szValTemp, L"%d", nVal); + return ::WritePrivateProfileStringW(m_szSection, szKey, m_szValTemp, m_szFilePath); +} + + + +int ReadWriteIni::getInt(const wchar_t* szKey, int nDefVal /*= 0*/, bool bAddIfUnexist /*= false*/) +{ + int UnExistNumber = LIMIT_MAX_32INT; + int nVal = ::GetPrivateProfileIntW(m_szSection, szKey, UnExistNumber, m_szFilePath); + if (nVal == UnExistNumber) + { + if (bAddIfUnexist) + setInt(szKey, nDefVal); + return nDefVal; + } + return nVal; +} + + +bool ReadWriteIni::setBool(const wchar_t* szKey, bool bVal) +{ + return setInt(szKey, (int)bVal); +} + + + +bool ReadWriteIni::getBool(const wchar_t* szKey, bool bDefVal /*= false*/, bool bAddIfUnexist /*= false*/) +{ + return (bool)getInt(szKey, bDefVal, bAddIfUnexist); +} + +bool ReadWriteIni::setString(const wchar_t* szKey, const wchar_t* szVal) +{ + return ::WritePrivateProfileStringW(m_szSection, szKey, szVal, m_szFilePath); +} + +const wchar_t* ReadWriteIni::getString(const wchar_t* szKey, const wchar_t* szDefVal /*= NULL*/, bool bAddIfUnexist /*= false*/) +{ + ::GetPrivateProfileStringW(m_szSection, szKey, szDefVal, m_szValTemp, sizeof(m_szValTemp), m_szFilePath); + if (bAddIfUnexist && (m_szValTemp[0] == 0) && (szDefVal != nullptr)) + { + wcscpy_s(m_szValTemp, szDefVal); + setString(szKey, szDefVal); + } + return m_szValTemp; +} + +bool ReadWriteIni::setDouble(const wchar_t* szKey, double dVal) +{ + switch (m_nDefDoubleBitNum) + { + case 1: {swprintf_s(m_szValTemp, L"%.1f", dVal);break;} + case 2: {swprintf_s(m_szValTemp, L"%.2f", dVal);break;} + case 3: {swprintf_s(m_szValTemp, L"%.3f", dVal);break;} + case 4: {swprintf_s(m_szValTemp, L"%.4f", dVal);break;} + case 5: {swprintf_s(m_szValTemp, L"%.5f", dVal);break;} + case 6: {swprintf_s(m_szValTemp, L"%.6f", dVal);break;} + case 7: {swprintf_s(m_szValTemp, L"%.7f", dVal);break;} + case 8: {swprintf_s(m_szValTemp, L"%.8f", dVal);break;} + case 9: {swprintf_s(m_szValTemp, L"%.9f", dVal);break;} + default: {swprintf_s(m_szValTemp, L"%.6f", dVal);break;} + } + return setString(szKey, m_szValTemp); +} + +double ReadWriteIni::getDouble(const wchar_t* szKey, double dDefVal/*=0*/, bool bAddIfUnexist /*= false*/) +{ + const wchar_t* m_pVal = getString(szKey, 0, false); + if (m_pVal[0] != 0) + { + double dVal = _wtof(m_pVal); + return dVal; + } + else + { + if (bAddIfUnexist) + { + setDouble(szKey, dDefVal); + } + return dDefVal; + } + return 0.0f; +} + +#pragma warning(pop) diff --git a/PcDmis/Base/Interfac/Msi/Hsi/SevenOcean/UtilityForSo7Light/UtilityForSo7Light/ReadWriteIni.h b/PcDmis/Base/Interfac/Msi/Hsi/SevenOcean/UtilityForSo7Light/UtilityForSo7Light/ReadWriteIni.h new file mode 100644 index 0000000..eaf0737 --- /dev/null +++ b/PcDmis/Base/Interfac/Msi/Hsi/SevenOcean/UtilityForSo7Light/UtilityForSo7Light/ReadWriteIni.h @@ -0,0 +1,38 @@ +#pragma once +#define MAX_PATH 260 +#define LIMIT_MAX_32INT 2147483647 +class ReadWriteIni +{ +public: + ReadWriteIni(); + ReadWriteIni(const wchar_t* szFilePath); + ReadWriteIni(const wchar_t* szFilePath, const wchar_t* szSection); + ~ReadWriteIni() {} +public: + bool LoadFile(const wchar_t* szFilePath); + bool SaveFile(); + const wchar_t* GetFile() { return m_szFilePath; } +public: + void setSection(const wchar_t* szSection); + bool delSection(const wchar_t* szSection); + bool delKeyName(const wchar_t* szKeyName); +public: + bool setInt(const wchar_t* szKey, int nVal); + int getInt(const wchar_t* szKey, int nDefVal = 0, bool bAddIfUnexist = false); + + bool setBool(const wchar_t* szKey, bool bVal); + bool getBool(const wchar_t* szKey, bool bDefVal = false, bool bAddIfUnexist = false); + + bool setString(const wchar_t* szKey, const wchar_t* szVal); + const wchar_t* getString(const wchar_t* szKey, const wchar_t* szDefVal = NULL, bool bAddIfUnexist = false); +public: + bool setDouble(const wchar_t* szKey, double dVal); + double getDouble(const wchar_t* szKey, double dDefVal = 0, bool bAddIfUnexist = false); + void setDefDoubleBitNum(int num) { m_nDefDoubleBitNum = num; } +private: + static const int MAX_BUFF_STRING = 1024; + wchar_t m_szFilePath[MAX_PATH]; + wchar_t m_szSection[MAX_BUFF_STRING]; + wchar_t m_szValTemp[MAX_BUFF_STRING]; + int m_nDefDoubleBitNum; +}; \ No newline at end of file diff --git a/PcDmis/Base/Interfac/Msi/Hsi/SevenOcean/UtilityForSo7Light/UtilityForSo7Light/Release/UtilityF.BFC37D2E.tlog/CL.command.1.tlog b/PcDmis/Base/Interfac/Msi/Hsi/SevenOcean/UtilityForSo7Light/UtilityForSo7Light/Release/UtilityF.BFC37D2E.tlog/CL.command.1.tlog new file mode 100644 index 0000000..7e605c4 Binary files /dev/null and b/PcDmis/Base/Interfac/Msi/Hsi/SevenOcean/UtilityForSo7Light/UtilityForSo7Light/Release/UtilityF.BFC37D2E.tlog/CL.command.1.tlog differ diff --git a/PcDmis/Base/Interfac/Msi/Hsi/SevenOcean/UtilityForSo7Light/UtilityForSo7Light/Release/UtilityF.BFC37D2E.tlog/CL.read.1.tlog b/PcDmis/Base/Interfac/Msi/Hsi/SevenOcean/UtilityForSo7Light/UtilityForSo7Light/Release/UtilityF.BFC37D2E.tlog/CL.read.1.tlog new file mode 100644 index 0000000..4cea439 Binary files /dev/null and b/PcDmis/Base/Interfac/Msi/Hsi/SevenOcean/UtilityForSo7Light/UtilityForSo7Light/Release/UtilityF.BFC37D2E.tlog/CL.read.1.tlog differ diff --git a/PcDmis/Base/Interfac/Msi/Hsi/SevenOcean/UtilityForSo7Light/UtilityForSo7Light/Release/UtilityF.BFC37D2E.tlog/CL.write.1.tlog b/PcDmis/Base/Interfac/Msi/Hsi/SevenOcean/UtilityForSo7Light/UtilityForSo7Light/Release/UtilityF.BFC37D2E.tlog/CL.write.1.tlog new file mode 100644 index 0000000..d0a948d Binary files /dev/null and b/PcDmis/Base/Interfac/Msi/Hsi/SevenOcean/UtilityForSo7Light/UtilityForSo7Light/Release/UtilityF.BFC37D2E.tlog/CL.write.1.tlog differ diff --git a/PcDmis/Base/Interfac/Msi/Hsi/SevenOcean/UtilityForSo7Light/UtilityForSo7Light/Release/UtilityF.BFC37D2E.tlog/UtilityForSo7Light.lastbuildstate b/PcDmis/Base/Interfac/Msi/Hsi/SevenOcean/UtilityForSo7Light/UtilityForSo7Light/Release/UtilityF.BFC37D2E.tlog/UtilityForSo7Light.lastbuildstate new file mode 100644 index 0000000..2e62046 --- /dev/null +++ b/PcDmis/Base/Interfac/Msi/Hsi/SevenOcean/UtilityForSo7Light/UtilityForSo7Light/Release/UtilityF.BFC37D2E.tlog/UtilityForSo7Light.lastbuildstate @@ -0,0 +1,2 @@ +#TargetFrameworkVersion=v4.0:PlatformToolSet=v140:EnableManagedIncrementalBuild=false:VCToolArchitecture=Native32Bit:WindowsTargetPlatformVersion=8.1 +Release|Win32|D:\why\Git_Metus_Tree\HG_EF7_HSI_EF1\PcDmis\Base\Interfac\Msi\Hsi\SevenOcean\UtilityForSo7Light\| diff --git a/PcDmis/Base/Interfac/Msi/Hsi/SevenOcean/UtilityForSo7Light/UtilityForSo7Light/Release/UtilityF.BFC37D2E.tlog/link.command.1.tlog b/PcDmis/Base/Interfac/Msi/Hsi/SevenOcean/UtilityForSo7Light/UtilityForSo7Light/Release/UtilityF.BFC37D2E.tlog/link.command.1.tlog new file mode 100644 index 0000000..80ee659 Binary files /dev/null and b/PcDmis/Base/Interfac/Msi/Hsi/SevenOcean/UtilityForSo7Light/UtilityForSo7Light/Release/UtilityF.BFC37D2E.tlog/link.command.1.tlog differ diff --git a/PcDmis/Base/Interfac/Msi/Hsi/SevenOcean/UtilityForSo7Light/UtilityForSo7Light/Release/UtilityF.BFC37D2E.tlog/link.read.1.tlog b/PcDmis/Base/Interfac/Msi/Hsi/SevenOcean/UtilityForSo7Light/UtilityForSo7Light/Release/UtilityF.BFC37D2E.tlog/link.read.1.tlog new file mode 100644 index 0000000..dd8bc1b Binary files /dev/null and b/PcDmis/Base/Interfac/Msi/Hsi/SevenOcean/UtilityForSo7Light/UtilityForSo7Light/Release/UtilityF.BFC37D2E.tlog/link.read.1.tlog differ diff --git a/PcDmis/Base/Interfac/Msi/Hsi/SevenOcean/UtilityForSo7Light/UtilityForSo7Light/Release/UtilityF.BFC37D2E.tlog/link.write.1.tlog b/PcDmis/Base/Interfac/Msi/Hsi/SevenOcean/UtilityForSo7Light/UtilityForSo7Light/Release/UtilityF.BFC37D2E.tlog/link.write.1.tlog new file mode 100644 index 0000000..a7f8872 Binary files /dev/null and b/PcDmis/Base/Interfac/Msi/Hsi/SevenOcean/UtilityForSo7Light/UtilityForSo7Light/Release/UtilityF.BFC37D2E.tlog/link.write.1.tlog differ diff --git a/PcDmis/Base/Interfac/Msi/Hsi/SevenOcean/UtilityForSo7Light/UtilityForSo7Light/Release/UtilityF.BFC37D2E.tlog/rc.command.1.tlog b/PcDmis/Base/Interfac/Msi/Hsi/SevenOcean/UtilityForSo7Light/UtilityForSo7Light/Release/UtilityF.BFC37D2E.tlog/rc.command.1.tlog new file mode 100644 index 0000000..d34bdf1 Binary files /dev/null and b/PcDmis/Base/Interfac/Msi/Hsi/SevenOcean/UtilityForSo7Light/UtilityForSo7Light/Release/UtilityF.BFC37D2E.tlog/rc.command.1.tlog differ diff --git a/PcDmis/Base/Interfac/Msi/Hsi/SevenOcean/UtilityForSo7Light/UtilityForSo7Light/Release/UtilityF.BFC37D2E.tlog/rc.read.1.tlog b/PcDmis/Base/Interfac/Msi/Hsi/SevenOcean/UtilityForSo7Light/UtilityForSo7Light/Release/UtilityF.BFC37D2E.tlog/rc.read.1.tlog new file mode 100644 index 0000000..3b9a398 Binary files /dev/null and b/PcDmis/Base/Interfac/Msi/Hsi/SevenOcean/UtilityForSo7Light/UtilityForSo7Light/Release/UtilityF.BFC37D2E.tlog/rc.read.1.tlog differ diff --git a/PcDmis/Base/Interfac/Msi/Hsi/SevenOcean/UtilityForSo7Light/UtilityForSo7Light/Release/UtilityF.BFC37D2E.tlog/rc.write.1.tlog b/PcDmis/Base/Interfac/Msi/Hsi/SevenOcean/UtilityForSo7Light/UtilityForSo7Light/Release/UtilityF.BFC37D2E.tlog/rc.write.1.tlog new file mode 100644 index 0000000..f7b6384 Binary files /dev/null and b/PcDmis/Base/Interfac/Msi/Hsi/SevenOcean/UtilityForSo7Light/UtilityForSo7Light/Release/UtilityF.BFC37D2E.tlog/rc.write.1.tlog differ diff --git a/PcDmis/Base/Interfac/Msi/Hsi/SevenOcean/UtilityForSo7Light/UtilityForSo7Light/Release/UtilityForSo7Light.res b/PcDmis/Base/Interfac/Msi/Hsi/SevenOcean/UtilityForSo7Light/UtilityForSo7Light/Release/UtilityForSo7Light.res new file mode 100644 index 0000000..1d95556 Binary files /dev/null and b/PcDmis/Base/Interfac/Msi/Hsi/SevenOcean/UtilityForSo7Light/UtilityForSo7Light/Release/UtilityForSo7Light.res differ diff --git a/PcDmis/Base/Interfac/Msi/Hsi/SevenOcean/UtilityForSo7Light/UtilityForSo7Light/So7_Illumination.cpp b/PcDmis/Base/Interfac/Msi/Hsi/SevenOcean/UtilityForSo7Light/UtilityForSo7Light/So7_Illumination.cpp new file mode 100644 index 0000000..1f6b42f --- /dev/null +++ b/PcDmis/Base/Interfac/Msi/Hsi/SevenOcean/UtilityForSo7Light/UtilityForSo7Light/So7_Illumination.cpp @@ -0,0 +1,1154 @@ +#include "StdAfx.h" +#include +#include "So7_Illumination.h" +#define PI 3.1415926535897932384626433 +#define MAX_BUFF_SIZE 0x200 +#define PERCENT_PRECISION 0.000001 + +HANDLE g_So7Illum_Mutex; +//=================================================== +//BYTE CSo7_Illumination::m_CalibrateData[6][101] = { 0 }; +//BYTE CSo7_Illumination::m_wdata[6][101] = { 0 }; +CSo7_Illumination::CSo7_Illumination(void) +{ + m_iSerialComPort=1; + m_iBuadRate=19200;//2400; + m_bIllumiationEnable=false; + m_iSleepTime=50; + m_iMinRings=0; + m_iMaxRings=0; + m_iMinSectors=0; + m_iMaxSectors=0; + m_iControlType=0; +}; +//=================================================== +CSo7_Illumination::~CSo7_Illumination(void) +{ + +} +void CSo7_Illumination::GetAppPath(CString &Path) +{ + Path=_T(""); // Speed optimization - noticed slow in GlowCode + if (Path.IsEmpty()) + { + CString tmpPath; + GetModuleFileName(NULL,tmpPath.GetBuffer(255),255); + tmpPath.ReleaseBuffer(); + tmpPath.TrimRight(); + int nLastSlash = tmpPath.ReverseFind('\\'); + if (nLastSlash >= 0) + tmpPath = tmpPath.Left(nLastSlash); + else + tmpPath.Empty(); + Path=tmpPath; + } +}; + +//=================================================== +void CSo7_Illumination::LoadConfig() +{ + //m_iSerialComPort=g_pMachine->m_iSo7IllumComPort; + //m_iBuadRate=g_pMachine->m_iSo7IllumBaudRate; + //m_iControlType=g_pMachine->m_iSo7IllumType; + //m_iSleepTime=g_pMachine->m_iSo7IllumResponseTime; + CString strAppthName; + GetAppPath(strAppthName); + CString strFileName =strAppthName+_T("\\Device.Config.ini"); + CString strAppName = _T("RING_LIGHT_RS232_SERIALCOMPORT"); + CString strKeyName = _T("RingLightRS232SerialComport"); + //CString strKeyBuadRate = _T("RingLightRS232BuadRate"); + + m_iSerialComPort = GetPrivateProfileInt(strAppName,strKeyName,1,strFileName); + //m_iBuadRate = GetPrivateProfileInt(strAppName, strKeyBuadRate, 19200, strFileName); + + CString strinfo; + strinfo.Format(_T("%d"),m_iSerialComPort); + WritePrivateProfileString(strAppName, strKeyName, strinfo,strFileName); + //strinfo.Format(_T("%d"), m_iBuadRate); + //WritePrivateProfileString(strAppName, strKeyBuadRate, strinfo, strFileName); + + + //m_iBuadRate = 19200; + m_iControlType =SO7_ILLUMINATION_INFO_SO7_III; + m_iSleepTime = 50; + + if (m_iControlType&SO7_ILLUMINATION_INFO_SO7_III) + { + m_iMinRings=1; + m_iMaxRings=6; + m_iMinSectors=1; + m_iMaxSectors=8; + } + else if(m_iControlType&SO7_ILLUMINATION_INFO_SO7_II) + { + m_iMinRings=3; + m_iMaxRings=6; + m_iMinSectors=1; + m_iMaxSectors=8; + } +} +//=================================================== + +std::map g_vectorLightRemapForEightSector; +BOOL CSo7_Illumination::Init() +{ + //this has been finished in EF8000_Unit1.app + g_vectorLightRemapForEightSector[0] = 7; + g_vectorLightRemapForEightSector[1] = 0; + g_vectorLightRemapForEightSector[2] = 1; + g_vectorLightRemapForEightSector[3] = 2; + g_vectorLightRemapForEightSector[4] = 3; + g_vectorLightRemapForEightSector[5] = 4; + g_vectorLightRemapForEightSector[6] = 5; + g_vectorLightRemapForEightSector[7] = 6; + + BOOL status(TRUE); + if (!m_bIllumiationEnable) + { + LoadConfig(); + m_SO7_Serial.SetPort(m_iSerialComPort,m_iBuadRate); + if(m_SO7_Serial.Open()) + { + m_bIllumiationEnable=TRUE; + status=TRUE; + } + else + { + status=FALSE; + } + + if(status == FALSE) + { + //AfxMessageBox((L"Load ring light modul, 6 * 8 light controller, initialize failed!")); + CString str = (L"Serial port open failed!"); + str.AppendFormat((L"Port Number:") ); + str.AppendFormat(_T("%d "),m_iSerialComPort); + //str.AppendFormat((L"Click Ensure button to exit this application")); + + MessageBoxEx(NULL, str, (L"Serial port"), MB_OK|MB_SYSTEMMODAL,MB_SYSTEMMODAL); + } + + + g_So7Illum_Mutex=CreateMutex(NULL,FALSE,NULL); + } + return status; +} + +//=================================================== +BOOL CSo7_Illumination::UnInit(bool _bInitConfig) +{ + if (m_bIllumiationEnable) + { + Shutdown(); + m_SO7_Serial.Close(); + m_bIllumiationEnable=false; + } + return TRUE; +} +//=================================================== +BOOL CSo7_Illumination::Shutdown() +{ + BOOL rStatus(TRUE); + if (m_iControlType&SO7_ILLUMINATION_INFO_SO7_III) + { + rStatus=So7LightIII_set_light_off(); + } + else if(m_iControlType&SO7_ILLUMINATION_INFO_SO7_II) + { + rStatus=So7LightII_set_light_off(); + } + else + { + rStatus=FALSE; + } + return rStatus; +} + +void CSo7_Illumination::SetBuadRate(const int& valueBuad) +{ + m_iBuadRate = valueBuad; +} +//=================================================== +BOOL CSo7_Illumination::SetLampState(int _NumLamps,int* _LampsType,int (*bBulbStates)[SO7_ILLUMINATION_MAX_BULBS],double (*Intensities)[SO7_ILLUMINATION_MAX_BULBS],bool bWait) +{ + BOOL rStatus(TRUE); + if (m_iControlType&SO7_ILLUMINATION_INFO_SO7_III) + { + SetLampState_So7III(_NumLamps,_LampsType,bBulbStates,Intensities,bWait); + } + else if(m_iControlType&SO7_ILLUMINATION_INFO_SO7_II) + { + SetLampState_So7II(_NumLamps,_LampsType,bBulbStates,Intensities,bWait); + } + else + { + rStatus=FALSE; + } + return rStatus; +} +//=================================================== +BOOL CSo7_Illumination::SetLampState_So7II(int _NumLamps,int* _LampsType,int (*bBulbStates)[SO7_ILLUMINATION_MAX_BULBS],double (*Intensities)[SO7_ILLUMINATION_MAX_BULBS],bool bWait) +{ + BOOL rStatus(TRUE); + int iOffsetIndex(0); + short LampValue(0); + short LampMaxValue(0x0FFF); + short LampMinValue(0); + BYTE cSendData[28]={0xA1,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xB1}; + for (int i=0;i<_NumLamps;i++) + { + switch(_LampsType[i]) + { + case SO7_ILLUMINATION_LAMP_COAXIAL://3 + { + LampMinValue=0; + LampMaxValue=0x0FFF; + LampValue=LampMinValue+static_cast((LampMaxValue-LampMinValue)*Intensities[SO7_ILLUMINATION_LAMP_COAXIAL][0]); + iOffsetIndex=2*2-1; + cSendData[iOffsetIndex]=(LampValue>>8) & 0x00ff; + cSendData[iOffsetIndex+1]=LampValue & 0x00ff; + break; + } + case SO7_ILLUMINATION_LAMP_SURFACE: + { + double dMaxValue(-999.9),dTmpValue(0.0); + BYTE bTmpVal(0); + int iShift(0); + LampMinValue=0x0010; + LampMaxValue=0x01FF; + switch(bBulbStates[SO7_ILLUMINATION_LAMP_SURFACE][0]) + { + case SO7_ILLUMINATION_LAMP_CONTROL_BY_WHOLE_LAMP: + { + iOffsetIndex=12*2-1; + cSendData[iOffsetIndex]=0xff; + cSendData[iOffsetIndex+1]=0xff; + iOffsetIndex=13*2-1; + cSendData[iOffsetIndex]=0xff; + cSendData[iOffsetIndex+1]=0xff; + LampValue=LampMinValue+static_cast((LampMaxValue-LampMinValue)*Intensities[SO7_ILLUMINATION_LAMP_SURFACE][0]); + iOffsetIndex=11*2-1; + cSendData[iOffsetIndex]=(LampValue>>8) & 0x00ff; + cSendData[iOffsetIndex+1]=LampValue & 0x00ff; + break; + } + case SO7_ILLUMINATION_LAMP_CONTROL_BY_RINGS: + { + dMaxValue=-999.9; + dTmpValue=0.0; + for (int iRing=m_iMinRings;iRing<=m_iMaxRings;iRing++) + { + dTmpValue=Intensities[SO7_ILLUMINATION_LAMP_SURFACE][iRing*SO7_ILLUMINATION_MAX_SECTORS]; + if (dTmpValue>dMaxValue) + { + dMaxValue=dTmpValue; + } + if (dTmpValue>PERCENT_PRECISION) + { + iOffsetIndex=12*2-1+(iRing-m_iMinRings); + cSendData[iOffsetIndex]=0xff; + } + } + LampValue=LampMinValue+static_cast((LampMaxValue-LampMinValue)*dMaxValue); + iOffsetIndex=11*2-1; + cSendData[iOffsetIndex]=(LampValue>>8) & 0x00ff; + cSendData[iOffsetIndex+1]=LampValue & 0x00ff; + break; + } + case SO7_ILLUMINATION_LAMP_CONTROL_BY_OCTANTS: + { + dMaxValue=-999.9; + dTmpValue=0.0; + bTmpVal=0; + iShift=0; + for (int iSector=m_iMinSectors;iSector<=m_iMaxSectors;iSector++) + { + dTmpValue=Intensities[SO7_ILLUMINATION_LAMP_SURFACE][iSector]; + if (dTmpValue>dMaxValue) + { + dMaxValue=dTmpValue; + } + if (dTmpValue>PERCENT_PRECISION) + { + for (int iRing=m_iMinRings;iRing<=m_iMaxRings;iRing++) + { + iOffsetIndex=12*2-1+(iRing-m_iMinRings); + bTmpVal=1; + iShift=(m_iMaxSectors-iSector); + bTmpVal=bTmpVal<((LampMaxValue-LampMinValue)*dMaxValue); + iOffsetIndex=11*2-1; + cSendData[iOffsetIndex]=(LampValue>>8) & 0x00ff; + cSendData[iOffsetIndex+1]=LampValue & 0x00ff; + break; + } + case SO7_ILLUMINATION_LAMP_CONTROL_BY_SEGMENTS: + { + dMaxValue=-999.9; + dTmpValue=0.0; + bTmpVal=0; + iShift=0; + for (int iSector=m_iMinSectors;iSector<=m_iMaxSectors;iSector++) + { + for (int iRing=m_iMinRings;iRing<=m_iMaxRings;iRing++) + { + dTmpValue=Intensities[SO7_ILLUMINATION_LAMP_SURFACE][iRing*SO7_ILLUMINATION_MAX_SECTORS+iSector]; + if (dTmpValue>dMaxValue) + { + dMaxValue=dTmpValue; + } + if (dTmpValue>PERCENT_PRECISION) + { + iOffsetIndex=12*2-1+(iRing-m_iMinRings); + bTmpVal=1; + iShift=(m_iMaxSectors-iSector); + bTmpVal=bTmpVal<((LampMaxValue-LampMinValue)*dMaxValue); + iOffsetIndex=11*2-1; + cSendData[iOffsetIndex]=(LampValue>>8) & 0x00ff; + cSendData[iOffsetIndex+1]=LampValue & 0x00ff; + break; + } + default: + { + break; + } + } + break; + } + case SO7_ILLUMINATION_LAMP_PROFILE://2 + { + LampMinValue=0; + LampMaxValue=0x0FFF; + LampValue=LampMinValue+static_cast((LampMaxValue-LampMinValue)*Intensities[SO7_ILLUMINATION_LAMP_PROFILE][0]); + iOffsetIndex=2*2-1; + cSendData[iOffsetIndex]=(LampValue>>8) & 0x00ff; + cSendData[iOffsetIndex+1]=LampValue & 0x00ff; + break; + } + case SO7_ILLUMINATION_LAMP_PROFILE_OUTER://1 + { + LampMinValue=0; + LampMaxValue=0x0FFF; + LampValue=LampMinValue+static_cast((LampMaxValue-LampMinValue)*Intensities[SO7_ILLUMINATION_LAMP_PROFILE_OUTER][0]); + iOffsetIndex=1*2-1; + cSendData[iOffsetIndex]=(LampValue>>8) & 0x00ff; + cSendData[iOffsetIndex+1]=LampValue & 0x00ff; + break; + } + default: + { + break; + } + } + } + DWORD iSendDataLength=28; + _Send_Command((const char*)cSendData,iSendDataLength); + if (bWait) + { + Sleep(m_iSleepTime); + } + return rStatus; +} +//=================================================== +BOOL CSo7_Illumination::SetLampState_So7III(int _NumLamps,int* _LampsType,int (*bBulbStates)[SO7_ILLUMINATION_MAX_BULBS],double (*Intensities)[SO7_ILLUMINATION_MAX_BULBS],bool bWait) +{ + BOOL rStatus(TRUE); + int iOffsetIndex(0); + short LampValue(0); + short LampMaxValue(0X1388); + short LampMinValue(0X0001); + BYTE cSendData[20]={0XAA,0X00,0X01,0X00,0X01,0X00,0X01,0X00,0X01,0X00,0X01,0X00,0X01,0X00,0X00,0X00,0X00,0X00,0X00,0XBB}; + for (int i=0;i<_NumLamps;i++) + { + switch(_LampsType[i]) + { + case SO7_ILLUMINATION_LAMP_COAXIAL://3 + { + LampValue=LampMinValue+static_cast((LampMaxValue-LampMinValue)*Intensities[SO7_ILLUMINATION_LAMP_COAXIAL][0]); + break; + } + case SO7_ILLUMINATION_LAMP_SURFACE: + { + double dMaxValue(-999.9),dTmpValue(0.0); + BYTE bTmpVal(0); + int iShift(0); + switch(bBulbStates[SO7_ILLUMINATION_LAMP_SURFACE][0]) + { + case SO7_ILLUMINATION_LAMP_CONTROL_BY_WHOLE_LAMP: + { + LampValue=LampMinValue+static_cast((LampMaxValue-LampMinValue)*Intensities[SO7_ILLUMINATION_LAMP_SURFACE][0]); + for (int i=0;i<6;i++) + { + iOffsetIndex=1+i*2; + cSendData[iOffsetIndex]=(LampValue>>8) & 0x00ff; + cSendData[iOffsetIndex+1]=LampValue & 0x00ff; + } + for (int i=0;i<6;i++) + { + iOffsetIndex=13+i; + cSendData[iOffsetIndex]=0xff; + } + break; + } + case SO7_ILLUMINATION_LAMP_CONTROL_BY_RINGS: + { + dMaxValue=-999.9; + dTmpValue=0.0; + for (int iRing=m_iMinRings;iRing<=m_iMaxRings;iRing++) + { + dTmpValue=Intensities[SO7_ILLUMINATION_LAMP_SURFACE][iRing*SO7_ILLUMINATION_MAX_SECTORS]; + if (dTmpValue>PERCENT_PRECISION) + { + LampValue=LampMinValue+static_cast((LampMaxValue-LampMinValue)*dTmpValue); + iOffsetIndex=(iRing-m_iMinRings)*2+1; + cSendData[iOffsetIndex]=(LampValue>>8) & 0x00ff; + cSendData[iOffsetIndex+1]=LampValue & 0x00ff; + + iOffsetIndex=13+(m_iMaxRings-iRing); + cSendData[iOffsetIndex]=0xff; + } + } + break; + } + case SO7_ILLUMINATION_LAMP_CONTROL_BY_OCTANTS: + { + dMaxValue=-999.9; + dTmpValue=0.0; + bTmpVal=0; + iShift=0; + for (int iSector=m_iMinSectors;iSector<=m_iMaxSectors;iSector++) + { + dTmpValue=Intensities[SO7_ILLUMINATION_LAMP_SURFACE][iSector]; + if (dTmpValue>dMaxValue) + { + dMaxValue=dTmpValue; + } + if (dTmpValue>PERCENT_PRECISION) + { + for (int iRing=m_iMinRings;iRing<=m_iMaxRings;iRing++) + { + iOffsetIndex=13+(m_iMaxRings-iRing); + bTmpVal=1; + iShift=(m_iMaxSectors-iSector); + bTmpVal=bTmpVal<((LampMaxValue-LampMinValue)*dMaxValue); + for (int i=0;i<6;i++) + { + iOffsetIndex=1+i*2; + cSendData[iOffsetIndex]=(LampValue>>8) & 0x00ff; + cSendData[iOffsetIndex+1]=LampValue & 0x00ff; + } + break; + } + case SO7_ILLUMINATION_LAMP_CONTROL_BY_SEGMENTS: + { + double dAMaxValue[6]={-999.9,-999.9,-999.9,-999.9,-999.9,-999.9}; + dTmpValue=0.0; + bTmpVal=0; + iShift=0; + for (int iSector=m_iMinSectors;iSector<=m_iMaxSectors;iSector++) + { + for (int iRing=m_iMinRings;iRing<=m_iMaxRings;iRing++) + { + dTmpValue=Intensities[SO7_ILLUMINATION_LAMP_SURFACE][iRing*SO7_ILLUMINATION_MAX_SECTORS+iSector]; + if (dTmpValue>dAMaxValue[iRing-m_iMinRings]) + { + dAMaxValue[iRing-m_iMinRings]=dTmpValue; + } + if (dTmpValue>PERCENT_PRECISION) + { + iOffsetIndex=13+(m_iMaxRings-iRing); + bTmpVal=1; + iShift=(m_iMaxSectors-iSector); + bTmpVal=bTmpVal<((LampMaxValue-LampMinValue)*dAMaxValue[i]); + iOffsetIndex=1+i*2; + cSendData[iOffsetIndex]=(LampValue>>8) & 0x00ff; + cSendData[iOffsetIndex+1]=LampValue & 0x00ff; + } + break; + } + default: + { + break; + } + } + break; + } + case SO7_ILLUMINATION_LAMP_PROFILE://2 + { + LampValue=LampMinValue+static_cast((LampMaxValue-LampMinValue)*Intensities[SO7_ILLUMINATION_LAMP_PROFILE][0]); + break; + } + case SO7_ILLUMINATION_LAMP_PROFILE_OUTER://1 + { + LampValue=LampMinValue+static_cast((LampMaxValue-LampMinValue)*Intensities[SO7_ILLUMINATION_LAMP_PROFILE_OUTER][0]); + break; + } + default: + { + break; + } + } + } + DWORD iSendDataLength=20; + _Send_Command((const char*)cSendData,iSendDataLength); + if (bWait) + { + Sleep(m_iSleepTime); + } + return rStatus; +} +//=================================================== +BOOL CSo7_Illumination::So7LightII_set_light_off() +{ + BYTE cSendData[28]={0xA1,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xB1}; + DWORD iSendDataLength=28; + _Send_Command((const char*)cSendData,iSendDataLength); + Sleep(m_iSleepTime); + return TRUE; +} +//=================================================== +BOOL CSo7_Illumination::So7LightIII_set_light_off() +{ + BYTE cSendData[20]={0XAA,0X00,0X01,0X00,0X01,0X00,0X01,0X00,0X01,0X00,0X01,0X00,0X01,0X00,0X00,0X00,0X00,0X00,0X00,0XBB}; + DWORD iSendDataLength=20; + _Send_Command((const char*)cSendData,iSendDataLength); + Sleep(m_iSleepTime); + return TRUE; +} +//=================================================== +BOOL CSo7_Illumination::_Send_Command(const char* _SendData,DWORD _SendDataLength) +{ + //BOOL rStatus(FALSE); + if (m_bIllumiationEnable) + { + DWORD iWriteByte(0); + iWriteByte=m_SO7_Serial.Send(_SendData,_SendDataLength); + + return TRUE; + } + //return rStatus; + return false; +}; +//=================================================== +BOOL CSo7_Illumination::_Receive_Data(char* _SendData,DWORD& _RecvDataLength) +{ + BOOL rStatus(FALSE); + if (m_bIllumiationEnable) + { + INT iRetrys(0); + CString csTemp; + while(!m_SO7_Serial.m_iRecvState && iRetrys<200) + { + iRetrys++; + Sleep(10); + } + if (m_SO7_Serial.m_iRecvState) + { + if(m_SO7_Serial.m_RecvData[0]==0) + { + m_SO7_Serial.m_iRecvState=FALSE; + INT iRetrys2(0); + while(!m_SO7_Serial.m_iRecvState && iRetrys2<600) + { + iRetrys2++; + Sleep(10); + } + } + memcpy(_SendData,m_SO7_Serial.m_RecvData,m_SO7_Serial.m_iRecvBytes); + _RecvDataLength=m_SO7_Serial.m_iRecvBytes; + m_SO7_Serial.m_iRecvState=FALSE; + rStatus=TRUE; + } + else + { + rStatus=FALSE; + } + } + return rStatus; +}; + +//********* send 20 byte data +//1--------2----3-----4---5-----6---7-----8---9----10--11----12--13-------14--15--16--17--18--19--------20--// +//[aa] [13][88] [13][88] [13][88] [13][88] [13][88] [13][88] [01][01][01][01][01][01] [bb] +// +// ---------------------------------- +BOOL CSo7_Illumination::_Send_So7LightIII_Command(const double _SendData[48],const int minIllumination = 0,const int maxLillumination = 100,const bool bWait =false,BYTE* _DATA=nullptr) +{ + WaitForSingleObject(g_So7Illum_Mutex,INFINITE); + int iRingIlluminationObj[6]; + bool bSrcSwitch[48]; + + //set default value + for(int i=0; i<6; i++) + { + iRingIlluminationObj[i]=1; + } + + //set the send message content + for(int i=0; i<48; i++) + { + if(_SendData[i]>DBL_MIN)//shutdown is 1 + { + ASSERT((_SendData[i]>=minIllumination)&&(_SendData[i]<=maxLillumination)&&(minIllumination>8; // hight byte + cSendData[2*i+2] = iRingIlluminationObj[i] & 0xff; // low byte + } + + + for(int i=0; i<6; i++) + { + int offsetByte = 18-i;//13+i; + for(int j=0; j<8; j++) + { + //cSendData[offsetByte] = cSendData[offsetByte]>>1; + //if(bSwitch[i*8+j]== false) + //{ + // cSendData[offsetByte] = cSendData[offsetByte] & 0x7F;//0x7F = 0111 1111B = 127 + //}else + //{ + // cSendData[offsetByte] = cSendData[offsetByte] | 0x80;//0x80 = 1000 0000B + //} + + // Given the different position for the new ring light type, it maps its sections + if(j==0 && bSwitch[i*8+j]== true) + { + cSendData[offsetByte] = cSendData[offsetByte] | (0x01<<5);//0010 0000B + }else if(j==1 && bSwitch[i*8+j]== true) + { + cSendData[offsetByte] = cSendData[offsetByte] | (0x01<<4);//0001 0000B + }else if(j==2 && bSwitch[i*8+j]== true) + { + cSendData[offsetByte] = cSendData[offsetByte] | (0x01<<3);//0000 1000B + }else if(j==3 && bSwitch[i*8+j]== true) + { + cSendData[offsetByte] = cSendData[offsetByte] | (0x01<<2);//0000 0100B + }else if(j==4 && bSwitch[i*8+j]== true) + { + cSendData[offsetByte] = cSendData[offsetByte] | (0x01<<1);//0000 0010B + }else if(j==5 && bSwitch[i*8+j]== true) + { + cSendData[offsetByte] = cSendData[offsetByte] | (0x01<<0);//0000 0001B + }else if(j==6 && bSwitch[i*8+j]== true) + { + cSendData[offsetByte] = cSendData[offsetByte] | (0x01<<7);//1000 0000B + }else if(j==7 && bSwitch[i*8+j]== true) + { + cSendData[offsetByte] = cSendData[offsetByte] | (0x01<<6);//0100 0000B + } + } + } + DWORD iSendDataLength=20; + BOOL bResult= false; + bResult = _Send_Command((const char*)cSendData,iSendDataLength); +#if 0 + //Debug test same data + //static int cSendDatatest[20]; + //for(int i=0; i<20; i++) + //{ + // if(cSendDatatest[i]!= cSendData[i]) + // { + // cSendDatatest[i]=cSendData[i]; + // } + //} + + + //Debug data1 + /* + CFileException fileException; + CStdioFile file; + CString str; + file.Open(_T("E:\\ringlight.txt"),CFile::modeWrite|CFile::modeCreate,&fileException); + for(int i=0; i<20; i++) + { + str.Format(_T("%x "),cSendData[i]); + file.WriteString(str); + } + file.WriteString(_T("\n")); + file.Close();*/ + //BYTE cSendData2[20]={0XAA,0X13,0X88,0X13,0X88,0X13,0X88,0X13,0X88,0X13,0X88,0X13,0X88,0X01,0X01,0X01,0X01,0X01,0X01,0XBB}; + /* + //debug date2; + BYTE cSendData2[20]={0XAA,0X13,0X88,0X13,0X88,0X13,0X88,0X13,0X88,0X13,0X88,0X13,0X88,0X01,0X01,0X01,0X01,0X01,0X01,0XBB}; + CFileException fileException; + CStdioFile file; + CString str; + file.Open(_T("E:\\ringlight.txt"),CFile::modeWrite|CFile::modeCreate,&fileException); + for(int m=0; m<48; m++) + { + bool bSwitch2[48]; + for(int n=0; n<48;n++) + { + bSwitch2[n]=false; + } + bSwitch2[m] = true; + BYTE cSendData2[20]={0XAA,0X13,0X88,0X13,0X88,0X13,0X88,0X13,0X88,0X13,0X88,0X13,0X88,0X00,0X00,0X00,0X00,0X00,0X00,0XBB}; + for(int i=0; i<6; i++) + { + int offsetByte = 18-i;//13+i; + for(int j=0; j<8; j++) + { + cSendData2[offsetByte] = cSendData2[offsetByte]>>1; + if(bSwitch2[i*8+j]== false) + { + cSendData2[offsetByte] = cSendData2[offsetByte] & 0x7F;//0x7F = 0111 1111B = 127 + }else + { + cSendData2[offsetByte] = cSendData2[offsetByte] | 0x80;//0x80 = 1000 0000B + } + } + } + for(int i=0; i<20; i++) + { + str.Format(_T("%x "),cSendData2[i]); + file.WriteString(str); + } + file.WriteString(_T("\n")); + Sleep(400); + bResult = _Send_Command((const char*)cSendData2,iSendDataLength); + Sleep(400); + bResult = _Send_Command((const char*)cSendData2,iSendDataLength); + Sleep(400); + } + file.Close();*/ + +#endif // 0 + + if (bWait) + { + Sleep(m_iSleepTime); + } + for (int i=0;i<20;i++) + { + _DATA[i]= cSendData[i]; + } + ReleaseMutex(g_So7Illum_Mutex); + return bResult; + } + +BOOL CSo7_Illumination::ReadCalibration(const int& iLightType, const int& iRoadNum, const int& iPortNum) +{ + switch (iLightType) + { + case 0://SELECT_LIGHT_SIX_RING// + { + for (int ii = 0; ii < 6; ii++) + { + m_bReading = FALSE; + if (!m_bReading) + { + char sendData[6] = { 'R','D',ii,0 }; + DWORD iWriteByte = m_SO7_Serial.Send(sendData, 3); + + INT iRetrys(0); + while (!m_SO7_Serial.m_iRecvState && iRetrys < 20 && iWriteByte == 3) + { + iRetrys++; + Sleep(50); + } + if (m_SO7_Serial.m_iRecvState) + { + for (int jj = 0; jj < 101; jj++) + { + m_bReading = TRUE; + m_CalibrateData[ii][jj] = short(m_SO7_Serial.m_RecvData[jj * 2]) << 8; + m_CalibrateData[ii][jj] += m_SO7_Serial.m_RecvData[jj * 2 + 1]; + } + m_SO7_Serial.m_iRecvState = FALSE; + } + else + { + m_bReading = FALSE; + //MessageBox(nullptr, L"Download error", L"Error", MB_ICONERROR); + break; + } + } + } + break; + } + case 1://SELECT_LIGHT_ROAD_FOUR + case 2://SELECT_LIGHT_ROAD_EIGHT + { + m_bReading = FALSE; + if (!m_bReading) + { + char sendData[3] = { iRoadNum, iPortNum, 0x8C }; + DWORD iWriteByte = m_SO7_Serial.Send(sendData, 3); + + INT iRetrys(0); + while (!m_SO7_Serial.m_iRecvState && iRetrys < 20 && iWriteByte == 3) + { + iRetrys++; + Sleep(50); + } + if (m_SO7_Serial.m_iRecvState) + { + if (m_SO7_Serial.m_iRecvBytes == 206 + && m_SO7_Serial.m_RecvData[0] == iRoadNum + && m_SO7_Serial.m_RecvData[1] == iPortNum + && m_SO7_Serial.m_RecvData[2] == 0x8C) + { + if ((m_SO7_Serial.m_RecvData[3] == 'e') && (m_SO7_Serial.m_RecvData[4] == 'r') + &&(m_SO7_Serial.m_RecvData[5] == 'r') && (m_SO7_Serial.m_RecvData[6] == 'o') + &&(m_SO7_Serial.m_RecvData[7] == 'r')) + { + m_bReading = FALSE; + } + else + { + for (int jj = 0; jj < 101; jj++) + { + m_bReading = TRUE; + m_CalibrateData[iPortNum -1][jj] = short(m_SO7_Serial.m_RecvData[jj * 2+3]) << 8; + m_CalibrateData[iPortNum -1][jj] += m_SO7_Serial.m_RecvData[jj * 2 + 4]; + } + } + } + + m_SO7_Serial.m_iRecvState = FALSE; + } + else + { + m_bReading = FALSE; + break; + } + } + break; + } + default: + break; + } + return m_bReading; +} + +BOOL CSo7_Illumination::WriteCalibration(const short wdata[6][101], const int& iLightType, const int& iRoadNum, const int& iPortNum) +{ + switch (iLightType) + { + case 0://SELECT_LIGHT_SIX_RING// + { + for (int ii = 0; ii < 6; ii++) + { + m_bWriting = FALSE; + if (!m_bWriting) + { + char writeData[205] = { 'W','R', ii, 0 }; + for (int jj = 0; jj < 101; jj++) + { + m_CalibrateData[ii][jj] = wdata[ii][jj]; + writeData[(jj * 2) + 3] = m_CalibrateData[ii][jj] / 256; /*(wdata[ii][jj] >> 8) & 0X00FF;*/ + writeData[(jj * 2) + 4] = m_CalibrateData[ii][jj] % 256; /*wdata[ii][jj] & 0X00FF;*/ + } + + DWORD iWriteByte = m_SO7_Serial.Send(writeData, 205); + INT iRetrys(0); + while (!m_SO7_Serial.m_iRecvState && iRetrys < 20 && iWriteByte == 205) + { + iRetrys++; + Sleep(50); + } + if (m_SO7_Serial.m_iRecvState) + { + m_bWriting = TRUE; + if (m_SO7_Serial.m_iRecvBytes == 2 + && m_SO7_Serial.m_RecvData[0] == 0 + && m_SO7_Serial.m_RecvData[1] == 0x66) + { + ; + } + else + { + MessageBox(nullptr, L"Download error(加载错误)", L"Error(错误)", MB_ICONERROR | MB_OK | MB_SYSTEMMODAL); + break; + } + m_SO7_Serial.m_iRecvState = FALSE; + } + else + { + m_bWriting = FALSE; + MessageBox(nullptr, L"Download error(加载错误)", L"Error(错误)", MB_ICONERROR | MB_OK | MB_SYSTEMMODAL); + break; + } + } + } + break; + } + case 1://SELECT_LIGHT_ROAD_FOUR + case 2://SELECT_LIGHT_ROAD_EIGHT + { + m_bWriting = FALSE; + if (!m_bWriting) + { + char writeData[206] = { iRoadNum, iPortNum, 0x8B, 0 }; + int iValue = 0; + for (int jj = 0; jj < 101; jj++) + { + m_CalibrateData[iPortNum - 1][jj] = wdata[iPortNum - 1][jj]; + writeData[(jj * 2) + 3] = m_CalibrateData[iPortNum - 1][jj] / 256;/*(wdata[ii][jj] >> 8) & 0X00FF;*/ + writeData[(jj * 2) + 4] = m_CalibrateData[iPortNum - 1][jj] % 256;/*wdata[ii][jj] & 0X00FF;*/ + iValue += m_CalibrateData[iPortNum - 1][jj]; + } + writeData[205] = iValue % 256; + DWORD iWriteByte = m_SO7_Serial.Send(writeData, 206); + + INT iRetrys(0); + while (!m_SO7_Serial.m_iRecvState && iRetrys < 20 && iWriteByte == 206) + { + iRetrys++; + Sleep(50); + } + if (m_SO7_Serial.m_iRecvState) + { + if (m_SO7_Serial.m_RecvData[0] == iRoadNum + && m_SO7_Serial.m_RecvData[1] == iPortNum + && m_SO7_Serial.m_RecvData[2] == 0x8B) + { + if ((m_SO7_Serial.m_RecvData[3] == 'o') && (m_SO7_Serial.m_RecvData[4] == 'k')) + { + m_bWriting = TRUE; + } + else + { + m_bWriting = FALSE; + } + } + else + { + MessageBox(nullptr, L"Download error(加载错误)", L"Error(错误)", MB_ICONERROR | MB_OK | MB_SYSTEMMODAL); + break; + } + m_SO7_Serial.m_iRecvState = FALSE; + } + else + { + m_bWriting = FALSE; + MessageBox(nullptr, L"Download error(加载错误)", L"Error(错误)", MB_ICONERROR | MB_OK | MB_SYSTEMMODAL); + break; + } + } + break; + } + default: + break; + } + return m_bWriting; +} + +BOOL CSo7_Illumination::ReadRoadLightValue(BYTE* _reData, const int& iLightType, const int& iRoadNum, const int& iPortNum) +{ + WaitForSingleObject(g_So7Illum_Mutex, INFINITE); + switch (iLightType) + { + case 1://SELECT_LIGHT_ROAD_FOUR + case 2://SELECT_LIGHT_ROAD_EIGHT + { + m_bReading = FALSE; + if (!m_bReading) + { + char sendData[3] = { iRoadNum, iPortNum, 0x82 }; + DWORD iWriteByte = m_SO7_Serial.Send(sendData, 3); + + INT iRetrys(0); + while (!m_SO7_Serial.m_iRecvState && iRetrys < 2 && iWriteByte == 3) + { + iRetrys++; + Sleep(50); + } + if (m_SO7_Serial.m_iRecvState) + { + for (int jj = 0; jj < 5; jj++) + { + m_bReading = TRUE; + _reData[jj] = short(m_SO7_Serial.m_RecvData[jj]); + } + + m_SO7_Serial.m_iRecvState = FALSE; + } + else + { + m_bReading = FALSE; + break; + } + } + break; + } + default: + break; + } + ReleaseMutex(g_So7Illum_Mutex); + return m_bReading; +} + +BOOL CSo7_Illumination::WriteRoadLightValue(BYTE* _reData, const bool& bWait, const int& iLightType, const int& iRoadNum, + const int& iPortNum, const double _SendData[48]) +{ + WaitForSingleObject(g_So7Illum_Mutex, INFINITE); + switch (iLightType) + { + case 1://SELECT_LIGHT_ROAD_FOUR + case 2://SELECT_LIGHT_ROAD_EIGHT + { + m_bWriting = FALSE; + if (!m_bWriting) + { + char sendData[5] = { iRoadNum, iPortNum, 0x81, _SendData[(iPortNum - 1) * 2], _SendData[(iPortNum - 1) * 2 + 1] }; + DWORD iWriteByte = m_SO7_Serial.Send(sendData, 5); + + INT iRetrys(0); + while (!m_SO7_Serial.m_iRecvState && iRetrys < 2 && iWriteByte == 5) + { + iRetrys++; + Sleep(50); + } + if (m_SO7_Serial.m_iRecvState) + { + if (bWait) + { + Sleep(m_iSleepTime); + } + for (int jj = 0; jj < 5; jj++) + { + m_bWriting = TRUE; + _reData[jj] = short(m_SO7_Serial.m_RecvData[jj]); + } + + m_SO7_Serial.m_iRecvState = FALSE; + } + else + { + m_bWriting = FALSE; + break; + } + } + break; + } + default: + break; + } + ReleaseMutex(g_So7Illum_Mutex); + return m_bWriting; +} + +BOOL CSo7_Illumination::ReflushConnection() +{ + m_bReading = FALSE; + if (!m_bReading) + { + char sendData[6] = { 0x00, 0xad, 0,0 }; + DWORD iWriteByte = m_SO7_Serial.Send(sendData, 3); + + INT iRetrys(0); + while (!m_SO7_Serial.m_iRecvState && iRetrys < 20 && iWriteByte == 3) + { + iRetrys++; + Sleep(50); + } + if (m_SO7_Serial.m_iRecvState) + { + for (int jj = 0; jj < 10; jj++) + { + m_bReading = TRUE; + m_GetInfoOfRoad[jj] = short(m_SO7_Serial.m_RecvData[jj]); + } + m_SO7_Serial.m_iRecvState = FALSE; + } + else + { + m_bReading = FALSE; + } + } + return m_bReading; +} + +BOOL CSo7_Illumination::ResetForRoadLight(const int& iLightType, const int& iRoadNum, const int& iPortNum) +{ + BOOL bReset = FALSE; + if (!bReset) + { + char writeData[3] = { iRoadNum, iPortNum, 0x8d }; + + DWORD iWriteByte = m_SO7_Serial.Send(writeData, 3); + + INT iRetrys(0); + while (!m_SO7_Serial.m_iRecvState && iRetrys < 20 && iWriteByte == 3) + { + iRetrys++; + Sleep(50); + } + if (m_SO7_Serial.m_iRecvState) + { + bReset = TRUE; + if (m_SO7_Serial.m_RecvData[0] == iRoadNum + && m_SO7_Serial.m_RecvData[1] == iPortNum + && m_SO7_Serial.m_RecvData[2] == 0x8d) + { + if ((m_SO7_Serial.m_RecvData[3] == 'o') && (m_SO7_Serial.m_RecvData[4] == 'k')) + { + m_bWriting = TRUE; + } + else + { + m_bWriting = FALSE; + } + } + else + { + MessageBox(nullptr, L"Download error(加载错误)", L"Error(错误)", MB_ICONERROR | MB_OK | MB_SYSTEMMODAL); + } + m_SO7_Serial.m_iRecvState = FALSE; + } + else + { + bReset = FALSE; + MessageBox(nullptr, L"Download error(加载错误)", L"Error(错误)", MB_ICONERROR | MB_OK | MB_SYSTEMMODAL); + } + } + return bReset; +} \ No newline at end of file diff --git a/PcDmis/Base/Interfac/Msi/Hsi/SevenOcean/UtilityForSo7Light/UtilityForSo7Light/So7_Illumination.h b/PcDmis/Base/Interfac/Msi/Hsi/SevenOcean/UtilityForSo7Light/UtilityForSo7Light/So7_Illumination.h new file mode 100644 index 0000000..b3e2ed1 --- /dev/null +++ b/PcDmis/Base/Interfac/Msi/Hsi/SevenOcean/UtilityForSo7Light/UtilityForSo7Light/So7_Illumination.h @@ -0,0 +1,104 @@ +#ifndef SO7_ILLUMINATION_H_ +#define SO7_ILLUMINATION_H_ + +#include "CMMIO_SERIAL.H" +/////////////////////////////////////////////////////////////////////////////// +// Illumination API +/////////////////////////////////////////////////////////////////////////////// +const int SO7_ILLUMINATION_MAX_LAMPS = 6; +const int SO7_ILLUMINATION_MAX_BULB_COLORS = 3; +const int SO7_ILLUMINATION_MAX_RINGS = 12; +const int SO7_ILLUMINATION_MAX_SECTORS = 16; +const int SO7_ILLUMINATION_MAX_BULBS = SO7_ILLUMINATION_MAX_RINGS*SO7_ILLUMINATION_MAX_SECTORS; + + +enum SO7_ILLUMINATION_INFO +{ + SO7_ILLUMINATION_INFO_UNKNOWN = 0, + SO7_ILLUMINATION_INFO_SO7 = 0x01, + SO7_ILLUMINATION_INFO_SO7_II = 0x02,//lvgang + SO7_ILLUMINATION_INFO_SO7_III = 0x04,//shixuyong + SO7_ILLUMINATION_INFO_TOTAL +}; +enum SO7_ILLUMINATION_BULB_TYPE +{ + SO7_ILLUMINATION_BULB_ROUND = 1, + SO7_ILLUMINATION_BULB_SQUARE = 2, + SO7_ILLUMINATION_BULB_RING = 3, + SO7_ILLUMINATION_BULB_GRID = 4 +}; +enum SO7_ILLUMINATION_LAMP_TYPE +{ + SO7_ILLUMINATION_LAMP_NONE = 0, + SO7_ILLUMINATION_LAMP_COAXIAL = 1, + SO7_ILLUMINATION_LAMP_SURFACE = 2, + SO7_ILLUMINATION_LAMP_PROFILE = 3, + SO7_ILLUMINATION_LAMP_PROFILE_OUTER = 4 +}; + +enum SO7_ILLUMINATION_SURFACE_LAMP_CONTROL_TYPE +{ + SO7_ILLUMINATION_LAMP_CONTROL_NONE = 0, + SO7_ILLUMINATION_LAMP_CONTROL_BY_WHOLE_LAMP, + SO7_ILLUMINATION_LAMP_CONTROL_BY_RINGS, + SO7_ILLUMINATION_LAMP_CONTROL_BY_OCTANTS, + SO7_ILLUMINATION_LAMP_CONTROL_BY_SEGMENTS, + SO7_ILLUMINATION_LAMP_CONTROL_BY_OTHER + +}; + +class CSo7_Illumination +{ +public: + CSo7_Illumination(void); + ~CSo7_Illumination(void); + bool m_bIllumiationEnable; + BOOL Init(); + BOOL UnInit(bool _bInitConfig=true); + BOOL SetLampState(int _NumLamps,int* _LampsType,int (*bBulbStates)[SO7_ILLUMINATION_MAX_BULBS],double (*Intensities)[SO7_ILLUMINATION_MAX_BULBS],bool bWait); + BOOL Shutdown(); + void GetAppPath(CString &Path); + short m_CalibrateData[6][101]; + short m_GetInfoOfRoad[10]; +private: + void LoadConfig(); + + int m_iControlType; + int m_iSerialComPort; + int m_iBuadRate; + int m_iCommMode;//0-rs232,1-usb + int m_iSleepTime; + int m_iMinRings; + int m_iMaxRings; + int m_iMinSectors; + int m_iMaxSectors; + + CPSerial m_SO7_Serial; + BOOL SetLampState_So7II(int _NumLamps,int* _LampsType,int (*bBulbStates)[SO7_ILLUMINATION_MAX_BULBS],double (*Intensities)[SO7_ILLUMINATION_MAX_BULBS],bool bWait); + BOOL SetLampState_So7III(int _NumLamps,int* _LampsType,int (*bBulbStates)[SO7_ILLUMINATION_MAX_BULBS],double (*Intensities)[SO7_ILLUMINATION_MAX_BULBS],bool bWait); + BOOL So7LightII_set_light_off(); + BOOL So7LightIII_set_light_off(); + BOOL _Send_Command(const char* _SendData,DWORD _SendDataLength); + BOOL _Receive_Data(char* _SendData,DWORD& _SendDataLength); + char m_RecvData[MAX_RECIEVE_BUFFER_SIZE]; + DWORD m_RecvDataSize; + BOOL m_bReading; + BOOL m_bWriting; +public: + //********* send 20 byte data + //1--------2----3-----4---5-----6---7-----8---9----10--11----12--13-------14--15--16--17--18--19--------20--// + //[aa] [13][88] [13][88] [13][88] [13][88] [13][88] [13][88] [01][01][01][01][01][01] [bb] + // + // ---------------------------------- ----- + BOOL _Send_So7LightIII_Command(const double _SendData[48],const int minIllumination,const int maxLillumination,const bool bWait,BYTE* _DATA); + BOOL ReadCalibration(const int& iLightType = 0, const int& iRoadNum = 0, const int& iPortNum = 0); + BOOL WriteCalibration(const short wdata[6][101], const int& iLightType = 0, const int& iRoadNum = 0, const int& iPortNum = 0); + BOOL ReadRoadLightValue(BYTE* _reData, const int& iLightType = 1, const int& iRoadNum = 1, const int& iPortNum = 1); + BOOL WriteRoadLightValue(BYTE* _reData, const bool& bWait, const int& iLightType = 1, const int& iRoadNum = 1, const int& iPortNum = 1, const double _SendData[48] = { 0 }); + BOOL ResetForRoadLight(const int& iLightType = 1, const int& iRoadNum = 1, const int& iPortNum = 1); + BOOL ReflushConnection(); + void SetBuadRate(const int& valueBuad); +}; + + +#endif \ No newline at end of file diff --git a/PcDmis/Base/Interfac/Msi/Hsi/SevenOcean/UtilityForSo7Light/UtilityForSo7Light/UtilityForSo7Light.cpp b/PcDmis/Base/Interfac/Msi/Hsi/SevenOcean/UtilityForSo7Light/UtilityForSo7Light/UtilityForSo7Light.cpp new file mode 100644 index 0000000..34066ed --- /dev/null +++ b/PcDmis/Base/Interfac/Msi/Hsi/SevenOcean/UtilityForSo7Light/UtilityForSo7Light/UtilityForSo7Light.cpp @@ -0,0 +1,87 @@ + +// UtilityForSo7Light.cpp : Defines the class behaviors for the application. +// + +#include "stdafx.h" +#include "UtilityForSo7Light.h" +#include "UtilityForSo7LightDlg.h" + +#ifdef _DEBUG +#define new DEBUG_NEW +#endif + + +// CUtilityForSo7LightApp + +BEGIN_MESSAGE_MAP(CUtilityForSo7LightApp, CWinApp) + ON_COMMAND(ID_HELP, &CWinApp::OnHelp) +END_MESSAGE_MAP() + + +// CUtilityForSo7LightApp construction + +CUtilityForSo7LightApp::CUtilityForSo7LightApp() +{ + // TODO: add construction code here, + // Place all significant initialization in InitInstance +} + + +// The one and only CUtilityForSo7LightApp object + +CUtilityForSo7LightApp theApp; + + +// CUtilityForSo7LightApp initialization + +BOOL CUtilityForSo7LightApp::InitInstance() +{ + CWinApp::InitInstance(); + + + // Create the shell manager, in case the dialog contains + // any shell tree view or shell list view controls. + CShellManager *pShellManager = new CShellManager; + + // Activate "Windows Native" visual manager for enabling themes in MFC controls + CMFCVisualManager::SetDefaultManager(RUNTIME_CLASS(CMFCVisualManagerWindows)); + + // Standard initialization + // If you are not using these features and wish to reduce the size + // of your final executable, you should remove from the following + // the specific initialization routines you do not need + // Change the registry key under which our settings are stored + // TODO: You should modify this string to be something appropriate + // such as the name of your company or organization + SetRegistryKey(_T("Local AppWizard-Generated Applications")); + + CUtilityForSo7LightDlg dlg; + m_pMainWnd = &dlg; + INT_PTR nResponse = dlg.DoModal(); + if (nResponse == IDOK) + { + // TODO: Place code here to handle when the dialog is + // dismissed with OK + } + else if (nResponse == IDCANCEL) + { + // TODO: Place code here to handle when the dialog is + // dismissed with Cancel + } + else if (nResponse == -1) + { + TRACE(traceAppMsg, 0, "Warning: dialog creation failed, so application is terminating unexpectedly.\n"); + TRACE(traceAppMsg, 0, "Warning: if you are using MFC controls on the dialog, you cannot #define _AFX_NO_MFC_CONTROLS_IN_DIALOGS.\n"); + } + + // Delete the shell manager created above. + if (pShellManager != NULL) + { + delete pShellManager; + } + + // Since the dialog has been closed, return FALSE so that we exit the + // application, rather than start the application's message pump. + return FALSE; +} + diff --git a/PcDmis/Base/Interfac/Msi/Hsi/SevenOcean/UtilityForSo7Light/UtilityForSo7Light/UtilityForSo7Light.h b/PcDmis/Base/Interfac/Msi/Hsi/SevenOcean/UtilityForSo7Light/UtilityForSo7Light/UtilityForSo7Light.h new file mode 100644 index 0000000..63f5780 --- /dev/null +++ b/PcDmis/Base/Interfac/Msi/Hsi/SevenOcean/UtilityForSo7Light/UtilityForSo7Light/UtilityForSo7Light.h @@ -0,0 +1,32 @@ + +// UtilityForSo7Light.h : main header file for the PROJECT_NAME application +// + +#pragma once + +#ifndef __AFXWIN_H__ + #error "include 'stdafx.h' before including this file for PCH" +#endif + +#include "resource.h" // main symbols + + +// CUtilityForSo7LightApp: +// See UtilityForSo7Light.cpp for the implementation of this class +// + +class CUtilityForSo7LightApp : public CWinApp +{ +public: + CUtilityForSo7LightApp(); + +// Overrides +public: + virtual BOOL InitInstance(); + +// Implementation + + DECLARE_MESSAGE_MAP() +}; + +extern CUtilityForSo7LightApp theApp; \ No newline at end of file diff --git a/PcDmis/Base/Interfac/Msi/Hsi/SevenOcean/UtilityForSo7Light/UtilityForSo7Light/UtilityForSo7Light.rc b/PcDmis/Base/Interfac/Msi/Hsi/SevenOcean/UtilityForSo7Light/UtilityForSo7Light/UtilityForSo7Light.rc new file mode 100644 index 0000000..9081e83 Binary files /dev/null and b/PcDmis/Base/Interfac/Msi/Hsi/SevenOcean/UtilityForSo7Light/UtilityForSo7Light/UtilityForSo7Light.rc differ diff --git a/PcDmis/Base/Interfac/Msi/Hsi/SevenOcean/UtilityForSo7Light/UtilityForSo7Light/UtilityForSo7Light.vcxproj b/PcDmis/Base/Interfac/Msi/Hsi/SevenOcean/UtilityForSo7Light/UtilityForSo7Light/UtilityForSo7Light.vcxproj new file mode 100644 index 0000000..bd018f7 --- /dev/null +++ b/PcDmis/Base/Interfac/Msi/Hsi/SevenOcean/UtilityForSo7Light/UtilityForSo7Light/UtilityForSo7Light.vcxproj @@ -0,0 +1,149 @@ +锘 + + + + Debug + Win32 + + + Release + Win32 + + + + {BFC37D2E-B136-44A0-9FC6-64A410E6C13A} + UtilityForSo7Light + MFCProj + + + + Application + true + v140 + Unicode + Static + + + Application + false + v140 + true + Unicode + Static + + + + + + + + + + + + + true + + + false + + + + Use + Level3 + Disabled + WIN32;_WINDOWS;_DEBUG;%(PreprocessorDefinitions) + true + + + Windows + true + + + false + true + _DEBUG;%(PreprocessorDefinitions) + + + 0x0409 + _DEBUG;%(PreprocessorDefinitions) + $(IntDir);%(AdditionalIncludeDirectories) + + + + + Level3 + Use + MaxSpeed + true + true + WIN32;_WINDOWS;NDEBUG;%(PreprocessorDefinitions) + true + + + Windows + true + true + true + + + false + true + NDEBUG;%(PreprocessorDefinitions) + + + 0x0409 + NDEBUG;%(PreprocessorDefinitions) + $(IntDir);%(AdditionalIncludeDirectories) + + + + + + + + + + + + + + + + + + + + + + + + + Create + Create + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/PcDmis/Base/Interfac/Msi/Hsi/SevenOcean/UtilityForSo7Light/UtilityForSo7Light/UtilityForSo7Light.vcxproj.filters b/PcDmis/Base/Interfac/Msi/Hsi/SevenOcean/UtilityForSo7Light/UtilityForSo7Light/UtilityForSo7Light.vcxproj.filters new file mode 100644 index 0000000..b9298c5 --- /dev/null +++ b/PcDmis/Base/Interfac/Msi/Hsi/SevenOcean/UtilityForSo7Light/UtilityForSo7Light/UtilityForSo7Light.vcxproj.filters @@ -0,0 +1,105 @@ +锘 + + + + {4FC737F1-C7A5-4376-A066-2A32D752A2FF} + cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx + + + {93995380-89BD-4b04-88EB-625FBE52EBFB} + h;hpp;hxx;hm;inl;inc;xsd + + + {67DA6AB6-F800-4c08-8B7A-83BB121AAD01} + rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms + + + + + + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + + + Resource Files + + + + + Resource Files + + + + + Resource Files + + + Resource Files + + + Resource Files + + + Resource Files + + + Resource Files + + + \ No newline at end of file diff --git a/PcDmis/Base/Interfac/Msi/Hsi/SevenOcean/UtilityForSo7Light/UtilityForSo7Light/UtilityForSo7LightDlg.cpp b/PcDmis/Base/Interfac/Msi/Hsi/SevenOcean/UtilityForSo7Light/UtilityForSo7Light/UtilityForSo7LightDlg.cpp new file mode 100644 index 0000000..eca31d6 --- /dev/null +++ b/PcDmis/Base/Interfac/Msi/Hsi/SevenOcean/UtilityForSo7Light/UtilityForSo7Light/UtilityForSo7LightDlg.cpp @@ -0,0 +1,4045 @@ +// EF7ControlRingLight.cpp : implementation file +#include "stdafx.h" +#include "afxdialogex.h" +#include +#include +#include "So7_Illumination.h" +#include "UtilityForSo7LightDlg.h" +#include "ReadWriteIni.h" +#include +#include +#include +#include "GetDigitalLuxMeterValue.h" + +const double PI=3.1415926535897932384626; +CSo7_Illumination *g_So7Illum=nullptr; +CGetDigitalLuxMeterValue *pGetDigitalLuxMeter = nullptr; +BYTE cSendData[20]={0XAA,0X00,0X01,0X00,0X01,0X00,0X01,0X00,0X01,0X00,0X01,0X00,0X01,0X00,0X00,0X00,0X00,0X00,0X00,0XBB}; +static HANDLE m_Thread_Mutex=NULL; +#define RING_LIGHT_NUMBER 6 +#define FAN_LIGHT_NUMBER 8 +#define STRING_SPARE _T("") +#define STRING_IS_DIGIT _T("0123456789") +#define STRING_MAX_ILLUMINATION _T("500000") +#define STRING_MAX_LIGHT_VALUE _T("5000") +#define ROAD_RANGE_VALUE 3 + (48 / 5) +#define CAPACITY_SIZE 50 +#define RING_ARRAY_SIZE 48 +#define COLUMN_NUMBER 101 +#define UseValue(A) ((A == 0)? 50 : 2.55) + +extern std::map g_vectorLightRemapForEightSector; +IMPLEMENT_DYNAMIC(CUtilityForSo7LightDlg, CDialogEx) + + CUtilityForSo7LightDlg::CUtilityForSo7LightDlg(CWnd* pParent) + : CDialogEx(CUtilityForSo7LightDlg::IDD, pParent) + , m_bCheckRing(true) + , m_iSelectLightType(0) +{ + sumRingCollumn=8; + bottomLightID= 49; + collumnWidth=(280/14); + OUT_FRAME = 50; + m_drawRotated = PI/8; + m_iSleepTime = 100; + m_dCabStep = 0.1; + m_iCompareGap = 25; + m_iGetWhichRingForInitValue = 2; + m_iLightFanTolNum = 8; + m_iLightRingTolNum = 6; + m_iRoadBoardNum = 1; + m_iRingGapSleepTime = 20; + m_bGetSingleRingInitValue = true; + m_bPopUpPromptDialog = false; + if (!pGetDigitalLuxMeter) + { + pGetDigitalLuxMeter = new CGetDigitalLuxMeterValue(); + BOOL status = pGetDigitalLuxMeter->OnInit(); + m_iSleepTime = pGetDigitalLuxMeter->m_iSleepTime; + m_dCabStep = pGetDigitalLuxMeter->m_dCabStep; + m_iCompareGap = pGetDigitalLuxMeter->m_iCompareGap; + m_bGetSingleRingInitValue = pGetDigitalLuxMeter->m_bGetSingleRingInitValue; + m_iGetWhichRingForInitValue = pGetDigitalLuxMeter->m_iGetWhichRingForInitValue; + m_LuxTempleture = pGetDigitalLuxMeter->m_dTempVal; + m_LuxValue = pGetDigitalLuxMeter->m_dLuxVal; + m_iSelectLightType = pGetDigitalLuxMeter->m_iSelectLightType; + m_iRoadBoardNum = pGetDigitalLuxMeter->m_iRoadBoardNum; + m_bPopUpPromptDialog = pGetDigitalLuxMeter->m_bPopUpPromptDialog; + m_iRingGapSleepTime = pGetDigitalLuxMeter->m_iRingGapSleepTime; + } + if (!g_So7Illum) + { + g_So7Illum=new CSo7_Illumination(); + int valueBuad = (m_iSelectLightType == 0) ? 19200 : 115200; + g_So7Illum->SetBuadRate(valueBuad); + BOOL status = g_So7Illum->Init(); + } + m_iSelctRingLightNum = -1; + m_nRow = -1; + m_nCol = -1; + m_bInputByUser = false; + m_bPressOpenBt = true; + m_bStopCalibration = false; + m_bCalibration = false; + m_bInitLuxValue = false; + m_bCheckRing = true; + m_bUseDefaultPath = true; + m_bReset = false; + m_bUpdate = false; + m_iCalibCurrent = 0; + for (int i = 0; i < RING_LIGHT_NUMBER; i++) + { + for (int j = 0; j < COLUMN_NUMBER; j++) + { + if (0 == j) + { + m_LightIllum[i][j] = static_cast(i); + m_KeepLightIllum[i][j] = static_cast(i); + m_KeepLightValue[i][j] = static_cast(1); + } + else + { + m_LightIllum[i][j] = static_cast(j * 10 + 100); + m_KeepLightIllum[i][j] = static_cast(j * 10 + 100); + m_KeepLightValue[i][j] = static_cast(UseValue(m_iSelectLightType) * j); + } + } + } +} + +CUtilityForSo7LightDlg::~CUtilityForSo7LightDlg() +{ + if (g_So7Illum) + { + BOOL status = g_So7Illum->UnInit(); + delete g_So7Illum; + g_So7Illum=nullptr; + } + if (pGetDigitalLuxMeter) + { + BOOL state = pGetDigitalLuxMeter->OnUninit(); + delete pGetDigitalLuxMeter; + pGetDigitalLuxMeter = nullptr; + } +} + +//--------------------------------------------------------------------- +//-----------------------ControlRingLight---------------------------------- +enum eLightCablicationThread +{ + THREAD_STATE_RUNNING, // Current state of the thread + THREAD_STATE_EXIT // Signal to thread to exit +}; +unsigned __stdcall LightCablication(LPVOID pThis); +eLightCablicationThread _cab_WatchThreadState; +HANDLE _smc_CabThreadHandle; +unsigned __stdcall GetLuxValue(LPVOID pThis) +{ + CUtilityForSo7LightDlg* _pThis = (CUtilityForSo7LightDlg*)pThis; + while (_cab_WatchThreadState == THREAD_STATE_RUNNING) + { + _pThis->OnUpdataLuxMeterValue(); + } + while (_cab_WatchThreadState == THREAD_STATE_EXIT) + { + ExitThread(0); + } +}; + +enum Cabli_State +{ + CABLI_GET_INIT_VALUE = 0, + CABLI_DO_ALL_RING_LIGHT, + CABLI_STOP, + CABLI_IDLE +}; +Cabli_State _Cabli_State; +HANDLE _Cabli_State_Handle; +unsigned __stdcall LightCablication(LPVOID pThis) +{ + CUtilityForSo7LightDlg* pDlg = (CUtilityForSo7LightDlg*)pThis; + while (_cab_WatchThreadState == THREAD_STATE_RUNNING) + { + WaitForSingleObject(_Cabli_State_Handle, INFINITE); + switch (_Cabli_State) + { + case CABLI_GET_INIT_VALUE: + { + pDlg->GetLuxMeterInitValue(); + break; + } + case CABLI_DO_ALL_RING_LIGHT: + { + pDlg->DoLightCablication(); + break; + } + case CABLI_IDLE: + { + pDlg->ButtonEnableWindows(TRUE); + break; + } + default: + { + break; + } + } + } + while (_cab_WatchThreadState == THREAD_STATE_EXIT) + { + ExitThread(0); + } +} + +void CUtilityForSo7LightDlg::DoDataExchange(CDataExchange* pDX) +{ + CDialogEx::DoDataExchange(pDX); + DDX_Control(pDX, IDC_EF7_CONTROL_RING_LIGHT_SCROLLBAR_LAMP_VALUE, m_vScrollLight); + DDX_Control(pDX, IDC_EF7_CONTROL_RING_LIGHT_PICKED_SINGLE, m_RingLightButtonSingle); + DDX_Control(pDX, IDC_EF7_CONTROL_RING_LIGHT_PICKED_RING, m_RingLightButtonRing); + DDX_Control(pDX, IDC_EF7_CONTROL_RING_LIGHT_PICKED_FAN, m_RingLightButtonFan); + DDX_Control(pDX, IDC_EF7_CONTROL_RING_LIGHT_PICKED_PIE, m_RingLightButtonPie); + DDX_Control(pDX, IDC_EF7_CONTROL_RING_LIGHT_CSTATIC_ILLUMINATION, m_TextIllumination); + DDX_Control(pDX, IDC_EF7_CONTROL_RING_LIGHT_CSTATIC_SELECTED_MODE, m_TextLightName); + DDX_Control(pDX, IDC_EF7_CONTROL_RING_LIGHT_OFF, m_LightOff); + DDX_Control(pDX, IDC_LIST_GET_RING_LIGHT_VALUE, m_listValue); + DDX_Control(pDX, IDC_EDIT_USE_TO_INPUT_VALUE, m_edtUseInputValue); + DDX_Control(pDX, IDC_BUTTON_CALIBRATION, m_btCalibration); + DDX_Control(pDX, ID_CANCEL, m_btExit); + DDX_Control(pDX, IDC_BUTTON_OPEN, m_btOpen); + DDX_Control(pDX, IDC_BUTTON_SAVE, m_btSave); + DDX_Control(pDX, IDC_BUTTON_RESET, m_btReset); + DDX_Control(pDX, IDC_BUTTON_DELETE, m_btDelete); + DDX_Control(pDX, IDC_BUTTON_UP_LOAD, m_btUpLoad); + DDX_Control(pDX, IDC_BUTTON_DOWN_LOAD, m_btDownLoad); + DDX_Control(pDX, IDC_BUTTON_GET_LUX_METER_INIT_VALUE, m_btInitValue); + DDX_Control(pDX, IDC_STATIC_LUX_METER_ILLUMINATE_VALUE, m_stTempText); + DDX_Control(pDX, IDC_STATIC_LUX_METER_TEMPERATURE_VALUE, m_stIllumText); + DDX_Control(pDX, IDC_EDIT_LUX_METER_ILLUMINATE_VALUE, m_edIllumValue); + DDX_Control(pDX, IDC_EDIT_LUX_METER_TEMPERATURE_VALUE, m_edTempValue); + DDX_Control(pDX, IDC_STATIC_LIGHT_ILLUMINATE_VALUE, m_stLightText); + DDX_Control(pDX, IDC_EDIT_LIGHT_ILLUMINATE_VALUE, m_edLightValue); + DDX_Control(pDX, IDC_CHECK_RING, m_btCheckRing); + DDX_Control(pDX, IDC_EDIT_WHICH_RING_TO_CALIBRATION, m_edWhichRing); + DDX_Control(pDX, IDC_STATIC_GET_VALUE_GAP, m_stValueGap); + DDX_Control(pDX, IDC_EDIT_GET_VALUE_GAP, m_edValueGap); + DDX_Control(pDX, IDC_STATIC_STAY_TIME, m_stStayTime); + DDX_Control(pDX, IDC_EDIT_STAY_TIME, m_edStayTime); + DDX_Control(pDX, IDC_STATIC_CALIBRATION_STEP, m_stCalibStep); + DDX_Control(pDX, IDC_EDIT_CALIBRATION_STEP, m_edCalibStep); + DDX_Control(pDX, IDC_STATIC_SELECT_LIGHT_TYPE, m_stLightType); + DDX_Control(pDX, IDC_COMBO_SELECT_LIGHT_TYPE, m_comLightType); +} + +//--------------------------------------------------------------------- +BEGIN_MESSAGE_MAP(CUtilityForSo7LightDlg, CDialogEx) + ON_WM_PAINT() + ON_WM_SIZE() + ON_WM_SETCURSOR() + ON_WM_VSCROLL() + ON_WM_HSCROLL() + ON_WM_LBUTTONUP() + ON_BN_CLICKED(IDC_EF7_CONTROL_RING_LIGHT_PICKED_FAN, &CUtilityForSo7LightDlg::OnClickedEf7ControlRingLightPickedFan) + ON_BN_CLICKED(IDC_EF7_CONTROL_RING_LIGHT_PICKED_PIE, &CUtilityForSo7LightDlg::OnClickedEf7ControlRingLightPickedPie) + ON_BN_CLICKED(IDC_EF7_CONTROL_RING_LIGHT_PICKED_RING, &CUtilityForSo7LightDlg::OnClickedEf7ControlRingLightPickedRing) + ON_BN_CLICKED(IDC_EF7_CONTROL_RING_LIGHT_PICKED_SINGLE, &CUtilityForSo7LightDlg::OnClickedEf7ControlRingLightPickedSingle) + ON_BN_CLICKED(IDC_EF7_CONTROL_RING_LIGHT_OFF,&CUtilityForSo7LightDlg::OnTurnOffLight) + ON_WM_LBUTTONDOWN() + // ON_WM_MOUSEMOVE() + ON_WM_CONTEXTMENU() + ON_WM_TIMER() + ON_WM_MOUSEMOVE() + ON_BN_CLICKED(ID_CANCEL, &CUtilityForSo7LightDlg::OnBnClickedCancel) + ON_BN_CLICKED(IDC_BUTTON_OPEN, &CUtilityForSo7LightDlg::OnBnClickedButtonOpen) + ON_BN_CLICKED(IDC_BUTTON_SAVE, &CUtilityForSo7LightDlg::OnBnClickedButtonSave) + ON_BN_CLICKED(IDC_BUTTON_UP_LOAD, &CUtilityForSo7LightDlg::OnBnClickedButtonUpLoad) + ON_BN_CLICKED(IDC_BUTTON_DOWN_LOAD, &CUtilityForSo7LightDlg::OnBnClickedButtonDownLoad) + ON_NOTIFY(NM_CUSTOMDRAW, IDC_LIST_GET_RING_LIGHT_VALUE, &CUtilityForSo7LightDlg::OnDrawListValueBkColor) + ON_EN_KILLFOCUS(IDC_EDIT_USE_TO_INPUT_VALUE, &CUtilityForSo7LightDlg::OnNMKillfocusListGetRingLightValue) + ON_NOTIFY(NM_DBLCLK, IDC_LIST_GET_RING_LIGHT_VALUE, &CUtilityForSo7LightDlg::OnNMDblclkListGetRingLightValue) + ON_BN_CLICKED(IDC_BUTTON_RESET, &CUtilityForSo7LightDlg::OnBnClickedButtonReset) + ON_BN_CLICKED(IDC_BUTTON_DELETE, &CUtilityForSo7LightDlg::OnBnClickedButtonDelete) + ON_BN_CLICKED(IDC_BUTTON_CALIBRATION, &CUtilityForSo7LightDlg::OnBnClickedButtonCalibration) + ON_BN_CLICKED(IDC_BUTTON_GET_LUX_METER_INIT_VALUE, &CUtilityForSo7LightDlg::OnBnClickedButtonGetLuxMeterInitValue) + ON_EN_CHANGE(IDC_EDIT_WHICH_RING_TO_CALIBRATION, &CUtilityForSo7LightDlg::OnEnChangeEditWhichRingToCalibration) + ON_BN_CLICKED(IDC_CHECK_RING, &CUtilityForSo7LightDlg::OnBnClickedCheckRing) + ON_EN_CHANGE(IDC_EDIT_GET_VALUE_GAP, &CUtilityForSo7LightDlg::OnEnChangeEditGetValueGap) + ON_EN_CHANGE(IDC_EDIT_STAY_TIME, &CUtilityForSo7LightDlg::OnEnChangeEditStayTime) + ON_EN_CHANGE(IDC_EDIT_CALIBRATION_STEP, &CUtilityForSo7LightDlg::OnEnChangeEditCalibrationStep) + ON_CBN_SELCHANGE(IDC_COMBO_SELECT_LIGHT_TYPE, &CUtilityForSo7LightDlg::OnCbnSelchangeComboSelectLightType) +END_MESSAGE_MAP() + +//--------------------------------------------------------------------- +void CUtilityForSo7LightDlg::OnPaint() +{ + WaitForSingleObject(m_Thread_Mutex, INFINITE); + CPaintDC dc(this); + + TRACE(_T("ring light gets DC\n")); + CDC *pDC = GetDC(); + + if(!(pDC && pDC->GetSafeHdc())) + { + return; + } + + //ShowWhichLightIcon(); + CDC memDC; + memDC.CreateCompatibleDC(pDC); + CBitmap bmpBuf; + bmpBuf.CreateCompatibleBitmap(pDC, 280, 280); + memDC.SelectObject(&bmpBuf); + + CBrush mBrush,*oldBrush; + + mBrush.CreateSolidBrush(GRAY_BRUSH); + oldBrush=memDC.SelectObject(&mBrush); + mBrush.DeleteObject(); + + switch (m_iSelectLightType) + { + case SELECT_LIGHT_SIX_RING: + { + //bottom light + if ((lightGroup[bottomLightID].bHighlight == true)) + { + mBrush.CreateHatchBrush(HS_DIAGCROSS, RGB(240, 200, 200)); + memDC.SetBkColor(lightGroup[bottomLightID].color); + } + else + { + mBrush.CreateSolidBrush(lightGroup[bottomLightID].color); + } + memDC.SelectObject(&mBrush); + memDC.Rectangle(0, 0, 280, 280); + mBrush.DeleteObject(); + SettingForDrawRingLightFrameForSixRingRight(memDC, mBrush); + //coaxial + if (lightGroup[0].bHighlight) + { + mBrush.CreateHatchBrush(HS_DIAGCROSS, RGB(240, 200, 200)); + memDC.SetBkColor(lightGroup[0].color); + } + else + { + mBrush.CreateSolidBrush(lightGroup[0].color); + } + memDC.SelectObject(&mBrush); + memDC.Ellipse(140 - collumnWidth, 140 - collumnWidth, 140 + collumnWidth, 140 + collumnWidth); + break; + } + case SELECT_LIGHT_ROAD_FOUR: + { + SettingForDrawRingLightFrameForFourRoadRight(memDC, mBrush); + break; + } + case SELECT_LIGHT_ROAD_EIGHT: + { + SettingForDrawRingLightFrameForEightRoadRight(memDC, mBrush); + break; + } + default: + break; + } + + mBrush.DeleteObject(); + + CPen m_FramePen(PS_SOLID,3,RGB(230,230,230)); + memDC.SelectObject(&m_FramePen); + DrawRingLightFrame(&memDC,m_SwitchPickLamp); + m_FramePen.DeleteObject(); + + pDC->BitBlt(20,0,280,280,&memDC,0,0,SRCCOPY); + pDC->SelectObject(oldBrush); + + TRACE(_T("ring light releases DC\n")); + bmpBuf.DeleteObject(); + ReleaseDC(&memDC); + ReleaseDC(pDC); + if(memDC) + { + memDC.DeleteDC(); + } + ReleaseMutex(m_Thread_Mutex); +} + +//--------------------------------------------------------------------- +void CUtilityForSo7LightDlg::OnVScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar) +{ + int curpos= pScrollBar->GetScrollPos(); + int minpos = 0, maxpos = 1000; + maxpos = (m_iSelectLightType == SELECT_LIGHT_SIX_RING) ? 1000 : 100; + //pScrollBar->GetScrollRange(&minpos, &maxpos); + switch (nSBCode) + { + case SB_LINEUP: + if (curpos > minpos) + curpos--; + break; + case SB_LINEDOWN : + if (curpos < maxpos) + curpos++; + break; + case SB_THUMBTRACK: + curpos = nPos; //follow the mouse move + break; + case SB_PAGEUP: + if(curpos = curpos-10,curposmaxpos) + curpos=maxpos; + break; + default: + return; + } + + curpos=maxpos-curpos; + ASSERT(curpos <= maxpos); + ASSERT(curpos >= minpos); + double dscale = (m_iSelectLightType == SELECT_LIGHT_SIX_RING) ? 0.1 : 1.0; + double curValue= curpos * dscale; + COLORREF color = GetColor(curValue); + SetControlsIllumination(curValue); + for(int i=0;i<=bottomLightID;i++) + { + if(lightGroup[i].bHighlight==TRUE) + { + lightGroup[i].illumination=curValue; + lightGroup[i].color=color; + } + } + + UpdateLightStateToMachine(); +} + +//--------------------------------------------------------------------- +void CUtilityForSo7LightDlg::OnLButtonUp(UINT nFlags, CPoint point) +{ + CDialogEx::OnLButtonUp(nFlags, point); +} + +//--------------------------------------------------------------------- +void CUtilityForSo7LightDlg::UpdateLightStateToMachine() +{ + m_MsgContent.senderID = IDC_EF7_CONTROL_RING_LIGHT_SCROLLBAR_LAMP_VALUE; + m_MsgContent.bUpateToMachine = true; + + m_MsgContent.light.topLight = 0; + for(int i = 0; i <= CAPACITY_SIZE; i++) + { + if (SELECT_LIGHT_SIX_RING != m_iSelectLightType) + { + if ((i == 0) && (i == m_iGetWhichRingForInitValue))//coaxial light + { + m_MsgContent.light.coaxialLight = lightGroup[0].illumination; + break; + } + else if ((i == 1) && (i == m_iGetWhichRingForInitValue))//top light + { + m_MsgContent.light.topLight = lightGroup[1].illumination; + break; + } + else if ((i == 2) && (i == m_iGetWhichRingForInitValue)) // bottom light + { + m_MsgContent.light.bottomLight = lightGroup[2].illumination; + break; + } + else if (i >= 3 && i < CAPACITY_SIZE) + { + m_MsgContent.light.vectorLight[i - 3] = lightGroup[i].illumination; + } + } + else + { + if (i == 0)//coaxial light + { + m_MsgContent.light.coaxialLight = lightGroup[0].illumination; + } + else if (i == bottomLightID) // bottom light + { + m_MsgContent.light.bottomLight = lightGroup[bottomLightID].illumination; + } + else if (i >= 1 && i < bottomLightID) + { + m_MsgContent.light.vectorLight[i - 1] = lightGroup[i].illumination; + } + } + } + bTiggerSendMessage = true; + return; +} + + +CPoint CUtilityForSo7LightDlg::RotatePointCenterSweep(CPoint orginPoint,CPoint center,double sweepangle) +{ + double radius,angle; //long double + CPoint targetpoint; + radius = _hypot((orginPoint.x-center.x),(orginPoint.y-center.y)); + angle = asin((-orginPoint.y+center.y)/radius); + if((orginPoint.x <= center.x) && (orginPoint.y <= center.y))//Third quadrant + { + angle = PI-angle; + } + if((orginPoint.x <= center.x) && (orginPoint.y >= center.y))//Second quadrant + { + angle = PI-angle; + } + if((orginPoint.x >= center.x) && (orginPoint.y >= center.y))//First quadrant + { + angle=2*PI+angle; + } + + angle =angle + sweepangle; + + targetpoint.y = static_cast(center.y - radius*sin(angle)); + targetpoint.x = static_cast(center.x + radius*cos(angle)); + return targetpoint; +} + +CRect CUtilityForSo7LightDlg::GetArcRect(CPoint origin,CPoint center) +{ + int radius; + radius = static_cast( _hypot((origin.x - center.x),(origin.y - center.y))); + return CRect(center.x - radius, center.y - radius, center.x + radius, center.y + radius); +} + +COLORREF CUtilityForSo7LightDlg::GetColor(double value/*=100.0*/) +{ + ASSERT(value >= 0); + ASSERT(value <= 100.0); + int colorR = static_cast(value*230/100+20); + int colorG = static_cast(value*230/100+20); + int colorB = static_cast(value*50/100); + return RGB(colorR, colorG, colorB); +} + +void CUtilityForSo7LightDlg::SettingForDrawRingLightFrameForSixRingRight(CDC& memDC, CBrush& mBrush) +{ + switch (m_SwitchPickLamp) + { + case PICKED_SINGLE_LAMP: + { + for (int i = 1; i < bottomLightID; i++) + { + if (lightGroup[i].bHighlight == true) + { + mBrush.CreateHatchBrush(HS_DIAGCROSS, RGB(240, 200, 200)); + memDC.SetBkColor(lightGroup[i].color); + } + else + { + mBrush.CreateSolidBrush(lightGroup[i].color); + } + memDC.SelectObject(&mBrush); + FillArcRegion(i, &memDC, lightGroup[i].bHighlight); + mBrush.DeleteObject(); + } + } + break; + case PICKED_RING_LAMP: + { + for (int i = 5; i >= 0; i--) + { + if (lightGroup[i * 8 + 1].bHighlight == true) + { + mBrush.CreateHatchBrush(HS_DIAGCROSS, RGB(240, 200, 200)); + memDC.SetBkColor(lightGroup[i * 8 + 1].color); + } + else + { + mBrush.CreateSolidBrush(lightGroup[i * 8 + 1].color); + } + memDC.SelectObject(&mBrush); + memDC.Ellipse(140 - collumnWidth*(i + 1) - 20, 140 - collumnWidth*(i + 1) - 20, 140 + collumnWidth*(i + 1) + 20, 140 + collumnWidth*(i + 1) + 20); + mBrush.DeleteObject(); + } + } + break; + case PICKED_FAN_LAMP: + { + for (UINT column = 1; column < m_iLightFanTolNum + 1; column++) + { + if (lightGroup[column].bHighlight) + { + mBrush.CreateHatchBrush(HS_DIAGCROSS, RGB(240, 200, 200)); + memDC.SetBkColor(lightGroup[column].color); + } + else + { + mBrush.CreateSolidBrush(lightGroup[column].color); + } + memDC.SelectObject(&mBrush); + + CPoint pointA, pointB, pointC, pointD, center(140, 140); + + pointA = RotatePointCenterSweep(CPoint(140 + collumnWidth, 140), center, PI / 4 * (column - 1) + m_drawRotated); + pointB = RotatePointCenterSweep(CPoint(140 + collumnWidth + collumnWidth * 6, 140), center, PI / 4 * (column - 1) + m_drawRotated); + pointC = RotatePointCenterSweep(pointB, center, PI / 4); + pointD = RotatePointCenterSweep(pointA, center, PI / 4); + + memDC.BeginPath(); + memDC.MoveTo(pointA); + memDC.LineTo(pointB); + memDC.ArcTo(GetArcRect(pointB, center), pointB, pointC); + memDC.LineTo(pointD); + memDC.SetArcDirection(AD_CLOCKWISE); + memDC.ArcTo(GetArcRect(pointA, center), pointD, pointA); + memDC.SetArcDirection(AD_COUNTERCLOCKWISE); + memDC.EndPath(); + memDC.FillPath(); + mBrush.DeleteObject(); + } + } + break; + case PICKED_PIE_LAMP: + { + if (lightGroup[1].bHighlight == true) + { + mBrush.CreateHatchBrush(HS_DIAGCROSS, RGB(240, 200, 200)); + memDC.SetBkColor(lightGroup[1].color); + } + else + { + mBrush.CreateSolidBrush(lightGroup[1].color); + } + memDC.SelectObject(&mBrush); + memDC.Ellipse(140 - collumnWidth * 6 - 20, 140 - collumnWidth * 6 - 20, 140 + collumnWidth * 6 + 20, 140 + collumnWidth * 6 + 20); + mBrush.DeleteObject(); + + } + break; + default: + break; + } +} + +void CUtilityForSo7LightDlg::SettingForDrawRingLightFrameForFourRoadRight(CDC& memDC, CBrush& mBrush) +{ + switch (m_SwitchPickLamp) + { + case PICKED_FAN_LAMP: + for (UINT column = 1; column < m_iLightFanTolNum + 1; column++) + { + if (lightGroup[column].bHighlight == true) + { + mBrush.CreateHatchBrush(HS_DIAGCROSS, RGB(240, 200, 200)); + memDC.SetBkColor(lightGroup[column].color); + } + else + { + mBrush.CreateSolidBrush(lightGroup[column].color); + } + memDC.SelectObject(&mBrush); + + CPoint pointA, pointB, pointC, pointD, center(140, 140); + + pointA = RotatePointCenterSweep(CPoint(140 + collumnWidth, 140), center, PI / 2 * (column - 1) + m_drawRotated); + pointB = RotatePointCenterSweep(CPoint(140 + collumnWidth * 7, 140), center, PI / 2 * (column - 1) + m_drawRotated); + pointC = RotatePointCenterSweep(pointB, center, PI / 2); + pointD = RotatePointCenterSweep(pointA, center, PI / 2); + + memDC.BeginPath(); + memDC.MoveTo(pointA); + memDC.LineTo(pointB); + memDC.ArcTo(GetArcRect(pointB, center), pointB, pointC); + memDC.LineTo(pointD); + memDC.SetArcDirection(AD_CLOCKWISE); + memDC.ArcTo(GetArcRect(pointA, center), pointD, pointA); + memDC.SetArcDirection(AD_COUNTERCLOCKWISE); + memDC.EndPath(); + memDC.FillPath(); + mBrush.DeleteObject(); + } + break; + case PICKED_PIE_LAMP: + { + int pieBeginNum = 0; + for (int i = 0; i < CAPACITY_SIZE; i++) + { + if (lightGroup[i].bHighlight == true) + { + mBrush.CreateHatchBrush(HS_DIAGCROSS, RGB(240, 200, 200)); + memDC.SetBkColor(lightGroup[i].color); + pieBeginNum = i; + break; + } + else + { + if (49 != i) + { + continue; + } + mBrush.CreateSolidBrush(lightGroup[pieBeginNum].color); + } + } + memDC.SelectObject(&mBrush); + CRgn rgn; + switch (pieBeginNum) + { + case Hit_Coaxial: + { + rgn.CreateRectRgn(0, 0, 140, 140); + memDC.FillRgn(&rgn, &mBrush); + break; + } + case Hit_Top: + { + rgn.CreateRectRgn(140, 0, 280, 140); + memDC.FillRgn(&rgn, &mBrush); + break; + } + case Hit_Bottom: + { + rgn.CreateRectRgn(0, 140, 140, 280); + memDC.FillRgn(&rgn, &mBrush); + break; + } + default: + rgn.CreateRectRgn(140, 140, 280, 280); + memDC.FillRgn(&rgn, &mBrush); + break; + } + //memDC.Ellipse(140 - collumnWidth * 6 - 20, 140 - collumnWidth * 6 - 20, 140 + collumnWidth * 6 + 20, 140 + collumnWidth * 6 + 20); + mBrush.DeleteObject(); + } + break; + default: + break; + } +} + +void CUtilityForSo7LightDlg::SettingForDrawRingLightFrameForEightRoadRight(CDC& memDC, CBrush& mBrush) +{ + switch (m_SwitchPickLamp) + { + case PICKED_FAN_LAMP: + for (UINT column = 1; column < m_iLightFanTolNum + 1; column++) + { + if (lightGroup[column].bHighlight == true) + { + mBrush.CreateHatchBrush(HS_DIAGCROSS, RGB(240, 200, 200)); + memDC.SetBkColor(lightGroup[column].color); + } + else + { + mBrush.CreateSolidBrush(lightGroup[column].color); + } + memDC.SelectObject(&mBrush); + + CPoint pointA, pointB, pointC, pointD, center(140, 140); + + pointA = RotatePointCenterSweep(CPoint(140 + collumnWidth, 140), center, PI / 4 * (column - 1) + m_drawRotated); + pointB = RotatePointCenterSweep(CPoint(140 + collumnWidth * 7, 140), center, PI / 4 * (column - 1) + m_drawRotated); + pointC = RotatePointCenterSweep(pointB, center, PI / 4); + pointD = RotatePointCenterSweep(pointA, center, PI / 4); + + memDC.BeginPath(); + memDC.MoveTo(pointA); + memDC.LineTo(pointB); + memDC.ArcTo(GetArcRect(pointB, center), pointB, pointC); + memDC.LineTo(pointD); + memDC.SetArcDirection(AD_CLOCKWISE); + memDC.ArcTo(GetArcRect(pointA, center), pointD, pointA); + memDC.SetArcDirection(AD_COUNTERCLOCKWISE); + memDC.EndPath(); + memDC.FillPath(); + mBrush.DeleteObject(); + } + break; + case PICKED_PIE_LAMP: + { + int pieBeginNum = 0; + for (int i = 0; i < CAPACITY_SIZE; i++) + { + if (lightGroup[i].bHighlight == true) + { + mBrush.CreateHatchBrush(HS_DIAGCROSS, RGB(240, 200, 200)); + memDC.SetBkColor(lightGroup[i].color); + pieBeginNum = i; + break; + } + else + { + if (49 != i) + { + continue; + } + mBrush.CreateSolidBrush(lightGroup[pieBeginNum].color); + } + } + CRgn rgn; + memDC.SelectObject(&mBrush); + switch (pieBeginNum) + { + case Hit_Coaxial: + { + rgn.CreateRectRgn(0, 0, 140, 70); + memDC.FillRgn(&rgn, &mBrush); + break; + } + case Hit_Top: + { + rgn.CreateRectRgn(140, 0, 280, 70); + memDC.FillRgn(&rgn, &mBrush); + break; + } + case Hit_Bottom: + { + rgn.CreateRectRgn(0, 70, 140, 140); + memDC.FillRgn(&rgn, &mBrush); + break; + } + default: + { + if ((pieBeginNum >= Hit_Ring) && (pieBeginNum < ROAD_RANGE_VALUE)) + { + rgn.CreateRectRgn(140, 70, 280, 140); + } + else if ((pieBeginNum >= ROAD_RANGE_VALUE) && (pieBeginNum < ROAD_RANGE_VALUE * 2)) + { + rgn.CreateRectRgn(0, 140, 140, 210); + } + else if ((pieBeginNum >= ROAD_RANGE_VALUE * 2) && (pieBeginNum < ROAD_RANGE_VALUE * 3)) + { + rgn.CreateRectRgn(140, 140, 280, 210); + } + else if ((pieBeginNum >= ROAD_RANGE_VALUE * 3) && (pieBeginNum < ROAD_RANGE_VALUE * 4)) + { + rgn.CreateRectRgn(0, 210, 140, 280); + } + else + { + rgn.CreateRectRgn(140, 210, 280, 280); + } + memDC.FillRgn(&rgn, &mBrush); + break; + } + } + mBrush.DeleteObject(); + } + break; + default: + break; + } +} + +BOOL CUtilityForSo7LightDlg::DrawRingLightFrame(CDC *pdc,MODE_PICKED_LAMP m_SwitchPickLamp) +{ + switch (m_iSelectLightType) + { + case SELECT_LIGHT_SIX_RING: + { + DrawRingLightFrameForSixRingRight(pdc, m_SwitchPickLamp); + break; + } + case SELECT_LIGHT_ROAD_FOUR: + { + DrawRingLightFrameForFourRoadRight(pdc, m_SwitchPickLamp); + break; + } + case SELECT_LIGHT_ROAD_EIGHT: + { + DrawRingLightFrameForEightRoadRight(pdc, m_SwitchPickLamp); + break; + } + default: + return FALSE; + break; + } + return TRUE; +} + +BOOL CUtilityForSo7LightDlg::DrawRingLightFrameForSixRingRight(CDC *pdc, MODE_PICKED_LAMP m_SwitchPickLamp) +{ + switch (m_SwitchPickLamp) + { + case CUtilityForSo7LightDlg::PICKED_SINGLE_LAMP: + { + CPoint center(140, 140); + for (int distance = 140; distance > 0; distance = distance - collumnWidth) + { + pdc->Arc(CRect(center.x - distance, center.y - distance, center.x + distance, center.y + distance), CPoint(center.x + distance, center.y), CPoint(center.x + distance, center.y)); + } + pdc->MoveTo(0, 0); + pdc->LineTo(280, 0); + pdc->LineTo(280, 280); + pdc->LineTo(0, 280); + pdc->LineTo(0, 0); + + CPoint pointA(140 + collumnWidth, 140), pointB(280, 140); + for (int num = 0; numMoveTo(RotatePointCenterSweep(pointA, center, num*PI / 4 + m_drawRotated)); + pdc->LineTo(RotatePointCenterSweep(pointB, center, num*PI / 4 + m_drawRotated)); + } + } + break; + case CUtilityForSo7LightDlg::PICKED_RING_LAMP: + { + CPoint center(140, 140); + for (int distance = 140; distance > 0; distance = distance - collumnWidth) + { + pdc->Arc(CRect(center.x - distance, center.y - distance, center.x + distance, center.y + distance), CPoint(center.x + distance, center.y), CPoint(center.x + distance, center.y)); + } + pdc->MoveTo(0, 0); + pdc->LineTo(280, 0); + pdc->LineTo(280, 280); + pdc->LineTo(0, 280); + pdc->LineTo(0, 0); + } + break; + case CUtilityForSo7LightDlg::PICKED_FAN_LAMP: + { + CPoint center(140, 140); + int distance; + distance = 140; + pdc->Arc(CRect(center.x - distance, center.y - distance, center.x + distance, center.y + distance), CPoint(center.x + distance, center.y), CPoint(center.x + distance, center.y)); + + distance = collumnWidth; + pdc->Arc(CRect(center.x - distance, center.y - distance, center.x + distance, center.y + distance), CPoint(center.x + distance, center.y), CPoint(center.x + distance, center.y)); + + pdc->MoveTo(0, 0); + pdc->LineTo(280, 0); + pdc->LineTo(280, 280); + pdc->LineTo(0, 280); + pdc->LineTo(0, 0); + CPoint pointA(140 + collumnWidth, 140), pointB(280, 140); + for (int num = 0; numMoveTo(RotatePointCenterSweep(pointA, center, num*PI / 4 + m_drawRotated)); + pdc->LineTo(RotatePointCenterSweep(pointB, center, num*PI / 4 + m_drawRotated)); + } + } + break; + case CUtilityForSo7LightDlg::PICKED_PIE_LAMP: + { + CPoint center(140, 140); + int distance; + distance = 140; + pdc->Arc(CRect(center.x - distance, center.y - distance, center.x + distance, center.y + distance), CPoint(center.x + distance, center.y), CPoint(center.x + distance, center.y)); + distance = collumnWidth; + pdc->Arc(CRect(center.x - distance, center.y - distance, center.x + distance, center.y + distance), CPoint(center.x + distance, center.y), CPoint(center.x + distance, center.y)); + pdc->MoveTo(0, 0); + pdc->LineTo(280, 0); + pdc->LineTo(280, 280); + pdc->LineTo(0, 280); + pdc->LineTo(0, 0); + } + break; + default: + break; + } + return TRUE; +} + +BOOL CUtilityForSo7LightDlg::DrawRingLightFrameForFourRoadRight(CDC *pdc, MODE_PICKED_LAMP m_SwitchPickLamp) +{ + switch (m_SwitchPickLamp) + { + case CUtilityForSo7LightDlg::PICKED_FAN_LAMP: + { + CPoint center(140, 140); + int distance; + distance = 140; + pdc->Arc(CRect(center.x - distance, center.y - distance, center.x + distance, center.y + distance), CPoint(center.x + distance, center.y), CPoint(center.x + distance, center.y)); + + distance = collumnWidth; + pdc->Arc(CRect(center.x - distance, center.y - distance, center.x + distance, center.y + distance), CPoint(center.x + distance, center.y), CPoint(center.x + distance, center.y)); + + pdc->MoveTo(0, 0); + pdc->LineTo(280, 0); + pdc->LineTo(280, 280); + pdc->LineTo(0, 280); + pdc->LineTo(0, 0); + CPoint pointA(140 + collumnWidth, 140), pointB(280, 140); + for (int num = 0; num<4; num++) + { + pdc->MoveTo(RotatePointCenterSweep(pointA, center, num*PI / 2 + m_drawRotated)); + pdc->LineTo(RotatePointCenterSweep(pointB, center, num*PI / 2 + m_drawRotated)); + } + } + break; + case CUtilityForSo7LightDlg::PICKED_PIE_LAMP: + { + CPoint center(140, 140); + int distance; + distance = 140; + //pdc->Arc(CRect(center.x - distance, center.y - distance, center.x + distance, center.y + distance), CPoint(center.x + distance, center.y), CPoint(center.x + distance, center.y)); + + //distance = collumnWidth*2.5; + //pdc->Arc(CRect(center.x - distance, center.y - distance, center.x + distance, center.y + distance), CPoint(center.x + distance, center.y), CPoint(center.x + distance, center.y)); + pdc->MoveTo(0, 0); + pdc->LineTo(280, 0); + pdc->LineTo(280, 280); + pdc->LineTo(0, 280); + pdc->LineTo(0, 0); + pdc->MoveTo(140, 0); + pdc->LineTo(140, 280); + pdc->MoveTo(0, 140); + pdc->LineTo(280, 140); + CRgn rgn; + CBrush bruFigure; + CString strT; + UINT iId = 1; + for (int i = 0; i < 2; i++) + { + for (int j = 0; j < 2; j++) + { + rgn.CreateEllipticRgn(55 + distance*j, 55 + distance*i, 85 + distance*j, 85 + distance*i); + bruFigure.CreateSolidBrush(RGB(255, 0, 0)); + pdc->FillRgn(&rgn, &bruFigure); + pdc->SetBkMode(TRANSPARENT); + strT.Format(_T("%d"), iId); + pdc->TextOutW(65 + distance*j, 62 + distance*i, strT); + rgn.DeleteObject(); + bruFigure.DeleteObject(); + iId++; + } + } + } + break; + default: + break; + } + return TRUE; +} + +BOOL CUtilityForSo7LightDlg::DrawRingLightFrameForEightRoadRight(CDC *pdc, MODE_PICKED_LAMP m_SwitchPickLamp) +{ + switch (m_SwitchPickLamp) + { + case CUtilityForSo7LightDlg::PICKED_FAN_LAMP: + { + CPoint center(140, 140); + int distance; + distance = 140; + pdc->Arc(CRect(center.x - distance, center.y - distance, center.x + distance, center.y + distance), CPoint(center.x + distance, center.y), CPoint(center.x + distance, center.y)); + + distance = collumnWidth; + pdc->Arc(CRect(center.x - distance, center.y - distance, center.x + distance, center.y + distance), CPoint(center.x + distance, center.y), CPoint(center.x + distance, center.y)); + + pdc->MoveTo(0, 0); + pdc->LineTo(280, 0); + pdc->LineTo(280, 280); + pdc->LineTo(0, 280); + pdc->LineTo(0, 0); + CPoint pointA(140 + collumnWidth, 140), pointB(280, 140); + for (int num = 0; num < 8; num++) + { + pdc->MoveTo(RotatePointCenterSweep(pointA, center, num*PI / 4 + m_drawRotated)); + pdc->LineTo(RotatePointCenterSweep(pointB, center, num*PI / 4 + m_drawRotated)); + } + } + break; + case CUtilityForSo7LightDlg::PICKED_PIE_LAMP: + { + CPoint center(140, 140); + UINT distance = 140; + //pdc->Arc(CRect(center.x - distance, center.y - distance, center.x + distance, center.y + distance), CPoint(center.x + distance, center.y), CPoint(center.x + distance, center.y)); + + //distance = collumnWidth*2.5; + //pdc->Arc(CRect(center.x - distance, center.y - distance, center.x + distance, center.y + distance), CPoint(center.x + distance, center.y), CPoint(center.x + distance, center.y)); + pdc->MoveTo(0, 0); + pdc->LineTo(280, 0); + pdc->LineTo(280, 280); + pdc->LineTo(0, 280); + pdc->LineTo(0, 0); + pdc->MoveTo(140, 0); + pdc->LineTo(140, 280); + pdc->MoveTo(0, 140); + pdc->LineTo(280, 140); + pdc->MoveTo(0, 70); + pdc->LineTo(280, 70); + pdc->MoveTo(0, 210); + pdc->LineTo(280, 210); + CRgn rgn; + CBrush bruFigure; + CString strT; + UINT iId = 1; + UINT iOffW = 0; + UINT iOffH = 0; + for (int i = 0; i < 4; i++) + { + for (int j = 0; j < 2; j++) + { + iOffW = static_cast(distance*j); + iOffH = static_cast(distance*0.5*i); + rgn.CreateEllipticRgn(55 + iOffW, 25 + iOffH, 85 + iOffW, 55 + iOffH); + bruFigure.CreateSolidBrush(RGB(255, 0, 0)); + pdc->FillRgn(&rgn, &bruFigure); + pdc->SetBkMode(TRANSPARENT); + strT.Format(_T("%d"), iId); + pdc->TextOutW(65 + iOffW, 32 + iOffH, strT); + rgn.DeleteObject(); + bruFigure.DeleteObject(); + iId++; + } + } + } + break; + default: + break; + } + return TRUE; +} + +BOOL CUtilityForSo7LightDlg::FillArcRegion(int num,CDC *pDC,bool bHighlight) +{ + int row,column; + CPoint pointA,pointB,pointC,pointD,center(140,140); + ASSERT(num >= 1 && num <= RING_ARRAY_SIZE); + + row = (num-1)/8; + column = (num-1)%8; + + pointA=RotatePointCenterSweep(CPoint(140+collumnWidth+collumnWidth*row+1,140),center,PI/4*column+m_drawRotated); + pointB=RotatePointCenterSweep(CPoint(140+collumnWidth+collumnWidth*row+collumnWidth+1,140),center,PI/4*column+m_drawRotated); + pointC=RotatePointCenterSweep(pointB,center,PI/4); + pointD=RotatePointCenterSweep(pointA,center,PI/4); + + pDC->BeginPath(); + pDC->MoveTo(pointA); + pDC->LineTo(pointB); + pDC->ArcTo(GetArcRect(pointB,center),pointB,pointC); + pDC->LineTo(pointD); + pDC->SetArcDirection(AD_CLOCKWISE); + pDC->ArcTo(GetArcRect(pointA,center),pointD,pointA); + pDC->SetArcDirection(AD_COUNTERCLOCKWISE); + pDC->EndPath(); + pDC->FillPath(); + return true; +} + + +void CUtilityForSo7LightDlg::SetShortcutTitle(UINT lightName) +{ + if (SELECT_LIGHT_SIX_RING != m_iSelectLightType) + { + CString strEdit; + if (lightName == Hit_Coaxial) + { + m_MsgContent.lightHit = Hit_Coaxial; + m_iGetWhichRingForInitValue = Hit_Coaxial; + m_TextLightName.SetWindowText(L"线路1"); + } + else if (lightName == Hit_Top) + { + m_MsgContent.lightHit = Hit_Top; + m_iGetWhichRingForInitValue = Hit_Top; + m_TextLightName.SetWindowText(L"线路2"); + } + else if (lightName == Hit_Bottom) + { + m_MsgContent.lightHit = Hit_Bottom; + m_iGetWhichRingForInitValue = Hit_Bottom; + m_TextLightName.SetWindowText(L"线路3"); + } + else if (sumRingCollumn > Hit_Bottom && lightName < CAPACITY_SIZE) + { + m_MsgContent.lightHit = Hit_Ring; + if (SELECT_LIGHT_ROAD_FOUR != m_iSelectLightType) + { + if ((lightName >= Hit_Ring) && (lightName < ROAD_RANGE_VALUE)) + { + m_TextLightName.SetWindowText(L"线路4"); + m_iGetWhichRingForInitValue = Hit_Ring; + } + else if ((lightName >= ROAD_RANGE_VALUE) && (lightName < ROAD_RANGE_VALUE * 2)) + { + m_TextLightName.SetWindowText(L"线路5"); + m_iGetWhichRingForInitValue = 4; + } + else if ((lightName >= ROAD_RANGE_VALUE * 2) && (lightName < ROAD_RANGE_VALUE * 3)) + { + m_TextLightName.SetWindowText(L"线路6"); + m_iGetWhichRingForInitValue = 5; + } + else if ((lightName >= ROAD_RANGE_VALUE * 3) && (lightName < ROAD_RANGE_VALUE * 4)) + { + m_TextLightName.SetWindowText(L"线路7"); + m_iGetWhichRingForInitValue = 6; + } + else + { + m_TextLightName.SetWindowText(L"线路8"); + m_iGetWhichRingForInitValue = 7; + } + } + else + { + m_TextLightName.SetWindowText(L"线路4"); + m_iGetWhichRingForInitValue = Hit_Ring; + } + } + else + { + m_MsgContent.lightHit = null; + m_TextLightName.SetWindowText(L"未选择"); + } + strEdit.Format(_T("%d"), m_iGetWhichRingForInitValue + 1); + m_edWhichRing.SetWindowTextW(strEdit); + } + else + { + if (lightName == 0) + { + m_MsgContent.lightHit = Hit_Coaxial; + m_TextLightName.SetWindowText(L"同轴光"); + } + else if (lightName == 1) + { + m_MsgContent.lightHit = Hit_Top; + m_TextLightName.SetWindowText(L"表面光"); + } + else if (sumRingCollumn > 1 && lightName <= RING_ARRAY_SIZE) + { + m_MsgContent.lightHit = Hit_Ring; + m_TextLightName.SetWindowText(L"环形光"); + } + else if (lightName == 49) + { + m_MsgContent.lightHit = Hit_Bottom; + m_TextLightName.SetWindowText(L"轮廓光"); + } + else + { + m_MsgContent.lightHit = null; + m_TextLightName.SetWindowText(L"未选择"); + } + } +} + + +int CUtilityForSo7LightDlg::GetLightName(CPoint mousepoint) +{ + mousepoint.x -= 20; + double radius = 0.0; + double angle = 0.0; + CPoint center(140,140); + int row = 0; + int column = 0; + int id = 0; + switch (m_iSelectLightType) + { + case SELECT_LIGHT_SIX_RING: + { + radius = _hypot((mousepoint.x - center.x), (mousepoint.y - center.y)); + if (radius < collumnWidth) + return 0; + + if (radius >= 140) + { + if (mousepoint.x <= 280 && mousepoint.y <= 280) + return id = bottomLightID; + else + return id = OUT_FRAME;//not existed + } + row = static_cast(radius / collumnWidth); + if ((mousepoint.x >= center.x) && (mousepoint.y >= center.y)) //quadrant 1 + angle = (asin((-mousepoint.y + center.y) / radius) + PI * 2); + else if ((mousepoint.x <= center.x) && (mousepoint.y >= center.y)) //quadrant 2 + angle = (asin((mousepoint.y - center.y) / radius) + PI); + else if ((mousepoint.x <= center.x) && (mousepoint.y <= center.y)) //quadrant 3 + angle = (asin((mousepoint.y - center.y) / radius) + PI); + else if ((mousepoint.x >= center.x) && (mousepoint.y <= center.y)) //quadrant 4 + angle = asin((-mousepoint.y + center.y) / radius); + angle = angle - m_drawRotated; + if (angle < 0.0) + angle = angle + 2 * PI; + column = static_cast(angle / (PI / (m_iLightFanTolNum / 2))); + id = (row - 1) * m_iLightFanTolNum + column + 1; + break; + } + case SELECT_LIGHT_ROAD_FOUR: + { + if ((mousepoint.x < center.x) && (mousepoint.y < center.y)) //road 1 + id = Hit_Coaxial; + else if ((mousepoint.x > center.x) && (mousepoint.y < center.y)) //road 2 + id = Hit_Top; + else if ((mousepoint.x < center.x) && (mousepoint.y > center.y)) //road 3 + id = Hit_Bottom; + else if ((mousepoint.x > center.x) && (mousepoint.y > center.y)) //road 4 + id = Hit_Ring; + break; + } + case SELECT_LIGHT_ROAD_EIGHT: + { + CPoint cross1(140, 70); + CPoint cross2(140, 210); + if ((mousepoint.x < center.x) && (mousepoint.y < cross1.y)) //road 1 + id = Hit_Coaxial; + else if ((mousepoint.x > center.x) && (mousepoint.y < cross1.y))//road 2 + id = Hit_Top; + else if ((mousepoint.x < cross1.x) && (mousepoint.y < center.y) + && (mousepoint.y > cross1.y)) //road 3 + id = Hit_Bottom; + else if ((mousepoint.x > cross1.x) && (mousepoint.y < center.y) + && (mousepoint.y > cross1.y)) //road 4 + { + id = Hit_Ring; + } + else if ((mousepoint.x < center.x) && (mousepoint.y > center.y) + && (mousepoint.y < cross2.y)) //road 5 + { + id = 12; + } + else if ((mousepoint.x > center.x) && (mousepoint.y > center.y) + && (mousepoint.y < cross2.y)) //road 6 + { + id = 24; + } + else if ((mousepoint.x < center.x) && (mousepoint.y > cross2.y) + && (mousepoint.y < 280)) //road 7 + { + id = 34; + } + else //road 8 + { + id = 42; + } + break; + } + default: + break; + } + + return id; +} + +void CUtilityForSo7LightDlg::OnClickedEf7ControlRingLightPickedFan() +{ + SelectRingLightExclusive(PICKED_FAN_LAMP); + bInvalidateScreen = true; + ModifyLightMode(LIGHT_MODE::PICKED_FAN_LAMP); +} + +void CUtilityForSo7LightDlg::OnClickedEf7ControlRingLightPickedPie() +{ + SelectRingLightExclusive(PICKED_PIE_LAMP); + bInvalidateScreen = true; + ModifyLightMode(LIGHT_MODE::PICKED_PIE_LAMP); +} + +void CUtilityForSo7LightDlg::OnClickedEf7ControlRingLightPickedRing() +{ + SelectRingLightExclusive(PICKED_RING_LAMP); + bInvalidateScreen = true; + ModifyLightMode(LIGHT_MODE::PICKED_RING_LAMP); +} + +void CUtilityForSo7LightDlg::OnClickedEf7ControlRingLightPickedSingle() +{ + SelectRingLightExclusive(PICKED_SINGLE_LAMP); + bInvalidateScreen = true; + ModifyLightMode(LIGHT_MODE::PICKED_SINGLE_LAMP); +} + +void CUtilityForSo7LightDlg::OnLButtonDown(UINT nFlags, CPoint point) +{ + bInvalidateScreen = true; + // TODO: Add your message handler code here and/or call default + if(nFlags == (MK_CONTROL|MK_LBUTTON)) + { + MouseMoveSelectBeginName = GetLightName(point); + lightGroup[MouseMoveSelectBeginName].bHighlight = !lightGroup[MouseMoveSelectBeginName].bHighlight; + MarkGroupByName(MouseMoveSelectBeginName,&bInvalidateScreen); + } + else + { + CancelSelectAll(); + MouseMoveSelectBeginName = GetLightName(point); + lightGroup[MouseMoveSelectBeginName].bHighlight =true; + if(!MarkGroupByName(MouseMoveSelectBeginName, &bInvalidateScreen)) + { + SetControlsIllumination(lightGroup[MouseMoveSelectBeginName].illumination); + SetShortcutTitle(MouseMoveSelectBeginName); + CDialogEx::OnLButtonDown(nFlags, point); + return; + } + } + SetControlsIllumination(lightGroup[MouseMoveSelectBeginName].illumination); + SetShortcutTitle(MouseMoveSelectBeginName); + + m_nLastSelectFan = MouseMoveSelectBeginName % m_iLightFanTolNum; + if(m_nLastSelectFan == 0) + m_nLastSelectFan = m_iLightFanTolNum; + + //UpdateLightStateToMachine(); + CDialogEx::OnLButtonDown(nFlags, point); +} + +void CUtilityForSo7LightDlg::OnMouseMove(UINT nFlags, CPoint point) +{ + // TODO: Add your message handler code here and/or call default + if(GetCursor()!=AfxGetApp()->LoadStandardCursor(IDC_ARROW)) + SetCursor( AfxGetApp()->LoadStandardCursor(IDC_ARROW)); + + int mousePos=GetLightName(point); + if(nFlags == MK_LBUTTON && mousePos!= OUT_FRAME && MouseMoveSelectBeginName!= OUT_FRAME) + { + lightGroup[mousePos].bHighlight=true; + MarkGroupByName(mousePos,&bInvalidateScreen); + //UpdateLightStateToMachine(); + + } + + SetFocus(); + CDialogEx::OnMouseMove(nFlags, point); +} + +void CUtilityForSo7LightDlg::OnContextMenu(CWnd*, CPoint /*point*/) +{ + // TODO: Add your message handler code here +} + +void CUtilityForSo7LightDlg::SelectRingLightExclusive(MODE_PICKED_LAMP lamp) +{ + for(int i=0;i<=bottomLightID;i++) + { + lightGroup[i].bHighlight = false; + } + //result = ((V1^3+V2^3+V3^3+...+VN^3)/N)^(1/3) + //V1 is the illumination of the light one + // the sum of light is N + lightGroup[bottomLightID].bHighlight = false; + double sumOfCube=0; + int sum = 0; + double value = 0.0; + for(int i = 1; i < bottomLightID; i++) + { + value = lightGroup[i].illumination; + if(value < 0.0001) + continue; + sumOfCube += value; + sum++; + } + + if(sumOfCube < 0.0001) + { + sumOfCube = lightGroup[0].illumination; + sum = 1; + } + if(sumOfCube < 0.0001) + { + sumOfCube = lightGroup[bottomLightID].illumination; + sum = 1; + } + + m_SwitchPickLamp=lamp; + double dstIllumination = sumOfCube/sum;//pow(sumOfCube/(sum),1/3.0); + + COLORREF dstColor = GetColor(dstIllumination); + /*点击会使灯光所有扇区取均值*/ + //for(int i=1;i-0.5); + if(dstIllumination>100.0) + dstIllumination = 100; + if(dstIllumination<0) + dstIllumination = 0; + SetControlsIllumination(dstIllumination); + UpdateLightStateToMachine(); +} + +void CUtilityForSo7LightDlg::CancelSelectAll(void) +{ + for(int i=0;i<=bottomLightID;i++) + { + lightGroup[i].bHighlight = false; + } +} + +void CUtilityForSo7LightDlg::SetToSameIllumination() +{ + int brightCount[6]; + double sumOfCube[6]; + for(int i=0;i<6;i++) + { + brightCount[i]=0; + sumOfCube[i]=0; + } + for(int i=1;i0 && sumOfCube[i]>0) + resultValue[i] = pow(sumOfCube[i]/brightCount[i],1/3.0); + else + resultValue[i]=0; + color[i] = GetColor(resultValue[i]); + } + + + for(int i=1;i0) + { + lightGroup[i].illumination = resultValue[(i-1)/8]; + lightGroup[i].color = color[(i-1)/8]; + } + } +} + +void CUtilityForSo7LightDlg::MarkRelatedRingWhenRing( int clickedLightName) +{ + bInvalidateScreen = true; + if(clickedLightName == 0 || clickedLightName == bottomLightID) + return; + int row = (clickedLightName-1)/8; + m_iSelctRingLightNum = row; + CString strEdit; + strEdit.Format(_T("%d"), m_iSelctRingLightNum + 1); + m_edWhichRing.SetWindowTextW(strEdit); + for(int i=row*8+1; i= Hit_Ring)) + { + if (m_iSelectLightType == SELECT_LIGHT_ROAD_FOUR) + { + iEnd = bottomLightID + 1; + } + else + { + if ((clickedLightName >= Hit_Ring) && (clickedLightName < ROAD_RANGE_VALUE)) + { + iEnd = ROAD_RANGE_VALUE; + } + else if ((clickedLightName >= ROAD_RANGE_VALUE) && (clickedLightName < ROAD_RANGE_VALUE * 2)) + { + iBegin = ROAD_RANGE_VALUE + 1; + iEnd = ROAD_RANGE_VALUE * 2; + } + else if ((clickedLightName >= ROAD_RANGE_VALUE * 2) && (clickedLightName < ROAD_RANGE_VALUE * 3)) + { + iBegin = ROAD_RANGE_VALUE * 2 + 1; + iEnd = ROAD_RANGE_VALUE * 3; + } + else if ((clickedLightName >= ROAD_RANGE_VALUE * 3) && (clickedLightName < ROAD_RANGE_VALUE * 4)) + { + iBegin = ROAD_RANGE_VALUE * 3 + 1; + iEnd = ROAD_RANGE_VALUE * 4; + } + else + { + iBegin = ROAD_RANGE_VALUE * 5 + 1; + iEnd = bottomLightID + 1; + } + } + } + for(int i = iBegin; i < iEnd; i++) + { + lightGroup[i].bHighlight = lightGroup[clickedLightName].bHighlight; + } +} + +void CUtilityForSo7LightDlg::MarkRelatedRingWhenFan( int clickedLightName) +{ + bInvalidateScreen = true; + if(clickedLightName == 0 || clickedLightName == bottomLightID) + return; + int collumn = (clickedLightName) % m_iLightFanTolNum; + for(int i = collumn; i < bottomLightID; i = i + m_iLightFanTolNum) + { + if(i>0) + lightGroup[i].bHighlight = lightGroup[clickedLightName].bHighlight; + } +} + +bool CUtilityForSo7LightDlg::MarkGroupByName(int clickedLightName,bool *btempInvalidate) +{ + if(clickedLightName != OUT_FRAME) + { + switch (m_SwitchPickLamp) + { + case PICKED_SINGLE_LAMP: + MarkRelatedRingWhenSingle(clickedLightName); + break; + case PICKED_RING_LAMP: + MarkRelatedRingWhenRing(clickedLightName); + break; + case PICKED_FAN_LAMP: + MarkRelatedRingWhenFan(clickedLightName); + break; + case PICKED_PIE_LAMP: + MarkRelatedRingWhenPie(clickedLightName); + default: + break; + } + } + if(clickedLightName == OUT_FRAME) + { + return false; + } + + if(*btempInvalidate == true) + return true; + for(int i = 0; i <= bottomLightID; i++) + { + if(bStateOfGroupSelect[i] != lightGroup[i].bHighlight) + { + *btempInvalidate = true; + bStateOfGroupSelect[i] = lightGroup[i].bHighlight; + } + } + return true; +} + +void CUtilityForSo7LightDlg::SetControlsIllumination(double illumination/*= 100*/,bool bUpdateToScrollBar/*=true*/) +{ + UINT dstlight = (m_iSelectLightType == SELECT_LIGHT_SIX_RING) ? UINT(illumination*10 + 0.5) : UINT(illumination + 0.5); + UINT iLightMax = (m_iSelectLightType == SELECT_LIGHT_SIX_RING) ? 1000 : 100; + if(dstlight > iLightMax) + dstlight = iLightMax; + if(dstlight < 0) + dstlight = 0; + + CString str; + UINT iStep = (m_iSelectLightType == SELECT_LIGHT_SIX_RING) ? 10 : 1; + str.Format(_T("%d.%d%%"), dstlight / iStep, dstlight % iStep); + m_TextIllumination.SetWindowText(str); + + if(bUpdateToScrollBar) + m_vScrollLight.SetScrollPos(iLightMax - dstlight); +} + +BOOL CUtilityForSo7LightDlg::OnInitDialog() +{ + CDialogEx::OnInitDialog(); + m_Thread_Mutex = CreateMutex(NULL, FALSE, NULL); + _Cabli_State_Handle = CreateEvent(NULL, FALSE, FALSE, L""); + _cab_WatchThreadState = THREAD_STATE_RUNNING; + _smc_CabThreadHandle = CreateThread((LPSECURITY_ATTRIBUTES)NULL, 0, (LPTHREAD_START_ROUTINE)LightCablication, this, 0, NULL); + + _smc_CabThreadHandle = CreateThread((LPSECURITY_ATTRIBUTES)NULL, 0, (LPTHREAD_START_ROUTINE)GetLuxValue,this, 0, NULL); + + // TODO: Add extra initialization here + this->SetWindowTextW(_T("灯光校验")); + m_btExit.SetWindowTextW(_T("退出")); + m_btOpen.SetWindowTextW(_T("打开")); + m_btSave.SetWindowTextW(_T("保存")); + m_btUpLoad.SetWindowTextW(_T("上传")); + m_btDownLoad.SetWindowTextW(_T("下载")); + m_btReset.SetWindowTextW(_T("重置")); + m_btDelete.SetWindowText(_T("清空灯光值")); + m_btCalibration.SetWindowTextW(_T("整体校验")); + m_btInitValue.SetWindowTextW(_T("单环校验")); + m_stTempText.SetWindowTextW(_T("当前亮度计值")); + m_stLightText.SetWindowTextW(_T("当前灯光值")); + m_stIllumText.SetWindowTextW(_T("当前温度值")); + m_btCheckRing.SetWindowTextW(_T("第几环校验")); + m_stValueGap.SetWindowTextW(_T("取值间隙")); + m_stStayTime.SetWindowTextW(_T("停留时间")); + m_stCalibStep.SetWindowTextW(_T("校验步长")); + m_stLightType.SetWindowTextW(_T("灯光类型")); + GetDlgItem(IDC_EDIT_MSG)->EnableWindow(FALSE); + m_edIllumValue.EnableWindow(FALSE); + m_edTempValue.EnableWindow(FALSE); + m_edLightValue.EnableWindow(FALSE); + + m_comLightType.AddString(_T("六环八区灯")); + m_comLightType.AddString(_T("四路光源板")); + m_comLightType.AddString(_T("八路光源板")); + m_comLightType.SetCurSel(m_iSelectLightType); + m_btCheckRing.SetCheck(m_bCheckRing); + ShowWhichLightIcon(); + + SetTimer(ID_REFLESH_REDRAW,50,NULL); + bTiggerSendMessage = false; + SetTimer(ID_SEND_MESSAGE, 100, NULL); + //SetTimer(ID_GET_REAL_LUX, 30, NULL); + InitListContrl(); + UpdateData(TRUE); + return TRUE; // return TRUE unless you set the focus to a control + // EXCEPTION: OCX Property Pages should return FALSE +} + +void CUtilityForSo7LightDlg::InitListContrl() +{ + m_listValue.DeleteAllItems(); + int iColNum = m_listValue.GetHeaderCtrl()->GetItemCount(); + for (int i = 0; i < iColNum; i++) + { + m_listValue.DeleteColumn(0); + } + if (!m_listValue) + { + TRACE0("Failed to create list value\n"); + } + int iListColNum = 6; + double dScale = 1.0; + GetListColNumAndColWidthScale(iListColNum, dScale); + CRect crectX; + m_listValue.GetClientRect(&crectX); + m_listValue.SetExtendedStyle(m_listValue.GetExtendedStyle() | LVS_EX_FULLROWSELECT | LVS_EX_GRIDLINES); + m_listValue.InsertColumn(0, _T("百分比"), LVCFMT_CENTER, static_cast(crectX.Width()*0.06*dScale)); + + for (int ii = 0; ii < iListColNum; ii++) + { + CString strTemp; + strTemp.Format(_T("第%d环亮度计值"), ii + 1); + m_listValue.InsertColumn(ii*2 + 1, strTemp, LVCFMT_CENTER, static_cast(crectX.Width()*0.085*dScale)); + strTemp.Format(_T("第%d环灯"), ii + 1); + m_listValue.InsertColumn(ii*2 + 2, strTemp, LVCFMT_CENTER, static_cast(crectX.Width()*0.07*dScale)); + } + ReadIni(); + CString str; + CString strValue; + for (int ii = 0; ii < COLUMN_NUMBER; ii++) + { + str.Format(_T("%d%%"), ii); + m_listValue.InsertItem(ii, str); + } + for (int i = 0; i < iListColNum; i++) + { + for (int j = 0; j < COLUMN_NUMBER; j++) + { + strValue.Format(_T("%.1f"), m_LightIllum[i][j]); + m_listValue.SetItemText(j, i * 2 + 1, strValue); + strValue.Format(_T("%d"), m_LightValue[i][j]); + m_listValue.SetItemText(j, i * 2 + 2, strValue); + } + } +} + +void CUtilityForSo7LightDlg::GetListColNumAndColWidthScale(int& iListColNum, double& dScale) +{ + switch (m_iSelectLightType) + { + case SELECT_LIGHT_SIX_RING: + { + iListColNum = 6; + m_iLightRingTolNum = 6; + break; + } + case SELECT_LIGHT_ROAD_FOUR: + { + if (m_SwitchPickLamp != PICKED_PIE_LAMP) + { + m_SwitchPickLamp = PICKED_PIE_LAMP; + } + iListColNum = 4; + m_iLightRingTolNum = 4; + break; + } + case SELECT_LIGHT_ROAD_EIGHT: + { + if (m_SwitchPickLamp != PICKED_PIE_LAMP) + { + m_SwitchPickLamp = PICKED_PIE_LAMP; + } + iListColNum = 8; + m_iLightRingTolNum = 8; + break; + } + default: + break; + } + CRect crectX; + m_listValue.GetClientRect(&crectX); + dScale = (1 - 0.06) / ((0.084 + 0.072) * iListColNum); +} + +void CUtilityForSo7LightDlg::ShowWhichLightIcon() +{ + switch (m_iSelectLightType) + { + case SELECT_LIGHT_SIX_RING: + { + m_iLightRingTolNum = 6; + m_iLightFanTolNum = 8; + SelectSixRingEightSectorLight(); + m_btCheckRing.SetWindowTextW(_T("第几环校验")); + break; + } + case SELECT_LIGHT_ROAD_FOUR: + { + m_iLightRingTolNum = 4; + m_iLightFanTolNum = 4; + SelectFourRoadLight(); + m_btCheckRing.SetWindowTextW(_T("第几路校验")); + break; + } + case SELECT_LIGHT_ROAD_EIGHT: + { + m_iLightRingTolNum = 8; + m_iLightFanTolNum = 8; + SelectEightRoadLight(); + m_btCheckRing.SetWindowTextW(_T("第几路校验")); + break; + } + default: + break; + } + CString strTemp; + UINT iRing = (m_iGetWhichRingForInitValue + 1 > m_iLightRingTolNum) ? m_iLightRingTolNum - 2 : m_iGetWhichRingForInitValue + 1; + strTemp.Format(_T("%d"), iRing); + m_edWhichRing.SetWindowTextW(strTemp); + strTemp.Format(_T("%d"), m_iCompareGap); + m_edValueGap.SetWindowTextW(strTemp); + strTemp.Format(_T("%d"), m_iSleepTime); + m_edStayTime.SetWindowTextW(strTemp); + strTemp.Format(_T("%.1f"), m_dCabStep); + m_edCalibStep.SetWindowTextW(strTemp); +} + +void CUtilityForSo7LightDlg::SelectSixRingEightSectorLight() +{ + HBITMAP hBmpFan = ::LoadBitmap(AfxGetInstanceHandle(), MAKEINTRESOURCE(IDB_EF7_CONTROL_RING_LIGHT_PICKED_FAN)); + m_RingLightButtonFan.SetBitmap(hBmpFan); + HBITMAP hBmpPie = ::LoadBitmap(AfxGetInstanceHandle(), MAKEINTRESOURCE(IDB_EF7_CONTROL_RING_LIGHT_PICKED_PIE)); + m_RingLightButtonPie.SetBitmap(hBmpPie); + HBITMAP hBmpRing = ::LoadBitmap(AfxGetInstanceHandle(), MAKEINTRESOURCE(IDB_EF7_CONTROL_RING_LIGHT_PICKED_RING)); + m_RingLightButtonRing.SetBitmap(hBmpRing); + HBITMAP hBmpSingle = ::LoadBitmap(AfxGetInstanceHandle(), MAKEINTRESOURCE(IDB_EF7_CONTROL_RING_LIGHT_PICKED_SINGLE)); + m_RingLightButtonSingle.SetBitmap(hBmpSingle); + + m_RingLightButtonPie.SetWindowPos(this, 140, 280, 36, 36, SWP_NOACTIVATE | SWP_NOZORDER); + m_RingLightButtonRing.SetWindowPos(this, 180, 280, 36, 36, SWP_NOACTIVATE | SWP_NOZORDER); + m_RingLightButtonFan.SetWindowPos(this, 220, 280, 36, 36, SWP_NOACTIVATE | SWP_NOZORDER); + m_RingLightButtonSingle.SetWindowPos(this, 260, 280, 36, 36, SWP_NOACTIVATE | SWP_NOZORDER); + + m_TextLightName.SetWindowPos(this, 70, 280, 60, 36 / 2, SWP_NOACTIVATE | SWP_NOZORDER); + m_TextIllumination.SetWindowPos(this, 70, 280 + 36 / 2, 60, 36 / 2, SWP_NOACTIVATE | SWP_NOZORDER); + m_LightOff.SetWindowPos(this, 0, 280, 36, 36, SWP_NOACTIVATE | SWP_NOZORDER); + m_vScrollLight.SetWindowPos(this, 0, 0, 20, 280, SWP_NOACTIVATE | SWP_NOZORDER); + + MouseMoveSelectBeginName = OUT_FRAME; + + m_SwitchPickLamp = PICKED_RING_LAMP; + m_vScrollLight.SetScrollRange(0, 1000); + + for (UINT i = 0; i < RING_ARRAY_SIZE; i++) + { + m_MsgContent.light.vectorLight[i] = 0; + m_light.vectorLight[i] = 0; + } + + m_MsgContent.light.bottomLight = 0; + m_MsgContent.light.coaxialLight = 0; + m_MsgContent.light.topLight = 0; + m_light.bottomLight = 0; + m_light.coaxialLight = 0; + m_light.topLight = 0; + for (int i = 0; i < CAPACITY_SIZE; i++) + { + switch (i) + { + case Hit_Coaxial: + lightGroup[i].illumination = m_light.coaxialLight; + lightGroup[i].bHighlight = false; + lightGroup[i].color = GetColor(lightGroup[i].illumination); + break; + case Hit_Top: + lightGroup[i].illumination = m_light.topLight; + lightGroup[i].bHighlight = false; + lightGroup[i].color = GetColor(lightGroup[i].illumination); + break; + case 49: + lightGroup[i].illumination = m_light.bottomLight; + lightGroup[i].bHighlight = false; + lightGroup[i].color = GetColor(lightGroup[i].illumination); + break; + default: + lightGroup[i].illumination = m_light.vectorLight[i - 2]; + lightGroup[i].bHighlight = false; + lightGroup[i].color = GetColor(lightGroup[i].illumination); + break; + } + } + + int lightName = 30; + for (int i = 1; i <= RING_ARRAY_SIZE; i++) + { + lightGroup[i].bHighlight = true; + if (lightGroup[i].bHighlight == true) + { + lightGroup[i].illumination = lightGroup[lightName].illumination; + lightGroup[i].color = lightGroup[lightName].color; + } + } + SetControlsIllumination(lightGroup[lightName].illumination); + SetShortcutTitle(lightName); +} + +void CUtilityForSo7LightDlg::SelectFourRoadLight() +{ + m_RingLightButtonPie.ShowWindow(SW_HIDE); + m_RingLightButtonFan.ShowWindow(SW_HIDE); + m_RingLightButtonRing.ShowWindow(SW_HIDE); + m_RingLightButtonSingle.ShowWindow(SW_HIDE); + + m_TextLightName.SetWindowPos(this, 70, 280, 60, 36 / 2, SWP_NOACTIVATE | SWP_NOZORDER); + m_TextIllumination.SetWindowPos(this, 70, 280 + 36 / 2, 60, 36 / 2, SWP_NOACTIVATE | SWP_NOZORDER); + m_LightOff.SetWindowPos(this, 0, 280, 36, 36, SWP_NOACTIVATE | SWP_NOZORDER); + m_vScrollLight.SetWindowPos(this, 0, 0, 20, 280, SWP_NOACTIVATE | SWP_NOZORDER); + + MouseMoveSelectBeginName = OUT_FRAME; + + m_SwitchPickLamp = PICKED_PIE_LAMP; + m_vScrollLight.SetScrollRange(0, 100); + + for (int i = 0; i < RING_ARRAY_SIZE; i++) + { + m_MsgContent.light.vectorLight[i] = 0; + m_light.vectorLight[i] = 0; + } + + m_MsgContent.light.bottomLight = 0; + m_MsgContent.light.coaxialLight = 0; + m_MsgContent.light.topLight = 0; + m_light.bottomLight = 0; + m_light.coaxialLight = 0; + m_light.topLight = 0; + for (int i = 0; i < CAPACITY_SIZE; i++) + { + switch (i) + { + case Hit_Coaxial: + lightGroup[i].illumination = m_light.coaxialLight; + lightGroup[i].bHighlight = true; + lightGroup[i].color = GetColor(lightGroup[i].illumination); + break; + case Hit_Top: + lightGroup[i].illumination = m_light.topLight; + lightGroup[i].bHighlight = false; + lightGroup[i].color = GetColor(lightGroup[i].illumination); + break; + case Hit_Bottom: + lightGroup[i].illumination = m_light.bottomLight; + lightGroup[i].bHighlight = false; + lightGroup[i].color = GetColor(lightGroup[i].illumination); + break; + default: + lightGroup[i].illumination = m_light.vectorLight[i - 3]; + lightGroup[i].bHighlight = false; + lightGroup[i].color = GetColor(lightGroup[i].illumination); + break; + } + } + + SetControlsIllumination(lightGroup[0].illumination); + SetShortcutTitle(0); +} + +void CUtilityForSo7LightDlg::SelectEightRoadLight() +{ + m_RingLightButtonPie.ShowWindow(SW_HIDE); + m_RingLightButtonFan.ShowWindow(SW_HIDE); + m_RingLightButtonRing.ShowWindow(SW_HIDE); + m_RingLightButtonSingle.ShowWindow(SW_HIDE); + + m_TextLightName.SetWindowPos(this, 70, 280, 60, 36 / 2, SWP_NOACTIVATE | SWP_NOZORDER); + m_TextIllumination.SetWindowPos(this, 70, 280 + 36 / 2, 60, 36 / 2, SWP_NOACTIVATE | SWP_NOZORDER); + m_LightOff.SetWindowPos(this, 0, 280, 36, 36, SWP_NOACTIVATE | SWP_NOZORDER); + m_vScrollLight.SetWindowPos(this, 0, 0, 20, 280, SWP_NOACTIVATE | SWP_NOZORDER); + + MouseMoveSelectBeginName = OUT_FRAME; + + m_SwitchPickLamp = PICKED_PIE_LAMP; + m_vScrollLight.SetScrollRange(0, 100); + + for (int i = 0; i < RING_ARRAY_SIZE; i++) + { + m_MsgContent.light.vectorLight[i] = 0; + m_light.vectorLight[i] = 0; + } + + m_MsgContent.light.bottomLight = 0; + m_MsgContent.light.coaxialLight = 0; + m_MsgContent.light.topLight = 0; + m_light.bottomLight = 0; + m_light.coaxialLight = 0; + m_light.topLight = 0; + for (int i = 0; i < CAPACITY_SIZE; i++) + { + switch (i) + { + case Hit_Coaxial: + lightGroup[i].illumination = m_light.coaxialLight; + lightGroup[i].bHighlight = true; + lightGroup[i].color = GetColor(lightGroup[i].illumination); + break; + case Hit_Top: + lightGroup[i].illumination = m_light.topLight; + lightGroup[i].bHighlight = false; + lightGroup[i].color = GetColor(lightGroup[i].illumination); + break; + case Hit_Bottom: + lightGroup[i].illumination = m_light.bottomLight; + lightGroup[i].bHighlight = false; + lightGroup[i].color = GetColor(lightGroup[i].illumination); + break; + default: + lightGroup[i].illumination = m_light.vectorLight[i - 3]; + lightGroup[i].bHighlight = false; + lightGroup[i].color = GetColor(lightGroup[i].illumination); + break; + } + } + + SetControlsIllumination(lightGroup[0].illumination); + SetShortcutTitle(0); +} + +void CUtilityForSo7LightDlg::OnDrawListValueBkColor(NMHDR *pNmHdr, LRESULT *pResult) +{ + NMLVCUSTOMDRAW* pListCtrl = reinterpret_cast(pNmHdr); + + *pResult = CDRF_DODEFAULT; + + if (CDDS_PREPAINT == pListCtrl->nmcd.dwDrawStage) + { + *pResult = CDRF_NOTIFYITEMDRAW; + } + else if (CDDS_ITEMPREPAINT == pListCtrl->nmcd.dwDrawStage) + { + *pResult = CDRF_NOTIFYSUBITEMDRAW; + } + else if ((CDDS_ITEMPREPAINT | CDDS_SUBITEM) == pListCtrl->nmcd.dwDrawStage) + { + COLORREF clrNewBkColor; + int nItem = static_cast(pListCtrl->nmcd.dwItemSpec); + if (0 == nItem % 2) + { + clrNewBkColor = RGB(230, 230, 230); + } + else + { + clrNewBkColor = RGB(200, 200, 200); + } + pListCtrl->clrTextBk = clrNewBkColor; + + *pResult = CDRF_DODEFAULT; + } +} + +void CUtilityForSo7LightDlg::OnTimer(UINT_PTR nIDEvent) +{ + // TODO: Add your message handler code here and/or call default + switch (nIDEvent) + { + case ID_REFLESH_REDRAW: + { + if (!m_RingLightButtonPie.IsWindowVisible()) + { + if (m_iSelectLightType != SELECT_LIGHT_SIX_RING) + { + m_RingLightButtonPie.ShowWindow(SW_HIDE); + } + else + { + m_RingLightButtonPie.ShowWindow(SW_SHOW); + } + } + if (!m_RingLightButtonFan.IsWindowVisible()) + { + if (m_iSelectLightType != SELECT_LIGHT_SIX_RING) + { + m_RingLightButtonFan.ShowWindow(SW_HIDE); + } + else + { + m_RingLightButtonFan.ShowWindow(SW_SHOW); + } + } + if (!m_RingLightButtonRing.IsWindowVisible()) + { + if (m_iSelectLightType != SELECT_LIGHT_SIX_RING) + { + m_RingLightButtonRing.ShowWindow(SW_HIDE); + } + else + { + m_RingLightButtonRing.ShowWindow(SW_SHOW); + } + } + if (!m_RingLightButtonSingle.IsWindowVisible()) + { + if (m_iSelectLightType != SELECT_LIGHT_SIX_RING) + { + m_RingLightButtonSingle.ShowWindow(SW_HIDE); + } + else + { + m_RingLightButtonSingle.ShowWindow(SW_SHOW); + } + } + + if(bInvalidateScreen) + { + bInvalidateScreen = false; + InvalidateRect(NULL,FALSE); + break; + } + } + break; + + case ID_SEND_MESSAGE: + { + if (bTiggerSendMessage) + { + bTiggerSendMessage=false; + Light lightBuf; + //////////// + + double bottomScale = m_MsgContent.light.bottomLight; + lightBuf.bottomLight = min(255.0, bottomScale); + lightBuf.bottomLight = max(bottomScale, 1e-4); + + double topScale = m_MsgContent.light.topLight; + lightBuf.topLight = min(255.0, topScale); + lightBuf.topLight = max(lightBuf.topLight, 1e-4); + + double coaxialScale = m_MsgContent.light.coaxialLight; + lightBuf.coaxialLight = min(250.0, coaxialScale); + lightBuf.coaxialLight = max(coaxialScale, 1e-4); + + double vectorLightScale = 0.0; + for(int i = 0; i < RING_ARRAY_SIZE; i++) + { + vectorLightScale = m_MsgContent.light.vectorLight[i]; + lightBuf.vectorLight[i] = vectorLightScale; + } + //////////////// + + static Light lastLightVal={-1, -1, -1, -1}; + if ((!m_bCalibration) && (!m_bInitLuxValue)) + { + if (0 == memcmp(&lastLightVal, &lightBuf, sizeof(lastLightVal))) + break; + } + memcpy(&lastLightVal,&lightBuf,sizeof(m_MsgContent.light)); + + bool bWait = false; + if (SELECT_LIGHT_SIX_RING != m_iSelectLightType) + { + BYTE cSendDataTemp[20] = { 0XAA,0X00,0X01,0X00,0X01,0X00,0X01,0X00,0X01,0X00,0X01,0X00,0X01,0X00,0X01,0X00,0X01,0X00,0X01,0XBB }; + switch (m_iGetWhichRingForInitValue) + { + case Hit_Coaxial: + { + cSendData[2] = static_cast(lightBuf.coaxialLight * 0.01 * 255); + lightBuf.vectorLight[0] = 0; + lightBuf.vectorLight[1] = cSendData[2]; + g_So7Illum->ReadRoadLightValue(cSendDataTemp, m_iSelectLightType, m_iRoadBoardNum, m_iGetWhichRingForInitValue + 1); + g_So7Illum->WriteRoadLightValue(cSendDataTemp, bWait, m_iSelectLightType, m_iRoadBoardNum, m_iGetWhichRingForInitValue + 1, lightBuf.vectorLight); + break; + } + case Hit_Top: + { + cSendData[m_iGetWhichRingForInitValue * 2 + 2] = static_cast(lightBuf.topLight * 0.01 * 255); + lightBuf.vectorLight[2] = 0; + lightBuf.vectorLight[3] = cSendData[m_iGetWhichRingForInitValue * 2 + 2]; + g_So7Illum->ReadRoadLightValue(cSendDataTemp, m_iSelectLightType, m_iRoadBoardNum, m_iGetWhichRingForInitValue + 1); + g_So7Illum->WriteRoadLightValue(cSendDataTemp, bWait, m_iSelectLightType, m_iRoadBoardNum, m_iGetWhichRingForInitValue + 1, lightBuf.vectorLight); + break; + } + case Hit_Bottom: + { + cSendData[m_iGetWhichRingForInitValue * 2 + 2] = static_cast(lightBuf.bottomLight * 0.01 * 255); + lightBuf.vectorLight[4] = 0; + lightBuf.vectorLight[5] = cSendData[m_iGetWhichRingForInitValue * 2 + 2]; + g_So7Illum->ReadRoadLightValue(cSendDataTemp, m_iSelectLightType, m_iRoadBoardNum, m_iGetWhichRingForInitValue + 1); + g_So7Illum->WriteRoadLightValue(cSendDataTemp, bWait, m_iSelectLightType, m_iRoadBoardNum, m_iGetWhichRingForInitValue + 1, lightBuf.vectorLight); + break; + } + case Hit_Ring: + { + g_So7Illum->ReadRoadLightValue(cSendData, m_iSelectLightType, m_iRoadBoardNum, m_iGetWhichRingForInitValue + 1); + g_So7Illum->WriteRoadLightValue(cSendData, bWait, m_iSelectLightType, m_iRoadBoardNum, m_iGetWhichRingForInitValue + 1, lightBuf.vectorLight); + break; + } + default: + g_So7Illum->ReadRoadLightValue(cSendDataTemp, m_iSelectLightType, m_iRoadBoardNum, m_iGetWhichRingForInitValue + 1); + g_So7Illum->WriteRoadLightValue(cSendDataTemp, bWait, m_iSelectLightType, m_iRoadBoardNum, m_iGetWhichRingForInitValue + 1, lightBuf.vectorLight); + if (0 != memcmp(&cSendDataTemp, &cSendData, sizeof(cSendData))) + { + memcpy(cSendData, cSendDataTemp, sizeof(cSendData)); + } + break; + } + } + else + { + g_So7Illum->_Send_So7LightIII_Command(lightBuf.vectorLight, 0, 100, bWait, cSendData); + } + UpdateLightDisplay(cSendData); + + CString strMsg; + CString str; + for (int i = 0; i<20; i++) + { + str.Format(_T("%02X "), cSendData[i]); + strMsg += str; + } + GetDlgItem(IDC_EDIT_MSG)->SetWindowTextW(strMsg); + } + } + + case ID_GET_REAL_LUX: + { + OnShowLuxMeterValue(); + if (m_bCalibration || m_bInitLuxValue) + { + if (m_bUpdate) + { + Sleep(m_iSleepTime); + GetCalibAfterUpdateLightValue(); + m_bUpdate = false; + } + } + } + break; + default: + break; + } + + CDialogEx::OnTimer(nIDEvent); +} +void CUtilityForSo7LightDlg::UpdateLightDisplay(byte* data) +{ + Light lightBuf; + lightBuf.init(); + for(int i = 0; i < RING_ARRAY_SIZE; i++) + { + lightBuf.vectorLight[i] = 0; + } + int* iRingIlluminationObj = new int[m_iLightFanTolNum]; + memset(iRingIlluminationObj, 0, m_iLightFanTolNum * sizeof(int)); + //int iRingIlluminationObj[8] = { 0 }; + bool bSrcSwitch[50] = { false }; + bool bSwitch[50] = { false }; + switch (m_iSelectLightType) + { + case SELECT_LIGHT_SIX_RING: + { + for (UINT i = 0; i < m_iLightRingTolNum; i++) + { + int offsetByte = 18 - i; + for (UINT j = 0; j < m_iLightFanTolNum; j++) + { + if ((j == 0) && (cSendData[offsetByte] & (0x01 << 5))) + { + bSwitch[i*m_iLightFanTolNum + j] = true; + } + else if ((j == 1) && (cSendData[offsetByte] & (0x01 << 4))) + { + bSwitch[i*m_iLightFanTolNum + j] = true; + } + else if ((j == 2) && (cSendData[offsetByte] & (0x01 << 3))) + { + bSwitch[i*m_iLightFanTolNum + j] = true; + } + else if ((j == 3) && (cSendData[offsetByte] & (0x01 << 2))) + { + bSwitch[i*m_iLightFanTolNum + j] = true; + } + else if ((j == 4) && (cSendData[offsetByte] & (0x01 << 1))) + { + bSwitch[i*m_iLightFanTolNum + j] = true; + } + else if ((j == 5) && (cSendData[offsetByte] & (0x01 << 0))) + { + bSwitch[i*m_iLightFanTolNum + j] = true; + } + else if ((j == 6) && (cSendData[offsetByte] & (0x01 << 7))) + { + bSwitch[i*m_iLightFanTolNum + j] = true; + } + else if ((j == 7) && (cSendData[offsetByte] & (0x01 << 6))) + { + bSwitch[i*m_iLightFanTolNum + j] = true; + } + } + } + for (UINT i = 0; i < m_iLightRingTolNum; i++) + { + iRingIlluminationObj[i] = cSendData[2 * i + 1] * 256 + cSendData[2 * i + 2]; + memcpy(m_iRingIlluminationObj, iRingIlluminationObj, sizeof(iRingIlluminationObj)); + double iTemp = 0; + iTemp = (iRingIlluminationObj[i] / 4999.0)*(100); + double dLuxTemp = 0.0; + dLuxTemp = pGetDigitalLuxMeter->m_dLuxVal; + CString strTemp; + if ((!m_bCalibration) && (!m_bInitLuxValue) && (i == m_iSelctRingLightNum)) + { + strTemp.Format(_T("%d"), m_iRingIlluminationObj[i]); + m_edLightValue.SetWindowTextW(strTemp); + } + } + + for (UINT i = 0; i < m_iLightRingTolNum; i++) + { + for (UINT j = 0; j < m_iLightFanTolNum; j++) + { + bSrcSwitch[i*m_iLightFanTolNum + g_vectorLightRemapForEightSector[j]] = bSwitch[i*m_iLightFanTolNum + j]; + } + } + + int minIllumination = 0; + int maxLillumination = 100; + for (int i = 0; i < RING_ARRAY_SIZE; i++) + { + if (bSrcSwitch[i]) + { + lightBuf.vectorLight[i] = ((iRingIlluminationObj[i / m_iLightFanTolNum] - 1) / 4999.0) * + (maxLillumination - minIllumination) + minIllumination; + } + else + { + lightBuf.vectorLight[i] = 0; + } + } + break; + } + case SELECT_LIGHT_ROAD_FOUR: + case SELECT_LIGHT_ROAD_EIGHT: + { + for (int i = 0; i <= CAPACITY_SIZE; i++) + { + if ((i == 0) && (lightGroup[i].bHighlight))//coaxial light + { + bSwitch[0] = true; + break; + } + else if ((i == 1) && (lightGroup[i].bHighlight))//top light + { + bSwitch[1] = true; + break; + } + else if ((i == 2) && (lightGroup[i].bHighlight)) // bottom light + { + bSwitch[2] = true; + break; + } + else if ((i >= 3 && i < CAPACITY_SIZE) && (lightGroup[i].bHighlight)) + { + bSwitch[i] = true; + } + } + iRingIlluminationObj[m_iGetWhichRingForInitValue] = cSendData[2 * m_iGetWhichRingForInitValue + 1] * 256 + cSendData[2 * m_iGetWhichRingForInitValue + 2]; + memcpy(m_iRingIlluminationObjForRoad, iRingIlluminationObj, m_iLightFanTolNum*sizeof(int)); + double iTemp = 0; + iTemp = (iRingIlluminationObj[m_iGetWhichRingForInitValue] / 255.0)*(100); + double dLuxTemp = 0.0; + dLuxTemp = pGetDigitalLuxMeter->m_dLuxVal; + CString strTemp; + if ((!m_bCalibration) && (!m_bInitLuxValue)) + { + strTemp.Format(_T("%d"), m_iRingIlluminationObjForRoad[m_iGetWhichRingForInitValue]); + m_edLightValue.SetWindowTextW(strTemp); + } + + int minIllumination = 0; + int maxLillumination = 100; + for (int i = 0; i < CAPACITY_SIZE; i++) + { + if ((i == 0) && (bSwitch[i]))//coaxial light + { + lightBuf.coaxialLight = ((iRingIlluminationObj[i]) / 255.0) * (maxLillumination - minIllumination) + minIllumination; + break; + } + else if ((i == 1) && (bSwitch[i]))//top light + { + lightBuf.topLight = ((iRingIlluminationObj[i]) / 255.0) * (maxLillumination - minIllumination) + minIllumination; + break; + } + else if ((i == 2) && (bSwitch[i])) // bottom light + { + lightBuf.bottomLight = ((iRingIlluminationObj[i]) / 255.0) * (maxLillumination - minIllumination) + minIllumination; + break; + } + else if ((i >= 3 && i < CAPACITY_SIZE) && (lightGroup[i].bHighlight)) + { + if (bSwitch[i]) + { + lightBuf.vectorLight[i-3] = ((iRingIlluminationObj[m_iGetWhichRingForInitValue] - 1) / 255.0) * (maxLillumination - minIllumination) + minIllumination; + } + else + { + lightBuf.vectorLight[i-3] = 0; + } + } + } + break; + } + default: + break; + } + delete[] iRingIlluminationObj; + //static Light lastLightVal={-1,-1,-1,-1}; + //if(0==memcmp(&lastLightVal,&lightBuf,sizeof(lastLightVal))) + // return; + //memcpy(&lastLightVal,&lightBuf,sizeof(m_MsgContent.light)); + MSG_LightContent msg; + msg.light = lightBuf; + msg.lightHit = null; + SetLampeByOutSide(msg, 0.0); +} + +void CUtilityForSo7LightDlg::GetCalibAfterUpdateLightValue() +{ + if (SELECT_LIGHT_SIX_RING != m_iSelectLightType) + { + m_iRingIlluminationObj[m_iGetWhichRingForInitValue] = cSendData[2 * m_iGetWhichRingForInitValue + 1] * 256 + cSendData[2 * m_iGetWhichRingForInitValue + 2]; + double dTemp = 0.0; + dTemp = (m_iRingIlluminationObj[m_iGetWhichRingForInitValue] / 255.0)*(100); + int iTemp = static_cast(dTemp); + if (m_iRingIlluminationObj[m_iGetWhichRingForInitValue] > static_cast(iTemp / 255)) + { + iTemp += 1; + dTemp = static_cast(iTemp); + } + double dLuxTemp = 0.0; + dLuxTemp = pGetDigitalLuxMeter->m_dLuxVal; + CString strTemp; + if (m_bCalibration) + { + strTemp.Format(_T("%d"), m_iRingIlluminationObj[m_iGetWhichRingForInitValue]); + m_edLightValue.SetWindowTextW(strTemp); + if (m_bInitLuxValue) + { + GetInitLuxMeterValue(dTemp, m_iGetWhichRingForInitValue, dLuxTemp); + } + else + { + GetCalibrationValue(dTemp, m_iGetWhichRingForInitValue, dLuxTemp); + } + } + } + else + { + for (UINT i = 0; i < m_iLightRingTolNum; i++) + { + m_iRingIlluminationObj[i] = cSendData[2 * i + 1] * 256 + cSendData[2 * i + 2]; + double iTemp = 0; + iTemp = (m_iRingIlluminationObj[i] / 4999.0)*(100); + double dLuxTemp = 0.0; + dLuxTemp = pGetDigitalLuxMeter->m_dLuxVal; + CString strTemp; + if ((m_bGetSingleRingInitValue) && (m_iSelectLightType == SELECT_LIGHT_SIX_RING)) + { + if (m_SwitchPickLamp == PICKED_RING_LAMP && m_iSelctRingLightNum == i && m_bCalibration) + { + strTemp.Format(_T("%d"), m_iRingIlluminationObj[i]); + m_edLightValue.SetWindowTextW(strTemp); + if (m_bInitLuxValue) + { + GetInitLuxMeterValue(iTemp, m_iSelctRingLightNum, dLuxTemp); + } + else + { + GetCalibrationValue(iTemp, m_iSelctRingLightNum, dLuxTemp); + } + } + } + else + { + if (m_bCalibration) + { + strTemp.Format(_T("%d"), m_iRingIlluminationObj[i]); + m_edLightValue.SetWindowTextW(strTemp); + if (m_bInitLuxValue) + { + GetInitLuxMeterValue(iTemp, m_iSelctRingLightNum, dLuxTemp); + } + else + { + GetCalibrationValue(iTemp, m_iSelctRingLightNum, dLuxTemp); + } + } + } + } + } +} + +void CUtilityForSo7LightDlg::GetCalibrationValue(const double percenValue, const int iRing, const double iCurValue) +{ + CString strTemp; + short iTempValue = 0; + bool bOk = false; + int iNum = 0; + if (percenValue < m_dCabStep) + { + if (iCurValue > m_LightIllum[iRing][m_iCalibCurrent]) + { + m_iCalibCurrent = 0; + return; + } + } + Keep_Calib_Value temp_calib; + if ((iCurValue - m_LightIllum[iRing][m_iCalibCurrent]) < 0.0001) + { + if (m_vGetTempValue.size() != 0) + { + m_vGetTempValue.clear(); + } + temp_calib.current_LuxLight = iCurValue; + temp_calib.current_LightValue = cSendData[2 * iRing + 1] * 256 + cSendData[2 * iRing + 2]; + m_vGetTempValue.push_back(temp_calib); + } + else + { + temp_calib.current_LuxLight = iCurValue; + temp_calib.current_LightValue = cSendData[2 * iRing + 1] * 256 + cSendData[2 * iRing + 2]; + m_vGetTempValue.push_back(temp_calib); + for (int i = m_iCalibCurrent; i < COLUMN_NUMBER; i++) + { + if ((iCurValue - m_LightIllum[iRing][i]) > 0.0001) + { + iNum++; + } + } + bOk = true; + } + if (bOk) + { + int iIndex = m_vGetTempValue.size() - 1; + double iGap = 0; + double dLuxValueGap = 0.0; + double dLightValueGap = 0.0; + double dRealLuxGap = 0.0; + if (iIndex >= 1) + { + dLuxValueGap = m_vGetTempValue[iIndex].current_LuxLight - m_vGetTempValue[iIndex - 1].current_LuxLight; + dLightValueGap = m_vGetTempValue[iIndex].current_LightValue - m_vGetTempValue[iIndex - 1].current_LightValue; + dRealLuxGap = m_LightIllum[iRing][m_iCalibCurrent] - m_vGetTempValue[iIndex - 1].current_LuxLight; + if (iNum == 1) + { + iGap = (dRealLuxGap * dLightValueGap / dLuxValueGap); + } + else if (iNum > 1) + { + if (m_iCalibCurrent > 0) + { + dLightValueGap = m_vGetTempValue[iIndex].current_LightValue - m_LightValue[iRing][m_iCalibCurrent - 1]; + } + else + { + dLightValueGap = m_vGetTempValue[iIndex].current_LightValue - m_LightValue[iRing][m_iCalibCurrent]; + } + iGap = (dLightValueGap) / iNum; + } + } + else if ((0 == iIndex) && (0 == m_iCalibCurrent)) + { + dLuxValueGap = m_vGetTempValue[iIndex].current_LuxLight - 0.0; + dLightValueGap = m_vGetTempValue[iIndex].current_LightValue - 1; + dRealLuxGap = m_LightIllum[iRing][m_iCalibCurrent] - 0.0; + if (iNum == 1) + { + iGap = (dRealLuxGap * dLightValueGap / dLuxValueGap); + } + else if (iNum > 1) + { + if (m_iCalibCurrent > 0) + { + dLightValueGap = m_vGetTempValue[iIndex].current_LightValue - 1; + } + else + { + dLightValueGap = m_vGetTempValue[iIndex].current_LightValue - 1; + } + iGap = (dLightValueGap) / iNum; + } + } + for (int i = 0; i < iNum; i++) + { + if (iIndex >= 1 && (iNum == 1)) + { + m_LightValue[iRing][m_iCalibCurrent] = static_cast(m_vGetTempValue[iIndex - 1].current_LightValue + iGap); + } + else if (iIndex >= 1 && (iNum > 1)) + { + if (m_iCalibCurrent > 0) + { + m_LightValue[iRing][m_iCalibCurrent] = static_cast(m_LightValue[iRing][m_iCalibCurrent - 1] + iGap); + } + else + { + m_LightValue[iRing][m_iCalibCurrent] = static_cast(m_LightValue[iRing][m_iCalibCurrent] + iGap); + } + } + else if ((0 == iIndex) && (0 == m_iCalibCurrent)) + { + if (1 == iNum) + { + m_LightValue[iRing][m_iCalibCurrent] = static_cast(m_vGetTempValue[iIndex].current_LightValue); + } + else + { + m_LightValue[iRing][m_iCalibCurrent] = static_cast((m_vGetTempValue[iIndex].current_LightValue) / iNum + iGap); + } + } + if (m_LightValue[iRing][m_iCalibCurrent] > 5000) + { + m_LightValue[iRing][m_iCalibCurrent] = 5000; + } + strTemp.Format(_T("%d"), m_LightValue[iRing][m_iCalibCurrent]); + int iCol = -1; + iCol = (iRing + 1) * 2; + m_listValue.SetItemText(m_iCalibCurrent, iCol, strTemp); + m_iCalibCurrent++; + } + } +} + +void CUtilityForSo7LightDlg::GetInitLuxMeterValue(const double percenValue, const int iRing, const double iCurLuxValue) +{ + CString strTemp; + if (percenValue < m_dCabStep) + { + if (iCurLuxValue > m_LightIllum[iRing][m_iCalibCurrent]) + { + m_iCalibCurrent = 0; + return; + } + } + if (m_bCheckRing&&m_bGetSingleRingInitValue) + { + if (iRing != m_iGetWhichRingForInitValue) + { + return; + } + short iTempValue = 0; + bool bOk = false; + int iNum = 0; + Keep_Calib_Value temp_calib; + if ((iCurLuxValue - m_LightIllum[iRing][m_iCalibCurrent]) < 0.0001) + { + if (m_vGetTempValue.size() != 0) + { + m_vGetTempValue.clear(); + } + temp_calib.current_LuxLight = iCurLuxValue; + temp_calib.current_LightValue = cSendData[2 * iRing + 1] * 256 + cSendData[2 * iRing + 2]; + m_vGetTempValue.push_back(temp_calib); + } + else + { + temp_calib.current_LuxLight = iCurLuxValue; + temp_calib.current_LightValue = cSendData[2 * iRing + 1] * 256 + cSendData[2 * iRing + 2]; + m_vGetTempValue.push_back(temp_calib); + for (int i = m_iCalibCurrent; i < COLUMN_NUMBER; i++) + { + if ((iCurLuxValue - m_LightIllum[iRing][i]) > 0.0001) + { + iNum++; + } + } + bOk = true; + } + if (bOk) + { + int iIndex = m_vGetTempValue.size() - 1; + double iGap = 0; + double dLuxValueGap = 0.0; + double dLightValueGap = 0.0; + double dRealLuxGap = 0.0; + if (iIndex >= 1) + { + dLuxValueGap = m_vGetTempValue[iIndex].current_LuxLight - m_vGetTempValue[iIndex - 1].current_LuxLight; + dLightValueGap = m_vGetTempValue[iIndex].current_LightValue - m_vGetTempValue[iIndex - 1].current_LightValue; + dRealLuxGap = m_LightIllum[iRing][m_iCalibCurrent] - m_vGetTempValue[iIndex - 1].current_LuxLight; + if (iNum == 1) + { + iGap = (dRealLuxGap * dLightValueGap / dLuxValueGap); + } + else if (iNum > 1) + { + if (m_iCalibCurrent > 0) + { + dLightValueGap = m_vGetTempValue[iIndex].current_LightValue - m_LightValue[iRing][m_iCalibCurrent-1]; + } + else + { + dLightValueGap = m_vGetTempValue[iIndex].current_LightValue - m_LightValue[iRing][m_iCalibCurrent]; + } + iGap = (dLightValueGap) / iNum; + } + } + else if ((0 == iIndex) && (0 == m_iCalibCurrent)) + { + dLuxValueGap = m_vGetTempValue[iIndex].current_LuxLight - 0.0; + dLightValueGap = m_vGetTempValue[iIndex].current_LightValue - 1; + dRealLuxGap = m_LightIllum[iRing][m_iCalibCurrent] - 0.0; + if (iNum == 1) + { + iGap = (dRealLuxGap * dLightValueGap / dLuxValueGap); + } + else if (iNum > 1) + { + if (m_iCalibCurrent > 0) + { + dLightValueGap = m_vGetTempValue[iIndex].current_LightValue - 1; + } + else + { + dLightValueGap = m_vGetTempValue[iIndex].current_LightValue - 1; + } + iGap = (dLightValueGap) / iNum; + } + } + for (int i = 0; i < iNum; i++) + { + if (iIndex >= 1 && (iNum == 1)) + { + m_LightValue[iRing][m_iCalibCurrent] = static_cast(m_vGetTempValue[iIndex - 1].current_LightValue + iGap); + } + else if (iIndex >= 1 && (iNum > 1)) + { + if (m_iCalibCurrent > 0) + { + m_LightValue[iRing][m_iCalibCurrent] = static_cast(m_LightValue[iRing][m_iCalibCurrent - 1] + iGap); + } + else + { + m_LightValue[iRing][m_iCalibCurrent] = static_cast(m_LightValue[iRing][m_iCalibCurrent] + iGap); + } + } + else if ((0 == iIndex) && (0 == m_iCalibCurrent)) + { + if (1 == iNum) + { + m_LightValue[iRing][m_iCalibCurrent] = static_cast(m_vGetTempValue[iIndex].current_LightValue); + } + else + { + m_LightValue[iRing][m_iCalibCurrent] = static_cast((m_vGetTempValue[iIndex].current_LightValue) / iNum + iGap); + } + } + if (m_LightValue[iRing][m_iCalibCurrent] > 5000) + { + m_LightValue[iRing][m_iCalibCurrent] = 5000; + } + strTemp.Format(_T("%d"), m_LightValue[iRing][m_iCalibCurrent]); + int iCol = -1; + iCol = (iRing + 1) * 2; + m_listValue.SetItemText(m_iCalibCurrent, iCol, strTemp); + m_iCalibCurrent++; + } + } + } + else + { + for (int ii = 0; ii < COLUMN_NUMBER; ii++) + { + if (fabs(ii - percenValue) < 0.05) + { + m_LightIllum[iRing][ii] = static_cast(iCurLuxValue); + m_KeepLightIllum[iRing][ii] = static_cast(iCurLuxValue); + strTemp.Format(_T("%.1f"), iCurLuxValue); + int iCol = -1; + iCol = (m_iGetWhichRingForInitValue + 1) * 2 - 1; + m_listValue.SetItemText(ii, iCol, strTemp); + } + } + } +} + +void CUtilityForSo7LightDlg::SetLampeByOutSide(MSG_LightContent &msg,double illumination) +{ + WaitForSingleObject(m_Thread_Mutex, INFINITE); + MSG_LightContent m_MsgContent; + memcpy(&m_MsgContent, &msg, sizeof(MSG_LightContent)); + if (m_iSelectLightType != SELECT_LIGHT_SIX_RING) + { + for (int i = 0; i <= CAPACITY_SIZE; i++) + { + if ((i == 0) && (i == m_iGetWhichRingForInitValue))//coaxial light + { + lightGroup[i].illumination = m_MsgContent.light.coaxialLight; + lightGroup[i].color = GetColor(lightGroup[i].illumination); + break; + } + else if ((i == 1) && (i == m_iGetWhichRingForInitValue))//top light + { + lightGroup[i].illumination = m_MsgContent.light.topLight; + lightGroup[i].color = GetColor(lightGroup[i].illumination); + break; + } + else if ((i == 2) && (i == m_iGetWhichRingForInitValue)) // bottom light + { + lightGroup[i].illumination = m_MsgContent.light.bottomLight; + lightGroup[i].color = GetColor(lightGroup[i].illumination); + break; + } + else if (i >= 3 && i < CAPACITY_SIZE) + { + lightGroup[i].illumination = m_MsgContent.light.vectorLight[i - 3]; + lightGroup[i].color = GetColor(lightGroup[i].illumination); + } + } + } + else + { + for (int i = 1; i < bottomLightID; i++) + { + lightGroup[i].illumination = m_MsgContent.light.vectorLight[i - 1]; + lightGroup[i].color = GetColor(lightGroup[i].illumination); + } + } + TRACE1("lightGroup[i].illumination=%f\n", lightGroup[0x14].illumination); + bInvalidateScreen=true; + + switch(m_SwitchPickLamp) + { + case PICKED_SINGLE_LAMP: + if(!m_RingLightButtonSingle.IsWindowVisible()) + { + if (m_iSelectLightType != SELECT_LIGHT_SIX_RING) + { + m_RingLightButtonSingle.ShowWindow(SW_HIDE); + } + else + { + m_RingLightButtonSingle.ShowWindow(SW_SHOW); + } + } + break; + case PICKED_RING_LAMP: + if(!m_RingLightButtonRing.IsWindowVisible()) + { + if (m_iSelectLightType != SELECT_LIGHT_SIX_RING) + { + m_RingLightButtonRing.ShowWindow(SW_HIDE); + } + else + { + m_RingLightButtonRing.ShowWindow(SW_SHOW); + } + } + break; + case PICKED_FAN_LAMP: + if (!m_RingLightButtonFan.IsWindowVisible()) + { + if (m_iSelectLightType != SELECT_LIGHT_SIX_RING) + { + m_RingLightButtonFan.ShowWindow(SW_HIDE); + } + else + { + m_RingLightButtonFan.ShowWindow(SW_SHOW); + } + } + break; + case PICKED_PIE_LAMP: + if(!m_RingLightButtonPie.IsWindowVisible()) + { + if (m_iSelectLightType != SELECT_LIGHT_SIX_RING) + { + m_RingLightButtonPie.ShowWindow(SW_HIDE); + } + else + { + m_RingLightButtonPie.ShowWindow(SW_SHOW); + } + } + break; + } + + UpdateLightMode(); + ReleaseMutex(m_Thread_Mutex); +} + +COLORREF CUtilityForSo7LightDlg::GetBottomColor() +{ + return lightGroup[bottomLightID].color; +} + +COLORREF CUtilityForSo7LightDlg::GetTopColor() +{ + return lightGroup[1].color; +} + +void CUtilityForSo7LightDlg::OnTurnOffLight() +{ + for (int i=0;i<=bottomLightID;i++) + { + lightGroup[i].illumination = 0; + lightGroup[i].color = GetColor(0); + } + SetControlsIllumination(0.0); + SetShortcutTitle(MouseMoveSelectBeginName); + UpdateLightStateToMachine(); + bInvalidateScreen = true; +} + +BOOL CUtilityForSo7LightDlg::PreTranslateMessage(MSG* pMsg) +{ + switch (pMsg->message) + { + case WM_KEYDOWN: + break; + case WM_KEYUP: + break; + } + if (pMsg->message == WM_KEYDOWN && pMsg->wParam == VK_ESCAPE) + { + m_bStopCalibration = true; + _Cabli_State = CABLI_IDLE; + SetEvent(_Cabli_State_Handle); + return TRUE; + } + if (pMsg->message == WM_KEYDOWN && pMsg->wParam == VK_RETURN) + { + return TRUE; + } + return CDialogEx::PreTranslateMessage(pMsg); +} + +CPoint CUtilityForSo7LightDlg::Fan2Point() +{ + int nSelect = 0; + + for(int i = 1; i < 9; i++) + { + if(lightGroup[i].illumination - 0.01 > 0) + { + nSelect = i; + } + } + + CPoint point; + switch(nSelect) + { + case 1: + point.x = 207; + point.y = 75; + break; + case 2: + point.x = 137; + point.y = 49; + break; + case 3: + point.x = 71; + point.y = 77; + break; + case 4: + point.x = 50; + point.y = 141; + break; + case 5: + point.x = 76; + point.y = 200; + break; + case 6: + point.x = 138; + point.y = 225; + break; + case 7: + point.x = 196; + point.y = 204; + break; + case 8: + point.x = 217; + point.y = 142; + break; + default: + break; + } + + return point; +} + +void CUtilityForSo7LightDlg::UpdateLightMode() +{ +} + +void CUtilityForSo7LightDlg::ModifyLightMode(int iSelect) +{ +} + + +void CUtilityForSo7LightDlg::OnBnClickedCancel() +{ + _cab_WatchThreadState = THREAD_STATE_EXIT; + _Cabli_State = CABLI_IDLE; + SetEvent(_Cabli_State_Handle); + CString strEdit; + m_edWhichRing.GetWindowTextW(strEdit); + if ((strEdit == _T(""))) + { + CDialogEx::OnCancel(); + return; + } + pGetDigitalLuxMeter->m_iGetWhichRingForInitValue = m_iGetWhichRingForInitValue; + //pGetDigitalLuxMeter->m_iCompareGap = m_iCompareGap; + pGetDigitalLuxMeter->m_iSleepTime = m_iSleepTime; + pGetDigitalLuxMeter->m_dCabStep = m_dCabStep; + pGetDigitalLuxMeter->m_iSelectLightType = m_iSelectLightType; + pGetDigitalLuxMeter->SaveIni(); + CDialogEx::OnCancel(); +} + +void CUtilityForSo7LightDlg::ReadIni() +{ + CString filePath; + if (g_So7Illum && m_bUseDefaultPath) + { + g_So7Illum->GetAppPath(filePath); + } + if (!m_bPressOpenBt) + { + CString strFileName = filePath + _T("\\LightValue.ini"); + CString strSection = _T("LIGHT_VALUE"); + ReadWriteIni rIni(strFileName); + rIni.setSection(strSection); + CString strIllum; + CString strLight; + + for (UINT i = 0; i < m_iLightRingTolNum; i++) + { + for (int j = 0; j < COLUMN_NUMBER; j++) + { + strLight.Format(_T("Ring%d%%%dValue"), i + 1, j); + m_LightValue[i][j] = static_cast(rIni.getInt(strLight)); + strIllum.Format(_T("Ring%d%%%dIllumValue"), i+1,j); + m_LightIllum[i][j] = static_cast(rIni.getDouble(strIllum, j)); + } + } + } + else + { + CStdioFile filecsv; + CString FileName; + if (m_bUseDefaultPath) + { + FileName = filePath + _T("\\LightValue.csv"); + } + else + { + FileName = m_strSelectfilePath; + } + char strTab = ','; + string lineStr; + string str; + vector vlineArray; + vector> vStringCsv; + ifstream readFile(FileName, ios::in); + while (getline(readFile, lineStr)) + { + stringstream ss(lineStr); + while (getline(ss, str, strTab)) + { + vlineArray.push_back(str); + } + vStringCsv.push_back(vlineArray); + vlineArray.clear(); + } + int iTemp = 0; + double dTemp = 0.0; + memset(m_LightValue, 0, sizeof(m_LightValue)); + memset(m_LightIllum, 0, sizeof(m_LightIllum)); + + if (vStringCsv.size() != COLUMN_NUMBER) + { + return; + } + for (int j = 0; j < COLUMN_NUMBER; j++) + { + for (UINT k = 1; k < (m_iLightRingTolNum*2)+1 && k < static_cast(vStringCsv.at(j).size()); k++) + { + int iStep = k / 2; + if (1 == k%2) + { + dTemp = atof(vStringCsv[j][k].c_str()); + m_LightIllum[k - iStep-1][j] = static_cast(dTemp); + } + else + { + iTemp = atoi(vStringCsv[j][k].c_str()); + m_LightValue[k - iStep-1][j] = iTemp; + } + } + } + vlineArray.clear(); + vStringCsv.clear(); + } +} + +void CUtilityForSo7LightDlg::OnBnClickedButtonOpen() +{ + // TODO: Add your control notification handler code here + m_bPressOpenBt = true; + if (!m_bCalibration && !m_bInitLuxValue && !m_bReset) + { + CFileDialog cDlg(TRUE, _T(".csv"), NULL, OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT, _T("(*.csv)|*.csv|"), NULL); + if (cDlg.DoModal() == IDOK) + { + m_bUseDefaultPath = false; + m_strSelectfilePath = cDlg.GetPathName(); + } + else + { + return; + } + } + ReadIni(); + OnShowListLightValue(); + memcpy(m_KeepLightIllum,m_LightIllum, sizeof(m_LightIllum)); +} + +void CUtilityForSo7LightDlg::OnShowListLightValue() +{ + int iCount = m_listValue.GetItemCount(); + if (iCount != COLUMN_NUMBER) + { + return; + } + for (int i = 0; i < iCount; i++) + { + CString strTemp; + for (UINT j = 0; j < (m_iLightRingTolNum*2)+1; j++) + { + int iStep = j / 2; + if (0 == j % 2) + { + strTemp.Format(_T("%.1f"), m_LightIllum[j - iStep][i]); + m_listValue.SetItemText(i, j + 1, strTemp); + } + else + { + strTemp.Format(_T("%d"), m_LightValue[j - iStep - 1][i]); + m_listValue.SetItemText(i, j + 1, strTemp); + } + } + } +} + +void CUtilityForSo7LightDlg::OnBnClickedButtonSave() +{ + // TODO: Add your control notification handler code here + CString filePath; + if (g_So7Illum) + { + g_So7Illum->GetAppPath(filePath); + } + CString strFileName = filePath + _T("\\LightValue.ini"); + CString strSection = _T("LIGHT_VALUE"); + ReadWriteIni wIni(strFileName); + wIni.setSection(strSection); + CString strLight; + CString strIllum; + for (UINT i = 0; i < m_iLightRingTolNum; i++) + { + for (int j = 0; j < COLUMN_NUMBER; j++) + { + strLight.Format(_T("Ring%d%%%dValue"), i + 1,j); + wIni.setInt(strLight, m_LightValue[i][j]); + strIllum.Format(_T("Ring%d%%%dIllumValue"), i + 1, j); + wIni.setDouble(strIllum, m_LightIllum[i][j]); + } + } + CStdioFile filecsv; + CString FileName = filePath + _T("\\LightValue.csv"); + CString strEnter = _T("\n"); + CString strTab = _T(","); + if (!m_bCalibration && !m_bInitLuxValue && !m_bReset) + { + CFileDialog cDlg(FALSE, _T(".csv"), NULL, OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT, _T("(*.csv)|*.csv|"), NULL); + if (cDlg.DoModal() == IDOK) + { + m_strSelectfilePath = cDlg.GetPathName(); + if (filecsv.Open(m_strSelectfilePath, CStdioFile::modeCreate | CStdioFile::modeReadWrite)) + { + for (int j = 0; j < COLUMN_NUMBER; j++) + { + strIllum.Format(_T("%d%%Value"), j); + filecsv.WriteString(strIllum + strTab); + for (UINT k = 1; k < (m_iLightRingTolNum*2)+1; k++) + { + int iStep = k / 2; + if (1 == k % 2) + { + strIllum.Format(_T("%.1f"), m_LightIllum[k - (iStep)-1][j]); + filecsv.WriteString(strIllum + strTab); + } + else if (2*m_iLightRingTolNum == k) + { + strLight.Format(_T("%d"), m_LightValue[k - (iStep)-1][j]); + filecsv.WriteString(strLight + strTab); + filecsv.WriteString(strEnter); + } + else + { + strLight.Format(_T("%d"), m_LightValue[k - (iStep)-1][j]); + filecsv.WriteString(strLight + strTab); + } + } + } + filecsv.Close(); + } + } + } + if (filecsv.Open(FileName, CStdioFile::modeCreate | CStdioFile::modeReadWrite)) + { + for (int j = 0; j < COLUMN_NUMBER; j++) + { + strIllum.Format(_T("%d%%Value"), j); + filecsv.WriteString(strIllum + strTab); + for (UINT k = 1; k < (m_iLightRingTolNum * 2) + 1; k++) + { + int iStep = k / 2; + if (1 == k % 2) + { + strIllum.Format(_T("%.1f"), m_LightIllum[k-(iStep)-1][j]); + filecsv.WriteString(strIllum + strTab); + } + else if (2*m_iLightRingTolNum == k) + { + strLight.Format(_T("%d"), m_LightValue[k - (iStep)-1][j]); + filecsv.WriteString(strLight + strTab); + filecsv.WriteString(strEnter); + } + else + { + strLight.Format(_T("%d"), m_LightValue[k - (iStep)-1][j]); + filecsv.WriteString(strLight + strTab); + } + } + } + filecsv.Close(); + } + else + { + MessageBoxEx(GetSafeHwnd(), _T("保存文件错误!"), _T("失败"), MB_OK | MB_APPLMODAL, NULL); + } +} + +void CUtilityForSo7LightDlg::OnBnClickedButtonUpLoad() +{ + // TODO: Add your control notification handler code here + BOOL bRead = FALSE; + if (g_So7Illum) + { + OnUpdateCtrlStatus(FALSE); + bRead = g_So7Illum->ReadCalibration(m_iSelectLightType, m_iRoadBoardNum, m_iGetWhichRingForInitValue+1); + } + if (bRead) + { + memset(m_LightValue, 0, sizeof(m_LightValue)); + memcpy(m_LightValue, g_So7Illum->m_CalibrateData, sizeof(g_So7Illum->m_CalibrateData)); + int iCount = m_listValue.GetItemCount(); + if (iCount != COLUMN_NUMBER) + { + return; + } + for (int i = 0; i < iCount; i++) + { + CString strTemp; + for (UINT j = 1; j < (2*m_iLightRingTolNum)+1; j++) + { + int iStep = j / 2; + if (0 == j % 2) + { + strTemp.Format(_T("%.1f"), m_LightIllum[j - iStep][i]); + m_listValue.SetItemText(i, j + 1, strTemp); + } + else + { + strTemp.Format(_T("%d"), m_LightValue[j - iStep - 1][i]); + m_listValue.SetItemText(i, j + 1, strTemp); + } + } + } + } + else + { + AfxMessageBox(_T("上传错误!"), MB_OK | MB_SYSTEMMODAL); + } + OnUpdateCtrlStatus(TRUE); +} + + +void CUtilityForSo7LightDlg::OnBnClickedButtonDownLoad() +{ + // TODO: Add your control notification handler code here + memset(WriteIllumData, 0, sizeof(WriteIllumData)); + memcpy(WriteIllumData, m_LightValue, sizeof(m_LightValue)); + if (g_So7Illum) + { + OnUpdateCtrlStatus(FALSE); + BOOL bWrite = FALSE; + if ((m_bReset) && (m_iSelectLightType != SELECT_LIGHT_SIX_RING)) + { + bWrite = g_So7Illum->ResetForRoadLight(m_iSelectLightType, m_iRoadBoardNum, m_iGetWhichRingForInitValue+1); + } + else + { + bWrite = g_So7Illum->WriteCalibration(WriteIllumData, m_iSelectLightType, m_iRoadBoardNum, m_iGetWhichRingForInitValue + 1); + } + if (bWrite) + { + OnUpdateCtrlStatus(TRUE); + } + else + { + AfxMessageBox(_T("下载错误!"), MB_OK | MB_SYSTEMMODAL); + OnUpdateCtrlStatus(TRUE); + } + } +} + +void CUtilityForSo7LightDlg::OnUpdateCtrlStatus(BOOL bEnable) +{ + m_btCalibration.EnableWindow(bEnable); + m_btDelete.EnableWindow(bEnable); + m_btSave.EnableWindow(bEnable); + m_btOpen.EnableWindow(bEnable); + m_btReset.EnableWindow(bEnable); + m_btUpLoad.EnableWindow(bEnable); + m_btDownLoad.EnableWindow(bEnable); + m_btInitValue.EnableWindow(bEnable); + m_listValue.EnableWindow(bEnable); + m_vScrollLight.EnableWindow(bEnable); +} + +void CUtilityForSo7LightDlg::OnNMKillfocusListGetRingLightValue() +{ + // TODO: Add your control notification handler code here + if (m_bInputByUser) + { + CString strEdit; + CString strTemp; + m_edtUseInputValue.GetWindowTextW(strEdit); + m_listValue.SetItemText(m_nRow,m_nCol,strEdit); + m_edtUseInputValue.ShowWindow(SW_HIDE); + if (m_nRow < 0 || m_nCol < 0) + { + return; + } + int iTemp = 0; + int iAjust = 1; + int iRing = (m_nCol) / 2; + int iWhich = (m_nCol) % 2; + if (1 == iWhich) + { + strTemp = m_listValue.GetItemText(m_nRow, m_nCol); + if (strTemp == STRING_SPARE || strTemp.SpanIncluding(STRING_IS_DIGIT) != strTemp) + { + m_listValue.SetItemText(m_nRow, m_nCol, m_strBeforeEdit); + return; + } + AdjustStringLength(strTemp, 6); + iAjust = strTemp.Compare(STRING_MAX_ILLUMINATION); + if (1 > iAjust) + { + iTemp = _ttoi(strTemp); + m_LightIllum[iRing][m_nRow] = static_cast(iTemp); + } + else + { + m_listValue.SetItemText(m_nRow, m_nCol, m_strBeforeEdit); + } + } + else if (0 == iWhich) + { + strTemp = m_listValue.GetItemText(m_nRow, m_nCol); + if (strTemp == STRING_SPARE || strTemp.SpanIncluding(STRING_IS_DIGIT) != strTemp) + { + m_listValue.SetItemText(m_nRow, m_nCol, m_strBeforeEdit); + return; + } + AdjustStringLength(strTemp, 4); + iAjust = strTemp.Compare(STRING_MAX_LIGHT_VALUE); + if (1 > iAjust) + { + iTemp = _ttoi(strTemp); + m_LightValue[iRing-1][m_nRow] = static_cast(iTemp); + } + else + { + m_listValue.SetItemText(m_nRow, m_nCol, m_strBeforeEdit); + } + } + } +} + +void CUtilityForSo7LightDlg::AdjustStringLength(CString &str, const int len) +{ + CString strInsetOne = _T("0"); + CString strInsetTwo = _T("00"); + CString strInsetThree = _T("000"); + CString strInsetFour = _T("0000"); + CString strInsetFive = _T("00000"); + CString strInsetSix = _T("000000"); + if (str.GetLength() < len) + { + if (str.GetLength() == (len - 1)) + { + str = strInsetOne + str; + } + else if (str.GetLength() == (len - 2)) + { + str = strInsetTwo + str; + } + else if (str.GetLength() == (len - 3)) + { + str = strInsetThree + str; + } + else if (str.GetLength() == (len - 4)) + { + str = strInsetFour + str; + } + else if (str.GetLength() == (len - 5)) + { + str = strInsetFive + str; + } + else if (str.GetLength() == (len - 6)) + { + str = strInsetSix + str; + } + } +} + +void CUtilityForSo7LightDlg::OnNMDblclkListGetRingLightValue(NMHDR *pNMHDR, LRESULT *pResult) +{ + LPNMITEMACTIVATE pNMItemActivate = reinterpret_cast(pNMHDR); + // TODO: Add your control notification handler code here + NM_LISTVIEW *pListValue = (NM_LISTVIEW*)pNMHDR; + CRect rect; + m_nRow = pListValue->iItem; + m_nCol = pListValue->iSubItem; + if (m_nRow == -1 || m_nCol < 1 ) + { + return; + } + CString editsStr = _T(""); + editsStr.Format(m_listValue.GetItemText(m_nRow, m_nCol)); + m_strBeforeEdit = editsStr; + int editLength = editsStr.GetLength(); + m_bInputByUser = false; + if (m_nRow != -1 && m_nCol > 0) + { + m_listValue.GetSubItemRect(m_nRow, m_nCol, LVIR_LABEL, rect); + m_edtUseInputValue.SetParent(&m_listValue); + m_edtUseInputValue.MoveWindow(rect); + m_edtUseInputValue.SetWindowTextW(m_listValue.GetItemText(m_nRow, m_nCol)); + m_edtUseInputValue.ShowWindow(SW_SHOW); + m_edtUseInputValue.SetFocus(); + m_edtUseInputValue.ShowCaret(); + m_edtUseInputValue.SetSel(0, editLength, TRUE); + m_bInputByUser = true; + } + *pResult = 0; +} + +void CUtilityForSo7LightDlg::OnBnClickedButtonReset() +{ + // TODO: Add your control notification handler code here + //memset(m_LightIllum, 0, sizeof(m_LightIllum)); + m_bReset = true; + memset(m_LightValue, 0, sizeof(m_LightValue)); + //memcpy( m_LightIllum,m_KeepLightIllum, sizeof(m_KeepLightIllum)); + memcpy(m_LightValue, m_KeepLightValue, sizeof(m_KeepLightValue)); + OnBnClickedButtonSave(); + //OnBnClickedButtonOpen(); + OnShowListLightValue(); + OnBnClickedButtonDownLoad(); + m_bReset = false; +} + +void CUtilityForSo7LightDlg::OnBnClickedButtonDelete() +{ + // TODO: Add your control notification handler code here + if (m_bInitLuxValue) + { + for (int i = 0; i < COLUMN_NUMBER; i++) + { + m_LightValue[m_iGetWhichRingForInitValue][i] = 0; + } + } + else + { + memset(m_LightValue, 0, sizeof(m_LightValue)); + } + for (int i = 0; i < COLUMN_NUMBER; i++) + { + if (m_btCalibration&&!m_bInitLuxValue) + { + for (UINT j = 0; j < m_iLightFanTolNum; j++) + { + m_listValue.SetItemText(i, 2*(j+1), _T("")); + } + } + else if (m_bInitLuxValue && m_bCheckRing) + { + int iCol = (m_iGetWhichRingForInitValue + 1) * 2; + m_listValue.SetItemText(i, iCol, _T("")); + } + } +} + +void CUtilityForSo7LightDlg::OnBnClickedButtonCalibration() +{ + // TODO: Add your control notification handler code here + _Cabli_State = CABLI_DO_ALL_RING_LIGHT; + SetEvent(_Cabli_State_Handle); + m_bStopCalibration = false; + m_bCalibration = true; + m_bInitLuxValue = false; + //OnBnClickedButtonOpen(); + OnBnClickedButtonReset(); + //OnBnClickedButtonDownLoad(); + OnBnClickedButtonDelete(); +} + +void CUtilityForSo7LightDlg::DoLightCablication() +{ + ButtonEnableWindows(FALSE); + OnTurnOffLight(); + if (m_iSelectLightType == SELECT_LIGHT_SIX_RING) + { + OnClickedEf7ControlRingLightPickedRing(); + } + else + { + OnClickedEf7ControlRingLightPickedPie(); + } + bool bContinue = true; + if (!m_bStopCalibration) + { + for (UINT i = 0; i < m_iLightRingTolNum; i++) + { + int iIndex = i * 8 + 5; + for (int k = 0; k < RING_ARRAY_SIZE; k++) + { + lightGroup[k].bHighlight = false; + } + lightGroup[iIndex].bHighlight = true; + if (m_iSelectLightType == SELECT_LIGHT_SIX_RING) + { + MarkRelatedRingWhenRing(iIndex); + } + else + { + iIndex = m_iGetWhichRingForInitValue; + lightGroup[iIndex].bHighlight = true; + MarkRelatedRingWhenPie(iIndex); + } + SetShortcutTitle(iIndex); + if (m_bStopCalibration) + { + m_iCalibCurrent = 0; + m_bCalibration = false; + m_vGetTempValue.clear(); + _Cabli_State = CABLI_IDLE; + SetEvent(_Cabli_State_Handle); + break; + } + //OnPaint(); + if (!m_bStopCalibration) + { + m_dCabStep = (m_iSelectLightType == SELECT_LIGHT_SIX_RING) ? (m_dCabStep) : (static_cast(m_dCabStep) >= 1) ? static_cast(m_dCabStep) : 1.0; + CString str; + str.Format(_T("%1.1f"), m_dCabStep); + m_edCalibStep.SetWindowTextW(str); + for (double k = 0; k < (100 + 0.5*m_dCabStep); ) + { + if (m_bStopCalibration) + { + m_iCalibCurrent = 0; + m_bCalibration = false; + m_vGetTempValue.clear(); + _Cabli_State = CABLI_IDLE; + SetEvent(_Cabli_State_Handle); + break; + } + GetLuxMeterInitValueForWhichLight(k); + bTiggerSendMessage = true; + OnTimer(1); + SetControlsIllumination(k); + Sleep(m_iSleepTime / 2); + m_bUpdate = true; + k = k + m_dCabStep; + int iTemp = static_cast(k * 100); + k = (double)iTemp / 100; + } + OnTurnOffLight(); + int iAnswer = -1; + if (i != 5 && m_bPopUpPromptDialog && bContinue && !m_bStopCalibration) + { + iAnswer = AfxMessageBox(_T("完成一环灯取值,是否继续!"), MB_YESNO| MB_SYSTEMMODAL); + if (iAnswer == IDYES) + { + m_bStopCalibration = false; + int iContinue = AfxMessageBox(_T("之后是否还弹出提示框"), MB_YESNO| MB_SYSTEMMODAL); + if (iContinue == IDYES) + { + bContinue = true; + } + else + { + bContinue = false; + } + } + else + { + m_bStopCalibration = true; + m_bCalibration = false; + break; + } + } + } + m_iCalibCurrent = 0; + m_vGetTempValue.clear(); + Sleep(m_iSleepTime*m_iRingGapSleepTime); + } + if (!m_bStopCalibration) + { + int iChoose = -1; + iChoose = AfxMessageBox(_T("完成灯光校验取值,是否保存数据!"), MB_YESNO | MB_SYSTEMMODAL); + if (iChoose == IDYES) + { + OnBnClickedButtonSave(); + } + m_bCalibration = false; + } + } + else + { + AfxMessageBox(_T("停止灯光校验!"), MB_OK | MB_SYSTEMMODAL); + } + _Cabli_State = CABLI_IDLE; + SetEvent(_Cabli_State_Handle); +} + +void CUtilityForSo7LightDlg::OnBnClickedButtonGetLuxMeterInitValue() +{ + // TODO: Add your control notification handler code here + _Cabli_State = CABLI_GET_INIT_VALUE; + SetEvent(_Cabli_State_Handle); + m_bStopCalibration = false; + m_bCalibration = true; + m_bInitLuxValue = true; + if (m_bCheckRing) + { + CString strTemp; + for (int i = 0; i < COLUMN_NUMBER; i++) + { + m_LightValue[m_iGetWhichRingForInitValue][i] = m_KeepLightValue[m_iGetWhichRingForInitValue][i]; + strTemp.Format(_T("%d"), m_LightValue[m_iGetWhichRingForInitValue][i]); + m_listValue.SetItemText(i, m_iGetWhichRingForInitValue * 2 + 2, strTemp); + } + OnBnClickedButtonDownLoad(); + OnBnClickedButtonDelete(); + } +} + +void CUtilityForSo7LightDlg::GetLuxMeterInitValue() +{ + ButtonEnableWindows(FALSE); + OnTurnOffLight(); + if (m_bGetSingleRingInitValue) + { + if (m_iSelectLightType == SELECT_LIGHT_SIX_RING) + { + OnClickedEf7ControlRingLightPickedRing(); + } + else + { + OnClickedEf7ControlRingLightPickedPie(); + } + } + else + { + OnClickedEf7ControlRingLightPickedPie(); + } + + bool bContinue = true; + if (!m_bStopCalibration) + { + int iIndex = (m_iSelectLightType == SELECT_LIGHT_SIX_RING)? (m_iGetWhichRingForInitValue * 8 + 5) : m_iGetWhichRingForInitValue; + if (m_bGetSingleRingInitValue) + { + for (int k = 0; k < 50; k++) + { + lightGroup[k].bHighlight = false; + } + lightGroup[iIndex].bHighlight = true; + if (m_iSelectLightType == SELECT_LIGHT_SIX_RING) + { + MarkRelatedRingWhenRing(iIndex); + } + else + { + MarkRelatedRingWhenPie(iIndex); + } + } + else + { + for (int k = 0; k < RING_ARRAY_SIZE; k++) + { + lightGroup[k].bHighlight = true; + } + MarkRelatedRingWhenPie(iIndex); + } + + SetShortcutTitle(iIndex); + //OnPaint(); + if (!m_bStopCalibration) + { + m_dCabStep = (m_iSelectLightType == SELECT_LIGHT_SIX_RING) ? (m_dCabStep) : (static_cast(m_dCabStep) >= 1)? static_cast(m_dCabStep) : 1.0; + CString str; + str.Format(_T("%1.1f"), m_dCabStep); + m_edCalibStep.SetWindowTextW(str); + for (double k = 0; k < (100 + 0.5*m_dCabStep); ) + { + if (m_bStopCalibration) + { + m_iCalibCurrent = 0; + m_bCalibration = false; + m_bInitLuxValue = false; + m_vGetTempValue.clear(); + _Cabli_State = CABLI_IDLE; + SetEvent(_Cabli_State_Handle); + break; + } + GetLuxMeterInitValueForWhichLight(k); + bTiggerSendMessage = true; + OnTimer(1); + SetControlsIllumination(k); + Sleep(m_iSleepTime/2); + m_bUpdate = true; + k = k + m_dCabStep; + int iTemp = static_cast(k * 100); + k = (double)iTemp / 100; + } + OnTurnOffLight(); + int iAnswer = -1; + } + if (!m_bStopCalibration) + { + int iChoose = -1; + m_bCalibration = false; + if (m_bCheckRing) + { + iChoose = AfxMessageBox(_T("完成单环灯光校验,是否保存数据!"), MB_YESNO| MB_SYSTEMMODAL); + } + else + { + iChoose = AfxMessageBox(_T("完成取亮度计初值,是否保存数据!"), MB_YESNO| MB_SYSTEMMODAL); + } + if (iChoose == IDYES) + { + OnBnClickedButtonSave(); + m_bInitLuxValue = false; + } + } + } + else + { + if (m_bCheckRing) + { + AfxMessageBox(_T("停止单环灯光校验!"), MB_OK | MB_SYSTEMMODAL); + } + else + { + AfxMessageBox(_T("停止取亮度计初值!"), MB_OK | MB_SYSTEMMODAL); + } + } + m_iCalibCurrent = 0; + m_vGetTempValue.clear(); + _Cabli_State = CABLI_IDLE; + SetEvent(_Cabli_State_Handle); +} + +void CUtilityForSo7LightDlg::GetLuxMeterInitValueForWhichLight(const double& value) +{ + switch (m_iSelectLightType) + { + case SELECT_LIGHT_SIX_RING: + { + for (int j = 0; j < RING_ARRAY_SIZE; j++) + { + if (!m_bStopCalibration) + { + switch (m_iSelctRingLightNum) + { + case SELECT_RING_ONE: + { + if (j < 8) + { + m_MsgContent.light.vectorLight[j] = value; + } + break; + } + case SELECT_RING_TWO: + { + if ((j < 16) && (j >= 8)) + { + m_MsgContent.light.vectorLight[j] = value; + } + break; + } + case SELECT_RING_THREE: + { + if ((j < 24) && (j >= 16)) + { + m_MsgContent.light.vectorLight[j] = value; + } + break; + } + case SELECT_RING_FOUR: + { + if ((j < 32) && (j >= 24)) + { + m_MsgContent.light.vectorLight[j] = value; + } + break; + } + case SELECT_RING_FIVE: + { + if ((j < 40) && (j >= 32)) + { + m_MsgContent.light.vectorLight[j] = value; + } + break; + } + case SELECT_RING_SIX: + { + if ((j < 48) && (j >= 40)) + { + m_MsgContent.light.vectorLight[j] = value; + } + break; + } + default: + { + m_MsgContent.light.vectorLight[j] = value; + break; + } + } + } + } + break; + } + case SELECT_LIGHT_ROAD_FOUR: + { + if (!m_bStopCalibration) + { + switch (m_iGetWhichRingForInitValue) + { + case Hit_Coaxial: + { + m_MsgContent.light.coaxialLight = value; + break; + } + case Hit_Top: + { + m_MsgContent.light.topLight = value; + break; + } + case Hit_Bottom: + { + m_MsgContent.light.bottomLight = value; + break; + } + case Hit_Ring: + { + for (int j = 0; j < RING_ARRAY_SIZE; j++) + { + m_MsgContent.light.vectorLight[j] = value; + } + break; + } + default: + break; + } + } + break; + } + case SELECT_LIGHT_ROAD_EIGHT: + { + if (!m_bStopCalibration) + { + switch (m_iGetWhichRingForInitValue) + { + case Hit_Coaxial: + { + m_MsgContent.light.coaxialLight = value; + break; + } + case Hit_Top: + { + m_MsgContent.light.topLight = value; + break; + } + case Hit_Bottom: + { + m_MsgContent.light.bottomLight = value; + break; + } + case Hit_Ring: + { + for (int j = 0; j < RING_ARRAY_SIZE; j++) + { + m_MsgContent.light.vectorLight[j] = value; + } + break; + } + default: + { + for (int j = 0; j < RING_ARRAY_SIZE; j++) + { + m_MsgContent.light.vectorLight[j] = value; + } + break; + } + } + } + break; + } + default: + break; + } +} + +void CUtilityForSo7LightDlg::ButtonEnableWindows(BOOL bEnable) +{ + m_btCalibration.EnableWindow(bEnable); + m_btDelete.EnableWindow(bEnable); + m_btSave.EnableWindow(bEnable); + m_btOpen.EnableWindow(bEnable); + m_btReset.EnableWindow(bEnable); + m_btUpLoad.EnableWindow(bEnable); + m_btDownLoad.EnableWindow(bEnable); + m_btExit.EnableWindow(bEnable); + m_btInitValue.EnableWindow(bEnable); + m_edStayTime.EnableWindow(bEnable); + m_edCalibStep.EnableWindow(bEnable); + m_edWhichRing.EnableWindow(bEnable); + m_btCheckRing.EnableWindow(bEnable); + m_comLightType.EnableWindow(bEnable); +} + +void CUtilityForSo7LightDlg::OnEnChangeEditWhichRingToCalibration() +{ + // TODO: If this is a RICHEDIT control, the control will not + // send this notification unless you override the CDialogEx::OnInitDialog() + // function and call CRichEditCtrl().SetEventMask() + // with the ENM_CHANGE flag ORed into the mask. + CString strEdit; + m_edWhichRing.GetWindowTextW(strEdit); + m_iGetWhichRingForInitValue = _ttoi(strEdit)-1; + if (((m_iGetWhichRingForInitValue > (m_iLightFanTolNum-1)) || (m_iGetWhichRingForInitValue < 0))&& (strEdit != _T(""))) + { + m_iGetWhichRingForInitValue = 2; + strEdit.Format(_T("%d"), m_iGetWhichRingForInitValue); + m_edWhichRing.SetWindowTextW(strEdit); + return; + } + + // TODO: Add your control notification handler code here +} + +void CUtilityForSo7LightDlg::OnBnClickedCheckRing() +{ + // TODO: Add your control notification handler code here + m_bCheckRing = m_btCheckRing.GetCheck(); +} + +void CUtilityForSo7LightDlg::OnEnChangeEditGetValueGap() +{ + // TODO: If this is a RICHEDIT control, the control will not + // send this notification unless you override the CDialogEx::OnInitDialog() + // function and call CRichEditCtrl().SetEventMask() + // with the ENM_CHANGE flag ORed into the mask. + CString strEdit; + m_edValueGap.GetWindowTextW(strEdit); + m_iCompareGap = _ttoi(strEdit); + // TODO: Add your control notification handler code here +} + +void CUtilityForSo7LightDlg::OnEnChangeEditStayTime() +{ + // TODO: If this is a RICHEDIT control, the control will not + // send this notification unless you override the CDialogEx::OnInitDialog() + // function and call CRichEditCtrl().SetEventMask() + // with the ENM_CHANGE flag ORed into the mask. + CString strEdit; + m_edStayTime.GetWindowTextW(strEdit); + m_iSleepTime = _ttoi(strEdit); + // TODO: Add your control notification handler code here +} + +void CUtilityForSo7LightDlg::OnEnChangeEditCalibrationStep() +{ + // TODO: If this is a RICHEDIT control, the control will not + // send this notification unless you override the CDialogEx::OnInitDialog() + // function and call CRichEditCtrl().SetEventMask() + // with the ENM_CHANGE flag ORed into the mask. + CString strEdit; + m_edCalibStep.GetWindowTextW(strEdit); + m_dCabStep = _ttof(strEdit); + // TODO: Add your control notification handler code here +} + +void CUtilityForSo7LightDlg::OnShowLuxMeterValue() +{ + double dLuxTemp = 0.0; + dLuxTemp = pGetDigitalLuxMeter->m_dLuxVal; + CString strTemp; + strTemp.Format(_T("%.1f"), dLuxTemp); + m_edIllumValue.SetWindowTextW(strTemp); + strTemp.Format(_T("%.1f"), pGetDigitalLuxMeter->m_dTempVal); + m_edTempValue.SetWindowTextW(strTemp); + //UpdateData(TRUE); +} + +void CUtilityForSo7LightDlg::OnUpdataLuxMeterValue() +{ + Sleep(50); + if (_cab_WatchThreadState == THREAD_STATE_RUNNING) + { + OnShowLuxMeterValue(); + } +} + +void CUtilityForSo7LightDlg::OnCbnSelchangeComboSelectLightType() +{ + // TODO: Add your control notification handler code here + m_iSelectLightType = m_comLightType.GetCurSel(); + Invalidate(TRUE); + ShowWhichLightIcon(); + InitListContrl(); +} diff --git a/PcDmis/Base/Interfac/Msi/Hsi/SevenOcean/UtilityForSo7Light/UtilityForSo7Light/UtilityForSo7LightDlg.h b/PcDmis/Base/Interfac/Msi/Hsi/SevenOcean/UtilityForSo7Light/UtilityForSo7Light/UtilityForSo7LightDlg.h new file mode 100644 index 0000000..8269d31 --- /dev/null +++ b/PcDmis/Base/Interfac/Msi/Hsi/SevenOcean/UtilityForSo7Light/UtilityForSo7Light/UtilityForSo7LightDlg.h @@ -0,0 +1,299 @@ +#pragma once +#include "resource.h" +#include "afxwin.h" +#include +using namespace std; + +enum LIGHT_MODE{ + PICKED_SINGLE_LAMP, + PICKED_RING_LAMP, + PICKED_FAN_LAMP, + PICKED_PIE_LAMP +}; +struct Light +{ + double bottomLight; + double coaxialLight; + double topLight; + double vectorLight[48]; + void init() + { + bottomLight = 0; + coaxialLight = 0; + topLight = 0; + for (int i=0; i<48; i++) + { + vectorLight[i] = 0; + } + } + void SetValid() + { + bottomLight = max(bottomLight,0); + bottomLight = min(bottomLight,100); + + + coaxialLight = max(coaxialLight,0); + coaxialLight = min(coaxialLight,100); + + topLight = max(topLight,0); + topLight = min(topLight,100); + + for (int i=0; i<48; i++) + { + vectorLight[i] = max(vectorLight[i],0); + vectorLight[i] = min(vectorLight[i],100); + } + } +} ; + +enum LightHit +{ + null = -1, + Hit_Coaxial, + Hit_Top, + Hit_Bottom, + Hit_Ring +}; + +struct MSG_LightContent +{ + INT senderID;//the control that sends this message; + Light light; //light information, global data. + LightHit lightHit; + BOOL bUpateToMachine;//The request to update machine; +}; +class CUtilityForSo7LightDlg : public CDialogEx +{ + DECLARE_DYNAMIC(CUtilityForSo7LightDlg) + +public: + CUtilityForSo7LightDlg(CWnd* pParent = NULL); // standard constructor + virtual ~CUtilityForSo7LightDlg(); + + // Dialog Data + enum { IDD = IDD_UTILITYFORSO7LIGHT_DIALOG }; + +protected: + virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support + + DECLARE_MESSAGE_MAP() +public: + afx_msg void OnPaint(); + afx_msg void OnVScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar); + afx_msg void OnLButtonUp(UINT nFlags, CPoint point); + afx_msg void OnClickedEf7ControlRingLightPickedFan(); + afx_msg void OnClickedEf7ControlRingLightPickedPie(); + afx_msg void OnClickedEf7ControlRingLightPickedRing(); + afx_msg void OnClickedEf7ControlRingLightPickedSingle(); + afx_msg void OnTurnOffLight(); + afx_msg void OnContextMenu(CWnd*, CPoint /*point*/); + afx_msg void OnLButtonDown(UINT nFlags, CPoint point); + + void UpdateLightStateToMachine(); + + struct LAMP_PROPERTY + { + double illumination;//0~100.0 + bool bHighlight; + COLORREF color; + }; + + LAMP_PROPERTY lightGroup[49+1]; + bool bStateOfGroupSelect[49+1]; + + enum MODE_PICKED_LAMP{//used in selecting modes by four button + PICKED_SINGLE_LAMP, + PICKED_RING_LAMP, + PICKED_FAN_LAMP, + PICKED_PIE_LAMP + }; + + enum em_ID_TimerEvent + { + ID_REFLESH_REDRAW, + ID_SEND_MESSAGE, + ID_GET_REAL_LUX + }; + +public: + CPoint RotatePointCenterSweep(CPoint orginPoint,CPoint center,double angle); + BOOL DrawRingLightFrame(CDC *pdc,MODE_PICKED_LAMP m_SwitchPickLamp); + BOOL DrawRingLightFrameForSixRingRight(CDC *pdc, MODE_PICKED_LAMP m_SwitchPickLamp); + BOOL DrawRingLightFrameForFourRoadRight(CDC *pdc, MODE_PICKED_LAMP m_SwitchPickLamp); + BOOL DrawRingLightFrameForEightRoadRight(CDC *pdc, MODE_PICKED_LAMP m_SwitchPickLamp); + void SettingForDrawRingLightFrameForSixRingRight(CDC& memDC, CBrush& mBrush); + void SettingForDrawRingLightFrameForFourRoadRight(CDC& memDC, CBrush& mBrush); + void SettingForDrawRingLightFrameForEightRoadRight(CDC& memDC, CBrush& mBrush); + BOOL FillArcRegion(int num,CDC *pDC,bool bHighlight); + COLORREF GetColor(double value=100.0); + CRect GetArcRect(CPoint origin,CPoint center); + int GetLightName(CPoint mousepoint); + int GetLightMode(){return m_SwitchPickLamp;} +private : + int sumRingCollumn; + int bottomLightID; + int collumnWidth; + int OUT_FRAME; + int MouseMoveSelectBeginName; + bool bInvalidateScreen; + bool bTiggerSendMessage; + double m_drawRotated; + + MODE_PICKED_LAMP m_SwitchPickLamp ; + MSG_LightContent m_MsgContent; + void SelectRingLightExclusive(MODE_PICKED_LAMP lamp); + void CancelSelectAll(void); + void MarkRelatedRingWhenRing(int clickedLightName ); + void MarkRelatedRingWhenSingle(int clickedLightName); + void MarkRelatedRingWhenPie(int clickedLightName); + void MarkRelatedRingWhenFan(int clickedLightName); + bool MarkGroupByName(int clickedLightName,bool *bValidate); + void SetToSameIllumination(); +public: + afx_msg void OnMouseMove(UINT nFlags, CPoint point); + afx_msg void OnBnClickedCancel(); + afx_msg void OnBnClickedButtonOpen(); + afx_msg void OnBnClickedButtonSave(); + afx_msg void OnBnClickedButtonUpLoad(); + afx_msg void OnBnClickedButtonDownLoad(); + afx_msg void OnDrawListValueBkColor(NMHDR *pNmHdr, LRESULT *pResult); + afx_msg void OnBnClickedButtonReset(); + afx_msg void OnBnClickedButtonDelete(); + afx_msg void OnNMKillfocusListGetRingLightValue(); + afx_msg void OnNMDblclkListGetRingLightValue(NMHDR *pNMHDR, LRESULT *pResult); + afx_msg void OnBnClickedButtonGetLuxMeterInitValue(); + afx_msg void OnEnChangeEditWhichRingToCalibration(); + afx_msg void OnBnClickedCheckRing(); + afx_msg void OnEnChangeEditGetValueGap(); + afx_msg void OnEnChangeEditStayTime(); + afx_msg void OnEnChangeEditCalibrationStep(); + afx_msg void OnCbnSelchangeComboSelectLightType(); + afx_msg void OnTimer(UINT_PTR nIDEvent); + void UpdateLightDisplay(byte* data); + void UpdateLightMode(); + void ModifyLightMode(int iSelect); + void InitListContrl(); + void AdjustStringLength(CString &str, const int len); + void ReadIni(); + void GetCalibrationValue(const double percenValue, const int iRing, const double iCurValue); + void GetInitLuxMeterValue(const double percenValue, const int iRing, const double iCurLuxValue); + void OnBnClickedButtonCalibration(); + void GetLuxMeterInitValue(); + void GetLuxMeterInitValueForWhichLight(const double& value); + void DoLightCablication(); + void ButtonEnableWindows(BOOL bEnable); + void OnShowLuxMeterValue(); + void OnUpdataLuxMeterValue(); + void OnShowListLightValue(); + void GetCalibAfterUpdateLightValue(); + void GetListColNumAndColWidthScale(int& iListColNum, double& dScale); + void ShowWhichLightIcon(); + void SelectSixRingEightSectorLight(); + void SelectFourRoadLight(); + void SelectEightRoadLight(); + void SetLampeByOutSide(MSG_LightContent &msg,double illumination); + void SetShortcutTitle(UINT lightName); + void SetControlsIllumination(double illumination = 100.0, bool bUpdateToScrollBar = true); + void OnUpdateCtrlStatus(BOOL bEnable); + COLORREF GetBottomColor(); + COLORREF GetTopColor(); + CPoint Fan2Point(); + virtual BOOL OnInitDialog(); + virtual BOOL PreTranslateMessage(MSG* pMsg); + +public: + enum SELECT_RING_NUMBER + { + SELECT_RING_ONE = 0, + SELECT_RING_TWO, + SELECT_RING_THREE, + SELECT_RING_FOUR, + SELECT_RING_FIVE, + SELECT_RING_SIX + }; + enum SELECT_LIGHT_TYPE + { + SELECT_LIGHT_SIX_RING = 0, + SELECT_LIGHT_ROAD_FOUR, + SELECT_LIGHT_ROAD_EIGHT + }; + CButton m_btCalibration; + CButton m_btExit; + CButton m_btOpen; + CButton m_btSave; + CButton m_btReset; + CButton m_btDelete; + CButton m_btUpLoad; + CButton m_btDownLoad; + CButton m_btInitValue; + CStatic m_stTempText; + CStatic m_stIllumText; + CEdit m_edIllumValue; + CEdit m_edTempValue; + CStatic m_stLightText; + CEdit m_edLightValue; + CButton m_btCheckRing; + CEdit m_edWhichRing; + CStatic m_stValueGap; + CEdit m_edValueGap; + CStatic m_stStayTime; + CEdit m_edStayTime; + CStatic m_stCalibStep; + CEdit m_edCalibStep; + CStatic m_stLightType; + CComboBox m_comLightType; + CButton m_RingLightButtonSingle; + CButton m_RingLightButtonRing; + CButton m_RingLightButtonFan; + CButton m_RingLightButtonPie; + CButton m_LightOff; + CButton m_LightAuto; + CStatic m_TextIllumination; + CStatic m_TextLightName; + CScrollBar m_vScrollLight; + CListCtrl m_listValue; + Light m_light; + CEdit m_edtUseInputValue; + CString m_strBeforeEdit; + CString m_strSelectfilePath; + int m_nCol; + int m_nRow; + int m_iSleepTime; + int m_iCompareGap; + int m_nLastSelectFan; + int m_iCalibCurrent; + int m_iSelectLightType; + int m_iRoadBoardNum; + int m_iRingGapSleepTime; + UINT m_iLightFanTolNum; + UINT m_iLightRingTolNum; + int m_iSelctRingLightNum; + int m_iGetWhichRingForInitValue; + float m_LightIllum[6][101] = { 0 }; + float m_KeepLightIllum[6][101]; + short m_KeepLightValue[6][101]; + short m_LightValue[6][101] = { 0 }; + short WriteIllumData[6][101] = { 0 }; + int m_iRingIlluminationObj[6] = { 0 }; + int m_iRingIlluminationObjForRoad[8] = { 0 }; + bool m_bInputByUser; + bool m_bPressOpenBt; + bool m_bStopCalibration; + bool m_bCalibration; + bool m_bInitLuxValue; + bool m_bReset; + bool m_bGetSingleRingInitValue; + bool m_bUseDefaultPath; + bool m_bCheckRing; + bool m_bUpdate; + bool m_bPopUpPromptDialog; + double m_dCabStep; + double m_LuxValue; + double m_LuxTempleture; + struct Keep_Calib_Value + { + double current_LuxLight; + short current_LightValue; + }; + vector m_vGetTempValue; +}; diff --git a/PcDmis/Base/Interfac/Msi/Hsi/SevenOcean/UtilityForSo7Light/UtilityForSo7Light/res/Fan.bmp b/PcDmis/Base/Interfac/Msi/Hsi/SevenOcean/UtilityForSo7Light/UtilityForSo7Light/res/Fan.bmp new file mode 100644 index 0000000..3df441d Binary files /dev/null and b/PcDmis/Base/Interfac/Msi/Hsi/SevenOcean/UtilityForSo7Light/UtilityForSo7Light/res/Fan.bmp differ diff --git a/PcDmis/Base/Interfac/Msi/Hsi/SevenOcean/UtilityForSo7Light/UtilityForSo7Light/res/Pie.bmp b/PcDmis/Base/Interfac/Msi/Hsi/SevenOcean/UtilityForSo7Light/UtilityForSo7Light/res/Pie.bmp new file mode 100644 index 0000000..2f892c6 Binary files /dev/null and b/PcDmis/Base/Interfac/Msi/Hsi/SevenOcean/UtilityForSo7Light/UtilityForSo7Light/res/Pie.bmp differ diff --git a/PcDmis/Base/Interfac/Msi/Hsi/SevenOcean/UtilityForSo7Light/UtilityForSo7Light/res/Ring.bmp b/PcDmis/Base/Interfac/Msi/Hsi/SevenOcean/UtilityForSo7Light/UtilityForSo7Light/res/Ring.bmp new file mode 100644 index 0000000..4425205 Binary files /dev/null and b/PcDmis/Base/Interfac/Msi/Hsi/SevenOcean/UtilityForSo7Light/UtilityForSo7Light/res/Ring.bmp differ diff --git a/PcDmis/Base/Interfac/Msi/Hsi/SevenOcean/UtilityForSo7Light/UtilityForSo7Light/res/Single.bmp b/PcDmis/Base/Interfac/Msi/Hsi/SevenOcean/UtilityForSo7Light/UtilityForSo7Light/res/Single.bmp new file mode 100644 index 0000000..a30c831 Binary files /dev/null and b/PcDmis/Base/Interfac/Msi/Hsi/SevenOcean/UtilityForSo7Light/UtilityForSo7Light/res/Single.bmp differ diff --git a/PcDmis/Base/Interfac/Msi/Hsi/SevenOcean/UtilityForSo7Light/UtilityForSo7Light/res/UtilityForSo7Light.ICO b/PcDmis/Base/Interfac/Msi/Hsi/SevenOcean/UtilityForSo7Light/UtilityForSo7Light/res/UtilityForSo7Light.ICO new file mode 100644 index 0000000..e63fcac Binary files /dev/null and b/PcDmis/Base/Interfac/Msi/Hsi/SevenOcean/UtilityForSo7Light/UtilityForSo7Light/res/UtilityForSo7Light.ICO differ diff --git a/PcDmis/Base/Interfac/Msi/Hsi/SevenOcean/UtilityForSo7Light/UtilityForSo7Light/res/UtilityForSo7Light.rc2 b/PcDmis/Base/Interfac/Msi/Hsi/SevenOcean/UtilityForSo7Light/UtilityForSo7Light/res/UtilityForSo7Light.rc2 new file mode 100644 index 0000000..1e181c3 Binary files /dev/null and b/PcDmis/Base/Interfac/Msi/Hsi/SevenOcean/UtilityForSo7Light/UtilityForSo7Light/res/UtilityForSo7Light.rc2 differ diff --git a/PcDmis/Base/Interfac/Msi/Hsi/SevenOcean/UtilityForSo7Light/UtilityForSo7Light/resource.h b/PcDmis/Base/Interfac/Msi/Hsi/SevenOcean/UtilityForSo7Light/UtilityForSo7Light/resource.h new file mode 100644 index 0000000..94cc7d0 Binary files /dev/null and b/PcDmis/Base/Interfac/Msi/Hsi/SevenOcean/UtilityForSo7Light/UtilityForSo7Light/resource.h differ diff --git a/PcDmis/Base/Interfac/Msi/Hsi/SevenOcean/UtilityForSo7Light/UtilityForSo7Light/stdafx.cpp b/PcDmis/Base/Interfac/Msi/Hsi/SevenOcean/UtilityForSo7Light/UtilityForSo7Light/stdafx.cpp new file mode 100644 index 0000000..1d03404 --- /dev/null +++ b/PcDmis/Base/Interfac/Msi/Hsi/SevenOcean/UtilityForSo7Light/UtilityForSo7Light/stdafx.cpp @@ -0,0 +1,8 @@ + +// stdafx.cpp : source file that includes just the standard includes +// UtilityForSo7Light.pch will be the pre-compiled header +// stdafx.obj will contain the pre-compiled type information + +#include "stdafx.h" + + diff --git a/PcDmis/Base/Interfac/Msi/Hsi/SevenOcean/UtilityForSo7Light/UtilityForSo7Light/stdafx.h b/PcDmis/Base/Interfac/Msi/Hsi/SevenOcean/UtilityForSo7Light/UtilityForSo7Light/stdafx.h new file mode 100644 index 0000000..78cda1b --- /dev/null +++ b/PcDmis/Base/Interfac/Msi/Hsi/SevenOcean/UtilityForSo7Light/UtilityForSo7Light/stdafx.h @@ -0,0 +1,44 @@ + +// stdafx.h : include file for standard system include files, +// or project specific include files that are used frequently, +// but are changed infrequently + +#pragma once + +#ifndef VC_EXTRALEAN +#define VC_EXTRALEAN // Exclude rarely-used stuff from Windows headers +#endif + +#include "targetver.h" + +#define _ATL_CSTRING_EXPLICIT_CONSTRUCTORS // some CString constructors will be explicit + +// turns off MFC's hiding of some common and often safely ignored warning messages +#define _AFX_ALL_WARNINGS + +#include // MFC core and standard components +#include // MFC extensions + + + + + +#ifndef _AFX_NO_OLE_SUPPORT +#include // MFC support for Internet Explorer 4 Common Controls +#endif +#ifndef _AFX_NO_AFXCMN_SUPPORT +#include // MFC support for Windows Common Controls +#endif // _AFX_NO_AFXCMN_SUPPORT + +#include // MFC support for ribbons and control bars + + + + + + + + + + + diff --git a/PcDmis/Base/Interfac/Msi/Hsi/SevenOcean/UtilityForSo7Light/UtilityForSo7Light/targetver.h b/PcDmis/Base/Interfac/Msi/Hsi/SevenOcean/UtilityForSo7Light/UtilityForSo7Light/targetver.h new file mode 100644 index 0000000..87c0086 --- /dev/null +++ b/PcDmis/Base/Interfac/Msi/Hsi/SevenOcean/UtilityForSo7Light/UtilityForSo7Light/targetver.h @@ -0,0 +1,8 @@ +#pragma once + +// Including SDKDDKVer.h defines the highest available Windows platform. + +// If you wish to build your application for a previous Windows platform, include WinSDKVer.h and +// set the _WIN32_WINNT macro to the platform you wish to support before including SDKDDKVer.h. + +#include diff --git a/PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/ConsoleTestDll/ConsoleTestDll.csproj b/PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/ConsoleTestDll/ConsoleTestDll.csproj index 45edfbb..495d1d7 100644 --- a/PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/ConsoleTestDll/ConsoleTestDll.csproj +++ b/PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/ConsoleTestDll/ConsoleTestDll.csproj @@ -61,6 +61,7 @@ + diff --git a/PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/ConsoleTestDll/Program.cs b/PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/ConsoleTestDll/Program.cs index 4e49618..184b63a 100644 --- a/PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/ConsoleTestDll/Program.cs +++ b/PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/ConsoleTestDll/Program.cs @@ -8,6 +8,29 @@ namespace ConsoleTestDll class Program { static void Main(string[] args) + { + Test_RS232(); + } + static void Test_RS232() + { + IntPtr hwnd = (IntPtr)0; + Console.WriteLine("init_rs232."); + var rStatus = RS232_API.init_rs232(hwnd, 1, 2400); + Console.WriteLine("RStatus:{0}", rStatus); + Console.WriteLine("Press any key to next step..."); + Console.ReadLine(); + byte[] buf = { 3, 1, 13 }; + Console.WriteLine("Led:Green"); + RS232_API.Write_Com(buf, 3); + Console.WriteLine("Press any key to next step..."); + Console.ReadLine(); + buf[1] = 2; + Console.WriteLine("Led:Red"); + RS232_API.Write_Com(buf, 3); + Console.WriteLine("Press any key to exit..."); + Console.ReadLine(); + } + static void Test_MachineInterface() { MACHINEINTERFACEDLL.SSI_STATUS_MOTION rStatus; Console.WriteLine("Machine_Startup."); @@ -24,7 +47,7 @@ namespace ConsoleTestDll Console.WriteLine("IOStatus:"); for (i = 0; i < 6; i++) { - iComp2=iComp1 << i; + iComp2 = iComp1 << i; if ((bDISts & iComp2) == iComp2) { IOStatus = true; diff --git a/PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/ConsoleTestDll/RS232.cs b/PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/ConsoleTestDll/RS232.cs new file mode 100644 index 0000000..18dc162 --- /dev/null +++ b/PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/ConsoleTestDll/RS232.cs @@ -0,0 +1,21 @@ +using System; +using System.Collections.Generic; +using System.Text; +using System.Runtime.InteropServices; + +namespace Sys +{ + public partial class RS232_API + { + [DllImport("RS232_DLL.dll", EntryPoint = "init_rs232", + SetLastError = true, CharSet = CharSet.Unicode, + ExactSpelling = true, CallingConvention = CallingConvention.Cdecl)] + public static extern bool init_rs232(IntPtr hwnd, UInt16 com_type, UInt16 baud); + + [DllImport("RS232_DLL.dll", EntryPoint = "Write_Com", + SetLastError = true, CharSet = CharSet.Unicode, + ExactSpelling = true, CallingConvention = CallingConvention.Cdecl)] + public static extern void Write_Com(byte[] Str, int len); + + } +} \ No newline at end of file diff --git a/PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/Debug/UtilityDebug.Log b/PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/Debug/UtilityDebug.Log deleted file mode 100644 index c3fb92f..0000000 --- a/PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/Debug/UtilityDebug.Log +++ /dev/null @@ -1,4786 +0,0 @@ -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Destruct Csmartmotor_Proto. -Destruct Csmartmotor_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Init:Open device succeed . -_start_machine -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Unable to open device _start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Destruct Cso7_Proto. -Destruct Csmartmotor_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Init:Open device succeed . -_start_machine -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Init:Open device succeed . -_start_machine -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Init:Open device succeed . -_start_machine -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Destruct Cso7_Proto. -Construct Cso7_Proto. -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Destruct Cso7_Proto. -Construct Cso7_Proto. -Destruct Cso7_Proto. -Construct Cso7_Proto. -Destruct Cso7_Proto. -Construct Cso7_Proto. -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Destruct Cso7_Proto. -Construct Cso7_Proto. -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Destruct Cso7_Proto. -Construct Cso7_Proto. -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Destruct Cso7_Proto. -Construct Cso7_Proto. -Destruct Cso7_Proto. -Construct Cso7_Proto. -Destruct Cso7_Proto. -Construct Cso7_Proto. -Destruct Cso7_Proto. -Construct Cso7_Proto. -Destruct Cso7_Proto. -Construct Cso7_Proto. -Destruct Cso7_Proto. -Construct Cso7_Proto. -Destruct Cso7_Proto. -Construct Cso7_Proto. -Destruct Cso7_Proto. -Construct Cso7_Proto. -Destruct Cso7_Proto. -Construct Cso7_Proto. -Destruct Cso7_Proto. -Construct Cso7_Proto. -Destruct Cso7_Proto. -Construct Cso7_Proto. -Destruct Cso7_Proto. -Construct Cso7_Proto. -Destruct Cso7_Proto. -Construct Cso7_Proto. -Destruct Cso7_Proto. -Construct Cso7_Proto. -Destruct Cso7_Proto. -Construct Cso7_Proto. -Destruct Cso7_Proto. -Construct Cso7_Proto. -Destruct Cso7_Proto. -Construct Cso7_Proto. -Destruct Cso7_Proto. -Construct Cso7_Proto. -Destruct Cso7_Proto. -Construct Cso7_Proto. -Destruct Cso7_Proto. -Construct Cso7_Proto. -Destruct Cso7_Proto. -Construct Cso7_Proto. -Destruct Cso7_Proto. -Construct Cso7_Proto. -Destruct Cso7_Proto. -Construct Cso7_Proto. -Destruct Cso7_Proto. -Construct Cso7_Proto. -Destruct Cso7_Proto. -Construct Cso7_Proto. -Destruct Cso7_Proto. -Construct Cso7_Proto. -Destruct Cso7_Proto. -Construct Cso7_Proto. -Destruct Cso7_Proto. -Construct Cso7_Proto. -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Destruct Cso7_Proto. -Construct Cso7_Proto. -Destruct Cso7_Proto. -Construct Cso7_Proto. -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Destruct Cso7_Proto. -Construct Cso7_Proto. -Destruct Cso7_Proto. -Construct Cso7_Proto. -Destruct Cso7_Proto. -Construct Cso7_Proto. -Destruct Cso7_Proto. -Construct Cso7_Proto. -Destruct Cso7_Proto. -Construct Cso7_Proto. -Destruct Cso7_Proto. -Construct Cso7_Proto. -Destruct Cso7_Proto. -Construct Cso7_Proto. -Destruct Cso7_Proto. -Construct Cso7_Proto. -Destruct Cso7_Proto. -Construct Cso7_Proto. -Destruct Cso7_Proto. -Construct Cso7_Proto. -Destruct Cso7_Proto. -Construct Cso7_Proto. -Destruct Cso7_Proto. -Construct Cso7_Proto. -Destruct Cso7_Proto. -Construct Cso7_Proto. -Construct Cso7_Proto. -Destruct Cso7_Proto. -Construct Cso7_Proto. -Destruct Cso7_Proto. -Construct Cso7_Proto. -Destruct Cso7_Proto. -Construct Cso7_Proto. -Destruct Cso7_Proto. -Construct Cso7_Proto. -Destruct Cso7_Proto. -Construct Cso7_Proto. -Destruct Cso7_Proto. -Construct Cso7_Proto. -Destruct Cso7_Proto. -Construct Cso7_Proto. -Destruct Cso7_Proto. -Construct Cso7_Proto. -Destruct Cso7_Proto. -Construct Cso7_Proto. -Destruct Cso7_Proto. -Construct Cso7_Proto. -Destruct Cso7_Proto. -Construct Cso7_Proto. -Destruct Cso7_Proto. -Construct Cso7_Proto. -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Destruct Cso7_Proto. -Construct Cso7_Proto. -Destruct Cso7_Proto. -Construct Cso7_Proto. -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Destruct Cso7_Proto. -Construct Cso7_Proto. -Destruct Cso7_Proto. -Construct Cso7_Proto. -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Destruct Cso7_Proto. -Construct Cso7_Proto. -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Destruct Cso7_Proto. -Construct Cso7_Proto. -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Destruct Cso7_Proto. -Construct Cso7_Proto. -Destruct Cso7_Proto. -Construct Cso7_Proto. -Destruct Cso7_Proto. -Construct Cso7_Proto. -Destruct Cso7_Proto. -Construct Cso7_Proto. -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Destruct Cso7_Proto. -Construct Cso7_Proto. -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Unable to open device Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Unable to open device Init:Open device succeed . -_start_machine -Destruct Cso7_Proto. -Construct Cso7_Proto. -Unable to open device Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Unable to open device Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Unable to open device Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Unable to open device Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Unable to open device Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Unable to open device Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Init:Open device succeed . -_start_machine -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Init:Open device succeed . -_start_machine -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Init:Open device succeed . -_start_machine -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Destruct Cso7_Proto. -Construct Cso7_Proto. -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Unable to open device Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Unable to open device Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Init:Open device succeed . -_start_machine -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Construct Cso7_Proto. -Unable to open device Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Init:Open device succeed . -_start_machine -Construct Cso7_Proto. -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Init:Open device succeed . -_start_machine -Construct Cso7_Proto. -Unable to open device Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Construct Cso7_Proto. -Unable to open device Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Init:Open device succeed . -_start_machine -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Construct Cso7_Proto. -Construct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -so7_motion_reset_worktable_lower_left. -[679]waiting for X,Y,Zm to stop moving -Home succeed. -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Unable to open device Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Init:Open device succeed . -_start_machine -so7_motion_reset_worktable_lower_left. -[686]waiting for X,Y,Zm to stop moving -Home succeed. -Exit: Exit_SO7Usb -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Construct Cso7_Proto. -Unable to open device Init:Open device succeed . -_start_machine -Unable to open device Init:Open device succeed . -_start_machine -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Construct Cso7_Proto. -Unable to open device Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Init:Open device succeed . -_start_machine -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Unable to open device Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Destruct Cso7_Proto. -Construct Cso7_Proto. -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Init:Open device succeed . -_start_machine -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Destruct Cso7_Proto. -Construct Cso7_Proto. -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Construct Cso7_Proto. -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Unable to open device Init:Open device succeed . -Construct Cso7_Proto. -Unable to open device Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -Unable to open device Init:Open device succeed . -Destruct Cso7_Proto. -Construct Cso7_Proto. -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Construct Cso7_Proto. -Destruct Cso7_Proto. -Construct Cso7_Proto. -Destruct Cso7_Proto. -Construct Cso7_Proto. -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -Construct Cso7_Proto. -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -Construct Cso7_Proto. -Destruct Cso7_Proto. -Construct Cso7_Proto. -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -Construct Cso7_Proto. -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Unable to open device Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Construct Cso7_Proto. -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -Destruct Cso7_Proto. -Construct Cso7_Proto. -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -Exit: Exit_SO7Usb -Construct Cso7_Proto. -Init:Open device succeed . -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -Exit: Exit_SO7Usb -Construct Cso7_Proto. -Init:Open device succeed . -Exit: Exit_SO7Usb -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Construct Cso7_Proto. -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -Construct Cso7_Proto. -Init:Open device succeed . -Exit: Exit_SO7Usb -Construct Cso7_Proto. -Init:Open device succeed . -Exit: Exit_SO7Usb -Construct Cso7_Proto. -Init:Open device succeed . -Exit: Exit_SO7Usb -Init:Open device succeed . -Exit: Exit_SO7Usb -Construct Cso7_Proto. -Init:Open device succeed . -Exit: Exit_SO7Usb -Construct Cso7_Proto. -Unable to open device Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Unable to open device Init:Open device succeed . -Exit: Exit_SO7Usb -Unable to open device Init:Open device succeed . -Exit: Exit_SO7Usb -Construct Cso7_Proto. -Destruct Cso7_Proto. -Construct Cso7_Proto. -Construct Cso7_Proto. -Unable to open device Init:Open device succeed . -Unable to open device Init:Open device succeed . -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -Exit: Exit_SO7Usb -Init:Open device succeed . -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Unable to open device Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Unable to open device Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Unable to open device Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Unable to open device Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Unable to open device Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Usb Port Initialized. -Usb Port Initialized. -Usb Port Initialized. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Construct Cso7_Proto. -Init:Open device succeed . -_start_machine -Exit: Exit_SO7Usb -Destruct Cso7_Proto. -Usb Port Initialized. -Usb Port Initialized. -Usb Port Initialized. -Usb Port Initialized. -Usb Port Initialized. -Usb Port Initialized. -Usb Port Initialized. -Usb Port Initialized. -Usb Port Initialized. -Usb Port Initialized. -Usb Port Initialized. -Usb Port Initialized. -Usb Port Initialized. -Usb Port Initialized. -Usb Port Initialized. -Usb Port Initialized. -Usb Port Initialized. -Usb Port Initialized. -Usb Port Initialized. -Usb Port Initialized. -Usb Port Initialized. -Usb Port Initialized. -Usb Port Initialized. -Usb Port Initialized. -Usb Port Initialized. -Usb Port Initialized. -Usb Port Initialized. -Usb Port Initialized. -Usb Port Initialized. -Usb Port Initialized. -Usb Port Initialized. -Usb Port Initialized. -Usb Port Initialized. -Usb Port Initialized. -Usb Port Initialized. -Usb Port Initialized. -Usb Port Initialized. -Usb Port Initialized. -Usb Port Initialized. -Usb Port Initialized. -Usb Port Initialized. -Usb Port Initialized. -Usb Port Initialized. -Usb Port Initialized. -Usb Port Initialized. -Usb Port Initialized. -Usb Port Initialized. -Usb Port Initialized. -Usb Port Initialized. -Usb Port Initialized. -Usb Port Initialized. -Usb Port Initialized. -Usb Port Initialized. -Usb Port Initialized. -Usb Port Initialized. -Usb Port Initialized. -Usb Port Initialized. -Usb Port Initialized. -Usb Port Initialized. -Usb Port Initialized. -Usb Port Initialized. -Usb Port Initialized. -Usb Port Initialized. -Usb Port Initialized. -Usb Port Initialized. -Usb Port Initialized. -Usb Port Initialized. -Usb Port Initialized. -Usb Port Initialized. -Usb Port Initialized. -Usb Port Initialized. -Usb Port Initialized. -Usb Port Initialized. -Usb Port Initialized. -Usb Port Initialized. -Usb Port Initialized. -Usb Port Initialized. -Usb Port Initialized. -Usb Port Initialized. -Usb Port Initialized. -Usb Port Initialized. -Usb Port Initialized. -Usb Port Initialized. -Usb Port Initialized. -Usb Port Initialized. -Usb Port Initialized. -Usb Port Initialized. -Usb Port Initialized. -Usb Port Initialized. -Usb Port Initialized. -Usb Port Initialized. -Usb Port Initialized. -Usb Port Initialized. -Usb Port Initialized. -Usb Port Initialized. -Usb Port Initialized. -Usb Port Initialized. -Usb Port Initialized. -Usb Port Initialized. -Usb Port Initialized. -Usb Port Initialized. -Usb Port Initialized. -Usb Port Initialized. -Usb Port Initialized. -Usb Port Initialized. -Usb Port Initialized. -Usb Port Initialized. -Usb Port Initialized. -Usb Port Initialized. -Usb Port Initialized. -Usb Port Initialized. -Usb Port Initialized. -Usb Port Initialized. -Usb Port Initialized. -Usb Port Initialized. -Usb Port Initialized. -Usb Port Initialized. -Usb Port Initialized. -Usb Port Initialized. -Usb Port Initialized. -Usb Port Initialized. -Usb Port Initialized. -Usb Port Initialized. -Usb Port Initialized. -Usb Port Initialized. -Usb Port Initialized. -Usb Port Initialized. -Usb Port Initialized. -Usb Port Initialized. -Usb Port Initialized. -Usb Port Initialized. -Usb Port Initialized. -Usb Port Initialized. -Usb Port Initialized. -Usb Port Initialized. -Usb Port Initialized. -Usb Port Initialized. -Usb Port Initialized. -Usb Port Initialized. -Usb Port Initialized. -Usb Port Initialized. -Usb Port Initialized. -Usb Port Initialized. -Usb Port Initialized. -Usb Port Initialized. -Usb Port Initialized. -Usb Port Initialized. -Usb Port Initialized. -Usb Port Initialized. -Usb Port Initialized. -Usb Port Initialized. -Usb Port Initialized. -Usb Port Initialized. -Usb Port Initialized. -Usb Port Initialized. -Usb Port Initialized. -Usb Port Initialized. -Usb Port Initialized. -Usb Port Initialized. -Usb Port Initialized. -Usb Port Initialized. -Usb Port Initialized. -Usb Port Initialized. -Usb Port Initialized. -Usb Port Initialized. -Usb Port Initialized. -Usb Port Initialized. -Usb Port Initialized. -Usb Port Initialized. -Usb Port Initialized. -Usb Port Initialized. -Usb Port Initialized. -Usb Port Initialized. -Usb Port Initialized. -Usb Port Initialized. -Usb Port Initialized. -Usb Port Initialized. -Usb Port Initialized. -Usb Port Initialized. -Usb Port Initialized. -Usb Port Initialized. -Usb Port Initialized. -Usb Port Initialized. -Usb Port Initialized. -Usb Port Initialized. -Usb Port Initialized. -Usb Port Initialized. -Usb Port Initialized. -Usb Port Initialized. -Usb Port Initialized. -Usb Port Initialized. -Usb Port Initialized. -Usb Port Initialized. -Usb Port Initialized. -Usb Port Initialized. -Usb Port Initialized. -Usb Port Initialized. -Usb Port Initialized. -Usb Port Initialized. -Usb Port Initialized. -Usb Port Initialized. -Usb Port Initialized. -Usb Port Initialized. -Usb Port Initialized. -Usb Port Initialized. -Usb Port Initialized. -Usb Port Initialized. -Usb Port Initialized. -Usb Port Initialized. -Usb Port Initialized. -Usb Port Initialized. -Usb Port Initialized. -Usb Port Initialized. -Usb Port Initialized. -Usb Port Initialized. -Usb Port Initialized. -Usb Port Initialized. -Usb Port Initialized. -Usb Port Initialized. -Usb Port Initialized. -Usb Port Initialized. -Usb Port Initialized. diff --git a/PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/Debug/Utility_Config.ini b/PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/Debug/Utility_Config.ini deleted file mode 100644 index e618f98..0000000 --- a/PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/Debug/Utility_Config.ini +++ /dev/null @@ -1,127 +0,0 @@ -[HARDWARE] -MOVETOSPEED_FAST_X=0.00000000 -MOVETOSPEED_SLOW_X=0.00000000 -MOVETOSPEED_SCALE_X=1.00000000 -; -MOVETOSPEED_FAST_Y=0.00000000 -MOVETOSPEED_SLOW_Y=0.00000000 -MOVETOSPEED_SCALE_Y=1.00000000 -; -MOVETOSPEED_FAST_Z=0.00000000 -MOVETOSPEED_SLOW_Z=0.00000000 -MOVETOSPEED_SCALE_Z=1.00000000 -; -SPEED_BASE_X1=28 -SPEED_MAX_X1=30 -SPEED_START_X1=20 -SPEED_FRESH_X1=8 -SPEED_SLOW_X1=3.000 -; -SPEED_BASE_X2=16 -SPEED_MAX_X2=10 -SPEED_START_X2=12 -SPEED_FRESH_X2=10 -SPEED_SLOW_X2=2.000 -; -SPEED_BASE_X3=2 -SPEED_MAX_X3=0 -SPEED_START_X3=8 -SPEED_FRESH_X3=10 -SPEED_SLOW_X3=0.050 -; -SPEED_BASE_X4=2 -SPEED_MAX_X4=0 -SPEED_START_X4=5 -SPEED_FRESH_X4=10 -SPEED_SLOW_X4=0.009 -; -SPEED_BASE_X5=2 -SPEED_MAX_X5=0 -SPEED_START_X5=50 -SPEED_FRESH_X5=10 -SPEED_SLOW_X5=0.100 -; -SPEED_BASE_Y1=20 -SPEED_MAX_Y1=10 -SPEED_START_Y1=20 -SPEED_FRESH_Y1=8 -SPEED_SLOW_Y1=2.000 -; -SPEED_BASE_Y2=16 -SPEED_MAX_Y2=10 -SPEED_START_Y2=12 -SPEED_FRESH_Y2=10 -SPEED_SLOW_Y2=1.000 -; -SPEED_BASE_Y3=2 -SPEED_MAX_Y3=0 -SPEED_START_Y3=8 -SPEED_FRESH_Y3=10 -SPEED_SLOW_Y3=0.050 -; -SPEED_BASE_Y4=0 -SPEED_MAX_Y4=0 -SPEED_START_Y4=10 -SPEED_FRESH_Y4=10 -SPEED_SLOW_Y4=0.009 -; -SPEED_BASE_Y5=1 -SPEED_MAX_Y5=0 -SPEED_START_Y5=50 -SPEED_FRESH_Y5=10 -SPEED_SLOW_Y5=0.100 -; -SPEED_BASE_Z1=20 -SPEED_MAX_Z1=100 -SPEED_START_Z1=150 -SPEED_FRESH_Z1=8 -SPEED_SLOW_Z1=2.500 -; -SPEED_BASE_Z2=16 -SPEED_MAX_Z2=10 -SPEED_START_Z2=100 -SPEED_FRESH_Z2=10 -SPEED_SLOW_Z2=1.500 -; -SPEED_BASE_Z3=3 -SPEED_MAX_Z3=5 -SPEED_START_Z3=5 -SPEED_FRESH_Z3=10 -SPEED_SLOW_Z3=0.100 -; -SPEED_BASE_Z4=0 -SPEED_MAX_Z4=0 -SPEED_START_Z4=18 -SPEED_FRESH_Z4=10 -SPEED_SLOW_Z4=0.009 -; -SPEED_BASE_Z5=5 -SPEED_MAX_Z5=6 -SPEED_START_Z5=133 -SPEED_FRESH_Z5=10 -SPEED_SLOW_Z5=0.100 -; -X_MOTOR_PRECISION=0.004 -Y_MOTOR_PRECISION=0.008 -Z_MOTOR_PRECISION=0.004 -; -X_MOTOR_WHEELBASE=1.500 -Y_MOTOR_WHEELBASE=1.500 -Z_MOTOR_WHEELBASE=1.500 -; -MOTOR_PULSE_NUM=10000 -; -[WORKTABLE] -X_SCALE_RESOLUTION=0.500 -Y_SCALE_RESOLUTION=0.500 -Z_SCALE_RESOLUTION=0.500 -; -X_NEG_WORKING_LIMIT=0.000 -Y_NEG_WORKING_LIMIT=0.000 -Z_NEG_WORKING_LIMIT=0.000 -; -X_POS_WORKING_LIMIT=200.000 -Y_POS_WORKING_LIMIT=100.000 -Z_POS_WORKING_LIMIT=200.000 -ROTARY_CIR_DIS=100.000 -; diff --git a/PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/Debug/smartmotor_config.ini b/PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/Debug/smartmotor_config.ini deleted file mode 100644 index 7cf1953..0000000 --- a/PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/Debug/smartmotor_config.ini +++ /dev/null @@ -1,74 +0,0 @@ -[HARDWARE] -SPEED_X1=10000 -ACCELERATION_X1=50 -DECELERATION_X1=50 -; -SPEED_X2=100000 -ACCELERATION_X2=100 -DECELERATION_X2=100 -; -SPEED_X3=500000 -ACCELERATION_X3=200 -DECELERATION_X3=200 -; -SPEED_X4=1000000 -ACCELERATION_X4=300 -DECELERATION_X4=300 -; -SPEED_X5=0 -ACCELERATION_X5=0 -DECELERATION_X5=0 -; -SPEED_Y1=10000 -ACCELERATION_Y1=50 -DECELERATION_Y1=50 -; -SPEED_Y2=100000 -ACCELERATION_Y2=100 -DECELERATION_Y2=100 -; -SPEED_Y3=500000 -ACCELERATION_Y3=200 -DECELERATION_Y3=200 -; -SPEED_Y4=1000000 -ACCELERATION_Y4=300 -DECELERATION_Y4=300 -; -SPEED_Y5=0 -ACCELERATION_Y5=0 -DECELERATION_Y5=0 -; -SPEED_Z1=10000 -ACCELERATION_Z1=50 -DECELERATION_Z1=50 -; -SPEED_Z2=100000 -ACCELERATION_Z2=100 -DECELERATION_Z2=100 -; -SPEED_Z3=500000 -ACCELERATION_Z3=200 -DECELERATION_Z3=200 -; -SPEED_Z4=1000000 -ACCELERATION_Z4=300 -DECELERATION_Z4=300 -; -SPEED_Z5=0 -ACCELERATION_Z5=0 -DECELERATION_Z5=0 -; -[WORKTABLE] -X_SCALE_RESOLUTION=0.400 -Y_SCALE_RESOLUTION=0.400 -Z_SCALE_RESOLUTION=0.400 -; -X_NEG_WORKING_LIMIT=0.000 -Y_NEG_WORKING_LIMIT=0.000 -Z_NEG_WORKING_LIMIT=0.000 -; -X_POS_WORKING_LIMIT=200.000 -Y_POS_WORKING_LIMIT=200.000 -Z_POS_WORKING_LIMIT=200.000 -; diff --git a/PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/Debug/so7_config.ini b/PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/Debug/so7_config.ini deleted file mode 100644 index 74ce98e..0000000 --- a/PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/Debug/so7_config.ini +++ /dev/null @@ -1,45 +0,0 @@ -[7OCEANAUTOZOOM] -ZOOM_PRODUCT_ID=So7123456 -ZOOM_COM_PORT=1 -ZOOM_START_DEG=89.9955 -ZOOM_END_DEG=89.9955 -ZOOM_ORG_DEG=360 -ZOOM_DEADBAND_DEG=0.100000 -ZOOM_PULSE_PER_DEG=25.134736064968621 -ZOOM_READING_INTERVAL_TIME=60 -ZOOM_MOTOR_SPEED_FAST=2000 -ZOOM_MOTOR_SPEED_SLOW=800 -; -[CONTROLLER] -CLOSE_LOOP_ENABLED=0 -MOTION_RETRY_TIMES=5 -SHIFT_POSITION_X=0.000000 -SHIFT_POSITION_Y=0.000000 -SHIFT_POSITION_Z=0.000000 -GET_USB_MESSAGE_METHOD=1 -WRITE_DATA_SLEEP_TIME=5 -ACCURA_ERROR_PULSE_X=1 -ACCURA_ERROR_PULSE_Y=1 -ACCURA_ERROR_PULSE_Z=1 -EQUIDISTANCE_PULSE_X=0 -EQUIDISTANCE_PULSE_Y=0 -EQUIDISTANCE_PULSE_Z=0 -CNC_DEADLOCK_SOLUTION=1 -CNC_DEADLOCK_MAX_CNTS=6 -TOUCH_PROBE_ENABLE=0 -FOOT_SWITCH_ENABLE=0 -JOYSTICK_ENABLE=0 -CCS_PRIMA_ENABLE=0 -DEBUG_LOG_ENABLE=0 -; -[VIDEOCARD] -SDK3000_SLEEP_COUNT=555555 -SV4000E_DENOISE_PARA_CHANNEL1=70 -SV4000E_DENOISE_PARA_CHANNEL2=70 -SV4000E_DENOISE_PARA_CHANNEL3=70 -SV4000E_DENOISE_PARA_CHANNEL4=70 -; -[HSI] -MACHINE_CONTROLLER_TYPE=0 -MACHINE_VIDEOCARD_TYPE=0 -; diff --git a/PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/HSI_ADT_8949/HSI.cpp b/PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/HSI_ADT_8949/HSI.cpp new file mode 100644 index 0000000..46eb946 --- /dev/null +++ b/PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/HSI_ADT_8949/HSI.cpp @@ -0,0 +1,734 @@ +#include "stdafx.h" +#include "..\..\..\..\Hsi\HSI.h" +#include "HSI_Motion.h" +#include "HSI_ADT_8949.h" +#include "adt8949.h" + +#ifdef _DEBUG +#define new DEBUG_NEW +#endif + +static HWND g_hWnd = nullptr; +static bool g_bOfflineOnly = false; + + +//=========================================================================== +HSI_API HSI_STATUS WINAPI HSI_GET_INTERFACE_VERSION(UINT &APIVersionMajor, UINT &APIVersionMinor) +{ + APIVersionMajor = HSI_APIVersionMajor; + APIVersionMinor = HSI_APIVersionMinor; + return HSI_STATUS_NORMAL; +} +//=========================================================================== +HSI_API HSI_STATUS WINAPI HSI_STARTUP(HWND _hWnd, bool _bOfflineOnly) +{ + auto rStatus = HSI_STATUS_NORMAL; + if (!g_pHSI_ADT_8949) + { + g_pHSI_ADT_8949 = new HSI_ADT_8949(); + } + if (g_pHSI_ADT_8949) + { + g_pHSI_ADT_8949->Startup(_hWnd, _bOfflineOnly); + } + else + { + rStatus = HSI_STATUS_FAILED; + } + g_hWnd = _hWnd; + g_bOfflineOnly = _bOfflineOnly; + return rStatus; +} +//=========================================================================== +HSI_API HSI_STATUS WINAPI HSI_GET_MACHINE_INFO(int &_NumMachineTypes) +{ + auto rStatus = HSI_STATUS_NORMAL; + if (g_pHSI_ADT_8949) + { + rStatus = g_pHSI_ADT_8949->GetMachineInfo(_NumMachineTypes); + } + else + { + rStatus = HSI_STATUS_FAILED; + } + return rStatus; +} +//=========================================================================== +HSI_API HSI_STATUS WINAPI HSI_SET_EVENT_CALLBACK(pEventCallback _pCallback) +{ + auto rStatus = HSI_STATUS_NORMAL; + if (g_pHSI_ADT_8949) + { + rStatus = g_pHSI_ADT_8949->SetEventCallback(_pCallback); + } + else + { + rStatus = HSI_STATUS_FAILED; + } + return rStatus; +} +//=========================================================================== +HSI_API HSI_STATUS WINAPI HSI_SHUTDOWM() +{ + auto rStatus = HSI_STATUS_NORMAL; + if (g_pHSI_Motion) + { + rStatus = g_pHSI_Motion->Shutdown(); + delete g_pHSI_Motion; + g_pHSI_Motion = nullptr; + } + if (g_pHSI_ADT_8949) + { + g_pHSI_ADT_8949->Shutdown(); + delete g_pHSI_ADT_8949; + g_pHSI_ADT_8949 = nullptr; + } + if (g_pLogger) + { + delete g_pLogger; + g_pLogger = NULL; + } + if (g_pLogger3) + { + delete g_pLogger3; + g_pLogger3 = NULL; + } + return rStatus; +} +//=========================================================================== +HSI_API HSI_STATUS WINAPI HSI_MOTION_IS_SUPPORTED(UINT &Types) +{ + auto rStatus = HSI_STATUS_NORMAL; + if (g_bOfflineOnly == 0) + { + if (!g_pHSI_Motion) + { + g_pHSI_Motion = new HSI_Motion(); + } + if (g_pHSI_Motion) + { + rStatus = g_pHSI_Motion->IsSupported(Types); + } + else + { + rStatus = HSI_STATUS_FAILED; + } + } + return rStatus; +} +//=========================================================================== +HSI_API HSI_STATUS WINAPI HSI_MOTION_STARTUP(bool bHome) +{ + auto rStatus = HSI_STATUS_NORMAL; + if (g_bOfflineOnly == 0) + { + if (!g_pHSI_Motion) + { + g_pHSI_Motion = new HSI_Motion(); + } + if (g_pHSI_Motion && g_pHSI_ADT_8949) + { + rStatus = g_pHSI_Motion->Startup(g_hWnd, g_bOfflineOnly); + if (rStatus == HSI_STATUS_FAILED) + { + return HSI_STATUS_FAILED; + } + rStatus = g_pHSI_Motion->HomeMachine(bHome); + } + else + { + rStatus = HSI_STATUS_FAILED; + } + } + return rStatus; +} +//=========================================================================== +HSI_API HSI_STATUS WINAPI HSI_MOTION_IS_HOMED(bool &bHomed) +{ + auto rStatus = HSI_STATUS_NORMAL; + if (g_pHSI_Motion) + { + rStatus = g_pHSI_Motion->IsHomed(bHomed); + } + else + { + rStatus = HSI_STATUS_FAILED; + } + return rStatus; +} +//=========================================================================== +HSI_API HSI_STATUS WINAPI HSI_MOTION_GET_SPEED_XYZ(double &Speed) +{ + auto rStatus = HSI_STATUS_NORMAL; + if (g_pHSI_Motion) + { + rStatus = g_pHSI_Motion->GetSpeedXyz(Speed); + } + else + { + rStatus = HSI_STATUS_FAILED; + } + return rStatus; +} +//=========================================================================== +HSI_API HSI_STATUS WINAPI HSI_MOTION_SET_SPEED_XYZ(double Speed) +{ + auto rStatus = HSI_STATUS_NORMAL; + if (g_pHSI_Motion) + { + rStatus = g_pHSI_Motion->SetSpeedXyz(Speed); + } + else + { + rStatus = HSI_STATUS_FAILED; + } + return rStatus; +} +//=========================================================================== +HSI_API HSI_STATUS WINAPI HSI_MOTION_GET_ACCELERATION_XYZ(double &AccelX, double &AccelY, double &AccelZ) +{ + auto rStatus = HSI_STATUS_NORMAL; + if (g_pHSI_Motion) + { + rStatus = g_pHSI_Motion->GetAccelerationXyz(AccelX, AccelY, AccelZ); + } + else + { + rStatus = HSI_STATUS_FAILED; + } + return rStatus; +} +//=========================================================================== +HSI_API HSI_STATUS WINAPI HSI_MOTION_SET_ACCELERATION_XYZ(double AccelX, double AccelY, double AccelZ) +{ + auto rStatus = HSI_STATUS_NORMAL; + if (g_pHSI_Motion) + { + rStatus = g_pHSI_Motion->SetAccelerationXyz(AccelX, AccelY, AccelZ); + } + else + { + rStatus = HSI_STATUS_FAILED; + } + return rStatus; +} +//=========================================================================== +HSI_API HSI_STATUS WINAPI HSI_MOTION_GET_SPEED_R(double &Speed) +{ + UNREFERENCED_PARAMETER(Speed); + return HSI_STATUS_NOT_SUPPORTED; +} +//=========================================================================== +HSI_API HSI_STATUS WINAPI HSI_MOTION_SET_SPEED_R(double Speed) +{ + UNREFERENCED_PARAMETER(Speed); + return HSI_STATUS_NOT_SUPPORTED; +} +//=========================================================================== +HSI_API HSI_STATUS WINAPI HSI_MOTION_GET_ACCELERATION_R(double &AccelR) +{ + auto rStatus = HSI_STATUS_NORMAL; + UNREFERENCED_PARAMETER(AccelR); + return rStatus; +} +//=========================================================================== +HSI_API HSI_STATUS WINAPI HSI_MOTION_SET_ACCELERATION_R(double AccelR) +{ + auto rStatus = HSI_STATUS_NORMAL; + UNREFERENCED_PARAMETER(AccelR); + return rStatus; +} +//=========================================================================== +HSI_API HSI_STATUS WINAPI HSI_MOTION_GET_SCALE_RESOLUTION(double &ScaleX, double &ScaleY, double &ScaleZ) +{ + auto rStatus = HSI_STATUS_NORMAL; + if (g_pHSI_Motion) + { + rStatus = g_pHSI_Motion->GetScaleResolution(ScaleX, ScaleY, ScaleZ); + } + else + { + rStatus = HSI_STATUS_FAILED; + } + return rStatus; +} +//=========================================================================== +HSI_API HSI_STATUS WINAPI HSI_MOTION_SET_SCALE_RESOLUTION(double ScaleX, double ScaleY, double ScaleZ) +{ + auto rStatus = HSI_STATUS_NORMAL; + if (g_pHSI_Motion) + { + rStatus = g_pHSI_Motion->SetScaleResolution(ScaleX, ScaleY, ScaleZ); + } + else + { + rStatus = HSI_STATUS_FAILED; + } + return rStatus; +} +//=========================================================================== +HSI_API HSI_STATUS WINAPI HSI_MOTION_GET_DEADBAND(double &DeadbandX, double &DeadbandY, double &DeadbandZ, double &DeadbandR) +{ + UNREFERENCED_PARAMETER(DeadbandX); + UNREFERENCED_PARAMETER(DeadbandY); + UNREFERENCED_PARAMETER(DeadbandZ); + UNREFERENCED_PARAMETER(DeadbandR); + return HSI_STATUS_NOT_SUPPORTED; +} +//=========================================================================== +HSI_API HSI_STATUS WINAPI HSI_MOTION_GET_REFRESH_DEADBAND(double &Deadband) +{ + UNREFERENCED_PARAMETER(Deadband); + return HSI_STATUS_NOT_SUPPORTED; +} +//=========================================================================== +HSI_API HSI_STATUS WINAPI HSI_MOTION_JOG(UINT AxisTypes, double Speed) +{ + auto rStatus = HSI_STATUS_NORMAL; + if (g_pHSI_Motion) + { + rStatus = g_pHSI_Motion->Jog(AxisTypes, Speed); + } + else + { + rStatus = HSI_STATUS_FAILED; + } + return rStatus; +} +//=========================================================================== +HSI_API HSI_STATUS WINAPI HSI_MOTION_STOP_JOG() +{ + auto rStatus = HSI_STATUS_NORMAL; + if (g_pHSI_Motion) + { + rStatus = g_pHSI_Motion->StopJog(); + } + else + { + rStatus = HSI_STATUS_FAILED; + } + return rStatus; +} +//=========================================================================== +HSI_API HSI_STATUS WINAPI HSI_MOTION_GET_ENCPRF_MULTI(UINT AxisTypes, double *EncPos, double *PrfPos, int Count) +{ + auto rStatus = HSI_STATUS_NORMAL; + if (g_pHSI_Motion) + { + rStatus = g_pHSI_Motion->GetPositionEncPrfMulti(AxisTypes, EncPos, PrfPos, Count); + } + else + { + rStatus = HSI_STATUS_FAILED; + } + return rStatus; +} +//=========================================================================== +HSI_API HSI_STATUS WINAPI HSI_MOTION_GET_POSITION_XYZ(UINT AxisTypes, double &PositionX, double &PositionY, double &PositionZ, double &Time) +{ + auto rStatus = HSI_STATUS_NORMAL; + if (g_pHSI_Motion) + { + rStatus = g_pHSI_Motion->GetPositionXyz(AxisTypes, PositionX, PositionY, PositionZ, Time); + } + else + { + rStatus = HSI_STATUS_FAILED; + } + return rStatus; +} +//=========================================================================== +HSI_API HSI_STATUS WINAPI HSI_MOTION_SET_POSITION_XYZ(UINT AxisTypes, double PositionX, double PositionY, double PositionZ, HSI_MOTION_MOVE_TYPE eType, double dSpeedGear) +{ + auto rStatus = HSI_STATUS_NORMAL; + if (g_pHSI_Motion) + { + rStatus = g_pHSI_Motion->SetPositionXyz(AxisTypes, PositionX, PositionY, PositionZ, eType, dSpeedGear); + } + else + { + rStatus = HSI_STATUS_FAILED; + } + return rStatus; +} +//=========================================================================== +HSI_API HSI_STATUS WINAPI HSI_MOTION_SET_POSITION_XYZA(UINT AxisTypes, double PositionX, double PositionY, double PositionZ, double PositionA, HSI_MOTION_MOVE_TYPE eType, double dSpeedGear) +{ + auto rStatus = HSI_STATUS_NORMAL; + if (g_pHSI_Motion) + { + rStatus = g_pHSI_Motion->SetPositionXyza(AxisTypes, PositionX, PositionY, PositionZ, PositionA, eType, dSpeedGear); + } + else + { + rStatus = HSI_STATUS_FAILED; + } + return rStatus; +} +//=========================================================================== +HSI_API HSI_STATUS WINAPI HSI_MOTION_ZERO_POS(bool bZeroPos) +{ + auto rStatus = HSI_STATUS_NORMAL; + if (g_pHSI_Motion) + { + rStatus = g_pHSI_Motion->ZeroPos(bZeroPos); + } + else + { + rStatus = HSI_STATUS_FAILED; + } + return rStatus; +} +//=========================================================================== +HSI_API HSI_STATUS WINAPI HSI_MOTION_GET_POSITION_R(UINT AxisTypes, double &PositionR, double &Time) +{ + UNREFERENCED_PARAMETER(AxisTypes); + UNREFERENCED_PARAMETER(PositionR); + UNREFERENCED_PARAMETER(Time); + return HSI_STATUS_NOT_SUPPORTED; +} +//=========================================================================== +HSI_API HSI_STATUS WINAPI HSI_MOTION_SET_POSITION_R(UINT AxisTypes, double PositionR, HSI_MOTION_AXIS_R_MOVE_TYPE DirectionType, bool bWait) +{ + UNREFERENCED_PARAMETER(AxisTypes); + UNREFERENCED_PARAMETER(PositionR); + UNREFERENCED_PARAMETER(DirectionType); + UNREFERENCED_PARAMETER(bWait); + return HSI_STATUS_NOT_SUPPORTED; +} +//=========================================================================== +HSI_API HSI_STATUS WINAPI HSI_MOTION_ABORT_MOTION() +{ + auto rStatus = HSI_STATUS_NORMAL; + if (g_pHSI_Motion) + { + rStatus = g_pHSI_Motion->AbortMotion(); + } + else + { + rStatus = HSI_STATUS_FAILED; + } + return rStatus; +} +//=========================================================================== +HSI_API HSI_STATUS WINAPI HSI_MOTION_GET_DIO(UINT IOChannel, UINT& _Status) +{ + auto rStatus = HSI_STATUS_NORMAL; + if (g_pHSI_Motion) + { + rStatus = g_pHSI_Motion->GetDIO(IOChannel,_Status); + } + else + { + rStatus = HSI_STATUS_FAILED; + } + return rStatus; +} +//=========================================================================== +HSI_API HSI_STATUS WINAPI HSI_MOTION_SET_DIO(UINT IOChannel, UINT _Status) +{ + auto rStatus = HSI_STATUS_NORMAL; + if (g_pHSI_Motion) + { + rStatus = g_pHSI_Motion->SetDIO(IOChannel,_Status); + } + else + { + rStatus = HSI_STATUS_FAILED; + } + return rStatus; +} +//=========================================================================== +HSI_API HSI_STATUS WINAPI HSI_MOTION_DCC_SCAN_START() +{ + auto rStatus = HSI_STATUS_NORMAL; + if (g_pHSI_Motion) + { + rStatus = g_pHSI_Motion->DCCScanStart(); + } + else + { + rStatus = HSI_STATUS_FAILED; + } + return rStatus; +} +//=========================================================================== +HSI_API HSI_STATUS WINAPI HSI_MOTION_DCC_SCAN_STOP() +{ + auto rStatus = HSI_STATUS_NORMAL; + if (g_pHSI_Motion) + { + rStatus = g_pHSI_Motion->DCCScanStop(); + } + else + { + rStatus = HSI_STATUS_FAILED; + } + return rStatus; +} +//=========================================================================== +HSI_API HSI_STATUS WINAPI HSI_MOTION_DCC_SCAN_SET_DATA(UINT AxisTypes, HSI_SCAN_MOTION_TYPE eType, UINT lTrigNumber, double* dTrigDis) +{ + auto rStatus = HSI_STATUS_NORMAL; + if (g_pHSI_Motion) + { + rStatus = g_pHSI_Motion->DCCScanSetData(AxisTypes, eType, lTrigNumber, dTrigDis); + } + else + { + rStatus = HSI_STATUS_FAILED; + } + return rStatus; +} +//=========================================================================== +HSI_API HSI_STATUS WINAPI HSI_MOTION_IO_STEP(bool RunSts) +{ + auto rStatus = HSI_STATUS_NORMAL; + if (g_pHSI_Motion) + { + rStatus = g_pHSI_Motion->IOStep(RunSts); + } + return rStatus; +} + +//=========================================================================== +HSI_API HSI_STATUS WINAPI HSI_MOTION_IS_SUPPORTED_EX(UINT AxisTypes, UINT &Types) +{ + auto rStatus = HSI_STATUS_NORMAL; + if (g_pHSI_Motion) + { + rStatus = g_pHSI_Motion->IsSupportedEx(AxisTypes, Types); + } + else + { + rStatus = HSI_STATUS_FAILED; + } + return rStatus; +} +//=========================================================================== +HSI_API HSI_STATUS WINAPI HSI_MOTION_STARTUP_EX(UINT AxisTypes, bool bHome) +{ + auto rStatus = HSI_STATUS_NORMAL; + if (g_pHSI_Motion) + { + rStatus = g_pHSI_Motion->StartupEx(AxisTypes, bHome); + } + else + { + rStatus = HSI_STATUS_FAILED; + } + return rStatus; +} +//=========================================================================== +HSI_API HSI_STATUS WINAPI HSI_MOTION_GET_SCALE_RESOLUTION_EX(UINT AxisTypes, double &Scale) +{ + auto rStatus = HSI_STATUS_NORMAL; + if (g_pHSI_Motion) + { + rStatus = g_pHSI_Motion->GetScaleResolutionEx(AxisTypes, Scale); + } + else + { + rStatus = HSI_STATUS_FAILED; + } + return rStatus; +} +//=========================================================================== +HSI_API HSI_STATUS WINAPI HSI_MOTION_SET_SCALE_RESOLUTION_EX(UINT AxisTypes, double Scale) +{ + auto rStatus = HSI_STATUS_NORMAL; + if (g_pHSI_Motion) + { + rStatus = g_pHSI_Motion->SetScaleResolutionEx(AxisTypes, Scale); + } + else + { + rStatus = HSI_STATUS_FAILED; + } + return rStatus; +} +//=========================================================================== +HSI_API HSI_STATUS WINAPI HSI_MOTION_GET_POSITION_EX(UINT AxisTypes, double &Position, double &Time) +{ + auto rStatus = HSI_STATUS_NORMAL; + if (g_pHSI_Motion) + { + rStatus = g_pHSI_Motion->GetPositionEx(AxisTypes, Position, Time); + } + else + { + rStatus = HSI_STATUS_FAILED; + } + return rStatus; +} +//=========================================================================== +HSI_API HSI_STATUS WINAPI HSI_MOTION_SET_POSITION_EX(UINT AxisTypes, double Position, HSI_MOTION_MOVE_TYPE eType, double dSpeedGear) +{ + auto rStatus = HSI_STATUS_NORMAL; + if (g_pHSI_Motion) + { + rStatus = g_pHSI_Motion->SetPositionEx(AxisTypes, Position, eType, dSpeedGear); + } + else + { + rStatus = HSI_STATUS_FAILED; + } + return rStatus; +} +//=========================================================================== +HSI_API HSI_STATUS WINAPI HSI_MOTION_GET_SPEED_EX(UINT AxisTypes, double &Speed) +{ + auto rStatus = HSI_STATUS_NORMAL; + if (g_pHSI_Motion) + { + rStatus = g_pHSI_Motion->GetSpeedEx(AxisTypes, Speed); + } + else + { + rStatus = HSI_STATUS_FAILED; + } + return rStatus; +} +//=========================================================================== +HSI_API HSI_STATUS WINAPI HSI_MOTION_SET_SPEED_EX(UINT AxisTypes, double Speed) +{ + auto rStatus = HSI_STATUS_NORMAL; + if (g_pHSI_Motion) + { + rStatus = g_pHSI_Motion->SetSpeedEx(AxisTypes, Speed); + } + else + { + rStatus = HSI_STATUS_FAILED; + } + return rStatus; +} +//=========================================================================== +HSI_API HSI_STATUS WINAPI HSI_MOTION_GET_ACCELERATION_EX(UINT AxisTypes, double &Accel) +{ + auto rStatus = HSI_STATUS_NORMAL; + if (g_pHSI_Motion) + { + rStatus = g_pHSI_Motion->GetAccelerationEx(AxisTypes, Accel); + } + else + { + rStatus = HSI_STATUS_FAILED; + } + return rStatus; +} +//=========================================================================== +HSI_API HSI_STATUS WINAPI HSI_MOTION_SET_ACCELERATION_EX(UINT AxisTypes, double Accel) +{ + auto rStatus = HSI_STATUS_NORMAL; + if (g_pHSI_Motion) + { + rStatus = g_pHSI_Motion->SetAccelerationEx(AxisTypes, Accel); + } + else + { + rStatus = HSI_STATUS_FAILED; + } + return rStatus; +} + + + + +//=========================================================================== +HSI_API HSI_STATUS WINAPI HSI_MOTION_SHUTDOWN() +{ + auto rStatus = HSI_STATUS_NORMAL; + if (g_pHSI_Motion) + { + rStatus = g_pHSI_Motion->Shutdown(); + delete g_pHSI_Motion; + g_pHSI_Motion = nullptr; + } + else + { + rStatus = HSI_STATUS_FAILED; + } + return rStatus; +} +//=========================================================================== +HSI_API HSI_STATUS WINAPI HSI_ILLUMINATION_IS_SUPPORTED(UINT &Types) +{ + Types = 1; + return HSI_STATUS_NOT_SUPPORTED; +} +//=========================================================================== +HSI_API HSI_STATUS WINAPI HSI_ILLUMINATION_STARTUP() +{ + return HSI_STATUS_NOT_SUPPORTED; +} +//=========================================================================== +HSI_API HSI_STATUS WINAPI HSI_ILLUMINATION_GET_LAMP_COUNT(int &nLamps) +{ + UNREFERENCED_PARAMETER(nLamps); + return HSI_STATUS_NOT_SUPPORTED; +} +//=========================================================================== +HSI_API HSI_STATUS WINAPI HSI_ILLUMINATION_GET_LAMP_INFO(int& _LampInfo, int& _NumLamps, int(*_LampsType)[HSI_ILLUMINATION_MAX_BULB_TYPE], + int *NumRings, int *NumSectors, int* _Color, double *_Angle, bool &bCanBeCalibrated) +{ + UNREFERENCED_PARAMETER(_LampInfo); + UNREFERENCED_PARAMETER(_NumLamps); + UNREFERENCED_PARAMETER(_LampsType); + UNREFERENCED_PARAMETER(NumRings); + UNREFERENCED_PARAMETER(_LampsType); + UNREFERENCED_PARAMETER(NumSectors); + UNREFERENCED_PARAMETER(_Color); + UNREFERENCED_PARAMETER(_Angle); + UNREFERENCED_PARAMETER(bCanBeCalibrated); + return HSI_STATUS_NOT_SUPPORTED; +} +//=========================================================================== +HSI_API HSI_STATUS WINAPI HSI_ILLUMINATION_GET_LAMP_STATE(int nLamp, bool *bBulbStates, double *Intensities, int &Color, double &Angle) +{ + UNREFERENCED_PARAMETER(nLamp); + UNREFERENCED_PARAMETER(bBulbStates); + UNREFERENCED_PARAMETER(Intensities); + UNREFERENCED_PARAMETER(Color); + UNREFERENCED_PARAMETER(Angle); + return HSI_STATUS_NOT_SUPPORTED; +} +//=========================================================================== +HSI_API HSI_STATUS WINAPI HSI_ILLUMINATION_SET_LAMP_STATE(int nLamp, bool *bBulbStates, double *Intensities, int Color, double Angle, bool bWait) +{ + UNREFERENCED_PARAMETER(nLamp); + UNREFERENCED_PARAMETER(bBulbStates); + UNREFERENCED_PARAMETER(Intensities); + UNREFERENCED_PARAMETER(Color); + UNREFERENCED_PARAMETER(Angle); + UNREFERENCED_PARAMETER(bWait); + return HSI_STATUS_NOT_SUPPORTED; +} +//=========================================================================== +HSI_API HSI_STATUS WINAPI HSI_ILLUMINATION_GET_LAMP_STATE_ALL(int _LampInfo, int _NumLamps, int(*_LampsType)[HSI_ILLUMINATION_MAX_BULB_TYPE], + int(*bBulbStates)[HSI_ILLUMINATION_MAX_BULBS], double(*Intensities)[HSI_ILLUMINATION_MAX_BULBS]) +{ + UNREFERENCED_PARAMETER(_LampInfo); + UNREFERENCED_PARAMETER(_NumLamps); + UNREFERENCED_PARAMETER(_LampsType); + UNREFERENCED_PARAMETER(bBulbStates); + UNREFERENCED_PARAMETER(Intensities); + return HSI_STATUS_NOT_SUPPORTED; +} +//=========================================================================== +HSI_API HSI_STATUS WINAPI HSI_ILLUMINATION_SET_LAMP_STATE_ALL(int _LampInfo, int _NumLamps, int(*_LampsType)[HSI_ILLUMINATION_MAX_BULB_TYPE], + int(*bBulbStates)[HSI_ILLUMINATION_MAX_BULBS], double(*Intensities)[HSI_ILLUMINATION_MAX_BULBS], bool bWait) +{ + UNREFERENCED_PARAMETER(_LampInfo); + UNREFERENCED_PARAMETER(_NumLamps); + UNREFERENCED_PARAMETER(_LampsType); + UNREFERENCED_PARAMETER(bBulbStates); + UNREFERENCED_PARAMETER(Intensities); + UNREFERENCED_PARAMETER(bWait); + return HSI_STATUS_NOT_SUPPORTED; +} +//=========================================================================== +HSI_API HSI_STATUS WINAPI HSI_ILLUMINATION_SHUTDOWN() +{ + return HSI_STATUS_NOT_SUPPORTED; +} diff --git a/PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/HSI_ADT_8949/HSI_ADT_8949.cpp b/PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/HSI_ADT_8949/HSI_ADT_8949.cpp new file mode 100644 index 0000000..c763109 --- /dev/null +++ b/PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/HSI_ADT_8949/HSI_ADT_8949.cpp @@ -0,0 +1,74 @@ +// HSI_ADT_8949.cpp : 定义 DLL 应用程序的导出函数。 +// + +#include "stdafx.h" +#include "..\..\..\..\Hsi\HSI.h" +#include "HSI_ADT_8949.h" +#include "HSI_Motion.h" + +#ifdef _DEBUG +#define new DEBUG_NEW +#endif + +//=========================================================================== +HSI_ADT_8949 *g_pHSI_ADT_8949 = nullptr; + +pEventCallback HSI_ADT_8949::m_pEventCallback = nullptr; +//=========================================================================== +HSI_ADT_8949::HSI_ADT_8949() +{ + hWnd = NULL; + bOfflineOnly = false; + TRACE0("HSI_ADT_8949 Constructor!\n"); +} +//=========================================================================== +HSI_ADT_8949::~HSI_ADT_8949() +{ + TRACE0("HSI_ADT_8949 Destructor!\n"); +} +//=========================================================================== +HSI_STATUS HSI_ADT_8949::Startup(HWND _hWnd, bool _bOfflineOnly) +{ + auto rStatus = HSI_STATUS_NORMAL; + hWnd = _hWnd; + bOfflineOnly = _bOfflineOnly; + return rStatus; +} +//=========================================================================== +HSI_STATUS HSI_ADT_8949::GetMachineInfo(int &_NumMachineTypes) +{ + auto rStatus = HSI_STATUS_NORMAL; + _NumMachineTypes = HSI_MACHINE_SO7; + return rStatus; +} +//=========================================================================== +HSI_STATUS HSI_ADT_8949::SetEventCallback(pEventCallback _pCallback) +{ + auto rStatus = HSI_STATUS_NORMAL; + if (_pCallback) + { + m_pEventCallback = _pCallback; + //sEvenProp.EventType = HSI_EVENT_FUNCTION; + //sEvenProp.EventID = HSI_EVENT_DEBUG_LOG; + //sEvenProp.EventCallbackID = 0; + //sEvenProp.EventResponse = HSI_EVENT_FUNCTION_OK; + //strcpy_s(sEvenProp.EventData, HSI_MaxStringLength, "Set callback succeed!"); + //EventCallback(sEvenProp); + } + return rStatus; +} +//=========================================================================== +VOID HSI_ADT_8949::EventCallback(sHSIEventProperties& _sEventProp) +{ + if (m_pEventCallback) + { + m_pEventCallback(_sEventProp.EventType, _sEventProp.EventResponse, _sEventProp.EventID, _sEventProp.EventData, _sEventProp.EventCallbackID); + } +} +//=========================================================================== +HSI_STATUS HSI_ADT_8949::Shutdown() +{ + auto rStatus = HSI_STATUS_NORMAL; + return rStatus; +} + diff --git a/PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/HSI_ADT_8949/HSI_ADT_8949.def b/PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/HSI_ADT_8949/HSI_ADT_8949.def new file mode 100644 index 0000000..8ca1c0e --- /dev/null +++ b/PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/HSI_ADT_8949/HSI_ADT_8949.def @@ -0,0 +1,67 @@ +;HSI_ADT_8949.def : 声明 DLL 的模块参数。 + +LIBRARY "HSI" + +EXPORTS + ;此处可以是显式导出 + +HSI_STARTUP +HSI_GET_INTERFACE_VERSION +HSI_GET_MACHINE_INFO +HSI_SET_EVENT_CALLBACK +HSI_SHUTDOWM + +HSI_MOTION_IS_SUPPORTED +HSI_MOTION_STARTUP +HSI_MOTION_IS_HOMED +HSI_MOTION_GET_SPEED_XYZ +HSI_MOTION_SET_SPEED_XYZ +HSI_MOTION_GET_ACCELERATION_XYZ +HSI_MOTION_SET_ACCELERATION_XYZ +HSI_MOTION_GET_SPEED_R +HSI_MOTION_SET_SPEED_R +HSI_MOTION_GET_ACCELERATION_R +HSI_MOTION_SET_ACCELERATION_R +HSI_MOTION_GET_SCALE_RESOLUTION +HSI_MOTION_SET_SCALE_RESOLUTION +HSI_MOTION_GET_DEADBAND +HSI_MOTION_GET_REFRESH_DEADBAND +HSI_MOTION_JOG +HSI_MOTION_STOP_JOG +HSI_MOTION_GET_ENCPRF_MULTI +HSI_MOTION_GET_POSITION_XYZ +HSI_MOTION_SET_POSITION_XYZ +HSI_MOTION_SET_POSITION_XYZA +HSI_MOTION_ZERO_POS +HSI_MOTION_GET_POSITION_R +HSI_MOTION_SET_POSITION_R +HSI_MOTION_ABORT_MOTION +HSI_MOTION_GET_DIO +HSI_MOTION_SET_DIO +HSI_MOTION_DCC_SCAN_SET_DATA +HSI_MOTION_DCC_SCAN_START +HSI_MOTION_DCC_SCAN_STOP +HSI_MOTION_IO_STEP + +HSI_MOTION_IS_SUPPORTED_EX +HSI_MOTION_STARTUP_EX +HSI_MOTION_GET_SCALE_RESOLUTION_EX +HSI_MOTION_SET_SCALE_RESOLUTION_EX +HSI_MOTION_GET_POSITION_EX +HSI_MOTION_SET_POSITION_EX +HSI_MOTION_GET_SPEED_EX +HSI_MOTION_SET_SPEED_EX +HSI_MOTION_GET_ACCELERATION_EX +HSI_MOTION_SET_ACCELERATION_EX + +HSI_MOTION_SHUTDOWN + +HSI_ILLUMINATION_IS_SUPPORTED +HSI_ILLUMINATION_STARTUP +HSI_ILLUMINATION_GET_LAMP_COUNT +HSI_ILLUMINATION_GET_LAMP_INFO +HSI_ILLUMINATION_GET_LAMP_STATE +HSI_ILLUMINATION_SET_LAMP_STATE +HSI_ILLUMINATION_GET_LAMP_STATE_ALL +HSI_ILLUMINATION_SET_LAMP_STATE_ALL +HSI_ILLUMINATION_SHUTDOWN \ No newline at end of file diff --git a/PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/HSI_ADT_8949/HSI_ADT_8949.h b/PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/HSI_ADT_8949/HSI_ADT_8949.h new file mode 100644 index 0000000..e743703 --- /dev/null +++ b/PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/HSI_ADT_8949/HSI_ADT_8949.h @@ -0,0 +1,30 @@ +// HSI_ADT_8949.h : 定义 DLL 应用程序的导出函数。 +// + +#pragma once + +#ifndef __AFXWIN_H__ +#error "在包含此文件之前包含“stdafx.h”以生成 PCH 文件" +#endif + +#include "resource.h" // 主符号 +#include + + +class HSI_ADT_8949 :public HSI +{ +public: + HSI_ADT_8949(); + ~HSI_ADT_8949(); + virtual HSI_STATUS Startup(HWND _hWnd, bool _bOfflineOnly); + HSI_STATUS GetMachineInfo(int &_NumMachineTypes); + HSI_STATUS SetEventCallback(pEventCallback _pCallback); + virtual HSI_STATUS Shutdown(); + static VOID EventCallback(sHSIEventProperties& sEventProp); +private: + static pEventCallback m_pEventCallback; +}; + +extern HSI_ADT_8949 *g_pHSI_ADT_8949; + + diff --git a/PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/HSI_ADT_8949/HSI_ADT_8949.vcxproj b/PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/HSI_ADT_8949/HSI_ADT_8949.vcxproj new file mode 100644 index 0000000..e1fea81 --- /dev/null +++ b/PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/HSI_ADT_8949/HSI_ADT_8949.vcxproj @@ -0,0 +1,202 @@ +锘 + + + + Debug + Win32 + + + Debug + x64 + + + Release + Win32 + + + Release + x64 + + + + {8597AC0D-59A6-43D6-80E4-B7D7B9E49F47} + Win32Proj + HSI_ADT_8949 + + + + DynamicLibrary + true + v120 + Unicode + Dynamic + + + DynamicLibrary + true + v120 + Unicode + Dynamic + + + DynamicLibrary + false + v120 + true + Unicode + Dynamic + + + DynamicLibrary + false + v120 + true + Unicode + Dynamic + + + + + + + + + + + + + + + + + + + true + + + true + + + false + + + false + + + + Use + Level4 + Disabled + WIN32;_WINDOWS;_DEBUG;_USRDLL;HSI_EXPORTS;%(PreprocessorDefinitions) + true + true + MultiThreadedDebugDLL + + + Windows + true + .\HSI_ADT_8949.def + + + xcopy "$(OutDir)$(ProjectName).dll" ..\HSI_ADT_8949_WPFTest\bin\Debug\HSI.dll/D /F /Y +xcopy "$(OutDir)\$(ProjectName).pdb" ..\HSI_ADT_8949_WPFTest\bin\Debug\HSI.pdb/D /F /Y + + + + + Use + Level4 + Disabled + WIN32;_WINDOWS;_DEBUG;_USRDLL;HSI_EXPORTS;%(PreprocessorDefinitions) + true + true + MultiThreadedDebugDLL + + + Windows + true + .\HSI_ADT_8949.def + + + xcopy "$(OutDir)\$(ProjectName).dll" ..\HSI_ADT_8949_WPFTest\bin\Debug\HSI.dll/D /F /Y +xcopy "$(OutDir)\$(ProjectName).pdb" ..\HSI_ADT_8949_WPFTest\bin\Debug\HSI.pdb /D /F /Y + + + + + Level4 + Use + MaxSpeed + true + true + WIN32;_WINDOWS;NDEBUG;_USRDLL;HSI_EXPORTS;%(PreprocessorDefinitions) + true + true + + + Windows + true + true + true + + + xcopy "$(OutDir)$(ProjectName).dll" ..\HSI_ADT_8949_WPFTest\bin\Release\HSI.dll/D /F /Y +xcopy "$(OutDir)\$(ProjectName).pdb" ..\HSI_ADT_8949_WPFTest\bin\Release\HSI.pdb/D /F /Y + + + + + Level4 + Use + MaxSpeed + true + true + WIN32;_WINDOWS;NDEBUG;_USRDLL;HSI_EXPORTS;%(PreprocessorDefinitions) + true + true + + + Windows + true + true + true + .\HSI_ADT_8949.def + + + xcopy "$(OutDir)$(ProjectName).dll" ..\HSI_ADT_8949_WPFTest\bin\x64\Release\HSI.dll/D /F /Y +xcopy "$(OutDir)\$(ProjectName).pdb" ..\HSI_ADT_8949_WPFTest\bin\x64\Release\HSI.pdb /D /F /Y + + + + + + + + + + + + + + + + + + + + + + + Create + Create + Create + Create + + + + + + + + + \ No newline at end of file diff --git a/PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/HSI_ADT_8949/HSI_ADT_8949.vcxproj.filters b/PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/HSI_ADT_8949/HSI_ADT_8949.vcxproj.filters new file mode 100644 index 0000000..4f2c180 --- /dev/null +++ b/PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/HSI_ADT_8949/HSI_ADT_8949.vcxproj.filters @@ -0,0 +1,71 @@ +锘 + + + + {4FC737F1-C7A5-4376-A066-2A32D752A2FF} + cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx + + + {93995380-89BD-4b04-88EB-625FBE52EBFB} + h;hh;hpp;hxx;hm;inl;inc;xsd + + + {67DA6AB6-F800-4c08-8B7A-83BB121AAD01} + rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms + + + + + + + + 澶存枃浠 + + + 澶存枃浠 + + + 澶存枃浠 + + + 澶存枃浠 + + + 澶存枃浠 + + + 澶存枃浠 + + + 澶存枃浠 + + + 澶存枃浠 + + + 澶存枃浠 + + + + + 婧愭枃浠 + + + 婧愭枃浠 + + + 婧愭枃浠 + + + 婧愭枃浠 + + + 婧愭枃浠 + + + + + 婧愭枃浠 + + + \ No newline at end of file diff --git a/PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/HSI_ADT_8949/HSI_ADT_8949.vcxproj.user b/PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/HSI_ADT_8949/HSI_ADT_8949.vcxproj.user new file mode 100644 index 0000000..6e7117a --- /dev/null +++ b/PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/HSI_ADT_8949/HSI_ADT_8949.vcxproj.user @@ -0,0 +1,12 @@ +锘 + + + ..\HSI_ADT_8949_WPFTest\bin\Debug\HSI_ADT_8949_WPFTest.exe + WindowsLocalDebugger + $(ProjectDir) + + + ..\HSI_ADT_8949_WPFTest\bin\Debug\HSI_ADT_8949_WPFTest.exe + WindowsLocalDebugger + + \ No newline at end of file diff --git a/PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/HSI_ADT_8949/HSI_Motion.cpp b/PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/HSI_ADT_8949/HSI_Motion.cpp new file mode 100644 index 0000000..096a005 --- /dev/null +++ b/PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/HSI_ADT_8949/HSI_Motion.cpp @@ -0,0 +1,2671 @@ +锘// HSI_Motion.cpp : 瀹氫箟 DLL 鐨勫垵濮嬪寲渚嬬▼銆 +// +#include "stdafx.h" +#include "..\..\..\..\Hsi\HSI.h" +#include "HSI_ADT_8949.h" +#include "adt8949.h" +#include "HSI_Motion.h" + +#ifdef _DEBUG +#define new DEBUG_NEW +#endif +//=========================================================================== +HSI_Motion *g_pHSI_Motion = nullptr; +CLogger extern *g_pLogger = nullptr; + +//=========================================================================== +HANDLE HSI_Motion::m_Thread_Id = NULL; +HANDLE HSI_Motion::m_Thread_Mutex = NULL; +HANDLE HSI_Motion::m_hTriggerEvent; +HANDLE HSI_Motion::m_Thread_IdIO = NULL; +HANDLE HSI_Motion::m_Thread_MutexIO = NULL; +HANDLE HSI_Motion::m_hTriggerEventIO; +int HSI_Motion::m_Thread_State = THREAD_PAUSED; +int HSI_Motion::m_Thread_StateIO = THREAD_PAUSED; + +//=========================================================================== +HSI_Motion::HSI_Motion() +{ + TRACE0("HSI_Motion Constructor!\n"); + sEvenProp.Init(); + sEvenProp.EventCallbackID = 0; + sEvenProp.EventResponse = HSI_EVENT_FUNCTION_OK; + CurrentMotionState = E_SO7_MOTION_NONE; + CurrentHomeMachineState = E_GTS_HOME_NONE; + m_dSpeed = 1.0; + m_IsExMotion = E_GTS_MOTION_XYZA; + m_HomeFocus = false; + g_IsAbort = false; + CTime tm = CTime::GetCurrentTime(); + CString csTime = tm.Format("%Y-%m-%d");//鏄剧ず骞存湀鏃 + CString dir = L"\\Log\\" + csTime += L".ADT_8949.Log"; + g_pLogger = new CLogger(dir); + g_pLogger3 = NULL; + for (int i = 0; i < 5; i++) + { + m_Jog_Speed[i] = 10.0; //琛ㄧず5涓。浣 + m_Jog_Acc[i] = 1000.0; + m_Jog_Dec[i] = 1000.0; + m_Jog_StartV[i] = 1.0; + m_Jog_EndV[i] = 1.0; + m_StopJogMode[i] = 0; + m_Home_Machine_Axis[i] = 1; + m_Home_Enc_Pos_Axis[i] = 0; + m_Home_Prf_Pos_Axis[i] = 0; + m_Home_Back_Range[i] = 30.0; + m_Home_Speed_Limit[i] = 10.0; + m_ControlMode[i] = 0; + m_LoopPeriod[i] = 50; + m_LoopRate[i] = 0.1f; + m_ZeroTime[i] = 1000; + axis_scale_resolution[i] = 0.0004f; + m_Home_Speed_High[i] = 200; + m_Home_Acc[i] = 50.0; + m_Home_Speed_Search[i] = 10.0; + m_SetPotion_Speed[i] = 200; + m_SetPotion_Acc[i] = 5.0; + m_SetPotion_Dec[i] = 5.0; + m_SetPotion_Count[i] = 10; + m_PrecisionTimeout[i] = 200; + m_PrecisionCount[i] = 8; + m_PosThread[i] = 0.0; + m_LogIsOpen[i] = 0; + m_ZeroTime[i] = 2500; + m_DriverAlarmAxis[i] = 0; + m_PulseDir[i] = 0; + } + m_Home_Machine_Axis[4] = 0; + for (int i = 0; i < 3; i++) + { + m_dAcc[i] = 5.0; + m_dDec[i] = 5.0; + } + m_Hinst = nullptr; + m_pADT8949_initial = nullptr; + m_pADT8949_close_card = nullptr; + m_pADT8949_get_card_index = nullptr; + m_pADT8949_set_pulse_mode = nullptr; + m_pADT8949_set_limit_mode = nullptr; + m_pADT8949_set_stop0_mode = nullptr; + m_pADT8949_set_stop1_mode = nullptr; + m_pADT8949_set_input_mode = nullptr; + m_pADT8949_set_gear = nullptr; + m_pADT8949_set_actual_count_mode = nullptr; + m_pADT8949_set_emergency_stop_mode = nullptr; + m_pADT8949_set_softlimit_mode = nullptr; + m_pADT8949_reset_card = nullptr; + m_pADT8949_get_status = nullptr; + m_pADT8949_get_status_all = nullptr; + m_pADT8949_get_inp_status = nullptr; + m_pADT8949_get_inp_index = nullptr; + m_pADT8949_set_precount = nullptr; + m_pADT8949_set_jcc = nullptr; + m_pADT8949_set_acc = nullptr; + m_pADT8949_set_dec = nullptr; + m_pADT8949_set_admode = nullptr; + m_pADT8949_set_speed = nullptr; + m_pADT8949_set_startv = nullptr; + m_pADT8949_set_endv = nullptr; + m_pADT8949_set_speed_constraint = nullptr; + m_pADT8949_set_command_pos = nullptr; + m_pADT8949_set_actual_pos = nullptr; + m_pADT8949_set_rate1 = nullptr; + m_pADT8949_set_rate2 = nullptr; + m_pADT8949_get_command_pos = nullptr; + m_pADT8949_get_actual_pos = nullptr; + m_pADT8949_get_stopdata = nullptr; + m_pADT8949_pmove = nullptr; + m_pADT8949_abs_pmove = nullptr; + m_pADT8949_continue_move = nullptr; + m_pADT8949_inp_arc3 = nullptr; + m_pADT8949_inp_abs_arc3 = nullptr; + m_pADT8949_get_out = nullptr; + m_pADT8949_write_bit = nullptr; + m_pADT8949_read_bit = nullptr; + m_pADT8949_set_gpio = nullptr; + m_pADT8949_get_gpio = nullptr; + m_pADT8949_SetHomeMode_Ex = nullptr; + m_pADT8949_SetHomeSpeed_Ex = nullptr; + m_pADT8949_HomeProcess_Ex = nullptr; + m_pADT8949_GetHomeStatus_Ex = nullptr; + m_pADT8949_inp_abs_move4 = nullptr; + m_pADT8949_abs_pmove_closedloop = nullptr; + m_pADT8949_set_pos_compare_mode = nullptr; + m_pADT8949_clear_pos_compare_point = nullptr; + m_pADT8949_set_pos_compare_pulse = nullptr; + m_pADT8949_set_pos_compare_stop_axis = nullptr; + m_pADT8949_set_pos_compare_io = nullptr; + m_pADT8949_set_pos_compare_multi_io = nullptr; + m_pADT8949_get_pos_compare_len = nullptr; + m_pADT8949_NeedHome_Ex = nullptr; + m_pADT8949_ResetHomeStatus_Ex = nullptr; + m_pADT8949_set_lock_position = nullptr; + m_pADT8949_get_lock_status = nullptr; + m_pADT8949_get_lock_position = nullptr; + m_pADT8949_clr_lock_status = nullptr; +} +//=========================================================================== +HSI_Motion::~HSI_Motion() +{ + TRACE0("HSI_Motion Destructor!\n"); +} +//=========================================================================== +int HSI_Motion::ADT8949Init() +{ + int rtn = 0; + if (!m_Hinst) + { + m_Hinst = LoadLibrary(L"adt8949.dll"); + if (m_Hinst) + { + m_pADT8949_initial = (pADT8949_initial)GetProcAddress(m_Hinst, "adt8949_initial"); + m_pADT8949_close_card = (pADT8949_close_card)GetProcAddress(m_Hinst, "adt8949_close_card"); + m_pADT8949_get_card_index = (pADT8949_get_card_index)GetProcAddress(m_Hinst, "adt8949_get_card_index"); + m_pADT8949_set_pulse_mode = (pADT8949_set_pulse_mode)GetProcAddress(m_Hinst, "adt8949_set_pulse_mode"); + m_pADT8949_set_limit_mode = (pADT8949_set_limit_mode)GetProcAddress(m_Hinst, "adt8949_set_limit_mode"); + m_pADT8949_set_stop0_mode = (pADT8949_set_stop0_mode)GetProcAddress(m_Hinst, "adt8949_set_stop0_mode"); + m_pADT8949_set_stop1_mode = (pADT8949_set_stop1_mode)GetProcAddress(m_Hinst, "adt8949_set_stop1_mode"); + m_pADT8949_set_input_mode = (pADT8949_set_input_mode)GetProcAddress(m_Hinst, "adt8949_set_input_mode"); + m_pADT8949_set_gear = (pADT8949_set_gear)GetProcAddress(m_Hinst, "adt8949_set_gear"); + m_pADT8949_set_actual_count_mode = (pADT8949_set_actual_count_mode)GetProcAddress(m_Hinst, "adt8949_set_actual_count_mode"); + m_pADT8949_set_emergency_stop_mode = (pADT8949_set_emergency_stop_mode)GetProcAddress(m_Hinst, "adt8949_set_emergency_stop_mode"); + m_pADT8949_set_softlimit_mode = (pADT8949_set_softlimit_mode)GetProcAddress(m_Hinst, "adt8949_set_softlimit_mode"); + m_pADT8949_reset_card = (pADT8949_reset_card)GetProcAddress(m_Hinst, "adt8949_reset_card"); + m_pADT8949_get_status = (pADT8949_get_status)GetProcAddress(m_Hinst, "adt8949_get_status"); + m_pADT8949_get_status_all = (pADT8949_get_status_all)GetProcAddress(m_Hinst, "adt8949_get_status_all"); + m_pADT8949_get_inp_status = (pADT8949_get_inp_status)GetProcAddress(m_Hinst, "adt8949_get_inp_status"); + m_pADT8949_get_inp_index = (pADT8949_get_inp_index)GetProcAddress(m_Hinst, "adt8949_get_inp_index"); + m_pADT8949_set_precount = (pADT8949_set_precount)GetProcAddress(m_Hinst, "adt8949_set_precount"); + m_pADT8949_set_jcc = (pADT8949_set_jcc)GetProcAddress(m_Hinst, "adt8949_set_acc"); + m_pADT8949_set_acc = (pADT8949_set_acc)GetProcAddress(m_Hinst, "adt8949_set_acc"); + m_pADT8949_set_dec = (pADT8949_set_dec)GetProcAddress(m_Hinst, "adt8949_set_dec"); + m_pADT8949_set_admode = (pADT8949_set_admode)GetProcAddress(m_Hinst, "adt8949_set_admode"); + m_pADT8949_set_speed = (pADT8949_set_speed)GetProcAddress(m_Hinst, "adt8949_set_speed"); + m_pADT8949_set_startv = (pADT8949_set_startv)GetProcAddress(m_Hinst, "adt8949_set_startv"); + m_pADT8949_set_endv = (pADT8949_set_endv)GetProcAddress(m_Hinst, "adt8949_set_endv"); + m_pADT8949_set_speed_constraint = (pADT8949_set_speed_constraint)GetProcAddress(m_Hinst, "adt8949_set_speed_constraint"); + m_pADT8949_set_command_pos = (pADT8949_set_command_pos)GetProcAddress(m_Hinst, "adt8949_set_command_pos"); + m_pADT8949_set_actual_pos = (pADT8949_set_actual_pos)GetProcAddress(m_Hinst, "adt8949_set_actual_pos"); + m_pADT8949_set_rate1 = (pADT8949_set_rate1)GetProcAddress(m_Hinst, "adt8949_set_rate1"); + m_pADT8949_set_rate2 = (pADT8949_set_rate2)GetProcAddress(m_Hinst, "adt8949_set_rate2"); + m_pADT8949_get_command_pos = (pADT8949_get_command_pos)GetProcAddress(m_Hinst, "adt8949_get_command_pos"); + m_pADT8949_get_actual_pos = (pADT8949_get_actual_pos)GetProcAddress(m_Hinst, "adt8949_get_actual_pos"); + m_pADT8949_get_stopdata = (pADT8949_get_stopdata)GetProcAddress(m_Hinst, "adt8949_get_stopdata"); + m_pADT8949_pmove = (pADT8949_pmove)GetProcAddress(m_Hinst, "adt8949_pmove"); + m_pADT8949_abs_pmove = (pADT8949_abs_pmove)GetProcAddress(m_Hinst, "adt8949_abs_pmove"); + m_pADT8949_continue_move = (pADT8949_continue_move)GetProcAddress(m_Hinst, "adt8949_continue_move"); + m_pADT8949_inp_arc3 = (pADT8949_inp_arc3)GetProcAddress(m_Hinst, "adt8949_inp_arc3"); + m_pADT8949_inp_abs_arc3 = (pADT8949_inp_abs_arc3)GetProcAddress(m_Hinst, "adt8949_inp_abs_arc3"); + m_pADT8949_get_out = (pADT8949_get_out)GetProcAddress(m_Hinst, "adt8949_get_out"); + m_pADT8949_write_bit = (pADT8949_write_bit)GetProcAddress(m_Hinst, "adt8949_write_bit"); + m_pADT8949_read_bit = (pADT8949_read_bit)GetProcAddress(m_Hinst, "adt8949_read_bit"); + m_pADT8949_set_gpio = (pADT8949_set_gpio)GetProcAddress(m_Hinst, "adt8949_set_gpio"); + m_pADT8949_get_gpio = (pADT8949_get_gpio)GetProcAddress(m_Hinst, "adt8949_get_gpio"); + m_pADT8949_SetHomeMode_Ex = (pADT8949_SetHomeMode_Ex)GetProcAddress(m_Hinst, "adt8949_SetHomeMode_Ex"); + m_pADT8949_SetHomeSpeed_Ex = (pADT8949_SetHomeSpeed_Ex)GetProcAddress(m_Hinst, "adt8949_SetHomeSpeed_Ex"); + m_pADT8949_HomeProcess_Ex = (pADT8949_HomeProcess_Ex)GetProcAddress(m_Hinst, "adt8949_HomeProcess_Ex"); + m_pADT8949_GetHomeStatus_Ex = (pADT8949_GetHomeStatus_Ex)GetProcAddress(m_Hinst, "adt8949_GetHomeStatus_Ex"); + m_pADT8949_dec_stop = (pADT8949_dec_stop)GetProcAddress(m_Hinst, "adt8949_dec_stop"); + m_pADT8949_sudden_stop = (pADT8949_sudden_stop)GetProcAddress(m_Hinst, "adt8949_sudden_stop"); + m_pADT8949_inp_abs_move4 = (pADT8949_inp_abs_move4)GetProcAddress(m_Hinst, "adt8949_inp_abs_move4"); + m_pADT8949_abs_pmove_closedloop = (pADT8949_abs_pmove_closedloop)GetProcAddress(m_Hinst, "adt8949_abs_pmove_closedloop"); + m_pADT8949_set_pos_compare_mode = (pADT8949_set_pos_compare_mode)GetProcAddress(m_Hinst, "adt8949_set_pos_compare_mode"); + m_pADT8949_set_pos_compare_pulse = (pADT8949_set_pos_compare_pulse)GetProcAddress(m_Hinst, "adt8949_set_pos_compare_pulse"); + m_pADT8949_set_pos_compare_io = (pADT8949_set_pos_compare_io)GetProcAddress(m_Hinst, "adt8949_set_pos_compare_io"); + m_pADT8949_set_pos_compare_multi_io = (pADT8949_set_pos_compare_multi_io)GetProcAddress(m_Hinst, "adt8949_set_pos_compare_multi_io"); + m_pADT8949_get_pos_compare_len = (pADT8949_get_pos_compare_len)GetProcAddress(m_Hinst, "adt8949_get_pos_compare_len"); + m_pADT8949_clear_pos_compare_point = (pADT8949_clear_pos_compare_point)GetProcAddress(m_Hinst, "adt8949_clear_pos_compare_point"); + m_pADT8949_set_pos_compare_stop_axis = (pADT8949_set_pos_compare_stop_axis)GetProcAddress(m_Hinst, "adt8949_set_pos_compare_stop_axis"); + m_pADT8949_NeedHome_Ex = (pADT8949_NeedHome_Ex)GetProcAddress(m_Hinst, "adt8949_NeedHome_Ex"); + m_pADT8949_ResetHomeStatus_Ex = (pADT8949_ResetHomeStatus_Ex)GetProcAddress(m_Hinst, "adt8949_ResetHomeStatus_Ex"); + m_pADT8949_set_lock_position = (pADT8949_set_lock_position)GetProcAddress(m_Hinst, "adt8949_set_lock_position"); + m_pADT8949_get_lock_status = (pADT8949_get_lock_status)GetProcAddress(m_Hinst, "adt8949_get_lock_status"); + m_pADT8949_get_lock_position = (pADT8949_get_lock_position)GetProcAddress(m_Hinst, "adt8949_get_lock_position"); + m_pADT8949_clr_lock_status = (pADT8949_clr_lock_status)GetProcAddress(m_Hinst, "adt8949_clr_lock_status"); + + } + else + { + rtn = 1; + } + } + return rtn; +} +//=========================================================================== +HSI_STATUS HSI_Motion::IsSupported(UINT &Types) +{ + auto rStatus = HSI_STATUS_NORMAL; + Types = 1; + return rStatus; +} +//=========================================================================== +HSI_STATUS HSI_Motion::Startup(HWND _hWnd, bool _bOfflineOnly) +{ + auto rStatus = HSI_STATUS_NORMAL; + hWnd = _hWnd; + bOfflineOnly = _bOfflineOnly; + int rtn(0); + if (!bOfflineOnly) + { + if (!g_pHSI_Motion) + { + g_pHSI_Motion = new HSI_Motion(); + } + rtn = ADT8949Init(); + if (rtn && m_IsCloseAllAlarm == 0) + { + Shutdown(); + sEvenProp.Init(); + sEvenProp.EventType = HSI_EVENT_ERROR; + sEvenProp.EventID = HSI_EVENT_MOTION; + sEvenProp.EventResponse = HSI_EVENT_RESPONSE_OK; + strcpy_s(sEvenProp.EventData, HSI_MaxStringLength, "adt8949.dll鍔犺浇澶辫触!"); + EventCallback(sEvenProp); + return HSI_STATUS_FAILED; + } + rtn = m_pADT8949_initial(); + if (rtn <= 0 && m_IsCloseAllAlarm == 0) + { + sEvenProp.Init(); + sEvenProp.EventType = HSI_EVENT_ERROR; + sEvenProp.EventID = HSI_EVENT_MOTION; + sEvenProp.EventResponse = HSI_EVENT_RESPONSE_OK; + strcpy_s(sEvenProp.EventData, HSI_MaxStringLength, "浼椾负鍏磋繍鍔ㄦ帶鍒跺崱鎵撳紑澶辫触!"); + EventCallback(sEvenProp); + return HSI_STATUS_FAILED; + } + CString csAppPath; + GetAppPath(csAppPath); + CTime tm = CTime::GetCurrentTime(); + CString csTime = tm.Format("%Y-%m-%d");//鏄剧ず骞存湀鏃 + CString dir = L"\\Log\\" + csTime += L".ADT_8949.Log"; + DeleteFile(csAppPath + dir); + DeleteFile(csAppPath + L"\\Log\\ADT8949_Precision.Log"); + Load_ADT8949_Motion_Inifile(csAppPath + _T("\\Config\\ADT8949_Motion.ini")); + Load_ADT8949_Config_Inifile(csAppPath + _T("\\Config\\ADT8949_Config.ini")); + //rtn = m_pADT8949_reset_card(CARDNO); + //璁剧疆鑴夊啿妯″紡锛屾璐熼檺浣嶏紝stop0鏃犳晥(鏈烘鍘熺偣Home), stop1(Z),杞檺浣嶆棤鏁 + for (int i = 1; i < 5; i++) + { + rtn = m_pADT8949_set_softlimit_mode(CARDNO, i, 0, 100000000, -100000000, 0);//鏃犳晥杞檺浣 + rtn = m_pADT8949_set_limit_mode(CARDNO, i, 1, 1, 0);//浣庣數骞0,琛ㄧず闄愪綅娌¤Е鍙戠殑鎯呭喌 + rtn = m_pADT8949_set_stop0_mode(CARDNO, i, 0, 0, 0);//鏃犳晥鏈烘鍘熺偣 + rtn = m_pADT8949_set_stop1_mode(CARDNO, i, 0, 0, 0);//鏃犳晥鍏夋爡灏篫淇″彿 + rtn = m_pADT8949_set_gear(CARDNO, i, 1 / axis_scale_resolution[i] + 0.0001000f);//鍔0.0001鏃舵秷闄ゆ诞鐐硅繍绠楃殑璇樊 + rtn = m_pADT8949_set_pulse_mode(CARDNO, i, 1, 1, m_PulseDir[i]);//鑴夊啿鍔犳柟鍚,鏈鍚庝竴涓弬鏁版敼鍙樺疄闄呬綅缃殑鑴夊啿鏂瑰悜锛岄昏緫浣嶇疆涓嶆敼鍙橈紝绉诲姩鏂瑰悜鍜岄檺浣嶄篃浼氶殢鐫鍙 + if (i == 2) + { + rtn = m_pADT8949_set_actual_count_mode(CARDNO, i, 0, 1);//璁剧疆瀹為檯璁℃暟鍣(缂栫爜鍣ㄨ緭鍏)鐨勫伐浣滄柟寮,灏辨槸瀹為檯浣嶇疆鏄昏緫浣嶇疆鐨4鍊 + } + else + { + rtn = m_pADT8949_set_actual_count_mode(CARDNO, i, 0, 0);//璁剧疆瀹為檯璁℃暟鍣(缂栫爜鍣ㄨ緭鍏)鐨勫伐浣滄柟寮,灏辨槸瀹為檯浣嶇疆鏄昏緫浣嶇疆鐨4鍊 + } + rtn = m_pADT8949_set_admode(CARDNO, i, 0); + rtn = m_pADT8949_set_speed(CARDNO, i, m_SetPotion_Speed[i]); //鍚堟垚椹卞姩閫熷害8000/1000=8 + rtn = m_pADT8949_set_startv(CARDNO, i, m_SetPotion_StartV[i]); + rtn = m_pADT8949_set_acc(CARDNO, i, m_SetPotion_Acc[i]);//1000/1000=1 + rtn = m_pADT8949_set_dec(CARDNO, i, m_SetPotion_Dec[i]);//1000/1000=1 + } + CreateThread(); + SetEvent(m_hTriggerEvent); + m_Thread_State = HSI_THREAD_PAUSED; + if (m_IsIOFuntion == 1) + { + m_Thread_StateIO = HSI_THREAD_RUNNING; + CreateThreadIO(); + SetEvent(m_hTriggerEventIO); + } + if (m_IsHomeEncPos == 1) + { + for (int i = 1; i < 5; i++) + { + if (m_Home_Machine_Axis[i] == 1) + { + rtn = m_pADT8949_set_actual_pos(CARDNO, i, m_Home_Enc_Pos_Axis[i]); + rtn = m_pADT8949_set_command_pos(CARDNO, i, m_Home_Prf_Pos_Axis[i]); + } + } + } + } + else + rStatus = HSI_STATUS_FAILED; + g_pLogger->SendAndFlushWithTime(L"Startup successful!\n"); + return rStatus; +} +//=========================================================================== +HSI_STATUS HSI_Motion::HomeMachine(bool bHomed) +{ + auto rStatus = HSI_STATUS_NORMAL; + int rtn(0); + if (!bHomed) + { + g_pLogger->SendAndFlushWithTime(L"HomeMachine return!\n"); + CurrentHomeMachineState = E_GTS_HOME_FINISHED; + return HSI_STATUS_NORMAL; + } + if (g_pHSI_Motion && CurrentHomeMachineState != E_GTS_HOME_ING) + { + g_pLogger->SendAndFlushWithTime(L"HomeMachine coming!\n"); + //鍒ゆ柇椹卞姩鍣ㄦ槸鍚︽姤璀 + if (DriverAlarmStatus() == HSI_STATUS_FAILED) + { + return HSI_STATUS_FAILED; + } + bool bIshome = false; + IsHomed(bIshome); + if (bIshome == true) + { + CurrentHomeMachineState = E_GTS_HOME_FINISHED; + return HSI_STATUS_NORMAL; + } + long encPos[5] = { 0, 0, 0, 0, 0 };//璇诲彇瀹為檯浣嶇疆 + long encPosAfter[5] = { 0, 0, 0, 0, 0 };//杩愯鍓嶇殑浣嶇疆 + int HomeFinished[5] = { 1, 1, 1, 1, 1 }; + + sEvenProp.EventType = HSI_EVENT_FUNCTION; + sEvenProp.EventID = HSI_EVENT_MOTION_DCC_HOME; + sEvenProp.EventResponse = HSI_EVENT_RESPONSE_CANCEL; + strcpy_s(sEvenProp.EventData, HSI_MaxStringLength, "Go Home!"); + EventCallback(sEvenProp); + if (sEvenProp.EventCallbackID == HSI_EVENT_RESPONSE_CANCEL) + { + g_pLogger->SendAndFlushWithTime(L"HomeMachine CANCEL!\n"); + CurrentHomeMachineState = E_GTS_HOME_NONE; + return HSI_STATUS_NORMAL; + } + for (short i = 1; i < 5; i++) + { + rtn = m_pADT8949_get_actual_pos(CARDNO, i, &encPosAfter[i]); + rtn = m_pADT8949_ResetHomeStatus_Ex(CARDNO, i); + } + g_IsAbort = false; + m_HomeFocus = false; + CurrentHomeMachineState = E_GTS_HOME_ING; + if (HomeJog() == HSI_STATUS_FAILED) + { + g_pLogger->SendAndFlushWithTime(L"HomeMachine HomeJog = HSI_STATUS_FAILED!\n"); + return HSI_STATUS_FAILED; + } + //寮濮嬪洖鍘熺偣 + for (int i = 1; i < 5; i++) + { + if (m_Home_Machine_Axis[i] == 1) + { + if (i == 3) + { + //鏈夊叧Z鐩哥殑閮芥病鐢ㄤ簡锛屾ā寮4鎴栬5琛ㄧず鍥炲鐨勬柟鍚,鏈鍚庝竴涓弬鏁拌〃绀烘壘鍒板師鐐逛俊鍙峰悗鍋忕Щ1mm + rtn = m_pADT8949_SetHomeMode_Ex(CARDNO, i, 4, 0, 0, 0, (float)m_Home_Back_Range[i], 0, 0); + } + else + { + rtn = m_pADT8949_SetHomeMode_Ex(CARDNO, i, 4, 0, 0, 0, (float)m_Home_Back_Range[i], 0, 0); + } + //鍗″彿 杞村彿 STOP0鎼滃璧峰閫熷害 鍘熺偣鎼滃閫熷害 浣庨熸帴杩戝師鐐归熷害 鍥炲師鐐硅繃绋嬩腑鐨勫姞閫熷害 缂栫爜鍣╖鐩(STOP1)鎼滃閫熷害 + rtn += m_pADT8949_SetHomeSpeed_Ex(CARDNO, i, 1, (float)m_Home_Speed_Search[i], (float)m_Home_Speed_Limit[i], (float)m_Home_Acc[i], 0); + rtn += m_pADT8949_HomeProcess_Ex(CARDNO, i); + } + } + if (rtn != 0) + { + CurrentHomeMachineState = E_GTS_HOME_NONE; + sEvenProp.EventType = HSI_EVENT_ERROR; + sEvenProp.EventID = HSI_EVENT_MOTION; + sEvenProp.EventResponse = HSI_EVENT_RESPONSE_OK; + strcpy_s(sEvenProp.EventData, HSI_MaxStringLength, "鍥炲鍙傛暟璁剧疆寮傚父!"); + g_pLogger->SendAndFlushWithTime(L"Go home pram err-!\n"); + EventCallback(sEvenProp); + return HSI_STATUS_FAILED; + } + int count = 0; + while (true) + { + DoEvents(); + Sleep(1); + if (g_IsAbort) + { + g_IsAbort = false; + g_pLogger->SendAndFlushWithTime(L"HomeMachine : DoEvents return 1\n"); + return HSI_STATUS_FAILED; + } + if (count > m_HomeTimeout) + { + AbortMotion(); + CurrentHomeMachineState = E_GTS_HOME_NONE; + sEvenProp.EventType = HSI_EVENT_ERROR; + sEvenProp.EventID = HSI_EVENT_MOTION; + sEvenProp.EventResponse = HSI_EVENT_RESPONSE_OK; + strcpy_s(sEvenProp.EventData, HSI_MaxStringLength, "鍥炲瓒呮椂-!"); + g_pLogger->SendAndFlushWithTime(L"Go home timeout_HomeMachine-!\n"); + EventCallback(sEvenProp); + return HSI_STATUS_FAILED; + } + for (int i = 1; i < 5; i++) + { + if (m_Home_Machine_Axis[i] == 1 && HomeFinished[i] != 0) + { + Sleep(1); + HomeFinished[i] = m_pADT8949_GetHomeStatus_Ex(CARDNO, i); + if (HomeFinished[i] == 0) + { + g_pLogger->SendAndFlushWithTime(_T("HomeMachine : HomeFinished[%d]= %d\n"), i, HomeFinished[i]); + } + if (HomeFinished[i] > 20 || HomeFinished[i] < 0) + { + AbortMotion(); + CurrentHomeMachineState = E_GTS_HOME_NONE; + sEvenProp.Init(); + sEvenProp.EventType = HSI_EVENT_ERROR; + sEvenProp.EventID = HSI_EVENT_MOTION; + sEvenProp.EventResponse = HSI_EVENT_RESPONSE_OK; + sprintf_s(sEvenProp.EventData, "%d杞村洖瀹跺け璐-!", i); + EventCallback(sEvenProp); + return HSI_STATUS_FAILED; + } + } + else + { + HomeFinished[i] = 0; + } + } + if (HomeFinished[1] == 0 && HomeFinished[2] == 0 && HomeFinished[3] == 0 && HomeFinished[4] == 0) + { + break; + } + count++; + } + g_pLogger->SendAndFlushWithTime(L"HomeMachine success!\n"); + //鍥炲缁撴潫 + Sleep(m_ZeroTime[1]); + for (short i = 1; i < 5; i++) + { + m_pADT8949_get_actual_pos(CARDNO, i, &encPos[i]); + m_pADT8949_set_actual_pos(CARDNO, i, 0); + m_pADT8949_set_command_pos(CARDNO, i, 0); + } + CurrentHomeMachineState = E_GTS_HOME_FINISHED; + SetPositionXyza(0xf, (encPosAfter[1] - encPos[1])*axis_scale_resolution[1], (encPosAfter[2] - encPos[2])*axis_scale_resolution[2], (encPosAfter[3] - encPos[3])*axis_scale_resolution[3], (encPosAfter[4] - encPos[4])*axis_scale_resolution[4], HSI_MOTION_MOVE_NOWAIT, 0); + } + return rStatus; +} +//=========================================================================== +HSI_STATUS HSI_Motion::HomeJog() +{ + auto rStatus = HSI_STATUS_NORMAL; + if (g_pHSI_Motion) + { + int rtn(0); + //XYZ涓夎酱鍏堣窇鍒伴檺浣 + for (short i = 1; i < 5; i++) + { + if (m_Home_Machine_Axis[i] == 1) + { + rtn = m_pADT8949_set_softlimit_mode(CARDNO, i, 0, 100000000, -100000000, 0);//鍥炲鏃舵棤鏁堣蒋闄愪綅 + //rtn = m_pADT8949_set_command_pos(CARDNO, i, 0); //娓呴昏緫璁℃暟鍣 + //rtn = m_pADT8949_set_actual_pos(CARDNO, i, 0); //娓呭疄浣嶈鏁板櫒 + rtn = m_pADT8949_set_startv(CARDNO, i, 1); //璁惧畾璧峰閫熷害 + rtn = m_pADT8949_set_speed(CARDNO, i, (float)m_Home_Speed_High[i]); //璁惧畾椹卞姩閫熷害 + rtn = m_pADT8949_set_acc(CARDNO, i, (float)m_Home_Acc[i]); //璁惧畾鍔犻熷害 + rtn = m_pADT8949_set_dec(CARDNO, i, (float)m_Home_Acc[i]); //璁惧畾鍑忛熷害 + if (i == 3) + { + rtn = m_pADT8949_continue_move(CARDNO, i, 0); + } + else + { + rtn = m_pADT8949_continue_move(CARDNO, i, 1); + } + } + } + + int status = 0, count = 0; + do + { + DoEvents(); + Sleep(1); + if (g_IsAbort) + { + g_IsAbort = false; + return HSI_STATUS_FAILED; + } + rtn = m_pADT8949_get_status_all(CARDNO, &status); + count++; + for (int i = 1; i < 5; i++) + { + if (m_Home_Machine_Axis[i] == 1 && count > m_HomeTimeout) + { + AbortMotion(); + CurrentHomeMachineState = E_GTS_HOME_NONE; + g_pLogger->SendAndFlushWithTime(L"Go home timeout_HomeMachine+!\n"); + sEvenProp.Init(); + sEvenProp.EventType = HSI_EVENT_ERROR; + sEvenProp.EventID = HSI_EVENT_MOTION; + sEvenProp.EventResponse = HSI_EVENT_RESPONSE_OK; + sprintf_s(sEvenProp.EventData, "%d杞村洖瀹跺け璐+!", i); + EventCallback(sEvenProp); + return HSI_STATUS_FAILED; + } + } + } while ((status & 0x1) || (status & 0x2) || (status & 0x4) || (status & 0x8)); + g_pLogger->SendAndFlushWithTime(L"HomeJog m_pADT8949_continue_move Over!\n"); + } + return rStatus; +} +//=========================================================================== +HSI_STATUS HSI_Motion::IsHomed(bool &bHomed) +{ + auto rStatus = HSI_STATUS_NORMAL; + int rtn(0); + int HomeFinished[5] = { 1, 1, 1, 1, 1 }; + long encPos[5] = { 0, 0, 0, 0, 0 };//璇诲彇瀹為檯浣嶇疆 + long prfPos[5] = { 0, 0, 0, 0, 0 };//璇诲彇瑙勫垝浣嶇疆 + for (short i = 1; i < 5; i++) + { + rtn = m_pADT8949_get_actual_pos(CARDNO, i, &encPos[i]); + rtn = m_pADT8949_get_command_pos(CARDNO, i, &prfPos[i]); + if (m_Home_Machine_Axis[i] == 1) + { + HomeFinished[i] = m_pADT8949_NeedHome_Ex(CARDNO, i); + } + } + //鏌ョ湅鍏夋爡灏烘湁鏃犲共鎵 + if (encPos[1] < -10000000 || encPos[1] > 10000000 || encPos[2] < -10000000 || encPos[3] < -10000000 || encPos[4] < -10000000) + { + sEvenProp.Init(); + sEvenProp.EventType = HSI_EVENT_ERROR; + sEvenProp.EventID = HSI_EVENT_MOTION; + sEvenProp.EventResponse = HSI_EVENT_RESPONSE_OK; + sprintf_s(sEvenProp.EventData, "鍧愭爣璇樊杩囧ぇ"); + EventCallback(sEvenProp); + CurrentHomeMachineState = E_GTS_HOME_NONE; + bHomed = false; + } + //閲囩敤瑙勫垝浣嶇疆鍜屽疄闄呬綅缃剦鍐茶繘琛屾瘮杈冿紝鍒ゆ柇鏄惁鍥炲 + if (m_IsHomePrfPos == 1) + { + if ((abs(encPos[1] - prfPos[1]) >= m_HomeComparePulse[1] && m_Home_Machine_Axis[1] == 1) + || (abs(encPos[2] - prfPos[2]) >= m_HomeComparePulse[2] && m_Home_Machine_Axis[2] == 1) + || (abs(encPos[3] - prfPos[3]) >= m_HomeComparePulse[3] && m_Home_Machine_Axis[3] == 1) + || (abs(encPos[4] - prfPos[4]) >= m_HomeComparePulse[4] && m_Home_Machine_Axis[4] == 1)) + { + CurrentHomeMachineState = E_GTS_HOME_NONE; + bHomed = false; + g_pLogger->SendAndFlushWithTime(L"IsHomed m_IsHomePrfPos NONE\n"); + } + } + //閲囩敤瀹為檯浣嶇疆鍜屽叧闂蒋浠惰褰曠殑浣嶇疆姣旇緝锛屽垽鏂槸鍚﹀洖瀹 + if (m_IsHomeEncPos == 1) + { + if ((fabs(m_Home_Enc_Pos_Axis[1] / axis_scale_resolution[1] - encPos[1]) >= m_HomeComparePulse[1] && m_Home_Machine_Axis[1] == 1) + || (fabs(m_Home_Enc_Pos_Axis[2] / axis_scale_resolution[2] - encPos[2]) >= m_HomeComparePulse[2] && m_Home_Machine_Axis[2] == 1) + || (fabs(m_Home_Enc_Pos_Axis[3] / axis_scale_resolution[3] - encPos[3]) >= m_HomeComparePulse[3] && m_Home_Machine_Axis[3] == 1) + || (fabs(m_Home_Enc_Pos_Axis[4] / axis_scale_resolution[4] - encPos[4]) >= m_HomeComparePulse[4] && m_Home_Machine_Axis[4] == 1)) + { + CurrentHomeMachineState = E_GTS_HOME_NONE; + bHomed = false; + g_pLogger->SendAndFlushWithTime(L"IsHomed m_IsHomeEncPos NONE\n"); + } + } + //鏍规嵁鎺у埗鍣ㄧ殑鍥炲鐘舵佸垽鏂 + if (HomeFinished[1] == 1 && HomeFinished[2] == 1 && HomeFinished[3] == 1 && HomeFinished[4] == 1 && m_HomeFocus == false) + { + bHomed = true; + CurrentHomeMachineState = E_GTS_HOME_FINISHED; + g_pLogger->SendAndFlushWithTime(L"IsHomed HomeFinished FINISHED\n"); + } + else + { + CurrentHomeMachineState = E_GTS_HOME_NONE; + bHomed = false; + g_pLogger->SendAndFlushWithTime(L"IsHomed HomeFinished NONE\n"); + } + //娌℃湁鍚敤浠讳綍涓杞村洖瀹 + 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) + { + bHomed = true; + CurrentHomeMachineState = E_GTS_HOME_FINISHED; + g_pLogger->SendAndFlushWithTime(L"IsHomed m_Home_Machine_Axis_All FINISHED\n"); + } + return rStatus; +} +//=========================================================================== +HSI_STATUS HSI_Motion::GetAppPath(CString &Path) +{ + auto rStatus = HSI_STATUS_NORMAL; + Path = _T(""); + if (Path.IsEmpty()) + { + CString tmpPath; + GetModuleFileName(NULL, tmpPath.GetBuffer(255), 255); + tmpPath.ReleaseBuffer(); + tmpPath.TrimRight(); + int nLastSlash = tmpPath.ReverseFind('\\'); + if (nLastSlash >= 0) + tmpPath = tmpPath.Left(nLastSlash); + else + tmpPath.Empty(); + Path = tmpPath; + } + return rStatus; +} +//=========================================================================== +HSI_STATUS HSI_Motion::Jog(UINT AxisTypes, double Speed) +{ + auto rStatus = HSI_STATUS_NORMAL; + if (g_pHSI_Motion) + { + int rtn(0); + int dir(0); + short AxisNumber = AxisConvert(AxisTypes); + m_Thread_State = HSI_THREAD_PAUSED; + + double Startv(1); + double Endv(1); + double Acc(1); + double Dec(1); + double JogSpeed = SpeedPercent(Speed, Startv, Endv, Acc, Dec); + dir = JogSpeed > 0 ? 0 : 1; + JogSpeed = fabs(JogSpeed); + if (JogSpeed > 400) + { + JogSpeed = 400; + } + if (CurrentHomeMachineState == E_GTS_HOME_FINISHED) + { + if (m_ControlMode[AxisNumber] == 1) + { + rtn = m_pADT8949_set_softlimit_mode(CARDNO, AxisNumber, 1, axis_pos_working_limit[AxisNumber] / m_LoopRate[AxisNumber], axis_neg_working_limit[AxisNumber] / m_LoopRate[AxisNumber], 1); + } + else + { + rtn = m_pADT8949_set_softlimit_mode(CARDNO, AxisNumber, 1, axis_pos_working_limit[AxisNumber], axis_neg_working_limit[AxisNumber], 1); + } + } + rtn = m_pADT8949_set_admode(CARDNO, AxisNumber, 0); //璁剧疆涓0 S鍔犲噺閫燂紝1 T姊舰锛2 鎸囨暟, 3 涓夎鍑芥暟 + rtn = m_pADT8949_set_startv(CARDNO, AxisNumber, (float)Startv); //璧峰閫熷害 + rtn = m_pADT8949_set_endv(CARDNO, AxisNumber, (float)Endv); //缁堟閫熷害 + rtn = m_pADT8949_set_speed(CARDNO, AxisNumber, (float)JogSpeed); //椹卞姩閫 + rtn = m_pADT8949_set_acc(CARDNO, AxisNumber, (float)Acc);; //鍔犻熷害 + rtn = m_pADT8949_set_dec(CARDNO, AxisNumber, (float)Dec); //鍑忛熷害 + rtn = m_pADT8949_continue_move(CARDNO, AxisNumber, dir); + } + return rStatus; +} +//=========================================================================== +HSI_STATUS HSI_Motion::StopJog() +{ + auto rStatus = HSI_STATUS_NORMAL; + if (g_pHSI_Motion) + { + int rtn(0); + for (int i = 1; i < 5; i++) + { + if (m_StopJogMode[i] == 1) + { + rtn = m_pADT8949_sudden_stop(CARDNO, i);//鎬ュ仠 + } + else + rtn = m_pADT8949_dec_stop(CARDNO, i);//鍑忛熷仠姝 + } + } + return rStatus; +} +//=========================================================================== +int HSI_Motion::P2P(short AxisNumber, long Pos, double Speed, double Acc) +{ + UNREFERENCED_PARAMETER(AxisNumber); + UNREFERENCED_PARAMETER(Pos); + UNREFERENCED_PARAMETER(Speed); + UNREFERENCED_PARAMETER(Acc); + if (g_pHSI_Motion) + { + + } + return 0; +} +//=========================================================================== +HSI_STATUS HSI_Motion::GetPositionEncPrfMulti(UINT AxisTypes, double *EncPos, double *PrfPos, int Count) +{ + auto rStatus = HSI_STATUS_NORMAL; + if (g_pHSI_Motion) + { + UNREFERENCED_PARAMETER(AxisTypes); + CString tempStr; + int rtn(0); + long encPos = 0; + long prfPos = 0; + for (short i = 1; i <= Count; i++) + { + encPos = 0; + prfPos = 0; + rtn = m_pADT8949_get_actual_pos(CARDNO, i, &encPos); + rtn = m_pADT8949_get_command_pos(CARDNO, i, &prfPos); + + EncPos[i] = encPos; + PrfPos[i] = prfPos; + EncPos[i] *= axis_scale_resolution[i]; + PrfPos[i] *= axis_scale_resolution[i]; + tempStr.Format(_T("%.4f"), EncPos[i]); + tempStr.Format(_T("%.4f"), PrfPos[i]); + } + } + return rStatus; +} +//=========================================================================== +HSI_STATUS HSI_Motion::GetPositionXyz(UINT AxisTypes, double &PositionX, double &PositionY, double &PositionZ, double &Time) +{ + auto rStatus = HSI_STATUS_NORMAL; + if (g_pHSI_Motion) + { + UNREFERENCED_PARAMETER(AxisTypes); + UNREFERENCED_PARAMETER(Time); + //璇诲彇3涓酱鐨勪綅缃 + CString tempStr; + int rtn(0); + long X(0), Y(0), Z(0); + rtn = m_pADT8949_get_actual_pos(CARDNO, 1, &X); + rtn = m_pADT8949_get_actual_pos(CARDNO, 2, &Y); + rtn = m_pADT8949_get_actual_pos(CARDNO, 3, &Z); + + PositionX = X*axis_scale_resolution[1]; + PositionY = Y*axis_scale_resolution[2]; + PositionZ = Z*axis_scale_resolution[3]; + LARGE_INTEGER tima; + QueryPerformanceCounter(&tima); + Time = static_cast(tima.QuadPart); + } + return rStatus; +} +//=========================================================================== +HSI_STATUS HSI_Motion::SetPositionXyz(UINT AxisTypes, double PositionX, double PositionY, double PositionZ, HSI_MOTION_MOVE_TYPE eType, double dFlyRadius) +{ + auto rStatus = HSI_STATUS_NORMAL; + UNREFERENCED_PARAMETER(dFlyRadius); + int rtn(0); + if (g_pHSI_Motion) + { + g_pLogger->SendAndFlushWithTime(L"SetPositionXyz coming!\n"); + //鍒ゆ柇椹卞姩鍣ㄦ槸鍚︽姤璀 + if (DriverAlarmStatus() == HSI_STATUS_FAILED) + { + return HSI_STATUS_FAILED; + } + //鍒ゆ柇鏄惁鍥炲 + bool bIshome = false; + IsHomed(bIshome); + if (bIshome == false) + { + sEvenProp.Init(); + sEvenProp.EventType = HSI_EVENT_ERROR; + sEvenProp.EventID = HSI_EVENT_MOTION; + sEvenProp.EventResponse = HSI_EVENT_RESPONSE_OK; + strcpy_s(sEvenProp.EventData, HSI_MaxStringLength, "娌℃湁鍥炲锛岃鍥炲涔嬪悗鍐嶈瘯锛"); + EventCallback(sEvenProp); + return HSI_STATUS_FAILED; + } + if (CurrentMotionState != E_SO7_MOTION_MOVETO) + { + g_pLogger->SendAndFlushWithTime(L"SetPositionXyz init!\n"); + CurrentMotionState = E_SO7_MOTION_MOVETO; + if (eType == HSI_MOTION_MOVE_WAIT) + { + m_Thread_State = HSI_THREAD_PAUSED; + SetEvent(m_hTriggerEvent); + } + m_IsExMotion = E_GTS_MOTION_XYZA; + LimitOver(HSI_MOTION_AXIS_X, PositionX); + LimitOver(HSI_MOTION_AXIS_Y, PositionY); + LimitOver(HSI_MOTION_AXIS_Z, PositionZ); + LimitOver(HSI_MOTION_AXIS_R, m_PositionA); + m_PosThread[1] = PositionX; + m_PosThread[2] = PositionY; + m_PosThread[3] = PositionZ; + m_PosThread[4] = m_PositionA; + if (m_SetPotion_Speed[1] > 500) + { + m_SetPotion_Speed[1] = 500; + } + if (m_SetPotion_Speed[1] < 0) + { + m_SetPotion_Speed[1] = 0; + } + g_IsAbort = false; + rtn = m_pADT8949_set_admode(CARDNO, INPA_AXISREG, 0); + rtn = m_pADT8949_set_speed(CARDNO, INPA_AXISREG, m_SetPotion_Speed[1]); //鍚堟垚椹卞姩閫熷害8000/1000=8 + rtn = m_pADT8949_set_startv(CARDNO, INPA_AXISREG, m_SetPotion_StartV[1]); + rtn = m_pADT8949_set_acc(CARDNO, INPA_AXISREG, m_SetPotion_Acc[1]);//1000/1000=1 + rtn = m_pADT8949_set_dec(CARDNO, INPA_AXISREG, m_SetPotion_Dec[1]);//1000/1000=1 + + if (m_ControlMode[1] == 0 && m_ControlMode[2] == 0 && m_ControlMode[3] == 1) + { + g_pLogger->SendAndFlushWithTime(L"SetPositionXyz : XY DriverClose, Z ControlClose\n"); + rtn = m_pADT8949_inp_abs_move4(CARDNO, 0, 3, (float)PositionX, (float)PositionY, 0, 0); //XY寮濮嬫彃琛ワ紝Z鎺у埗鍣ㄩ棴鐜 + g_pLogger->SendAndFlushWithTime(L"m_pADT8949_inp_abs_move4 1\n"); + rtn = m_pADT8949_abs_pmove_closedloop(CARDNO, 3, (float)m_PosThread[3] * m_Gear[3], (int)(m_PrecisionCount[3]), m_LoopPeriod[3], m_LoopRate[3]);//Z杞磋嚜闂幆 + g_pLogger->SendAndFlushWithTime(L"m_pADT8949_inp_abs_move4 2\n"); + } + else if (m_ControlMode[1] == 1 && m_ControlMode[2] == 1 && m_ControlMode[3] == 1)//XYZ鎺у埗鍣ㄩ棴鐜 + { + g_pLogger->SendAndFlushWithTime(L"SetPositionXyz : XYZ ControlClose\n"); + rtn = m_pADT8949_abs_pmove_closedloop(CARDNO, 1, (float)PositionX*m_Gear[1], (int)m_PrecisionCount[1], m_LoopPeriod[1], m_LoopRate[1]); + rtn = m_pADT8949_abs_pmove_closedloop(CARDNO, 2, (float)PositionY*m_Gear[2], (int)m_PrecisionCount[2], m_LoopPeriod[2], m_LoopRate[2]); + rtn = m_pADT8949_abs_pmove_closedloop(CARDNO, 3, (float)PositionZ*m_Gear[3], (int)m_PrecisionCount[3], m_LoopPeriod[3], m_LoopRate[3]); + } + else + { + if (AxisTypes == 0xf && m_ControlMode[1] == 0 && m_ControlMode[2] == 0 && m_ControlMode[3] == 0 && m_ControlMode[4] == 0) + { + //XYZA寮濮嬫彃琛 + g_pLogger->SendAndFlushWithTime(L"SetPositionXyz : XYZA DriverClose\n"); + rtn = m_pADT8949_inp_abs_move4(CARDNO, 0, 15, (float)PositionX, (float)PositionY, (float)PositionZ, (float)m_PositionA); //XZYA寮濮嬫彃琛 + } + else + { + //XYZ寮濮嬫彃琛 + g_pLogger->SendAndFlushWithTime(L"SetPositionXyz : XYZ DriverClose\n"); + rtn = m_pADT8949_inp_abs_move4(CARDNO, 0, 7, (float)PositionX, (float)PositionY, (float)PositionZ, 0); //XZY寮濮嬫彃琛 + } + } + if (eType == HSI_MOTION_MOVE_WAIT) + { + int status = 0; + g_pLogger->SendAndFlushWithTime(L"Wait SetPositionXyz move!\n"); + do + { + Sleep(1); + m_pADT8949_get_inp_status(CARDNO, &status); //璇绘彃琛ョ姸鎬 + if (g_IsAbort == true) + { + break; + } + } while (status != 0);//鎻掕ˉ缁撴潫璺冲嚭 + + long count = 0; + long Pos[5] = { 0, 0, 0, 0, 0 }; + double ProPulse[5] = { 0.0, 0.0, 0.0, 0.0, 0.0 }; + + ProPulse[1] = m_PosThread[1] / axis_scale_resolution[1]; + ProPulse[2] = m_PosThread[2] / axis_scale_resolution[2]; + ProPulse[3] = m_PosThread[3] / axis_scale_resolution[3]; + ProPulse[4] = m_PosThread[4] / axis_scale_resolution[4]; + int i = 0; + int JumpCount = 0; + while (i < m_SetPotion_Count[1])//鍒颁綅娆℃暟鍒ゆ柇 + { + Sleep(1); + m_pADT8949_get_actual_pos(CARDNO, 1, &Pos[1]); + m_pADT8949_get_actual_pos(CARDNO, 2, &Pos[2]); + m_pADT8949_get_actual_pos(CARDNO, 3, &Pos[3]); + m_pADT8949_get_actual_pos(CARDNO, 4, &Pos[4]); + if ((fabs(ProPulse[1] - Pos[1]) <= m_PrecisionCount[1]) && (fabs(ProPulse[2] - Pos[2]) <= m_PrecisionCount[2]) && (fabs(ProPulse[3] - Pos[3]) <= m_PrecisionCount[3]) && (fabs(ProPulse[4] - Pos[4]) <= m_PrecisionCount[4])) + { + i++; + } + else if (count > m_PrecisionTimeout[1] || g_IsAbort == true) //瓒呮椂閫鍑 + { + break; + } + else + { + JumpCount++; + i = 0; + } + count++; + } + + if (m_LogIsOpen[0] == 1) + { + for (short i = 1; i < 5; i++)//鏌ョ湅瑕佽褰曠殑杞村彿鏁版嵁 + { + if (m_LogIsOpen[i] == 1) + PrecisionLog(i, count); + } + g_pLogger->SendAndFlushWithTime(L"Wait start Target pos x = %9.4f, y=%9.4f, z = %9.4f\n", m_PosThread[1], m_PosThread[2], m_PosThread[3]); + g_pLogger->SendAndFlushWithTime(L"Wait end Current pos x = %9.4f, y=%9.4f, z = %9.4f\n", Pos[1] * axis_scale_resolution[1], Pos[2] * axis_scale_resolution[2], Pos[3] * axis_scale_resolution[3]); + g_pLogger->SendAndFlushWithTime(L"SetPositionXyz Wait end!\n"); + } + CurrentMotionState = E_SO7_MOTION_NONE; + } + if (eType == HSI_MOTION_MOVE_NOWAIT) + { + g_pLogger->SendAndFlushWithTime(L"Nowait SetPositionXyz move!\n"); + m_Thread_State = HSI_THREAD_RUNNING; + SetEvent(m_hTriggerEvent); + } + } + else + { + g_pLogger->SendAndFlushWithTime(L"SetPositionXyz init failed, moving!\n"); + rStatus = HSI_STATUS_MOTION_MOVING; + } + } + return rStatus; +} +//=========================================================================== +HSI_STATUS HSI_Motion::SetPositionXyza(UINT AxisTypes, double PositionX, double PositionY, double PositionZ, double PositionA, HSI_MOTION_MOVE_TYPE eType, double dFlyRadius) +{ + auto rStatus = HSI_STATUS_NORMAL; + if (g_pHSI_Motion) + { + m_PositionA = PositionA; + rStatus = SetPositionXyz(AxisTypes, PositionX, PositionY, PositionZ, eType, dFlyRadius); + } + return rStatus; +} +//=========================================================================== +HSI_STATUS HSI_Motion::ZeroPos(bool bZeroPos) +{ + auto rStatus = HSI_STATUS_NORMAL; + if (g_pHSI_Motion) + { + if (bZeroPos == true) + { + CurrentHomeMachineState = E_GTS_HOME_NONE; + for (int i = 1; i < 5; i++) + { + m_pADT8949_set_actual_pos(CARDNO, i, 0); + m_pADT8949_set_command_pos(CARDNO, i, 0); //娓呴昏緫璁℃暟鍣 + } + } + m_HomeFocus = true; + } + return rStatus; +} +//=========================================================================== +HSI_STATUS HSI_Motion::Load_ADT8949_Motion_Inifile(CString GoogolIniFile) +{ + auto rStatus = HSI_STATUS_NORMAL; + if (g_pHSI_Motion) + { + CString csAppPath = GoogolIniFile; + USES_CONVERSION; + CString temp; + //CString axisTemp[9] = { L"", L"X", L"Y", L"Z", L"R", L"X1", L"Y1", L"Z1", L"R1" }; + CString axisNum[5] = { L"0", L"1", L"2", L"3", L"4" }; + //鍒ゆ柇GTS800_Motion.cfg鏂囦欢鏄惁瀛樺湪 + if (GetFileAttributes(GoogolIniFile) == -1) + { + sEvenProp.Init(); + sEvenProp.EventType = HSI_EVENT_ERROR; + sEvenProp.EventID = HSI_EVENT_MOTION; + sEvenProp.EventResponse = HSI_EVENT_RESPONSE_OK; + strcpy_s(sEvenProp.EventData, HSI_MaxStringLength, "ADT8949_Motion.ini鏂囦欢涓嶅瓨鍦紒"); + EventCallback(sEvenProp); + return HSI_STATUS_FAILED; + } + for (int i = 0; i < 5; i++) + { + GetPrivateProfileString(L"RESOLUTION", L"SCALE_RESOLUTION_" + axisNum[i], L"0.0005", temp.GetBufferSetLength(50), 50, csAppPath); + axis_scale_resolution[i] = (float)atof(T2A(temp)); + GetPrivateProfileString(L"LIMIT", L"NEG_WORKING_LIMIT_" + axisNum[i], L"-200.0", temp.GetBufferSetLength(50), 50, csAppPath); + axis_neg_working_limit[i] = (float)atof(T2A(temp)); + GetPrivateProfileString(L"LIMIT", L"POS_WORKING_LIMIT_" + axisNum[i], L"200.0", temp.GetBufferSetLength(50), 50, csAppPath); + axis_pos_working_limit[i] = (float)atof(T2A(temp)); + + GetPrivateProfileString(L"GEAR", L"GEAR_" + axisNum[i], L"2500", temp.GetBufferSetLength(50), 50, csAppPath); + m_Gear[i] = (float)atof(T2A(temp)); + m_ControlMode[i] = GetPrivateProfileInt(L"CONTROL_LOOP", L"CONTROL_MODE_" + axisNum[i], 0, csAppPath); + m_LoopPeriod[i] = GetPrivateProfileInt(L"CONTROL_LOOP", L"CONTROL_LOOP_PERIOD_" + axisNum[i], 50, csAppPath); + GetPrivateProfileString(L"CONTROL_LOOP", L"CONTROL_LOOP_RATE_" + axisNum[i], L"0.1", temp.GetBufferSetLength(50), 50, csAppPath); + m_LoopRate[i] = (float)atof(T2A(temp)); + + GetPrivateProfileString(L"SET_POSITION_SPEED", L"SET_POTION_SPEED_" + axisNum[i], L"500.0", temp.GetBufferSetLength(50), 50, csAppPath); + m_SetPotion_Speed[i] = (float)atof(T2A(temp)); + GetPrivateProfileString(L"SET_POSITION_SPEED", L"SET_POTION_STARTV_" + axisNum[i], L"1.0", temp.GetBufferSetLength(50), 50, csAppPath); + m_SetPotion_StartV[i] = (float)atof(T2A(temp)); + GetPrivateProfileString(L"SET_POSITION_SPEED", L"SET_POTION_ACC_" + axisNum[i], L"500.0", temp.GetBufferSetLength(50), 50, csAppPath); + m_SetPotion_Acc[i] = (float)atof(T2A(temp)); + GetPrivateProfileString(L"SET_POSITION_SPEED", L"SET_POTION_DEC_" + axisNum[i], L"500.0", temp.GetBufferSetLength(50), 50, csAppPath); + m_SetPotion_Dec[i] = (float)atof(T2A(temp)); + m_SetPotion_Count[i] = GetPrivateProfileInt(L"SET_POSITION_SPEED", L"SET_POSITION_COUNT_" + axisNum[i], 10, csAppPath); + m_PrecisionCount[i] = GetPrivateProfileInt(L"PRECISION", L"PRECISION_COUNT_" + axisNum[i], 8, csAppPath); + m_PrecisionTimeout[i] = (long)GetPrivateProfileInt(L"PRECISION", L"PRECISION_TIME_" + axisNum[i], 200, csAppPath); + m_LogIsOpen[i] = GetPrivateProfileInt(L"LOG", L"LOG_IS_OPEN_" + axisNum[i], 0, csAppPath); + + GetPrivateProfileString(L"HOME", L"HOME_HIGH_SPEED_" + axisNum[i], L"100.0", temp.GetBufferSetLength(50), 50, csAppPath); + m_Home_Speed_High[i] = (float)atof(T2A(temp)); + GetPrivateProfileString(L"HOME", L"HOME_ACC_" + axisNum[i], L"100.0", temp.GetBufferSetLength(50), 50, csAppPath); + m_Home_Acc[i] = (float)atof(T2A(temp)); + GetPrivateProfileString(L"HOME", L"HOME_SEARCH_SPEED_" + axisNum[i], L"80.0", temp.GetBufferSetLength(50), 50, csAppPath); + m_Home_Speed_Search[i] = (float)atof(T2A(temp)); + GetPrivateProfileString(L"HOME", L"HOME_BACK_RANGE_" + axisNum[i], L"1.0", temp.GetBufferSetLength(50), 50, csAppPath); + m_Home_Back_Range[i] = (float)atof(T2A(temp)); + GetPrivateProfileString(L"HOME", L"HOME_SPEED_LIMIT_" + axisNum[i], L"1.0", temp.GetBufferSetLength(50), 50, csAppPath); + m_Home_Speed_Limit[i] = (float)atof(T2A(temp)); + m_ZeroTime[i] = (long)GetPrivateProfileInt(L"HOME", L"HOME_ZERO_TIME_" + axisNum[i], 1500, csAppPath); + m_Home_Machine_Axis[i] = GetPrivateProfileInt(L"HOME", L"HOME_MACHINE_AXIS_" + axisNum[i], 0, csAppPath); + + GetPrivateProfileString(L"JOG_SPEED", L"JOG_SPEED_" + axisNum[i], L"0.0", temp.GetBufferSetLength(50), 50, csAppPath); + m_Jog_Speed[i] = (float)atof(T2A(temp)); + GetPrivateProfileString(L"JOG_SPEED", L"JOG_STARTV_" + axisNum[i], L"0.0", temp.GetBufferSetLength(50), 50, csAppPath); + m_Jog_StartV[i] = (float)atof(T2A(temp)); + GetPrivateProfileString(L"JOG_SPEED", L"JOG_ENDV_" + axisNum[i], L"0.0", temp.GetBufferSetLength(50), 50, csAppPath); + m_Jog_EndV[i] = (float)atof(T2A(temp)); + GetPrivateProfileString(L"JOG_SPEED", L"JOG_ACC_" + axisNum[i], L"0.0", temp.GetBufferSetLength(50), 50, csAppPath); + m_Jog_Acc[i] = (float)atof(T2A(temp)); + GetPrivateProfileString(L"JOG_SPEED", L"JOG_DEC_" + axisNum[i], L"0.0", temp.GetBufferSetLength(50), 50, csAppPath); + m_Jog_Dec[i] = (float)atof(T2A(temp)); + m_StopJogMode[i] = GetPrivateProfileInt(L"JOG_SPEED", L"JOG_STOP_MODE_" + axisNum[i], 0, csAppPath); + } + m_LogIsOpen[0] = GetPrivateProfileInt(L"LOG", L"LOG_IS_OPEN_0", 0, csAppPath); + if (m_LogIsOpen[0] == 1) + { + g_pLogger->IsEnabledLog = true; + } + } + return rStatus; +} +//=========================================================================== +HSI_STATUS HSI_Motion::Load_ADT8949_Config_Inifile(CString GoogolIniFile) +{ + auto rStatus = HSI_STATUS_NORMAL; + if (g_pHSI_Motion) + { + CString csAppPath = GoogolIniFile; + USES_CONVERSION; + CString temp; + if (GetFileAttributes(GoogolIniFile) == -1) + { + sEvenProp.Init(); + sEvenProp.EventType = HSI_EVENT_ERROR; + sEvenProp.EventID = HSI_EVENT_MOTION; + sEvenProp.EventResponse = HSI_EVENT_RESPONSE_OK; + strcpy_s(sEvenProp.EventData, HSI_MaxStringLength, "ADT8949_Config.ini鏂囦欢涓嶅瓨鍦紒"); + EventCallback(sEvenProp); + return HSI_STATUS_FAILED; + } + CString axisNum[5] = { L"0", L"1", L"2", L"3", L"4" }; + m_IsIOFuntion = GetPrivateProfileInt(L"IO", L"IS_IO_FUNTION", 0, csAppPath); + m_IsStartInput = GetPrivateProfileInt(L"IO", L"IS_START_INPUT", 0, csAppPath); + m_StartInputPort = GetPrivateProfileInt(L"IO", L"START_INPUT_PORT", 16, csAppPath); + + for (int i = 0; i < 5; i++) + { + m_DriverAlarmAxis[i] = GetPrivateProfileInt(L"DRIVER_ALARM", L"DRIVER_ALARM_AXIS_" + axisNum[i], 0, csAppPath); + m_PulseDir[i] = GetPrivateProfileInt(L"PULSE_DIR", L"PULSE_DIR_" + axisNum[i], 0, csAppPath); + + m_Home_Enc_Pos_Axis[i] = GetPrivateProfileInt(L"HOME", L"HOME_ENC_POS_AXIS_" + axisNum[i], 0, csAppPath); + m_Home_Prf_Pos_Axis[i] = GetPrivateProfileInt(L"HOME", L"HOME_PRF_POS_AXIS_" + axisNum[i], 0, csAppPath); + m_IsHomeEncPos = GetPrivateProfileInt(L"HOME", L"IS_HOME_ENC_POS", 0, csAppPath); + m_IsHomePrfPos = GetPrivateProfileInt(L"HOME", L"IS_HOME_PRF_POS", 1, csAppPath); + m_HomeTimeout = GetPrivateProfileInt(L"HOME", L"HOME_TIMEOUT", 20000, csAppPath); + m_HomeComparePulse[i] = GetPrivateProfileInt(L"HOME", L"HOME_COMPARE_PULSE_" + axisNum[i], 3, csAppPath); + + } + + m_IsDriverAlarm = GetPrivateProfileInt(L"DRIVER_ALARM", L"IS_DRIVER_ALARM", 0, csAppPath); + m_IsCloseAllAlarm = GetPrivateProfileInt(L"DRIVER_ALARM", L"IS_CLOSE_ALL_ALARM", 0, csAppPath); + + m_TriggerPort = GetPrivateProfileInt(L"TRIGGER", L"TRIGGER_PORT", 8, csAppPath); + m_TriggerPulseWidth = GetPrivateProfileInt(L"TRIGGER", L"TRIGGER_PULSE_WIDTH", 1, csAppPath); + m_TriggerHoldTime = GetPrivateProfileInt(L"TRIGGER", L"TRIGGER_HOLD_TIME", 150, csAppPath); + + } + return rStatus; +} +//=========================================================================== +HSI_STATUS HSI_Motion::GetScaleResolution(double &_ScaleX, double &_ScaleY, double &_ScaleZ) +{ + auto rStatus = HSI_STATUS_NORMAL; + if (g_pHSI_Motion) + { + _ScaleX = axis_scale_resolution[1]; + _ScaleY = axis_scale_resolution[2]; + _ScaleZ = axis_scale_resolution[3]; + } + return rStatus; +} +//=========================================================================== +HSI_STATUS HSI_Motion::SetScaleResolution(double _ScaleX, double _ScaleY, double _ScaleZ) +{ + auto rStatus = HSI_STATUS_NORMAL; + if (g_pHSI_Motion) + { + axis_scale_resolution[1] = (float)_ScaleX; + axis_scale_resolution[2] = (float)_ScaleY; + axis_scale_resolution[3] = (float)_ScaleZ; + } + return rStatus; +} +//=========================================================================== +void HSI_Motion::SendMsgMotionFinished() +{ + sEvenProp.Init(); + sEvenProp.EventType = HSI_EVENT_FUNCTION; + sEvenProp.EventID = HSI_EVENT_MOVE_POINT; + sEvenProp.EventResponse = HSI_EVENT_FUNCTION_OK; + EventCallback(sEvenProp); +} +//=========================================================================== +void HSI_Motion::UpdateMotionState() +{ + int status = 0; + if (g_pHSI_Motion && m_IsExMotion == E_GTS_MOTION_XYZA) + { + while (m_Thread_State == HSI_THREAD_RUNNING) + { + do + { + Sleep(1); + m_pADT8949_get_inp_status(CARDNO, &status); //璇绘彃琛ョ姸鎬 + if (g_IsAbort == true) + { + break; + } + } while (status != 0);//鎻掕ˉ缁撴潫璺冲嚭 + + long count = 0; + long Pos[5] = { 0, 0, 0, 0, 0 }; + double ProPulse[5] = { 0.0, 0.0, 0.0, 0.0, 0.0 }; + + ProPulse[1] = m_PosThread[1] / axis_scale_resolution[1]; + ProPulse[2] = m_PosThread[2] / axis_scale_resolution[2]; + ProPulse[3] = m_PosThread[3] / axis_scale_resolution[3]; + ProPulse[4] = m_PosThread[4] / axis_scale_resolution[4]; + int i = 0; + int JumpCount = 0; + while (i < m_SetPotion_Count[1])//鍒颁綅娆℃暟鍒ゆ柇 + { + Sleep(1); + m_pADT8949_get_actual_pos(CARDNO, 1, &Pos[1]); + m_pADT8949_get_actual_pos(CARDNO, 2, &Pos[2]); + m_pADT8949_get_actual_pos(CARDNO, 3, &Pos[3]); + m_pADT8949_get_actual_pos(CARDNO, 4, &Pos[4]); + if ((fabs(ProPulse[1] - Pos[1]) <= m_PrecisionCount[1]) && (fabs(ProPulse[2] - Pos[2]) <= m_PrecisionCount[2]) && (fabs(ProPulse[3] - Pos[3]) <= m_PrecisionCount[3]) && (fabs(ProPulse[4] - Pos[4]) <= m_PrecisionCount[4])) + { + i++; + } + else if (count > m_PrecisionTimeout[1] || g_IsAbort == true) //瓒呮椂閫鍑 + { + if (g_IsAbort == false && m_IsCloseAllAlarm == 0) + { + 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_XYZA瀹氫綅瓒呮椂!"); + EventCallback(sEvenProp); + g_pLogger->SendAndFlushWithTime(L"UpdateMotionState NoWait SetPositionXyz Timeout or m_IsCloseAllAlarm is true\n"); + } + g_pLogger->SendAndFlushWithTime(L"UpdateMotionState NoWait SetPositionXyz g_IsAbort is true!\n"); + g_IsAbort = false; + break; + } + else + { + JumpCount++; + i = 0; + } + count++; + } + switch (CurrentMotionState) + { + case E_SO7_MOTION_MOVETO: + { + m_Thread_State = HSI_THREAD_PAUSED; + if (m_LogIsOpen[0] == 1) + { + for (short i = 1; i < 5; i++)//鏌ョ湅瑕佽褰曠殑杞村彿鏁版嵁 + { + if (m_LogIsOpen[i] == 1) + PrecisionLog(i, count); + } + g_pLogger->SendAndFlushWithTime(L"NoWait start Target pos x = %9.4f, y=%9.4f, z = %9.4f\n", m_PosThread[1], m_PosThread[2], m_PosThread[3]); + g_pLogger->SendAndFlushWithTime(L"NoWait end Current pos x = %9.4f, y=%9.4f, z = %9.4f\n", Pos[1] * axis_scale_resolution[1], Pos[2] * axis_scale_resolution[2], Pos[3] * axis_scale_resolution[3]); + g_pLogger->SendAndFlushWithTime(L"UpdateMotionState NoWait SetPositionXyz end!\n"); + } + CurrentMotionState = E_SO7_MOTION_NONE; + SendMsgMotionFinished(); + break; + } + default: + { + break; + } + } + } while (m_Thread_State == HSI_THREAD_RUNNING); + } +} +//=========================================================================== +void HSI_Motion::UpdateMotionStateIO() +{ + if (g_pHSI_Motion) + { + //UINT Status = 0; + int StartFlag = 0; + //long Alarm = 0; + //bool AlarmFlag = false; + //int AlarmCount = 0; + //bool QuickStopFlag = false; + //bool QuickStopFlag2 = false; + //bool SetPosFlag = false; + //UINT AlarmStatus = 0; + //long MoveSts[5] = { 0, 0, 0, 0, 0 }; + while (m_Thread_StateIO == HSI_THREAD_RUNNING) + { + //GetDIO(HSI_MOTION_INPUT_CH1, Status); + //鍚姩鎸夐挳鍔熻兘 + if (m_IsStartInput == 1) + { + int InputTemp = m_pADT8949_read_bit(CARDNO, m_StartInputPort); + if (StartFlag == 0 && InputTemp == 0) + { + StartFlag = 1; + } + else if (StartFlag == 1 && InputTemp == 1) + { + StartFlag = 0; + sEvenProp.Init(); + sEvenProp.EventType = HSI_EVENT_NOTIFY; + sEvenProp.EventID = HSI_NOTIFY_PROGRAM_EXECUTION_START; + sEvenProp.EventResponse = HSI_EVENT_RESPONSE_OK; + EventCallback(sEvenProp); + } + } + //瀹夊叏鍏夋爡鐨勬殏鍋滐紝閫氱敤杈撳叆榛樿鏄珮鐢靛钩鐏扮殑锛岃〃绀烘病鏈夎Е鍙 + + //else if (m_IsSafeStop == 1 && m_SafeHomeFlag == true) + //{ + // if (m_SafeFlag == true && (Status & m_SafeStopPort) == 0) + // { + // m_SafeFlag = false; + // g_IsAbort = false; + // if (m_SafeStopMode == 0) + // { + // m_Thread_State = HSI_THREAD_PAUSED; + // SetEvent(m_hTriggerEvent); + // CurrentMotionState = E_SO7_MOTION_NONE; + // sEvenProp.Init(); + // sEvenProp.EventType = HSI_EVENT_SAFETY; + // sEvenProp.EventID = HSI_NOTIFY_PROGRAM_EXECUTION_START; + // sEvenProp.EventResponse = HSI_EVENT_RESPONSE_OK; + // EventCallback(sEvenProp); + // } + // else + // { + // if (m_SafeXyzOrEx == true && CurrentMotionState == E_SO7_MOTION_MOVETO) + // { + // CurrentMotionState = E_SO7_MOTION_NONE; + // SetPositionXyz(0, m_PosThread[1], m_PosThread[2], m_PosThread[3], HSI_MOTION_MOVE_NOWAIT, 0); + // } + // else if (m_SafeXyzOrEx == false && CurrentMotionState == E_SO7_MOTION_MOVETO) + // { + // CurrentMotionState = E_SO7_MOTION_NONE; + // SetPositionEx(m_SafeAxis, m_PosThread[m_AxisThread], HSI_MOTION_MOVE_NOWAIT, 0); + // } + // } + // } + // if (m_SafeFlag == false && (Status & m_SafeStopPort) == m_SafeStopPort) + // { + // g_IsAbort = true; + // m_SafeFlag = true; + // m_Thread_State = HSI_THREAD_PAUSED; + // SetEvent(m_hTriggerEvent); + // m_pGT_Stop(0xff, 0xff); + // if (m_SafeStopMode == 0) + // { + // CurrentMotionState = E_SO7_MOTION_NONE; + // sEvenProp.Init(); + // sEvenProp.EventType = HSI_EVENT_SAFETY; + // sEvenProp.EventID = HSI_NOTIFY_PROGRAM_EXECUTION_STOP; + // sEvenProp.EventResponse = HSI_EVENT_RESPONSE_OK; + // EventCallback(sEvenProp); + // } + // } + //} + + //澶栭儴椹卞姩鍣ㄦ姤璀﹁緭鍑哄姛鑳 + + //else if (m_IsAlarmOutputPort == 1 && m_SafeHomeFlag == true) + //{ + // m_pGT_GetDi(MC_ALARM, &Alarm); + // if (AlarmFlag == false && (Alarm & 0x01) == 0x01 || (Alarm & 0x02) == 0x02 || (Alarm & 0x04) == 0x04 || (Alarm & 0x08) == 0x08) + // { + // CurrentHomeMachineState = E_GTS_HOME_NONE; + // AlarmCount++; + // AlarmFlag = true; + // GetDIO(HSI_MOTION_OUTPUT_CH1, AlarmStatus); + // SetDIO(HSI_MOTION_OUTPUT_CH1, AlarmStatus & m_AlarmOutputPort); + // if (AlarmCount == 1) + // { + // m_pGT_SetDo(MC_ALARM, 0xf); + // m_pGT_SetDo(MC_ALARM, 0xff); + // sEvenProp.Init(); + // sEvenProp.EventType = HSI_EVENT_FUNCTION; + // sEvenProp.EventID = HSI_EVENT_MOTION_DRIVER_ALARM; + // sEvenProp.EventResponse = HSI_EVENT_RESPONSE_CANCEL; + // EventCallback(sEvenProp); + // SetDIO(HSI_MOTION_OUTPUT_CH1, AlarmStatus); + // AlarmFlag = false; + // } + // else if (AlarmCount == 2) + // { + // AlarmCount = 0; + // sEvenProp.EventType = HSI_EVENT_ERROR; + // sEvenProp.EventID = HSI_EVENT_MOTION; + // sEvenProp.EventResponse = HSI_EVENT_RESPONSE_OK; + // strcpy_s(sEvenProp.EventData, HSI_MaxStringLength, "鏃犳硶娓呴櫎鎶ヨ锛岃鍏堥噸鍚伐浣滃彴鐢垫簮!"); + // EventCallback(sEvenProp); + // AlarmFlag = false; + // //浣跨敤涓荤▼搴忚皟鐢ㄥ洖瀹讹紝涓嶄娇鐢╠ll璋冪敤 + // m_HomeFocus = true; + // m_pGT_ClearCaptureStatus(1); + // sEvenProp.Init(); + // sEvenProp.EventType = HSI_EVENT_FUNCTION; + // sEvenProp.EventID = HSI_EVENT_MOTION_FOCUS_HOME; + // sEvenProp.EventResponse = HSI_EVENT_RESPONSE_OK; + // EventCallback(sEvenProp); + // SetDIO(HSI_MOTION_OUTPUT_CH1, AlarmStatus); + // AlarmFlag = false; + // } + // } + //} + + //鎬ュ仠鍔熻兘 + + //else if (m_IsQuickStop == 1 && m_SafeHomeFlag == true) + //{ + // if (QuickStopFlag == false && ((int)Status & m_QuickStopInPort) == m_QuickStopInPort) + // { + // g_IsAbort = true; + // m_pGT_Stop(0xff, 0xff); + // QuickStopFlag2 = true; + // QuickStopFlag = true; + // UINT QuickStop = 0; + // GetDIO(HSI_MOTION_OUTPUT_CH1, QuickStop); + // SetDIO(HSI_MOTION_OUTPUT_CH1, QuickStop | m_QuickStopOutPort); + // sEvenProp.Init(); + // sEvenProp.EventType = HSI_EVENT_NONE; + // sEvenProp.EventID = HSI_EVENT_MOTION; + // sEvenProp.EventResponse = HSI_EVENT_RESPONSE_OK; + // strcpy_s(sEvenProp.EventData, HSI_MaxStringLength, "鎬ュ仠宸茶鎸変笅锛侊紒锛"); + // EventCallback(sEvenProp); + // QuickStopFlag = false; + // } + // if (QuickStopFlag2 == true && ((int)Status & m_QuickStopInPort) == 0) + // { + // CurrentMotionState = E_SO7_MOTION_NONE; + // QuickStopFlag = false; + // QuickStopFlag2 = false; + // double encPos[9] = { 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 };//杩愯鍓嶇殑浣嶇疆 + // Sleep(1000); + // m_pGT_GetEncPos(1, &encPos[1], 4, NULL); + // m_pGT_SetPrfPos(1, (long)encPos[1]); + // m_pGT_SetPrfPos(2, (long)encPos[2]); + // m_pGT_SetPrfPos(3, (long)encPos[3]); + // m_pGT_SetPrfPos(4, (long)encPos[4]); + // } + //} + Sleep(10); + } + } +} +//=========================================================================== +void HSI_Motion::UpdateMotionStateEx() +{ + if (g_pHSI_Motion && m_IsExMotion == E_GTS_MOTION_EX) + { + int status = 0; + while (m_Thread_State == HSI_THREAD_RUNNING) + { + do + { + Sleep(1); + m_pADT8949_get_status(CARDNO, m_AxisThread, &status); //璇荤偣浣嶈繍鍔ㄧ姸鎬 + if (g_IsAbort == true) + { + break; + } + } while (status != 0); + + long count = 0; + long Pos(0); + double ProPulse = m_PosThread[m_AxisThread] / axis_scale_resolution[m_AxisThread]; + int i = 0; + int JumpCount = 0; + while (i < m_SetPotion_Count[1])//鍒颁綅娆℃暟鍒ゆ柇 + { + Sleep(1); + m_pADT8949_get_actual_pos(CARDNO, m_AxisThread, &Pos); + if (fabs(ProPulse - Pos) <= m_PrecisionCount[m_AxisThread]) + { + i++; + } + else if (count > m_PrecisionTimeout[m_AxisThread] || g_IsAbort == true) //瓒呮椂閫鍑 + { + g_pLogger->SendAndFlushWithTime(L"UpdateMotionStateEx NoWait SetPositionEx Timeout or g_IsAbort = true!\n"); + if (g_IsAbort == false) + { + 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_Ex瀹氫綅瓒呮椂!"); + EventCallback(sEvenProp); + } + g_IsAbort = false; + break; + } + else + { + JumpCount++; + i = 0; + } + count++; + } + switch (CurrentMotionState) + { + case E_SO7_MOTION_MOVETO: + { + m_Thread_State = HSI_THREAD_PAUSED; + if (m_LogIsOpen[0] == 1) + { + if (m_LogIsOpen[m_AxisThread] == 1) + PrecisionLog(m_AxisThread, count); + g_pLogger->SendAndFlushWithTime(L"NoWait start Target pos[%d] = %9.4f mm\n", m_AxisThread, m_PosThread[m_AxisThread]); + g_pLogger->SendAndFlushWithTime(L"NoWait end Current pos[%d] = %9.4f mm\n", m_AxisThread, Pos * axis_scale_resolution[m_AxisThread]); + g_pLogger->SendAndFlushWithTime(L"UpdateMotionStateEx NoWait SetPositionEx end!\n"); + } + CurrentMotionState = E_SO7_MOTION_NONE; + SendMsgMotionFinished(); + break; + } + default: + { + break; + } + } + } while (m_Thread_State == HSI_THREAD_RUNNING); + } +} +//=========================================================================== +void HSI_Motion::DoEvents() +{ + static MSG msg; + if (::PeekMessage(&msg, NULL, 0, 0, PM_REMOVE)) + { + DispatchMessage(&msg); + TranslateMessage(&msg); + } +} +//=========================================================================== +HSI_STATUS HSI_Motion::DriverAlarmStatus() +{ + auto rStatus = HSI_STATUS_NORMAL; + if (g_pHSI_Motion && m_IsDriverAlarm == 1 && m_IsCloseAllAlarm == 0) + { + int AlarmStatus[5] = { 0, 0, 0, 0, 0 }; + int Sum = 0; + for (int i = 1; i < 5; i++) + { + if (m_DriverAlarmAxis[i] == 1) + { + AlarmStatus[i] = m_pADT8949_read_bit(CARDNO, i - 1); + Sum += AlarmStatus[i]; + } + } + if (Sum > 0) + { + sEvenProp.Init(); + sEvenProp.EventType = HSI_EVENT_ERROR; + sEvenProp.EventID = HSI_EVENT_MOTION; + sEvenProp.EventResponse = HSI_EVENT_RESPONSE_OK; + char messageAlarm[100] = ""; + if (AlarmStatus[1] == 1 && m_DriverAlarmAxis[1] == 1) + { + strcat_s(messageAlarm, 30, "1銆"); + } + if (AlarmStatus[2] == 1 && m_DriverAlarmAxis[2] == 1) + { + strcat_s(messageAlarm, 30, "2銆"); + } + if (AlarmStatus[3] == 1 && m_DriverAlarmAxis[3] == 1) + { + strcat_s(messageAlarm, 30, "3銆"); + } + if (AlarmStatus[4] == 1 && m_DriverAlarmAxis[4] == 1) + { + strcat_s(messageAlarm, 30, "4銆"); + } + CString temp(messageAlarm); + g_pLogger->SendAndFlushWithTime(temp + L" axis drive alarm_HomeMachine!\n"); + strcat_s(messageAlarm, 100, "杞撮┍鍔ㄥ櫒鎶ヨ!"); + strcpy_s(sEvenProp.EventData, HSI_MaxStringLength, messageAlarm); + EventCallback(sEvenProp); + CurrentHomeMachineState = E_GTS_HOME_NONE; + rStatus = HSI_STATUS_FAILED; + } + } + return rStatus; +} +//=========================================================================== +HSI_STATUS HSI_Motion::GetDIO(UINT IOChannel, UINT& _Status) +{ + auto rStatus = HSI_STATUS_NORMAL; + if (g_pHSI_Motion) + { + if (IOChannel == HSI_MOTION_INPUT_LIMIT_SWITCH)//闄愪綅(IN4-IN11) + { + _Status = 0; + for (int i = 11; i > 3; i--) + { + int temp = m_pADT8949_read_bit(CARDNO, i); + _Status = (_Status << 1 | temp); + } + } + else if (IOChannel == HSI_MOTION_INPUT_CH1)//IO缂栫▼浣跨敤16涓(IN16-IN31), + { + _Status = 0; + for (int i = 31; i >= 16; i--) + { + int temp = m_pADT8949_read_bit(CARDNO, i); + _Status = (_Status << 1 | temp); + } + } + else if (IOChannel == HSI_MOTION_INPUT_CH4)//娴嬭瘯浣跨敤32涓(IN0-IN31)锛屾诲叡48涓紝鍓36涓槸閫氱敤杈撳叆锛屽悗12涓槸缂栫爜鍣ㄧ殑杈撳叆 + { + _Status = 0; + for (int i = 31; i >= 0; i--) + { + int temp = m_pADT8949_read_bit(CARDNO, i); + if (i >= 0 && i < 4) + { + if (m_DriverAlarmAxis[i + 1] == 0) + { + temp = 1; + } + else + { + temp = !temp; + } + } + _Status = (_Status << 1 | temp); + } + } + else if (IOChannel == HSI_MOTION_OUTPUT_CH1) //IO缂栫▼浣跨敤16涓(OUT16_OUT31)锛岃鍙栬緭鍑虹姸鎬 + { + _Status = 0; + for (int i = 31; i >= 16; i--) + { + int temp = m_pADT8949_get_out(CARDNO, i); + _Status = (_Status << 1 | temp); + } + } + else if (IOChannel == HSI_MOTION_OUTPUT_CH4) //娴嬭瘯浣跨敤32涓(OUT0_OUT31)锛岃鍙栬緭鍑虹姸鎬 + { + _Status = 0; + for (int i = 31; i >= 0; i--) + { + int temp = m_pADT8949_get_out(CARDNO, i); + _Status = (_Status << 1 | temp); + } + } + } + _Status &= 0xffffffff; + return rStatus; + +} +//=========================================================================== +HSI_STATUS HSI_Motion::SetDIO(UINT IOChannel, UINT _Status) +{ + auto rStatus = HSI_STATUS_NORMAL; + if (g_pHSI_Motion) + { + if (IOChannel == HSI_MOTION_OUTPUT_CH1)//IO缂栫▼鐢ㄧ殑16涓紝(OUT16_OUT31)鍓嶉潰8涓湪DB25涓紝鍚庨潰8涓殏鏃朵笉鐢,鏈鍚庨潰16涓狪O缂栫▼ + { + for (int i = 16; i < 32; i++) + { + int temp = 1; + temp &= (_Status >> (i - 16)); + m_pADT8949_write_bit(CARDNO, i, temp); + } + } + else if (IOChannel == HSI_MOTION_OUTPUT_CH4) //娴嬭瘯浣跨敤鐨勯氱敤杈撳嚭32涓 + { + for (int i = 0; i < 32; i++) + { + int temp = 1; + temp &= (_Status >> i); + m_pADT8949_write_bit(CARDNO, i, temp); + } + } + } + return rStatus; +} +//=========================================================================== +HSI_STATUS HSI_Motion::AbortMotion() +{ + auto rStatus = HSI_STATUS_NORMAL; + if (g_pHSI_Motion) + { + g_pLogger->SendAndFlushWithTime(L"AbortMotion!\n"); + CurrentMotionState = E_SO7_MOTION_NONE; + m_Thread_State = HSI_THREAD_PAUSED; + g_IsAbort = true; + SetDIO(HSI_MOTION_OUTPUT_CH1, 0);//浣挎墍鏈夌殑杈撳嚭涓0 + m_pADT8949_dec_stop(CARDNO, 1);//鍑忛熷仠姝 + m_pADT8949_dec_stop(CARDNO, 2); + m_pADT8949_dec_stop(CARDNO, 3); + m_pADT8949_dec_stop(CARDNO, 4); + } + return rStatus; +} +//=========================================================================== +HSI_STATUS HSI_Motion::Shutdown() +{ + auto rStatus = HSI_STATUS_NORMAL; + if (g_pHSI_Motion) + { + int rtn(0); + AbortMotion(); + g_IsAbort = true; + m_Thread_State = HSI_THREAD_EXIT; + m_Thread_StateIO = HSI_THREAD_EXIT; + CloseThread(); + CloseThreadIO(); + CurrentMotionState = E_SO7_MOTION_NONE; + SendMsgMotionFinished(); + if (m_IsHomeEncPos == 1) + { + CString csAppPath; + GetAppPath(csAppPath); + csAppPath += "\\Config\\ADT8949_Motion.ini"; + CString tempStrEnc[5]; + CString tempStrPrf[5]; + char cNumber[50]; + long encPos = 0; + long prfPos = 0; + for (short i = 1; i < 5; i++) + { + if (m_Home_Machine_Axis[i] == 1) + { + encPos = 0; + prfPos = 0; + rtn = m_pADT8949_get_actual_pos(CARDNO, i, &encPos); + rtn = m_pADT8949_get_command_pos(CARDNO, i, &prfPos); + _itoa_s(i, cNumber, 30, 10); + CString temp(cNumber); + tempStrEnc[i].Format(_T("%d"), encPos); + tempStrPrf[i].Format(_T("%d"), prfPos); + WritePrivateProfileString(L"HOME", L"HOME_ENC_POS_AXIS_" + temp, tempStrEnc[i], csAppPath); + WritePrivateProfileString(L"HOME", L"HOME_PRF_POS_AXIS_" + temp, tempStrPrf[i], csAppPath); + } + } + } + if (m_Hinst) + { + //rtn = m_pADT8949_reset_card(CARDNO); + rtn = m_pADT8949_close_card();//蹇呴』瑕佸叧闂紝鍚﹀垯浼氬嚭鐜板紓甯 + g_pLogger->SendAndFlushWithTime(L"Shutdown m_Hinst!\n"); + if (FreeLibrary(m_Hinst) != 0) + { + m_Hinst = NULL; + } + } + g_pLogger->SendAndFlushWithTime(L"Shutdown success!\n"); + } + return rStatus; +} +//=========================================================================== +HSI_STATUS HSI_Motion::DCCScanSetData(UINT AxisTypes, HSI_SCAN_MOTION_TYPE eType, UINT lTrigNumber, double* dTrigDis) +{ + auto rStatus = HSI_STATUS_NORMAL; + UNREFERENCED_PARAMETER(eType); + if (g_pHSI_Motion) + { + //瑙﹀彂鐨勪綅缃负鐩稿浣嶇疆,鐢ㄦ硶涓鑸槸绉诲姩鍒拌捣鐐逛綅缃紝鍐嶅紑濮嬭缃Е鍙戜綅缃(鐩稿浣嶇疆)锛屾渶缁堣缃粓鐐逛綅缃 + int rtn(0); + short AxisNumber = AxisConvert(AxisTypes); + //娴嬭瘯浣跨敤 + if (eType == HSI_SCAN_MOTION_MANUAL_TEST)//鎵嬪姩瑙﹀彂 + { + //琛ㄧず楂樼數骞筹紝浣跨敤鐢靛钩杈撳嚭锛岃剦鍐插搴︼紝浣跨敤鐢靛钩杈撳嚭鏃舵棤鏁堬紝鍦ㄨ繖閲屾棤鏁 + rtn = m_pADT8949_write_bit(CARDNO, m_TriggerPort, 1); + Sleep(m_TriggerHoldTime); + rtn = m_pADT8949_write_bit(CARDNO, m_TriggerPort, 0); + g_pLogger->SendAndFlushWithTime(L"ManualTrigger : rtn = %d, ManualTriggerHold = %dms\n", rtn, m_TriggerHoldTime); + } + if (eType == HSI_SCAN_MOTION_EQ_DIS)//绛夐棿闅 + { + g_pLogger->SendAndFlushWithTime(_T("IntervalTrigger : AxisNumber = %d, TrigNumber = %d, m_TriggerPulseWidth = %dms, m_TriggerPort = %d\n"), AxisNumber, lTrigNumber, m_TriggerPulseWidth, m_TriggerPort); + long temp(0); + long pos(0); + int dir(0); + dir = dTrigDis > 0 ? 1 : 0; + pos = (long)(dTrigDis[0] / axis_scale_resolution[AxisNumber]); + for (UINT i = 0; i < lTrigNumber; i++) + { + temp += pos; + rtn = m_pADT8949_set_pos_compare_pulse(CARDNO, AxisNumber, temp, dir, m_TriggerPort, 1, m_TriggerPulseWidth); + g_pLogger->SendAndFlushWithTime(_T("IntervalTrigger : i = %d, temp = %7d, dir = %d, rtn = %d\n"), i, temp, dir, rtn); + } + } + if (eType == HSI_SCAN_MOTION_SPEC_LOCA)//绾挎т笉绛夐棿闅 + { + //杞达紝澶栭儴缂栫爜鍣紝杈撳嚭鏂瑰紡鑴夊啿锛屽垵濮嬬數骞筹紝杈撳嚭鐨勮剦鍐插搴︼紝buf1锛宐uf1鐨勪釜鏁帮紝buf2锛宐uf2鐨勪釜鏁 + g_pLogger->SendAndFlushWithTime(_T("LinearTrigger: AxisNumber = %d, TrigNumber = %d, m_TriggerPulseWidth = %dms, m_TriggerPort = %d\n"), AxisNumber, lTrigNumber, m_TriggerPulseWidth, m_TriggerPort); + long tempbuf[1000] = { 0 }; + long pos(0); + int dir(0); + if (m_LogIsOpen[0] == 1) + { + for (UINT i = 0; i < lTrigNumber; i++) + { + if (dTrigDis[i] == NULL) + { + continue; + } + g_pLogger->SendAndFlushWithTime(_T("LinearTrigger : dTrigDis[%d] = %.4f\n"), i, dTrigDis[i]); + } + } + dTrigDis[0] = dTrigDis[0] / axis_scale_resolution[AxisNumber]; + tempbuf[0] = (long)dTrigDis[0]; + rtn = m_pADT8949_get_actual_pos(CARDNO, AxisNumber, &pos); + dir = tempbuf[0] > pos ? 1 : 0; + rtn = m_pADT8949_set_pos_compare_pulse(CARDNO, AxisNumber, tempbuf[0], dir, m_TriggerPort, 1, m_TriggerPulseWidth); + g_pLogger->SendAndFlushWithTime(_T("LinearTrigger : tempbuf[0] = %7d, dir = %d, rtn = %d\n"), tempbuf[0], dir, rtn); + for (UINT i = 1; i < lTrigNumber; i++) + { + dTrigDis[i] = dTrigDis[i] / axis_scale_resolution[AxisNumber]; + dTrigDis[i] += dTrigDis[i - 1]; + tempbuf[i] = (long)dTrigDis[i]; + rtn = m_pADT8949_set_pos_compare_pulse(CARDNO, AxisNumber, tempbuf[i], dir, m_TriggerPort, 1, m_TriggerPulseWidth); + g_pLogger->SendAndFlushWithTime(_T("LinearTrigger : tempbuf[%d] = %7d, dir = %d, rtn = %d\n"), i, tempbuf[i], dir, rtn); + } + } + } + return rStatus; +} +//=========================================================================== +HSI_STATUS HSI_Motion::DCCScanStart() +{ + auto rStatus = HSI_STATUS_NORMAL; + if (g_pHSI_Motion) + { + int rtn = 0; + for (int i = 1; i < 5; i++) + { + rtn = m_pADT8949_set_pos_compare_mode(CARDNO, i, 1, 1); + rtn = m_pADT8949_clear_pos_compare_point(CARDNO, i); + } + g_pLogger->SendAndFlushWithTime(_T("DCCScanStart : rtn = %d\n"), rtn); + } + return rStatus; +} +//=========================================================================== +HSI_STATUS HSI_Motion::DCCScanStop() +{ + auto rStatus = HSI_STATUS_NORMAL; + if (g_pHSI_Motion) + { + int rtn = 0; + for (int i = 1; i < 5; i++) + { + rtn = m_pADT8949_set_pos_compare_mode(CARDNO, i, 0, 1); + rtn = m_pADT8949_clear_pos_compare_point(CARDNO, i); + } + g_pLogger->SendAndFlushWithTime(_T("DCCScanStop : rtn = %d\n"), rtn); + } + return rStatus; +} +//=========================================================================== +double HSI_Motion::SpeedPercent(double &Speed, double &Startv, double &Endv, double &Acc, double &Dec) +{ + double MovetoSpeedGear = 0; + int flag = 1; + if (Speed < 0) + { + flag = -1; + } + if (fabs(Speed) > 1.01) + { + MovetoSpeedGear = 0; + } + else if (fabs(Speed) > 0.81) + { + MovetoSpeedGear = m_Jog_Speed[0]; + Startv = m_Jog_StartV[0]; + Endv = m_Jog_EndV[0]; + Acc = m_Jog_Acc[0]; + Dec = m_Jog_Dec[0]; + } + else if (fabs(Speed) > 0.61) + { + MovetoSpeedGear = m_Jog_Speed[1]; + Startv = m_Jog_StartV[1]; + Endv = m_Jog_EndV[1]; + Acc = m_Jog_Acc[1]; + Dec = m_Jog_Dec[1]; + } + else if (fabs(Speed) > 0.41) + { + MovetoSpeedGear = m_Jog_Speed[2]; + Startv = m_Jog_StartV[2]; + Endv = m_Jog_EndV[2]; + Acc = m_Jog_Acc[2]; + Dec = m_Jog_Dec[2]; + } + else if (fabs(Speed) > 0.21) + { + MovetoSpeedGear = m_Jog_Speed[3]; + Startv = m_Jog_StartV[3]; + Endv = m_Jog_EndV[3]; + Acc = m_Jog_Acc[3]; + Dec = m_Jog_Dec[3]; + } + else if (fabs(Speed) > 0.01) + { + MovetoSpeedGear = m_Jog_Speed[4] * m_dSpeed; + Startv = m_Jog_StartV[4]; + Endv = m_Jog_EndV[4]; + Acc = m_Jog_Acc[4]; + Dec = m_Jog_Dec[4]; + } + else + { + MovetoSpeedGear = 0; + } + Speed = MovetoSpeedGear * flag; + return Speed; +} +//=========================================================================== +HSI_STATUS HSI_Motion::GetSpeedXyz(double &Speed) +{ + auto rStatus = HSI_STATUS_NORMAL; + Speed = m_dSpeed; + return rStatus; +} +//=========================================================================== +HSI_STATUS HSI_Motion::SetSpeedXyz(double Speed) +{ + auto rStatus = HSI_STATUS_NORMAL; + m_dSpeed = Speed; + if (m_dSpeed < 1E-7) + { + m_dSpeed = 0.0; + } + if (m_dSpeed > 1.001) + { + m_dSpeed = 1.0; + } + return rStatus; +} +//=========================================================================== +HSI_STATUS HSI_Motion::GetAccelerationXyz(double &AccelX, double &AccelY, double &AccelZ) +{ + auto rStatus = HSI_STATUS_NORMAL; + AccelX = m_dAcc[0]; + AccelY = m_dAcc[1]; + AccelZ = m_dAcc[2]; + return rStatus; +} +//=========================================================================== +HSI_STATUS HSI_Motion::SetAccelerationXyz(double AccelX, double AccelY, double AccelZ) +{ + auto rStatus = HSI_STATUS_NORMAL; + m_dAcc[0] = AccelX; + m_dAcc[1] = AccelY; + m_dAcc[2] = AccelZ; + for (int i = 0; i < 3; i++) + { + if (m_Jog_Acc[i] < 1E-7) + { + m_Jog_Acc[i] = 0.0; + } + if (m_Jog_Acc[i] > 1.001) + { + m_Jog_Acc[i] = 1.0; + } + } + return rStatus; +} +//=========================================================================== +HSI_STATUS HSI_Motion::IOStep(bool RunSts) +{ + auto rStatus = HSI_STATUS_NORMAL; + UNREFERENCED_PARAMETER(RunSts); + return rStatus; +} +//=========================================================================== +VOID HSI_Motion::EventCallback(sHSIEventProperties& sEventProp) +{ + WaitForSingleObject(m_Thread_Mutex, INFINITE); + if (g_pHSI_ADT_8949) + { + g_pHSI_ADT_8949->EventCallback(sEventProp); + } + ReleaseMutex(m_Thread_Mutex); +} +//=========================================================================== +void HSI_Motion::CreateThread() +{ + if (m_Thread_Id == NULL) + { + m_Thread_State = HSI_THREAD_RUNNING; + m_hTriggerEvent = CreateEvent(NULL, FALSE, NULL, NULL); + m_Thread_Id = ::CreateThread( + (LPSECURITY_ATTRIBUTES)NULL, + 0, + (LPTHREAD_START_ROUTINE)m_Thread, + (LPVOID)this, + 0, + NULL); + m_Thread_Mutex = CreateMutex(NULL, FALSE, NULL); + TRACE("CreateThread!\n"); + } +} +//=========================================================================== +void HSI_Motion::CloseThread() +{ + m_Thread_State = HSI_THREAD_EXIT; + Sleep(20); + SetEvent(m_hTriggerEvent); + if (m_Thread_Id) + { + DWORD dwCode = STILL_ACTIVE; + while (dwCode == STILL_ACTIVE) + { + GetExitCodeThread(m_Thread_Id, &dwCode); + Sleep(1); + } + } + SetEvent(m_hTriggerEvent); + CloseHandle(m_hTriggerEvent); + m_Thread_State = HSI_THREAD_EXIT; + ReleaseMutex(m_Thread_Mutex); + CloseHandle(m_Thread_Mutex); + m_Thread_Id = NULL; + m_hTriggerEvent = NULL; + m_Thread_Mutex = NULL; + TRACE("CloseThread!\n"); + +} +//=========================================================================== +unsigned __stdcall HSI_Motion::m_Thread(LPVOID pThis) +{ + HSI_Motion* _This = (HSI_Motion*)pThis; + for (;;) + { + TRACE("m_Thread!\n"); + if (m_Thread_State == THREAD_EXIT) + ExitThread(0); + WaitForSingleObject(m_hTriggerEvent, INFINITE); + switch (m_Thread_State) + { + case HSI_THREAD_RUNNING: + { + TRACE("HSI_THREAD_RUNNING.\r\n"); + _This->UpdateMotionState(); + _This->UpdateMotionStateEx(); + break; + } + case HSI_THREAD_PAUSED: + { + TRACE("HSI_THREAD_PAUSED.\r\n"); + break; + } + case HSI_THREAD_EXIT: + { + TRACE("HSI_THREAD_EXIT.\r\n"); + ExitThread(0); + break; + } + default: + break; + } + } +} +//=========================================================================== +void HSI_Motion::CreateThreadIO() +{ + if (m_Thread_IdIO == NULL) + { + m_Thread_StateIO = HSI_THREAD_RUNNING; + m_hTriggerEventIO = CreateEvent(NULL, FALSE, NULL, NULL); + m_Thread_IdIO = ::CreateThread( + (LPSECURITY_ATTRIBUTES)NULL, + 0, + (LPTHREAD_START_ROUTINE)m_ThreadIO, + (LPVOID)this, + 0, + NULL); + m_Thread_MutexIO = CreateMutex(NULL, FALSE, NULL); + TRACE("CreateThreadIO!\n"); + } +} +//=========================================================================== +void HSI_Motion::CloseThreadIO() +{ + m_Thread_StateIO = HSI_THREAD_EXIT; + Sleep(20); + SetEvent(m_hTriggerEventIO); + if (m_Thread_IdIO) + { + DWORD dwCode = STILL_ACTIVE; + while (dwCode == STILL_ACTIVE) + { + GetExitCodeThread(m_Thread_IdIO, &dwCode); + Sleep(1); + } + } + SetEvent(m_hTriggerEventIO); + CloseHandle(m_hTriggerEventIO); + m_Thread_StateIO = HSI_THREAD_EXIT; + ReleaseMutex(m_Thread_MutexIO); + CloseHandle(m_Thread_MutexIO); + m_Thread_IdIO = NULL; + m_hTriggerEventIO = NULL; + m_Thread_MutexIO = NULL; + TRACE("CloseThreadIO!\n"); +} +//=========================================================================== +unsigned __stdcall HSI_Motion::m_ThreadIO(LPVOID pThis) +{ + HSI_Motion* _This = (HSI_Motion*)pThis; + for (;;) + { + TRACE("m_ThreadIO!\n"); + if (m_Thread_StateIO == THREAD_EXIT) + ExitThread(0); + WaitForSingleObject(m_hTriggerEventIO, INFINITE); + switch (m_Thread_StateIO) + { + case HSI_THREAD_RUNNING: + { + TRACE("HSI_THREAD_RUNNING.\r\n"); + _This->UpdateMotionStateIO(); + break; + } + case HSI_THREAD_PAUSED: + { + TRACE("HSI_THREAD_PAUSED.\r\n"); + break; + } + case HSI_THREAD_EXIT: + { + TRACE("HSI_THREAD_EXIT.\r\n"); + ExitThread(0); + break; + } + default: + break; + } + } +} +//=========================================================================== +double HSI_Motion::LimitOver(UINT AxisTypes, double &LimitPos) +{ + short AxisNumber = AxisConvert(AxisTypes); + if (g_pHSI_Motion) + { + switch (AxisNumber) + { + case 1: //杞1 + { + if (LimitPos > 0) + { + if (LimitPos > axis_pos_working_limit[1]) + { + LimitPos = axis_pos_working_limit[1]; + } + } + else + { + if (LimitPos < axis_neg_working_limit[1]) + { + LimitPos = axis_neg_working_limit[1]; + } + } + break; + } + case 2: + { + if (LimitPos > 0) + { + if (LimitPos > axis_pos_working_limit[2]) + { + LimitPos = axis_pos_working_limit[2]; + } + } + else + { + if (LimitPos < axis_neg_working_limit[2]) + { + LimitPos = axis_neg_working_limit[2]; + } + } + break; + } + case 3: + { + if (LimitPos > 0) + { + if (LimitPos > axis_pos_working_limit[3]) + { + LimitPos = axis_pos_working_limit[3]; + } + } + else + { + if (LimitPos < axis_neg_working_limit[3]) + { + LimitPos = axis_neg_working_limit[3]; + } + } + break; + } + case 4: + { + if (LimitPos > 0) + { + if (LimitPos > axis_pos_working_limit[4]) + { + LimitPos = axis_pos_working_limit[4]; + } + } + else + { + if (LimitPos < axis_neg_working_limit[4]) + { + LimitPos = axis_neg_working_limit[4]; + } + } + break; + } + default: + break; + } + } + return LimitPos; +} +//=========================================================================== +short HSI_Motion::AxisConvert(UINT AxisTypes) +{ + short AxisNumber(0); + switch (AxisTypes) + { + case HSI_MOTION_AXIS_X: + { + AxisNumber = 1; + break; + } + case HSI_MOTION_AXIS_Y: + { + AxisNumber = 2; + break; + } + case HSI_MOTION_AXIS_Z: + { + AxisNumber = 3; + break; + } + case HSI_MOTION_AXIS_R: + { + AxisNumber = 4; + break; + } + case HSI_MOTION_AXIS_X1: + { + AxisNumber = 5; + break; + } + case HSI_MOTION_AXIS_Y1: + { + AxisNumber = 6; + break; + } + case HSI_MOTION_AXIS_Z1: + { + AxisNumber = 7; + break; + } + case HSI_MOTION_AXIS_R1: + { + AxisNumber = 8; + break; + } + default: + break; + } + return AxisNumber; +} +//=========================================================================== +void HSI_Motion::PrecisionLog(short AxisNumber, int count) +{ + if (g_pHSI_Motion) + { + double EncPos[11] = { 0.0 }, ProPulse[11] = { 0.0 }; + int rtn(0); + if (g_pLogger3 == NULL) + { + g_pLogger3 = new CLogger(L"\\Log\\ADT8949_Precision.Log"); + g_pLogger3->IsEnabledLog = true; + } + long pos[5] = { 0 }; + rtn = m_pADT8949_get_actual_pos(CARDNO, (int)AxisNumber, &pos[AxisNumber]); + ProPulse[AxisNumber] = m_PosThread[AxisNumber] / axis_scale_resolution[AxisNumber]; + EncPos[AxisNumber] = pos[AxisNumber]; + g_pLogger3->SendAndFlushWithTime(L"Axis=%-4dCount=%-5dTargetPulse=%-10.0fNowPulse=%-10.0fComparePulse=%-5.0fTargetPos=%9.4fmm NowPos=%9.4fmm\n", + AxisNumber, count, ProPulse[AxisNumber], EncPos[AxisNumber], EncPos[AxisNumber] - ProPulse[AxisNumber], m_PosThread[AxisNumber], EncPos[AxisNumber] * axis_scale_resolution[AxisNumber]); + } +} + +//=========================================================================== +HSI_STATUS HSI_Motion::IsSupportedEx(UINT AxisTypes, UINT &Types) +{ + auto rStatus = HSI_STATUS_NORMAL; + Types = 1; + short AxisNumber = AxisConvert(AxisTypes); + if (AxisNumber < 1 && AxisNumber > 4) + { + rStatus = HSI_STATUS_NOT_SUPPORTED; + } + return rStatus; +} +//=========================================================================== +HSI_STATUS HSI_Motion::StartupEx(UINT AxisTypes, bool bHome) +{ + auto rStatus = HSI_STATUS_NORMAL; + int rtn(0); + if (!bHome) + { + g_pLogger->SendAndFlushWithTime(L"StartupEx return!\n"); + CurrentHomeMachineState = E_GTS_HOME_FINISHED; + return HSI_STATUS_NORMAL; + } + if (g_pHSI_Motion && CurrentHomeMachineState != E_GTS_HOME_ING) + { + g_pLogger->SendAndFlushWithTime(L"StartupEx coming!\n"); + //鍒ゆ柇椹卞姩鍣ㄦ槸鍚︽姤璀 + if (DriverAlarmStatus() == HSI_STATUS_FAILED) + { + return HSI_STATUS_FAILED; + } + bool bIshome = false; + IsHomed(bIshome); + if (bIshome == true) + { + CurrentHomeMachineState = E_GTS_HOME_FINISHED; + return HSI_STATUS_NORMAL; + } + long encPos(0);//璇诲彇瀹為檯浣嶇疆 + long encPosAfter(0);//杩愯鍓嶇殑浣嶇疆 + int HomeFinished(1); + short AxisNumber = AxisConvert(AxisTypes); + + sEvenProp.EventType = HSI_EVENT_FUNCTION; + sEvenProp.EventID = HSI_EVENT_MOTION_DCC_HOME; + sEvenProp.EventResponse = HSI_EVENT_RESPONSE_CANCEL; + strcpy_s(sEvenProp.EventData, HSI_MaxStringLength, "Go Home!"); + EventCallback(sEvenProp); + if (sEvenProp.EventCallbackID == HSI_EVENT_RESPONSE_CANCEL) + { + g_pLogger->SendAndFlushWithTime(L"StartupEx CANCEL!\n"); + CurrentHomeMachineState = E_GTS_HOME_NONE; + return HSI_STATUS_NORMAL; + } + rtn = m_pADT8949_get_actual_pos(CARDNO, AxisNumber, &encPosAfter); + rtn = m_pADT8949_ResetHomeStatus_Ex(CARDNO, AxisNumber); + g_IsAbort = false; + m_HomeFocus = false; + CurrentHomeMachineState = E_GTS_HOME_ING; + if (HomeJogEx(AxisNumber) == HSI_STATUS_FAILED) + { + g_pLogger->SendAndFlushWithTime(L"StartupEx HomeJogEx = HSI_STATUS_FAILED!\n"); + return HSI_STATUS_FAILED; + } + //寮濮嬪洖鍘熺偣 + if (m_Home_Machine_Axis[AxisNumber] == 1) + { + if (AxisNumber == 3) + { + //鏈夊叧Z鐩哥殑閮芥病鐢ㄤ簡锛屾ā寮4鎴栬5琛ㄧず鍥炲鐨勬柟鍚,鏈鍚庝竴涓弬鏁拌〃绀烘壘鍒板師鐐逛俊鍙峰悗鍋忕Щ1mm + rtn = m_pADT8949_SetHomeMode_Ex(CARDNO, AxisNumber, 4, 0, 0, 0, (float)m_Home_Back_Range[AxisNumber], 0, 0); + } + else + { + rtn = m_pADT8949_SetHomeMode_Ex(CARDNO, AxisNumber, 4, 0, 0, 0, (float)m_Home_Back_Range[AxisNumber], 0, 0); + } + //鍗″彿 杞村彿 STOP0鎼滃璧峰閫熷害 鍘熺偣鎼滃閫熷害 浣庨熸帴杩戝師鐐归熷害 鍥炲師鐐硅繃绋嬩腑鐨勫姞閫熷害 缂栫爜鍣╖鐩(STOP1)鎼滃閫熷害 + rtn += m_pADT8949_SetHomeSpeed_Ex(CARDNO, AxisNumber, 1, (float)m_Home_Speed_Search[AxisNumber], (float)m_Home_Speed_Limit[AxisNumber], (float)m_Home_Acc[AxisNumber], 0); + rtn += m_pADT8949_HomeProcess_Ex(CARDNO, AxisNumber); + } + if (rtn != 0) + { + CurrentHomeMachineState = E_GTS_HOME_NONE; + sEvenProp.EventType = HSI_EVENT_ERROR; + sEvenProp.EventID = HSI_EVENT_MOTION; + sEvenProp.EventResponse = HSI_EVENT_RESPONSE_OK; + strcpy_s(sEvenProp.EventData, HSI_MaxStringLength, "鍥炲鍙傛暟璁剧疆寮傚父!"); + g_pLogger->SendAndFlushWithTime(L"Go home pram err-!\n"); + EventCallback(sEvenProp); + return HSI_STATUS_FAILED; + } + int count = 0; + while (true) + { + DoEvents(); + Sleep(1); + if (g_IsAbort) + { + g_IsAbort = false; + return HSI_STATUS_FAILED; + } + if (count > m_HomeTimeout) + { + AbortMotion(); + CurrentHomeMachineState = E_GTS_HOME_NONE; + sEvenProp.EventType = HSI_EVENT_ERROR; + sEvenProp.EventID = HSI_EVENT_MOTION; + sEvenProp.EventResponse = HSI_EVENT_RESPONSE_OK; + strcpy_s(sEvenProp.EventData, HSI_MaxStringLength, "鍥炲瓒呮椂-!"); + g_pLogger->SendAndFlushWithTime(L"Go home timeout_HomeMachine-!\n"); + EventCallback(sEvenProp); + return HSI_STATUS_FAILED; + } + for (int i = 1; i < 5; i++) + { + if (m_Home_Machine_Axis[AxisNumber] == 1 && HomeFinished != 0) + { + Sleep(1); + HomeFinished = m_pADT8949_GetHomeStatus_Ex(CARDNO, AxisNumber); + if (HomeFinished == 0) + { + g_pLogger->SendAndFlushWithTime(_T("StartupEx : HomeFinished[%d]= %d\n"), AxisNumber, HomeFinished); + } + if (HomeFinished > 20 || HomeFinished < 0) + { + AbortMotion(); + CurrentHomeMachineState = E_GTS_HOME_NONE; + sEvenProp.Init(); + sEvenProp.EventType = HSI_EVENT_ERROR; + sEvenProp.EventID = HSI_EVENT_MOTION; + sEvenProp.EventResponse = HSI_EVENT_RESPONSE_OK; + sprintf_s(sEvenProp.EventData, "%d杞村洖瀹跺け璐-!", i); + EventCallback(sEvenProp); + return HSI_STATUS_FAILED; + } + } + else + { + HomeFinished = 0; + } + } + if (HomeFinished == 0) + { + break; + } + count++; + } + g_pLogger->SendAndFlushWithTime(L"StartupEx success!\n"); + //鍥炲缁撴潫 + Sleep(m_ZeroTime[AxisNumber]); + m_pADT8949_get_actual_pos(CARDNO, AxisNumber, &encPos); + m_pADT8949_set_actual_pos(CARDNO, AxisNumber, 0); + m_pADT8949_set_command_pos(CARDNO, AxisNumber, 0); + CurrentHomeMachineState = E_GTS_HOME_FINISHED; + SetPositionEx(AxisTypes, (encPosAfter - encPos)*axis_scale_resolution[AxisNumber], HSI_MOTION_MOVE_NOWAIT, 0); + } + return rStatus; +} +//=========================================================================== +HSI_STATUS HSI_Motion::HomeJogEx(int AxisNumber) +{ + auto rStatus = HSI_STATUS_NORMAL; + if (g_pHSI_Motion) + { + int rtn(0); + if (m_Home_Machine_Axis[AxisNumber] == 1) + { + rtn = m_pADT8949_set_softlimit_mode(CARDNO, AxisNumber, 0, 100000000, -100000000, 0);//鍥炲鏃舵棤鏁堣蒋闄愪綅 + //rtn = m_pADT8949_set_command_pos(CARDNO, i, 0); //娓呴昏緫璁℃暟鍣 + //rtn = m_pADT8949_set_actual_pos(CARDNO, i, 0); //娓呭疄浣嶈鏁板櫒 + rtn = m_pADT8949_set_startv(CARDNO, AxisNumber, 1); //璁惧畾璧峰閫熷害 + rtn = m_pADT8949_set_speed(CARDNO, AxisNumber, (float)m_Home_Speed_High[AxisNumber]); //璁惧畾椹卞姩閫熷害 + rtn = m_pADT8949_set_acc(CARDNO, AxisNumber, (float)m_Home_Acc[AxisNumber]); //璁惧畾鍔犻熷害 + rtn = m_pADT8949_set_dec(CARDNO, AxisNumber, (float)m_Home_Acc[AxisNumber]); //璁惧畾鍑忛熷害 + if (AxisNumber == 3) + { + rtn = m_pADT8949_continue_move(CARDNO, AxisNumber, 0); + } + else + { + rtn = m_pADT8949_continue_move(CARDNO, AxisNumber, 1); + } + } + int status = 0, count = 0; + do + { + DoEvents(); + Sleep(1); + if (g_IsAbort) + { + g_IsAbort = false; + return HSI_STATUS_FAILED; + } + rtn = m_pADT8949_get_status_all(CARDNO, &status); + count++; + if (m_Home_Machine_Axis[AxisNumber] == 1 && count > m_HomeTimeout) + { + AbortMotion(); + CurrentHomeMachineState = E_GTS_HOME_NONE; + g_pLogger->SendAndFlushWithTime(L"Go home timeout_HomeMachine+!\n"); + sEvenProp.Init(); + sEvenProp.EventType = HSI_EVENT_ERROR; + sEvenProp.EventID = HSI_EVENT_MOTION; + sEvenProp.EventResponse = HSI_EVENT_RESPONSE_OK; + sprintf_s(sEvenProp.EventData, "%d杞村洖瀹跺け璐+!", AxisNumber); + EventCallback(sEvenProp); + return HSI_STATUS_FAILED; + } + } while (status & (1 << (AxisNumber - 1))); + g_pLogger->SendAndFlushWithTime(L"HomeJogEx m_pADT8949_continue_move Over!\n"); + } + return rStatus; +} +//=========================================================================== +HSI_STATUS HSI_Motion::GetScaleResolutionEx(UINT AxisTypes, double &Scale) +{ + auto rStatus = HSI_STATUS_NORMAL; + short AxisNumber = AxisConvert(AxisTypes); + if (g_pHSI_Motion) + { + Scale = axis_scale_resolution[AxisNumber]; + } + return rStatus; +} +//=========================================================================== +HSI_STATUS HSI_Motion::SetScaleResolutionEx(UINT AxisTypes, double Scale) +{ + auto rStatus = HSI_STATUS_NORMAL; + short AxisNumber = AxisConvert(AxisTypes); + if (g_pHSI_Motion) + { + axis_scale_resolution[AxisNumber] = (float)Scale; + } + return rStatus; +} +//=========================================================================== +HSI_STATUS HSI_Motion::GetPositionEx(UINT AxisTypes, double &Position, double &Time) +{ + auto rStatus = HSI_STATUS_NORMAL; + short AxisNumber = AxisConvert(AxisTypes); + CString tempStr; + long Pos = 0; + UNREFERENCED_PARAMETER(Time); + if (g_pHSI_Motion) + { + m_pADT8949_get_actual_pos(CARDNO, AxisNumber, &Pos); + Position = Pos*axis_scale_resolution[AxisNumber]; + } + return rStatus; +} +//=========================================================================== +HSI_STATUS HSI_Motion::SetPositionEx(UINT AxisTypes, double Position, HSI_MOTION_MOVE_TYPE eType, double dSpeedGear) +{ + auto rStatus = HSI_STATUS_NORMAL; + UNREFERENCED_PARAMETER(dSpeedGear); + g_pLogger->SendAndFlushWithTime(L"SetPositionEx coming!\n"); + //鍒ゆ柇椹卞姩鍣ㄦ槸鍚︽姤璀 + if (DriverAlarmStatus() == HSI_STATUS_FAILED) + { + return HSI_STATUS_FAILED; + } + if (g_pHSI_Motion && CurrentMotionState != E_SO7_MOTION_MOVETO) + { + g_pLogger->SendAndFlushWithTime(L"SetPositionEx init!\n"); + short AxisNumber(0); + AxisNumber = AxisConvert(AxisTypes); + m_IsExMotion = E_GTS_MOTION_EX; + LimitOver(AxisTypes, Position); + m_PosThread[AxisNumber] = Position; + m_AxisThread = AxisNumber; + if (m_SetPotion_Speed[AxisNumber] > 500) + { + m_SetPotion_Speed[AxisNumber] = 500; + } + if (m_SetPotion_Speed[AxisNumber] < 0) + { + m_SetPotion_Speed[AxisNumber] = 0; + } + m_pADT8949_set_admode(CARDNO, AxisNumber, 1); + m_pADT8949_set_startv(CARDNO, AxisNumber, m_SetPotion_StartV[AxisNumber]); //璧峰閫熷害 + m_pADT8949_set_speed(CARDNO, AxisNumber, m_SetPotion_Speed[AxisNumber]); //椹卞姩閫熷害 + m_pADT8949_set_acc(CARDNO, AxisNumber, m_SetPotion_Acc[AxisNumber]); //鍔/鍑忛熷害 + m_pADT8949_set_dec(CARDNO, AxisNumber, m_SetPotion_Dec[AxisNumber]); //鍔/鍑忛熷害 + if (m_ControlMode[1] == 0) + { + m_pADT8949_abs_pmove(CARDNO, AxisNumber, (float)Position); //寮濮嬮┍鍔 + } + else + { + m_pADT8949_abs_pmove_closedloop(CARDNO, AxisNumber, (float)Position, (int)(m_PrecisionCount[AxisNumber] * 0.5), m_LoopPeriod[AxisNumber], m_LoopRate[AxisNumber]); + } + CurrentMotionState = E_SO7_MOTION_MOVETO; + if (eType == HSI_MOTION_MOVE_WAIT) + { + m_Thread_State = HSI_THREAD_PAUSED; + SetEvent(m_hTriggerEvent); + g_pLogger->SendAndFlushWithTime(L"Wait SetPositionEx move!\n"); + int status(0); + do + { + Sleep(1); + m_pADT8949_get_status(CARDNO, m_AxisThread, &status); //璇荤偣浣嶈繍鍔ㄧ姸鎬 + if (g_IsAbort == true) + { + g_IsAbort = false; + break; + } + } while (status != 0); + + long count = 0; + long Pos(0); + double ProPulse = m_PosThread[m_AxisThread] / axis_scale_resolution[m_AxisThread]; + int i = 0; + int JumpCount = 0; + while (i < m_SetPotion_Count[1])//鍒颁綅娆℃暟鍒ゆ柇 + { + Sleep(1); + m_pADT8949_get_actual_pos(CARDNO, m_AxisThread, &Pos); + if (fabs(ProPulse - Pos) <= m_PrecisionCount[m_AxisThread]) + { + i++; + } + else if (count > m_PrecisionTimeout[m_AxisThread] || g_IsAbort == true) //瓒呮椂閫鍑 + { + g_pLogger->SendAndFlushWithTime(L"UpdateMotionStateEx NoWait SetPositionEx Timeout or g_IsAbort = true!\n"); + if (g_IsAbort == false) + { + 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_Ex瀹氫綅瓒呮椂!"); + EventCallback(sEvenProp); + } + g_IsAbort = false; + break; + } + else + { + JumpCount++; + i = 0; + } + count++; + } + CurrentMotionState = E_SO7_MOTION_NONE; + } + if (eType == HSI_MOTION_MOVE_NOWAIT) + { + g_pLogger->SendAndFlushWithTime(L"NoWait SetPositionEx move!\n"); + m_Thread_State = HSI_THREAD_RUNNING; + SetEvent(m_hTriggerEvent); + } + } + else + { + g_pLogger->SendAndFlushWithTime(L"SetPositionEx init failed, moving!\n"); + rStatus = HSI_STATUS_MOTION_MOVING; + } + return rStatus; +} +//=========================================================================== +HSI_STATUS HSI_Motion::GetSpeedEx(UINT AxisTypes, double &Speed) +{ + auto rStatus = HSI_STATUS_NORMAL; + short AxisNumber = AxisConvert(AxisTypes); + if (AxisNumber >= 1 && AxisNumber <= 4) + { + Speed = m_SetPotion_Speed[AxisNumber]; + } + return rStatus; +} +//=========================================================================== +HSI_STATUS HSI_Motion::SetSpeedEx(UINT AxisTypes, double Speed) +{ + auto rStatus = HSI_STATUS_NORMAL; + short AxisNumber = AxisConvert(AxisTypes); + if (Speed <= 0) + { + m_SetPotion_Speed[AxisNumber] = 0.0; + } + if (Speed >= 500) + { + m_SetPotion_Speed[AxisNumber] = 500; + } + if (AxisNumber >= 1 && AxisNumber <= 4) + { + m_SetPotion_Speed[AxisNumber] = (float)Speed; + } + return rStatus; +} +//=========================================================================== +HSI_STATUS HSI_Motion::GetAccelerationEx(UINT AxisTypes, double &Accel) +{ + auto rStatus = HSI_STATUS_NORMAL; + short AxisNumber = AxisConvert(AxisTypes); + if (AxisNumber >= 1 && AxisNumber <= 4) + { + Accel = m_SetPotion_Acc[AxisNumber]; + } + return rStatus; +} +//=========================================================================== +HSI_STATUS HSI_Motion::SetAccelerationEx(UINT AxisTypes, double Accel) +{ + auto rStatus = HSI_STATUS_NORMAL; + short AxisNumber = AxisConvert(AxisTypes); + if (Accel <= 0.1) + { + m_SetPotion_Acc[AxisNumber] = 0.1f; + m_SetPotion_Dec[AxisNumber] = 0.1f; + } + if (AxisNumber >= 1 && AxisNumber <= 4) + { + m_SetPotion_Acc[AxisNumber] = (float)Accel; + m_SetPotion_Dec[AxisNumber] = (float)Accel; + } + return rStatus; +} +//=========================================================================== \ No newline at end of file diff --git a/PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/HSI_ADT_8949/HSI_Motion.h b/PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/HSI_ADT_8949/HSI_Motion.h new file mode 100644 index 0000000..1838616 --- /dev/null +++ b/PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/HSI_ADT_8949/HSI_Motion.h @@ -0,0 +1,341 @@ +#ifndef HSI_MOTION_INCLUDED_ +#define HSI_MOTION_INCLUDED_ +#pragma once + +#include "adt8949.h" +#include "..\..\..\Tools\UsbUtility\logger.h" + +#define X_AXIS 1 +#define Y_AXIS 2 +#define Z_AXIS 3 +#define A_AXIS 4 +#define CARDNO 0 +#define THREAD_PAUSED 1 +#define THREAD_EXIT -1 +#define MAX_BUFF_SIZE 0x200 +const double SCALE_UNITS = 1000.0; +static CLogger* g_pLogger; +static CLogger* g_pLogger3; +static bool g_IsAbort;//是否点击了AbortMotion退出 + +enum E_SO7_MOTION_TYPE +{ + E_SO7_MOTION_NONE, + E_SO7_MOTION_JOG, + E_SO7_MOTION_MOVETO, + E_SO7_MOTION +}; +enum E_GTS_HOME_STATUS +{ + E_GTS_HOME_NONE,//0表示从未回过回原点 + E_GTS_HOME_ING,//1表示正在回原点 + E_GTS_HOME_FINISHED,//2表示已经回过原点 +}; +enum E_GTS_MOTION_TYPE +{ + E_GTS_MOTION_XYZA,//4轴定位 + E_GTS_MOTION_EX,//单轴定位 + E_GTS_MOTION_XYZ,//3轴定位 +}; +typedef int(_stdcall *pADT8949_initial)(); +typedef int(_stdcall *pADT8949_close_card)(); +typedef int(_stdcall *pADT8949_get_card_index)(int *num, int index[10]); +typedef int(_stdcall *pADT8949_set_pulse_mode)(int cardno, int axis, int value, int logic, int dir_logic); +typedef int(_stdcall *pADT8949_set_limit_mode)(int cardno, int axis, int v1, int v2, int logic); +typedef int(_stdcall *pADT8949_set_stop0_mode)(int cardno, int axis, int v, int logic, int admode); +typedef int(_stdcall *pADT8949_set_stop1_mode)(int cardno, int axis, int v, int logic, int admode); +typedef int(_stdcall *pADT8949_set_input_mode)(int cardno, int axis, int mode, int port, int logic, int admode); +typedef int(_stdcall *pADT8949_set_gear)(int cardno, int axis, float gear); +typedef int(_stdcall *pADT8949_set_actual_count_mode)(int cardno, int axis, int value, int dir_logic); +typedef int(_stdcall *pADT8949_set_emergency_stop_mode)(int cardno, int port, int logic); +typedef int(_stdcall *pADT8949_set_softlimit_mode)(int cardno, int axis, int EnableFlag, float Ppos, float Npos, int admode); +typedef int(_stdcall *pADT8949_reset_card)(int cardno); +typedef int(_stdcall *pADT8949_get_status)(int cardno, int axis, int *v); +typedef int(_stdcall *pADT8949_get_status_all)(int cardno, int *v); +typedef int(_stdcall *pADT8949_get_inp_status)(int cardno, int *v); +typedef int(_stdcall *pADT8949_get_inp_index)(int cardno, unsigned short *index); +typedef int(_stdcall *pADT8949_set_precount)(int cardno, unsigned short prec); +typedef int(_stdcall *pADT8949_set_jcc)(int cardno, int axis, unsigned short jcc); +typedef int(_stdcall *pADT8949_set_acc)(int cardno, int axis, float add); +typedef int(_stdcall *pADT8949_set_dec)(int cardno, int axis, float add); +typedef int(_stdcall *pADT8949_set_admode)(int cardno, int axis, unsigned short mode); +typedef int(_stdcall *pADT8949_set_speed)(int cardno, int axis, float speed); +typedef int(_stdcall *pADT8949_set_startv)(int cardno, int axis, float speed); +typedef int(_stdcall *pADT8949_set_endv)(int cardno, int axis, float speed); +typedef int(_stdcall *pADT8949_set_speed_constraint)(int cardno, int axis, float speed); +typedef int(_stdcall *pADT8949_set_command_pos)(int cardno, int axis, long pos); +typedef int(_stdcall *pADT8949_set_actual_pos)(int cardno, int axis, long pos); +typedef int(_stdcall *pADT8949_set_rate1)(int cardno, float rate); +typedef int(_stdcall *pADT8949_set_rate2)(int cardno, int axis, float rate); +typedef int(_stdcall *pADT8949_get_command_pos)(int cardno, int axis, long *pos); +typedef int(_stdcall *pADT8949_get_actual_pos)(int cardno, int axis, long *pos); +typedef int(_stdcall *pADT8949_get_stopdata)(int cardno, int axis, int *value); +typedef int(_stdcall *pADT8949_pmove)(int cardno, int axis, float pos); +typedef int(_stdcall *pADT8949_abs_pmove)(int cardno, int axis, float pos); +typedef int(_stdcall *pADT8949_continue_move)(int cardno, int axis, int dir); +typedef int(_stdcall *pADT8949_inp_arc3)(int cardno, unsigned short index, unsigned char arcmap, float pos2[4], float pos3[4], int arc_flag); +typedef int(_stdcall *pADT8949_inp_abs_arc3)(int cardno, unsigned short index, unsigned char arcmap, float pos2[4], float pos3[4], int arc_flag); +typedef int(_stdcall *pADT8949_get_out)(int cardno, int number); +typedef int(_stdcall *pADT8949_write_bit)(int cardno, int number, int value); +typedef int(_stdcall *pADT8949_read_bit)(int cardno, int number); +typedef int(_stdcall *pADT8949_set_gpio)(int cardno, int gp, short int levelmap); +typedef int(_stdcall *pADT8949_get_gpio)(int cardno, int gp, short int *levelmap); +typedef int(_stdcall *pADT8949_SetHomeMode_Ex)(int m_nCardNum, int m_nAxisNum, int m_nHomeDir, + int m_nStop0Active, int m_nLimitActive, int m_nStop1Active, float m_nBackRange, float m_nEncoderZRange, float m_nOffset); +typedef int(_stdcall *pADT8949_SetHomeSpeed_Ex)(int m_nCardNum, int m_nAxisNum, float m_nStartSpeed,float m_nSearchSpeed, float m_nHomeSpeed, float m_nAcc, float m_nZPhaseSpeed); +typedef int(_stdcall *pADT8949_HomeProcess_Ex)(int m_nCardNum, int m_nAxisNum); +typedef int(_stdcall *pADT8949_GetHomeStatus_Ex)(int m_nCardNum, int m_nAxisNum); +typedef int(_stdcall *pADT8949_dec_stop)(int cardno, int axis); +typedef int(_stdcall *pADT8949_sudden_stop)(int cardno, int axis); +typedef int(_stdcall *pADT8949_inp_abs_move4)(int cardno, unsigned short index, unsigned char axismap, float pos1, float pos2, float pos3, float pos4); +typedef int(_stdcall *pADT8949_abs_pmove_closedloop)(int cardno, int axis, float pos, int range, int checktime, float rate); +typedef int(_stdcall *pADT8949_set_pos_compare_mode)(int cardno, int axis, int EnableFlag, int cmp_source);//模式 +typedef int(_stdcall *pADT8949_set_pos_compare_pulse)(int cardno, int axis, long pos, int dir, int port, int level, int millisecond);//脉冲 +typedef int(_stdcall *pADT8949_set_pos_compare_io)(int cardno, int axis, long pos, int dir, int type, int port);//设置输出点 +typedef int(_stdcall *pADT8949_set_pos_compare_multi_io)(int cardno, int axis, long pos, int dir, int iomap, int levelmap); +typedef int(_stdcall *pADT8949_get_pos_compare_len)(int cardno, int axis, int *len);//获取比较器余量 +typedef int(_stdcall *pADT8949_clear_pos_compare_point)(int cardno, int axis);//清零 +typedef int(_stdcall *pADT8949_set_pos_compare_stop_axis)(int cardno, int axis, long pos, int dir, int DesAxis, int admode);//停止 +typedef int(_stdcall *pADT8949_NeedHome_Ex)(int m_nCardNum, int m_nAxisNum); +typedef int(_stdcall *pADT8949_ResetHomeStatus_Ex)(int m_nCardNum, int m_nAxisNum); +typedef int(_stdcall *pADT8949_set_lock_position)(int cardno, int axis, int logic, int type); +typedef int(_stdcall *pADT8949_get_lock_status)(int cardno, int axis, int type, int *v); +typedef int(_stdcall *pADT8949_get_lock_position)(int cardno, int axis, int type, long *pos); +typedef int(_stdcall *pADT8949_clr_lock_status)(int cardno, int axis); + +class HSI_Motion : public HSI +{ +public: + HSI_Motion(); + ~HSI_Motion(); + HSI_STATUS IsSupported(UINT &Types); + + virtual HSI_STATUS Startup(HWND _hWnd, bool _bOfflineOnly); + + HSI_STATUS HomeMachine(bool bHomed); + HSI_STATUS IsHomed(bool &bHomed); + HSI_STATUS GetSpeedXyz(double &Speed); + HSI_STATUS SetSpeedXyz(double Speed); + HSI_STATUS GetAccelerationXyz(double &AccelX, double &AccelY, double &AccelZ); + HSI_STATUS SetAccelerationXyz(double AccelX, double AccelY, double AccelZ); + HSI_STATUS GetSpeedR(double &Speed); + HSI_STATUS SetSpeedR(double Speed); + + HSI_STATUS GetScaleResolution(double &_ScaleX, double &_ScaleY, double &_ScaleZ); + HSI_STATUS SetScaleResolution(double _ScaleX, double _ScaleY, double _ScaleZ); + + HSI_STATUS GetDeadBand(double &DeadbandX, double &DeadbandY, double &DeadbandZ, double &DeadbandR); + HSI_STATUS GetRefreshDeadBand(double &Deadband); + + HSI_STATUS Jog(UINT AxisTypes, double Speed); + HSI_STATUS StopJog(); + + HSI_STATUS GetPositionXyz(UINT AxisTypes, double &PositionX, double &PositionY, double &PositionZ, double &Time); + + HSI_STATUS GetPositionEncPrfMulti(UINT AxisTypes, double *EncPos, double *PrfPos, int Count); + HSI_STATUS SetPositionXyz(UINT AxisTypes, double PositionX, double PositionY, double PositionZ, HSI_MOTION_MOVE_TYPE eType, double dFlyRadius); + HSI_STATUS SetPositionXyza(UINT AxisTypes, double PositionX, double PositionY, double PositionZ, double PositionA, HSI_MOTION_MOVE_TYPE eType, double dFlyRadius); + HSI_STATUS ZeroPos(bool bZeroPos); + HSI_STATUS GetPositionR(UINT AxisTypes, double &PositionR, double &Time); + HSI_STATUS SetPositionR(UINT AxisTypes, double PositionR, HSI_MOTION_AXIS_R_MOVE_TYPE DirectionType, bool bWait); + HSI_STATUS Load_ADT8949_Motion_Inifile(CString GoogolIniFile); + HSI_STATUS Load_ADT8949_Config_Inifile(CString GoogolIniFile); + HSI_STATUS AbortMotion(); + + HSI_STATUS GetDIO(UINT IOChannel, UINT& _Status); + HSI_STATUS SetDIO(UINT IOChannel, UINT _Status); + HSI_STATUS GetAppPath(CString &Path); + virtual HSI_STATUS Shutdown(); + + HSI_STATUS IsSupportedEx(UINT AxisTypes, UINT &Types); + HSI_STATUS StartupEx(UINT AxisTypes, bool bHome); + HSI_STATUS GetScaleResolutionEx(UINT AxisTypes, double &Scale); + HSI_STATUS SetScaleResolutionEx(UINT AxisTypes, double Scale); + HSI_STATUS GetPositionEx(UINT AxisTypes, double &Position, double &Time); + HSI_STATUS SetPositionEx(UINT AxisTypes, double Position, HSI_MOTION_MOVE_TYPE eType, double dSpeedGear); + HSI_STATUS GetSpeedEx(UINT AxisTypes, double &Speed); + HSI_STATUS SetSpeedEx(UINT AxisTypes, double Speed); + HSI_STATUS GetAccelerationEx(UINT AxisTypes, double &Accel); + HSI_STATUS SetAccelerationEx(UINT AxisTypes, double Accel); + + HSI_STATUS DCCScanSetData(UINT AxisTypes, HSI_SCAN_MOTION_TYPE eType, UINT lTrigNumber, double* dTrigDis); + HSI_STATUS DCCScanStart(); + HSI_STATUS DCCScanStop(); + HSI_STATUS IOStep(bool RunSts); + HSI_STATUS HomeJog(); + HSI_STATUS HomeJogEx(int AxisNumber); + +public: + static int m_Thread_State; + static HANDLE m_Thread_Id; + static HANDLE m_Thread_Mutex; + static HANDLE m_hTriggerEvent; + //用于IO发消息的线程 + static int m_Thread_StateIO; + static HANDLE m_Thread_IdIO; + static HANDLE m_Thread_MutexIO; + static HANDLE m_hTriggerEventIO; + + float axis_scale_resolution[5];//从1开始,0不用,共4个轴 + float axis_neg_working_limit[5]; + float axis_pos_working_limit[5]; + + float m_Home_Speed_High[5];//回家正向的速度 + float m_Home_Acc[5];//回家正反向的加速度 + float m_Home_Speed_Search[5];//回家搜索的速度 + float m_Home_Back_Range[5];//反向距离 + float m_Home_Speed_Limit[5];//反向距离后的慢速找原点的速度 + int m_ZeroTime[5];//回家后清零的间隔时间 + float m_Gear[5];//每毫米脉冲数,即机器运动1mm,控制卡需发送的脉冲个数 + + float m_SetPotion_Speed[5]; + float m_SetPotion_StartV[5]; + float m_SetPotion_Acc[5]; + float m_SetPotion_Dec[5]; + int m_SetPotion_Count[5];//定位判断次数 + int m_PrecisionCount[5];//定位精度的脉冲数 + int m_PrecisionTimeout[5];//定位超时时间 + + float m_Jog_Speed[5]; //表示5个档位 + float m_Jog_StartV[5]; + float m_Jog_EndV[5]; + float m_Jog_Acc[5]; + float m_Jog_Dec[5]; + + double m_dSpeed = 50; + double m_dAcc[3]; + double m_dDec[3]; + + int m_IsExMotion; //0是xyz用的,1是单轴用的,2都不用 + bool m_HomeFocus;//从文件读取的值,用于强制回零 + int m_Home_Machine_Axis[5];//用于启动时需要回原点的轴号选择 + long m_Home_Enc_Pos_Axis[5];//记住关闭电源时的实际位置 + long m_Home_Prf_Pos_Axis[5];//记住关闭电源时的规划位置 + int m_IsHomeEncPos = 0; //是否启动实际位置判断是否回家,默认0,1启用,0关闭 + int m_IsHomePrfPos = 1; //是否启动规划位置判断是否回家,默认1,1启用,0关闭 + int m_HomeTimeout = 20000; //回家超时次数 + int m_PulseDir[5];//改变实际位置和规划位置的方向 + //回家时根据规划位置和实际位置的脉冲数的差值进行比较,3表示3个脉冲,默认3 + int m_HomeComparePulse[5]; + + int m_StopJogMode[5];//JOG模式采用急停还是平滑停止 + + int m_IsIOFuntion = 0;//是否启动IO功能,1为打开,0为关闭 + int m_IsStartInput = 0;//是否启用脚踏开关功能,1为启用,0为关闭,默认0 + UINT m_StartInputPort = 16;//外部输入按钮启动程序 + + int m_LogIsOpen[5];//是否打开记录,0为打开,非0为关闭 + int m_ControlMode[5];//采用何种控制方式,0为驱动器做闭环,1为控制器 + int m_LoopPeriod[5];//自闭环周期 + float m_LoopRate[5];//自闭环实际位置和逻辑位置的比率 + + int m_IsDriverAlarm = 0;//是否启用驱动器报警功能,1为启用,0为关闭,默认0 + int m_DriverAlarmAxis[5];//需要启用驱动器报警的轴号,1启用该轴,0关闭,默认0 + int m_IsCloseAllAlarm = 0;//是否启用取消所有报警提示,1为启用,0为关闭,默认0 + + double m_PosThread[5];//SetpositionXyz的目标位置 + double m_PositionA = 0.0;//第四轴 + short m_AxisThread; + + int m_TriggerPort = 8;//外部触发的输出端口号,范围0 - 14 + int m_TriggerPulseWidth = 1;//输出脉冲的时间长度,单位:毫秒, 默认1ms + int m_TriggerHoldTime = 150;//手动触发保持时间,单位ms,默认150 + + static unsigned __stdcall m_Thread(LPVOID pThis); + //用于IO发消息的线程 + static unsigned __stdcall m_ThreadIO(LPVOID pThis); +private: + void CreateThread(); + void CloseThread(); + //用于IO发消息的线程 + void CreateThreadIO(); + void CloseThreadIO(); + void UpdateMotionState(); + void UpdateMotionStateEx(); + void UpdateMotionStateIO();//IO发消息使用 + void SendMsgMotionFinished(); + VOID EventCallback(sHSIEventProperties& sEventProp); + double SpeedPercent(double &Speed, double &Startv, double &Endv, double &Acc, double &Dec); + int ADT8949Init(); + short AxisConvert(UINT AxisTypes); + double LimitOver(UINT AxisTypes, double &LimitPos); + int P2P(short AxisNumber, long Pos, double Speed, double Acc); + void DoEvents(); + HSI_STATUS DriverAlarmStatus(); + void PrecisionLog(short AxisNumber, int count); +private: + UINT ActiveAxis; + HINSTANCE m_Hinst; + E_SO7_MOTION_TYPE CurrentMotionState; + E_GTS_HOME_STATUS CurrentHomeMachineState; +public: + //获取数据的函数指针 + pADT8949_initial m_pADT8949_initial; + pADT8949_close_card m_pADT8949_close_card; + pADT8949_get_card_index m_pADT8949_get_card_index; + pADT8949_set_pulse_mode m_pADT8949_set_pulse_mode; + pADT8949_set_limit_mode m_pADT8949_set_limit_mode; + pADT8949_set_stop0_mode m_pADT8949_set_stop0_mode; + pADT8949_set_stop1_mode m_pADT8949_set_stop1_mode; + pADT8949_set_input_mode m_pADT8949_set_input_mode; + pADT8949_set_gear m_pADT8949_set_gear; + pADT8949_set_actual_count_mode m_pADT8949_set_actual_count_mode; + pADT8949_set_emergency_stop_mode m_pADT8949_set_emergency_stop_mode; + pADT8949_set_softlimit_mode m_pADT8949_set_softlimit_mode; + pADT8949_reset_card m_pADT8949_reset_card; + pADT8949_get_status m_pADT8949_get_status; + pADT8949_get_status_all m_pADT8949_get_status_all; + pADT8949_get_inp_status m_pADT8949_get_inp_status; + pADT8949_get_inp_index m_pADT8949_get_inp_index; + pADT8949_set_precount m_pADT8949_set_precount; + pADT8949_set_jcc m_pADT8949_set_jcc; + pADT8949_set_acc m_pADT8949_set_acc; + pADT8949_set_dec m_pADT8949_set_dec; + pADT8949_set_admode m_pADT8949_set_admode; + pADT8949_set_speed m_pADT8949_set_speed; + pADT8949_set_startv m_pADT8949_set_startv; + pADT8949_set_endv m_pADT8949_set_endv; + pADT8949_set_speed_constraint m_pADT8949_set_speed_constraint; + pADT8949_set_command_pos m_pADT8949_set_command_pos; + pADT8949_set_actual_pos m_pADT8949_set_actual_pos; + pADT8949_set_rate1 m_pADT8949_set_rate1; + pADT8949_set_rate2 m_pADT8949_set_rate2; + pADT8949_get_command_pos m_pADT8949_get_command_pos; + pADT8949_get_actual_pos m_pADT8949_get_actual_pos; + pADT8949_get_stopdata m_pADT8949_get_stopdata; + pADT8949_pmove m_pADT8949_pmove; + pADT8949_abs_pmove m_pADT8949_abs_pmove; + pADT8949_continue_move m_pADT8949_continue_move; + pADT8949_inp_arc3 m_pADT8949_inp_arc3; + pADT8949_inp_abs_arc3 m_pADT8949_inp_abs_arc3; + pADT8949_get_out m_pADT8949_get_out; + pADT8949_write_bit m_pADT8949_write_bit; + pADT8949_read_bit m_pADT8949_read_bit; + pADT8949_set_gpio m_pADT8949_set_gpio; + pADT8949_get_gpio m_pADT8949_get_gpio; + pADT8949_SetHomeMode_Ex m_pADT8949_SetHomeMode_Ex; + pADT8949_SetHomeSpeed_Ex m_pADT8949_SetHomeSpeed_Ex; + pADT8949_HomeProcess_Ex m_pADT8949_HomeProcess_Ex; + pADT8949_GetHomeStatus_Ex m_pADT8949_GetHomeStatus_Ex; + pADT8949_dec_stop m_pADT8949_dec_stop; + pADT8949_sudden_stop m_pADT8949_sudden_stop; + pADT8949_inp_abs_move4 m_pADT8949_inp_abs_move4; + pADT8949_abs_pmove_closedloop m_pADT8949_abs_pmove_closedloop; + pADT8949_set_pos_compare_mode m_pADT8949_set_pos_compare_mode; + pADT8949_set_pos_compare_pulse m_pADT8949_set_pos_compare_pulse; + pADT8949_set_pos_compare_io m_pADT8949_set_pos_compare_io; + pADT8949_set_pos_compare_multi_io m_pADT8949_set_pos_compare_multi_io; + pADT8949_get_pos_compare_len m_pADT8949_get_pos_compare_len; + pADT8949_clear_pos_compare_point m_pADT8949_clear_pos_compare_point; + pADT8949_set_pos_compare_stop_axis m_pADT8949_set_pos_compare_stop_axis; + pADT8949_NeedHome_Ex m_pADT8949_NeedHome_Ex; + pADT8949_ResetHomeStatus_Ex m_pADT8949_ResetHomeStatus_Ex; + pADT8949_set_lock_position m_pADT8949_set_lock_position; + pADT8949_get_lock_status m_pADT8949_get_lock_status; + pADT8949_get_lock_position m_pADT8949_get_lock_position; + pADT8949_clr_lock_status m_pADT8949_clr_lock_status; + +}; + +extern HSI_Motion *g_pHSI_Motion; +#endif \ No newline at end of file diff --git a/PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/HSI_ADT_8949/Resource.h b/PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/HSI_ADT_8949/Resource.h new file mode 100644 index 0000000..6686b81 --- /dev/null +++ b/PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/HSI_ADT_8949/Resource.h @@ -0,0 +1,16 @@ +//{{NO_DEPENDENCIES}} +// Microsoft Visual C++ generated include file. +// Used by HSI_ADT_8949.rc +// + +// 新对象的下一组默认值 +// +#ifdef APSTUDIO_INVOKED +#ifndef APSTUDIO_READONLY_SYMBOLS + +#define _APS_NEXT_RESOURCE_VALUE 1000 +#define _APS_NEXT_CONTROL_VALUE 1000 +#define _APS_NEXT_SYMED_VALUE 1000 +#define _APS_NEXT_COMMAND_VALUE 32771 +#endif +#endif diff --git a/PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/HSI_ADT_8949/adt8949.h b/PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/HSI_ADT_8949/adt8949.h new file mode 100644 index 0000000..dcbe405 --- /dev/null +++ b/PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/HSI_ADT_8949/adt8949.h @@ -0,0 +1,1435 @@ +/* +********************************************************************************************************* +* ADT8949G1 +* The Motion Control PCI Card +* +* (c) Copyright 2002-2014, ADTECH, Shenzhen, +* All Rights Reserved +* +* +* By : ADTECH R&D +* Remark : + 1、ADT8949相对电脑而言属于慢速设备,任何查询API会对运动运算性能有一定影响,为减少控制卡的中断次数,尽量减少查询操作, + 如需连续查询,两次查询中间建议插入一条Sleep(1)语句。另外,例如要获取轴的驱动状态,使用get_status_all(…)进行合并 + 操作,一次性获取所有轴的状态,再按位值判断各驱动轴状态。 +********************************************************************************************************* +*/ + +#ifndef _ADT8949G1_H__ +#define _ADT8949G1_H__ + + + +typedef void (*FUNCTION)(); + +/*****************DLL报错*****************/ +#define ERR_FAIL 0xffffffff +#define ERR_SUCCESS 0x00000000 +#define ERR_OVERTIME 0x00010000 +#define ERR_CARDNOEXIST 0x00020000 +#define ERR_ARCMAP 0x00030000 //圆弧轴选位错误 +#define ERR_FIFOFULL 0x00040000 //缓冲满错误 +#define ERR_ARCNOEXIST 0x00050000 //圆弧不存在,圆弧的参数不合理也会导致不存在的报错号 +#define ERR_DSP_CRC_FAIL 0x00060000 //DSP程序校验不通过 +#define ERR_DSP_VERSION_FAIL 0x00070000 //固件程序版本和dll不匹配,或者固件异常,无法识别,需要送厂升级,或使用老版本dll +#define ERR_DATALEN_DISACCORD 0x00080000 //通信数据长度不一致,可能PCI接触不良或硬件异常 +#define ERR_DATATIMEOUT 0x00090000 //通信超时,可能PCI接触不良或硬件异常 +#define ERR_COLLECT_FAIL 0x000a0000 //采集失败,可能是上一个采集任务尚未完成。 +#define ERR_NURBSMAP 0x000b0000 //NURBS轴选位错误 +#define ERR_NURBSNOEXIST 0x000c0000 //NURBS不存在,NURBS的参数不合理也会导致不存在的报错号 +#define ERR_NURBSNOSPACE 0x000d0000 //NURBS插补时PC存储空间不足 +#define ERR_SERIES_FAIL 0x000f0000 //卡系列错误,调用的函数是该卡所属系列不包含的功能 + +/*****************终止错误*****************/ +#define _ERR_NO_ERR 0x0000 +#define _ERR_REDEF_AXIS 0x8001 +#define _ERR_MOTION 0x8002 +#define _ERR_MOTION2 0x8003 +#define _ERR_PTPMOTION 0x8004 +#define _ERR_INPMOTION 0x8005 +#define _ERR_CALCUERR1 0x8006 +#define _ERR_INPQAERR1 0x8007 +#define _ERR_MQERR 0x8008 +#define _ERR_TQ0ERR 0x8009 +#define _ERR_TQ1ERR 0x800a +#define _ERR_TQ2ERR 0x800b +#define _ERR_TQ3ERR 0x800c +#define _ERR_EMGN 0x800d + +/*****************警告错误*****************/ +#define _ERR_PARAM 0x0001 +#define _ERR_AXISSTOP 0x0002 +#define _ERR_MOTIONCONFLICT 0x0003 + +#define SUCCESSFUL ERR_SUCCESS +#define SUCCESS ERR_SUCCESS +#define ERROR_FLAG ERR_FAIL +#define FAIL ERR_FAIL + +#define INT8U unsigned char +#define INT16U unsigned short +#define INT32U unsigned int +#define INT8S char +#define INT16S short int +#define INT32S int + +#define MAXCARDNUMBER 10 //支持最大10张控制卡 +#define MAX_AXIS 4 //定义运动轴数 +#define PAI 3.1415927f //圆周率π的值 + +#define X_AXISREG 1 //X轴轴号 +#define Y_AXISREG 2 //Y轴轴号 +#define Z_AXISREG 3 //Z轴轴号 +#define A_AXISREG 4 //A轴轴号 +#define INPA_AXISREG 0x3f //插补轴轴号 + +/************************************************ +功能: 初始化运动控制卡 +返回值:返回值>0时,表示adt8949G1卡的数量。如果为3,则有效的卡号分别为0、1、2; + 返回值=0时,说明没有安装adt8949G1卡; + 返回值<0时,-1 表示没有安装端口驱动程序, + -2 表示PCI桥存在故障。 + -3 代表DSP程序下载错误 + -4 代表硬件异常或者DLL版本不匹配 + -5 创建互斥量失败 + -6 打开互斥量失败 + -7 其他异常原因 + -8 表示拨码开关设置出现重复,需手动调整拨码开关指向 +备注:初始化控制卡时,如果涉及到DSP固件程序更新, + 可能需要2-3分钟的时间进行固件程序升级,请耐心等待升级完成。 +************************************************/ +int _stdcall adt8949_initial(void); + +/************************************************ +功能: 关闭控制卡资源 +返回值:0成功,-1失败 +备注: 调用该函数后,控制卡会自动复位,清除所有运动指令,并对所有输出点清零; + 使用VB6.0编程,执行程序退出时若不调用该函数可能造成编译器异常退出 +************************************************/ +int _stdcall adt8949_close_card(void); + +/************************************************ +功能: 获取当前库(dll)版本号 +返回值:库(dll)版本的版本号,其中: + bit0~bit15: 程序库版本号 + bit16~bit31:程序库类别号 +备注: 举例:当获取到的库版本号为0,类别号为1,则当前库的版本号可显示为:1.0 + 8949G1存在驱动库版本号和固件版本号两种版本信息,同一固件版本可能存在不同的驱动库发行版本,所以一旦进行问题追溯需注意两个版本号的信息。 +************************************************/ +int _stdcall adt8949_get_lib_version(void); + +/************************************************ +功能: 获取当前固件版本 +参数: cardno 卡号 +返回值:返回值包含固件版本和卡ID两个信息,其中: + bit0~bit15: DSP版本 + bit16~bit23:FPGA版本 + bit24~bit26:FPGA系列号(1为增强型系列ADT-8949G1,2为轨迹型系列ADT-8949B1,3为通用型系列ADT-8949A1) + bit27~bit31:控制卡拨码ID号 +备注: 举例:当获取到的FPGA系列号的系列号为1,FPGA版本为7,DSP版本为25,则固件版本可显示为:1.7.25 + 8949G1存在驱动库版本号和固件版本号两种版本信息,同一固件版本可能存在不同的驱动库发行版本,所以一旦进行问题追溯需注意两个版本号的信息。 +************************************************/ +int _stdcall adt8949_get_firmware_ver(int cardno); + +/************************************************ +功能: 获取当前可用卡的拨码开关号 +参数: + num 可用卡数量指针 + index 拨码开关号 +返回值 0:正确 非0:错误 +备注: 初始化成功后便可调用该函数获得拨码开关号; + 按照靠近CPU的顺序,拨码开关号依次排列,例如index[0]代表最靠近CPU的拨码开关号,index[1]次之,… +************************************************/ +int _stdcall adt8949_get_card_index(int *num,int index[10]); + +/**************************************************** +功能:获取系统最近一次错误号(待完善) +参数: + cardno 卡号 + ErrNum 系统错误号指针 +备注: 可定时获取系统错误号,查看控制卡运行情况 +******************************************************/ +int _stdcall adt8949_get_syserr(int cardno,int *ErrNum); + +/******************************************************** +功能:读取通信错误次数 +参数: + cardno 卡号 + type 0: 控制卡端 1:接线板端 +ErrCount 通信错误次数指针 +返回值 0:正确 非0:错误 +备注: 控制卡跟接线板在断电的情况才会把错误次数清零; + 通信错误次数不为0并不代表控制卡输出错误,校验不通过时通信数据会自动重发。 +*********************************************************/ +int _stdcall adt8949_get_communication_err(int cardno,int type,int *ErrCount); + +/**************************************************** +功能:复位控制卡 +参数: + cardno 卡号 +返回值 0:正确 -1:错误 +备注: 调用该函数后,控制会清除所有缓存事件及运动指令数据; + 但已经设置过的限位、加速度、齿轮比等运动参数不会清除,不需重新设置;若之前设置有同步轴,轴的同步关系也不会清除; + 当机器碰到外部急停、正负限位、或非正常停止,或者一组数据量较大的缓存插补前,建议调用一次复位控制卡函数。 +******************************************************/ +int _stdcall adt8949_reset_card(int cardno); + +/************************************************ +功能: 设定系统总速度倍率 +参数: + cardno 卡号 + rate 倍率(0~2.0) +返回值: 0成功,-1失败 +备注:调用该函数后,总速度倍率会立即刷新,所以如果变化率过大,会导致速度产生阶跃,理想的方式是定时的逐步设定, + 产生一个加减速的效果;当设定倍率值为0时,相当于运动暂停的效果。 +***********************************************/ +int _stdcall adt8949_set_rate1(int cardno,float rate); + +/*************************************************************** +功能: 设定系统各轴速度倍率 +参数: +cardno 卡号 +axis 单轴轴号:(1-4),插补轴轴号:INPA_AXISREG +rate 倍率(0~2.0) +返回值: 0成功,-1失败 +备注:调用该函数后,轴的速度倍率会立即刷新,所以如果变化率过大,会导致速度产生阶跃,理想的方式是定时的逐步设定, +产生一个加减速的效果。 +****************************************************************/ +int _stdcall adt8949_set_rate2(int cardno,int axis,float rate); + +/***************************************************************** +功能: 设定系统各轴每毫米所需脉冲 +参数: +cardno 卡号 +axis 轴号(1-4) +gear 每毫米脉冲数(1-10000),即机器运动1mm,控制卡需发送的脉冲个数 +返回值: 0成功,-1失败 +备注:每毫米脉冲数可以为浮点数,设置一遍即生效,无需重复设置 +******************************************************************/ +int _stdcall adt8949_set_gear(int cardno, int axis,float gear); + +/********************************************************** +功能: 轴缓冲位置和逻辑位置同步 +参数: + cardno 卡号 + axismap 轴映射位,bit0表示1号轴,bit1表示2号轴,bit2表示3号轴,bit3表示4号轴 +返回值: 0成功,-1 失败 +备注:归零完、对刀完毕或一组插补运动前设置,有利于提高精确度。机器运动过程中切勿设置。 +**********************************************************/ +int _stdcall adt8949_set_syncpos(int cardno, int axismap); + + +/************************************************* +功能:设置输出脉冲的工作方式 +参数: + cardno 卡号 + axis 轴号(1-4) + value 0:CCW脉冲+CW脉冲方式 1:脉冲+方向方式 2:90°位相差2相脉冲(模拟编码器A+B相) + logic 0: 正逻辑脉冲 1:负逻辑脉冲 + dir_logic 0:方向输出信号正逻辑 1:方向输出信号负逻辑 +返回值 0:正确 -1:错误 +默认模式:脉冲+方向,正逻辑脉冲,方向输出信号正逻辑 +**************************************************/ +int _stdcall adt8949_set_pulse_mode(int cardno,int axis,int value,int logic,int dir_logic); + + +/************************************************* +功能:设置实际计数器(编码器输入)的工作方式 +参数: + cardno 卡号 + axis 轴号(1-4) + value 0:A/B脉冲输入 1:上/下(PPIN/PMIN)脉冲输入 + dir_logic 计数方向,0:输入信号方向正逻辑 1:输入信号方向负逻辑 +返回值 0:正确 -1:错误 +默认模式:A/B相脉冲输入,方向正逻辑 +备注:设置为A/B相脉冲输入方式时,脉冲计数值为4倍频后的数据 +**************************************************/ +int _stdcall adt8949_set_actual_count_mode(int cardno, int axis, int value,int dir_logic); + + +/**************************************************** +功能:设置正负方向限位输入nLMT信号的模式 +参数: + cardno 卡号 + axis 轴号(1-4) + v1 0:正限位无效 1:正限位有效 + v2 0:负限位无效 1:负限位有效 + logic 0:低电平有效 1:高电平有效 +返回值 0:正确 非0:错误 +默认模式为:正限位有效,负限位有效,低电平有效 +*****************************************************/ +int _stdcall adt8949_set_limit_mode(int cardno,int axis,int v1,int v2,int logic); + +/**************************************************** +功能:设置限位触发时锁保护 +参数: + cardno 卡号 + EnableFlag 0:无效 1:有效 +返回值 0:正确 非0:错误 +默认模式为: 限位触发时锁保护无效 +备注: 启用该功能后,机器运行过程中若有限位信号触发,则控制卡进入自锁模式, + 不再接受任何运动指令,除非复位卡函数 +*****************************************************/ +int _stdcall adt8949_set_limit_lock(int cardno,int EnableFlag); + +/**************************************************** +功能:设置stop0信号的有效/无效和逻辑电平 +参数: + cardno 卡号 + axis 轴号(1-4) + v 0:无效 1:有效 + logic 0:低电平有效 1:高电平有效 + admode 0:减速停止 1:立即停止 +返回值 0:正确 -1:错误 +默认模式为:无效 +备注:stop0信号即为机械原点,对应的XYZA四个轴分别是 XHM/IN12, YHM/IN13, ZHM/IN14, AHM/IN15 +*****************************************************/ +int _stdcall adt8949_set_stop0_mode(int cardno,int axis,int v,int logic,int admode); + +/**************************************************** +功能:设置stop1信号的有效/无效和逻辑电平 +参数: + cardno 卡号 + axis 轴号(1-4) + v 0:无效 1:有效 + logic 0:低电平有效 1:高电平有效 + admode 0:减速停止 1:立即停止 +返回值 0:正确 -1:错误 +默认模式为:无效 +备注:stop1信号即为伺服原点或Z相信号,对应的XYZA四个轴分别是 IN44, IN45, IN46, IN47 +******************************************************/ +int _stdcall adt8949_set_stop1_mode(int cardno,int axis,int v,int logic,int admode); + + +/**************************************************** +功能:设置软件限位模式 +参数: + cardno 卡号 + axis 轴号(1-4) + EnableFlag 0:无效 1:有效 + Ppos 正方向触发位置,单位为mm + Npos 负方向触发位置,单位为mm + admode 0:减速停止 1:立即停止 +返回值 0:正确 -1:错误 +默认模式为:软件限位无效 +*****************************************************/ +int _stdcall adt8949_set_softlimit_mode(int cardno,int axis,int EnableFlag,float Ppos,float Npos,int admode); + +/**************************************************** +功能:设定输入信号模式(含正负限位、原点) +参数: + cardno 卡号 + axis 轴号(1-4) + mode 模式 0:正限位 1:负限位 2:原点(或编码器Z相信号) + port 快速输入端口号(0-18, 36-47), 255或-1:设置对应模式无效 + 另外,四个驱动轴的编码器信号(A相、B相、Z相)对应的端口为: + IN36~IN39: A1...A4 + IN40~IN43: B1...B4 + IN44~IN47: Z1...Z4 + logic 有效电平 0:低电平有效 1:高电平有效 + admode 限位有效时是否采用减速,0:减速停止;1:立即停止 +返回值 0:正确 -1:错误 +备注:为方便机床限位、原点、伺服Z相信号的设置,已包装函数adt8949_set_limit_mode(…)、adt8949_set_stop0_mode(…)、adt8949_set_stop1_mode(…) + 默认模式为:正限位低电平有效,负限位低电平有效,原点(或编码器Z相信号)信号无效; + 正负限位暂仅支持立即停止模式; + 归零时用到的原点或编码器Z相信号模式,不能同时启用,可以先设置回原点,再进行编码器Z相归零 +*****************************************************/ +int _stdcall adt8949_set_input_mode(int cardno,int axis,int mode,int port,int logic,int admode); + +/**************************************************** +功能:设置紧急停止模式 +参数: + cardno 卡号 + port 快速输入端口号(0-18, 36-47), 255或-1:设置对应模式无效 + logic 有效电平 0:低电平有效 1:高电平有效 +返回值 0:正确 -1:错误 +备注:默认紧急停止无效。外部急停一旦生效,需调用adt8949_reset_card(…)复位控制卡,否则即便急停有效电平已经解除, + 调用任何运动指令都不会生效。 +*****************************************************/ +int _stdcall adt8949_set_emergency_stop_mode(int cardno,int port,int logic); + + +/************************************************* +功能:设置位置锁存功能 +参数: + cardno 卡号 + axis 轴号(1-4),其中各轴指定对应端口为: + 1轴:IN12 + 2轴:IN13 + 3轴:IN14 + 4轴:IN15 + logic 有效电平,单沿变时:0表示由高到低,1表示由低到高 + 双沿变时:0表示首次沿变由高到低,第二次沿变由低到高;1表示首次沿变由低到高,第二次沿变由高到低 + type 1表示单沿变锁存,2表示双沿变锁存 +返回值 0:正确 -1:错误 +默认模式:锁存功能无效 +备注:位置锁存功能触发后,会同时记录沿变信号发生时的逻辑位置与实际位置。 + 该功能启用后,限当次使用,若需再次捕捉沿变发生时的位置,需确保已清除上一次锁存状态,并再次启用位置锁存功能。 +*****************************************************/ +int _stdcall adt8949_set_lock_position(int cardno,int axis,int logic,int type); + + +/************************************************* +功能:获取位置锁存状态 +参数: + cardno 卡号 + axis 轴号(1-4),其中各轴指定对应端口为: + 1轴:IN12 + 2轴:IN13 + 3轴:IN14 + 4轴:IN15 + type 1表示需获取首次沿变时位置锁存状态,2表示需获取第二次沿变时位置锁存状态(针对双沿变位置锁存) + v 0:锁存动作未发生,1:锁存动作已发生 +返回值 0:正确 -1:错误 +*****************************************************/ +int _stdcall adt8949_get_lock_status(int cardno,int axis,int type,int *v); + +/************************************************* +功能:获取位置锁存的位置 +参数: + cardno 卡号 + axis 轴号(1-4),其中各轴指定对应端口为: + 1轴:IN12 + 2轴:IN13 + 3轴:IN14 + 4轴:IN15 + type 0x10:表示需获取首次沿变发生时的逻辑位置 + 0x11:表示需获取首次沿变发生时的实际位置 + 0x20:表示需获取第二次沿变发生时的逻辑位置(针对双沿变位置锁存) + 0x21:表示需获取第二次沿变发生时的实际位置(针对双沿变位置锁存) + pos 需获取位置的指针 +返回值 0:正确 -1:错误 +*****************************************************/ +int _stdcall adt8949_get_lock_position(int cardno,int axis,int type,long *pos); + + +/************************************************* +功能:清除锁存状态 +参数: + cardno 卡号 + axis 轴号(1-4),其中各轴指定对应端口为: + 1轴:IN12 + 2轴:IN13 + 3轴:IN14 + 4轴:IN15 +返回值 0:正确 -1:错误 +*****************************************************/ +int _stdcall adt8949_clr_lock_status(int cardno,int axis); + + +/************************************************* +功能:设置扩展位置锁存功能 +参数: + cardno 卡号 + axis 轴号(1-4) + port 端口(17-18) + logic 有效电平,单沿变时:0表示由高到低,1表示由低到高 + 双沿变时:0表示首次沿变由高到低,第二次沿变由低到高;1表示首次沿变由低到高,第二次沿变由高到低 + type 1表示单沿变锁存,2表示双沿变锁存 +返回值 0:正确 -1:错误 +默认模式:锁存功能无效 +备注:位置锁存功能触发后,会同时记录沿变信号发生时的逻辑位置与实际位置。 + 该功能启用后,限当次使用,若需再次捕捉沿变发生时的位置,需确保已清除上一次锁存状态,并再次启用位置锁存功能。 +*****************************************************/ +int _stdcall adt8949_set_EXlock_position(int cardno,int axis,int port,int logic,int type); + + +/************************************************* +功能:获取扩展位置锁存状态 +参数: + cardno 卡号 + port 端口(17-18) + type 1表示需获取首次沿变时位置锁存状态,2表示需获取第二次沿变时位置锁存状态(针对双沿变位置锁存) + v 0:锁存动作未发生,1:锁存动作已发生 +返回值 0:正确 -1:错误 +*****************************************************/ +int _stdcall adt8949_get_EXlock_status(int cardno,int port,int type,int *v); + + +/************************************************* +功能:获取扩展位置锁存的位置 +参数: + cardno 卡号 + port 端口(17-18) + type 0x10:表示需获取首次沿变发生时的逻辑位置 + 0x11:表示需获取首次沿变发生时的实际位置 + 0x20:表示需获取第二次沿变发生时的逻辑位置(针对双沿变位置锁存) + 0x21:表示需获取第二次沿变发生时的实际位置(针对双沿变位置锁存) + pos 需获取位置的指针 +返回值 0:正确 -1:错误 +*****************************************************/ +int _stdcall adt8949_get_EXlock_position(int cardno,int port,int type,long *pos); + + +/************************************************* +功能:清除扩展锁存状态 +参数: + cardno 卡号 + port 端口(17-18) +返回值 0:正确 -1:错误 +*****************************************************/ +int _stdcall adt8949_clr_EXlock_status(int cardno,int port); + + +/**************************************************** +功能:设定输入信号滤波等级 +参数: + cardno 卡号 + gp 输入信号类别 + 0:限位、原点、普通输入点 + 1:编码器信号(A相,B相,Z相) + grade 范围:0-15。0表示不滤波。若设为n,则滤波时间为:2的(n-1)次方us(微秒) +返回值 0:正确 -1:错误 +备注:默认模式为所有输入信号不滤波。该函数是否有效需查看固件版本。 +*****************************************************/ +int _stdcall adt8949_set_input_filter(int cardno,int gp,int grade); + + + +//----------------------------------------------------// +// 驱动状态检查函数 // +//----------------------------------------------------// + +/***************************************************** +功能:获取各轴的驱动状态 +参数: + cardno 卡号 + axis 轴号(1-4) + v 驱动状态指针 + 0:驱动结束 1:正在驱动 +返回值 0:正确 -1:错误 +备注:该函数属于查询API,如需连续查新,两次查询中间建议插入一条Sleep(1)语句。 +******************************************************/ +int _stdcall adt8949_get_status(int cardno,int axis,int *v); + +/***************************************************** +功能:获取所有轴的驱动状态 +参数: + cardno 卡号 + v 驱动状态指针,bit0~bit3代表第一轴~第四轴,bit15代表插补轴 + 0:驱动结束 1:正在驱动 +返回值 0:正确 -1:错误 +备注:该函数属于查询API,如需连续查新,两次查询中间建议插入一条Sleep(1)语句。 +******************************************************/ +int _stdcall adt8949_get_status_all(int cardno,int *v); + +/***************************************************** +功能:获取插补的驱动状态 +参数: + cardno 卡号 + v 插补状态指针 + 0:插补结束 1:正在插补 +返回值 0:正确 -1:错误 +备注:该函数属于查询API,如需连续查新,两次查询中间建议插入一条Sleep(1)语句。 +*****************************************************/ +int _stdcall adt8949_get_inp_status(int cardno,int *v); + +/***************************************************** +功能:获取各轴的停止信息 +参数: + cardno 卡号 + axis 轴号(1-4) + value 停止信息指针(0:无错误停止;非0:有限位、原点或编码器Z相信号触发停止): + bit0==1 代表 正限位触发停止 + bit1==1 代表 负限位触发停止 + bit2==1 代表 原点信号触发停止 + bit3==1 代表 编码器Z相信号触发停止 + bit4==1 代表 外部急停信号触发停止 + bit5==1 代表 软件正限位触发停止 + bit6==1 代表 软件负限位触发停止 +返回值 0:正确 -1:错误 +备注:停止信息也可能组合出现,比如bit0与bit2都为1时代表正限位和原点信号都触发,导致轴停止 + 如需连续查询,两次查询中间建议插入一条Sleep(1)语句,否则会影响控制卡的运行效率。 +*****************************************************/ +int _stdcall adt8949_get_stopdata(int cardno,int axis,int *value); + +//----------------------------------------------------// +// 运动参数设定函数 // +//----------------------------------------------------// +/**************************************************** +功能:加加速度jcc,加速度acc,减速度dec设定 +参数: + cardno 卡号 + axis 轴号(1-4,插补轴轴号为:INPA_AXISREG) + jcc S加减速模式设置加加速度等级,范围(0-10),默认值为0,值越小S加减速效果越明显 + add 加速度/减速度 范围(1-100000),mm/sec^2 + +返回值 0:正确 -1:错误 +备注:8949G1支持不对称加减速,默认情况下设定加速度时,会将减速度等同于加速度,所以要设定减速度, + 则set_dec一定要放在set_acc后面,否则,减速度值会被加速度覆盖掉。 +*****************************************************/ +int _stdcall adt8949_set_jcc(int cardno, int axis,unsigned short jcc); +int _stdcall adt8949_set_acc(int cardno, int axis,float add); +int _stdcall adt8949_set_dec(int cardno, int axis,float add); + +/**************************************************** +功能:初始(结束)速度设定 +参数: + cardno 卡号 + axis 轴号(1-4,插补轴轴号为:INPA_AXISREG) + speed 范围(0-100000),单位: mm/sec +返回值 0:正确 -1:错误 +备注: 默认情况下设定起始速度时,会将结束速度等同于起始速度,所以要设定结束速度, + 则set_endv一定要放在set_startv后面,否则,结束速度值会被起始速度覆盖掉。 + 设置一定的初始速度,例如2mm/sec, 可使得机床较快启动 +******************************************************/ +int _stdcall adt8949_set_startv(int cardno, int axis,float speed); +int _stdcall adt8949_set_endv(int cardno, int axis,float speed); + + +/**************************************************** +功能:加减速模式设定 +参数: + cardno 卡号 + axis 轴号(1-4,插补轴轴号为:INPA_AXISREG) + mode 范围(0-3) + 0 S形加减速模式 + 1 梯形加减速模式 + 2 指数加减速 + 3 三角函数加减速模式 + +返回值 0:正确 -1:错误 +备注: 默认是梯形加减速模式,点位运动和单条直线插补可以用其中任意的模式,单条圆弧插补可以使用模式1和模式3,样条插补使用模式1。 + 插补情况下使用非梯形加减速模式须确保预处理缓冲段数为零。 +******************************************************/ +int _stdcall adt8949_set_admode(int cardno, int axis,unsigned short mode); + +/**************************************************** +功能:驱动速度设定 +参数: + cardno 卡号 + axis 轴号(1-4,插补轴轴号为:INPA_AXISREG ) + speed 范围(0.001-100000 mm/sec) +返回值 0:正确 -1:错误 +******************************************************/ +int _stdcall adt8949_set_speed(int cardno, int axis,float speed); + + +/**************************************************** +功能:设置运动路径转接处加速度约束 +参数: + cardno 卡号 + axis 轴号(1-4) + add 范围(100-100000),默认值:8000mm/sec^2 +返回值 0:正确 -1:错误 +备注:使用缓存插补时,设定轴的加速度约束,在预处理中生效,限制各个轴在线段转接处的最大速度变化。 + 在调试过程中,只要不影响插补精度,可逐渐增大约束值,有利于降低插补运动时的机器抖动。 +******************************************************/ +int _stdcall adt8949_set_acc_constraint(int cardno, int axis,float add); + +/**************************************************** +功能:设置运动路径转接处速度约束 +参数: +cardno 卡号 +axis 轴号(1-4) +speed 范围(0.01-100000 mm/sec),默认值:1000mm/sec +返回值 0:正确 -1:错误 +备注:一般情况不需要调用该函数。 +特殊工艺下,用来设定缓存插补中两线段转接处轴的最大速度,在预处理中生效,限制各个轴在线段转接处的最大速度。 +******************************************************/ +int _stdcall adt8949_set_speed_constraint(int cardno, int axis,float speed); + + +/**************************************************** +功能:设定圆弧速度钳制 +参数: + cardno 卡号 + radius 半径系数 + speed 速度系数,范围(0.01-100000 mm/sec) +默认值 半径系数=10mm,速度系数=100mm/sec +返回值 0:正确 -1:错误 +备注 该函数会在平面圆弧或空间圆弧插补中生效,若调用了该条函数,若实际半径小于半径系数,越小则圆弧速度被限制的越小; + 若实际半径大于半径系数,越大则圆弧速度受到的约束放宽。当实际径与半径系数相等,则圆弧的最大速度与速度系数相等。 +******************************************************/ +int _stdcall adt8949_set_arc_speed_clamp(int cardno, float radius,float speed); + +/**************************************************** +功能:逻辑位置设定 +参数: + cardno 卡号 + axis 轴号(1-4) + pos 范围(-2147483648~+2147483647) +返回值 0:正确 -1:错误 +*****************************************************/ +int _stdcall adt8949_set_command_pos(int cardno, int axis,long pos); + +/**************************************************** +功能:实际位置设定 +参数: + cardno 卡号 + axis 轴号(1-4) + pos 范围(-2147483648~+2147483647) +返回值 0:正确 -1:错误 +******************************************************/ +int _stdcall adt8949_set_actual_pos(int cardno, int axis,long pos); + +//----------------------------------------------------// +// 运动参数检查函数 // +//----------------------------------------------------// + +/***************************************************** +功能:获取各轴的逻辑位置 +参数: + cardno 卡号 + axis 轴号(1-4) + pos 逻辑位置的指针 +返回值 0:正确 -1:错误 +*******************************************************/ +int _stdcall adt8949_get_command_pos(int cardno,int axis,long *pos); + +/***************************************************** +功能:获取各轴的实际位置 +参数: + cardno 卡号 + axis 轴号(1-4) + pos 实际位置的指针 +返回值 0:正确 -1:错误 +*****************************************************/ +int _stdcall adt8949_get_actual_pos(int cardno,int axis,long *pos); + +/***************************************************** +功能:获取各轴的当前驱动速度 +参数: + cardno 卡号 + axis 轴号(1-4,插补轴轴号为:INPA_AXISREG ) + speed 当前驱动速度的指针 +返回值 0:正确 -1:错误 +*****************************************************/ +int _stdcall adt8949_get_speed(int cardno,int axis,float *speed); + +/***************************************************** +功能:获取当前插补运动的索引信息 +参数: + cardno 卡号 + index 索引信息(0-65535)的指针 +返回值 0:正确 -1:错误 +备注:此函数用于G代码加工时的同步显示使用,不能用于运动轨迹的精确定位。 +*****************************************************/ +int _stdcall adt8949_get_inp_index(int cardno,unsigned short *index); + + +/***************************************************************** +功能: 获取系统各轴每毫米所需脉冲 +参数: +cardno 卡号 +axis 轴号(1-4) +gear 每毫米脉冲数(1-10000),即机器运动1mm,控制卡需发送的脉冲个数 +返回值: 0成功,-1失败 +******************************************************************/ +int _stdcall adt8949_get_gear(int cardno, int axis,float *gear); + +//----------------------------------------------------// +// 驱动函数 // +//----------------------------------------------------// + +/**************************************************** +功能:相对坐标定量驱动 +参数: + cardno 卡号 + axis 轴号(1-4) + pos 单位为mm,(+/- 9999999.999) + >0:正方向驱动 <0:负方向驱动 +返回值 0:正确 -1:错误 +*****************************************************/ +int _stdcall adt8949_pmove(int cardno,int axis,float pos); + +/**************************************************** +功能:绝对坐标定量驱动 +参数: + cardno 卡号 + axis 轴号(1-4) + pos 单位为mm,(+/- 9999999.999) + >0:正方向驱动 <0:负方向驱动 +返回值 0:正确 -1:错误 +*****************************************************/ +int _stdcall adt8949_abs_pmove(int cardno,int axis,float pos); + +/******************************************************************** +功能:单轴连续运动 +参数: + cardno 卡号 + axis 轴号(1-4) + dir 0:正向 ;1:负向 + +返回值: 0:正确 -1:错误 +注意:写入驱动命令前,需提前设定好速度参数. +********************************************************************/ +int _stdcall adt8949_continue_move(int cardno,int axis,int dir); + +/***************************************************** +功能:驱动减速停止 +参数: + cardno 卡号 + axis 轴号(1-4) +返回值 0:正确 -1:错误 +备注:调用该函数后,机器属于非正常停止,建议当轴停止后调用一条adt8949_reset_card(…)函数 +*******************************************************/ +int _stdcall adt8949_dec_stop(int cardno,int axis); + +/******************************************************* +功能:驱动立即停止 +参数: + cardno 卡号 + axis 轴号(1-4) +返回值 0:正确 -1:错误 +备注:调用该函数后,机器属于非正常停止,建议当轴停止后调用一条adt8949_reset_card(…)函数 +*********************************************************/ +int _stdcall adt8949_sudden_stop(int cardno,int axis); + +/************************************************************************************************ +功能:启用速度前瞻(速度预处理) + +参数: + cardno 卡号 + EnableFlag 0:无效 1:有效 + + 返回值: 0:正确 -1:错误 +************************************************************************************************/ +int _stdcall adt8949_set_speed_pretreat_mode(int cardno,int EnableFlag); + + +/***************************************************** +功能:设置同步轴 +参数: + cardno 卡号 + slaveaxis 从轴(跟随主轴的),轴号(1-4) + masteraxis 主轴(被跟随的),轴号(0-4),0则取消跟随 +返回值 0:正确 -1:错误 +*******************************************************/ +int _stdcall adt8949_set_follow_axis(int cardno,int slaveaxis,int masteraxis); + +/********************************************************* +功能:查询插补缓存区余量 +参数: + cardno 卡号 + len 要获取的缓冲长度变量 +返回值 0:正确 非0:错误 +备注:插补缓冲区段数共有10000段。插补数据与缓存事件存放在控制卡中不同的区域。 + 一段圆弧占用4段缓存空间,一个整圆占用8段缓存空间。建议当缓存余量大于8段时才下发运动数据。 + 该函数属于查询API,如需连续查新,两次查询中间建议插入一条Sleep(1)语句。 +*********************************************************/ +int _stdcall adt8949_get_fifo_len(int cardno,int *len); + +/********************************************************* +功能:四轴相对坐标直线插补 +参数: + cardno 卡号 + index 索引信息,用于标识本次运动信息,一般设置为0即可 + pos1,pos2,pos3,pos4代表XYZA四轴移动的相对距离,单位为mm +返回值 0:正确 -1:错误 +注意:若设置了同步轴,则从轴的pos参数要设置为0,否则函数调用失败。 +*********************************************************/ +int _stdcall adt8949_inp_move4(int cardno,unsigned short index,float pos1,float pos2,float pos3,float pos4); + +/********************************************************* +功能:四轴绝对坐标直线插补 +参数: + cardno 卡号 + index 索引信息,用于标识本次运动信息,一般设置为0即可 + axismap 轴映射位,bit0表示1号轴,bit1表示2号轴,…,不被标志的轴,目标位置不会生效。 + pos1,pos2,pos3,pos4代表XYZA四轴要移动到的坐标值,单位为mm +返回值 0:正确 -1:错误 +注意:若设置了同步轴,则从轴的pos参数要设置为0,axismap值也不用考虑从轴位 +*********************************************************/ +int _stdcall adt8949_inp_abs_move4(int cardno,unsigned short index,unsigned char axismap,float pos1,float pos2,float pos3,float pos4); + +/********************************************************* +功能:四轴相对坐标直线插补(指定运动时间) +参数: + cardno 卡号 + index 索引信息,用于标识本次运动信息,一般设置为0即可 + pos1,pos2,pos3,pos4代表XYZA四轴移动的相对距离,单位为mm + time 该段直线运动所需时间,单位ms(毫秒),值须大于零 +返回值 0:正确 -1:错误 +注意:直线在指定时间内匀速运动,调用此函数前要确保预处理缓冲段数为零,否则调用失败; + 若设置了同步轴,则从轴的pos参数要设置为0,否则函数调用失败。 +*********************************************************/ +int _stdcall adt8949_time_move4(int cardno,unsigned short index,float pos1,float pos2,float pos3,float pos4,float time); + +/********************************************************* +功能:四轴绝对坐标直线插补(指定运动时间) +参数: + cardno 卡号 + index 索引信息,用于标识本次运动信息,一般设置为0即可 + axismap 轴映射位,bit0表示1号轴,bit1表示2号轴,…,不被标志的轴,目标位置不会生效。 + pos1,pos2,pos3,pos4代表XYZA四轴要移动到的坐标值,单位为mm + time 该段直线运动所需时间(非累积时间),单位ms(毫秒),值须大于零 +返回值 0:正确 -1:错误 +注意:直线在指定时间内匀速运动,调用此函数前要确保预处理缓冲段数为零,否则调用失败; + 若设置了同步轴,则从轴的pos参数要设置为0,axismap值也不用考虑从轴位。 +*********************************************************/ +int _stdcall adt8949_time_abs_move4(int cardno,unsigned short index,unsigned char axismap,float pos1,float pos2,float pos3,float pos4,float time); + +/********************************************************* +功能:两轴圆弧插补 +参数: + cardno 卡号 + index 索引信息,用于标识本次运动信息,一般设置为0即可 + axismap 轴选映射标志,bit0表示1号轴,bit1表示2号轴,…,可标志空间任意的两个轴做平面圆弧插补 + pos 圆弧的目标点坐标(相对于当前点),单位为mm + Center 圆弧的中心点坐标(相对于当前点),单位为mm + dir 圆弧方向(1为顺时针 0为逆时针) +返回值 0:正确 非0:错误 +备注:一段圆弧占用4段缓存空间,一个整圆占用8段缓存空间 + 如果调用该函数画一个完整的的平面圆,则需设置一定的预处理缓冲段数,否则走到半圆时会出现加减速过程。 +*********************************************************/ +int _stdcall adt8949_inp_arc2(int cardno,unsigned short index,unsigned char arcmap,float pos[4],float Center[4],int dir); + +/********************************************************* +功能:两轴绝对坐标圆弧插补 +参数: + cardno 卡号 + index 索引信息,用于标识本次运动信息,一般设置为0即可 + axismap 轴选映射标志,bit0表示1号轴,bit1表示2号轴,…,可标志空间任意的两个轴做平面圆弧插补 + pos 圆弧的目标点绝对坐标,单位为mm + Center 圆弧的中心点绝对坐标,单位为mm + dir 圆弧方向(1为顺时针 0为逆时针) +返回值 0:正确 非0:错误 +备注:一段圆弧占用4段缓存空间,一个整圆占用8段缓存空间 + 如果调用该函数画一个完整的的平面圆,则需设置一定的预处理缓冲段数,否则走到半圆时会出现加减速过程。 +*********************************************************/ +int _stdcall adt8949_inp_abs_arc2(int cardno,unsigned short index,unsigned char arcmap,float pos[4],float Center[4],int dir); + +/********************************************************* +功能:基于平面圆弧的相对坐标螺旋线插补 +参数: + cardno 卡号 + index 索引信息,用于标识本次运动信息,一般设置为0即可 + AxisList 轴号列表(1-4),前两轴为参与平面圆弧插补的轴号,后两轴为随动轴,轴列表后两个都为0则仅做平面圆弧插补 + pos pos[0]、pos[1]是圆弧的目标点坐标,pos[2]、pos[3]是随动轴的目标点坐标(相对于当前点),单位为mm + center 圆弧的中心点坐标(相对于当前点),单位为mm + dir 圆弧方向(1为顺时针 0为逆时针) +返回值 0:正确 非0:错误 +备注:一段圆弧占用4段缓存空间,一个整圆占用8段缓存空间 + 如果调用该函数作闭合圆螺旋线插补,则需设置一定的预处理缓冲段数,否则走到半圆时会出现加减速过程。 +*********************************************************/ +int _stdcall adt8949_inp_helix2(int cardno,unsigned short index,int AxisList[4],float pos[4],float center[2],int dir); + +/********************************************************* +功能:基于平面圆弧的绝对坐标螺旋线插补 +参数: + cardno 卡号 + index 索引信息,用于标识本次运动信息,一般设置为0即可 + AxisList 轴号列表(1-4),前两轴为参与平面圆弧插补的轴号,后两轴为随动轴,轴列表后两个都为0则仅做平面圆弧插补 + pos pos[0]、pos[1]是圆弧的目标点绝对坐标,pos[2]、pos[3]是随动轴的目标点绝对坐标,单位为mm + center 圆弧的中心点绝对坐标,单位为mm + dir 圆弧方向(1为顺时针 0为逆时针) +返回值 0:正确 非0:错误 +备注:一段圆弧占用4段缓存空间,一个整圆占用8段缓存空间 + 如果调用该函数作闭合圆螺旋线插补,则需设置一定的预处理缓冲段数,否则走到半圆时会出现加减速过程。 +*********************************************************/ +int _stdcall adt8949_inp_abs_helix2(int cardno,unsigned short index,int AxisList[4],float pos[4],float center[2],int dir); + +/********************************************************* +功能:三轴圆弧插补 +参数: + cardno 卡号 + index 索引信息,用于标识本次运动信息,一般设置为0即可 + arcmap 轴选映射标志,最多只能标志三个位为1,也就是最多支持3轴来做圆弧插补 + pos2 圆弧的第二点坐标(相对于当前点),单位为mm + pos3 圆弧的第三点坐标(相对于当前点),单位为mm + arc_flag 0: 圆弧 1:整圆 +返回值 0:正确 非0:错误 +备注:一段空间圆弧占用4段缓存空间 +*********************************************************/ +int _stdcall adt8949_inp_arc3(int cardno,unsigned short index,unsigned char arcmap,float pos2[4],float pos3[4],int arc_flag); + +/********************************************************* +功能:三轴绝对坐标圆弧插补 +参数: + cardno 卡号 + index 索引信息,用于标识本次运动信息,一般设置为0即可 + arcmap 轴选映射标志,最多只能标志三个位为1,也就是最多支持3轴来做圆弧插补 + pos2 圆弧的第二点绝对坐标,单位为mm + pos3 圆弧的第三点绝对坐标,单位为mm + arc_flag 0: 圆弧 1:整圆 +返回值 0:正确 非0:错误 +备注:一段空间圆弧占用4段缓存空间 +*********************************************************/ +int _stdcall adt8949_inp_abs_arc3(int cardno,unsigned short index,unsigned char arcmap,float pos2[4],float pos3[4],int arc_flag); + +/********************************************************* +功能:获取两轴圆弧长度 +参数: + axismap 轴选映射标志,bit0表示1号轴,bit1表示2号轴,…,可标志空间任意的两个轴做平面圆弧插补 + pos 圆弧的目标点坐标(相对于当前点),单位为mm + Center 圆弧的中心点坐标(相对于当前点),单位为mm + dir 圆弧方向(1为顺时针 0为逆时针) + length 两轴圆弧长度指针 +返回值 0:正确 非0:错误 +*********************************************************/ +int _stdcall adt8949_get_arc2_length(unsigned char arcmap,float pos[4],float Center[4],int dir,float *length); + + +/********************************************************* +功能:获取三轴圆弧长度 +参数: + arcmap 轴选映射标志,最多只能标志三个位为1,也就是最多支持3轴来做圆弧插补 + pos2 圆弧的第二点坐标(相对于当前点),单位为mm + pos3 圆弧的第三点坐标(相对于当前点),单位为mm + length 三轴圆弧长度指针 + arc_flag 0: 圆弧 1:整圆 +返回值 0:正确 非0:错误 +*********************************************************/ +int _stdcall adt8949_get_arc3_length(unsigned char arcmap,float pos2[4],float pos3[4],float *length,int arc_flag); + + +/********************************************************* +功能:NURBS插补 +参数: + cardno 卡号 + index 索引信息,用于标识本次运动信息,一般设置为0即可 + axismap 轴选映射标志,最多只能标志三个位为1,也就是最多支持3轴来做NURBS插补 + conp 样条的控制点(相对于当前点,第一个控制点的坐标需为0,否则返回错误),单位为mm + weight 样条的控制点对应的权值。AutoCAD各控制点的权值默认为-1 + node 样条的节点值 + nodenum 样条节点个数 +返回值 0:正确 非0:错误 +备注:NURBS插补时建议设置较大的预处理缓存段数,并使用梯形加减速模式,调用设置圆弧速度钳制函数,会影响样条插补速度规划; + 使用样条插补后,会占据控制卡较大的缓存段数,要继续调用插补指令,需提前查询剩余缓存容量。 +*********************************************************/ +int _stdcall adt8949_inp_NURBS(int cardno,unsigned short index,unsigned char axismap,float conp[][4],float weight[],float node[],int nodenum); + +//-------------------------------------------------// +// 闭环运动类 // +//-------------------------------------------------// +/**************************************************** +功能:单轴闭环定量相对运动 +参数: +cardno 卡号 +axis 轴号(1-4) +pos 单位为mm,(+/- 9999999.999)>0:正方向驱动 <0:负方向驱动 +rang 补偿完成范围,单位为脉冲 +checktime 闭环调整周期,单位为ms +rate 实际位置和逻辑位置比率 +返回值 0:正确 -1:错误 +*****************************************************/ +int _stdcall adt8949_pmove_closedloop(int cardno,int axis,float pos,int range,int checktime,float rate); + + +/**************************************************** +功能:单轴闭环定量绝对运动 +参数: +cardno 卡号 +axis 轴号(1-4) +pos 单位为mm,(+/- 9999999.999)>0:正方向驱动 <0:负方向驱动 +rang 补偿完成范围,单位为脉冲 +checktime 闭环调整周期,单位为ms +返回值 0:正确 -1:错误 +*****************************************************/ +int _stdcall adt8949_abs_pmove_closedloop(int cardno,int axis,float pos,int range,int checktime,float rate); + + +/********************************************************* +功能:四轴相对坐标直线插补 +参数: +cardno 卡号 +index 用于标识运动轴是否需要启用闭环补偿,D0为1时,表示X轴需要补偿,否则不需要.同理D1表示Y轴,D2表示Z轴,D3表示A轴 + 例如:index值为1(0x0001)时,表示只有X轴需要补偿,值为3(0x0011)时表示X、Y轴都需要补偿 +pos1,pos2,pos3,pos4代表XYZA四轴移动的相对距离,单位为mm +rang 补偿完成范围,单位为脉冲 +checktime 闭环调整周期,单位为ms +rate 实际位置和逻辑位置比率 +返回值 0:正确 -1:错误 +注意:若设置了同步轴,则从轴的pos参数要设置为0,否则函数调用失败。 +*********************************************************/ +int _stdcall adt8949_inp_move4_closedloop(int cardno,unsigned short axismap,float pos1,float pos2,float pos3,float pos4,int rang,int checktime); + +//-------------------------------------------------// +// 开关量输入输出类 // +//-------------------------------------------------// + +/********************************************************* +功能:按位读取输入点 +参数: + cardno 卡号 + number 输入点(0-47),其中0-18、36-47为快速输入点,19-35为总线式输入点 + 其中,四个驱动轴的编码器信号(A相、B相、Z相)对应的端口为: + IN36~IN39: A1...A4 + IN40~IN43: B1...B4 + IN44~IN47: Z1...Z4 +返回值 0:低电平 1:高电平 +*********************************************************/ +int _stdcall adt8949_read_bit(int cardno,int number); + +/***************************************************** +功能:获取输出点状态 +参数: + cardno 卡号 + number 输出点(0-31),其中0-14为快速输出点,15-31为总线式输出点 +返回值 返回值:指定端口的当前状态,-1表示参数错误 +备注: +*****************************************************/ +int _stdcall adt8949_get_out(int cardno, int number); + +/******************************************************** +功能:按组获取输入/输出点状态 +参数: + cardno 卡号 + gp 组号,其中: + 组号0x00,读取OUT0~OUT15 + 组号0x01,读取OUT16~OUT31 + 组号0x10,读取IN0~IN15 + 组号0x11,读取IN16~IN31 + 组号0x12,读取IN32~IN47 + levelmap 该组输入/输出点的状态指针(通过位值显示某个输入/输出点的状态,如OUT0对应bit0,OUT1对应bit1) +返回值 0:正确 -1:错误 +备注:levelmap为16位有符号短整形数据,若要拼成32位的数据并放在低16位,则需作运算:levelmap&0xFFFF,以免影响高16位数据 +*********************************************************/ +int _stdcall adt8949_get_gpio(int cardno,int gp,short int *levelmap); + +/******************************************************** +功能:按位操作输出点 +参数: + cardno 卡号 + number 输出点(0-31),其中0-14为快速输出点,15-31为总线式输出点 + value 0: 关闭 1: 打开 +返回值 0:正确 -1:错误 +*********************************************************/ +int _stdcall adt8949_write_bit(int cardno,int number,int value); + +/******************************************************** +功能:按组操作输出点 +参数: + cardno 卡号 + gp 组号,其中: + OUT0~OUT15,组号为0 + OUT16~OUT31,组号为1 + levelmap 该组输出点的状态设置(通过位值设定某个输出点的状态,如OUT0对应bit0,OUT1对应bit1) +返回值 0:正确 -1:错误 +*********************************************************/ +int _stdcall adt8949_set_gpio(int cardno,int gp,short int levelmap); + +/******************************************************** +功能:同时设置多个输出点电平 +参数: + cardno 卡号 + gp 组号,其中: + OUT0~OUT15,组号为0 + OUT16~OUT31,组号为1 + iomap 按位(bit0~bit15)指定要操作的输出点,位值为1则对相应的输出点进行操作,位值为0的输出点不受影响 + levelmap 该组输出点的状态设置(通过位值设定某个输出点的状态,如OUT0对应bit0,OUT1对应bit1),仅影响iomap位值为1的输出点 +返回值 0:正确 -1:错误 +*********************************************************/ +int _stdcall adt8949_set_multi_io(int cardno,int gp,short int iomap,short int levelmap); + +//-------------------------------------------------// +// 设置缓存IO事件 // +//-------------------------------------------------// + + +/********************************************************* +功能:查询1000段缓存事件区剩余段数 +参数: +cardno 卡号 +len 要获取的缓存事件长度变量的指针 +返回值 0:正确 非0:错误 +备注:插补数据与缓存事件存放在控制卡中不同的区域; +设置缓存事件函数有: +adt8949_set_fifo_io(…), +adt8949_set_fifo_multi_io(…), +adt8949_set_fifo_delay(…), +adt8949_set_fifo_pulser(…), +该函数属于查询API,如需连续查新,两次查询中间建议插入一条Sleep(1)语句。 +*********************************************************/ +int _stdcall adt8949_get_fifo_event_len(int cardno,int *len); + +/******************************************************** +功能:插补时设置单个输出点电平 +参数: +cardno 卡号 +number 输出点(0-14) +value 0: 关闭 1: 打开 +speed -1默认IO动作前不作速度约束,其它:范围(0.0-100000.0 mm/sec) +返回值 0:正确 -1:错误 +备注:单张控制卡FIFO事件容量共1000个,若函数返回值为非0,则代表事件缓存已满,需待事件缓存有余量时重发。 +查询缓存事件区剩余段数可调用函数adt8949_get_fifo_event_len(…)。 +*********************************************************/ +int _stdcall adt8949_set_fifo_io(int cardno,int number,int value,float speed); + +/******************************************************** +功能:插补时同时设置多个输出点电平 +参数: +cardno 卡号 +gp 组号(OUT0~OUT14组号为0,暂开放第0组输出点设置) +iomap 按位(bit0~bit14)指定要操作的输出点,位值为1则对相应的输出点进行操作,位值为0的输出点不受影响 +levelmap 该组输出点的状态设置(通过位值设定某个输出点的状态,如OUT0对应bit0,OUT1对应bit1),仅影响iomap位值为1的输出点 +speed -1默认IO动作前不作速度约束,其它:范围(0.0-100000.0 mm/sec) +返回值 0:正确 -1:错误 +备注:单张控制卡FIFO事件容量共1000个,若函数返回值为非0,则代表事件缓存已满,需待事件缓存有余量时重发。 +查询缓存事件区剩余段数可调用函数adt8949_get_fifo_event_len(…)。 +*********************************************************/ +int _stdcall adt8949_set_fifo_multi_io(int cardno,int gp,short int iomap,short int levelmap,float speed); + +/******************************************************** +功能:插补时特定位置延时运动 +参数: +cardno 卡号 +millisecond 延时值,单位:毫秒 +返回值 0:正确 -1:错误 +备注:单张控制卡FIFO事件容量共1000个,若函数返回值为非0,则代表事件缓存已满,需待事件缓存有余量时重发。 +查询缓存事件区剩余段数可调用函数adt8949_get_fifo_event_len(…)。 +*********************************************************/ +int _stdcall adt8949_set_fifo_delay(int cardno,int millisecond); + +/******************************************************** +功能:插补时插入脉冲发生器 +参数: +cardno 卡号 +port 作为脉冲发生器的输出点端口(0-14) +NormalLevel 常态电平 0: 低电平 1: 高电平 +NormalTime 常态电平保持时间,单位:ms(毫秒) +UnNormalTime 非常态电平保持时间,单位:ms(毫秒) +ReverseNum 输出电平翻转次数 +speed -1默认IO动作前不作速度约束,其它:范围(0.0-100000.0 mm/sec) +返回值:0:正确 -1:错误 +备注:常态电平指开始计算翻转次数前的输出电平。若脉冲发生器动作前处于常态电平状态,则马上翻转, +否则首先翻转到常态电平状态,此时使用一个常态电平时间,并且该次翻转不计入设定的翻转次数。 +单张控制卡FIFO事件容量共1000个,若函数返回值为非0,则代表事件缓存已满,需待事件缓存有余量时重发。 +查询缓存事件区剩余段数可调用函数adt8949_get_fifo_event_len(…)。 +*********************************************************/ +int _stdcall adt8949_set_fifo_pulser(int cardno,int port,int NormalLevel,int NormalTime,int UnNormalTime,int ReverseNum,float speed); + +//-------------------------------------------------// +// 设置位置比较事件 // +//-------------------------------------------------// +/********************************************************* +功能:查询一维位置比较器余量 +参数: + cardno 卡号 + axis 轴号(1-4) + len 要获取的该轴比较点余量的指针 +返回值 0:正确 非0:错误 +备注:每一个轴的比较点容量是500个。添加比较点的函数有: + adt8949_set_pos_compare_io(…), + adt8949_set_pos_compare_multi_io(…), + adt8949_set_pos_compare_pulse(…), + adt8949_set_pos_compare_stop_axis(…), + 该函数属于查询API,如需连续查新,两次查询中间建议插入一条Sleep(1)语句。 +*********************************************************/ +int _stdcall adt8949_get_pos_compare_len(int cardno,int axis,int *len); + +/********************************************************* +功能:设置一维位置比较器模式 +参数: + cardno 卡号 + axis 轴号(1-4) + EnableFlag 使能标志位,0:禁用 1:使能 + cmp_source 比较源,0:逻辑位置 1:实际位置(编码器位置) +返回值 0:正确 非0:错误 +备注:默认状态为禁用位置比较功能 +*********************************************************/ +int _stdcall adt8949_set_pos_compare_mode(int cardno,int axis,int EnableFlag,int cmp_source); + +/********************************************************* +功能:清除一维位置比较器的所有比较点 +参数: + cardno 卡号 + axis 轴号(1-4) +返回值 0:正确 非0:错误 +备注:建议要添加位置比较点前先清除一遍该轴的比较点数据,避免控制卡存有未触发的比较点数据 +*********************************************************/ +int _stdcall adt8949_clear_pos_compare_point(int cardno,int axis); + +/******************************************************** +功能:添加一维位置比较器的输出点控制功能 +参数: + cardno 卡号 + axis 轴号(1-4) + pos 比较位置,单位:pulse + dir 比较方向,0:小于等于 1:大于等于 + type 控制方式:1:打开 2:关闭 3:取反 + port 输出点(0-14) +返回值 0:正确 非0:错误 +备注:以下情况会导致添加比较点失败: + 1、当前位置已经满足触发条件; + 2、连续在该轴添加10个以上需在同一个位置触发的比较点; + 3、该轴的比较点余量为零。 +*********************************************************/ +int _stdcall adt8949_set_pos_compare_io(int cardno,int axis,long pos,int dir,int type,int port); + +/******************************************************** +功能:添加一维位置比较器的多路输出点控制功能 +参数: + cardno 卡号 + axis 轴号(1-4) + pos 比较位置,单位:pulse + dir 比较方向,0:小于等于 1:大于等于 + iomap 按位(bit0~bit14)指定要操作的输出点,位值为1则对相应的输出点进行操作,位值为0的输出点不受影响 + levelmap 该组输出点的状态设置(通过位值设定某个输出点的状态,如OUT0对应bit0,OUT1对应bit1),仅影响iomap位值为1的输出点 +返回值 0:正确 非0:错误 +备注:以下情况会导致添加比较点失败: + 1、当前位置已经满足触发条件; + 2、连续在该轴添加10个以上需在同一个位置触发的比较点; + 3、该轴的比较点余量为零。 +*********************************************************/ +int _stdcall adt8949_set_pos_compare_multi_io(int cardno,int axis,long pos,int dir,int iomap,int levelmap); + +/******************************************************** +功能:添加一维位置比较器的脉冲输出功能 +参数: + cardno 卡号 + axis 轴号(1-4) + pos 比较位置,单位:pulse + dir 比较方向,0:小于等于 1:大于等于 + port 脉冲输出的端口(0-14) + level 输出脉冲的有效电平 + millisecond 输出脉冲的时间长度,单位:毫秒 +返回值 0:正确 非0:错误 +备注:若功能触发时,当前输出点电平已经处于设置的有效电平状态,则输出电平暂不翻转,在延时设定的毫秒时长后翻转一次。 + 以下情况会导致添加比较点失败: + 1、当前位置已经满足触发条件; + 2、连续在该轴添加10个以上需在同一个位置触发的比较点; + 3、该轴的比较点余量为零。 +*********************************************************/ +int _stdcall adt8949_set_pos_compare_pulse(int cardno,int axis,long pos,int dir,int port,int level,int millisecond); + +/******************************************************** +功能:添加一维位置比较器的轴停止功能 +参数: + cardno 卡号 + axis 轴号(1-4) + pos 比较位置,单位:pulse + dir 比较方向,0:小于等于 1:大于等于 + DesAxis 指定要停止的轴号(1-4) + admode 停止模式,0:减速停止 1:立即停止 +返回值 0:正确 非0:错误 +备注:以下情况会导致添加比较点失败: + 1、当前位置已经满足触发条件; + 2、连续在该轴添加10个以上需在同一个位置触发的比较点; + 3、该轴的比较点余量为零。 +*********************************************************/ +int _stdcall adt8949_set_pos_compare_stop_axis(int cardno,int axis,long pos,int dir,int DesAxis,int admode); + +//-------------------------------------------------// +// DA输出 // +//-------------------------------------------------// +/******************************************************** +功能:设置DA输出电压 +参数: + cardno 卡号 + port 设置DA输出端口(1-2) + value 设置DA输出大小(0-10),单位:伏特 +返回值 0:正确 非0:错误 +备注: DA输出电压可以精确到小数点后两位 +*********************************************************/ +int _stdcall adt8949_set_daout(int cardno,int port,float value); + +/*********************************************************************************************** +功能:设置DA输出校正值 +参数: +cardno 卡号 +port 设置DA输出端口(1-2) +TestVoltage[21] 数组指针,用户定义的由0.0-10.0V,每隔0.5V所获得的输出电压值,总共21个。 +21个校正值必须为递增数列,最后1个必须在10~11V之间 +返回值: 0:正确 非0:错误 +备注: DA输出电压可以精确到小数点后两位 +***********************************************************************************************/ +int _stdcall adt8949_set_da_adjust(int cardno,int port,const float TestVoltage[21]); + + +//暂不开放,或已有替代函数 +int _stdcall adt8949_set_fifo_event_ahead_time(int cardno,float ms,int EnableFlag); +int _stdcall adt8949_set_precount(int cardno,unsigned short prec); + +//-------------------------------------------------// +// 回原点函数 // +//-------------------------------------------------// + +/******************************************************** +功能:设置回零信号,步骤参数 +参数: +m_nCardNum 卡号 +m_nAxisNum 轴号 +m_nHomeMode 回零方向和回零类型 +通过低三位表示回零方向的方向和类型,D0表示回零方向 0:负方向,1:正方向 +D1表示回零运动类型 0:直线运动,精确定位原点时,按固定正向退出原点,然后负方向接近原点; + 1:圆周运动,精确定位原点时,先反向退出原点,然后按设定回零方向接近原点. +D2表示回零信号类型 0:STOP0作为机械原点,STOP1作为Z相 + 1:STOP0不启用,原STOP1作为机械原点 +例如:m_nHomeMode值为0时,方向为负向回零,类型为直线运动,低二位为00 + 值为1时,方向为正向回零,类型为直线运动,低二位为01 + 值为2时,方向为负向回零,类型为圆周运动,低二位为10 + 值为3时,方向为正向回零,类型为圆周运动,低二位为11 +m_nStop0Active stop0 有效电平设置;0:低电平停止 1:高电平停止 +m_nLimitActive 正负限位有效电平,D0位表示有效电平 0低电平有效, 1高电平有效;D1位为1表示负限位无效;D2位为1表示正限位无效; +例如:0x010值为2表示负限位无效,正限位有效,有效电平低电平;0x101值为5表示正限位无效,负限位有效,有效电平高电平;0x110值为6表示正负都无效 +m_nStop1Active stop1 有效电平设置;0:低电平停止 1:高电平停止 其它值:不搜索STOP1(Z相) +m_fBackRange 反向距离 >1,不能超过正限位和stop0之间距离 +m_fEncoderZRange 编码器Z相范围 >1 +m_fOffset 原点偏移量;==0不偏移,>0正方向偏移,<0负方向偏移 +返回值 0:正确 -1至-8:错误类型,-x表示第x个参数错误 +备注: 回零模块默认设置限位为有效。回零完成后,如果需要限位信号作为通用输入, +请重新调用设置限位模式函数"adt8949_set_limit_mode",将限位设置为无效。 +*********************************************************/ +int _stdcall adt8949_SetHomeMode_Ex(int m_nCardNum,int m_nAxisNum,int m_nHomeDir, int m_nStop0Active,int m_nLimitActive,int m_nStop1Active, + float m_fBackRange,float m_fEncoderZRange,float m_fOffset); + + +/******************************************************** +功能:回零速度参数 +参数: +m_nCardNum 卡号 +m_nAxisNum 轴号 +m_fStartSpeed 原点(STOP0)搜寻起始速度 +m_fSearchSpeed 原点搜寻速度 +m_fHomeSpeed 低速接近原点速度 +m_fAcc 回原点过程中的加速度 +m_fZPhaseSpeed 编码器Z相(STOP1)搜寻速度 +返回值 0:正确 -1至-7:错误类型,-x表示第x个参数错误 + +*********************************************************/ +int _stdcall adt8949_SetHomeSpeed_Ex(int m_nCardNum,int m_nAxisNum,float m_fStartSpeed,float m_fSearchSpeed,float m_fHomeSpeed,float m_fAcc,float m_fZPhaseSpeed); + +/******************************************************** +功能:启动回零 +参数: +m_nCardNum 卡号 +m_nAxisNum 轴号 +返回值 0:正确 -1至-3:错误类型,-x表示第x个参数错误 +备注:调用该函数时启动回零动作 +*********************************************************/ +int _stdcall adt8949_HomeProcess_Ex(int m_nCardNum,int m_nAxisNum); + +/******************************************************** +功能:获取回零状态 +参数: +m_nCardNum 卡号 +m_nAxisNum 轴号 +返回值 0:回零成功;-1表示参数1错误;-2表示参数2错误;-3表示回零未启动; +1-10表示执行的步骤,分别表示: +1 :快速接近原点,搜索STOP0 +2 :检查STOP0是否找到 +3 :反向退出原点 +4 :检查反向退出原点是否完成 +5 :低速接近原点,搜索STOP0 +6 :检查STOP0搜索是否完成 +7 :低速接近Z相,搜索STOP1.如果STOP1设置为-1,则跳过7,8两步。 +8 :检查STOP1搜索是否完成 +9 :原点偏移 +10 :检查原点偏移 +-100x:回零第x步出现异常,例如-1001表示回零第1步出现异常 +-1020:回零被终止 +备注:回零过程中需定时调用此函数来触发下一步回零动作,直至回零完成 +*********************************************************/ +int _stdcall adt8949_GetHomeStatus_Ex(int m_nCardNum,int m_nAxisNum); +/********************************************************** +功能:判断是否需要回零 +参数: +m_nCardNum 卡号 +m_nAxisNum 轴号 +返回值 0:需要回零;1:不需要回零;-1:函数调用失败 +***********************************************************/ +int _stdcall adt8949_NeedHome_Ex(int m_nCardNum,int m_nAxisNum); +/********************************************************** +功能:指定卡的轴置设置为需要回零 +参数: +m_nCardNum 卡号 +m_nAxisNum 轴号 +返回值 0:设置成功;1:设置失败 +***********************************************************/ +int _stdcall adt8949_ResetHomeStatus_Ex(int m_nCardNum,int m_nAxisNum); + + + +#endif diff --git a/PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/HSI_ADT_8949/stdafx.cpp b/PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/HSI_ADT_8949/stdafx.cpp new file mode 100644 index 0000000..02aa0f1 --- /dev/null +++ b/PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/HSI_ADT_8949/stdafx.cpp @@ -0,0 +1,8 @@ +// stdafx.cpp : 只包括标准包含文件的源文件 +// HSI_ADT_8949.pch 将作为预编译头 +// stdafx.obj 将包含预编译类型信息 + +#include "stdafx.h" + +// TODO: 在 STDAFX.H 中 +// 引用任何所需的附加头文件,而不是在此文件中引用 diff --git a/PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/HSI_ADT_8949/stdafx.h b/PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/HSI_ADT_8949/stdafx.h new file mode 100644 index 0000000..0c90aa3 --- /dev/null +++ b/PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/HSI_ADT_8949/stdafx.h @@ -0,0 +1,37 @@ +// stdafx.h : 标准系统包含文件的包含文件, +// 或是经常使用但不常更改的 +// 特定于项目的包含文件 + +#pragma once + +#ifndef VC_EXTRALEAN +#define VC_EXTRALEAN // 从 Windows 头中排除极少使用的资料 +#endif + +#include "targetver.h" + +#define _ATL_CSTRING_EXPLICIT_CONSTRUCTORS // 某些 CString 构造函数将是显式的 + +#include // MFC 核心组件和标准组件 +#include // MFC 扩展 +#include +#ifndef _AFX_NO_OLE_SUPPORT +#include // MFC OLE 类 +#include // MFC OLE 对话框类 +#include // MFC 自动化类 +#endif // _AFX_NO_OLE_SUPPORT + +#ifndef _AFX_NO_DB_SUPPORT +#include // MFC ODBC 数据库类 +#endif // _AFX_NO_DB_SUPPORT + +#ifndef _AFX_NO_DAO_SUPPORT +#include // MFC DAO 数据库类 +#endif // _AFX_NO_DAO_SUPPORT + +#ifndef _AFX_NO_OLE_SUPPORT +#include // MFC 对 Internet Explorer 4 公共控件的支持 +#endif +#ifndef _AFX_NO_AFXCMN_SUPPORT +#include // MFC 对 Windows 公共控件的支持 +#endif // _AFX_NO_AFXCMN_SUPPORT \ No newline at end of file diff --git a/PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/HSI_ADT_8949/targetver.h b/PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/HSI_ADT_8949/targetver.h new file mode 100644 index 0000000..7a7d2c8 --- /dev/null +++ b/PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/HSI_ADT_8949/targetver.h @@ -0,0 +1,8 @@ +#pragma once + +// 包括 SDKDDKVer.h 将定义可用的最高版本的 Windows 平台。 + +// 如果要为以前的 Windows 平台生成应用程序,请包括 WinSDKVer.h,并将 +// WIN32_WINNT 宏设置为要支持的平台,然后再包括 SDKDDKVer.h。 + +#include diff --git a/PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/HSI_ADT_8949_WPFTest/App.config b/PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/HSI_ADT_8949_WPFTest/App.config new file mode 100644 index 0000000..8e15646 --- /dev/null +++ b/PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/HSI_ADT_8949_WPFTest/App.config @@ -0,0 +1,6 @@ +锘 + + + + + \ No newline at end of file diff --git a/PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/HSI_ADT_8949_WPFTest/App.xaml b/PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/HSI_ADT_8949_WPFTest/App.xaml new file mode 100644 index 0000000..8df99c1 --- /dev/null +++ b/PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/HSI_ADT_8949_WPFTest/App.xaml @@ -0,0 +1,8 @@ +锘 + + + + diff --git a/PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/HSI_ADT_8949_WPFTest/App.xaml.cs b/PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/HSI_ADT_8949_WPFTest/App.xaml.cs new file mode 100644 index 0000000..0adae6a --- /dev/null +++ b/PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/HSI_ADT_8949_WPFTest/App.xaml.cs @@ -0,0 +1,17 @@ +锘縰sing System; +using System.Collections.Generic; +using System.Configuration; +using System.Data; +using System.Linq; +using System.Threading.Tasks; +using System.Windows; + +namespace HSI_ADT_8949_WPFTest +{ + /// + /// App.xaml 鐨勪氦浜掗昏緫 + /// + public partial class App : Application + { + } +} diff --git a/PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/HSI_ADT_8949_WPFTest/HSI.cs b/PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/HSI_ADT_8949_WPFTest/HSI.cs new file mode 100644 index 0000000..fb043a4 --- /dev/null +++ b/PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/HSI_ADT_8949_WPFTest/HSI.cs @@ -0,0 +1,687 @@ +using System; +using System.Runtime.InteropServices; +using System.Windows.Forms; +using System.Windows; +using System.Threading; +using HSI_ADT_8949_WPFTest.Properties; +using MessageBox = System.Windows.Forms.MessageBox; + +namespace HSI_ADT_8949_WPFTest.HSI +{ + internal class Interface + { + // >>>> In Interfaces + public delegate void PEventCallback( + Def.HSI_EVENT_TYPE eventType, Def.HSI_EVENT_RESPONSE_TYPE responseType, uint eventId, string eventData, + ref uint eventCallbackId); + + public static PEventCallback HsiCallback = EventCallback; + + [DllImport("HSI.dll", EntryPoint = "HSI_GET_INTERFACE_VERSION", CharSet = CharSet.Unicode)] + public static extern Def.HSI_STATUS GetInterfaceVersion(ref uint apiVersionMajor, ref uint apiVersionMinor); + + [DllImport("HSI.dll", EntryPoint = "HSI_STARTUP", CharSet = CharSet.Unicode)] + public static extern Def.HSI_STATUS Startup(IntPtr hWnd, bool bOfflineOnly); + + [DllImport("HSI.dll", EntryPoint = "HSI_GET_INTERFACE_VERSION", CharSet = CharSet.Unicode)] + public static extern Def.HSI_STATUS GetInterfaceVersion(); + + [DllImport("HSI.dll", EntryPoint = "HSI_GET_MACHINE_INFO", CharSet = CharSet.Unicode)] + public static extern Def.HSI_STATUS GetMachineInfo(ref int numMachineTypes); + + [DllImport("HSI.dll", EntryPoint = "HSI_SET_EVENT_CALLBACK", CharSet = CharSet.Unicode)] + public static extern Def.HSI_STATUS SetEventCallback(PEventCallback pCallback); + + [DllImport("HSI.dll", EntryPoint = "HSI_SHUTDOWM", CharSet = CharSet.Unicode)] + public static extern Def.HSI_STATUS Shutdown(); + + //============================================================ + + public static void EventCallback(Def.HSI_EVENT_TYPE eventType, Def.HSI_EVENT_RESPONSE_TYPE responseType, + uint eventId, string eventData, ref uint eventCallbackId) + { + var msgBtn = MessageBoxButtons.OK; + switch (responseType) + { + case Def.HSI_EVENT_RESPONSE_TYPE.HSI_EVENT_RESPONSE_OK: + msgBtn = MessageBoxButtons.OK; + break; + case Def.HSI_EVENT_RESPONSE_TYPE.HSI_EVENT_RESPONSE_RETRY: + msgBtn = MessageBoxButtons.RetryCancel; + break; + case Def.HSI_EVENT_RESPONSE_TYPE.HSI_EVENT_RESPONSE_CANCEL: + msgBtn = MessageBoxButtons.OKCancel; + break; + case Def.HSI_EVENT_RESPONSE_TYPE.HSI_EVENT_RESPONSE_YES: + msgBtn = MessageBoxButtons.YesNo; + break; + } + switch (eventType) + { + case Def.HSI_EVENT_TYPE.HSI_EVENT_NONE: + break; + case Def.HSI_EVENT_TYPE.HSI_EVENT_ERROR: + System.Windows.Forms.MessageBox.Show(eventData, Resources.Interface_Tips, + msgBtn, MessageBoxIcon.Error); + break; + case Def.HSI_EVENT_TYPE.HSI_EVENT_FUNCTION: + var eventFunctionId = (Def.HSI_EVENT_FUNCTION_ID)eventId; + switch (eventFunctionId) + { + //case Def.HSI_EVENT_FUNCTION_ID.HSI_EVENT_MOTION_DCC_HOME: + // { + // System.Windows.Forms.MessageBox.Show(Resources.Interface_Tips_Home_Machine, Resources.Interface_Tips, + // msgBtn, MessageBoxIcon.Information); + // break; + // } + + case Def.HSI_EVENT_FUNCTION_ID.HSI_EVENT_MOTION_DCC_HOME: + { + var result = MessageBox.Show(Resources.Interface_Tips_Home_Machine, Resources.Interface_Tips, MessageBoxButtons.OKCancel, MessageBoxIcon.Information); + switch (result) + { + case DialogResult.OK: + eventCallbackId = (int)Def.HSI_EVENT_RESPONSE_TYPE.HSI_EVENT_RESPONSE_OK; + break; + default: + eventCallbackId = (int)Def.HSI_EVENT_RESPONSE_TYPE.HSI_EVENT_RESPONSE_CANCEL; + break; + } + break; + } + case Def.HSI_EVENT_FUNCTION_ID.HSI_EVENT_DEBUG_LOG: + { + System.Windows.Forms.MessageBox.Show(eventData, Resources.Interface_Tips, + msgBtn, MessageBoxIcon.Information); + break; + } + case Def.HSI_EVENT_FUNCTION_ID.HSI_EVENT_MOVE_POINT: + { + //System.Windows.Forms.MessageBox.Show(Resources.Interface_Tips_Motion_Finished, Resources.Interface_Tips, msgBtn, MessageBoxIcon.Information); + + Message msg = Message.Create(MainWindow.Mainhwnd, 1024, new IntPtr(0), new IntPtr(0)); + MainWindow.SendMessage(msg.HWnd, msg.Msg, msg.WParam, msg.LParam); + ; //Motion completed + break; + } + } + break; + } + } + } + + internal class Motion + { + // >>>> In Interfaces + [DllImport("HSI.dll", EntryPoint = "HSI_MOTION_IS_SUPPORTED", CharSet = CharSet.Unicode)] + public static extern Def.HSI_STATUS IsSupported(ref uint types); + + [DllImport("HSI.dll", EntryPoint = "HSI_MOTION_STARTUP", CharSet = CharSet.Unicode)] + public static extern Def.HSI_STATUS Startup(bool bHome); + + [DllImport("HSI.dll", EntryPoint = "HSI_MOTION_IS_HOMED", CharSet = CharSet.Unicode)] + public static extern Def.HSI_STATUS IsHomed(ref bool bHomed); + + [DllImport("HSI.dll", EntryPoint = "HSI_MOTION_GET_SPEED_XYZ", CharSet = CharSet.Unicode)] + public static extern Def.HSI_STATUS GetSpeedXyz(ref double speed); + + [DllImport("HSI.dll", EntryPoint = "HSI_MOTION_SET_SPEED_XYZ", CharSet = CharSet.Unicode)] + public static extern Def.HSI_STATUS SetSpeedXyz(double speed); + + [DllImport("HSI.dll", EntryPoint = "HSI_MOTION_GET_SPEED_R", CharSet = CharSet.Unicode)] + public static extern Def.HSI_STATUS GetSpeedR(ref double speed); + + [DllImport("HSI.dll", EntryPoint = "HSI_MOTION_SET_SPEED_R", CharSet = CharSet.Unicode)] + public static extern Def.HSI_STATUS SetSpeedR(double speed); + + [DllImport("HSI.dll", EntryPoint = "HSI_MOTION_GET_SCALE_RESOLUTION", CharSet = CharSet.Unicode)] + public static extern Def.HSI_STATUS GetScaleResolution( + ref double scaleX, ref double scaleY, ref double scaleZ); + + [DllImport("HSI.dll", EntryPoint = "HSI_MOTION_SET_SCALE_RESOLUTION", CharSet = CharSet.Unicode)] + public static extern Def.HSI_STATUS SetScaleResolution(double scaleX, double scaleY, double scaleZ); + + [DllImport("HSI.dll", EntryPoint = "HSI_MOTION_GET_DEADBAND", CharSet = CharSet.Unicode)] + public static extern Def.HSI_STATUS GetDeadBand( + ref double deadbandX, ref double deadbandY, ref double deadbandZ, ref double deadbandR); + + [DllImport("HSI.dll", EntryPoint = "HSI_MOTION_GET_REFRESH_DEADBAND", CharSet = CharSet.Unicode)] + public static extern Def.HSI_STATUS GetRefreshDeadBand(ref double deadband); + + [DllImport("HSI.dll", EntryPoint = "HSI_MOTION_JOG", CharSet = CharSet.Unicode)] + public static extern Def.HSI_STATUS Jog(uint axisTypes, double speed); + + [DllImport("HSI.dll", EntryPoint = "HSI_MOTION_STOP_JOG", CharSet = CharSet.Unicode)] + public static extern Def.HSI_STATUS StopJog(); + + [DllImport("HSI.dll", EntryPoint = "HSI_MOTION_GET_POSITION_XYZ", CharSet = CharSet.Unicode)] + public static extern Def.HSI_STATUS GetPositionXyz( + uint axisTypes, ref double positionX, ref double positionY, ref double positionZ, ref double time); + + [DllImport("HSI.dll", EntryPoint = "HSI_MOTION_GET_ENCPRF_MULTI", CharSet = CharSet.Unicode)] + public static extern Def.HSI_STATUS GetPositionEncPrfMulti(uint AxisTypes, double[] EncPos, double[] PrfPos, int Count); + + [DllImport("HSI.dll", EntryPoint = "HSI_MOTION_SET_POSITION_XYZ", CharSet = CharSet.Unicode)] + public static extern Def.HSI_STATUS SetPositionXyz( + uint axisTypes, double positionX, double positionY, double positionZ, Def.HSI_MOTION_MOVE_TYPE eType, + double dSpeedGear); + + [DllImport("HSI.dll", EntryPoint = "HSI_MOTION_SET_POSITION_XYZA", CharSet = CharSet.Unicode)] + public static extern Def.HSI_STATUS SetPositionXyza( + uint axisTypes, double positionX, double positionY, double positionZ, double positionA, Def.HSI_MOTION_MOVE_TYPE eType, + double dSpeedGear); + + [DllImport("HSI.dll", EntryPoint = "HSI_MOTION_ZERO_POS", CharSet = CharSet.Unicode)] + public static extern Def.HSI_STATUS ZeroPos(bool bZeroPos); + + [DllImport("HSI.dll", EntryPoint = "HSI_MOTION_GET_POSITION_R", CharSet = CharSet.Unicode)] + public static extern Def.HSI_STATUS GetPositionR(uint axisTypes, ref double positionR, ref double time); + + [DllImport("HSI.dll", EntryPoint = "HSI_MOTION_SET_POSITION_R", CharSet = CharSet.Unicode)] + public static extern Def.HSI_STATUS SetPositionR( + uint axisTypes, double positionR, Def.HSI_MOTION_AXIS_R_MOVE_TYPE directionType, bool bWait); + + [DllImport("HSI.dll", EntryPoint = "HSI_MOTION_ABORT_MOTION", CharSet = CharSet.Unicode)] + public static extern Def.HSI_STATUS AbortMotion(); + + [DllImport("HSI.dll", EntryPoint = "HSI_MOTION_GET_DIO", CharSet = CharSet.Unicode)] + public static extern Def.HSI_STATUS GetDIO(uint ioChannel, ref uint status); + + [DllImport("HSI.dll", EntryPoint = "HSI_MOTION_SET_DIO", CharSet = CharSet.Unicode)] + public static extern Def.HSI_STATUS SetDIO(uint ioChannel, uint status); + + [DllImport("HSI.dll", EntryPoint = "HSI_MOTION_DCC_SCAN_SET_DATA", CharSet = CharSet.Unicode)] + public static extern Def.HSI_STATUS DCCScanSetData(uint axisTypes, Def.HSI_SCAN_MOTION_TYPE eType, uint lTrigNumber, double[] dTrigDis); + + [DllImport("HSI.dll", EntryPoint = "HSI_MOTION_DCC_SCAN_START", CharSet = CharSet.Unicode)] + public static extern Def.HSI_STATUS DCCScanStart(); + + [DllImport("HSI.dll", EntryPoint = "HSI_MOTION_DCC_SCAN_STOP", CharSet = CharSet.Unicode)] + public static extern Def.HSI_STATUS DCCScanStop(); + + [DllImport("HSI.dll", EntryPoint = "HSI_MOTION_SHUTDOWN", CharSet = CharSet.Unicode)] + public static extern Def.HSI_STATUS Shutdown(); + + + [DllImport("HSI.dll", EntryPoint = "HSI_MOTION_IS_SUPPORTED_EX", CharSet = CharSet.Unicode)] + public static extern Def.HSI_STATUS IsSupportedEx(uint AxisTypes, ref uint Types); + + [DllImport("HSI.dll", EntryPoint = "HSI_MOTION_STARTUP_EX", CharSet = CharSet.Unicode)] + public static extern Def.HSI_STATUS StartupEx(uint AxisTypes, bool bHome); + + [DllImport("HSI.dll", EntryPoint = "HSI_MOTION_GET_SCALE_RESOLUTION_EX", CharSet = CharSet.Unicode)] + public static extern Def.HSI_STATUS GetScaleResolutionEx(uint AxisTypes, ref double Scale); + + [DllImport("HSI.dll", EntryPoint = "HSI_MOTION_SET_SCALE_RESOLUTION_EX", CharSet = CharSet.Unicode)] + public static extern Def.HSI_STATUS SetScaleResolutionEx(uint AxisTypes, double Scale); + + [DllImport("HSI.dll", EntryPoint = "HSI_MOTION_GET_POSITION_EX", CharSet = CharSet.Unicode)] + public static extern Def.HSI_STATUS GetPositionEx(uint AxisTypes, ref double Position, ref double Time); + + [DllImport("HSI.dll", EntryPoint = "HSI_MOTION_SET_POSITION_EX", CharSet = CharSet.Unicode)] + public static extern Def.HSI_STATUS SetPositionEx(uint AxisTypes, double Position, Def.HSI_MOTION_MOVE_TYPE eType, double dSpeedGear); + + [DllImport("HSI.dll", EntryPoint = "HSI_MOTION_GET_SPEED_EX", CharSet = CharSet.Unicode)] + public static extern Def.HSI_STATUS GetSpeedEx(uint AxisTypes, ref double Speed); + + [DllImport("HSI.dll", EntryPoint = "HSI_MOTION_SET_SPEED_EX", CharSet = CharSet.Unicode)] + public static extern Def.HSI_STATUS SetSpeedEx(uint AxisTypes, double Speed); + + [DllImport("HSI.dll", EntryPoint = "HSI_MOTION_GET_ACCELERATION_EX", CharSet = CharSet.Unicode)] + public static extern Def.HSI_STATUS GetAccelerationEx(uint AxisTypes, ref double Accel); + + [DllImport("HSI.dll", EntryPoint = "HSI_MOTION_SET_ACCELERATION_EX", CharSet = CharSet.Unicode)] + public static extern Def.HSI_STATUS SetAccelerationEx(uint AxisTypes,double Accel); + + // <<<< Out Interfaces + public Motion() + { + _supported = 0; + _bFirst = true; + } + + public static bool IsActive(bool bForce = false) + { + if (_bFirst || bForce) + { + IsSupported(ref _supported); + _bFirst = false; + } + return (_supported != 0); + } + + private static bool _bFirst; + private static uint _supported; + + } + + internal class Illumination + { + // >>>> In Interfaces + [DllImport("HSI.dll", EntryPoint = "HSI_MOTION_IS_SUPPORTED", CharSet = CharSet.Unicode)] + public static extern Def.HSI_STATUS IsSupported(ref uint types); + + [DllImport("HSI.dll", EntryPoint = "HSI_MOTION_IS_SUPPORTED", CharSet = CharSet.Unicode)] + public static extern Def.HSI_STATUS HSI_ILLUMINATION_STARTUP(); + + [DllImport("HSI.dll", EntryPoint = "HSI_MOTION_IS_SUPPORTED", CharSet = CharSet.Unicode)] + public static extern Def.HSI_STATUS HSI_ILLUMINATION_GET_LAMP_COUNT(ref int nLamps); + + [DllImport("HSI.dll", EntryPoint = "HSI_MOTION_IS_SUPPORTED", CharSet = CharSet.Unicode)] + public static extern Def.HSI_STATUS HSI_ILLUMINATION_GET_LAMP_INFO(ref int lampInfo, ref int numLamps, + int[] lampsType, + int[] numRings, int[] numSectors, int[] color, double[] angle, ref bool bCanBeCalibrated); + + [DllImport("HSI.dll", EntryPoint = "HSI_MOTION_IS_SUPPORTED", CharSet = CharSet.Unicode)] + public static extern Def.HSI_STATUS HSI_ILLUMINATION_GET_LAMP_STATE( + int nLamp, bool[] bBulbStates, double[] intensities, ref int color, ref double angle); + + [DllImport("HSI.dll", EntryPoint = "HSI_MOTION_IS_SUPPORTED", CharSet = CharSet.Unicode)] + public static extern Def.HSI_STATUS HSI_ILLUMINATION_SET_LAMP_STATE( + int nLamp, bool[] bBulbStates, double[] intensities, int color, double angle, bool bWait); + + [DllImport("HSI.dll", EntryPoint = "HSI_MOTION_IS_SUPPORTED", CharSet = CharSet.Unicode)] + public static extern Def.HSI_STATUS HSI_ILLUMINATION_GET_LAMP_STATE_ALL( + int lampInfo, int numLamps, int[] lampsType, int[,] bBulbStates, double[,] intensities); + + [DllImport("HSI.dll", EntryPoint = "HSI_MOTION_IS_SUPPORTED", CharSet = CharSet.Unicode)] + public static extern Def.HSI_STATUS HSI_ILLUMINATION_SET_LAMP_STATE_ALL( + int lampInfo, int numLamps, int[] lampsType, int[,] bBulbStates, double[,] intensities, bool bWait); + + [DllImport("HSI.dll", EntryPoint = "HSI_MOTION_IS_SUPPORTED", CharSet = CharSet.Unicode)] + public static extern Def.HSI_STATUS HSI_ILLUMINATION_SHUTDOWN(); + + // <<<< Out Interfaces + public Illumination() + { + _supported = 0; + _bFirst = true; + } + + public static bool IsActive(bool bForce = false) + { + if (_bFirst || bForce) + { + IsSupported(ref _supported); + _bFirst = false; + } + return (_supported != 0); + } + + private static bool _bFirst; + private static uint _supported; + } + public enum Threadstate + { + ThreadstateExit = -1, + ThreadstateRunning = 0, + ThreadstatePause = 1, + ThreadstateAll = 2 + }; + + internal class Def + { + public const int HSI_APIVersionMajor = 1; + public const int HSI_APIVersionMinor = 3; + + public const int HSI_MaxStringLength = 255; // Maximum string length (buffer size - 1) + /////////////////////////////////////////////////////////////////////////////// + // Interface API + /////////////////////////////////////////////////////////////////////////////// + public enum HSI_STATUS + { + HSI_STATUS_NOT_SUPPORTED = -1, + HSI_STATUS_NORMAL = 0, + HSI_STATUS_FAILED, + HSI_FAILED_DLL_LOAD, + + HSI_STATUS_PORTLOCK_HSI_MISMATCH, + + HSI_STATUS_FILE_NOT_FOUND, + HSI_STATUS_HARDWARE_NOT_FOUND, + HSI_STATUS_INVALID_PARAMETERS, + HSI_STATUS_INVALID_POINTS, + HSI_STATUS_PART_NOT_DETECTED, + HSI_STATUS_MEASURE_ERROR, + HSI_STATUS_TEMPERATURE_ERROR, + + HSI_STATUS_ILLUMINATION_COMM = 50, + + HSI_STATUS_OPTICS_COMM = 100, + HSI_STATUS_OPTICS_HOMING, + HSI_STATUS_OPTICS_TIMEOUT, + HSI_STATUS_OPTICS_CALIBRATIONDATA, + HSI_STATUS_OPTICS_CALIBRATIONDATADEFAULT, + HSI_STATUS_OPTICS_CALFILEDATACOUNTMISMATCH, + + HSI_STATUS_MOTION_COMM = 150, + HSI_STATUS_MOTION_HOMING, + HSI_STATUS_MOTION_TIMEOUT, + HSI_STATUS_MOTION_EMERGENCY_STOP, + HSI_STATUS_MOTION_EXCEED_LIMIT, + HSI_STATUS_MOTION_UNKNOWN_ERROR, + HSI_STATUS_MOTION_EXCEED_SW_LIMIT, + HSI_STATUS_MOTION_POSITION_ERROR, + HSI_STATUS_MOTION_MOVING, + + HSI_STATUS_TP_UNEXPECTED_HIT = 200, + HSI_STATUS_TP_TIMEOUT = 201, + HSI_STATUS_TP_APPROACH_TIMEOUT = 202, + HSI_STATUS_TP_WRIST_ERROR, + + HSI_STATUS_FG_COMM = 250, + HSI_STATUS_FG_TIMEOUT, + HSI_STATUS_FG_DIRECTX, + HSI_STATUS_FG_COLORDEPTH, + + HSI_STATUS_LP_TIMEOUT = 300, + HSI_STATUS_LP_EXCEED_LIMIT = 301, + + HSI_STATUS_VP_TIMEOUT = 350, + HSI_STATUS_VP_IMAGEPROCESS_FAIL + }; + + public enum HSI_MACHINE_TYPE + { + HSI_MACHINE_UNKNOWN = 0, + HSI_MACHINE_SO7 = 1, + HSI_MACHINE_TYPE_TOTAL, + }; + + public enum HSI_EVENT_TYPE + { + HSI_EVENT_NONE = 0, + HSI_EVENT_ERROR = 1, + HSI_EVENT_FUNCTION = 2 + }; + + public enum HSI_EVENT_FUNCTION_ID //EventData + { + //SendReceive + // V4.2 & V4.3 + + HSI_EVENT_DONE = 0, //N/A N/A + HSI_EVENT_TAKE_HIT = 1, //N/A N/A + HSI_EVENT_ERASE_HIT = 2, //N/AN/A + HSI_EVENT_TIME_CRITICAL = 3, //"ON", or "OFF" N/A + HSI_EVENT_ZOOM_IN = 4, //"MAX", "COARSE", or "FINE" N/A + HSI_EVENT_ZOOM_OUT = 5, //"MAX", "COARSE", or "FINE" N/A + HSI_EVENT_REFRESH_LIVE_VIEW = 6, //N/AN/A + HSI_EVENT_UPDATE_READOUTS = 7, //"AxisFlags,%lf{x},%lf{y},%lf{z},%lf{r}"N/A + HSI_EVENT_READ_MC_POSITION = 8, //"AxisFlags""AxisFlags,%lf{x},%lf{y},%lf{z},%lf{r}" + HSI_EVENT_MOVE_MC_POSITION = 9, //"AxisFlags,%lf{x},%lf{y},%lf{z},%lf{r},%lf{speed},%1d{bWait}"N/A + HSI_EVENT_CONVERT_MC_TO_GLOBAL = 10, //"%lf{x},%lf{y},%lf{z}" "%lf{x},%lf{y},%lf{z}" + HSI_EVENT_UPDATE_STATUS_MESSAGE = 11, //N/AN/A + HSI_EVENT_OPENFILE_DLG = 12, //N/A"FileName" + HSI_EVENT_DISPLAY_YESNO_MESSAGE = 13, //N/AN/A + HSI_EVENT_DISPLAY_OKCANCEL_MESSAGE = 14, //N/AN/A + HSI_EVENT_DISPLAY_OK_MESSAGE = 15, //N/AN/A + + // V4.3 + Only + HSI_EVENT_DEBUG_LOG = 20, //"%s" N/A + HSI_EVENT_MOVE_MC_POSITION_AND_SETTLE = 21, //"AxisFlags,%lf{x},%lf{y},%lf{z},%lf{r},%lf{speed}" N/A + HSI_EVENT_CONVERT_GLOBAL_TO_MM = 22, //"%lf{x},%lf{y},%lf{z}" "%lf{x},%lf{y},%lf{z}" + HSI_EVENT_CONVERT_ROT_TO_TABLE_POINT = 23, //"%lf{x},%lf{y},%lf{z}" "%lf{x},%lf{y},%lf{z}" + HSI_EVENT_CONVERT_ROT_OUT_TABLE_POINT = 24, //"%lf{x},%lf{y},%lf{z}" "%lf{x},%lf{y},%lf{z}" + HSI_EVENT_CONVERT_ROT_TO_TABLE_VECTOR = 25, //"%lf{x},%lf{y},%lf{z}" "%lf{x},%lf{y},%lf{z}" + HSI_EVENT_CONVERT_ROT_OUT_TABLE_VECTOR = 26, //"%lf{x},%lf{y},%lf{z}" "%lf{x},%lf{y},%lf{z}" + HSI_EVENT_ILLUMINATION_REFRESH = 27, + HSI_EVENT_ILLUMINATION_LOCK = 28, + HSI_EVENT_ILLUMINATION_STORE_SET = 29, + HSI_EVENT_ILLUMINATION_RESTORE_SET = 30, + HSI_EVENT_ILLUMINATION_DECREASE_ACTIVE = 31, // "%d" + HSI_EVENT_ILLUMINATION_INCREASE_ACTIVE = 32, // "%d" + HSI_EVENT_ILLUMINATION_DECREASE_ALL = 33, // "%d" + HSI_EVENT_ILLUMINATION_INCREASE_ALL = 34, // "%d" + HSI_EVENT_ILLUMINATION_SELECT_LAMP = 35, // "%d" + HSI_EVENT_ILLUMINATION_SET_LAMP_INTENSITY = 36, // "%d" + HSI_EVENT_ILLUMINATION_GET_LAMP_INTENSITY = 37, // "%d" + HSI_EVENT_ILLUMINATION_SET_LAMP_CALIBRATION_OVERRIDE = 38, // "%d" + HSI_EVENT_ILLUMINATION_NEXT_RING = 39, + HSI_EVENT_ILLUMINATION_PREV_RING = 40, + HSI_EVENT_ILLUMINATION_NEXT_SECTOR = 41, + HSI_EVENT_ILLUMINATION_PREV_SECTOR = 42, + HSI_EVENT_ILLUMINATION_NUM_LAMPS_INSTALLED = 43, + HSI_EVENT_ILLUMINATION_IS_LAMP_INSTALLED = 44, + HSI_EVENT_ILLUMINATION_APPLY = 45, + HSI_EVENT_ILLUMINATION_ALLOFF = 46, + HSI_EVENT_ILLUMINATION_ALLON = 47, + HSI_EVENT_ILLUMINATION_UNLOCK = 48, + HSI_EVENT_IS_PROGRAMMING_MODE = 49, //1/0 + HSI_EVENT_IS_PORTLOCK_DCC = 50, //1/0 + HSI_EVENT_IS_ROTAB_ENABLED = 51, //1/0 + HSI_EVENT_IS_TIME_CRITICAL = 52, // 1/0 + HSI_EVENT_CONVERT_MM_TO_GLOBAL = 53, + HSI_EVENT_CONVERT_GLOBAL_TO_MC = 54, + HSI_EVENT_LASER_FOCUS_ENABLE = 55, // "%d" 0 = not available, 1 = available + HSI_EVENT_MOVE_POINT = 56, //N/AN/A + HSI_EVENT_MAG_CHANGED = 57, + HSI_EVENT_ILLUMINATION_SET_LAMP_INTENSITY_IN_MACHINE_LEVELx100 = 58, + // "%d" //PR251359-- Instructed to "Please focus on slide" but it's rather unhelpfully turned the lights off for us. + HSI_EVENT_DCC_SCAN_POINTS_AVAILABLE = 59, //"%d"= more to come, 1 = last set N/A + HSI_EVENT_ILLUMINATION_IS_ALL_OFF = 60, + //1/0//PR253777-- Sensilight does not work if the target has 'ALL OFF' for illum setting--4/16/2008 + HSI_EVENT_ILLUMINATION_DECREASE_ALL_NONZERO = 61, + // Sensilight command that wont change a lamp currently set to zero + HSI_EVENT_ILLUMINATION_INCREASE_ALL_NONZERO = 62, + // Sensilight command that wont change a lamp currently set to zero22 + + HSI_EVENT_LP_QUALITY = 63, //"%d" 0-100% + HSI_EVENT_TP_QUALITY = 64, //"%d" 0-100% + HSI_EVENT_VP_QUALITY = 65, //"%d" 0-100% + + HSI_EVENT_FLYMODE_MOVE_COMPLETE = 66, // A queued flymode move has completed + HSI_EVENT_PENDANT_SPEED_PERCENT = 67, // 108336 HMV : Add calls to HSI.H for Speed + HSI_EVENT_PENDANT_AXES_SELECTED = 68, // 108335 HMV : Need to add calls to the HSI.H for Stacked Rotary + + HSI_EVENT_MOTION = 500, + HSI_EVENT_MOTION_DCC_HOME = 501, + HSI_EVENT_SHUTDOWN_ = 999 //N/AN/A + }; + + public enum HSI_NOTIFY_TYPE + { + HSI_NOTIFY_PROGRAM_EXECUTION_START = 0, + HSI_NOTIFY_PROGRAM_EXECUTION_STOP = 1, + + HSI_NOTIFY_TIME_CRITICAL_EVENT_START = 2, + HSI_NOTIFY_TIME_CRITICAL_EVENT_STOP = 3, + HSI_NOTIFY_PROGRAM_OPEN = 4, + HSI_NOTIFY_PROGRAM_CLOSE = 5, + HSI_NOTIFY_PCDMIS_SHUTDOWN = 6 + }; + + public enum HSI_EVENT_RESPONSE_TYPE + { + HSI_EVENT_CALLBACK = 0, + HSI_EVENT_RESPONSE_OK = 1, + HSI_EVENT_RESPONSE_RETRY = 2, + HSI_EVENT_RESPONSE_CANCEL = 3, + HSI_EVENT_RESPONSE_YES = 4, + HSI_EVENT_RESPONSE_NO = 5, + HSI_EVENT_FUNCTION_OK = 6, + HSI_EVENT_FUNCTION_FAILED = 7 + }; + + public struct SHsiEventProperties + { + public uint EventId; + public uint EventCallbackId; + public HSI_EVENT_TYPE EventType; + public HSI_EVENT_RESPONSE_TYPE EventResponse; + public char[] EventData; + + public void Init() + { + EventId = (uint)HSI_EVENT_FUNCTION_ID.HSI_EVENT_DONE; + EventCallbackId = 0; + EventType = HSI_EVENT_TYPE.HSI_EVENT_NONE; + EventResponse = HSI_EVENT_RESPONSE_TYPE.HSI_EVENT_CALLBACK; + EventData = new char[HSI_MaxStringLength + 1]; + } + }; + + + /////////////////////////////////////////////////////////////////////////////// + // Motion API + /////////////////////////////////////////////////////////////////////////////// + + public enum HSI_MOTION_TYPE + { + HSI_MOTION_SUPPORTS_DCC_CONTROL = 0x0001, + HSI_MOTION_SUPPORTS_MANUAL_CONTROL = 0x0002, + HSI_MOTION_SUPPORTS_HOMING = 0x0004, + HSI_MOTION_SUPPORTS_CIRCULAR_MOVES = 0x0008, + HSI_MOTION_SUPPORTS_CMM_WRIST = 0x0010, + HSI_MOTION_SUPPORTS_BUFFERED_MOVES = 0x0020, + HSI_MOTION_SUPPORTS_FLY_MOVES = 0x0040, + HSI_MOTION_SUPPORTS_SCAN = 0x0080, + HSI_MOTION_SUPPORTS_ALL_AXIS_MOVE = 0x0100, + HSI_MOTION_SUPPORTS_MEASPOINT_VW = 0x0200 + }; + + public enum HSI_MOTION_AXIS_TYPE + { + HSI_MOTION_AXIS_X = 0x0001, // This is the default "Sensor level" X Axis - use on single X axis machines + HSI_MOTION_AXIS_Y = 0x0002, // This is the default "Sensor level" Y Axis - use on single Y axis machines + HSI_MOTION_AXIS_Z = 0x0004, // This is the default "Sensor level" Z Axis - use on single Z axis machines + HSI_MOTION_AXIS_R = 0x0008, // This is the default "Sensor level" R Axis - use on single R axis machines + HSI_MOTION_AXIS_X1 = 0x0010, // This is the 1st X Axis - use on multiple axis machines when specific axis needed + HSI_MOTION_AXIS_Y1 = 0x0020, // This is the 1st Y Axis - use on multiple axis machines when specific axis needed + HSI_MOTION_AXIS_Z1 = 0x0040, // This is the 1st Z Axis - use on multiple axis machines when specific axis needed + HSI_MOTION_AXIS_R1 = 0x0080, // This is the 1st R Axis - use on multiple axis machines when specific axis needed + HSI_MOTION_AXIS_X2 = 0x0100, // This is the 2nd X Axis - use on multiple axis machines when specific axis needed + HSI_MOTION_AXIS_Y2 = 0x0200, // This is the 2nd Y Axis - use on multiple axis machines when specific axis needed + HSI_MOTION_AXIS_Z2 = 0x0400, // This is the 2nd Z Axis - use on multiple axis machines when specific axis needed + HSI_MOTION_AXIS_R2 = 0x0800, // This is the 2nd R Axis - use on multiple axis machines when specific axis needed + HSI_MOTION_AXIS_X3 = 0x1000, // This is the 3rd X Axis - use on multiple axis machines when specific axis needed + HSI_MOTION_AXIS_Y3 = 0x2000, // This is the 3rd Y Axis - use on multiple axis machines when specific axis needed + HSI_MOTION_AXIS_Z3 = 0x4000, // This is the 3rd Z Axis - use on multiple axis machines when specific axis needed + HSI_MOTION_AXIS_R3 = 0x8000 // This is the 3rd R Axis - use on multiple axis machines when specific axis needed + }; + + public enum HSI_MOTION_IO_TYPE + { + HSI_MOTION_INPUT = 0x0001, + HSI_MOTION_INPUT_LIMIT_SWITCH, + HSI_MOTION_INPUT_CH1,//固高、众为兴、EF1输入 + HSI_MOTION_INPUT_CH2, + HSI_MOTION_INPUT_CH3,//串口控制器输入 + HSI_MOTION_INPUT_CH4,//众为兴运动控制卡测试输入 + + HSI_MOTION_OUTPUT = 0x0100, + HSI_MOTION_OUTPUT_LASER_PEN, + HSI_MOTION_OUTPUT_CH1,//固高、众为兴、EF1输出 + HSI_MOTION_OUTPUT_CH2, + HSI_MOTION_OUTPUT_CH3,//串口控制器输出 + HSI_MOTION_OUTPUT_CH4//众为兴运动控制卡测试输出 + }; + + public const uint HSI_MOTION_AXIS_ALL = + (uint) + (HSI_MOTION_AXIS_TYPE.HSI_MOTION_AXIS_X | HSI_MOTION_AXIS_TYPE.HSI_MOTION_AXIS_Y | + HSI_MOTION_AXIS_TYPE.HSI_MOTION_AXIS_Z); + + public enum HSI_MOTION_MOVE_TYPE + { + HSI_MOTION_MOVE_WAIT = 1, + HSI_MOTION_MOVE_NOWAIT = 2, + HSI_MOTION_MOVE_INTERMEDIATE_POSITION = 3, + HSI_MOTION_MOVE_FINAL_POSITION = 4, + HSI_MOTION_IN_POSITION_EVENT = 5, + HSI_MOTION_MOVE_FLYMODE = 6, + HSI_MOTION_MOVE_START_POSITION = 7, + HSI_MOTION_MOVE_START_FINAL_POSITION = 8 + }; + + public enum HSI_MOTION_AXIS_R_MOVE_TYPE + { + HSI_MOTION_AXIS_R_CLOCKWISE = 1, + HSI_MOTION_AXIS_R_ANTICLOCKWISE = 2, + HSI_MOTION_AXIS_R_FASTEST = 3 + }; + + public enum HSI_SCAN_MOTION_TYPE + { + HSI_SCAN_MOTION_LINEAR = 1, + HSI_SCAN_MOTION_CIRCULAR, + + HSI_SCAN_MOTION_SPEC_LOCA = 100, //EF1 + HSI_SCAN_MOTION_EQ_DIS, + HSI_SCAN_MOTION_EQ_DIS_II, + HSI_SCAN_MOTION_LINEAR_TEST,//测试使用 + HSI_SCAN_MOTION_EQ_TEST,//测试使用 + HSI_SCAN_MOTION_MANUAL_TEST//测试使用 + + }; + public const int HSI_MAX_POSITIONS_STORED = 500; + + /////////////////////////////////////////////////////////////////////////////// + //Illumination API + /////////////////////////////////////////////////////////////////////////////// + public enum HSI_ILLUMINATION_INFO + { + HSI_ILLUMINATION_INFO_UNKNOWN = 0, + HSI_ILLUMINATION_INFO_HSI = 0x01, + HSI_ILLUMINATION_INFO_HSI_II = 0x02, //lvgang + HSI_ILLUMINATION_INFO_HSI_III = 0x04, //shixuyong + HSI_ILLUMINATION_INFO_TOTAL + }; + + public enum HSI_ILLUMINATION_BULB_TYPE + { + HSI_ILLUMINATION_BULB_ROUND = 1, + HSI_ILLUMINATION_BULB_SQUARE = 2, + HSI_ILLUMINATION_BULB_RING = 3, + HSI_ILLUMINATION_BULB_GRID = 4 + }; + + public enum HSI_ILLUMINATION_LAMP_TYPE + { + HSI_ILLUMINATION_LAMP_NONE = 0, + HSI_ILLUMINATION_LAMP_COAXIAL = 1, + HSI_ILLUMINATION_LAMP_SURFACE = 2, + HSI_ILLUMINATION_LAMP_PROFILE = 3, + HSI_ILLUMINATION_LAMP_PROFILE_OUTER = 4 + }; + + public enum HSI_ILLUMINATION_LAMP_CONTROL_TYPE + { + HSI_ILLUMINATION_LAMP_CONTROL_BY_WHOLE_LAMP = 0x0000, + HSI_ILLUMINATION_LAMP_CONTROL_BY_RINGS = 0x0001, + HSI_ILLUMINATION_LAMP_CONTROL_BY_OCTANTS = 0x0002, + HSI_ILLUMINATION_LAMP_CONTROL_BY_SEGMENTS = 0x0004, + HSI_ILLUMINATION_LAMP_CONTROL_BY_OTHER + }; + + public enum HSI_ILLUMINATION_BULB_STATE + { + HSI_ILLUMINATION_BULB_STATE_TURN_ON = 0, + HSI_ILLUMINATION_BULB_STATE_TURN_OFF = 1, + HSI_ILLUMINATION_BULB_STATE_TOTAL + }; + + public enum HSI_ILLUMINATION_TYPE + { + HSI_ILLUMINATION_SUPPORTS_DCC_CONTROL = 0x0001, + HSI_ILLUMINATION_SUPPORTS_MANUAL_CONTROL = 0x0002 + }; + + public enum HSI_ILLUMINATION_LAMP_LOCATION_TYPE + { + HSI_ILLUMINATION_LAMP_LOCATION_NONE = 0, + HSI_ILLUMINATION_LAMP_LOCATION_TOP_ON_AXIS = 1, + HSI_ILLUMINATION_LAMP_LOCATION_TOP_ANGLED = 2, + HSI_ILLUMINATION_LAMP_LOCATION_BOTTOM = 3, + HSI_ILLUMINATION_LAMP_LOCATION_MOVABLE = 4 + }; + + public const int HSI_ILLUMINATION_MAX_LAMPS = 6; + public const int HSI_ILLUMINATION_MAX_BULB_COLORS = 3; + public const int HSI_ILLUMINATION_MAX_RINGS = 12; + public const int HSI_ILLUMINATION_MAX_SECTORS = 16; + public const int HSI_ILLUMINATION_MAX_BULBS = HSI_ILLUMINATION_MAX_RINGS * HSI_ILLUMINATION_MAX_SECTORS; + + public const int HSI_MaxLampNameLength = 29, HSI_MaxLampDescriptionLength = 255; + // Maximum string length (buffer size - 1) + } +} \ No newline at end of file diff --git a/PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/HSI_ADT_8949_WPFTest/HSI_ADT_8949_WPFTest.csproj b/PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/HSI_ADT_8949_WPFTest/HSI_ADT_8949_WPFTest.csproj new file mode 100644 index 0000000..d182246 --- /dev/null +++ b/PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/HSI_ADT_8949_WPFTest/HSI_ADT_8949_WPFTest.csproj @@ -0,0 +1,139 @@ +锘 + + + + Debug + AnyCPU + {B8A11FDA-B82E-46F0-B496-7419C38018C3} + WinExe + Properties + HSI_ADT_8949_WPFTest + HSI_ADT_8949_WPFTest + v4.5 + 512 + {60dc8134-eba5-43b8-bcc9-bb4bc16c2548};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} + 4 + + + AnyCPU + true + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + + + AnyCPU + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + + + true + bin\x64\Debug\ + DEBUG;TRACE + full + x64 + prompt + MinimumRecommendedRules.ruleset + true + + + bin\x64\Release\ + TRACE + true + pdbonly + x64 + prompt + MinimumRecommendedRules.ruleset + true + + + + + + + + + + + + + + + 4.0 + + + + + + + + + + + MSBuild:Compile + Designer + + + Trigger.xaml + + + MSBuild:Compile + Designer + + + App.xaml + Code + + + + MainWindow.xaml + Code + + + MSBuild:Compile + Designer + + + + + Code + + + True + True + Resources.resx + + + True + Settings.settings + True + + + ResXFileCodeGenerator + Resources.Designer.cs + + + SettingsSingleFileGenerator + Settings.Designer.cs + + + + + + + + + \ No newline at end of file diff --git a/PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/HSI_ADT_8949_WPFTest/HSI_ADT_8949_WPFTest.csproj.user b/PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/HSI_ADT_8949_WPFTest/HSI_ADT_8949_WPFTest.csproj.user new file mode 100644 index 0000000..cba0b3d --- /dev/null +++ b/PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/HSI_ADT_8949_WPFTest/HSI_ADT_8949_WPFTest.csproj.user @@ -0,0 +1,6 @@ +锘 + + + true + + \ No newline at end of file diff --git a/PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/HSI_ADT_8949_WPFTest/MainWindow.xaml b/PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/HSI_ADT_8949_WPFTest/MainWindow.xaml new file mode 100644 index 0000000..3b0094e --- /dev/null +++ b/PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/HSI_ADT_8949_WPFTest/MainWindow.xaml @@ -0,0 +1,221 @@ +锘 + + + + + + + + + + + + + + + + + +