模拟PLC数据存储区。

This commit is contained in:
TAO Cheng
2014-11-20 21:19:34 +08:00
parent e4cce07a49
commit ed3d4180ea
7 changed files with 487 additions and 168 deletions
@@ -363,35 +363,6 @@ BOOL CSo7_TCPIP_Server::Response_PLC_DM10000_R(short _StartAddr,short _DataSize)
return TRUE;
}
//================================================================
BOOL CSo7_TCPIP_Server::Response_PLC_DM8000_W(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-=8000;
if ((_StartAddr+_DataSize)>=MAX_DM_PAGE_NUMBER)
{
_DataSize=MAX_DM_PAGE_NUMBER-_StartAddr;
}
for (int i=0;i<_DataSize;i++)
{
sData=DM8000[_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;
}
m_TCPIPBuf[CH_SEND]._buffer[DRW_SDataIndexDataSize]=static_cast<char>(DRW_SDataIndexData-DRW_SDataHeadDataSize+_DataSize*2);
m_TCPIPBuf[CH_SEND]._size=DRW_SDataIndexData+_DataSize*2;
SendBuffer();
return TRUE;
}
//================================================================
BOOL CSo7_TCPIP_Server::_Send_Cmd_Write_State()
{
@@ -624,6 +595,19 @@ void CSo7_TCPIP_Server::m_ProcessSocketReadEvent(SOCKET s)
iDataSize=(bData[0]<<8)+bData[1];
if (iAddr>=8000)
{
int iBuffsize(0);
int iStartAddr(0);
iStartAddr=iAddr-8000;
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];
DM8000[iStartAddr++]=(bData[0]<<8)+bData[1];
}
RESPONSE_PLC_DM_UNKNOWN();
iPara=RESPONSE_WRITE_PLC_STATE;
}
@@ -107,7 +107,6 @@ public:
BOOL Response_Handshake();
BOOL Response_PLC_DM5000_R(short _StartAddr,short _DataSize);//PLC State
BOOL Response_PLC_DM10000_R(short _StartAddr,short _DataSize);//CCD
BOOL Response_PLC_DM8000_W(short _StartAddr,short _DataSize);//PC State
BOOL RESPONSE_PLC_DM_UNKNOWN();
@@ -16,7 +16,7 @@
#undef APSTUDIO_READONLY_SYMBOLS
/////////////////////////////////////////////////////////////////////////////
// Chinese (Simplified, PRC) resources
// 中文(简体,中国) resources
#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_CHS)
LANGUAGE LANG_CHINESE, SUBLANG_CHINESE_SIMPLIFIED
@@ -1080,19 +1080,22 @@ BEGIN
EDITTEXT IDC_EDIT_PLC_TCPIP_SERVER_PLC_STATE,230,39,40,14,ES_AUTOHSCROLL
LTEXT "PLC STATE",IDC_STATIC,231,26,36,8
EDITTEXT IDC_EDIT_PLC_TCPIP_SERVER_STATE_LASER2,174,71,40,14,ES_AUTOHSCROLL
LTEXT "LASER1 STATE",IDC_STATIC,168,26,48,8
LTEXT "LASER1-1 STATE",IDC_STATIC,168,26,55,8
EDITTEXT IDC_EDIT_PLC_TCPIP_SERVER_STATE_CCD1,118,38,40,14,ES_AUTOHSCROLL
LTEXT "CCD1 STATE",IDC_STATIC,118,26,42,8
LTEXT "CCD1-1 STATE",IDC_STATIC,116,26,48,8
EDITTEXT IDC_EDIT_PLC_TCPIP_SERVER_STATE_LASER1,174,39,40,14,ES_AUTOHSCROLL
LTEXT "LASER2 STATE",IDC_STATIC,168,59,48,8
LTEXT "LASER2-1 STATE",IDC_STATIC,168,59,55,8
EDITTEXT IDC_EDIT_PLC_TCPIP_SERVER_STATE_CCD2,118,71,40,14,ES_AUTOHSCROLL
LTEXT "CCD2 STATE",IDC_STATIC,118,59,42,8
LTEXT "CCD1-2 STATE",IDC_STATIC,116,59,48,8
PUSHBUTTON "Clear",IDC_BUTTON_CLEAR_MSG,453,305,39,14
CONTROL "",IDC_LIST_PLC_TCPIP_SERVER_CCDDATA,"SysListView32",LVS_REPORT | WS_BORDER | WS_TABSTOP,24,110,294,166
GROUPBOX "Static",IDC_STATIC,17,97,307,214
PUSHBUTTON "Update",IDC_BUTTON_PLC_TCPIP_SERVER_UPDATEDATA,277,291,40,14
CONTROL "",IDC_LIST_PLC_TCPIP_SERVER_CCDDATA,"SysListView32",LVS_REPORT | WS_BORDER | WS_TABSTOP,24,125,294,166
GROUPBOX "地址表",IDC_STATIC,17,97,307,214
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 "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
@@ -1288,7 +1291,7 @@ BEGIN
BEGIN
LEFTMARGIN, 7
RIGHTMARGIN, 551
TOPMARGIN, 7
TOPMARGIN, 6
BOTTOMMARGIN, 319
END
END
@@ -1730,12 +1733,12 @@ BEGIN
IDS_SO7_ABOUTBOX "&About Utility for SO7..."
END
#endif // Chinese (Simplified, PRC) resources
#endif // 中文(简体,中国) resources
/////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////
// English (United States) resources
// 英语(美国) resources
#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU)
LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US
@@ -2694,7 +2697,7 @@ BEGIN
END
END
#endif // English (United States) resources
#endif // 英语(美国) resources
/////////////////////////////////////////////////////////////////////////////
@@ -10,8 +10,10 @@
enum E_UPDATE_LIST_CONTROL_TYPE
{
E_LISTCTRL_CREATE,
E_LISTCTRL_TITLE,
E_LISTCTRL_CONTENT,
E_LISTCTRL_DATA2CONTROL,
E_LISTCTRL_CONTROL2DATA,
E_LISTCTRL_TOTAL
};
@@ -52,6 +54,9 @@ BEGIN_MESSAGE_MAP(CSo7_Util_PLC_TCPIP_SERVER, CDialog)
ON_MESSAGE(WM_SOCKET,&CSo7_Util_PLC_TCPIP_SERVER::OnSocket)
ON_MESSAGE(WM_TCPIP_MSG,&CSo7_Util_PLC_TCPIP_SERVER::OnTCPIPMsg)
ON_BN_CLICKED(IDC_BUTTON_PLC_TCPIP_SERVER_UPDATEDATA, &CSo7_Util_PLC_TCPIP_SERVER::OnBnClickedButtonPlcTcpipServerUpdatedata)
ON_BN_CLICKED(IDC_RADIO_PLC_TCPIP_SERVER_ADDR_CCD_DM, &CSo7_Util_PLC_TCPIP_SERVER::OnBnClickedRadioPlcTcpipServerAddrCcdDm)
ON_BN_CLICKED(IDC_RADIO_PLC_TCPIP_SERVER_ADDR_DM5000, &CSo7_Util_PLC_TCPIP_SERVER::OnBnClickedRadioPlcTcpipServerAddrDm5000)
ON_BN_CLICKED(IDC_RADIO_PLC_TCPIP_SERVER_ADDR_DM8000, &CSo7_Util_PLC_TCPIP_SERVER::OnBnClickedRadioPlcTcpipServerAddrDm8000)
END_MESSAGE_MAP()
@@ -94,36 +99,96 @@ BOOL CSo7_Util_PLC_TCPIP_SERVER::OnInitDialog()
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 index(9);
g_pSo7_TCPIP_Server->DM5000[index]=0;
index=100;
g_pSo7_TCPIP_Server->DM5000[index++]=3;
g_pSo7_TCPIP_Server->DM5000[index++]=0;
g_pSo7_TCPIP_Server->DM5000[index++]=10000;
g_pSo7_TCPIP_Server->DM5000[index++]=0;
g_pSo7_TCPIP_Server->DM5000[index++]=20000;
g_pSo7_TCPIP_Server->DM5000[index++]=0;
g_pSo7_TCPIP_Server->DM5000[index++]=30000;
g_pSo7_TCPIP_Server->DM5000[index++]=0;
index=100+14;
g_pSo7_TCPIP_Server->DM5000[index++]=2;
g_pSo7_TCPIP_Server->DM5000[index++]=0;
g_pSo7_TCPIP_Server->DM5000[index++]=-25536;
g_pSo7_TCPIP_Server->DM5000[index++]=0;
g_pSo7_TCPIP_Server->DM5000[index++]=-15536;
g_pSo7_TCPIP_Server->DM5000[index++]=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];
}
}
m_UpdateListControl(E_LISTCTRL_TITLE);
m_UpdateListControl(E_LISTCTRL_CONTENT);
if (g_pSo7_TCPIP_Server)
{
int iDM5000DWord[140]={0};
int index(0);
for (int i=0;i<140;i++)
{
iDM5000DWord[i]=0;
}
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++)
{
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
}
//=====================================================================
void CSo7_Util_PLC_TCPIP_SERVER::OnBnClickedButtonPlcTcpipServerStart()
{
CString str;
@@ -141,6 +206,7 @@ void CSo7_Util_PLC_TCPIP_SERVER::OnBnClickedButtonPlcTcpipServerStart()
}
//=====================================================================
void CSo7_Util_PLC_TCPIP_SERVER::OnBnClickedButtonPlcTcpipServerStop()
{
if (g_pSo7_TCPIP_Server)
@@ -152,154 +218,398 @@ void CSo7_Util_PLC_TCPIP_SERVER::OnBnClickedButtonPlcTcpipServerStop()
}
//=====================================================================
void CSo7_Util_PLC_TCPIP_SERVER::OnBnClickedButtonPlcTcpipServerUpdatestate()
{
CString str;
UpdateData(TRUE);
USES_CONVERSION;
GetDlgItem(IDC_EDIT_PLC_TCPIP_SERVER_STATE_CCD1)->GetWindowText(str);
const char* cTempValue=T2A(str);
g_pSo7_TCPIP_Server->m_TCPIPServerState._PLCSensorState[OMRON_PLC_CCD1_CAMERA1]=static_cast<BYTE>(atoi(cTempValue));
GetDlgItem(IDC_EDIT_PLC_TCPIP_SERVER_STATE_CCD2)->GetWindowText(str);
cTempValue=T2A(str);
g_pSo7_TCPIP_Server->m_TCPIPServerState._PLCSensorState[OMRON_PLC_CCD1_CAMERA2]=static_cast<BYTE>(atoi(cTempValue));
GetDlgItem(IDC_EDIT_PLC_TCPIP_SERVER_STATE_LASER1)->GetWindowText(str);
cTempValue=T2A(str);
g_pSo7_TCPIP_Server->m_TCPIPServerState._PLCSensorState[OMRON_PLC_LASER1_HEADA]=static_cast<BYTE>(atoi(cTempValue));
GetDlgItem(IDC_EDIT_PLC_TCPIP_SERVER_STATE_LASER2)->GetWindowText(str);
cTempValue=T2A(str);
g_pSo7_TCPIP_Server->m_TCPIPServerState._PLCSensorState[OMRON_PLC_LASER2_HEADA]=static_cast<BYTE>(atoi(cTempValue));
GetDlgItem(IDC_EDIT_PLC_TCPIP_SERVER_PLC_STATE)->GetWindowText(str);
cTempValue=T2A(str);
g_pSo7_TCPIP_Server->m_TCPIPServerState._PLCRunningState=static_cast<BYTE>(atoi(cTempValue));
BYTE DM_Data[4]={0,0,0,0};
g_pSo7_TCPIP_Server->DM5000[0]=static_cast<short>(g_pSo7_TCPIP_Server->m_TCPIPServerState._PLCRunningState);
for (int i=1;i<=8;i++)
{
DM_Data[1]=g_pSo7_TCPIP_Server->m_TCPIPServerState._PLCSensorState[(i-1)*2];
DM_Data[0]=g_pSo7_TCPIP_Server->m_TCPIPServerState._PLCSensorState[(i-1)*2+1];
g_pSo7_TCPIP_Server->DM5000[i]=(DM_Data[0]<<8)+DM_Data[1];
}
m_UpdateControls(TRUE);
m_UpdateListControl(E_LISTCTRL_TITLE);
m_UpdateListControl(E_LISTCTRL_DATA2CONTROL);
}
//=====================================================================
void CSo7_Util_PLC_TCPIP_SERVER::OnBnClickedButtonPlcTcpipServerUpdatedata()
{
m_UpdateListControl(E_LISTCTRL_CONTENT);
m_UpdateListControl(E_LISTCTRL_CONTROL2DATA);
m_UpdateControls(FALSE);
}
//=====================================================================
void CSo7_Util_PLC_TCPIP_SERVER::m_UpdateControls(int _type)
{
if (_type==FALSE)
{
CString str;
BYTE DM_Data[4]={0,0,0,0};
g_pSo7_TCPIP_Server->m_TCPIPServerState._PLCRunningState=static_cast<int>(g_pSo7_TCPIP_Server->DM5000[0]);
for (int i=1;i<=8;i++)
{
DM_Data[0]=(g_pSo7_TCPIP_Server->DM5000[i]>>8) && 0x0ff;
DM_Data[1]=(g_pSo7_TCPIP_Server->DM5000[i]) && 0x0ff;
g_pSo7_TCPIP_Server->m_TCPIPServerState._PLCSensorState[(i-1)*2+1]=DM_Data[0];
g_pSo7_TCPIP_Server->m_TCPIPServerState._PLCSensorState[(i-1)*2]=DM_Data[1];
}
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[OMRON_PLC_LASER1_HEADA]);
GetDlgItem(IDC_EDIT_PLC_TCPIP_SERVER_STATE_LASER1)->SetWindowTextW(str);
str.Format(_T("%d"),g_pSo7_TCPIP_Server->m_TCPIPServerState._PLCSensorState[OMRON_PLC_LASER2_HEADA]);
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);
}
else
{
CString str;
UpdateData(TRUE);
USES_CONVERSION;
GetDlgItem(IDC_EDIT_PLC_TCPIP_SERVER_STATE_CCD1)->GetWindowText(str);
const char* cTempValue=T2A(str);
g_pSo7_TCPIP_Server->m_TCPIPServerState._PLCSensorState[OMRON_PLC_CCD1_CAMERA1]=static_cast<BYTE>(atoi(cTempValue));
GetDlgItem(IDC_EDIT_PLC_TCPIP_SERVER_STATE_CCD2)->GetWindowText(str);
cTempValue=T2A(str);
g_pSo7_TCPIP_Server->m_TCPIPServerState._PLCSensorState[OMRON_PLC_CCD1_CAMERA2]=static_cast<BYTE>(atoi(cTempValue));
GetDlgItem(IDC_EDIT_PLC_TCPIP_SERVER_STATE_LASER1)->GetWindowText(str);
cTempValue=T2A(str);
g_pSo7_TCPIP_Server->m_TCPIPServerState._PLCSensorState[OMRON_PLC_LASER1_HEADA]=static_cast<BYTE>(atoi(cTempValue));
GetDlgItem(IDC_EDIT_PLC_TCPIP_SERVER_STATE_LASER2)->GetWindowText(str);
cTempValue=T2A(str);
g_pSo7_TCPIP_Server->m_TCPIPServerState._PLCSensorState[OMRON_PLC_LASER2_HEADA]=static_cast<BYTE>(atoi(cTempValue));
GetDlgItem(IDC_EDIT_PLC_TCPIP_SERVER_PLC_STATE)->GetWindowText(str);
cTempValue=T2A(str);
g_pSo7_TCPIP_Server->m_TCPIPServerState._PLCRunningState=static_cast<BYTE>(atoi(cTempValue));
BYTE DM_Data[4]={0,0,0,0};
g_pSo7_TCPIP_Server->DM5000[0]=static_cast<short>(g_pSo7_TCPIP_Server->m_TCPIPServerState._PLCRunningState);
for (int i=1;i<=8;i++)
{
DM_Data[1]=g_pSo7_TCPIP_Server->m_TCPIPServerState._PLCSensorState[(i-1)*2];
DM_Data[0]=g_pSo7_TCPIP_Server->m_TCPIPServerState._PLCSensorState[(i-1)*2+1];
g_pSo7_TCPIP_Server->DM5000[i]=(DM_Data[0]<<8)+DM_Data[1];
}
}
}
//=====================================================================
void CSo7_Util_PLC_TCPIP_SERVER::OnBnClickedRadioPlcTcpipServerAddrCcdDm()
{
m_DMAddrList=DM_ADDR_CCD;
m_UpdateListControl(E_LISTCTRL_TITLE);
m_UpdateListControl(E_LISTCTRL_DATA2CONTROL);
}
//=====================================================================
void CSo7_Util_PLC_TCPIP_SERVER::OnBnClickedRadioPlcTcpipServerAddrDm5000()
{
m_DMAddrList=DM_ADDR_DM5000;
m_UpdateListControl(E_LISTCTRL_TITLE);
m_UpdateListControl(E_LISTCTRL_DATA2CONTROL);
}
//=====================================================================
void CSo7_Util_PLC_TCPIP_SERVER::OnBnClickedRadioPlcTcpipServerAddrDm8000()
{
m_DMAddrList=DM_ADDR_DM8000;
m_UpdateListControl(E_LISTCTRL_TITLE);
m_UpdateListControl(E_LISTCTRL_DATA2CONTROL);
}
//=====================================================================
void CSo7_Util_PLC_TCPIP_SERVER::m_UpdateListControl(int _type)
{
switch(_type)
{
case E_LISTCTRL_TITLE:
case E_LISTCTRL_CREATE:
{
RECT m_rect;
m_DataList.GetClientRect(&m_rect); //获取list的客户区
m_DataList.SetExtendedStyle(LVS_EX_GRIDLINES|LVS_EX_FULLROWSELECT); //设置list风格
m_DataList.InsertColumn(0,_T("CCD地址"),LVCFMT_LEFT, m_rect.right*1/2);
m_DataList.InsertColumn(1,_T("数据值"),LVCFMT_LEFT, m_rect.right*1/2);
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);
int iStartRow(0),iEndRow(0);
CString str;
iStartRow=0;
iEndRow=MAX_CCD_ADDR;
iEndRow=MAX_DM_PAGE_NUMBER;
for (int i=iStartRow; i<iEndRow; i++)
{
str.Format(_T("%d"),120+i*4);
m_DataList.InsertItem(i,str);
m_DataList.SetItemText(i,0,str);
m_DataList.SetItemText(i,1,_T("0"));
m_DataList.InsertItem(i,_T(""));
}
int iRow(0);
int iCol(1);
m_DataList.SetItemText(iRow++,iCol,_T("25000"));
m_DataList.SetItemText(iRow++,iCol,_T("1000"));
m_DataList.SetItemText(iRow++,iCol,_T("1000"));
m_DataList.SetItemText(iRow++,iCol,_T("1000"));
m_DataList.SetItemText(iRow++,iCol,_T("10000"));
m_DataList.SetItemText(iRow++,iCol,_T("1000"));
m_DataList.SetItemText(iRow++,iCol,_T("20000"));
m_DataList.SetItemText(iRow++,iCol,_T("102000"));
m_DataList.SetItemText(iRow++,iCol,_T("3000"));
m_DataList.SetItemText(iRow++,iCol,_T("4000"));
m_DataList.SetItemText(iRow++,iCol,_T("204000"));
m_DataList.SetItemText(iRow++,iCol,_T("5000"));
m_DataList.SetItemText(iRow++,iCol,_T("6000"));
m_DataList.SetItemText(iRow++,iCol,_T("7000"));
m_DataList.SetItemText(iRow++,iCol,_T("8000"));
m_DataList.SetItemText(iRow++,iCol,_T("303000"));
m_DataList.SetItemText(iRow++,iCol,_T("9000"));
m_DataList.SetItemText(iRow++,iCol,_T("9000"));
m_DataList.SetItemText(iRow++,iCol,_T("5000"));
m_DataList.SetItemText(iRow++,iCol,_T("406000"));
m_DataList.SetItemText(iRow++,iCol,_T("10000"));
m_DataList.SetItemText(iRow++,iCol,_T("10000"));
m_DataList.SetItemText(iRow++,iCol,_T("30000"));
m_DataList.SetItemText(iRow++,iCol,_T("30000"));
m_DataList.SetItemText(iRow++,iCol,_T("50000"));
m_DataList.SetItemText(iRow++,iCol,_T("10000"));
m_DataList.SetEditableItemRange(0,MAX_CCD_ADDR-1,1,1);
m_DataList.SetColorStyleItemRange(0,MAX_CCD_ADDR-1,0,2);
break;
}
case E_LISTCTRL_CONTENT:
case E_LISTCTRL_TITLE:
{
int iStartRow(0),iEndRow(0);
CString str;
if (m_DMAddrList==DM_ADDR_CCD)
{
LVCOLUMN vColumn;
vColumn.mask=LVCF_TEXT;
vColumn.pszText=_T("CCD地址");
vColumn.cchTextMax=10;
m_DataList.SetColumn(0,&vColumn);
iStartRow=0;
iEndRow=MAX_CCD_ADDR;
for (int i=iStartRow; i<iEndRow; i++)
{
str.Format(_T("%d"),120+i*4);
m_DataList.SetItemText(i,0,str);
m_DataList.SetItemText(i,1,_T(""));
m_DataList.SetItemText(i,2,_T(""));
}
for (int i=iEndRow;i<MAX_DM_PAGE_NUMBER;i++)
{
m_DataList.SetItemText(i,0,_T(""));
m_DataList.SetItemText(i,1,_T(""));
m_DataList.SetItemText(i,2,_T(""));
}
int Addr(0);
m_DataList.SetItemText(Addr++,2,_T("CCD数据个数(+0000000.000)"));
m_DataList.SetItemText(Addr++,2,_T("CCD编号(+0000000.000)"));
m_DataList.SetItemText(Addr++,2,_T("CCD触发序号(+0000000.000)"));
m_DataList.SetEditableItemRange(0,MAX_CCD_ADDR-1,1,1);
m_DataList.SetColorStyleItemRange(0,MAX_CCD_ADDR-1,0,2);
}
else if (m_DMAddrList==DM_ADDR_DM5000)
{
LVCOLUMN vColumn;
vColumn.mask=LVCF_TEXT;
vColumn.pszText=_T("DM5000地址");
vColumn.cchTextMax=10;
m_DataList.SetColumn(0,&vColumn);
iStartRow=0;
iEndRow=MAX_DM_PAGE_NUMBER;
for (int i=iStartRow;i<iEndRow;i++)
{
str.Format(_T("%d"),5000+i);
m_DataList.SetItemText(i,0,str);
m_DataList.SetItemText(i,1,_T(""));
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("CCD1数据刷新"));
m_DataList.SetItemText(Addr++,2,_T("CCD2数据刷新"));
m_DataList.SetItemText(Addr++,2,_T("CCD3数据刷新"));
m_DataList.SetItemText(Addr++,2,_T("CCD4数据刷新"));
m_DataList.SetItemText(Addr++,2,_T("CCD5数据刷新"));
m_DataList.SetItemText(Addr++,2,_T("LS1数据刷新"));
m_DataList.SetItemText(Addr++,2,_T("LS2数据刷新"));
m_DataList.SetItemText(Addr++,2,_T("光栅尺数据刷新"));
Addr=100;
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("中断数低字"));
m_DataList.SetItemText(Addr++,2,str+_T("中断数高字"));
m_DataList.SetItemText(Addr++,2,str+_T("中断位置1低字"));
m_DataList.SetItemText(Addr++,2,str+_T("中断位置1高字"));
m_DataList.SetItemText(Addr++,2,str+_T("中断位置2低字"));
m_DataList.SetItemText(Addr++,2,str+_T("中断位置2高字"));
m_DataList.SetItemText(Addr++,2,str+_T("中断位置3低字"));
m_DataList.SetItemText(Addr++,2,str+_T("中断位置3高字"));
m_DataList.SetItemText(Addr++,2,str+_T("中断位置4低字"));
m_DataList.SetItemText(Addr++,2,str+_T("中断位置4高字"));
m_DataList.SetItemText(Addr++,2,str+_T("中断位置5低字"));
m_DataList.SetItemText(Addr++,2,str+_T("中断位置5高字"));
m_DataList.SetItemText(Addr++,2,str+_T("中断位置6低字"));
m_DataList.SetItemText(Addr++,2,str+_T("中断位置6高字"));
}
for (int i=0;i<3;i++)
{
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("中断数高字"));
m_DataList.SetItemText(Addr++,2,str+_T("中断位置1低字"));
m_DataList.SetItemText(Addr++,2,str+_T("中断位置1高字"));
m_DataList.SetItemText(Addr++,2,str+_T("中断位置2低字"));
m_DataList.SetItemText(Addr++,2,str+_T("中断位置2高字"));
m_DataList.SetItemText(Addr++,2,str+_T("中断位置3低字"));
m_DataList.SetItemText(Addr++,2,str+_T("中断位置3高字"));
m_DataList.SetItemText(Addr++,2,str+_T("中断位置4低字"));
m_DataList.SetItemText(Addr++,2,str+_T("中断位置4高字"));
m_DataList.SetItemText(Addr++,2,str+_T("中断位置5低字"));
m_DataList.SetItemText(Addr++,2,str+_T("中断位置5高字"));
m_DataList.SetItemText(Addr++,2,str+_T("中断位置6低字"));
m_DataList.SetItemText(Addr++,2,str+_T("中断位置6高字"));
}
m_DataList.SetEditableItemRange(0,MAX_DM_PAGE_NUMBER-1,1,1);
m_DataList.SetColorStyleItemRange(0,MAX_DM_PAGE_NUMBER-1,0,2);
}
else if (m_DMAddrList==DM_ADDR_DM8000)
{
LVCOLUMN vColumn;
vColumn.mask=LVCF_TEXT;
vColumn.pszText=_T("DM8000地址");
vColumn.cchTextMax=10;
m_DataList.SetColumn(0,&vColumn);
iStartRow=0;
iEndRow=MAX_DM_PAGE_NUMBER;
for (int i=iStartRow;i<iEndRow;i++)
{
str.Format(_T("%d"),8000+i);
m_DataList.SetItemText(i,0,str);
m_DataList.SetItemText(i,1,_T(""));
m_DataList.SetItemText(i,2,_T(""));
}
int Addr(0);
m_DataList.SetItemText(Addr++,2,_T("PC设备运行状态"));
m_DataList.SetItemText(Addr++,2,_T("PC综合判断结果"));
m_DataList.SetItemText(Addr++,2,_T("PC刷新光栅尺位置结果"));
m_DataList.SetEditableItemRange(0,MAX_DM_PAGE_NUMBER-1,1,1);
m_DataList.SetColorStyleItemRange(0,MAX_DM_PAGE_NUMBER-1,0,2);
}
else
{
iStartRow=0;
iEndRow=MAX_DM_PAGE_NUMBER;
for (int i=iStartRow;i<iEndRow;i++)
{
m_DataList.SetItemText(i,0,_T(""));
m_DataList.SetItemText(i,1,_T(""));
m_DataList.SetItemText(i,2,_T(""));
}
}
break;
}
case E_LISTCTRL_DATA2CONTROL:
{
int iStartRow(0),iEndRow(0);
CString str;
if (m_DMAddrList==DM_ADDR_CCD)
{
iStartRow=0;
iEndRow=MAX_CCD_ADDR;
if (g_pSo7_TCPIP_Server)
{
BYTE DM_Data[4]={0,0,0,0};
int StartAddr(60);
for (int i=0; i<MAX_CCD_ADDR; i++)
{
DM_Data[0]=(g_pSo7_TCPIP_Server->DM10000[StartAddr+2*i+1]>>8) & 0x0ff;
DM_Data[1]=(g_pSo7_TCPIP_Server->DM10000[StartAddr+2*i+1]) & 0x0ff;
DM_Data[2]=(g_pSo7_TCPIP_Server->DM10000[StartAddr+2*i]>>8) & 0x0ff;
DM_Data[3]=(g_pSo7_TCPIP_Server->DM10000[StartAddr+2*i]) & 0x0ff;
m_CCDData_D10000[i]=(DM_Data[0]<<24)+(DM_Data[1]<<16)+(DM_Data[2]<<8)+(DM_Data[3]);
}
}
for (int i=iStartRow; i<iEndRow; i++)
{
str.Format(_T("%d"),m_CCDData_D10000[i]);
m_DataList.SetItemText(i,1,str);
}
}
else if (m_DMAddrList==DM_ADDR_DM5000)
{
iStartRow=0;
iEndRow=MAX_DM_PAGE_NUMBER;
for (int i=iStartRow;i<iEndRow;i++)
{
str.Format(_T("%d"),g_pSo7_TCPIP_Server->DM5000[i]);
m_DataList.SetItemText(i,1,str);
}
}
else if (m_DMAddrList==DM_ADDR_DM8000)
{
iStartRow=0;
iEndRow=MAX_DM_PAGE_NUMBER;
for (int i=iStartRow;i<iEndRow;i++)
{
str.Format(_T("%d"),g_pSo7_TCPIP_Server->DM8000[i]);
m_DataList.SetItemText(i,1,str);
}
}
else
{
;
}
break;
}
case E_LISTCTRL_CONTROL2DATA:
{
USES_CONVERSION;
CString csTmp;
const char* cTmp;
int iStartRow(0),iEndRow(0);
int iCol=1;
for (int iRow=0;iRow<MAX_CCD_ADDR;iRow++)
{
csTmp=m_DataList.GetItemText(iRow,iCol);
cTmp=T2A(csTmp);
m_CCDData_D10000[iRow]=atoi(cTmp);
}
for (int iRow=0;iRow<MAX_CCD_ADDR;iRow++)
{
m_CCDData_D10000[iRow];
}
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];
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 (m_DMAddrList==DM_ADDR_CCD)
{
for (int iRow=0;iRow<MAX_CCD_ADDR;iRow++)
{
csTmp=m_DataList.GetItemText(iRow,iCol);
cTmp=T2A(csTmp);
m_CCDData_D10000[iRow]=atoi(cTmp);
}
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];
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];
}
}
}
else if (m_DMAddrList==DM_ADDR_DM5000)
{
iStartRow=0;
iEndRow=MAX_DM_PAGE_NUMBER;
for (int iRow=iStartRow;iRow<iEndRow;iRow++)
{
csTmp=m_DataList.GetItemText(iRow,iCol);
cTmp=T2A(csTmp);
g_pSo7_TCPIP_Server->DM5000[iRow]=static_cast<short>(atoi(cTmp));
}
}
else if (m_DMAddrList==DM_ADDR_DM8000)
{
iStartRow=0;
iEndRow=MAX_DM_PAGE_NUMBER;
for (int iRow=iStartRow;iRow<iEndRow;iRow++)
{
csTmp=m_DataList.GetItemText(iRow,iCol);
cTmp=T2A(csTmp);
g_pSo7_TCPIP_Server->DM8000[iRow]=static_cast<short>(atoi(cTmp));
}
}
break;
}
default:break;
}
}
//=====================================================================================
void CSo7_Util_PLC_TCPIP_SERVER::OnBnClickedButtonClearMsg()
{
((CEdit *)GetDlgItem(IDC_EDIT_MSG))->SetWindowTextW(_T(""));
}
//=====================================================================================
void CSo7_Util_PLC_TCPIP_SERVER::OnBnClickedCancel()
{
// TODO: Add your control notification handler code here
CDialog::OnCancel();
}
//=====================================================================================
@@ -403,6 +713,11 @@ CString CSo7_Util_PLC_TCPIP_SERVER::TCPIPMsg(int _Type)
}
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");
break;
}
@@ -428,3 +743,6 @@ CString CSo7_Util_PLC_TCPIP_SERVER::TCPIPMsg(int _Type)
}
return cStr;
}
@@ -1,6 +1,12 @@
#pragma once
enum DM_ADDR_LIST
{
DM_ADDR_CCD,
DM_ADDR_DM5000,
DM_ADDR_DM8000,
DM_ADDR_LIST
};
// CSo7_Util_PLC_TCPIP_SERVER dialog
class CSo7_Util_PLC_TCPIP_SERVER : public CDialog
@@ -18,6 +24,7 @@ public:
CEdit m_edMSG;
int m_CCDData_D10000[MAX_CCD_ADDR];
protected:
int m_DMAddrList;
CEditableListCtrl m_DataList;
void OutputWithScroll(const CString &strNewText,CEdit &edtOutput);
@@ -38,6 +45,10 @@ public:
LRESULT OnTCPIPMsg(WPARAM w, LPARAM p);
afx_msg void OnBnClickedButtonPlcTcpipServerUpdatedata();
void m_UpdateListControl(int _type);
void m_UpdateControls(int _type);
CString TCPIPMsg(int _Type);
afx_msg void OnBnClickedRadioPlcTcpipServerAddrCcdDm();
afx_msg void OnBnClickedRadioPlcTcpipServerAddrDm5000();
afx_msg void OnBnClickedRadioPlcTcpipServerAddrDm8000();
};
@@ -933,8 +933,11 @@
#define IDC_RADIO_SO7_MOVE_SPEED_GEAR2 1805
#define IDC_RADIO_ART_PCI8622_MODE_NPTSEQ 1805
#define IDC_RADIO_SO7_EXTRIG_SPECLOCATION 1805
#define IDC_RADIO_PLC_TCPIP_SERVER_ADDR_DM5000 1805
#define IDC_RADIO_MACHINE_TESASTARE 1806
#define IDC_RADIO_READ_OUTPUT_PORT2 1806
#define IDC_RADIO_PLC_TCPIP_SERVER_ADDR_DM5001 1806
#define IDC_RADIO_PLC_TCPIP_SERVER_ADDR_DM8000 1806
#define IDC_EDIT_MOVETO_DEG 1807
#define IDC_RADIO_READ_LIMIT_SWITCH 1807
#define IDC_BUTTON_TESA_STAR_SENDMSG 1808
@@ -1077,6 +1080,7 @@
#define IDC_EDIT_PLC_TCPIP_SERVER_PORTNUMBER 1901
#define IDC_LIST_PLC_TCPIP_SERVER_CCDDATA 1902
#define IDC_IPADDRESS_PLC_TCPIP 1903
#define IDC_RADIO_PLC_TCPIP_SERVER_ADDR_CCD_DM 1904
#define IDC_BUTTON_DIY_EXIT_BUTTON 32740
#define ID_EDIT_SO7_CONFIG_MOTION 32741
@@ -1086,7 +1090,7 @@
#ifndef APSTUDIO_READONLY_SYMBOLS
#define _APS_NEXT_RESOURCE_VALUE 193
#define _APS_NEXT_COMMAND_VALUE 32771
#define _APS_NEXT_CONTROL_VALUE 1904
#define _APS_NEXT_CONTROL_VALUE 1905
#define _APS_NEXT_SYMED_VALUE 104
#endif
#endif