尝试对串口返回值情况进行优化,思路,引入期望返回字节,当不是,进行重发
This commit is contained in:
@@ -79,8 +79,7 @@ enum HSI_STATUS
|
|||||||
HSI_STATUS_VP_TIMEOUT = 350,
|
HSI_STATUS_VP_TIMEOUT = 350,
|
||||||
HSI_STATUS_VP_IMAGEPROCESS_FAIL,
|
HSI_STATUS_VP_IMAGEPROCESS_FAIL,
|
||||||
|
|
||||||
HSI_ACS_OK=400,
|
HSI_ACS_OK=400,// ACS命令成功
|
||||||
// ACS命令成功
|
|
||||||
HSI_ACS_ERROR
|
HSI_ACS_ERROR
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -412,7 +411,6 @@ enum HSI_SCAN_MOTION_TYPE
|
|||||||
HSI_SCAN_MOTION_MANUAL_TEST //测试使用
|
HSI_SCAN_MOTION_MANUAL_TEST //测试使用
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
enum HSI_ZOOM_TYPE
|
enum HSI_ZOOM_TYPE
|
||||||
{
|
{
|
||||||
HSI_ZOOM_MANUAL = 0,
|
HSI_ZOOM_MANUAL = 0,
|
||||||
@@ -475,7 +473,6 @@ HSI_API HSI_STATUS WINAPI HSI_MOTION_GET_POSITIONPROBE(UINT AxisTypes, double& P
|
|||||||
HSI_API HSI_STATUS WINAPI HSI_MOTION_GET_ENCODER_XYZ(long* lEncVal);
|
HSI_API HSI_STATUS WINAPI HSI_MOTION_GET_ENCODER_XYZ(long* lEncVal);
|
||||||
HSI_API HSI_STATUS WINAPI HSI_MOTION_SET_POSITION_XYZ_CACHE(UINT AxisTypes, HSI_MOTION_MOVE_TYPE eType, int DataCount,
|
HSI_API HSI_STATUS WINAPI HSI_MOTION_SET_POSITION_XYZ_CACHE(UINT AxisTypes, HSI_MOTION_MOVE_TYPE eType, int DataCount,
|
||||||
Point* CacheData);
|
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_GET_POSITION_R(UINT AxisTypes, double& PositionR, double& Time);
|
||||||
HSI_API HSI_STATUS WINAPI HSI_MOTION_SET_POSITION_R(UINT AxisTypes, double PositionR,
|
HSI_API HSI_STATUS WINAPI HSI_MOTION_SET_POSITION_R(UINT AxisTypes, double PositionR,
|
||||||
HSI_MOTION_AXIS_R_MOVE_TYPE DirectionType, bool bWait);
|
HSI_MOTION_AXIS_R_MOVE_TYPE DirectionType, bool bWait);
|
||||||
|
|||||||
@@ -776,12 +776,6 @@ HSI_STATUS HSI_Motion::Startup(HWND _hWnd, bool _bOfflineOnly)
|
|||||||
//锁存模式设置,定时模式
|
//锁存模式设置,定时模式
|
||||||
//if (m_IsUseRocker == 1)
|
//if (m_IsUseRocker == 1)
|
||||||
{
|
{
|
||||||
//软件清空
|
|
||||||
//m_cSendData[0] = 0x01;
|
|
||||||
//m_cSendData[1] = 0x06;
|
|
||||||
//m_WriteByte = Send_Command(0, (const char*)m_cSendData, 2);
|
|
||||||
//Sleep(10);
|
|
||||||
|
|
||||||
//设置锁存频率 1秒钟()
|
//设置锁存频率 1秒钟()
|
||||||
m_cSendData[0] = 0x01;
|
m_cSendData[0] = 0x01;
|
||||||
m_cSendData[1] = 0x01;
|
m_cSendData[1] = 0x01;
|
||||||
@@ -792,7 +786,7 @@ HSI_STATUS HSI_Motion::Startup(HWND _hWnd, bool _bOfflineOnly)
|
|||||||
// 10000 (0x27 0x10)对应1秒,3-4字节表示锁存周期
|
// 10000 (0x27 0x10)对应1秒,3-4字节表示锁存周期
|
||||||
m_cSendData[3] = (m_axisLatchFrequency >> 8) & 0xFF;
|
m_cSendData[3] = (m_axisLatchFrequency >> 8) & 0xFF;
|
||||||
m_cSendData[4] = m_axisLatchFrequency & 0xFF;
|
m_cSendData[4] = m_axisLatchFrequency & 0xFF;
|
||||||
m_WriteByte = Send_Command(0, (const char*)m_cSendData, 5);
|
m_WriteByte = Send_Command(0, (const char*)m_cSendData, 5, 2);
|
||||||
Sleep(10);
|
Sleep(10);
|
||||||
|
|
||||||
g_pLogger->SendAndFlushWithTime(L"[Startup] Set EF3 Timing latch Success\n");
|
g_pLogger->SendAndFlushWithTime(L"[Startup] Set EF3 Timing latch Success\n");
|
||||||
@@ -824,16 +818,16 @@ HSI_STATUS HSI_Motion::GetFirmwareVersion(byte* version)
|
|||||||
senddata[0] = 0x01;
|
senddata[0] = 0x01;
|
||||||
senddata[1] = 0x08;
|
senddata[1] = 0x08;
|
||||||
m_SO7_Serial.m_RecvData[0] = 0;
|
m_SO7_Serial.m_RecvData[0] = 0;
|
||||||
m_WriteByte = Send_Command(0, (const char*)senddata, sizeof(senddata));
|
m_WriteByte = Send_Command(0, (const char*)senddata, 2, 20);
|
||||||
Sleep(30);
|
|
||||||
m_SO7_Serial.m_RecvData[0] = 0;
|
|
||||||
m_WriteByte = Send_Command(0, (const char*)senddata, sizeof(senddata));
|
|
||||||
Sleep(30);
|
|
||||||
m_SO7_Serial.m_RecvData[0] = 0;
|
|
||||||
m_WriteByte = Send_Command(0, (const char*)senddata, sizeof(senddata));
|
|
||||||
Sleep(30);
|
Sleep(30);
|
||||||
|
//m_SO7_Serial.m_RecvData[0] = 0;
|
||||||
|
//m_WriteByte = Send_Command(0, (const char*)senddata, sizeof(senddata));
|
||||||
|
//Sleep(30);
|
||||||
|
//m_SO7_Serial.m_RecvData[0] = 0;
|
||||||
|
//m_WriteByte = Send_Command(0, (const char*)senddata, sizeof(senddata));
|
||||||
|
//Sleep(30);
|
||||||
|
|
||||||
while ((m_SO7_Serial.m_RecvData[0] != 3) && (m_SO7_Serial.m_RecvData[0] != 2))
|
while ((m_SO7_Serial.m_RecvData[0] != 0x32) && (m_SO7_Serial.m_RecvData[1] != 0x30))
|
||||||
{
|
{
|
||||||
waite_count++;
|
waite_count++;
|
||||||
if (waite_count > 100)
|
if (waite_count > 100)
|
||||||
@@ -843,8 +837,8 @@ HSI_STATUS HSI_Motion::GetFirmwareVersion(byte* version)
|
|||||||
if (waite_count > 100)
|
if (waite_count > 100)
|
||||||
{
|
{
|
||||||
waite_count = 0;
|
waite_count = 0;
|
||||||
m_WriteByte = Send_Command(0, (const char*)senddata, sizeof(senddata));
|
m_WriteByte = Send_Command(0, (const char*)senddata, 2, 20); //再次重发,并等待回应
|
||||||
while ((m_SO7_Serial.m_RecvData[0] != 3) && (m_SO7_Serial.m_RecvData[0] != 2))
|
while ((m_SO7_Serial.m_RecvData[0] != 0x32) && (m_SO7_Serial.m_RecvData[1] != 0x30))
|
||||||
{
|
{
|
||||||
waite_count++;
|
waite_count++;
|
||||||
if (waite_count > 100)
|
if (waite_count > 100)
|
||||||
@@ -870,7 +864,7 @@ HSI_STATUS HSI_Motion::GetFirmwareVersion(byte* version)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
g_pLogger->SendAndFlushWithTime(L"[GetFirmwareVersion] EF3 Firmware Version %s\n", version);
|
g_pLogger->SendAndFlushWithTime(L"[GetFirmwareVersion] EF3 Firmware Version %S\n", version);
|
||||||
m_Thread_StateData = HSI_THREAD_RUNNING;
|
m_Thread_StateData = HSI_THREAD_RUNNING;
|
||||||
SetEvent(m_hTriggerEventData); //触发事件,其中hEvent表示句柄,返回值:如果操作成功,则返回非零值,否则为0。
|
SetEvent(m_hTriggerEventData); //触发事件,其中hEvent表示句柄,返回值:如果操作成功,则返回非零值,否则为0。
|
||||||
return HSI_STATUS_NORMAL;
|
return HSI_STATUS_NORMAL;
|
||||||
@@ -967,10 +961,14 @@ HSI_STATUS HSI_Motion::HomeMachineOld(bool bHomed)
|
|||||||
int SavePos[5] = {0};
|
int SavePos[5] = {0};
|
||||||
if (m_SO7_Serial.m_RecvData[0] == 2)
|
if (m_SO7_Serial.m_RecvData[0] == 2)
|
||||||
{
|
{
|
||||||
SavePos[1] = (m_SO7_Serial.m_RecvData[41] << 24 | m_SO7_Serial.m_RecvData[42] << 16 | m_SO7_Serial.m_RecvData[43] << 8 | m_SO7_Serial.m_RecvData[44]);
|
SavePos[1] = (m_SO7_Serial.m_RecvData[41] << 24 | m_SO7_Serial.m_RecvData[42] << 16 | m_SO7_Serial.
|
||||||
SavePos[2] = (m_SO7_Serial.m_RecvData[45] << 24 | m_SO7_Serial.m_RecvData[46] << 16 | m_SO7_Serial.m_RecvData[47] << 8 | m_SO7_Serial.m_RecvData[48]);
|
m_RecvData[43] << 8 | m_SO7_Serial.m_RecvData[44]);
|
||||||
SavePos[3] = (m_SO7_Serial.m_RecvData[49] << 24 | m_SO7_Serial.m_RecvData[50] << 16 | m_SO7_Serial.m_RecvData[51] << 8 | m_SO7_Serial.m_RecvData[52]);
|
SavePos[2] = (m_SO7_Serial.m_RecvData[45] << 24 | m_SO7_Serial.m_RecvData[46] << 16 | m_SO7_Serial.
|
||||||
SavePos[4] = (m_SO7_Serial.m_RecvData[53] << 24 | m_SO7_Serial.m_RecvData[54] << 16 | m_SO7_Serial.m_RecvData[55] << 8 | m_SO7_Serial.m_RecvData[56]);
|
m_RecvData[47] << 8 | m_SO7_Serial.m_RecvData[48]);
|
||||||
|
SavePos[3] = (m_SO7_Serial.m_RecvData[49] << 24 | m_SO7_Serial.m_RecvData[50] << 16 | m_SO7_Serial.
|
||||||
|
m_RecvData[51] << 8 | m_SO7_Serial.m_RecvData[52]);
|
||||||
|
SavePos[4] = (m_SO7_Serial.m_RecvData[53] << 24 | m_SO7_Serial.m_RecvData[54] << 16 | m_SO7_Serial.
|
||||||
|
m_RecvData[55] << 8 | m_SO7_Serial.m_RecvData[56]);
|
||||||
}
|
}
|
||||||
double PrinfPos[5] = {0};
|
double PrinfPos[5] = {0};
|
||||||
PrinfPos[1] = SavePos[1] * m_Resolution[1];
|
PrinfPos[1] = SavePos[1] * m_Resolution[1];
|
||||||
@@ -2086,7 +2084,8 @@ HSI_STATUS HSI_Motion::Jog(UINT AxisTypes, double Speed)
|
|||||||
//设置加速度
|
//设置加速度
|
||||||
if (!acsc_SetAccelerationImm(handleACS, jogAxisNum, AccLine, nullptr))
|
if (!acsc_SetAccelerationImm(handleACS, jogAxisNum, AccLine, nullptr))
|
||||||
{
|
{
|
||||||
g_pLogger->SendAndFlushWithTime(L"[Jog] ACS SetAccelerationImm failed, Aixs:[%d] AccCurve:[%d]\n", jogAxisNum,
|
g_pLogger->SendAndFlushWithTime(L"[Jog] ACS SetAccelerationImm failed, Aixs:[%d] AccCurve:[%d]\n",
|
||||||
|
jogAxisNum,
|
||||||
AccLine);
|
AccLine);
|
||||||
ErrorsHandler();
|
ErrorsHandler();
|
||||||
}
|
}
|
||||||
@@ -2109,7 +2108,8 @@ HSI_STATUS HSI_Motion::Jog(UINT AxisTypes, double Speed)
|
|||||||
|
|
||||||
|
|
||||||
jogMoving = true;
|
jogMoving = true;
|
||||||
g_pLogger->SendAndFlushWithTime(L"[Jog] Out, DriveSpeed = %d AccCurve:[%d] DecCurve:[%d]\n", DriveSpeed, AccLine, AccLine);
|
g_pLogger->SendAndFlushWithTime(L"[Jog] Out, DriveSpeed = %d AccCurve:[%d] DecCurve:[%d]\n", DriveSpeed,
|
||||||
|
AccLine, AccLine);
|
||||||
}
|
}
|
||||||
return rStatus;
|
return rStatus;
|
||||||
}
|
}
|
||||||
@@ -3766,32 +3766,40 @@ HSI_STATUS HSI_Motion::GetPositionXyzCache(unsigned char * CacheData, int DataCo
|
|||||||
unsigned char m_cSendData[8] = {0};
|
unsigned char m_cSendData[8] = {0};
|
||||||
m_cSendData[0] = 0x01;
|
m_cSendData[0] = 0x01;
|
||||||
m_cSendData[1] = 0x05;
|
m_cSendData[1] = 0x05;
|
||||||
m_WriteByte = Send_Command(0, (const char*)m_cSendData, 2);
|
m_WriteByte = Send_Command(0, (const char*)m_cSendData, 2,8);
|
||||||
Sleep(2);
|
|
||||||
|
|
||||||
//解析缓存点数量
|
//解析缓存点数量
|
||||||
if (m_SO7_Serial.m_iRecvState)
|
if (m_SO7_Serial.m_iRecvState)
|
||||||
{
|
{
|
||||||
//特殊帧头, 表示该内容为回复点数
|
//特殊帧头, 表示该内容为回复点数
|
||||||
if ((m_SO7_Serial.m_RecvData[0] == 0x01) && (m_SO7_Serial.m_RecvData[0] == 0x1B))
|
if ((m_SO7_Serial.m_RecvData[0] == 0x01) && (m_SO7_Serial.m_RecvData[1] == 0x1B))
|
||||||
{
|
{
|
||||||
DataCount = (m_SO7_Serial.m_RecvData[4] << 24 | m_SO7_Serial.m_RecvData[5] << 16 | m_SO7_Serial.m_RecvData[6] << 8 | m_SO7_Serial.m_RecvData[7]);
|
DataCount = (m_SO7_Serial.m_RecvData[4] << 24 | m_SO7_Serial.m_RecvData[5] << 16 | m_SO7_Serial.
|
||||||
|
m_RecvData[6] << 8 | m_SO7_Serial.m_RecvData[7]);
|
||||||
|
|
||||||
//详细 https://blog.csdn.net/hebbely/article/details/79577880
|
//详细 https://blog.csdn.net/hebbely/article/details/79577880
|
||||||
g_pLogger->SendAndFlushWithTime(L"[GetPositionXyzCache] DataCount:%d, %s\n",DataCount, m_SO7_Serial.ToHexStr((const char *)m_SO7_Serial.m_RecvData,8));
|
g_pLogger->SendAndFlushWithTime(L"[GetPositionXyzCache] DataCount:%d, %s\n", DataCount,
|
||||||
|
m_SO7_Serial.ToHexStr((const char*)m_SO7_Serial.m_RecvData, 8));
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
g_pLogger->SendAndFlushWithTime(L"[GetPositionXyzCache] DataCount:%d, %s\n", DataCount,
|
||||||
|
m_SO7_Serial.ToHexStr((const char*)m_SO7_Serial.m_RecvData, 8));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
//读取锁存点
|
//读取锁存点
|
||||||
m_cSendData[0] = 0x01;
|
m_cSendData[0] = 0x01;
|
||||||
m_cSendData[1] = 0x09;
|
m_cSendData[1] = 0x09;
|
||||||
m_WriteByte = Send_Command(0, (const char*)m_cSendData, 2); //此处应该返回 "ok"
|
m_WriteByte = Send_Command(0, (const char*)m_cSendData, 2,DataCount); //此处应该返回 "ok"
|
||||||
Sleep(2);
|
|
||||||
|
|
||||||
//读取点的字节数,每个点占用12个字节
|
//读取点的字节数,每个点占用12个字节
|
||||||
if (m_SO7_Serial.m_iRecvBytes != DataCount * 12)
|
if (m_SO7_Serial.m_iRecvBytes != DataCount * 12)
|
||||||
{
|
{
|
||||||
g_pLogger->SendAndFlushWithTime(L"[GetPositionXyzCache] m_iRecvBytes: %d != Points: %d\n", m_SO7_Serial.m_iRecvBytes, DataCount * 12);
|
g_pLogger->SendAndFlushWithTime(L"[GetPositionXyzCache] m_iRecvBytes: %d != Points: %d\n",
|
||||||
|
m_SO7_Serial.m_iRecvBytes, DataCount * 12);
|
||||||
rStatus = HSI_STATUS_FAILED;
|
rStatus = HSI_STATUS_FAILED;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
@@ -3800,7 +3808,6 @@ HSI_STATUS HSI_Motion::GetPositionXyzCache(unsigned char * CacheData, int DataCo
|
|||||||
m_SO7_Serial.m_iRecvState = FALSE;
|
m_SO7_Serial.m_iRecvState = FALSE;
|
||||||
rStatus = HSI_STATUS_FAILED;
|
rStatus = HSI_STATUS_FAILED;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@@ -6403,8 +6410,8 @@ HSI_STATUS HSI_Motion::DCCScanStart()
|
|||||||
unsigned char m_cSendData[8] = {0};
|
unsigned char m_cSendData[8] = {0};
|
||||||
m_cSendData[0] = 0x01;
|
m_cSendData[0] = 0x01;
|
||||||
m_cSendData[1] = 0x02;
|
m_cSendData[1] = 0x02;
|
||||||
m_WriteByte = Send_Command(0, (const char*)m_cSendData, 2);
|
m_WriteByte = Send_Command(0, (const char*)m_cSendData, 2,2);
|
||||||
Sleep(2);
|
|
||||||
|
|
||||||
g_pLogger->SendAndFlushWithTime(L"[DCCScanStart] Out\n");
|
g_pLogger->SendAndFlushWithTime(L"[DCCScanStart] Out\n");
|
||||||
m_IsUsePPS = false;
|
m_IsUsePPS = false;
|
||||||
@@ -6443,7 +6450,7 @@ HSI_STATUS HSI_Motion::DCCScanStop()
|
|||||||
unsigned char m_SendDCCData[64] = {0};
|
unsigned char m_SendDCCData[64] = {0};
|
||||||
m_SendDCCData[0] = 0x01;
|
m_SendDCCData[0] = 0x01;
|
||||||
m_SendDCCData[1] = 0x03;
|
m_SendDCCData[1] = 0x03;
|
||||||
m_WriteByte = Send_Command(0, (const char*)m_SendDCCData, 2);
|
m_WriteByte = Send_Command(0, (const char*)m_SendDCCData, 2,2);
|
||||||
g_pLogger->SendAndFlushWithTime(L"[DCCScanStop] Out\n");
|
g_pLogger->SendAndFlushWithTime(L"[DCCScanStop] Out\n");
|
||||||
}
|
}
|
||||||
ReleaseMutex(g_WR_ToMove_Mutex);
|
ReleaseMutex(g_WR_ToMove_Mutex);
|
||||||
@@ -8884,24 +8891,75 @@ HSI_STATUS HSI_Motion::FindOriginTest(bool type)
|
|||||||
}
|
}
|
||||||
|
|
||||||
//===========================================================================
|
//===========================================================================
|
||||||
|
/**
|
||||||
|
* \brief 串口发送命令
|
||||||
|
* \param com
|
||||||
|
* \param _SendData 发送内容指针
|
||||||
|
* \param SendDataLength 发送字节长度
|
||||||
|
* \param expectType 期待返回长度,2:返回ok,8:返回8个字节,N:返回N字节,如果本次返回内容不是期待字节,等待或重发该命令。
|
||||||
|
* \return
|
||||||
|
*/
|
||||||
BOOL HSI_Motion::Send_Command(int com, const char* _SendData, DWORD SendDataLength)
|
BOOL HSI_Motion::Send_Command(int com, const char* _SendData, DWORD SendDataLength)
|
||||||
{
|
{
|
||||||
BOOL rStatus = TRUE;
|
BOOL rStatus = TRUE;
|
||||||
WaitForSingleObject(g_RW_Data_Mutex, INFINITE);
|
WaitForSingleObject(g_RW_Data_Mutex, INFINITE);
|
||||||
if (m_bConnected && (m_IsUseEF3 == 1) && (com == 0))
|
if (m_bConnected && (m_IsUseEF3 == 1) && (com == 0))
|
||||||
|
{
|
||||||
|
g_pLogger->SendAndFlushWithTime(L"[Send_Command] lenth:%d, %s\n", SendDataLength,
|
||||||
|
m_SO7_Serial.ToHexStr(_SendData, SendDataLength));
|
||||||
|
int iWriteByte = m_SO7_Serial.Send(_SendData, SendDataLength);
|
||||||
|
if (iWriteByte == 0)
|
||||||
|
{
|
||||||
|
int iError = GetLastError();
|
||||||
|
g_pLogger->SendAndFlushWithTime(L"[Send_Command] GetLastError = %d\n", iError);
|
||||||
|
if (iError == 1167)
|
||||||
|
{
|
||||||
|
g_pLogger->SendAndFlushWithTime(L"[Send_Command] GetLastError is 1167,EF3 device is no connect\n");
|
||||||
|
m_Thread_StateData = THREAD_PAUSED;
|
||||||
|
if (m_bConnected == true && g_IsClose == false)
|
||||||
|
{
|
||||||
|
g_pLogger->SendAndFlushWithTime(L"[Send_Command] GetLastError is 1167,EF3 device is no connect\n");
|
||||||
|
sEvenProp.Init();
|
||||||
|
sEvenProp.EventType = HSI_EVENT_ERROR;
|
||||||
|
sEvenProp.EventID = HSI_EVENT_MOTION;
|
||||||
|
sEvenProp.EventResponse = HSI_EVENT_RESPONSE_OK;
|
||||||
|
strcpy_s(sEvenProp.EventData, HSI_MaxStringLength, "EF3控制器已断开连接");
|
||||||
|
EventCallback(sEvenProp);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
g_pLogger->SendAndFlushWithTime(L"[Send_Command] m_SO7_Serial[%d].Send failed\n", com);
|
||||||
|
rStatus = FALSE;
|
||||||
|
}
|
||||||
|
// Sleep(5);
|
||||||
|
// m_SO7_Serial.OnReceive();
|
||||||
|
}
|
||||||
|
ReleaseMutex(g_RW_Data_Mutex);
|
||||||
|
return rStatus;
|
||||||
|
};
|
||||||
|
|
||||||
|
BOOL HSI_Motion::Send_Command(int com, const char* _SendData, DWORD SendDataLength, int expectType)
|
||||||
|
{
|
||||||
|
BOOL rStatus = TRUE;
|
||||||
|
WaitForSingleObject(g_RW_Data_Mutex, INFINITE);
|
||||||
|
|
||||||
|
//指令回复分两种情况:
|
||||||
|
//1、正常2字节,回复 OK,(0x6F 0x6B )
|
||||||
|
//2、返回多字节
|
||||||
|
|
||||||
|
if (m_bConnected && (m_IsUseEF3 == 1) /*&& (com == 0)*/)
|
||||||
{
|
{
|
||||||
//------------------------------调试区-----------------------------------//
|
//------------------------------调试区-----------------------------------//
|
||||||
//原文链接:https://blog.csdn.net/qq_31073871/article/details/85696092
|
//原文链接:https://blog.csdn.net/qq_31073871/article/details/85696092
|
||||||
/*printf("Send_Command: ");
|
//printf("Send_Command: ");
|
||||||
for (int i = 0; i < SendDataLength; i++)
|
//for (int i = 0; i < SendDataLength; i++)
|
||||||
{
|
//{
|
||||||
printf("%02X ", ((uint8_t*)_SendData)[i]);
|
// printf("%02X ", ((uint8_t*)_SendData)[i]);
|
||||||
}
|
//}
|
||||||
printf("\r\n");*/
|
//printf("\r\n");
|
||||||
|
|
||||||
//------------------------------调试区-----------------------------------//
|
//------------------------------调试区-----------------------------------//
|
||||||
|
|
||||||
g_pLogger->SendAndFlushWithTime(L"[Send_Command] lenth:%d, %s\n", SendDataLength,m_SO7_Serial.ToHexStr(_SendData, SendDataLength));
|
g_pLogger->SendAndFlushWithTime(L"[Send_Command] lenth:%d, expectType:%d, %s\n", SendDataLength, expectType,
|
||||||
|
m_SO7_Serial.ToHexStr(_SendData, SendDataLength));
|
||||||
int iWriteByte = m_SO7_Serial.Send(_SendData, SendDataLength);
|
int iWriteByte = m_SO7_Serial.Send(_SendData, SendDataLength);
|
||||||
|
|
||||||
if (iWriteByte == 0)
|
if (iWriteByte == 0)
|
||||||
@@ -8930,25 +8988,58 @@ BOOL HSI_Motion::Send_Command(int com, const char* _SendData, DWORD SendDataLeng
|
|||||||
if (iWriteByte != SendDataLength) // 写入字节数不等于发送字节数
|
if (iWriteByte != SendDataLength) // 写入字节数不等于发送字节数
|
||||||
{
|
{
|
||||||
rStatus = FALSE;
|
rStatus = FALSE;
|
||||||
g_pLogger->SendAndFlushWithTime(L"[Send_Command] WriteByte:%d,!= SendDataLength:%d\n", iWriteByte, SendDataLength);
|
g_pLogger->SendAndFlushWithTime(L"[Send_Command] WriteByte:%d,!= SendDataLength:%d\n", iWriteByte,
|
||||||
|
SendDataLength);
|
||||||
}
|
}
|
||||||
|
m_SO7_Serial.m_iRecvState = false; //发送完毕,接收状态置为false,并开始等待EF3回复
|
||||||
|
|
||||||
//判断回复值,是否为ok 6F 6B
|
//判断回复值,是否为ok 6F 6B
|
||||||
int iRetrys = 0;
|
int iRetrys = 0;
|
||||||
while (!m_SO7_Serial.m_iRecvState && iRetrys < 20)
|
bool iReSend = false;
|
||||||
|
while (!m_SO7_Serial.m_iRecvState && iRetrys < 100) //等待300毫秒
|
||||||
{
|
{
|
||||||
iRetrys++;
|
iRetrys++;
|
||||||
Sleep(100);
|
Sleep(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
//发送完当前指令后,第一次结束完成标志
|
//发送完当前指令后,第一次结束完成标志
|
||||||
if (m_SO7_Serial.m_iRecvState)
|
if (m_SO7_Serial.m_iRecvState)
|
||||||
{
|
{
|
||||||
if ((m_SO7_Serial.m_RecvData[0] == 0x6F) && (m_SO7_Serial.m_RecvData[0] == 0x6B))
|
if (m_SO7_Serial.m_iRecvBytes != expectType) //获取数量不等于期望数量,打印错误,并重发
|
||||||
|
{
|
||||||
|
iReSend = true;
|
||||||
|
g_pLogger->SendAndFlushWithTime(L"[Send_Command] EF3 Reply Error, RecvBytes:%d, %s\n",
|
||||||
|
m_SO7_Serial.m_iRecvBytes,
|
||||||
|
m_SO7_Serial.ToHexStr((const char*)m_SO7_Serial.m_RecvData,
|
||||||
|
m_SO7_Serial.m_iRecvBytes));
|
||||||
|
|
||||||
|
int iWriteByte = m_SO7_Serial.Send(_SendData, SendDataLength); //再次重发,并等待回应
|
||||||
|
|
||||||
|
if (iRetrys > 100)
|
||||||
|
{
|
||||||
|
iRetrys = 0;
|
||||||
|
while (m_SO7_Serial.m_iRecvBytes != expectType)
|
||||||
|
{
|
||||||
|
iRetrys++;
|
||||||
|
if (iRetrys > 100)
|
||||||
|
break;
|
||||||
|
Sleep(2);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (iRetrys > 100)
|
||||||
{
|
{
|
||||||
g_pLogger->SendAndFlushWithTime(L"[Send_Command] m_SO7_Serial[%d]. EF3 Reply not ok.\n", com);
|
|
||||||
rStatus = FALSE;
|
rStatus = FALSE;
|
||||||
}
|
}
|
||||||
|
else //获得期望结果
|
||||||
|
{
|
||||||
|
rStatus = TRUE;
|
||||||
|
g_pLogger->SendAndFlushWithTime(L"[Send_Command] EF3 Reply OK, RecvBytes:%d, %s\n",
|
||||||
|
m_SO7_Serial.m_iRecvBytes,
|
||||||
|
m_SO7_Serial.ToHexStr((const char*)m_SO7_Serial.m_RecvData,
|
||||||
|
m_SO7_Serial.m_iRecvBytes));
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
//打印串口返回值,该方式废弃
|
//打印串口返回值,该方式废弃
|
||||||
|
|||||||
@@ -556,6 +556,7 @@ public:
|
|||||||
CPSerial m_SO7_Serial;
|
CPSerial m_SO7_Serial;
|
||||||
DWORD m_WriteByte;
|
DWORD m_WriteByte;
|
||||||
BOOL Send_Command(int com, const char* _SendData, DWORD _SendDataLength);
|
BOOL Send_Command(int com, const char* _SendData, DWORD _SendDataLength);
|
||||||
|
BOOL Send_Command(int com, const char* _SendData, DWORD SendDataLength, int expectType);// 带期望返回值的发送命令
|
||||||
BOOL Receive_Data();
|
BOOL Receive_Data();
|
||||||
bool PortInit(int iSerialComPort, int iBuadRate);
|
bool PortInit(int iSerialComPort, int iBuadRate);
|
||||||
char m_RecvData[MAX_RECIEVE_BUFFER_SIZE];
|
char m_RecvData[MAX_RECIEVE_BUFFER_SIZE];
|
||||||
|
|||||||
@@ -474,8 +474,11 @@ int CPSerial::ReadBlock(BYTE* abIn, int MaxLength)
|
|||||||
// m_osRead.Offset=(m_osRead.Offset+dwLength)%MAXBLOCK;
|
// m_osRead.Offset=(m_osRead.Offset+dwLength)%MAXBLOCK;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
{
|
||||||
dwLength = 0;
|
dwLength = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
}
|
||||||
}
|
}
|
||||||
return dwLength;
|
return dwLength;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -12,5 +12,5 @@
|
|||||||
#define HSI_VERSION_REVNUM
|
#define HSI_VERSION_REVNUM
|
||||||
#define HSI_VERSION_BUILD_DATE _T(__DATE__ )
|
#define HSI_VERSION_BUILD_DATE _T(__DATE__ )
|
||||||
#define HSI_VERSION_BUILD_TIME _T(__TIME__ )
|
#define HSI_VERSION_BUILD_TIME _T(__TIME__ )
|
||||||
#define HSI_FILE_DESCRIPTION "2022.11.25 / 17:25 "
|
#define HSI_FILE_DESCRIPTION "2022.11.28 / 14:06 "
|
||||||
#define HSI_FILE_CSDESCRIPTION _T("2022.11.25 / 17:25 ")
|
#define HSI_FILE_CSDESCRIPTION _T("2022.11.28 / 14:06 ")
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
using System;
|
using System;
|
||||||
using System.Runtime.InteropServices;
|
using System.Runtime.InteropServices;
|
||||||
using System.Text;
|
using System.Text;
|
||||||
|
using System.Threading;
|
||||||
using HSI_SEVENOCEAN_EF1_CsTest.HSI;
|
using HSI_SEVENOCEAN_EF1_CsTest.HSI;
|
||||||
|
|
||||||
namespace HSI_SEVENOCEAN_EF1_CsTest
|
namespace HSI_SEVENOCEAN_EF1_CsTest
|
||||||
@@ -36,27 +37,32 @@ namespace HSI_SEVENOCEAN_EF1_CsTest
|
|||||||
rStatus = Interface.SetEventCallback(Interface.HsiCallback);
|
rStatus = Interface.SetEventCallback(Interface.HsiCallback);
|
||||||
Console.WriteLine("SetEventCallback:{0}", rStatus); //事件回调成功
|
Console.WriteLine("SetEventCallback:{0}", rStatus); //事件回调成功
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
//if (Motion.IsActive(true))
|
//if (Motion.IsActive(true))
|
||||||
{
|
{
|
||||||
rStatus = Motion.Startup(true); //运动初始化,回家判断
|
rStatus = Motion.Startup(true); //运动初始化,回家判断
|
||||||
Console.WriteLine("Motion.Startup:{0}", rStatus);
|
Console.WriteLine("Motion.Startup:{0}", rStatus);
|
||||||
|
|
||||||
|
//5 获取EF3固件版本号,待测试
|
||||||
|
var EF3Version = new byte[20];
|
||||||
|
//IntPtr intPtrEF3Version = IntPtr.Zero;
|
||||||
|
IntPtr intPtrEF3Version = Marshal.StringToHGlobalAnsi("");
|
||||||
|
rStatus = Interface.MotionGetFirewareVerion(intPtrEF3Version);
|
||||||
|
Console.WriteLine("Interface.MotionGetFirewareVerion: {0}", rStatus);
|
||||||
|
Marshal.Copy(intPtrEF3Version, EF3Version, 0, EF3Version.Length);
|
||||||
|
Console.WriteLine("EF3 FirewareVerion Version: {0}", Encoding.UTF8.GetString(EF3Version));
|
||||||
|
|
||||||
|
Motion.DCCScanStart();
|
||||||
|
Thread.Sleep(5000);
|
||||||
|
|
||||||
|
Motion.DCCScanStop();
|
||||||
IntPtr dataCache = IntPtr.Zero;
|
IntPtr dataCache = IntPtr.Zero;
|
||||||
int pointCount = 0;
|
int pointCount = 0;
|
||||||
Motion.GetPositionXyzCache(dataCache, pointCount);
|
Motion.GetPositionXyzCache(dataCache, pointCount);
|
||||||
Console.WriteLine("pointCount = " + pointCount);
|
Console.WriteLine("pointCount = " + pointCount);
|
||||||
|
|
||||||
|
|
||||||
//5 获取EF3固件版本号,待测试
|
|
||||||
//var EF3Version = new byte[20];
|
|
||||||
////IntPtr intPtrEF3Version = IntPtr.Zero;
|
|
||||||
//IntPtr intPtrEF3Version = Marshal.StringToHGlobalAnsi("");
|
|
||||||
//rStatus = Interface.MotionGetFirewareVerion(intPtrEF3Version);
|
|
||||||
//Console.WriteLine("Interface.MotionGetFirewareVerion: {0}", rStatus);
|
|
||||||
//Marshal.Copy(intPtrEF3Version, EF3Version, 0, EF3Version.Length);
|
|
||||||
//Console.WriteLine("EF3 FirewareVerion Version: {0}", Encoding.UTF8.GetString(EF3Version));
|
|
||||||
|
|
||||||
//6 是否回家
|
//6 是否回家
|
||||||
//var bHomed = true;
|
//var bHomed = true;
|
||||||
//rStatus = Motion.IsHomed(ref bHomed);
|
//rStatus = Motion.IsHomed(ref bHomed);
|
||||||
|
|||||||
Reference in New Issue
Block a user