模拟PLC操作。

This commit is contained in:
TAO Cheng
2014-11-25 11:53:12 +08:00
parent e0883dae59
commit 058f911000
6 changed files with 326 additions and 144 deletions
@@ -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 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 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_SDataHeadDataSize=8;
const int DRW_SDataIndexData=30; const int DRW_SDataIndexData=30;
@@ -58,16 +59,17 @@ CSo7_TCPIP_Server::CSo7_TCPIP_Server()
m_TCPIPBuf[i]._size = 0; m_TCPIPBuf[i]._size = 0;
m_TCPIPBuf[i]._CompletedSize = 0; m_TCPIPBuf[i]._CompletedSize = 0;
m_TCPIPBuf[i]._save_send_cmd = 99; 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]._hProtoPending = false;
m_TCPIPBuf[i]._event = NULL; m_TCPIPBuf[i]._event = NULL;
}; };
DM5000= (short *)malloc(MAX_DM_PAGE_NUMBER); DM5000= (short *)malloc(sizeof(short)*MAX_DM_PAGE_NUMBER);
DM8000= (short *)malloc(MAX_DM_PAGE_NUMBER); DM8000= (short *)malloc(sizeof(short)*MAX_DM_PAGE_NUMBER);
DM10000= (short *)malloc(MAX_DM_PAGE_NUMBER); DM10000= (short *)malloc(sizeof(short)*MAX_DM_PAGE_NUMBER);
memset(DM5000,0,MAX_DM_PAGE_NUMBER); memset(DM5000,0,sizeof(short)*MAX_DM_PAGE_NUMBER);
memset(DM8000,0,MAX_DM_PAGE_NUMBER); memset(DM8000,0,sizeof(short)*MAX_DM_PAGE_NUMBER);
memset(DM10000,0,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]=(sData>>8) & 0x0ff;
m_TCPIPBuf[CH_SEND]._buffer[DRW_SDataIndexData+2*i+1]=sData & 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; m_TCPIPBuf[CH_SEND]._size=DRW_SDataIndexData+_DataSize*2;
SendBuffer(); 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]=(sData>>8) & 0x0ff;
m_TCPIPBuf[CH_SEND]._buffer[DRW_SDataIndexData+2*i+1]=sData & 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; 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]._CompletedSize += bytesReceived;
m_TCPIPBuf[CH_RECV]._size = m_TCPIPBuf[CH_RECV]._CompletedSize; 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 (strstr(m_TCPIPBuf[CH_RECV]._buffer, "FINS"))
{ {
if (m_TCPIPBuf[CH_RECV]._buffer[7]==0x0C)//handshake if (m_TCPIPBuf[CH_RECV]._buffer[7]==0x0C)//handshake
{ {
Response_Handshake(); Response_Handshake();
iPara=RESPONSE_HANDSHAKE; m_TCPIPMsg._MsgType=RESPONSE_HANDSHAKE;
} }
else if (m_TCPIPBuf[CH_RECV]._buffer[DRW_RDataIndexCMD1]==0x01 else if (m_TCPIPBuf[CH_RECV]._buffer[DRW_RDataIndexCMD1]==0x01
&&m_TCPIPBuf[CH_RECV]._buffer[DRW_RDataIndexCMD2]==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[0]=m_TCPIPBuf[CH_RECV]._buffer[DRW_RDataIndexCh1];
bData[1]=m_TCPIPBuf[CH_RECV]._buffer[DRW_RDataIndexCh2]; bData[1]=m_TCPIPBuf[CH_RECV]._buffer[DRW_RDataIndexCh2];
iDataSize=(bData[0]<<8)+bData[1]; iDataSize=(bData[0]<<8)+bData[1];
m_TCPIPMsg._CmdType=0;
m_TCPIPMsg._DataAddr=iAddr;
m_TCPIPMsg._DataSize=iDataSize;
if (iAddr>=20000) if (iAddr>=20000)
{ {
iPara=RESPONSE_READ_ERRCODE; m_TCPIPMsg._MsgType=RESPONSE_READ_ERRCODE;
} }
else if (iAddr>=10000) else if (iAddr>=10000)
{ {
Response_PLC_DM10000_R(iAddr,iDataSize); 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) else if (iAddr>=5000)
{ {
Response_PLC_DM5000_R(iAddr,iDataSize); Response_PLC_DM5000_R(iAddr,iDataSize);
iPara=RESPONSE_READ_PLC_STATE; m_TCPIPMsg._MsgType=RESPONSE_READ_PLC_STATE;
} }
else else
{ {
RESPONSE_PLC_DM_UNKNOWN(); RESPONSE_PLC_DM_UNKNOWN();
iPara=RESPONSE_UNKNOWN; m_TCPIPMsg._MsgType=RESPONSE_UNKNOWN;
} }
} }
else if (m_TCPIPBuf[CH_RECV]._buffer[DRW_RDataIndexCMD1]==0x01 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[0]=m_TCPIPBuf[CH_RECV]._buffer[DRW_RDataIndexCh1];
bData[1]=m_TCPIPBuf[CH_RECV]._buffer[DRW_RDataIndexCh2]; bData[1]=m_TCPIPBuf[CH_RECV]._buffer[DRW_RDataIndexCh2];
iDataSize=(bData[0]<<8)+bData[1]; iDataSize=(bData[0]<<8)+bData[1];
m_TCPIPMsg._CmdType=1;
m_TCPIPMsg._DataAddr=iAddr;
m_TCPIPMsg._DataSize=iDataSize;
if (iAddr>=8000) if (iAddr>=8000)
{ {
int iBuffsize(0); 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]; bData[1]=m_TCPIPBuf[CH_RECV]._buffer[DRW_RDataIndexData+i+1];
DM8000[iStartAddr++]=(bData[0]<<8)+bData[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(); RESPONSE_PLC_DM_UNKNOWN();
iPara=RESPONSE_WRITE_PLC_STATE; m_TCPIPMsg._MsgType=RESPONSE_WRITE_PLC_STATE;
} }
else else
{ {
RESPONSE_PLC_DM_UNKNOWN(); RESPONSE_PLC_DM_UNKNOWN();
iPara=RESPONSE_UNKNOWN; m_TCPIPMsg._MsgType=RESPONSE_UNKNOWN;
} }
} }
} }
m_TCPIPBuf[CH_RECV]._CompletedSize = 0; m_TCPIPBuf[CH_RECV]._CompletedSize = 0;
m_TCPIPBuf[CH_RECV]._hProtoPending=FALSE; 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));
} }
} }
@@ -48,6 +48,7 @@ enum TCPIP_RESPONSE_RESULT
RESPONSE_UNKNOWN=0, RESPONSE_UNKNOWN=0,
RESPONSE_HANDSHAKE, RESPONSE_HANDSHAKE,
RESPONSE_READ_PLC_STATE, RESPONSE_READ_PLC_STATE,
RESPONSE_READ_PLC_CALIB_POS,
RESPONSE_WRITE_PLC_STATE, RESPONSE_WRITE_PLC_STATE,
RESPONSE_READ_SENSOR_STATE, RESPONSE_READ_SENSOR_STATE,
RESPONSE_READ_CCD_DATA, RESPONSE_READ_CCD_DATA,
@@ -86,6 +87,27 @@ struct s_tcpip_state
_PCMeasureResult=0; _PCMeasureResult=0;
}; };
}; };
struct s_tcpip_msg_data
{
int _MsgType;
int _CmdType;
int _DataAddr;
int _DataSize;
int _UpdateData;
void Init()
{
_MsgType=0;
_CmdType=0;
_DataAddr=0;
_DataSize=0;
_UpdateData=0;
};
s_tcpip_msg_data()
{
Init();
};
};
//====================================================================================== //======================================================================================
class CSo7_TCPIP_Server class CSo7_TCPIP_Server
{ {
@@ -95,7 +117,7 @@ public:
static struct_so7_tcpip_buff m_TCPIPBuf[lChannelSize]; static struct_so7_tcpip_buff m_TCPIPBuf[lChannelSize];
static s_tcpip_state m_TCPIPServerState; static s_tcpip_state m_TCPIPServerState;
s_tcpip_msg_data m_TCPIPMsg;
short *DM5000; short *DM5000;
short *DM8000; short *DM8000;
short *DM10000; short *DM10000;
@@ -1093,7 +1093,7 @@ BEGIN
PUSHBUTTON "Update",IDC_BUTTON_PLC_TCPIP_SERVER_UPDATEDATA,277,294,40,14 PUSHBUTTON "Update",IDC_BUTTON_PLC_TCPIP_SERVER_UPDATEDATA,277,294,40,14
EDITTEXT IDC_EDIT_PLC_TCPIP_SERVER_PORTNUMBER,51,30,40,14,ES_AUTOHSCROLL EDITTEXT IDC_EDIT_PLC_TCPIP_SERVER_PORTNUMBER,51,30,40,14,ES_AUTOHSCROLL
LTEXT "Port",IDC_STATIC,29,33,14,8 LTEXT "Port",IDC_STATIC,29,33,14,8
CONTROL "CCD DM",IDC_RADIO_PLC_TCPIP_SERVER_ADDR_CCD_DM,"Button",BS_AUTORADIOBUTTON | WS_GROUP,32,110,42,10 CONTROL "CCD1 DM",IDC_RADIO_PLC_TCPIP_SERVER_ADDR_CCD_DM,"Button",BS_AUTORADIOBUTTON | WS_GROUP,32,110,46,10
CONTROL "DM 5000",IDC_RADIO_PLC_TCPIP_SERVER_ADDR_DM5000,"Button",BS_AUTORADIOBUTTON,93,110,44,10 CONTROL "DM 5000",IDC_RADIO_PLC_TCPIP_SERVER_ADDR_DM5000,"Button",BS_AUTORADIOBUTTON,93,110,44,10
CONTROL "DM 8000",IDC_RADIO_PLC_TCPIP_SERVER_ADDR_DM8000,"Button",BS_AUTORADIOBUTTON,156,110,44,10 CONTROL "DM 8000",IDC_RADIO_PLC_TCPIP_SERVER_ADDR_DM8000,"Button",BS_AUTORADIOBUTTON,156,110,44,10
END END
@@ -23,8 +23,8 @@ extern CSo7_TCPIP_Server* g_pSo7_TCPIP_Server;
IMPLEMENT_DYNAMIC(CSo7_Util_PLC_TCPIP_SERVER, CDialog) IMPLEMENT_DYNAMIC(CSo7_Util_PLC_TCPIP_SERVER, CDialog)
CSo7_Util_PLC_TCPIP_SERVER::CSo7_Util_PLC_TCPIP_SERVER(CWnd* pParent /*=NULL*/) CSo7_Util_PLC_TCPIP_SERVER::CSo7_Util_PLC_TCPIP_SERVER(CWnd* pParent /*=NULL*/)
: CDialog(CSo7_Util_PLC_TCPIP_SERVER::IDD, pParent) : CDialog(CSo7_Util_PLC_TCPIP_SERVER::IDD, pParent)
{ {
for(int i=0;i<MAX_CCD_ADDR;i++) for(int i=0;i<MAX_CCD_ADDR;i++)
{ {
@@ -38,7 +38,7 @@ CSo7_Util_PLC_TCPIP_SERVER::~CSo7_Util_PLC_TCPIP_SERVER()
void CSo7_Util_PLC_TCPIP_SERVER::DoDataExchange(CDataExchange* pDX) void CSo7_Util_PLC_TCPIP_SERVER::DoDataExchange(CDataExchange* pDX)
{ {
CDialog::DoDataExchange(pDX); CDialog::DoDataExchange(pDX);
DDX_Control(pDX, IDC_EDIT_MSG, m_edMSG); DDX_Control(pDX, IDC_EDIT_MSG, m_edMSG);
DDX_Control(pDX, IDC_LIST_PLC_TCPIP_SERVER_CCDDATA, m_DataList); DDX_Control(pDX, IDC_LIST_PLC_TCPIP_SERVER_CCDDATA, m_DataList);
@@ -85,104 +85,178 @@ BOOL CSo7_Util_PLC_TCPIP_SERVER::OnInitDialog()
pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu); pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
} }
} }
if (g_pSo7_TCPIP_Server)
{
CString str;
str.Format(_T("%d"),g_pSo7_TCPIP_Server->m_TCPIPServerState._PLCSensorState[OMRON_PLC_CCD1_CAMERA1]);
GetDlgItem(IDC_EDIT_PLC_TCPIP_SERVER_STATE_CCD1)->SetWindowTextW(str);
str.Format(_T("%d"),g_pSo7_TCPIP_Server->m_TCPIPServerState._PLCSensorState[OMRON_PLC_CCD1_CAMERA2]);
GetDlgItem(IDC_EDIT_PLC_TCPIP_SERVER_STATE_CCD2)->SetWindowTextW(str);
str.Format(_T("%d"),g_pSo7_TCPIP_Server->m_TCPIPServerState._PLCSensorState[IDC_EDIT_PLC_TCPIP_SERVER_STATE_LASER1]);
GetDlgItem(IDC_EDIT_PLC_TCPIP_SERVER_STATE_LASER1)->SetWindowTextW(str);
str.Format(_T("%d"),g_pSo7_TCPIP_Server->m_TCPIPServerState._PLCSensorState[OMRON_PLC_CCD1_CAMERA1]);
GetDlgItem(IDC_EDIT_PLC_TCPIP_SERVER_STATE_LASER2)->SetWindowTextW(str);
str.Format(_T("%d"),g_pSo7_TCPIP_Server->m_TCPIPServerState._PLCRunningState);
GetDlgItem(IDC_EDIT_PLC_TCPIP_SERVER_PLC_STATE)->SetWindowTextW(str);
CString str; GetDlgItem(IDC_EDIT_PLC_TCPIP_SERVER_PORTNUMBER)->SetWindowTextW(_T("9600"));
str.Format(_T("%d"),g_pSo7_TCPIP_Server->m_TCPIPServerState._PLCSensorState[OMRON_PLC_CCD1_CAMERA1]); int i(0);
GetDlgItem(IDC_EDIT_PLC_TCPIP_SERVER_STATE_CCD1)->SetWindowTextW(str); m_CCDData_D10000[i++]=25000;
str.Format(_T("%d"),g_pSo7_TCPIP_Server->m_TCPIPServerState._PLCSensorState[OMRON_PLC_CCD1_CAMERA2]); m_CCDData_D10000[i++]=1000;
GetDlgItem(IDC_EDIT_PLC_TCPIP_SERVER_STATE_CCD2)->SetWindowTextW(str); m_CCDData_D10000[i++]=1000;
str.Format(_T("%d"),g_pSo7_TCPIP_Server->m_TCPIPServerState._PLCSensorState[IDC_EDIT_PLC_TCPIP_SERVER_STATE_LASER1]); m_CCDData_D10000[i++]=1000;
GetDlgItem(IDC_EDIT_PLC_TCPIP_SERVER_STATE_LASER1)->SetWindowTextW(str); m_CCDData_D10000[i++]=10000;
str.Format(_T("%d"),g_pSo7_TCPIP_Server->m_TCPIPServerState._PLCSensorState[OMRON_PLC_CCD1_CAMERA1]); m_CCDData_D10000[i++]=1000;
GetDlgItem(IDC_EDIT_PLC_TCPIP_SERVER_STATE_LASER2)->SetWindowTextW(str); m_CCDData_D10000[i++]=20000;
str.Format(_T("%d"),g_pSo7_TCPIP_Server->m_TCPIPServerState._PLCRunningState); m_CCDData_D10000[i++]=102000;
GetDlgItem(IDC_EDIT_PLC_TCPIP_SERVER_PLC_STATE)->SetWindowTextW(str); m_CCDData_D10000[i++]=3000;
m_CCDData_D10000[i++]=4000;
GetDlgItem(IDC_EDIT_PLC_TCPIP_SERVER_PORTNUMBER)->SetWindowTextW(_T("9600")); m_CCDData_D10000[i++]=204000;
int i(0); m_CCDData_D10000[i++]=5000;
m_CCDData_D10000[i++]=25000; m_CCDData_D10000[i++]=6000;
m_CCDData_D10000[i++]=1000; m_CCDData_D10000[i++]=7000;
m_CCDData_D10000[i++]=1000; m_CCDData_D10000[i++]=8000;
m_CCDData_D10000[i++]=1000; m_CCDData_D10000[i++]=303000;
m_CCDData_D10000[i++]=10000; m_CCDData_D10000[i++]=9000;
m_CCDData_D10000[i++]=1000; m_CCDData_D10000[i++]=9000;
m_CCDData_D10000[i++]=20000; m_CCDData_D10000[i++]=5000;
m_CCDData_D10000[i++]=102000; m_CCDData_D10000[i++]=406000;
m_CCDData_D10000[i++]=3000; m_CCDData_D10000[i++]=10000;
m_CCDData_D10000[i++]=4000; m_CCDData_D10000[i++]=10000;
m_CCDData_D10000[i++]=204000; m_CCDData_D10000[i++]=30000;
m_CCDData_D10000[i++]=5000; m_CCDData_D10000[i++]=30000;
m_CCDData_D10000[i++]=6000; m_CCDData_D10000[i++]=50000;
m_CCDData_D10000[i++]=7000; m_CCDData_D10000[i++]=10000;
m_CCDData_D10000[i++]=8000; if (g_pSo7_TCPIP_Server)
m_CCDData_D10000[i++]=303000;
m_CCDData_D10000[i++]=9000;
m_CCDData_D10000[i++]=9000;
m_CCDData_D10000[i++]=5000;
m_CCDData_D10000[i++]=406000;
m_CCDData_D10000[i++]=10000;
m_CCDData_D10000[i++]=10000;
m_CCDData_D10000[i++]=30000;
m_CCDData_D10000[i++]=30000;
m_CCDData_D10000[i++]=50000;
m_CCDData_D10000[i++]=10000;
if (g_pSo7_TCPIP_Server)
{
int iData(0);
BYTE DM_Data[4]={0,0,0,0};
int StartAddr(60);
for (int i=0;i<MAX_CCD_ADDR;i++)
{ {
iData=m_CCDData_D10000[i]; int iData(0);
DM_Data[0]=(iData>>24) & 0x0ff; BYTE DM_Data[4]={0,0,0,0};
DM_Data[1]=(iData>>16) & 0x0ff; int StartAddr(60);
DM_Data[2]=(iData>>8) & 0x0ff; for (int i=0;i<MAX_CCD_ADDR;i++)
DM_Data[3]=iData & 0x0ff; {
g_pSo7_TCPIP_Server->DM10000[StartAddr+2*i]=(DM_Data[2]<<8)+DM_Data[3]; iData=m_CCDData_D10000[i];
g_pSo7_TCPIP_Server->DM10000[StartAddr+2*i+1]=(DM_Data[0]<<8)+DM_Data[1]; DM_Data[0]=(iData>>24) & 0x0ff;
} DM_Data[1]=(iData>>16) & 0x0ff;
} DM_Data[2]=(iData>>8) & 0x0ff;
if (g_pSo7_TCPIP_Server) DM_Data[3]=iData & 0x0ff;
{ g_pSo7_TCPIP_Server->DM10000[StartAddr+2*i]=(DM_Data[2]<<8)+DM_Data[3];
int iDM5000DWord[140]={0}; g_pSo7_TCPIP_Server->DM10000[StartAddr+2*i+1]=(DM_Data[0]<<8)+DM_Data[1];
int index(0); }
for (int i=0;i<140;i++)
{
iDM5000DWord[i]=0;
} }
iDM5000DWord[index++]=1; if (g_pSo7_TCPIP_Server)
iDM5000DWord[index++]=10000;
index=7;
iDM5000DWord[index++]=1;
iDM5000DWord[index++]=20000;
int iData(0);
BYTE DM_Data[4]={0,0,0,0};
index=9;
g_pSo7_TCPIP_Server->DM5000[index]=0;
int StartAddr(100);
for (int i=0;i<140;i++)
{ {
iData=iDM5000DWord[i]; int iData(0);
DM_Data[0]=(iData>>24) & 0x0ff; BYTE DM_Data[4]={0,0,0,0};
DM_Data[1]=(iData>>16) & 0x0ff; int StartAddr(0);
DM_Data[2]=(iData>>8) & 0x0ff; int index(0);
DM_Data[3]=iData & 0x0ff; int iDM5000DWord[150]={0};
g_pSo7_TCPIP_Server->DM5000[StartAddr+2*i]=(DM_Data[2]<<8)+DM_Data[3]; for (int i=0;i<150;i++)
g_pSo7_TCPIP_Server->DM5000[StartAddr+2*i+1]=(DM_Data[0]<<8)+DM_Data[1]; {
} iDM5000DWord[i]=0;
} }
StartAddr=100;
index=0;
for (int i=0;i<10;i++)
{
iDM5000DWord[index++]=1;
iDM5000DWord[index++]=(i+1)*10000;
index=7*(i+1);
}
for (int i=0;i<6;i++)
{
iDM5000DWord[index++]=1;
iDM5000DWord[index++]=(i+1)*10000;
index=7*(i+11);
}
for (int i=0;i<150;i++)
{
iData=iDM5000DWord[i];
DM_Data[0]=(iData>>24) & 0x0ff;
DM_Data[1]=(iData>>16) & 0x0ff;
DM_Data[2]=(iData>>8) & 0x0ff;
DM_Data[3]=iData & 0x0ff;
m_DMAddrList=DM_ADDR_CCD; g_pSo7_TCPIP_Server->DM5000[StartAddr+2*i]=(DM_Data[2]<<8)+DM_Data[3];
((CButton *)GetDlgItem(IDC_RADIO_PLC_TCPIP_SERVER_ADDR_CCD_DM))->SetCheck(TRUE); g_pSo7_TCPIP_Server->DM5000[StartAddr+2*i+1]=(DM_Data[0]<<8)+DM_Data[1];
((CButton *)GetDlgItem(IDC_RADIO_PLC_TCPIP_SERVER_ADDR_DM5000))->SetCheck(FALSE); }
((CButton *)GetDlgItem(IDC_RADIO_PLC_TCPIP_SERVER_ADDR_DM8000))->SetCheck(FALSE);
m_UpdateListControl(E_LISTCTRL_CREATE);
m_UpdateListControl(E_LISTCTRL_TITLE); for (int i=0;i<150;i++)
m_UpdateListControl(E_LISTCTRL_DATA2CONTROL); {
m_UpdateControls(FALSE); iDM5000DWord[i]=0;
UpdateData(FALSE); }
StartAddr=400;
index=0;
for (int i=0;i<10;i++)
{
iDM5000DWord[index++]=(i+1)*10000;
iDM5000DWord[index++]=(i+1)*10000;
iDM5000DWord[index++]=(i+1)*10000;
index=3*(i+1);
}
for (int i=0;i<6;i++)
{
iDM5000DWord[index++]=(i+1)*10000;
iDM5000DWord[index++]=(i+1)*10000;
iDM5000DWord[index++]=(i+1)*10000;
index=3*(i+11);
}
for (int i=0;i<150;i++)
{
iData=iDM5000DWord[i];
DM_Data[0]=(iData>>24) & 0x0ff;
DM_Data[1]=(iData>>16) & 0x0ff;
DM_Data[2]=(iData>>8) & 0x0ff;
DM_Data[3]=iData & 0x0ff;
g_pSo7_TCPIP_Server->DM5000[StartAddr+2*i]=(DM_Data[2]<<8)+DM_Data[3];
g_pSo7_TCPIP_Server->DM5000[StartAddr+2*i+1]=(DM_Data[0]<<8)+DM_Data[1];
}
for (int i=0;i<150;i++)
{
iDM5000DWord[i]=0;
}
StartAddr=500;
index=0;
for (int i=0;i<10;i++)
{
iDM5000DWord[index++]=(i+1)*10000;
iDM5000DWord[index++]=(i+1)*10000;
iDM5000DWord[index++]=(i+1)*10000;
index=3*(i+1);
}
for (int i=0;i<6;i++)
{
iDM5000DWord[index++]=(i+1)*10000;
iDM5000DWord[index++]=(i+1)*10000;
iDM5000DWord[index++]=(i+1)*10000;
index=3*(i+11);
}
for (int i=0;i<150;i++)
{
iData=iDM5000DWord[i];
DM_Data[0]=(iData>>24) & 0x0ff;
DM_Data[1]=(iData>>16) & 0x0ff;
DM_Data[2]=(iData>>8) & 0x0ff;
DM_Data[3]=iData & 0x0ff;
g_pSo7_TCPIP_Server->DM5000[StartAddr+2*i]=(DM_Data[2]<<8)+DM_Data[3];
g_pSo7_TCPIP_Server->DM5000[StartAddr+2*i+1]=(DM_Data[0]<<8)+DM_Data[1];
}
}
m_DMAddrList=DM_ADDR_CCD;
((CButton *)GetDlgItem(IDC_RADIO_PLC_TCPIP_SERVER_ADDR_CCD_DM))->SetCheck(TRUE);
((CButton *)GetDlgItem(IDC_RADIO_PLC_TCPIP_SERVER_ADDR_DM5000))->SetCheck(FALSE);
((CButton *)GetDlgItem(IDC_RADIO_PLC_TCPIP_SERVER_ADDR_DM8000))->SetCheck(FALSE);
m_UpdateListControl(E_LISTCTRL_CREATE);
m_UpdateListControl(E_LISTCTRL_TITLE);
m_UpdateListControl(E_LISTCTRL_DATA2CONTROL);
m_UpdateControls(FALSE);
UpdateData(FALSE);
}
return TRUE; // return TRUE unless you set the focus to a control return TRUE; // return TRUE unless you set the focus to a control
} }
@@ -352,7 +426,7 @@ void CSo7_Util_PLC_TCPIP_SERVER::m_UpdateListControl(int _type)
m_DataList.InsertColumn(0,_T("CCD地址"),LVCFMT_LEFT, m_rect.right*1/4); m_DataList.InsertColumn(0,_T("CCD地址"),LVCFMT_LEFT, m_rect.right*1/4);
m_DataList.InsertColumn(1,_T("数据值"),LVCFMT_LEFT, m_rect.right*1/4); m_DataList.InsertColumn(1,_T("数据值"),LVCFMT_LEFT, m_rect.right*1/4);
m_DataList.InsertColumn(2,_T("备注"),LVCFMT_LEFT, m_rect.right*2/4); m_DataList.InsertColumn(2,_T("备注"),LVCFMT_LEFT, m_rect.right*3/2);
int iStartRow(0),iEndRow(0); int iStartRow(0),iEndRow(0);
CString str; CString str;
@@ -417,7 +491,7 @@ void CSo7_Util_PLC_TCPIP_SERVER::m_UpdateListControl(int _type)
m_DataList.SetItemText(i,2,_T("")); m_DataList.SetItemText(i,2,_T(""));
} }
int Addr(0); int Addr(0);
m_DataList.SetItemText(Addr++,2,_T("PLC设备运行状态(0-空闲,1-后退,2-前进,3-故障,4-编辑)")); m_DataList.SetItemText(Addr++,2,_T("PLC设备运行状态(0-未知,1-空闲,2-后退(开始测量),3-前进(测量结束),4-故障,5-参数编辑)"));
m_DataList.SetItemText(Addr++,2,_T("CCD1数据刷新")); m_DataList.SetItemText(Addr++,2,_T("CCD1数据刷新"));
m_DataList.SetItemText(Addr++,2,_T("CCD2数据刷新")); m_DataList.SetItemText(Addr++,2,_T("CCD2数据刷新"));
m_DataList.SetItemText(Addr++,2,_T("CCD3数据刷新")); m_DataList.SetItemText(Addr++,2,_T("CCD3数据刷新"));
@@ -445,7 +519,7 @@ void CSo7_Util_PLC_TCPIP_SERVER::m_UpdateListControl(int _type)
m_DataList.SetItemText(Addr++,2,str+_T("中断位置6低字")); m_DataList.SetItemText(Addr++,2,str+_T("中断位置6低字"));
m_DataList.SetItemText(Addr++,2,str+_T("中断位置6高字")); m_DataList.SetItemText(Addr++,2,str+_T("中断位置6高字"));
} }
for (int i=0;i<3;i++) for (int i=0;i<6;i++)
{ {
str.Format(_T("LASER%d-%d"),1+(i/2),1+(i%2)); str.Format(_T("LASER%d-%d"),1+(i/2),1+(i%2));
m_DataList.SetItemText(Addr++,2,str+_T("中断数低字")); m_DataList.SetItemText(Addr++,2,str+_T("中断数低字"));
@@ -463,8 +537,48 @@ void CSo7_Util_PLC_TCPIP_SERVER::m_UpdateListControl(int _type)
m_DataList.SetItemText(Addr++,2,str+_T("中断位置6低字")); m_DataList.SetItemText(Addr++,2,str+_T("中断位置6低字"));
m_DataList.SetItemText(Addr++,2,str+_T("中断位置6高字")); m_DataList.SetItemText(Addr++,2,str+_T("中断位置6高字"));
} }
Addr=400;
for (int i=0;i<10;i++)
{
str.Format(_T("CCD%d-%d"),1+(i/2),1+(i%2));
m_DataList.SetItemText(Addr++,2,str+_T("设备坐标X低字"));
m_DataList.SetItemText(Addr++,2,str+_T("设备坐标X高字"));
m_DataList.SetItemText(Addr++,2,str+_T("设备坐标Y低字"));
m_DataList.SetItemText(Addr++,2,str+_T("设备坐标Y高字"));
m_DataList.SetItemText(Addr++,2,str+_T("设备坐标Z低字"));
m_DataList.SetItemText(Addr++,2,str+_T("设备坐标Z高字"));
}
for (int i=0;i<6;i++)
{
str.Format(_T("LASER%d-%d"),1+(i/2),1+(i%2));
m_DataList.SetItemText(Addr++,2,str+_T("设备坐标X低字"));
m_DataList.SetItemText(Addr++,2,str+_T("设备坐标X高字"));
m_DataList.SetItemText(Addr++,2,str+_T("设备坐标Y低字"));
m_DataList.SetItemText(Addr++,2,str+_T("设备坐标Y高字"));
m_DataList.SetItemText(Addr++,2,str+_T("设备坐标Z低字"));
m_DataList.SetItemText(Addr++,2,str+_T("设备坐标Z高字"));
}
Addr=500;
for (int i=0;i<10;i++)
{
str.Format(_T("CCD%d-%d"),1+(i/2),1+(i%2));
m_DataList.SetItemText(Addr++,2,str+_T("测量补偿ΔX低字"));
m_DataList.SetItemText(Addr++,2,str+_T("测量补偿ΔX高字"));
m_DataList.SetItemText(Addr++,2,str+_T("测量补偿ΔY低字"));
m_DataList.SetItemText(Addr++,2,str+_T("测量补偿ΔY高字"));
m_DataList.SetItemText(Addr++,2,str+_T("测量补偿ΔZ低字"));
m_DataList.SetItemText(Addr++,2,str+_T("测量补偿ΔZ高字"));
}
for (int i=0;i<6;i++)
{
str.Format(_T("LASER%d-%d"),1+(i/2),1+(i%2));
m_DataList.SetItemText(Addr++,2,str+_T("测量补偿ΔX低字"));
m_DataList.SetItemText(Addr++,2,str+_T("测量补偿ΔX高字"));
m_DataList.SetItemText(Addr++,2,str+_T("测量补偿ΔY低字"));
m_DataList.SetItemText(Addr++,2,str+_T("测量补偿ΔY高字"));
m_DataList.SetItemText(Addr++,2,str+_T("测量补偿ΔZ低字"));
m_DataList.SetItemText(Addr++,2,str+_T("测量补偿ΔZ高字"));
}
m_DataList.SetEditableItemRange(0,MAX_DM_PAGE_NUMBER-1,1,1); m_DataList.SetEditableItemRange(0,MAX_DM_PAGE_NUMBER-1,1,1);
m_DataList.SetColorStyleItemRange(0,MAX_DM_PAGE_NUMBER-1,0,2); m_DataList.SetColorStyleItemRange(0,MAX_DM_PAGE_NUMBER-1,0,2);
} }
@@ -676,7 +790,7 @@ LRESULT CSo7_Util_PLC_TCPIP_SERVER::OnSocket(WPARAM w, LPARAM p)
LRESULT CSo7_Util_PLC_TCPIP_SERVER::OnTCPIPMsg(WPARAM w, LPARAM p) LRESULT CSo7_Util_PLC_TCPIP_SERVER::OnTCPIPMsg(WPARAM w, LPARAM p)
{ {
LRESULT lResult=0; LRESULT lResult=0;
int lPara=static_cast<int>(p); //int lPara=static_cast<int>(p);
switch(w) switch(w)
{ {
case FD_ACCEPT: case FD_ACCEPT:
@@ -686,7 +800,24 @@ LRESULT CSo7_Util_PLC_TCPIP_SERVER::OnTCPIPMsg(WPARAM w, LPARAM p)
} }
case FD_READ: case FD_READ:
{ {
m_csMSG=_T("<TCIPIP> FD_READ ")+TCPIPMsg(lPara); s_tcpip_msg_data _TCPIPMsg;
memcpy(&_TCPIPMsg,(s_tcpip_msg_data*)p,sizeof(s_tcpip_msg_data));
if (_TCPIPMsg._UpdateData==1)
{
if (m_DMAddrList==DM_ADDR_DM8000)
{
m_UpdateListControl(E_LISTCTRL_TITLE);
m_UpdateListControl(E_LISTCTRL_DATA2CONTROL);
}
}
else if (_TCPIPMsg._UpdateData==2)
{
m_UpdateControls(FALSE);
m_UpdateListControl(E_LISTCTRL_TITLE);
m_UpdateListControl(E_LISTCTRL_DATA2CONTROL);
}
m_csMSG=_T("<TCIPIP> FD_READ ")+TCPIPMsg(_TCPIPMsg);
break; break;
} }
case FD_WRITE: case FD_WRITE:
@@ -709,49 +840,57 @@ LRESULT CSo7_Util_PLC_TCPIP_SERVER::OnTCPIPMsg(WPARAM w, LPARAM p)
return( lResult ); return( lResult );
} }
//===================================================================================== //=====================================================================================
CString CSo7_Util_PLC_TCPIP_SERVER::TCPIPMsg(int _Type) CString CSo7_Util_PLC_TCPIP_SERVER::TCPIPMsg(s_tcpip_msg_data _MsgData)
{ {
CString cStr(""); CString cStr("");
switch(_Type) if (_MsgData._CmdType==0)
{
cStr.Format(_T(" [R]Addr[%d]NumberOfWords[%d]."),_MsgData._DataAddr,_MsgData._DataSize);
}
else
{
cStr.Format(_T(" [W]Addr[%d]NumberOfWords[%d]."),_MsgData._DataAddr,_MsgData._DataSize);
}
switch(_MsgData._MsgType)
{ {
case RESPONSE_UNKNOWN: case RESPONSE_UNKNOWN:
{ {
cStr=_T("RESPONSE_UNKNOWN"); cStr=_T("RESPONSE_UNKNOWN")+cStr;
break; break;
} }
case RESPONSE_HANDSHAKE: case RESPONSE_HANDSHAKE:
{ {
cStr=_T("RESPONSE_HANDSHAKE"); cStr=_T("RESPONSE_HANDSHAKE")+cStr;
break; break;
} }
case RESPONSE_READ_PLC_CALIB_POS:
{
cStr=_T("RESPONSE_READ_PLC_CALIB_POS")+cStr;
break;
}
case RESPONSE_READ_PLC_STATE: case RESPONSE_READ_PLC_STATE:
{ {
cStr=_T("RESPONSE_READ_PLC_STATE"); cStr=_T("RESPONSE_READ_PLC_STATE")+cStr;
break; break;
} }
case RESPONSE_WRITE_PLC_STATE: case RESPONSE_WRITE_PLC_STATE:
{ {
if (m_DMAddrList==DM_ADDR_DM8000) cStr=_T("RESPONSE_WRITE_PLC_STATE")+cStr;
{
m_UpdateListControl(E_LISTCTRL_TITLE);
m_UpdateListControl(E_LISTCTRL_DATA2CONTROL);
}
cStr=_T("RESPONSE_WRITE_PLC_STATE");
break; break;
} }
case RESPONSE_READ_SENSOR_STATE: case RESPONSE_READ_SENSOR_STATE:
{ {
cStr=_T("RESPONSE_READ_SENSOR_STATE"); cStr=_T("RESPONSE_READ_SENSOR_STATE")+cStr;
break; break;
} }
case RESPONSE_READ_CCD_DATA: case RESPONSE_READ_CCD_DATA:
{ {
cStr=_T("RESPONSE_READ_CCD_DATA"); cStr=_T("RESPONSE_READ_CCD_DATA")+cStr;
break; break;
} }
case RESPONSE_READ_ERRCODE: case RESPONSE_READ_ERRCODE:
{ {
cStr=_T("RESPONSE_READ_ERRCODE"); cStr=_T("RESPONSE_READ_ERRCODE")+cStr;
break; break;
} }
default: default:
@@ -46,7 +46,7 @@ public:
afx_msg void OnBnClickedButtonPlcTcpipServerUpdatedata(); afx_msg void OnBnClickedButtonPlcTcpipServerUpdatedata();
void m_UpdateListControl(int _type); void m_UpdateListControl(int _type);
void m_UpdateControls(int _type); void m_UpdateControls(int _type);
CString TCPIPMsg(int _Type); CString TCPIPMsg(s_tcpip_msg_data _Type);
afx_msg void OnBnClickedRadioPlcTcpipServerAddrCcdDm(); afx_msg void OnBnClickedRadioPlcTcpipServerAddrCcdDm();
afx_msg void OnBnClickedRadioPlcTcpipServerAddrDm5000(); afx_msg void OnBnClickedRadioPlcTcpipServerAddrDm5000();