|
|
|
|
|
#include "TransformerExport.h"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
TransformerExport::TransformerExport()
|
|
|
|
|
|
{
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
TransformerExport::~TransformerExport()
|
|
|
|
|
|
{
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
bool TransformerExport::InitDahuanTransformer()
|
|
|
|
|
|
{
|
|
|
|
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD>澯
|
|
|
|
|
|
std::vector<int> saparateCommVec = { m_leftTopComm , m_rightTopComm , m_leftButtomComm , m_rightButtomComm };
|
|
|
|
|
|
for (auto& iter : saparateCommVec)
|
|
|
|
|
|
{
|
|
|
|
|
|
m_transformer.SetWorkMode(FALSE, 100);
|
|
|
|
|
|
std::string strCom = std::to_string(m_nComBaduRate);
|
|
|
|
|
|
strCom += ",N,8,1";
|
|
|
|
|
|
bool bComOpen = m_transformer.Open(iter, (char*)strCom.c_str());
|
|
|
|
|
|
if (!bComOpen)
|
|
|
|
|
|
{
|
|
|
|
|
|
return false;
|
|
|
|
|
|
}
|
|
|
|
|
|
unsigned char Buf[21] = { 0 };
|
|
|
|
|
|
Buf[0] = 0x01;
|
|
|
|
|
|
Buf[1] = 0x10;
|
|
|
|
|
|
Buf[2] = 0x16;
|
|
|
|
|
|
Buf[3] = 0x00;
|
|
|
|
|
|
Buf[4] = 0x00;
|
|
|
|
|
|
Buf[5] = 0x06;
|
|
|
|
|
|
Buf[6] = 0x0C;
|
|
|
|
|
|
Buf[7] = 0x00;
|
|
|
|
|
|
Buf[8] = 0x00;
|
|
|
|
|
|
Buf[9] = 0x00;
|
|
|
|
|
|
Buf[10] = 0x00;
|
|
|
|
|
|
Buf[11] = 0x00;
|
|
|
|
|
|
Buf[12] = 0x00;
|
|
|
|
|
|
Buf[13] = 0x00;
|
|
|
|
|
|
Buf[14] = 0x00;
|
|
|
|
|
|
Buf[15] = 0x00;
|
|
|
|
|
|
Buf[16] = 0x00;
|
|
|
|
|
|
Buf[17] = 0x00;
|
|
|
|
|
|
Buf[18] = 0x30;
|
|
|
|
|
|
Buf[19] = 0xE4;
|
|
|
|
|
|
Buf[20] = 0xA7;
|
|
|
|
|
|
m_transformer.WriteBuf(Buf, 21);
|
|
|
|
|
|
}
|
|
|
|
|
|
//ִ<>л<EFBFBD>ԭָ<D4AD><D6B8>
|
|
|
|
|
|
for (auto& iter : saparateCommVec)
|
|
|
|
|
|
{
|
|
|
|
|
|
m_transformer.SetWorkMode(FALSE, 100);
|
|
|
|
|
|
std::string strCom = std::to_string(m_nComBaduRate);
|
|
|
|
|
|
strCom += ",N,8,1";
|
|
|
|
|
|
bool bComOpen = m_transformer.Open(iter, (char*)strCom.c_str());
|
|
|
|
|
|
unsigned char Buf[8] = { 0 };
|
|
|
|
|
|
Buf[0] = 0x01;
|
|
|
|
|
|
Buf[1] = 0x06;
|
|
|
|
|
|
Buf[2] = 0x01;
|
|
|
|
|
|
Buf[3] = 0x00;
|
|
|
|
|
|
Buf[4] = 0x00;
|
|
|
|
|
|
Buf[5] = 0x01;
|
|
|
|
|
|
Buf[6] = 0x49;
|
|
|
|
|
|
Buf[7] = 0xF6;
|
|
|
|
|
|
m_transformer.WriteBuf(Buf, 8);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
Sleep(10000);
|
|
|
|
|
|
|
|
|
|
|
|
//<2F><>ѯ<EFBFBD><D1AF><EFBFBD>е<EFBFBD><D0B5><EFBFBD><EFBFBD>Ƿ<EFBFBD>ȫ<EFBFBD><C8AB><EFBFBD><EFBFBD>ԭ
|
|
|
|
|
|
for (auto& iter : saparateCommVec)
|
|
|
|
|
|
{
|
|
|
|
|
|
m_transformer.SetWorkMode(FALSE, 100);
|
|
|
|
|
|
std::string strCom = std::to_string(m_nComBaduRate);
|
|
|
|
|
|
strCom += ",N,8,1";
|
|
|
|
|
|
bool bComOpen = m_transformer.Open(iter, (char*)strCom.c_str());
|
|
|
|
|
|
|
|
|
|
|
|
bool isReturnFlag = QueryOneIsReturn(iter);
|
|
|
|
|
|
if (!isReturnFlag)
|
|
|
|
|
|
{
|
|
|
|
|
|
return false;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
return true;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
bool TransformerExport::TransformerAbsMove(TransformerPos transformerType, double distance)
|
|
|
|
|
|
{
|
|
|
|
|
|
int comm = GetCommNum(transformerType);
|
|
|
|
|
|
m_transformer.SetWorkMode(FALSE, 100);
|
|
|
|
|
|
std::string strCom = std::to_string(m_nComBaduRate);
|
|
|
|
|
|
strCom += ",N,8,1";
|
|
|
|
|
|
bool bComOpen = m_transformer.Open(comm, (char*)strCom.c_str());
|
|
|
|
|
|
if (transformerType == PT_TRANSFORMER || transformerType == SAPARATE_PT_TRANSFORMER)
|
|
|
|
|
|
{
|
|
|
|
|
|
return CommonOperator(distance);
|
|
|
|
|
|
}
|
|
|
|
|
|
if (transformerType == LEFT_TOP_TRANSFORMER || transformerType == RIGHT_TOP_TRANSFORMER ||
|
|
|
|
|
|
transformerType == LEFT_BUTTOM_TRANSFORMER || transformerType == RIGHT_BUTTOM_TRANSFORMER)
|
|
|
|
|
|
{
|
|
|
|
|
|
short moveDis = static_cast<short>(distance);
|
|
|
|
|
|
unsigned char Buf[8] = { 0 };
|
|
|
|
|
|
Buf[0] = 0x01;
|
|
|
|
|
|
Buf[1] = 0x06;
|
|
|
|
|
|
Buf[2] = 0x01;
|
|
|
|
|
|
Buf[3] = 0x03;
|
|
|
|
|
|
Buf[4] = (moveDis >> 8) & 0xFF;
|
|
|
|
|
|
Buf[5] = moveDis & 0xFF;
|
|
|
|
|
|
uint16_t crcData = CRC16_MudBus(Buf, 6);
|
|
|
|
|
|
Buf[6] = crcData & 0xFF;
|
|
|
|
|
|
Buf[7] = crcData >> 8;
|
|
|
|
|
|
m_transformer.WriteBuf(Buf, 8);
|
|
|
|
|
|
|
|
|
|
|
|
//<2F><>ȡʵʱλ<CAB1><CEBB>
|
|
|
|
|
|
for (int i = 0; i < 30; i++)
|
|
|
|
|
|
{
|
|
|
|
|
|
//<2F>·<EFBFBD><C2B7><EFBFBD>ѯָ<D1AF><D6B8>
|
|
|
|
|
|
Buf[0] = 0x01;
|
|
|
|
|
|
Buf[1] = 0x03;
|
|
|
|
|
|
Buf[2] = 0x02;
|
|
|
|
|
|
Buf[3] = 0x02;
|
|
|
|
|
|
Buf[4] = 0x00;
|
|
|
|
|
|
Buf[5] = 0x01;
|
|
|
|
|
|
Buf[6] = 0x24;
|
|
|
|
|
|
Buf[7] = 0x72;
|
|
|
|
|
|
m_transformer.WriteBuf(Buf, 8);
|
|
|
|
|
|
|
|
|
|
|
|
//<2F><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>
|
|
|
|
|
|
unsigned char readBuf[8];
|
|
|
|
|
|
memset(readBuf, 0, 22);
|
|
|
|
|
|
int length = m_transformer.ReadBuf((char*)readBuf, 8);
|
|
|
|
|
|
if (readBuf[0] == 0x01 && readBuf[1] == 0x03 && readBuf[2] == 0x02)
|
|
|
|
|
|
{
|
|
|
|
|
|
short getPos = (readBuf[4] << 8) | readBuf[5];
|
|
|
|
|
|
if (abs(getPos - moveDis) <= 5)
|
|
|
|
|
|
{
|
|
|
|
|
|
return true;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
Sleep(1000);
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
return false;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
bool TransformerExport::CommonOperator(short distance)
|
|
|
|
|
|
{
|
|
|
|
|
|
TwoBytes byteValue;
|
|
|
|
|
|
|
|
|
|
|
|
// <20><> short <20><><EFBFBD>͵<EFBFBD><CDB5><EFBFBD><EFBFBD>ݲ<EFBFBD><DDB2>ֳ<EFBFBD><D6B3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֽ<EFBFBD>
|
|
|
|
|
|
byteValue.bytes[0] = (distance >> 8) & 0xFF; // <20><><EFBFBD>ֽ<EFBFBD>
|
|
|
|
|
|
byteValue.bytes[1] = distance & 0xFF; // <20><><EFBFBD>ֽ<EFBFBD>
|
|
|
|
|
|
|
|
|
|
|
|
unsigned char Buf[9] = { 0 };
|
|
|
|
|
|
Buf[0] = 0x55;
|
|
|
|
|
|
Buf[1] = 0xAA;
|
|
|
|
|
|
Buf[2] = 0x04;
|
|
|
|
|
|
Buf[3] = 0x01;
|
|
|
|
|
|
Buf[4] = 0x21;
|
|
|
|
|
|
Buf[5] = 0x37;
|
|
|
|
|
|
Buf[6] = byteValue.bytes[1];
|
|
|
|
|
|
Buf[7] = byteValue.bytes[0];
|
|
|
|
|
|
Buf[8] = GetCheckSum(Buf, 8);
|
|
|
|
|
|
|
|
|
|
|
|
short targetPos = (Buf[7] << 8) | Buf[6];
|
|
|
|
|
|
|
|
|
|
|
|
if (m_transformer.WriteBuf(Buf, 9) < 1)
|
|
|
|
|
|
{
|
|
|
|
|
|
return false;
|
|
|
|
|
|
}
|
|
|
|
|
|
Sleep(500);
|
|
|
|
|
|
|
|
|
|
|
|
unsigned char readBuf[22];
|
|
|
|
|
|
memset(readBuf, 0, 22);
|
|
|
|
|
|
int length = m_transformer.ReadBuf((char*)readBuf, 22);
|
|
|
|
|
|
|
|
|
|
|
|
for (int i = 0; i < 20; i++)
|
|
|
|
|
|
{
|
|
|
|
|
|
unsigned char Buf[8] = { 0 };
|
|
|
|
|
|
Buf[0] = 0x55;
|
|
|
|
|
|
Buf[1] = 0xAA;
|
|
|
|
|
|
Buf[2] = 0x03;
|
|
|
|
|
|
Buf[3] = 0x01;
|
|
|
|
|
|
Buf[4] = 0x04;
|
|
|
|
|
|
Buf[5] = 0x00;
|
|
|
|
|
|
Buf[6] = 0x22;
|
|
|
|
|
|
Buf[7] = 0x2A;
|
|
|
|
|
|
|
|
|
|
|
|
m_transformer.WriteBuf(Buf, 8);
|
|
|
|
|
|
|
|
|
|
|
|
Sleep(200);
|
|
|
|
|
|
|
|
|
|
|
|
unsigned char readBuf[22];
|
|
|
|
|
|
memset(readBuf, 0, 22);
|
|
|
|
|
|
int length = m_transformer.ReadBuf((char*)readBuf, 22);
|
|
|
|
|
|
if (readBuf[0] == 0xAA && readBuf[1] == 0x55)
|
|
|
|
|
|
{
|
|
|
|
|
|
short targetPos = (readBuf[8] << 8) | readBuf[7];
|
|
|
|
|
|
short nowPos = (readBuf[10] << 8) | readBuf[9];
|
|
|
|
|
|
if (abs(targetPos - nowPos) <= 3)
|
|
|
|
|
|
{
|
|
|
|
|
|
return true;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
//<2F>ж<EFBFBD><D0B6>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD>ڴ<EFBFBD><DAB4><EFBFBD><EFBFBD><EFBFBD>Ϣ
|
|
|
|
|
|
if (readBuf[15] != 0x00)
|
|
|
|
|
|
{
|
|
|
|
|
|
return false;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
Sleep(250);
|
|
|
|
|
|
}
|
|
|
|
|
|
return false;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
unsigned char TransformerExport::GetCheckSum(unsigned char* buf, int len)
|
|
|
|
|
|
{
|
|
|
|
|
|
unsigned char checksum = 0;
|
|
|
|
|
|
for (int i = 2; i < len; ++i)
|
|
|
|
|
|
{
|
|
|
|
|
|
checksum += buf[i];
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
return checksum;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
int TransformerExport::GetCommNum(TransformerPos transformerType)
|
|
|
|
|
|
{
|
|
|
|
|
|
int comm = -1;
|
|
|
|
|
|
switch (transformerType)
|
|
|
|
|
|
{
|
|
|
|
|
|
case PT_TRANSFORMER:
|
|
|
|
|
|
{
|
|
|
|
|
|
comm = m_debondingPTComm;
|
|
|
|
|
|
break;
|
|
|
|
|
|
}
|
|
|
|
|
|
case SAPARATE_PT_TRANSFORMER:
|
|
|
|
|
|
{
|
|
|
|
|
|
comm = m_saparatePTComm;
|
|
|
|
|
|
break;
|
|
|
|
|
|
}
|
|
|
|
|
|
case LEFT_TOP_TRANSFORMER:
|
|
|
|
|
|
{
|
|
|
|
|
|
comm = m_leftTopComm;
|
|
|
|
|
|
break;
|
|
|
|
|
|
}
|
|
|
|
|
|
case RIGHT_TOP_TRANSFORMER:
|
|
|
|
|
|
{
|
|
|
|
|
|
comm = m_rightTopComm;
|
|
|
|
|
|
break;
|
|
|
|
|
|
}
|
|
|
|
|
|
case LEFT_BUTTOM_TRANSFORMER:
|
|
|
|
|
|
{
|
|
|
|
|
|
comm = m_leftButtomComm;
|
|
|
|
|
|
break;
|
|
|
|
|
|
}
|
|
|
|
|
|
case RIGHT_BUTTOM_TRANSFORMER:
|
|
|
|
|
|
{
|
|
|
|
|
|
comm = m_rightButtomComm;
|
|
|
|
|
|
break;
|
|
|
|
|
|
}
|
|
|
|
|
|
default:
|
|
|
|
|
|
break;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
return comm;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
uint16_t TransformerExport::CRC16_MudBus(uint8_t *puchMsg, uint8_t usDataLen)
|
|
|
|
|
|
{
|
|
|
|
|
|
uint16_t uCRC = 0xffff;//CRC<52>Ĵ<EFBFBD><C4B4><EFBFBD>
|
|
|
|
|
|
|
|
|
|
|
|
for (uint8_t num = 0; num < usDataLen; num++) {
|
|
|
|
|
|
uCRC = (*puchMsg++) ^ uCRC;//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>16λ<36><CEBB>CRC<52>Ĵ<EFBFBD><C4B4><EFBFBD><EFBFBD>ĵ<EFBFBD>8λ<38><CEBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><F2A3ACBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>CRC<52>Ĵ<EFBFBD><C4B4><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
for (uint8_t x = 0; x < 8; x++) { //ѭ<><D1AD>8<EFBFBD><38>
|
|
|
|
|
|
if (uCRC & 0x0001) { //<2F>ж<EFBFBD><D0B6><EFBFBD><EFBFBD><EFBFBD>λΪ<CEBB><CEAA><EFBFBD><EFBFBD>1<EFBFBD><31>
|
|
|
|
|
|
uCRC = uCRC >> 1; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
uCRC = uCRC ^ 0xA001; //<2F><><EFBFBD><EFBFBD>0xA001<30><31><EFBFBD><EFBFBD>
|
|
|
|
|
|
}
|
|
|
|
|
|
else { //<2F>ж<EFBFBD><D0B6><EFBFBD><EFBFBD><EFBFBD>λΪ<CEBB><CEAA><EFBFBD><EFBFBD>0<EFBFBD><30>
|
|
|
|
|
|
uCRC = uCRC >> 1; //<2F><><EFBFBD><EFBFBD>
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
return uCRC;//<2F><><EFBFBD><EFBFBD>CRCУ<43><D0A3>ֵ
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
bool TransformerExport::QueryOneIsReturn(int comm)
|
|
|
|
|
|
{
|
|
|
|
|
|
//<2F><>ѯ<EFBFBD><D1AF>ԭ<EFBFBD><D4AD><EFBFBD><EFBFBD>
|
|
|
|
|
|
for (int i = 0; i < 10; i++)
|
|
|
|
|
|
{
|
|
|
|
|
|
unsigned char Buf[8] = { 0 };
|
|
|
|
|
|
Buf[0] = 0x01;
|
|
|
|
|
|
Buf[1] = 0x03;
|
|
|
|
|
|
Buf[2] = 0x02;
|
|
|
|
|
|
Buf[3] = 0x00;
|
|
|
|
|
|
Buf[4] = 0x00;
|
|
|
|
|
|
Buf[5] = 0x01;
|
|
|
|
|
|
Buf[6] = 0x8F;
|
|
|
|
|
|
Buf[7] = 0xB2;
|
|
|
|
|
|
m_transformer.WriteBuf(Buf, 8);
|
|
|
|
|
|
Sleep(1000);
|
|
|
|
|
|
|
|
|
|
|
|
unsigned char readBuf[8];
|
|
|
|
|
|
memset(readBuf, 0, 22);
|
|
|
|
|
|
int length = m_transformer.ReadBuf((char*)readBuf, 8);
|
|
|
|
|
|
if (readBuf[0] == 0x01 && readBuf[1] == 0x03 && readBuf[2] == 0x02)
|
|
|
|
|
|
{
|
|
|
|
|
|
//У<><D0A3><EFBFBD>ɹ<EFBFBD>
|
|
|
|
|
|
if (readBuf[5] == 0xB8 && readBuf[6] == 0x44)
|
|
|
|
|
|
{
|
|
|
|
|
|
Sleep(3000);
|
|
|
|
|
|
continue;
|
|
|
|
|
|
}
|
|
|
|
|
|
else
|
|
|
|
|
|
{
|
|
|
|
|
|
return true;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
else
|
|
|
|
|
|
{
|
|
|
|
|
|
return false;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
return false;
|
|
|
|
|
|
}
|