模拟PLC操作。
This commit is contained in:
@@ -12,7 +12,8 @@ const BYTE CommHeader[]={0x46,0x49,0x4E,0x53};
|
||||
const BYTE HandShaking[]={0X46,0X49,0X4E,0X53,0X00,0X00,0X00,0X10,0X00,0X00,0X00,0X01,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X03,0X00,0X00,0X00,0X05};
|
||||
const BYTE DRW_SData[]={0X46,0X49,0X4E,0X53,0X00,0X00,0X00,0X16,0X00,0X00,0X00,0X02,0X00,0X00,0X00,0X00,0XC0,0X00,0X02,0X00,0X03,0X00,0X00,0X05,0X00,0XFF,0X01,0X01,0X00,0X00};
|
||||
|
||||
const int DRW_SDataIndexDataSize=7;
|
||||
const int DRW_SDataIndexDataSize1=6;
|
||||
const int DRW_SDataIndexDataSize2=7;
|
||||
const int DRW_SDataHeadDataSize=8;
|
||||
const int DRW_SDataIndexData=30;
|
||||
|
||||
@@ -58,16 +59,17 @@ CSo7_TCPIP_Server::CSo7_TCPIP_Server()
|
||||
m_TCPIPBuf[i]._size = 0;
|
||||
m_TCPIPBuf[i]._CompletedSize = 0;
|
||||
m_TCPIPBuf[i]._save_send_cmd = 99;
|
||||
m_TCPIPBuf[i]._buffer = (char *)malloc(TCPIP_MAX_BUFF_SIZE);
|
||||
m_TCPIPBuf[i]._buffer = (char *)malloc(sizeof(char)*TCPIP_MAX_BUFF_SIZE);
|
||||
m_TCPIPBuf[i]._hProtoPending = false;
|
||||
m_TCPIPBuf[i]._event = NULL;
|
||||
};
|
||||
DM5000= (short *)malloc(MAX_DM_PAGE_NUMBER);
|
||||
DM8000= (short *)malloc(MAX_DM_PAGE_NUMBER);
|
||||
DM10000= (short *)malloc(MAX_DM_PAGE_NUMBER);
|
||||
memset(DM5000,0,MAX_DM_PAGE_NUMBER);
|
||||
memset(DM8000,0,MAX_DM_PAGE_NUMBER);
|
||||
memset(DM10000,0,MAX_DM_PAGE_NUMBER);
|
||||
DM5000= (short *)malloc(sizeof(short)*MAX_DM_PAGE_NUMBER);
|
||||
DM8000= (short *)malloc(sizeof(short)*MAX_DM_PAGE_NUMBER);
|
||||
DM10000= (short *)malloc(sizeof(short)*MAX_DM_PAGE_NUMBER);
|
||||
memset(DM5000,0,sizeof(short)*MAX_DM_PAGE_NUMBER);
|
||||
memset(DM8000,0,sizeof(short)*MAX_DM_PAGE_NUMBER);
|
||||
memset(DM10000,0,sizeof(short)*MAX_DM_PAGE_NUMBER);
|
||||
m_TCPIPMsg.Init();
|
||||
}
|
||||
|
||||
|
||||
@@ -326,7 +328,10 @@ BOOL CSo7_TCPIP_Server::Response_PLC_DM5000_R(short _StartAddr,short _DataSize)
|
||||
m_TCPIPBuf[CH_SEND]._buffer[DRW_SDataIndexData+2*i]=(sData>>8) & 0x0ff;
|
||||
m_TCPIPBuf[CH_SEND]._buffer[DRW_SDataIndexData+2*i+1]=sData & 0x0ff;
|
||||
}
|
||||
m_TCPIPBuf[CH_SEND]._buffer[DRW_SDataIndexDataSize]=static_cast<char>(DRW_SDataIndexData-DRW_SDataHeadDataSize+_DataSize*2);
|
||||
short sDataSize(0);
|
||||
sDataSize=(DRW_SDataIndexData-DRW_SDataHeadDataSize+_DataSize*2);
|
||||
m_TCPIPBuf[CH_SEND]._buffer[DRW_SDataIndexDataSize1]=static_cast<char>((sDataSize>>8) & 0x0ff);
|
||||
m_TCPIPBuf[CH_SEND]._buffer[DRW_SDataIndexDataSize2]=static_cast<char>(sDataSize & 0x0ff);
|
||||
m_TCPIPBuf[CH_SEND]._size=DRW_SDataIndexData+_DataSize*2;
|
||||
|
||||
SendBuffer();
|
||||
@@ -355,7 +360,10 @@ BOOL CSo7_TCPIP_Server::Response_PLC_DM10000_R(short _StartAddr,short _DataSize)
|
||||
m_TCPIPBuf[CH_SEND]._buffer[DRW_SDataIndexData+2*i]=(sData>>8) & 0x0ff;
|
||||
m_TCPIPBuf[CH_SEND]._buffer[DRW_SDataIndexData+2*i+1]=sData & 0x0ff;
|
||||
}
|
||||
m_TCPIPBuf[CH_SEND]._buffer[DRW_SDataIndexDataSize]=static_cast<char>(DRW_SDataIndexData-DRW_SDataHeadDataSize+_DataSize*2);
|
||||
short sDataSize(0);
|
||||
sDataSize=(DRW_SDataIndexData-DRW_SDataHeadDataSize+_DataSize*2);
|
||||
m_TCPIPBuf[CH_SEND]._buffer[DRW_SDataIndexDataSize1]=static_cast<char>((sDataSize>>8) & 0x0ff);
|
||||
m_TCPIPBuf[CH_SEND]._buffer[DRW_SDataIndexDataSize2]=static_cast<char>(sDataSize & 0x0ff);
|
||||
|
||||
m_TCPIPBuf[CH_SEND]._size=DRW_SDataIndexData+_DataSize*2;
|
||||
|
||||
@@ -539,14 +547,13 @@ void CSo7_TCPIP_Server::m_ProcessSocketReadEvent(SOCKET s)
|
||||
}
|
||||
m_TCPIPBuf[CH_RECV]._CompletedSize += bytesReceived;
|
||||
m_TCPIPBuf[CH_RECV]._size = m_TCPIPBuf[CH_RECV]._CompletedSize;
|
||||
int iPara(0);
|
||||
|
||||
m_TCPIPMsg.Init();
|
||||
if (strstr(m_TCPIPBuf[CH_RECV]._buffer, "FINS"))
|
||||
{
|
||||
if (m_TCPIPBuf[CH_RECV]._buffer[7]==0x0C)//handshake
|
||||
{
|
||||
Response_Handshake();
|
||||
iPara=RESPONSE_HANDSHAKE;
|
||||
m_TCPIPMsg._MsgType=RESPONSE_HANDSHAKE;
|
||||
}
|
||||
else if (m_TCPIPBuf[CH_RECV]._buffer[DRW_RDataIndexCMD1]==0x01
|
||||
&&m_TCPIPBuf[CH_RECV]._buffer[DRW_RDataIndexCMD2]==0x01)
|
||||
@@ -560,25 +567,32 @@ void CSo7_TCPIP_Server::m_ProcessSocketReadEvent(SOCKET s)
|
||||
bData[0]=m_TCPIPBuf[CH_RECV]._buffer[DRW_RDataIndexCh1];
|
||||
bData[1]=m_TCPIPBuf[CH_RECV]._buffer[DRW_RDataIndexCh2];
|
||||
iDataSize=(bData[0]<<8)+bData[1];
|
||||
|
||||
m_TCPIPMsg._CmdType=0;
|
||||
m_TCPIPMsg._DataAddr=iAddr;
|
||||
m_TCPIPMsg._DataSize=iDataSize;
|
||||
if (iAddr>=20000)
|
||||
{
|
||||
iPara=RESPONSE_READ_ERRCODE;
|
||||
m_TCPIPMsg._MsgType=RESPONSE_READ_ERRCODE;
|
||||
}
|
||||
else if (iAddr>=10000)
|
||||
{
|
||||
Response_PLC_DM10000_R(iAddr,iDataSize);
|
||||
iPara=RESPONSE_READ_CCD_DATA;
|
||||
m_TCPIPMsg._MsgType=RESPONSE_READ_CCD_DATA;
|
||||
}
|
||||
else if (iAddr>=5100)
|
||||
{
|
||||
Response_PLC_DM5000_R(iAddr,iDataSize);
|
||||
m_TCPIPMsg._MsgType=RESPONSE_READ_PLC_CALIB_POS;
|
||||
}
|
||||
else if (iAddr>=5000)
|
||||
{
|
||||
Response_PLC_DM5000_R(iAddr,iDataSize);
|
||||
iPara=RESPONSE_READ_PLC_STATE;
|
||||
m_TCPIPMsg._MsgType=RESPONSE_READ_PLC_STATE;
|
||||
}
|
||||
else
|
||||
{
|
||||
RESPONSE_PLC_DM_UNKNOWN();
|
||||
iPara=RESPONSE_UNKNOWN;
|
||||
m_TCPIPMsg._MsgType=RESPONSE_UNKNOWN;
|
||||
}
|
||||
}
|
||||
else if (m_TCPIPBuf[CH_RECV]._buffer[DRW_RDataIndexCMD1]==0x01
|
||||
@@ -593,6 +607,9 @@ void CSo7_TCPIP_Server::m_ProcessSocketReadEvent(SOCKET s)
|
||||
bData[0]=m_TCPIPBuf[CH_RECV]._buffer[DRW_RDataIndexCh1];
|
||||
bData[1]=m_TCPIPBuf[CH_RECV]._buffer[DRW_RDataIndexCh2];
|
||||
iDataSize=(bData[0]<<8)+bData[1];
|
||||
m_TCPIPMsg._CmdType=1;
|
||||
m_TCPIPMsg._DataAddr=iAddr;
|
||||
m_TCPIPMsg._DataSize=iDataSize;
|
||||
if (iAddr>=8000)
|
||||
{
|
||||
int iBuffsize(0);
|
||||
@@ -608,23 +625,27 @@ void CSo7_TCPIP_Server::m_ProcessSocketReadEvent(SOCKET s)
|
||||
bData[1]=m_TCPIPBuf[CH_RECV]._buffer[DRW_RDataIndexData+i+1];
|
||||
DM8000[iStartAddr++]=(bData[0]<<8)+bData[1];
|
||||
}
|
||||
m_TCPIPMsg._UpdateData=1;
|
||||
if (DM8000[2]==1)
|
||||
{
|
||||
DM5000[0]=1;
|
||||
m_TCPIPMsg._UpdateData=2;
|
||||
}
|
||||
RESPONSE_PLC_DM_UNKNOWN();
|
||||
iPara=RESPONSE_WRITE_PLC_STATE;
|
||||
m_TCPIPMsg._MsgType=RESPONSE_WRITE_PLC_STATE;
|
||||
}
|
||||
else
|
||||
{
|
||||
RESPONSE_PLC_DM_UNKNOWN();
|
||||
iPara=RESPONSE_UNKNOWN;
|
||||
m_TCPIPMsg._MsgType=RESPONSE_UNKNOWN;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
m_TCPIPBuf[CH_RECV]._CompletedSize = 0;
|
||||
m_TCPIPBuf[CH_RECV]._hProtoPending=FALSE;
|
||||
|
||||
if (iPara!=RESPONSE_READ_PLC_STATE)
|
||||
if (m_TCPIPMsg._MsgType!=RESPONSE_READ_PLC_STATE)
|
||||
{
|
||||
::PostMessage(m_hMsgWnd,WM_TCPIP_MSG,FD_READ,iPara);
|
||||
::PostMessage(m_hMsgWnd,WM_TCPIP_MSG,FD_READ,LPARAM(&m_TCPIPMsg));
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user