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
@@ -1096,8 +1096,9 @@ BEGIN
EDITTEXT IDC_EDIT_PLC_TCPIP_SERVER_PORTNUMBER,51,30,40,14,ES_AUTOHSCROLL
LTEXT "Port",IDC_STATIC,29,33,14,8
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
CONTROL "DM 5000",IDC_RADIO_PLC_TCPIP_SERVER_ADDR_DM5000,"Button",BS_AUTORADIOBUTTON,96,110,44,10
CONTROL "DM 8000",IDC_RADIO_PLC_TCPIP_SERVER_ADDR_DM8000,"Button",BS_AUTORADIOBUTTON,158,110,44,10
CONTROL "DM 200",IDC_RADIO_PLC_TCPIP_SERVER_ADDR_DM200,"Button",BS_AUTORADIOBUTTON,220,110,40,10
END
IDD_SO7_UTIL_CAMERA DIALOGEX 0, 0, 417, 271
@@ -222,7 +222,7 @@ BOOL CSO7_Send_Parameter::OnInitDialog()
((CStatic *)GetDlgItem(IDC_STATIC_SPEED_PARA2))->SetWindowTextW(_T("缓冲距离(0-255)"));
((CStatic *)GetDlgItem(IDC_STATIC_SPEED_PARA3))->SetWindowTextW(_T("最低速率(0-255)"));
((CStatic *)GetDlgItem(IDC_STATIC_SPEED_PARA4))->SetWindowTextW(_T("刷新周期(0-255)"));
((CStatic *)GetDlgItem(IDC_STATIC_SPEED_PARA5))->SetWindowTextW(_T("最大速率(0.0-10.0)"));
((CStatic *)GetDlgItem(IDC_STATIC_SPEED_PARA5))->SetWindowTextW(_T("最大速率(0.0-65.5)"));
}
else
{
@@ -238,7 +238,10 @@ BOOL CSO7_Send_Parameter::OnInitDialog()
GetDlgItem(IDC_CHECK_SO7_CONTROL_MODE_Y)->EnableWindow(FALSE);
GetDlgItem(IDC_CHECK_SO7_CONTROL_MODE_Z)->EnableWindow(FALSE);
}
else
{
UpdateControlMode(0);
}
return TRUE; // return TRUE unless you set the focus to a control
}
//=========================================================================================
@@ -157,9 +157,9 @@ BOOL CSo7_Option::OnInitDialog()
((CButton *)GetDlgItem(IDC_RADIO_SO7_OMRON_PLC))->SetCheck(FALSE);
((CButton *)GetDlgItem(IDC_RADIO_SO7_OMRON_PLC_SERVER))->SetCheck(FALSE);
#ifdef _RELEASE_SO7_CONTROLER_ONLY
#ifdef _RELEASE_SO7_CONTROLER_ONLY/*
((CButton *)GetDlgItem(IDC_RADIO_SO7_OMRON_PLC))->EnableWindow(FALSE);
((CButton *)GetDlgItem(IDC_RADIO_SO7_OMRON_PLC_SERVER))->EnableWindow(FALSE);
((CButton *)GetDlgItem(IDC_RADIO_SO7_OMRON_PLC_SERVER))->EnableWindow(FALSE);*/
((CButton *)GetDlgItem(IDC_RADIO_VIDEOCARD_SDK3000))->EnableWindow(FALSE);
((CButton *)GetDlgItem(IDC_RADIO_VIDEOCARD_SV2000E))->EnableWindow(FALSE);
((CButton *)GetDlgItem(IDC_RADIO_VIDEOCARD_SV4000E))->EnableWindow(FALSE);
@@ -58,6 +58,7 @@ BEGIN_MESSAGE_MAP(CSo7_Util_PLC_TCPIP_SERVER, CDialog)
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)
ON_BN_CLICKED(IDC_RADIO_PLC_TCPIP_SERVER_ADDR_DM200, &CSo7_Util_PLC_TCPIP_SERVER::OnBnClickedRadioPlcTcpipServerAddrDm200)
END_MESSAGE_MAP()
@@ -417,6 +418,19 @@ void CSo7_Util_PLC_TCPIP_SERVER::OnBnClickedRadioPlcTcpipServerAddrDm8000()
m_UpdateListControl(E_LISTCTRL_DATA2CONTROL);
}
//=====================================================================
void CSo7_Util_PLC_TCPIP_SERVER::OnBnClickedRadioPlcTcpipServerAddrDm200()
{
m_UpdateListControl(E_LISTCTRL_CONTROL2DATA);
if (m_DMAddrList==DM_ADDR_DM5000)
{
m_UpdateControls(FALSE);
}
m_DMAddrList=DM_ADDR_DM200;
m_UpdateListControl(E_LISTCTRL_TITLE);
m_UpdateListControl(E_LISTCTRL_DATA2CONTROL);
}
//=====================================================================
void CSo7_Util_PLC_TCPIP_SERVER::m_UpdateListControl(int _type)
{
switch(_type)
@@ -616,6 +630,31 @@ void CSo7_Util_PLC_TCPIP_SERVER::m_UpdateListControl(int _type)
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_DM200)
{
LVCOLUMN vColumn;
vColumn.mask=LVCF_TEXT;
vColumn.pszText=_T("DM200地址");
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"),200+i);
m_DataList.SetItemText(i,0,str);
m_DataList.SetItemText(i,1,_T(""));
m_DataList.SetItemText(i,2,_T(""));
}
int Addr(25);
m_DataList.SetItemText(Addr++,2,_T("状态"));
Addr=35;
m_DataList.SetItemText(Addr++,2,_T("发送命令"));
m_DataList.SetItemText(Addr++,2,_T("坐标编号"));
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;
@@ -687,6 +726,18 @@ void CSo7_Util_PLC_TCPIP_SERVER::m_UpdateListControl(int _type)
m_DataList.SetItemText(i,1,str);
}
}
else if (m_DMAddrList==DM_ADDR_DM200)
{
iStartRow=0;
iEndRow=200;
for (int i=iStartRow;i<iEndRow;i++)
{
str.Format(_T("%d"),g_pSo7_TCPIP_Server->DM200[i]);
if(i==25)
str.Format(_T("0x%X"),g_pSo7_TCPIP_Server->DM200[i]);
m_DataList.SetItemText(i,1,str);
}
}
else
{
;
@@ -748,6 +799,17 @@ void CSo7_Util_PLC_TCPIP_SERVER::m_UpdateListControl(int _type)
g_pSo7_TCPIP_Server->DM8000[iRow]=static_cast<short>(atoi(cTmp));
}
}
else if (m_DMAddrList==DM_ADDR_DM200)
{
iStartRow=0;
iEndRow=200;
for (int iRow=iStartRow;iRow<iEndRow;iRow++)
{
csTmp=m_DataList.GetItemText(iRow,iCol);
cTmp=T2A(csTmp);
g_pSo7_TCPIP_Server->DM200[iRow]=static_cast<short>(atoi(cTmp));
}
}
break;
}
default:break;
@@ -922,3 +984,4 @@ CString CSo7_Util_PLC_TCPIP_SERVER::TCPIPMsg(s_tcpip_msg_data _MsgData)
@@ -5,6 +5,7 @@ enum DM_ADDR_LIST
DM_ADDR_CCD,
DM_ADDR_DM5000,
DM_ADDR_DM8000,
DM_ADDR_DM200,
DM_ADDR_LIST
};
// CSo7_Util_PLC_TCPIP_SERVER dialog
@@ -52,4 +53,5 @@ public:
afx_msg void OnBnClickedRadioPlcTcpipServerAddrCcdDm();
afx_msg void OnBnClickedRadioPlcTcpipServerAddrDm5000();
afx_msg void OnBnClickedRadioPlcTcpipServerAddrDm8000();
afx_msg void OnBnClickedRadioPlcTcpipServerAddrDm200();
};
@@ -238,7 +238,9 @@
<ClCompile Include="So7_Temperature_Sensor.cpp">
<Filter>Sources Files</Filter>
</ClCompile>
<ClCompile Include="SO7_Temperature_Display.cpp" />
<ClCompile Include="SO7_Temperature_Display.cpp">
<Filter>Sources Files</Filter>
</ClCompile>
</ItemGroup>
<ItemGroup>
<ClInclude Include="CaptureDataDlg.h">
@@ -511,7 +513,9 @@
<ClInclude Include="So7_Temperature_Sensor.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="SO7_Temperature_Display.h" />
<ClInclude Include="SO7_Temperature_Display.h">
<Filter>Header Files</Filter>
</ClInclude>
</ItemGroup>
<ItemGroup>
<None Include="ReadMe.txt" />
@@ -950,6 +950,8 @@
#define IDC_RADIO_PLC_TCPIP_SERVER_ADDR_DM8000 1806
#define IDC_EDIT_MOVETO_DEG 1807
#define IDC_RADIO_READ_LIMIT_SWITCH 1807
#define IDC_RADIO_PLC_TCPIP_SERVER_ADDR_DM8001 1807
#define IDC_RADIO_PLC_TCPIP_SERVER_ADDR_DM200 1807
#define IDC_BUTTON_TESA_STAR_SENDMSG 1808
#define IDC_EDIT_TESA_STAR_E_LOG 1809
#define IDC_BUTTON_TESA_STAR_CLEAR_LOG 1810