锁存拼包功能初版

This commit is contained in:
zhengxuan.zhang
2022-11-28 16:51:58 +08:00
parent 39e26fadba
commit 65cb1d3804
6 changed files with 163 additions and 81 deletions
+75 -58
View File
@@ -1135,7 +1135,6 @@ HSI_STATUS HSI_Motion::HomeMachine(bool bHomed)
m_WriteByte = Send_Command(0, (const char*)m_cSendData, 2);
Sleep(5);
//清除锁存板Flash区
m_cSendData[0] = 0x01;
m_cSendData[1] = 0x04;
@@ -3766,33 +3765,34 @@ HSI_STATUS HSI_Motion::GetPositionXyzCache(unsigned char* CacheData, int DataCou
unsigned char m_cSendData[8] = {0};
m_cSendData[0] = 0x01;
m_cSendData[1] = 0x05;
m_WriteByte = Send_Command(0, (const char*)m_cSendData, 2,8);
m_WriteByte = Send_Command(0, (const char*)m_cSendData, 2, 8); //期望回复8个字节,其中 4-7字节为点数量
//解析缓存点数量
if (m_SO7_Serial.m_iRecvState)
{
//特殊帧头, 表示该内容为回复点数
if ((m_SO7_Serial.m_RecvData[0] == 0x01) && (m_SO7_Serial.m_RecvData[1] == 0x1B))
if ((m_SO7_Serial.m_RecvData[0] == 0x01) && (m_SO7_Serial.m_RecvData[1] == 0x1B) && (m_SO7_Serial.
m_iRecvBytes == 8))
{
DataCount = (m_SO7_Serial.m_RecvData[4] << 24 | m_SO7_Serial.m_RecvData[5] << 16 | m_SO7_Serial.
m_RecvData[6] << 8 | m_SO7_Serial.m_RecvData[7]);
//详细 https://blog.csdn.net/hebbely/article/details/79577880
g_pLogger->SendAndFlushWithTime(L"[GetPositionXyzCache] DataCount%d, %s\n", DataCount,
m_SO7_Serial.ToHexStr((const char*)m_SO7_Serial.m_RecvData, 8));
m_SO7_Serial.HexToStr((const char*)m_SO7_Serial.m_RecvData, 8));
}
else
else //查询失败
{
g_pLogger->SendAndFlushWithTime(L"[GetPositionXyzCache] DataCount%d, %s\n", DataCount,
m_SO7_Serial.ToHexStr((const char*)m_SO7_Serial.m_RecvData, 8));
m_SO7_Serial.HexToStr((const char*)m_SO7_Serial.m_RecvData, 8));
}
}
//读取锁存点
m_cSendData[0] = 0x01;
m_cSendData[1] = 0x09;
m_WriteByte = Send_Command(0, (const char*)m_cSendData, 2,DataCount); //此处应该返回 "ok"
m_WriteByte = Send_Command(0, (const char*)m_cSendData, 2, DataCount*12);
//读取点的字节数,每个点占用12个字节
@@ -6406,11 +6406,16 @@ HSI_STATUS HSI_Motion::DCCScanStart()
iTriggleNum, iMotionDirection, begin_position[1]);
//m_WriteByte = Send_Command(0, (const char*)m_SendDCCData, m_SendDataLength);
//启动定时锁存的同时,启动扫描 外部IO
unsigned char m_cSendData[8] = {0};
//启动定时扫描,此处清空旧缓存值
unsigned char m_cSendData[8] = { 0 };
m_cSendData[0] = 0x01;
m_cSendData[1] = 0x04;
m_WriteByte = Send_Command(0, (const char*)m_cSendData, 2, 2);
//启动定时锁存的同时启动扫描外部IO
m_cSendData[0] = 0x01;
m_cSendData[1] = 0x02;
m_WriteByte = Send_Command(0, (const char*)m_cSendData, 2,2);
m_WriteByte = Send_Command(0, (const char*)m_cSendData, 2, 2);
g_pLogger->SendAndFlushWithTime(L"[DCCScanStart] Out\n");
@@ -6450,7 +6455,7 @@ HSI_STATUS HSI_Motion::DCCScanStop()
unsigned char m_SendDCCData[64] = {0};
m_SendDCCData[0] = 0x01;
m_SendDCCData[1] = 0x03;
m_WriteByte = Send_Command(0, (const char*)m_SendDCCData, 2,2);
m_WriteByte = Send_Command(0, (const char*)m_SendDCCData, 2, 2);
g_pLogger->SendAndFlushWithTime(L"[DCCScanStop] Out\n");
}
ReleaseMutex(g_WR_ToMove_Mutex);
@@ -8906,7 +8911,7 @@ BOOL HSI_Motion::Send_Command(int com, const char* _SendData, DWORD SendDataLeng
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));
m_SO7_Serial.HexToStr(_SendData, SendDataLength));
int iWriteByte = m_SO7_Serial.Send(_SendData, SendDataLength);
if (iWriteByte == 0)
{
@@ -8959,7 +8964,7 @@ BOOL HSI_Motion::Send_Command(int com, const char* _SendData, DWORD SendDataLeng
//------------------------------调试区-----------------------------------//
g_pLogger->SendAndFlushWithTime(L"[Send_Command] lenth:%d, expectType:%d, %s\n", SendDataLength, expectType,
m_SO7_Serial.ToHexStr(_SendData, SendDataLength));
m_SO7_Serial.HexToStr(_SendData, SendDataLength));
int iWriteByte = m_SO7_Serial.Send(_SendData, SendDataLength);
if (iWriteByte == 0)
@@ -8992,60 +8997,72 @@ BOOL HSI_Motion::Send_Command(int com, const char* _SendData, DWORD SendDataLeng
SendDataLength);
}
m_SO7_Serial.m_iRecvState = false; //发送完毕,接收状态置为false,并开始等待EF3回复
m_SO7_Serial.m_iExpectBytes = expectType;
//判断回复值,是否为ok 6F 6B
int iRetrys = 0;
bool iReSend = false;
while (!m_SO7_Serial.m_iRecvState && iRetrys < 100) //等待300毫秒
while (!m_SO7_Serial.m_iRecvState && iRetrys < 1000) //等待
{
iRetrys++;
Sleep(1);
Sleep(3);
}
g_pLogger->SendAndFlushWithTime(L"[Send_Command] iRetrys:%d\n", iRetrys);
//发送完当前指令后,第一次结束完成标志
if (m_SO7_Serial.m_iRecvState)
//if (m_SO7_Serial.m_iRecvBytes != expectType) //获取数量不等于期望数量,打印错误,并重发
//{
// g_pLogger->SendAndFlushWithTime(L"[Send_Command] EF3 Reply Error, RecvBytes:%d, %s\n",
// m_SO7_Serial.m_iRecvBytes,
// m_SO7_Serial.HexToStr((const char*)m_SO7_Serial.m_RecvData,
// m_SO7_Serial.m_iRecvBytes));
// m_SO7_Serial.m_iRecvState = false;
// int iWriteByte = m_SO7_Serial.Send(_SendData, SendDataLength); //再次重发,并等待回应
// while (!m_SO7_Serial.m_iRecvState && iRetrys < 100) //等待300毫秒
// {
// iRetrys++;
// Sleep(3);
// }
// if (m_SO7_Serial.m_iRecvState)
// {
// if (iRetrys > 100)
// {
// iRetrys = 0;
// while (m_SO7_Serial.m_iRecvBytes != expectType)
// {
// iRetrys++;
// if (iRetrys > 100)
// break;
// Sleep(2);
// }
// }
// if (iRetrys > 100)
// {
// rStatus = HSI_STATUS_FAILED;
// g_pLogger->SendAndFlushWithTime(L"[Send_Command] EF3 Reply Error!");
// }
// else //获得期望结果
// {
// rStatus = HSI_STATUS_NORMAL;
// g_pLogger->SendAndFlushWithTime(L"[Send_Command] EF3 Reply OK, RecvBytes:%d, %s\n",
// m_SO7_Serial.m_iRecvBytes,
// m_SO7_Serial.HexToStr((const char*)m_SO7_Serial.m_RecvData,
// m_SO7_Serial.m_iRecvBytes));
// }
// }
//}
//else
{
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)
{
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));
}
}
rStatus = FALSE;
g_pLogger->SendAndFlushWithTime(L"[Send_Command] EF3 Reply OK, RecvBytes:%d, %s\n",
m_SO7_Serial.m_iRecvBytes,
m_SO7_Serial.HexToStr((const char*)m_SO7_Serial.m_RecvData,
m_SO7_Serial.m_iRecvBytes));
}
//打印串口返回值,该方式废弃
//Sleep(5);
//m_SO7_Serial.OnReceive();
}
//打印串口返回值,该方式废弃
//Sleep(5);
//m_SO7_Serial.OnReceive();
ReleaseMutex(g_RW_Data_Mutex);
return rStatus;
};