模拟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 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));
}
}
@@ -48,6 +48,7 @@ enum TCPIP_RESPONSE_RESULT
RESPONSE_UNKNOWN=0,
RESPONSE_HANDSHAKE,
RESPONSE_READ_PLC_STATE,
RESPONSE_READ_PLC_CALIB_POS,
RESPONSE_WRITE_PLC_STATE,
RESPONSE_READ_SENSOR_STATE,
RESPONSE_READ_CCD_DATA,
@@ -86,6 +87,27 @@ struct s_tcpip_state
_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
{
@@ -95,7 +117,7 @@ public:
static struct_so7_tcpip_buff m_TCPIPBuf[lChannelSize];
static s_tcpip_state m_TCPIPServerState;
s_tcpip_msg_data m_TCPIPMsg;
short *DM5000;
short *DM8000;
short *DM10000;
@@ -1093,7 +1093,7 @@ BEGIN
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
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 8000",IDC_RADIO_PLC_TCPIP_SERVER_ADDR_DM8000,"Button",BS_AUTORADIOBUTTON,156,110,44,10
END
@@ -23,8 +23,8 @@ extern CSo7_TCPIP_Server* g_pSo7_TCPIP_Server;
IMPLEMENT_DYNAMIC(CSo7_Util_PLC_TCPIP_SERVER, CDialog)
CSo7_Util_PLC_TCPIP_SERVER::CSo7_Util_PLC_TCPIP_SERVER(CWnd* pParent /*=NULL*/)
: CDialog(CSo7_Util_PLC_TCPIP_SERVER::IDD, pParent)
CSo7_Util_PLC_TCPIP_SERVER::CSo7_Util_PLC_TCPIP_SERVER(CWnd* pParent /*=NULL*/)
: CDialog(CSo7_Util_PLC_TCPIP_SERVER::IDD, pParent)
{
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)
{
CDialog::DoDataExchange(pDX);
CDialog::DoDataExchange(pDX);
DDX_Control(pDX, IDC_EDIT_MSG, m_edMSG);
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);
}
}
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;
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);
GetDlgItem(IDC_EDIT_PLC_TCPIP_SERVER_PORTNUMBER)->SetWindowTextW(_T("9600"));
int i(0);
m_CCDData_D10000[i++]=25000;
m_CCDData_D10000[i++]=1000;
m_CCDData_D10000[i++]=1000;
m_CCDData_D10000[i++]=1000;
m_CCDData_D10000[i++]=10000;
m_CCDData_D10000[i++]=1000;
m_CCDData_D10000[i++]=20000;
m_CCDData_D10000[i++]=102000;
m_CCDData_D10000[i++]=3000;
m_CCDData_D10000[i++]=4000;
m_CCDData_D10000[i++]=204000;
m_CCDData_D10000[i++]=5000;
m_CCDData_D10000[i++]=6000;
m_CCDData_D10000[i++]=7000;
m_CCDData_D10000[i++]=8000;
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++)
GetDlgItem(IDC_EDIT_PLC_TCPIP_SERVER_PORTNUMBER)->SetWindowTextW(_T("9600"));
int i(0);
m_CCDData_D10000[i++]=25000;
m_CCDData_D10000[i++]=1000;
m_CCDData_D10000[i++]=1000;
m_CCDData_D10000[i++]=1000;
m_CCDData_D10000[i++]=10000;
m_CCDData_D10000[i++]=1000;
m_CCDData_D10000[i++]=20000;
m_CCDData_D10000[i++]=102000;
m_CCDData_D10000[i++]=3000;
m_CCDData_D10000[i++]=4000;
m_CCDData_D10000[i++]=204000;
m_CCDData_D10000[i++]=5000;
m_CCDData_D10000[i++]=6000;
m_CCDData_D10000[i++]=7000;
m_CCDData_D10000[i++]=8000;
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)
{
iData=m_CCDData_D10000[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->DM10000[StartAddr+2*i]=(DM_Data[2]<<8)+DM_Data[3];
g_pSo7_TCPIP_Server->DM10000[StartAddr+2*i+1]=(DM_Data[0]<<8)+DM_Data[1];
}
}
if (g_pSo7_TCPIP_Server)
{
int iDM5000DWord[140]={0};
int index(0);
for (int i=0;i<140;i++)
{
iDM5000DWord[i]=0;
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];
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->DM10000[StartAddr+2*i]=(DM_Data[2]<<8)+DM_Data[3];
g_pSo7_TCPIP_Server->DM10000[StartAddr+2*i+1]=(DM_Data[0]<<8)+DM_Data[1];
}
}
iDM5000DWord[index++]=1;
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++)
if (g_pSo7_TCPIP_Server)
{
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];
}
}
int iData(0);
BYTE DM_Data[4]={0,0,0,0};
int StartAddr(0);
int index(0);
int iDM5000DWord[150]={0};
for (int i=0;i<150;i++)
{
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;
((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);
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=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
}
@@ -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(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);
CString str;
@@ -417,7 +491,7 @@ void CSo7_Util_PLC_TCPIP_SERVER::m_UpdateListControl(int _type)
m_DataList.SetItemText(i,2,_T(""));
}
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("CCD2数据刷新"));
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高字"));
}
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));
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高字"));
}
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.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 lResult=0;
int lPara=static_cast<int>(p);
//int lPara=static_cast<int>(p);
switch(w)
{
case FD_ACCEPT:
@@ -686,7 +800,24 @@ LRESULT CSo7_Util_PLC_TCPIP_SERVER::OnTCPIPMsg(WPARAM w, LPARAM p)
}
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;
}
case FD_WRITE:
@@ -709,49 +840,57 @@ LRESULT CSo7_Util_PLC_TCPIP_SERVER::OnTCPIPMsg(WPARAM w, LPARAM p)
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("");
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:
{
cStr=_T("RESPONSE_UNKNOWN");
cStr=_T("RESPONSE_UNKNOWN")+cStr;
break;
}
case RESPONSE_HANDSHAKE:
{
cStr=_T("RESPONSE_HANDSHAKE");
cStr=_T("RESPONSE_HANDSHAKE")+cStr;
break;
}
case RESPONSE_READ_PLC_CALIB_POS:
{
cStr=_T("RESPONSE_READ_PLC_CALIB_POS")+cStr;
break;
}
case RESPONSE_READ_PLC_STATE:
{
cStr=_T("RESPONSE_READ_PLC_STATE");
cStr=_T("RESPONSE_READ_PLC_STATE")+cStr;
break;
}
case RESPONSE_WRITE_PLC_STATE:
{
if (m_DMAddrList==DM_ADDR_DM8000)
{
m_UpdateListControl(E_LISTCTRL_TITLE);
m_UpdateListControl(E_LISTCTRL_DATA2CONTROL);
}
cStr=_T("RESPONSE_WRITE_PLC_STATE");
cStr=_T("RESPONSE_WRITE_PLC_STATE")+cStr;
break;
}
case RESPONSE_READ_SENSOR_STATE:
{
cStr=_T("RESPONSE_READ_SENSOR_STATE");
cStr=_T("RESPONSE_READ_SENSOR_STATE")+cStr;
break;
}
case RESPONSE_READ_CCD_DATA:
{
cStr=_T("RESPONSE_READ_CCD_DATA");
cStr=_T("RESPONSE_READ_CCD_DATA")+cStr;
break;
}
case RESPONSE_READ_ERRCODE:
{
cStr=_T("RESPONSE_READ_ERRCODE");
cStr=_T("RESPONSE_READ_ERRCODE")+cStr;
break;
}
default:
@@ -46,7 +46,7 @@ public:
afx_msg void OnBnClickedButtonPlcTcpipServerUpdatedata();
void m_UpdateListControl(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 OnBnClickedRadioPlcTcpipServerAddrDm5000();