diff --git a/PcDmis/Base/Interfac/Msi/Hsi/SevenOcean/SO7_Proto.cpp b/PcDmis/Base/Interfac/Msi/Hsi/SevenOcean/SO7_Proto.cpp index 4d6b8fc..28249d5 100644 --- a/PcDmis/Base/Interfac/Msi/Hsi/SevenOcean/SO7_Proto.cpp +++ b/PcDmis/Base/Interfac/Msi/Hsi/SevenOcean/SO7_Proto.cpp @@ -2719,10 +2719,11 @@ SSI_STATUS_MOTION CSO7_Proto::_process_replay_capture_commands(char *inBuff, FIL }; //****************************************************************************** -usb_dev_handle* CSO7_Proto::_open_usb_dev(void) +usb_dev_handle* CSO7_Proto::_open_usb_dev(unsigned short sSeqNumber) { struct usb_bus *bus = NULL; struct usb_device *dev = NULL; + usb_dev_handle *udev = NULL; for (bus = usb_get_busses(); bus; bus = bus->next) { @@ -2730,13 +2731,51 @@ usb_dev_handle* CSO7_Proto::_open_usb_dev(void) { if (dev->descriptor.idVendor == SEVENOCEAN_VID && dev->descriptor.idProduct == SEVENOCEAN_PID) { - return usb_open(dev); + udev = usb_open(dev); + usb_claim_interface(udev, 0); + + if(Get_SeqNumber(udev) != sSeqNumber) + { + usb_close(udev); + } + else + { + return udev; + } } } } return NULL; } +//****************************************************************************** +int CSO7_Proto::Get_SeqNumber(usb_dev_handle *udev) +{ + 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_SEQ_NUMBER; + + 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); + 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 (_ret < 0) + { + return -1; + } + g_machine.SEQ_NUMBER = -1; + g_machine.SEQ_NUMBER = *(ep_buff[EP_82_DATA_IDX]._buffer); + return g_machine.SEQ_NUMBER; +} + //****************************************************************************** // Send is direct and async. // The receive thread will receive data and interpret it. @@ -2754,8 +2793,8 @@ SSI_STATUS_MOTION CSO7_Proto::Init_SO7Usb() int usb_status = NULL; usb_init(); // initialize the library usb_status = usb_find_busses(); // find all busses - usb_status = usb_find_devices(); // find all connected devices - g_dev = _open_usb_dev(); + usb_status = usb_find_devices(); // find all connected devices + g_dev = _open_usb_dev(USB_SEQ_NUMBER); if (!g_dev) { MessageBox(NULL, _T("Unable to open device"), _T("Message"), MB_OK|MB_ICONERROR); diff --git a/PcDmis/Base/Interfac/Msi/Hsi/SevenOcean/SO7_Proto.h b/PcDmis/Base/Interfac/Msi/Hsi/SevenOcean/SO7_Proto.h index 95d9c1a..68361bb 100644 --- a/PcDmis/Base/Interfac/Msi/Hsi/SevenOcean/SO7_Proto.h +++ b/PcDmis/Base/Interfac/Msi/Hsi/SevenOcean/SO7_Proto.h @@ -22,6 +22,7 @@ #define USB_DEVICE_DESCRIPTOR_TYPE 1 #define USB_CONFIGURATION_DESCRIPTOR_TYPE 2 +#define USB_SEQ_NUMBER 0 #define THREAD_RUNNING_STATE1 0 #define THREAD_RUNNING_STATE2 2 @@ -337,10 +338,11 @@ public: static struct_so7_machine g_machine; + int Get_SeqNumber(usb_dev_handle *udev); SSI_STATUS_MOTION Init_SO7Usb(); SSI_STATUS_MOTION Exit_SO7Usb(); - usb_dev_handle* _open_usb_dev(void); + usb_dev_handle* _open_usb_dev(unsigned short sSeqNumber); SSI_STATUS_MOTION _do_single_threaded_usb_comm(int iEP); SSI_STATUS_MOTION _read_data_8x(int iEP_Base); diff --git a/PcDmis/Base/Interfac/Msi/Hsi/SevenOcean/SO7_Proto_Aux.cpp b/PcDmis/Base/Interfac/Msi/Hsi/SevenOcean/SO7_Proto_Aux.cpp new file mode 100644 index 0000000..eb9a2d1 --- /dev/null +++ b/PcDmis/Base/Interfac/Msi/Hsi/SevenOcean/SO7_Proto_Aux.cpp @@ -0,0 +1,752 @@ + + +#include "stdafx.h" +#include "SO7_Proto_Aux.h" +#include "math.h" + + + +#define MY_CONFIG 1 +#define MAX_DEVPATH_LENGTH 256 +#define ENDPOINT_TIMEOUT 500 +#define MAX_IN_BUFF_SIZE 1024 + +//***** Static Data ***** +static char *outBuff = NULL; +struct_so7_r_ep_buff CSO7_Proto_Aux::ep_buff[lEPSIZE]; +//================================================================ +int CSO7_Proto_Aux::g_hEP8x_Thread_State=THREAD_PAUSED; +HANDLE CSO7_Proto_Aux::g_hEP8x_Thread_Id=NULL; + +//================================================================ +int CSO7_Proto_Aux::g_hEP02_Thread_State=THREAD_PAUSED; +HANDLE CSO7_Proto_Aux::g_hEP02_Thread_Id=NULL; +HANDLE CSO7_Proto_Aux::g_hEP02_Serial_Mutex; + +//================================================================ +struct_so7_r_machine CSO7_Proto_Aux::g_machine; +usb_dev_handle *CSO7_Proto_Aux::g_dev=NULL; +CLogger *CSO7_Proto_Aux::g_pLogger1; +HANDLE CSO7_Proto_Aux::g_hHomedEvent = NULL; +CLogger* g_pLog1=NULL; + +//****************************************************************************** +CSO7_Proto_Aux::CSO7_Proto_Aux() +{ + ep_buff[EP_01_CMD_IDX]._ep = EP_S07_01; + ep_buff[EP_81_DATA_IDX]._ep = EP_S07_81; + ep_buff[EP_02_CMD_IDX]._ep = EP_S07_02; + ep_buff[EP_82_DATA_IDX]._ep = EP_S07_82; + + for (int i=0;iSend(_T("Construct Cso7_Proto.\r\n")); +}; + +//****************************************************************************** +CSO7_Proto_Aux::~CSO7_Proto_Aux() +{ + for (int i=0;iSend(_T("Destruct Cso7_Proto.\r\n")); + delete g_pLogger1; + g_pLogger1 = NULL; +} + +#pragma warning(disable:4996) +//****************************************************************************** +// Send is direct and async. +// The receive thread will receive data and interpret it. +//****************************************************************************** +SSI_STATUS_MOTION CSO7_Proto_Aux::Init_SO7Usb() +{ + //Set initial state of the machine + g_machine.s_rstatus._machine_running = false; + SSI_STATUS_MOTION rStatus=SSI_STATUS_MOTION_NORMAL; + g_machine.IsOffline=FALSE; + + int usb_status = NULL; + usb_init(); // initialize the library + usb_status = usb_find_busses(); // find all busses + usb_status = usb_find_devices(); // find all connected devices + g_dev = _open_usb_dev(USB_R_SEQ_NUMBER); + if (!g_dev) + { + MessageBox(NULL, _T("Unable to open device"), _T("Message"), MB_OK|MB_ICONERROR); + g_pLogger1->SendAndFlushPerMode(_T("Unable to open device %s \r\n"), usb_strerror()); + g_machine.IsOffline=TRUE; + rStatus= SSI_STATUS_MOTION_DATALINK_ERROR; + } + else if (usb_set_configuration(g_dev, MY_CONFIG) < 0) + { + MessageBox(NULL, _T("Unable to SET CONFIGURATION"), _T("Message"), MB_OK|MB_ICONERROR); + g_machine.IsOffline=TRUE; + rStatus=SSI_STATUS_MOTION_DATALINK_ERROR; + } + else if (usb_claim_interface(g_dev, 0) < 0) + { + usb_close(g_dev); + MessageBox(NULL, _T("Unable to CLAIM DEVICE"), _T("Message"), MB_OK|MB_ICONERROR); + g_machine.IsOffline=TRUE; + rStatus=SSI_STATUS_MOTION_DATALINK_ERROR; + } + + g_pLogger1->SendAndFlushPerMode(_T("Init:Open device succeed .\r\n")); + + // ******************************************************************** + // 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; + + // ******************************************************************** + // 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 + + return rStatus; +} + +//****************************************************************************** +SSI_STATUS_MOTION CSO7_Proto_Aux::Exit_SO7Usb() +{ + SSI_STATUS_MOTION Status=SSI_STATUS_MOTION_NORMAL; + + g_hEP8x_Thread_State = THREAD_EXIT; + g_hEP02_Thread_State = THREAD_EXIT; + + SetEvent(ep_buff[EP_82_DATA_IDX]._event); + if (g_hEP8x_Thread_Id) + { + DWORD dwCode = STILL_ACTIVE; + while (dwCode == STILL_ACTIVE) + { + GetExitCodeThread(g_hEP8x_Thread_Id,&dwCode); + Sleep(1); + } + } + + SetEvent(ep_buff[EP_02_CMD_IDX]._event); + if (g_hEP02_Thread_Id) + { + DWORD dwCode = STILL_ACTIVE; + while (dwCode == STILL_ACTIVE) + { + GetExitCodeThread(g_hEP02_Thread_Id,&dwCode); + Sleep(1); + } + } + + 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); + CloseHandle(ep_buff[EP_02_CMD_IDX]._event); + g_hEP02_Thread_State = THREAD_EXIT; + ReleaseMutex(g_hEP02_Serial_Mutex); + CloseHandle(g_hEP02_Serial_Mutex); + + g_pLogger1->SendAndFlushPerMode(_T("Exit: Exit_SO7Usb \r\n")); + return Status; +} + +//****************************************************************************** +usb_dev_handle* CSO7_Proto_Aux::_open_usb_dev(unsigned short sSeqNumber) +{ + struct usb_bus *bus = NULL; + struct usb_device *dev = NULL; + usb_dev_handle *udev = NULL; + + for (bus = usb_get_busses(); bus; bus = bus->next) + { + for (dev = bus->devices; dev; dev = dev->next) + { + if (dev->descriptor.idVendor == SEVENOCEAN_VID && dev->descriptor.idProduct == SEVENOCEAN_PID) + { + udev = usb_open(dev); + usb_claim_interface(udev, 0); + + if(Get_R_SeqNumber(udev) != sSeqNumber) + { + usb_close(udev); + } + else + { + return udev; + } + } + } + } + return NULL; +} + +//****************************************************************************** +int CSO7_Proto_Aux::Get_R_SeqNumber(usb_dev_handle *udev) +{ + 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_SEQ_NUMBER; + + 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); + 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 (_ret < 0) + { + return -1; + } + + g_machine.SEQ_NUMBER = -1; + g_machine.SEQ_NUMBER = *(ep_buff[EP_82_DATA_IDX]._buffer); + return g_machine.SEQ_NUMBER; +} + +//=========================================================================== +// Worker Thread to serialize EP_S07_02 commands. +//=========================================================================== +unsigned __stdcall CSO7_Proto_Aux::g_EP02_Thread(LPVOID pThis) +{ + CSO7_Proto_Aux* _This = (CSO7_Proto_Aux*)pThis; + for (;;) + { + if (g_hEP02_Thread_State == THREAD_EXIT) + ExitThread(0); + WaitForSingleObject(ep_buff[EP_02_CMD_IDX]._event,INFINITE); + switch (g_hEP02_Thread_State) + { + case THREAD_EXIT: + { + ExitThread(0); + } + case THREAD_PAUSED: + break; + case THREAD_RUNNING_STATE1: + { + _This->_send_usb_cmd(EP_02_CMD_IDX); + break; + } + case THREAD_RUNNING_STATE2: + { + _This->_write_usb_data_only(EP_02_CMD_IDX); + break; + } + default: + ExitThread(0); + } + }; + g_hEP02_Thread_State = THREAD_EXIT; + ExitThread(0); +}; + +//****************************************************************************** +// This is the worker thread to process USBD_TRANSFER_DIRECTION_IN +//****************************************************************************** +unsigned __stdcall CSO7_Proto_Aux::g_EP8x_Thread(LPVOID pThis) +{ + CSO7_Proto_Aux* _This = (CSO7_Proto_Aux*)pThis; + for (;;) + { + if (g_hEP8x_Thread_State == THREAD_EXIT) + ExitThread(0); + WaitForSingleObject(ep_buff[EP_82_DATA_IDX]._event, INFINITE); + switch (g_hEP8x_Thread_State) + { + case THREAD_EXIT: + { + ExitThread(0); + } + case THREAD_PAUSED: + break; + case THREAD_RUNNING_STATE1: + { + _This->_read_data_8x(EP_81_DATA_IDX); + break; + } + case THREAD_RUNNING_STATE2: + { + _This->_read_data_8x(EP_82_DATA_IDX); + break; + } + default: + ExitThread(0); + } + } +} + +//=============================================================================== +// _send_usb_cmd(iEP) sends data to the corresponding iEP channel. +// iEP = EP_S07_01 / EP_S07_02 EP_S07_01 = 0x01; EP_S07_02 = 0x02; +//=============================================================================== +SSI_STATUS_MOTION CSO7_Proto_Aux::_send_usb_cmd(int iEP_Base) +{ + if (g_machine.IsOffline) + { + SetEvent(ep_buff[iEP_Base+1]._event); + ep_buff[iEP_Base]._hProtoPending = false; + return SSI_STATUS_MOTION_NORMAL; + } + int _ret; + ep_buff[iEP_Base]._save_send_cmd = ep_buff[iEP_Base]._buffer[0]; + ep_buff[iEP_Base]._save_send_cmd0 = ep_buff[iEP_Base]._buffer[1]; + ep_buff[iEP_Base]._save_send_cmd1 = ep_buff[iEP_Base]._buffer[2]; + + _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; + } + + SetEvent(ep_buff[iEP_Base+1]._event); + ep_buff[iEP_Base]._hProtoPending = false; + return SSI_STATUS_MOTION_NORMAL; +} + +//=============================================================================== +// _write_usb_data_only(iEP) sends data to the corresponding iEP channel.No need to +//process the reap async +// iEP = EP_S07_01 / EP_S07_02 EP_S07_01 = 0x01; EP_S07_02 = 0x02; +//=============================================================================== +SSI_STATUS_MOTION CSO7_Proto_Aux::_write_usb_data_only(int iEP_Base) +{ + if (g_machine.IsOffline) + { + ep_buff[iEP_Base]._hProtoPending = false; + ep_buff[iEP_Base+1]._hProtoPending = false; + return SSI_STATUS_MOTION_NORMAL; + } + int _ret; + ep_buff[iEP_Base]._save_send_cmd = ep_buff[iEP_Base]._buffer[0]; + ep_buff[iEP_Base]._save_send_cmd0 = ep_buff[iEP_Base]._buffer[1]; + ep_buff[iEP_Base]._save_send_cmd1 = ep_buff[iEP_Base]._buffer[2]; + + //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 (_ret < 0) + { + TRACE("Write Timeout \n"); + ASSERT(0); + return SSI_STATUS_MOTION_TIMEOUT; + } + ep_buff[iEP_Base]._hProtoPending = false; + ep_buff[iEP_Base+1]._hProtoPending = false; + return SSI_STATUS_MOTION_NORMAL; +} + +//=============================================================================== +// iEP_Base : EP_81_DATA_IDX/EP_82_DATA_IDX +//=============================================================================== +SSI_STATUS_MOTION CSO7_Proto_Aux::_read_data_8x(int iEP_Base) +{ + if (g_machine.IsOffline) + { + ep_buff[EP_82_DATA_IDX]._hProtoPending = false; + ep_buff[EP_01_CMD_IDX]._hProtoPending = false; + ep_buff[EP_81_DATA_IDX]._hProtoPending = false; + return SSI_STATUS_MOTION_NORMAL; + } + if (iEP_Base == EP_82_DATA_IDX) + { + 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 (_ret > 0) + { + _process_rcv_transfer_data(iEP_Base); + ep_buff[EP_82_DATA_IDX]._hProtoPending = false; + } + else + { + TRACE1("Read Timeout %xx\n", *((char *)ep_buff[iEP_Base]._buffer)); + ASSERT(0); + return SSI_STATUS_MOTION_TIMEOUT; + } + return SSI_STATUS_MOTION_NORMAL; + } + else + { + int _ret; + _ret = usb_interrupt_read(g_dev, ep_buff[iEP_Base]._ep, (char *)ep_buff[iEP_Base]._buffer,(int) ep_buff[iEP_Base]._size, 20); + if (_ret > 0) + { + _process_rcv_transfer_data(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)); + } + + ep_buff[EP_01_CMD_IDX]._hProtoPending = false; + ep_buff[EP_81_DATA_IDX]._hProtoPending = false; + return SSI_STATUS_MOTION_NORMAL; + } +} + +//****************************************************************************** +// Parse the data received based on the index (which EP are we processing). +// The CCmdObj should only have one CMD_STATUS_PROCESSING. +// Update CCmdObj _ep_01_status and _ep_81_status. +// Update _status to CMD_STATUS_COMPLETE when both _ep_01_status and _ep_81_status +// are CMD_STATUS_COMPLETE. +// +//****************************************************************************** +void CSO7_Proto_Aux::_process_rcv_transfer_data(int iEP) +{ + switch (iEP) + { + case EP_01_CMD_IDX : + TRACE0("_process_rcv_transfer_data() : Update EP_01_CMD_IDX.\r\n"); + break; + case EP_82_DATA_IDX : // + if(ep_buff[EP_02_CMD_IDX]._save_send_cmd == CT_DATA) + { + switch (ep_buff[EP_02_CMD_IDX]._save_send_cmd0) + { + case CT_READ_AXISXYZ: + _process_SO7_CMD_READ_AXIS_R(); + break; + case CT_READ_SEC_REALY: + _process_SO7_CMD_READ_ZSIGNAL_POS_R(); + 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]); + break; + }; + } + break; + case EP_02_CMD_IDX : + TRACE0("_process_rcv_transfer_data() : Update EP_02_CMD_IDX.\r\n"); + break; + case EP_81_DATA_IDX : + + TRACE0("_process_rcv_transfer_data() : Update EP_81_DATA_IDX.\r\n"); + break; + default: + break; + }; +}; + +//****************************************************************************** +// Kick the g_hEP01_Thread_Event to get the g_EP01_Thread going. +// iEP = EP_S07_01 or EP_S07_02 = 0x01 or 0x02 +//****************************************************************************** +SSI_STATUS_MOTION CSO7_Proto_Aux::_do_single_threaded_usb_comm(int iEP_Base) +{ + while ((ep_buff[iEP_Base]._hProtoPending == TRUE) || (ep_buff[iEP_Base+1]._hProtoPending == TRUE)) + { + ASSERT(0); + Sleep(3); + } + ep_buff[iEP_Base]._hProtoPending = ep_buff[iEP_Base+1]._hProtoPending = TRUE; + + if (iEP_Base == EP_01_CMD_IDX) + SetEvent(ep_buff[EP_82_DATA_IDX]._event); + else + SetEvent(ep_buff[iEP_Base]._event); + while ((ep_buff[iEP_Base]._hProtoPending == TRUE) || (ep_buff[iEP_Base+1]._hProtoPending == TRUE)) + { + Sleep(3); + } + + return SSI_STATUS_MOTION_NORMAL; +} + +//============================================================== +SSI_STATUS_MOTION CSO7_Proto_Aux::_process_SO7_CMD_READ_AXIS_R() +{ + g_machine.r._scale_pos._long_=0; + g_machine.r._scale_pos._char_[2] = *(ep_buff[EP_82_DATA_IDX]._buffer); + g_machine.r._scale_pos._char_[1] = *(ep_buff[EP_82_DATA_IDX]._buffer+1); + g_machine.r._scale_pos._char_[0] = *(ep_buff[EP_82_DATA_IDX]._buffer+2); + g_machine.r._scale_pos._char_[3] = 0; + if (g_machine.r._scale_pos._long_ > 8388608) + g_machine.r._scale_pos._long_ = g_machine.r._scale_pos._long_ - 16777216; + + return SSI_STATUS_MOTION_NORMAL; +}; + +//============================================================== +SSI_STATUS_MOTION CSO7_Proto_Aux::_process_SO7_CMD_READ_ZSIGNAL_POS_R() +{ + g_machine.r._ZSignal_pos._char_[2] = *(ep_buff[EP_82_DATA_IDX]._buffer); + g_machine.r._ZSignal_pos._char_[1] = *(ep_buff[EP_82_DATA_IDX]._buffer+1); + g_machine.r._ZSignal_pos._char_[0] = *(ep_buff[EP_82_DATA_IDX]._buffer+2); + g_machine.r._ZSignal_pos._char_[3] = 0; + + if (g_machine.r._ZSignal_pos._long_ > 8388608) + g_machine.r._ZSignal_pos._long_=g_machine.r._ZSignal_pos._long_-16777216; + + return SSI_STATUS_MOTION_NORMAL; +} + +//============================================================== +SSI_STATUS_MOTION CSO7_Proto_Aux::_send_cmd_SO7_CMD_RESET_R(int iType) +{ + iType++; + 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_SCALE; + *(ep_buff[EP_02_CMD_IDX]._buffer+1) = CT_SET_RESET_FLAG; + *(ep_buff[EP_02_CMD_IDX]._buffer+2) = 0x01; + + ep_buff[EP_02_CMD_IDX]._size = 0x03; + ep_buff[EP_82_DATA_IDX]._size = 0x02; + + 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_Aux::_send_cmd_SO7_CMD_MOVE_R(int iType, int iMoveAngle) +{ + WaitForSingleObject(g_hEP02_Serial_Mutex, INFINITE); + memset(ep_buff[EP_02_CMD_IDX]._buffer, 0x00, MAX_BUFF_SIZE); + + g_machine.r._pos_fixed._long_ = (ONE_R_PULSE * iMoveAngle / 360); + *(ep_buff[EP_02_CMD_IDX]._buffer) = CT_MOTOR; + if(iType) + { + *(ep_buff[EP_02_CMD_IDX]._buffer+1) = CT_MOVETOY; + } + else + { + *(ep_buff[EP_02_CMD_IDX]._buffer+1) = CT_MOVETOX; + } + *(ep_buff[EP_02_CMD_IDX]._buffer+2)=(((g_machine.r._pos_fixed._char_[3])<0x80)?(g_machine.r._pos_fixed._char_[2]):((g_machine.r._pos_fixed._char_[2])|0x80));//最高位 + *(ep_buff[EP_02_CMD_IDX]._buffer+3)=(g_machine.r._pos_fixed._char_[1]); + *(ep_buff[EP_02_CMD_IDX]._buffer+4)=(g_machine.r._pos_fixed._char_[0]); + + ep_buff[EP_02_CMD_IDX]._size = 0x07; + ep_buff[EP_81_DATA_IDX]._size = 0x07; + + 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_Aux::_send_cmd_SO7_CMD_READ_AXIS_R() +{ + 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_AXISXYZ; + *(ep_buff[EP_02_CMD_IDX]._buffer+2)=0x00; + + ep_buff[EP_02_CMD_IDX]._size = 0x03; + ep_buff[EP_82_DATA_IDX]._size = 0x09; + + 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_Aux::_send_cmd_SO7_CMD_READ_ZSIGNAL_POS_R(int iType) +{ + 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; + if(iType) + { + *(ep_buff[EP_02_CMD_IDX]._buffer+1) = CT_READ_SEC_REALY; + } + else + { + *(ep_buff[EP_02_CMD_IDX]._buffer+1) = CT_READ_SEC_REALX; + } + *(ep_buff[EP_02_CMD_IDX]._buffer+2)=0; + + ep_buff[EP_02_CMD_IDX]._size = 0x03; + ep_buff[EP_82_DATA_IDX]._size = 0x03; + + 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; +} + +//****************************************************************************** +long CSO7_Proto_Aux::GetRCurrentPosition(int iType) +{ + long ztos = -1; + _send_cmd_SO7_CMD_READ_AXIS_R(); + _send_cmd_SO7_CMD_READ_ZSIGNAL_POS_R(iType); + ztos = abs(g_machine.r._scale_pos._long_ - g_machine.r._ZSignal_pos._long_); + if(ztos > 8388608) + { + ztos = ztos - 9413433; + } + + return (ztos * 360 / 4720000); +} + + +//============================================================== +SSI_STATUS_MOTION CSO7_Proto_Aux::_send_cmd_SO7_CMD_STOP_R(int iType) +{ + iType++; + 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_MOTOR; + *(ep_buff[EP_02_CMD_IDX]._buffer+1) = CT_STOPA; + *(ep_buff[EP_02_CMD_IDX]._buffer+2)=0x00; + + TRACE("[STOP_R]\n"); + + ep_buff[EP_02_CMD_IDX]._size = 0x04; + ep_buff[EP_81_DATA_IDX]._size = 0x04; + + 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_Aux::_send_cmd_SO7_CMD_SET_SEQ_NUMBER() +{ + 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_SEQ_NUMBER; + *(ep_buff[EP_02_CMD_IDX]._buffer+2)=g_machine.SEQ_NUMBER; + + ep_buff[EP_02_CMD_IDX]._size = 0x03; + ep_buff[EP_81_DATA_IDX]._size = 0x45; + + 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; +} \ No newline at end of file diff --git a/PcDmis/Base/Interfac/Msi/Hsi/SevenOcean/SO7_Proto_Aux.h b/PcDmis/Base/Interfac/Msi/Hsi/SevenOcean/SO7_Proto_Aux.h new file mode 100644 index 0000000..25e08be --- /dev/null +++ b/PcDmis/Base/Interfac/Msi/Hsi/SevenOcean/SO7_Proto_Aux.h @@ -0,0 +1,304 @@ +// protocol for control SevenOcean's Machine +// +////////////////////////////////////////////////////////////////////// +#ifndef AFX_SO7_Proto_Aux_H__B422904C_2CEB_495B_B7BD_B45AB30286DD__INCLUDED_ + #define AFX_SO7_Proto_Aux_H__B422904C_2CEB_495B_B7BD_B45AB30286DD__INCLUDED_ + +#if _MSC_VER > 1000 + #pragma once +#endif // _MSC_VER > 1000 + +#include "..\Tools\UsbUtility\logger.h" +#include "CMD_H.h" +#include "..\..\..\..\..\ThirdParty\UsbSupport\LibUsb_Win\Include\lusb0_usb.h" +#include "..\MicroVu\SsiStatus.h" + +#define MAX_BUFF_SIZE 0x200 +#define USB_R_SEQ_NUMBER 1 +#define RSPEEDGEAR 1 +#define ONE_R_PULSE 590000 +#define TYPER1 0 +#define TYPER2 1 + +#define USB_ENDPOINT_TYPE_CONTROL 0 +#define USB_ENDPOINT_TYPE_ISOCHRONOUS 1 +#define USB_ENDPOINT_TYPE_BULK 2 +#define USB_ENDPOINT_TYPE_INTERRUPT 3 + +#define USB_DEVICE_DESCRIPTOR_TYPE 1 +#define USB_CONFIGURATION_DESCRIPTOR_TYPE 2 + +#define THREAD_RUNNING_STATE1 0 +#define THREAD_RUNNING_STATE2 2 +#define THREAD_PAUSED 1 +#define THREAD_EXIT -1 + +// Device configuration and interface id. +#define SO7_USB_CONFIG 1 +#define SO7_USB_INTF 0 + +#define EP_S07_01 0x01 +#define EP_S07_02 0x02 +#define EP_S07_03 0x03 +#define EP_S07_81 0x81 +#define EP_S07_82 0x82 +#define EP_S07_84 0x84 + +#define EP_01_CMD_IDX 0 // index to usb buffers +#define EP_81_DATA_IDX 1 // +#define EP_02_CMD_IDX 2 // +#define EP_82_DATA_IDX 3 // +#define EP_03_CMD_IDX 4 // +#define EP_84_DATA_IDX 5 // + +#define lEPSIZE 6 +#define MAXRINGS 5 // for MicroVu Vertex 220 +#define MAXSEGS 8 + +#define TWO_RINGS 2 +#define EIGHT_SEGS 8 +#define FIVE_RINGS 5 + +enum EMACHINERTYPE +{ + MACHINE_SO7_R_CONTROLLER, + MACHINE_METRONICS_CONTROLLER_R, + MACHINE_TOTAL_R=255 +}; +enum EFirmwareRVer +{ + FirmwareVer_3_X_R=0, + FirmwareVer_6_X_R, + FirmwareVer_Total_R +}; + +#pragma pack(push) +#pragma pack(1) +//**************************************************************************************************** +// Set the _status to Idle after reply data has been received. +// How to recover? In order to send data, _status must be Idle. If the system is not available +// for 1 second, assume something wrong and treat it as "TimeOut". +// Another way to do this is to lock this structure is to use a mutex to ensure single-threaded +// access. +//**************************************************************************************************** +//==================================================================================================== + +typedef struct s_so7_r_axis // axis parameters +{ + char _Move_Speed_Gear; + char _MoveTo_Speed_Gear; + union + { + long _long_; + char _char_[4]; + }_pos_fixed; + union + { + long _long_; + char _char_[4]; + }_scale_pos; + union + { + long _long_; + char _char_[4]; + }_ZSignal_pos; + double _d_cur_pos_; + long _scale_probe; + double _dSet_Zero_Pos; + long _lSet_Zero_Pos; +} SO7RAXIS; + +struct s_so7_r_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 _MoveToSpeed[2]; + double _MotionSpeedScale; + + long _scale_range; + double _neg_working_limit; + double _pos_working_limit; + double _scale_resolution; + bool _bhomed; +}; + +struct s_so7_r_machine_interface_config +{ + BOOL _EnCloseLoop; + int _RetryTimes; + double _ShiftPositionR; + char GetInterruptMsgMethod; + INT m_WriteDataSleepTime; + INT m_AccuraErrPulseR; + INT m_EQUIDIS_R; + INT m_SDK3000_CntThreadSleepVal; + INT m_SV4000E_DenoisePara[4]; + INT m_MachineType; + INT m_VideoCardType; +}; + +//====================== +typedef struct s_so7_r +{ + bool bFast; + long from; + long to; + long speed; + long acc; + long dec; + double dFromMM; + double dToMM; +} SO7RAXISMOVE; +//-------------------------------------------------------------------- +// +//-------------------------------------------------------------------- +struct struct_so7_r_machine +{ // g_machine structure + struct s_machine_r_config + { + double _dRSpeed[2]; + + struct s_so7_r_axis_config r_axis; + struct s_so7_r_machine_interface_config motion; + } s_machine_r_config; + + struct s_rstatus + { + bool _homed; + bool _machine_running; + bool _bRMoving; + char _bIsZMMotionFinished; + bool _bRIdle; + } s_rstatus; + + char ADC_Number; + int ADC_Value; + char Sys_Reset_Flag; + char cVerNumber; + char InterruptFlag[2]; + char FPGAData; + char InPortStatus; + int _motor_pulse_num; + char FirmwareInfo[10]; + int FirmwareVer; + char GetInterruptMsg[20][2]; + BOOL IsOffline; + BOOL IsSupportReadInterrputMsg; + double dRotaryCirclDis; + char SEQ_NUMBER; + struct s_so7_r_axis r; + struct s_so7_r_axis r1; +}; + +#define SEVENOCEAN_VID 0x4532 +#define SEVENOCEAN_PID 0x5567 +//**************************************************************************************************** +// Binary SevenOcean command structure, out going +// +//**************************************************************************************************** +#define pSO7_CMD_02 ((s_SO7_CMD_BUFF_02 *) ep_buff[EP_02_CMD_IDX]._buffer) + +struct s_SO7_R_CMD_BUFF_02 +{ + UCHAR uCmdByte; + union + { + struct + { + BYTE uSubCmdByte; + char data[12]; + }s_SO7_CMD_MOVE_TO_XYZ; + struct + { + BYTE uSubCmdByte; + char data[12]; + }s_SO7_CMD_MOVETOXYZV; + struct + { + BYTE uSubCmdByte; + BYTE uStartCmdByte; + char _bottom_light; + char _top_light; + char _ring_light; + char _coaxial_light; + char _spare_light1; + char _outer_ring_light_switch; + char _inner_ring_light_switch; + BYTE uEndCmdByte; + }s_SO7_CMD_SET_LIGHT; + }; +}; + +#pragma pack(pop) + +//====================== +struct struct_so7_r_ep_buff +{ + int _ep; + BYTE _save_send_cmd; + BYTE _save_send_cmd0; + BYTE _save_send_cmd1; + char *_buffer; // MAX_BUFF_SIZE + int _size; + void *_async_context; + BOOL _hProtoPending; + HANDLE _event; +}; + +//====================================================================================== +class CSO7_Proto_Aux +{ +public: + // EP 81/82 channel threads. + static int g_hEP8x_Thread_State; + static unsigned __stdcall g_EP8x_Thread(LPVOID pThis); + static HANDLE g_hEP8x_Thread_Id; + + // EP 02channel threads. + static int g_hEP02_Thread_State; + static unsigned __stdcall g_EP02_Thread(LPVOID pThis); + static HANDLE g_hEP02_Thread_Id; + static HANDLE g_hEP02_Serial_Mutex; // EP02 + + static HANDLE g_hHomedEvent; + + static struct_so7_r_ep_buff ep_buff[lEPSIZE]; + static struct_so7_r_machine g_machine; + + static CLogger* g_pLogger1; + static usb_dev_handle *g_dev; + bool m_bHomingActive; + + // + CSO7_Proto_Aux(); + virtual ~CSO7_Proto_Aux(); + + // Global Structures + SSI_STATUS_MOTION Init_SO7Usb(); + SSI_STATUS_MOTION Exit_SO7Usb(); + + usb_dev_handle* _open_usb_dev(unsigned short sSeqNumber); + int Get_R_SeqNumber(usb_dev_handle *udev); + SSI_STATUS_MOTION _send_usb_cmd(int iEP_Base); + SSI_STATUS_MOTION _write_usb_data_only(int iEP_Base); + SSI_STATUS_MOTION _read_data_8x(int iEP_Base); + static void _process_rcv_transfer_data(int iEP); + SSI_STATUS_MOTION _do_single_threaded_usb_comm(int iEP); + + static SSI_STATUS_MOTION _process_SO7_CMD_READ_AXIS_R(); + static SSI_STATUS_MOTION _process_SO7_CMD_READ_ZSIGNAL_POS_R(); + SSI_STATUS_MOTION _send_cmd_SO7_CMD_RESET_R(int iType); + SSI_STATUS_MOTION _send_cmd_SO7_CMD_MOVE_R(int iType, int iMoveAngle); + SSI_STATUS_MOTION _send_cmd_SO7_CMD_READ_AXIS_R(); + SSI_STATUS_MOTION _send_cmd_SO7_CMD_READ_ZSIGNAL_POS_R(int iType); + long GetRCurrentPosition(int iType); + SSI_STATUS_MOTION _send_cmd_SO7_CMD_STOP_R(int iType); + SSI_STATUS_MOTION _send_cmd_SO7_CMD_SET_SEQ_NUMBER(); +}; +#endif diff --git a/PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/Debug/UtilityDebug.Log b/PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/Debug/UtilityDebug.Log index c07f320..c70f4ee 100644 --- a/PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/Debug/UtilityDebug.Log +++ b/PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/Debug/UtilityDebug.Log @@ -4171,7 +4171,9 @@ _start_machine Exit: Exit_SO7Usb Destruct Cso7_Proto. Construct Cso7_Proto. -Init:Open device succeed . +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. @@ -4182,29 +4184,74 @@ 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 . -_start_machine -Exit: Exit_SO7Usb +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 @@ -4226,6 +4273,25 @@ 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. @@ -4236,6 +4302,33 @@ 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 . @@ -4251,6 +4344,43 @@ 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. diff --git a/PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/UsbUtil/Mv_Util.rc b/PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/UsbUtil/Mv_Util.rc index f2f886c..ce9152c 100644 --- a/PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/UsbUtil/Mv_Util.rc +++ b/PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/UsbUtil/Mv_Util.rc @@ -16,7 +16,7 @@ #undef APSTUDIO_READONLY_SYMBOLS ///////////////////////////////////////////////////////////////////////////// -// Chinese (Simplified, PRC) resources +// 中文(简体,中国) resources #if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_CHS) LANGUAGE LANG_CHINESE, SUBLANG_CHINESE_SIMPLIFIED @@ -401,24 +401,25 @@ CAPTION "Utility for SO7" FONT 8, "MS Shell Dlg", 400, 0, 0x1 BEGIN CONTROL "SDK3000视频卡",IDC_RADIO_VIDEOCARD_SDK3000,"Button",BS_AUTORADIOBUTTON | WS_GROUP,39,39,69,10 - CONTROL "SV2000E视频卡",IDC_RADIO_VIDEOCARD_SV2000E,"Button",BS_AUTORADIOBUTTON,39,56,69,10 - CONTROL "SV4000E视频卡",IDC_RADIO_VIDEOCARD_SV4000E,"Button",BS_AUTORADIOBUTTON,39,73,68,10 - CONTROL "TC4000视频卡",IDC_RADIO_VIDEOCARD_TC4000,"Button",BS_AUTORADIOBUTTON,39,90,69,10 - CONTROL "IP Camera",IDC_RADIO_SO7_IP_CAMERA,"Button",BS_AUTORADIOBUTTON,39,107,62,10 - CONTROL "USB Camera",IDC_RADIO_SO7_USB_CAMERA,"Button",BS_AUTORADIOBUTTON,39,124,62,10 + CONTROL "SV2000E视频卡",IDC_RADIO_VIDEOCARD_SV2000E,"Button",BS_AUTORADIOBUTTON,39,55,69,10 + CONTROL "SV4000E视频卡",IDC_RADIO_VIDEOCARD_SV4000E,"Button",BS_AUTORADIOBUTTON,39,71,68,10 + CONTROL "TC4000视频卡",IDC_RADIO_VIDEOCARD_TC4000,"Button",BS_AUTORADIOBUTTON,39,87,69,10 + CONTROL "IP Camera",IDC_RADIO_SO7_IP_CAMERA,"Button",BS_AUTORADIOBUTTON,39,103,62,10 + CONTROL "USB Camera",IDC_RADIO_SO7_USB_CAMERA,"Button",BS_AUTORADIOBUTTON,39,119,62,10 CONTROL "控制器(USB)",IDC_RADIO_CONTROLLER,"Button",BS_AUTORADIOBUTTON,166,39,69,10 - CONTROL "控制器(RS232)",IDC_RADIO__SO7_RS232,"Button",BS_AUTORADIOBUTTON,166,56,77,10 - CONTROL "LK_G激光",IDC_RADIO_KEYENCE_LASER,"Button",BS_AUTORADIOBUTTON,166,73,76,10 - CONTROL "LK_H激光(USB)",IDC_RADIO_KEYENCE_LASER_LK_H,"Button",BS_AUTORADIOBUTTON,166,90,76,10 + CONTROL "控制器(RS232)",IDC_RADIO__SO7_RS232,"Button",BS_AUTORADIOBUTTON,166,71,77,10 + CONTROL "LK_G激光",IDC_RADIO_KEYENCE_LASER,"Button",BS_AUTORADIOBUTTON,166,87,76,10 + CONTROL "LK_H激光(USB)",IDC_RADIO_KEYENCE_LASER_LK_H,"Button",BS_AUTORADIOBUTTON,166,103,76,10 CONTROL "LK_H激光(ETHERNET)",IDC_RADIO_KEYENCE_LASER_LKH_ETHERNET, - "Button",BS_AUTORADIOBUTTON,166,107,85,10 - CONTROL "LJ_G激光",IDC_RADIO_KEYENCE_LASER3,"Button",BS_AUTORADIOBUTTON,166,124,76,10 + "Button",BS_AUTORADIOBUTTON,166,119,85,10 + CONTROL "LJ_G激光",IDC_RADIO_KEYENCE_LASER3,"Button",BS_AUTORADIOBUTTON,166,135,76,10 CONTROL "Verifcation algorithm",IDC_RADIO_SO7_VERIFICATION_ALGORITHM, - "Button",BS_AUTORADIOBUTTON | NOT WS_VISIBLE,39,141,81,10 - CONTROL "Image.dll",IDC_RADIO_TEST_IMAGE_DLL,"Button",BS_AUTORADIOBUTTON | NOT WS_VISIBLE,166,141,45,10 + "Button",BS_AUTORADIOBUTTON | NOT WS_VISIBLE,39,135,81,10 + CONTROL "Image.dll",IDC_RADIO_TEST_IMAGE_DLL,"Button",BS_AUTORADIOBUTTON | NOT WS_VISIBLE,39,151,45,10 DEFPUSHBUTTON "OK",IDOK,163,177,50,14 PUSHBUTTON "Cancel",IDCANCEL,221,177,50,14 - GROUPBOX "测试选项",IDC_STATIC,20,15,242,146 + GROUPBOX "测试选项",IDC_STATIC,20,15,242,157 + CONTROL "控制器(USB R)",IDC_RADIO_CONTROLLER2,"Button",BS_AUTORADIOBUTTON,166,55,75,10 END IDD_SO7_VIDEOCARD_SDK3000 DIALOGEX 0, 0, 488, 316 @@ -909,6 +910,37 @@ BEGIN PUSHBUTTON "Stop Scan",IDC_BTN_KEYENCE_LKG5000_ETHERNET_STOP_SCAN2,313,86,50,14 END +IDD_SO7_UTIL_USBCTLR DIALOGEX 0, 0, 216, 251 +STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | WS_POPUP | WS_CAPTION | WS_SYSMENU +CAPTION "USB Control R1/R2" +FONT 8, "MS Shell Dlg", 400, 0, 0x1 +BEGIN + PUSHBUTTON "Exit",IDCANCEL,170,230,39,14 + GROUPBOX "USB_R Control",IDC_STATIC,17,12,181,216 + CONTROL "Enable R1",IDC_CHECK_SO7_R1_ENABLE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,31,58,48,10 + PUSHBUTTON "Init_Machine",IDC_BUTTON_START_SO7_R_MACHINE,43,24,63,18 + PUSHBUTTON "Stop_Machine",IDC_BUTTON_STOP_SO7_R_MACHINE,108,24,63,18 + PUSHBUTTON "Home",IDC_BUTTON_R1_HOME,135,73,36,14 + PUSHBUTTON "Go",IDC_BUTTON_R1_GO,135,113,36,14 + EDITTEXT IDC_EDIT_R1_CURRENT_POSITION,96,73,36,14,ES_AUTOHSCROLL + EDITTEXT IDC_EDIT_R1_TARGET_POSITION,96,113,36,14,ES_CENTER | ES_AUTOHSCROLL + LTEXT "Current Position",IDC_STATIC,43,75,51,8 + CTEXT "Target Position",IDC_STATIC,43,97,51,8 + GROUPBOX "R1",IDC_STATIC,18,45,180,92 + CONTROL "Enable R2",IDC_CHECK_SO7_R2_ENABLE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,31,149,48,10 + PUSHBUTTON "Home",IDC_BUTTON_R2_HOME,135,165,36,14 + PUSHBUTTON "Go",IDC_BUTTON_R2_GO,135,205,36,14 + EDITTEXT IDC_EDIT_R2_CURRENT_POSITION,96,165,36,14,ES_AUTOHSCROLL + EDITTEXT IDC_EDIT_R2_TARGET_POSITION,96,205,36,14,ES_CENTER | ES_AUTOHSCROLL + LTEXT "Current Position",IDC_STATIC,43,166,51,8 + CTEXT "Target Position",IDC_STATIC,43,189,51,8 + GROUPBOX "R2",IDC_STATIC,18,136,180,92 + CONTROL "Rel",IDC_RADIO_R1_RELATIVE,"Button",BS_AUTORADIOBUTTON | WS_GROUP,66,110,27,8 + CONTROL "Abs",IDC_RADIO_R1_ABSOLUTE,"Button",BS_AUTORADIOBUTTON,66,121,28,8 + CONTROL "Rel",IDC_RADIO_R2_RELATIVE,"Button",BS_AUTORADIOBUTTON | WS_GROUP,66,201,27,8 + CONTROL "Abs",IDC_RADIO_R2_ABSOLUTE,"Button",BS_AUTORADIOBUTTON,66,213,28,8 +END + ///////////////////////////////////////////////////////////////////////////// // @@ -1056,6 +1088,14 @@ BEGIN TOPMARGIN, 7 BOTTOMMARGIN, 359 END + + IDD_SO7_UTIL_USBCTLR, DIALOG + BEGIN + LEFTMARGIN, 7 + RIGHTMARGIN, 209 + TOPMARGIN, 7 + BOTTOMMARGIN, 244 + END END #endif // APSTUDIO_INVOKED @@ -1477,12 +1517,12 @@ IDB_BITMAP_Z_DOWN BITMAP "res\\bmp\\Z_DOWN.bmp" IDB_BITMAP_Z_UP BITMAP "res\\bmp\\Z_UP.bmp" IDB_BITMAP_X_LEFT BITMAP "res\\bmp\\X_LEFT.BMP" IDB_BITMAP_X_RIGHT BITMAP "res\\bmp\\X_RIGHT.bmp" -#endif // Chinese (Simplified, PRC) resources +#endif // 中文(简体,中国) resources ///////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////// -// English (United States) resources +// 英语(美国) resources #if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU) LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US @@ -2425,7 +2465,7 @@ BEGIN IDS_SO7_ABOUTBOX "&About Utility for SO7..." END -#endif // English (United States) resources +#endif // 英语(美国) resources ///////////////////////////////////////////////////////////////////////////// diff --git a/PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/UsbUtil/So7_Option.cpp b/PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/UsbUtil/So7_Option.cpp index 6a3bf05..435282a 100644 --- a/PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/UsbUtil/So7_Option.cpp +++ b/PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/UsbUtil/So7_Option.cpp @@ -7,6 +7,7 @@ #include "..\..\..\SevenOcean\CMMIO_SERIAL.H" #include "..\..\..\SevenOcean\EF8000_Interface.h" #include "..\..\..\SevenOcean\SO7_Proto.h" +#include "..\..\..\SevenOcean\SO7_Proto_Aux.h" #include "ProcessButton.h" #ifdef _RELEASE_FULL_VERSION @@ -24,6 +25,7 @@ #endif //_RELEASE_FULL_VERSION #include "SO7_UtilDlg.h" +#include "So7_UtilUsbCtlR.h" #include "..\..\..\Keyence\Keyence_Laser.h" #include "..\..\..\Keyence\Keyence_Laser_LK_H.h" #include "..\..\..\Keyence\\Keyence_Proto.h" @@ -49,6 +51,7 @@ //CSerial* m_pSO7_Serial=NULL; CPSerial* m_pSO7_PCDSerial=NULL; CSO7_Proto* m_pSO7_Proto=NULL; +CSO7_Proto_Aux* m_pSO7_Proto_Aux=NULL; CKeyence_Laser* m_pKeyence_Laser=NULL; CKeyence_Laser_LK_H* m_pKeyence_Laser_LK_H=NULL; CKeyence_Proto* m_pKeyence_Proto=NULL; @@ -187,6 +190,11 @@ void CSo7_Option::OnBnClickedOk() { delete m_pSO7_Proto; m_pSO7_Proto=NULL; + } + if (m_pSO7_Proto_Aux) + { + delete m_pSO7_Proto_Aux; + m_pSO7_Proto_Aux = NULL; } if (m_pEF8000_Interface) { @@ -194,12 +202,27 @@ void CSo7_Option::OnBnClickedOk() m_pEF8000_Interface=NULL; } } + else if (((CButton *)GetDlgItem(IDC_RADIO_CONTROLLER2))->GetCheck()) + { + if (!m_pSO7_Proto_Aux) + { + m_pSO7_Proto_Aux = new CSO7_Proto_Aux(); + } + + So7_UtilUsbCtlR* pSo7_UtilUsbCtlR=new So7_UtilUsbCtlR(); + pSo7_UtilUsbCtlR->DoModal(); + delete pSo7_UtilUsbCtlR; + } else if (((CButton *)GetDlgItem(IDC_RADIO__SO7_RS232))->GetCheck()) { if (!m_pSO7_Proto) { m_pSO7_Proto = new CSO7_Proto(); } + if (!m_pSO7_Proto_Aux) + { + m_pSO7_Proto_Aux = new CSO7_Proto_Aux(); + } if (!m_pSO7_PCDSerial) { m_pSO7_PCDSerial = new CPSerial(); @@ -219,6 +242,11 @@ void CSo7_Option::OnBnClickedOk() delete m_pSO7_Proto; m_pSO7_Proto=NULL; } + if (m_pSO7_Proto_Aux) + { + delete m_pSO7_Proto_Aux; + m_pSO7_Proto_Aux = NULL; + } } else if(((CButton *)GetDlgItem(IDC_RADIO_KEYENCE_LASER))->GetCheck()) { @@ -226,6 +254,10 @@ void CSo7_Option::OnBnClickedOk() { m_pSO7_Proto = new CSO7_Proto(); } + if (!m_pSO7_Proto_Aux) + { + m_pSO7_Proto_Aux = new CSO7_Proto_Aux(); + } if (!m_pKeyence_Proto) { m_pKeyence_Proto=new CKeyence_Proto(); @@ -245,6 +277,8 @@ void CSo7_Option::OnBnClickedOk() m_pKeyence_Proto=NULL; delete m_pSO7_Proto; m_pSO7_Proto=NULL; + delete m_pSO7_Proto_Aux; + m_pSO7_Proto_Aux = NULL; } else if(((CButton *)GetDlgItem(IDC_RADIO_KEYENCE_LASER_LK_H))->GetCheck()) { @@ -252,6 +286,10 @@ void CSo7_Option::OnBnClickedOk() { m_pSO7_Proto = new CSO7_Proto(); } + if (!m_pSO7_Proto_Aux) + { + m_pSO7_Proto_Aux = new CSO7_Proto_Aux(); + } if (!m_pKeyence_Laser_LK_H) { m_pKeyence_Laser_LK_H=new CKeyence_Laser_LK_H(); @@ -264,7 +302,9 @@ void CSo7_Option::OnBnClickedOk() delete m_pKeyence_Laser_LK_H; m_pKeyence_Laser_LK_H=NULL; delete m_pSO7_Proto; - m_pSO7_Proto=NULL; + m_pSO7_Proto=NULL; + delete m_pSO7_Proto_Aux; + m_pSO7_Proto_Aux = NULL; } else if(((CButton *)GetDlgItem(IDC_RADIO_KEYENCE_LASER_LKH_ETHERNET))->GetCheck()) { diff --git a/PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/UsbUtil/So7_UtilUsbCtlR.cpp b/PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/UsbUtil/So7_UtilUsbCtlR.cpp new file mode 100644 index 0000000..4217ebf --- /dev/null +++ b/PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/UsbUtil/So7_UtilUsbCtlR.cpp @@ -0,0 +1,182 @@ +// So7_UtilUsbCtlR.cpp : 实现文件 +// + +#include "stdafx.h" +#include "So7_UtilUsbCtlR.h" +#include "afxdialogex.h" +#include "..\..\..\SevenOcean\SO7_Proto_Aux.h" + +extern CSO7_Proto_Aux* m_pSO7_Proto_Aux; +extern CLogger* g_pLoggerDebug; + + +// So7_UtilUsbCtlR 对话框 + +IMPLEMENT_DYNAMIC(So7_UtilUsbCtlR, CDialogEx) + + So7_UtilUsbCtlR::So7_UtilUsbCtlR(CWnd* pParent /*=NULL*/) + : CDialogEx(So7_UtilUsbCtlR::IDD, pParent) +{ +} + +So7_UtilUsbCtlR::~So7_UtilUsbCtlR() +{ +} + +void So7_UtilUsbCtlR::DoDataExchange(CDataExchange* pDX) +{ + CDialogEx::DoDataExchange(pDX); + + DDX_Text(pDX, IDC_EDIT_R1_TARGET_POSITION, m_R1_Rotary_Edit_Position); + DDX_Text(pDX, IDC_EDIT_R2_TARGET_POSITION, m_R2_Rotary_Edit_Position); +} + +BEGIN_MESSAGE_MAP(So7_UtilUsbCtlR, CDialogEx) + ON_BN_CLICKED(IDCANCEL, &So7_UtilUsbCtlR::OnBnClickedCancel) + ON_BN_CLICKED(IDC_BUTTON_START_SO7_R_MACHINE, &So7_UtilUsbCtlR::OnBnClickedButtonStartSo7RMachine) + ON_BN_CLICKED(IDC_BUTTON_STOP_SO7_R_MACHINE, &So7_UtilUsbCtlR::OnBnClickedButtonStopSo7RMachine) + ON_BN_CLICKED(IDC_BUTTON_R2_GO, &So7_UtilUsbCtlR::OnBnClickedButtonR2Go) + ON_BN_CLICKED(IDC_BUTTON_R2_HOME, &So7_UtilUsbCtlR::OnBnClickedButtonR2Home) + ON_BN_CLICKED(IDC_CHECK_SO7_R2_ENABLE, &So7_UtilUsbCtlR::OnBnClickedCheckSo7R2Enable) +END_MESSAGE_MAP() + + +// So7_UtilUsbCtlR 消息处理程序 + +BOOL So7_UtilUsbCtlR::OnInitDialog() +{ + CDialog::OnInitDialog(); + + UpdateCtrlsStatus(FALSE); + UpdateR1CtrlsStatus(FALSE); + UpdateR2CtrlsStatus(FALSE); + //R1 is x motor,is not enabled now. + GetDlgItem(IDC_CHECK_SO7_R1_ENABLE)->EnableWindow(FALSE); + + return TRUE; +} + +//===================================================================================== +void So7_UtilUsbCtlR::OnBnClickedButtonStartSo7RMachine() +{ + if (m_pSO7_Proto_Aux) + { + m_pSO7_Proto_Aux->Init_SO7Usb(); + } + + m_pSO7_Proto_Aux->_send_cmd_SO7_CMD_RESET_R(0); + + UpdateCtrlsStatus(TRUE); + UpdateR1CtrlsStatus(FALSE); + UpdateR2CtrlsStatus(FALSE); +} + +//===================================================================================== +void So7_UtilUsbCtlR::UpdateCtrlsStatus(bool _bEnable) +{ + GetDlgItem(IDC_BUTTON_START_SO7_R_MACHINE)->EnableWindow(!_bEnable); + GetDlgItem(IDCANCEL)->EnableWindow(!_bEnable); + GetDlgItem(IDC_BUTTON_STOP_SO7_R_MACHINE)->EnableWindow(_bEnable); + //GetDlgItem(IDC_CHECK_SO7_R1_ENABLE)->EnableWindow(_bEnable); + GetDlgItem(IDC_CHECK_SO7_R2_ENABLE)->EnableWindow(_bEnable); +} + +//===================================================================================== +void So7_UtilUsbCtlR::UpdateR1CtrlsStatus(bool _bEnable) +{ + GetDlgItem(IDC_BUTTON_R1_GO)->EnableWindow(_bEnable); + GetDlgItem(IDC_BUTTON_R1_HOME)->EnableWindow(_bEnable); + GetDlgItem(IDC_RADIO_R1_RELATIVE)->EnableWindow(_bEnable); + GetDlgItem(IDC_RADIO_R1_ABSOLUTE)->EnableWindow(_bEnable); + GetDlgItem(IDC_EDIT_R1_CURRENT_POSITION)->EnableWindow(_bEnable); + GetDlgItem(IDC_EDIT_R1_TARGET_POSITION)->EnableWindow(_bEnable); +} + +//===================================================================================== +void So7_UtilUsbCtlR::UpdateR2CtrlsStatus(bool _bEnable) +{ + GetDlgItem(IDC_BUTTON_R2_GO)->EnableWindow(_bEnable); + GetDlgItem(IDC_BUTTON_R2_HOME)->EnableWindow(_bEnable); + GetDlgItem(IDC_RADIO_R2_RELATIVE)->EnableWindow(_bEnable); + GetDlgItem(IDC_RADIO_R2_ABSOLUTE)->EnableWindow(_bEnable); + GetDlgItem(IDC_EDIT_R2_CURRENT_POSITION)->EnableWindow(_bEnable); + GetDlgItem(IDC_EDIT_R2_TARGET_POSITION)->EnableWindow(_bEnable); + ((CButton *)GetDlgItem(IDC_RADIO_R2_RELATIVE))->SetCheck(_bEnable); +} + +//===================================================================================== +void So7_UtilUsbCtlR::OnBnClickedButtonStopSo7RMachine() +{ + UpdateCtrlsStatus(FALSE); + ((CButton *)GetDlgItem(IDC_CHECK_SO7_R1_ENABLE))->SetCheck(0); + ((CButton *)GetDlgItem(IDC_CHECK_SO7_R2_ENABLE))->SetCheck(0); + UpdateR1CtrlsStatus(FALSE); + UpdateR2CtrlsStatus(FALSE); + m_pSO7_Proto_Aux->Exit_SO7Usb(); +} + +//===================================================================================== +void So7_UtilUsbCtlR::OnBnClickedCancel() +{ + CDialogEx::OnCancel(); +} + +//===================================================================================== +//************************************************************************************* +//===================================================================================== +void So7_UtilUsbCtlR::OnBnClickedCheckSo7R2Enable() +{ + if (((CButton *)GetDlgItem(IDC_CHECK_SO7_R2_ENABLE))->GetCheck()) + { + UpdateR2CtrlsStatus(TRUE); + m_pSO7_Proto_Aux->_send_cmd_SO7_CMD_MOVE_R(TYPER2, 360); + Sleep(4000); + CString csPosition; + csPosition.Format(_T("%8ld"),(m_pSO7_Proto_Aux->GetRCurrentPosition(TYPER2))); + GetDlgItem(IDC_EDIT_R2_CURRENT_POSITION)->SetWindowText(csPosition); + } + else + { + UpdateR2CtrlsStatus(FALSE); + } +} + +//===================================================================================== +void So7_UtilUsbCtlR::OnBnClickedButtonR2Home() +{ + int iHomeAngle = -1; + iHomeAngle = 360 - m_pSO7_Proto_Aux->GetRCurrentPosition(TYPER2); + if(iHomeAngle != 0 && iHomeAngle != 360) + { + m_pSO7_Proto_Aux->_send_cmd_SO7_CMD_MOVE_R(TYPER2, iHomeAngle); + } +} + +//===================================================================================== +void So7_UtilUsbCtlR::OnBnClickedButtonR2Go() +{ + UpdateData(TRUE); + USES_CONVERSION; + + const char* cR2_Move_to_Rotary = T2A(m_R2_Rotary_Edit_Position); + int iAngle = atoi(cR2_Move_to_Rotary); + if (((CButton *)GetDlgItem(IDC_RADIO_R2_RELATIVE))->GetCheck()) + { + m_pSO7_Proto_Aux->_send_cmd_SO7_CMD_MOVE_R(TYPER2, iAngle); + } + else if(((CButton *)GetDlgItem(IDC_RADIO_R2_ABSOLUTE))->GetCheck()) + { + int iCurrentAngle = -1; + iCurrentAngle = m_pSO7_Proto_Aux->GetRCurrentPosition(TYPER2); + if(iAngle > iCurrentAngle) + { + iAngle = iAngle - iCurrentAngle; + m_pSO7_Proto_Aux->_send_cmd_SO7_CMD_MOVE_R(TYPER2, iAngle); + } + else if(iAngle < iCurrentAngle) + { + iAngle = 360 - iCurrentAngle + iAngle; + m_pSO7_Proto_Aux->_send_cmd_SO7_CMD_MOVE_R(TYPER2, iAngle); + } + } +} \ No newline at end of file diff --git a/PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/UsbUtil/So7_UtilUsbCtlR.h b/PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/UsbUtil/So7_UtilUsbCtlR.h new file mode 100644 index 0000000..4f2d510 --- /dev/null +++ b/PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/UsbUtil/So7_UtilUsbCtlR.h @@ -0,0 +1,38 @@ +#pragma once +#include "resource.h" + + +// So7_UtilUsbCtlR 对话框 + +class So7_UtilUsbCtlR : public CDialogEx +{ + DECLARE_DYNAMIC(So7_UtilUsbCtlR) + +public: + So7_UtilUsbCtlR(CWnd* pParent = NULL); // 标准构造函数 + virtual ~So7_UtilUsbCtlR(); + +// 对话框数据 + enum { IDD = IDD_SO7_UTIL_USBCTLR }; + +protected: + virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV 支持 + + DECLARE_MESSAGE_MAP() + + virtual BOOL OnInitDialog(); + void UpdateCtrlsStatus(bool _bEnable); + void UpdateR1CtrlsStatus(bool _bEnable); + void UpdateR2CtrlsStatus(bool _bEnable); +public: + CString m_OutMessage; + CString m_R1_Rotary_Edit_Position; + CString m_R2_Rotary_Edit_Position; + + afx_msg void OnBnClickedButtonStartSo7RMachine(); + afx_msg void OnBnClickedButtonStopSo7RMachine(); + afx_msg void OnBnClickedCancel(); + afx_msg void OnBnClickedCheckSo7R2Enable(); + afx_msg void OnBnClickedButtonR2Go(); + afx_msg void OnBnClickedButtonR2Home(); +}; diff --git a/PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/UsbUtil/Usb_Util.vcxproj b/PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/UsbUtil/Usb_Util.vcxproj index 87dcb8b..c569da6 100644 --- a/PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/UsbUtil/Usb_Util.vcxproj +++ b/PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/UsbUtil/Usb_Util.vcxproj @@ -321,6 +321,7 @@ + @@ -358,6 +359,7 @@ + @@ -402,6 +404,7 @@ + @@ -440,6 +443,7 @@ + diff --git a/PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/UsbUtil/Usb_Util.vcxproj.filters b/PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/UsbUtil/Usb_Util.vcxproj.filters index dfb5643..9f14414 100644 --- a/PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/UsbUtil/Usb_Util.vcxproj.filters +++ b/PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/UsbUtil/Usb_Util.vcxproj.filters @@ -196,6 +196,10 @@ Sources Files + + + Sources Files + @@ -426,6 +430,10 @@ Header Files + + + Header Files + diff --git a/PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/UsbUtil/resource.h b/PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/UsbUtil/resource.h index c1e2285..26f423e 100644 --- a/PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/UsbUtil/resource.h +++ b/PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/UsbUtil/resource.h @@ -56,6 +56,7 @@ #define IDC_BUTTON_INIT_MVUSB 146 #define IDD_DIALOG_TESA_STAR_E 188 #define IDD_DIALOG_KEYENCE_LKG5000_ETHERNET 190 +#define IDD_SO7_UTIL_USBCTLR 191 #define IDC_BUTTON_START_MACHINE 1000 #define IDC_BUTTON_START_MACHINE3 1001 #define IDC_BUTTON_START_POLL_58 1002 @@ -332,6 +333,7 @@ #define IDC_RADIO_SELECT_Z 1264 #define IDC_BUTTON_SO7_GET_SEQ_NUMBER 1265 #define IDC_BUTTON_SO7_SET_SEQ_NUMBER 1266 +#define IDC_BUTTON_SO7_SET_SEQ_NUMBER2 1267 #define IDC_BUTTON_SO7_SET_VER_NUMBER 1267 #define IDC_BUTTON_SET_OUT_PORT 1269 #define IDC_EDIT_SET_VER_NO 1271 @@ -666,6 +668,7 @@ #define IDC_BUTTON_STOP_SCAN_KEYENCE_LK_HLASER 1553 #define IDC_RADIO_CONTROLLER 1554 #define IDC_BUTTON_DO_MEASURE 1555 +#define IDC_RADIO_CONTROLLER2 1555 #define IDC_BUTTON_INIT_PROGRAM 1556 #define IDC_RADIO_VIDEOCARD_SV2000E 1557 #define IDC_BUTTON_SETTINGS 1558 @@ -702,8 +705,14 @@ #define IDC_BUTTON_INIT_SCAN_KEYENCE_LK_GLASER 1586 #define IDC_BUTTON_GO 1586 #define IDC_BTN_KEYENCE_LKG5000_ETHERNET_STORAGEDATA1 1586 +#define IDC_BUTTON_HOME2 1586 +#define IDC_BUTTON_R2_HOME 1586 #define IDC_EDIT_MEASURE_VALUE 1587 +#define IDC_BUTTON_GO2 1587 +#define IDC_BUTTON_R1_GO 1587 #define IDC_RADIO_OUT_EXTRACT 1588 +#define IDC_BUTTON_GO3 1588 +#define IDC_BUTTON_R2_GO 1588 #define IDC_RADIO_KEYENCE_LASER 1589 #define IDC_BUTTON_GET_SCAN_DATA_KEYENCE_LK_GLASER 1590 #define IDC_EDIT_TEST_KEYENCE_MESSAGE 1591 @@ -717,6 +726,7 @@ #define IDC_RADIO_KEYENCE_LASER_LKH_ETHERNET 1596 #define IDC_BUTTON_TEST_KEYENCE_SAVE_LOG 1597 #define IDC_BUTTON_SO7_MANUAL_MACHINE_SEND_DATA 1598 +#define IDC_RADIO_TEST_IMAGE_DLL3 1598 #define IDC_BUTTON_SO7_CNC_PROGRAM 1599 #define IDC_BUTTON_PROGRAM_SET_ZERO_Z 1600 #define IDC_BUTTON_IMAGEDLL_STOP_SCAN_LASER 1601 @@ -909,6 +919,8 @@ #define IDC_CHECK_SO7_TOP_LIGHT_ON 1819 #define IDC_LIST_SO7_MOTION_CONFIG 1820 #define IDC_CHECK_SO7_BOTTOM_LIGHT_ON 1820 +#define IDC_CHECK_SO7_TOP_LIGHT_ON2 1820 +#define IDC_CHECK_SO7_R2_ENABLE 1820 #define IDC_EDIT_SO7_MOTION_CONFIG_MSGOUT 1821 #define IDC_CHECK_SO7_RING_LIGHT_ON 1821 #define IDC_EDIT_SO7_PROGEAM_INTERCAL_TIME_PER_CNC 1822 @@ -916,14 +928,25 @@ #define IDC_CHECK_SO7_RING_LIGHT_SEG_ON2 1823 #define IDC_EDIT_POSITION 1824 #define IDC_RADIO_RELATIVE 1825 +#define IDC_EDIT_POSITION2 1825 +#define IDC_EDIT_R1_TARGET_POSITION 1825 #define IDC_RADIO_ABS 1826 #define IDC_RADIO_ABSOLUTE 1826 +#define IDC_EDIT_POSITION3 1826 +#define IDC_EDIT_R2_CURRENT_POSITION 1826 #define IDC_KEYENCE_LKG5000_IPADDRESS1 1827 #define IDC_CHECK_SO7_COAXIAL_LIGHT_ON 1827 +#define IDC_EDIT_POSITION4 1827 +#define IDC_EDIT_R2_TARGET_POSITION 1827 #define IDC_KEYENCE_LKG5000_IPADDRESS2 1828 #define IDC_CHECK_SO7_SPARE_LIGHT_ON 1828 +#define IDC_RADIO_R1_RELATIVE 1828 +#define IDC_RADIO_R1_ABSOLUTE 1829 #define IDC_EDIT_KEYENCE_LKG5000_MSG 1830 +#define IDC_RADIO_R2_RELATIVE 1830 #define IDC_BTN_KEYENCE_LKG5000_ETHERNET_START_SCAN 1831 +#define IDC_RADIO_ABSOLUTE3 1831 +#define IDC_RADIO_R2_ABSOLUTE 1831 #define IDC_BTN_KEYENCE_LKG5000_ETHERNET_STOP_SCAN 1832 #define IDC_RADIO_SO7_MOVE_SPEED_GEAR1 1832 #define IDC_BTN_KEYENCE_LKG5000_ETHERNET_START_SCAN2 1833 @@ -938,6 +961,12 @@ #define IDC_STATIC_IO_ADDR4 1840 #define IDC_STATIC_IO_ADDR5 1841 #define IDC_STATIC_IO_ADDR6 1842 +#define IDC_BUTTON_START_SO7_R_MACHINE 1843 +#define IDC_BUTTON_STOP_SO7_R_MACHINE 1844 +#define IDC_BUTTON_R1_HOME 1845 +#define IDC_CHECK_SO7_R1_ENABLE 1846 +#define IDC_EDIT_R1_CURRENT_POSITION 1847 + #define IDC_BUTTON_DIY_EXIT_BUTTON 32740 #define ID_EDIT_SO7_CONFIG_MOTION 32741 diff --git a/PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/UsbUtil_VS2010.suo b/PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/UsbUtil_VS2010.suo index 4ba9222..c989285 100644 Binary files a/PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/UsbUtil_VS2010.suo and b/PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/UsbUtil_VS2010.suo differ