Add DM200

This commit is contained in:
TAO Cheng
2015-01-20 21:40:29 +08:00
parent 57d055bb4d
commit bf5158f0c9
10 changed files with 148 additions and 9 deletions
@@ -66,9 +66,12 @@ CSo7_TCPIP_Server::CSo7_TCPIP_Server()
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);
DM200= (short *)malloc(sizeof(short)*200);
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);
memset(DM200,0,sizeof(short)*200);
m_TCPIPMsg.Init();
}
@@ -88,6 +91,8 @@ CSo7_TCPIP_Server::~CSo7_TCPIP_Server()
DM8000=NULL;
free(DM10000);
DM10000=NULL;
free(DM200);
DM200=NULL;
}
//================================================================
int CSo7_TCPIP_Server::Init_Winsock()
@@ -307,6 +312,38 @@ BOOL CSo7_TCPIP_Server::Response_Handshake()
SendBuffer();
return TRUE;
}
//================================================================
BOOL CSo7_TCPIP_Server::Response_PLC_DM200_R(short _StartAddr,short _DataSize)
{
if(m_ClientSocket[m_nActiveClient] == INVALID_SOCKET)
{
return FALSE;
}
m_ClearSendBuf();
memcpy(m_TCPIPBuf[CH_SEND]._buffer,DRW_SData,sizeof(DRW_SData));
short sData(0);
_StartAddr-=200;
if ((_StartAddr+_DataSize)>=MAX_DM_PAGE_NUMBER)
{
_DataSize=MAX_DM_PAGE_NUMBER-_StartAddr;
}
for (int i=0;i<_DataSize;i++)
{
sData=DM200[_StartAddr+i];
m_TCPIPBuf[CH_SEND]._buffer[DRW_SDataIndexData+2*i]=(sData>>8) & 0x0ff;
m_TCPIPBuf[CH_SEND]._buffer[DRW_SDataIndexData+2*i+1]=sData & 0x0ff;
}
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();
return TRUE;
}
//================================================================
BOOL CSo7_TCPIP_Server::Response_PLC_DM5000_R(short _StartAddr,short _DataSize)
{
@@ -570,7 +607,12 @@ void CSo7_TCPIP_Server::m_ProcessSocketReadEvent(SOCKET s)
m_TCPIPMsg._CmdType=0;
m_TCPIPMsg._DataAddr=iAddr;
m_TCPIPMsg._DataSize=iDataSize;
if (iAddr>=20000)
if (iAddr>=200)
{
Response_PLC_DM200_R(iAddr,iDataSize);
m_TCPIPMsg._MsgType=RESPONSE_READ_PLC_STATE;
}
else if (iAddr>=20000)
{
m_TCPIPMsg._MsgType=RESPONSE_READ_ERRCODE;
}
@@ -610,6 +652,25 @@ void CSo7_TCPIP_Server::m_ProcessSocketReadEvent(SOCKET s)
m_TCPIPMsg._CmdType=1;
m_TCPIPMsg._DataAddr=iAddr;
m_TCPIPMsg._DataSize=iDataSize;
if (iAddr>=200)
{
int iBuffsize(0);
int iStartAddr(0);
iStartAddr=iAddr-200;
bData[0]=m_TCPIPBuf[CH_RECV]._buffer[DRW_RSDataIndexBufSize1];
bData[1]=m_TCPIPBuf[CH_RECV]._buffer[DRW_RSDataIndexBufSize2];
iBuffsize=(bData[0]<<8)+bData[1];
iBuffsize-=DRW_RDataCCLen;
for (int i=0;i<iBuffsize;i+=2)
{
bData[0]=m_TCPIPBuf[CH_RECV]._buffer[DRW_RDataIndexData+i];
bData[1]=m_TCPIPBuf[CH_RECV]._buffer[DRW_RDataIndexData+i+1];
DM200[iStartAddr++]=(bData[0]<<8)+bData[1];
}
m_TCPIPMsg._UpdateData=2;
RESPONSE_PLC_DM_UNKNOWN();
m_TCPIPMsg._MsgType=RESPONSE_WRITE_PLC_STATE;
}
if (iAddr>=8000)
{
int iBuffsize(0);
@@ -53,6 +53,7 @@ enum TCPIP_RESPONSE_RESULT
RESPONSE_READ_SENSOR_STATE,
RESPONSE_READ_CCD_DATA,
RESPONSE_READ_ERRCODE,
RESPONSE_READ_PLC_STATUS,
RESPONSE_RESULT
};
@@ -121,12 +122,14 @@ public:
short *DM5000;
short *DM8000;
short *DM10000;
short *DM200;
BOOL StartServer(HWND _hWnd,short _nPort);
BOOL StopServer();
BOOL _Send_Cmd_Write_State();
BOOL Response_Handshake();
BOOL Response_PLC_DM200_R(short _StartAddr,short _DataSize);//PLC State
BOOL Response_PLC_DM5000_R(short _StartAddr,short _DataSize);//PLC State
BOOL Response_PLC_DM10000_R(short _StartAddr,short _DataSize);//CCD