commwizarddlg.cpp
字号:
return hbr;
break;
}
//return hbr;
}
//学习与控制按扭
void CCommWizardDlg::OnStuctr()
{
CString strSend;
UpdateData(true);
char hexdt[150];
//m_bStudy = 1;//读取返回:成功或失败
//清除接收缓冲区准备接收应答信息
for(int i=0;i<512;i++)
{
byTemp[i] = 0xAA;//
}
for(i = 0;i<150;i++)
{
hexdt[i] = 0x00;
SendSerData[i] = 0x00;
}
nRec = 0;//接收缓冲记数清除
if(m_nInputMode > 1)
{
CByteArray hexdata;
int len=String2Hex(m_sStuCtrl ,hexdata);
if(!m_bSerialSet)
m_Com.SetOutput(COleVariant(hexdata));
int lent = String2HexA(m_sStuCtrl,hexdt);
for(int i=0;i<lent;i++)
{
SendSerData[i+1] = ((unsigned char)hexdt[i]); //格式化网络数据命令 2008.06.23 ZQL
SendSerData[0] ++;
}
// if(!m_bSerialSet)
// SendCmd(st);//发送命令
if(m_bSerialSet)
{
m_bSerSendFlag = 1;//网络操作标志,发送数据
AfxBeginThread(Serial_WriteThead,&SocketPr);//
}
}
else
m_Com.SetOutput(COleVariant(m_sStuCtrl));//发送数据
SetTimer(6,350,NULL);
}
void CCommWizardDlg::OnVScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar)
{
CDialog::OnVScroll(nSBCode, nPos, pScrollBar);
}
void CCommWizardDlg::OnVscrollEditReceive()
{
//UpdateData(false);
}
void CCommWizardDlg::OnUpdateEditReceive()
{
// TODO: If this is a RICHEDIT control, the control will not
// send this notification unless you override the CDialog::OnInitDialog()
// function to send the EM_SETEVENTMASK message to the control
// with the ENM_UPDATE flag ORed into the lParam mask.
// TODO: Add your control notification handler code here
//UpdateData(false);
}
void CCommWizardDlg::OnSetfocusEditReceive()
{
//UpdateData(false);
}
//计算
void CCommWizardDlg::OnAdu()
{
float H1,L1,D1,U1, H2,L2,D2,U2;
CString str;
UpdateData(true);
U1 = m_nAu;
D1 = m_nAd;
H1 = (5050*U1-250*D1)/4800;
L1 = 25*U1 -24*H1;
str.Format("%d",(unsigned short)H1);
m_sMAUp = str;
str.Format("%d",(unsigned short)L1);
m_sMADown = str;
U2 = m_nBu;
D2 = m_nBd;
H2 = (5050*U2-250*D2)/4800;
L2 = 25*U2 - 24*H2;
str.Format("%d",(unsigned short)H2);
m_sMBUp = str;
str.Format("%d",(unsigned short)L2);
m_sMBDown = str;
UpdateData(false);
}
void CCommWizardDlg::OnEditchangeStuday()
{
}
void CCommWizardDlg::OnChangeEditWendu()
{
}
void CCommWizardDlg::OnEditupdateStuday()
{
// TODO: Add your control notification handler code here
}
void CCommWizardDlg::OnSetfocusStuday()
{
}
void CCommWizardDlg::OnSelchangeStuday()
{
//m_sWendu
switch( m_comSty.GetCurSel())
{
case 0:
{
m_edWendu.Clear();
m_edWendu.SetSel(0,-1);
m_edWendu.SetLimitText(0);
m_edWendu.ReplaceSel("非法命令!");
AfxMessageBox("非法命令");
}
break;
case 1:
{
m_edWendu.Clear();
m_edWendu.SetSel(0,-1);
m_edWendu.SetLimitText(0);
m_edWendu.ReplaceSel(" 关机");
}
break;
case 2:
{
m_edWendu.Clear();
m_edWendu.SetSel(0,-1);
m_edWendu.SetLimitText(0);
m_edWendu.ReplaceSel(" 16度");
}
break;
case 3:
{
m_edWendu.Clear();
m_edWendu.SetSel(0,-1);
m_edWendu.SetLimitText(0);
m_edWendu.ReplaceSel(" 17度");
}
break;
case 4:
{
m_edWendu.Clear();
m_edWendu.SetSel(0,-1);
m_edWendu.SetLimitText(0);
m_edWendu.ReplaceSel(" 18度");
}
break;
case 5:
{
m_edWendu.Clear();
m_edWendu.SetSel(0,-1);
m_edWendu.SetLimitText(0);
m_edWendu.ReplaceSel(" 19度");
}
break;
case 6:
{
m_edWendu.Clear();
m_edWendu.SetSel(0,-1);
m_edWendu.SetLimitText(0);
m_edWendu.ReplaceSel(" 20度");
}
break;
case 7:
{
m_edWendu.Clear();
m_edWendu.SetSel(0,-1);
m_edWendu.SetLimitText(0);
m_edWendu.ReplaceSel(" 21度");
}
break;
case 8:
{
m_edWendu.Clear();
m_edWendu.SetSel(0,-1);
m_edWendu.SetLimitText(0);
m_edWendu.ReplaceSel(" 22度");
}
break;
case 9:
{
m_edWendu.Clear();
m_edWendu.SetSel(0,-1);
m_edWendu.SetLimitText(0);
m_edWendu.ReplaceSel(" 23度");
}
break;
case 10:
{
m_edWendu.Clear();
m_edWendu.SetSel(0,-1);
m_edWendu.SetLimitText(0);
m_edWendu.ReplaceSel(" 24度");
}
break;
case 11:
{
m_edWendu.Clear();
m_edWendu.SetSel(0,-1);
m_edWendu.SetLimitText(0);
m_edWendu.ReplaceSel(" 25度");
}
break;
case 12:
{
m_edWendu.Clear();
m_edWendu.SetSel(0,-1);
m_edWendu.SetLimitText(0);
m_edWendu.ReplaceSel(" 26度");
}
break;
case 13:
{
m_edWendu.Clear();
m_edWendu.SetSel(0,-1);
m_edWendu.SetLimitText(0);
m_edWendu.ReplaceSel(" 27度");
}
break;
case 14:
{
m_edWendu.Clear();
m_edWendu.SetSel(0,-1);
m_edWendu.SetLimitText(0);
m_edWendu.ReplaceSel(" 28度");
}
break;
case 15:
{
m_edWendu.Clear();
m_edWendu.SetSel(0,-1);
m_edWendu.SetLimitText(0);
m_edWendu.ReplaceSel(" 29度");
}
break;
case 16:
{
m_edWendu.Clear();
m_edWendu.SetSel(0,-1);
m_edWendu.SetLimitText(0);
m_edWendu.ReplaceSel(" 30度");
}
break;
case 17:
case 34:
case 51:
case 68:
{
m_sWendu ="非法命令";
UpdateData(false);
AfxMessageBox("非法命令");
}
break;
default:
{
m_edWendu.Clear();
m_edWendu.SetSel(0,-1);
m_edWendu.SetLimitText(0);
m_edWendu.ReplaceSel(" 控制开");
}
break;
}
}
/**********************************************
*
* 串口网络测试线程
* ZQL
* 2008.06.19
**********************************************/
UINT Serial_SocketThead(LPVOID pParam)
{
#if 1 //zql
struct SocketPress *tmpParam;
tmpParam =(struct SocketPress*)pParam; //线程参数
CString tmpmsg,showmsg,sAir;
int RecDataLen=0,SendDataLen=0;//接收、发送数据长度
char *str;
unsigned int sclient;
struct sockaddr_in server;
int status,ret;
int loops=0;
int DoLoop=0;
int data_len=150,m=0,j=0;
INT sum = 0;
long readtimesok =0,errortimes =0,lostserver =0;
char ch[]={0xf4,0x11,0xaa,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00
};
CHAR data[150];
WSADATA wsd;
if((status=WSAStartup(MAKEWORD(2,2),&wsd))!=0)
{
AfxMessageBox("wsastartup() failed!");
return FALSE;
}
ZeroMemory(&server,sizeof(server));
server.sin_family=AF_INET;
int nPort= atoi( tmpParam->dxDlg->ServerPort );
server.sin_port=htons(2008);//nPort);
server.sin_addr.s_addr=inet_addr(tmpParam->dxDlg->ServerIP);
#if 1 //zql
if((sclient=socket(AF_INET,SOCK_STREAM,0))==SOCKET_ERROR)
{
AfxMessageBox("Socket failed !");
return FALSE;
}
#endif
if(connect(sclient,(struct sockaddr *)&server,sizeof(server))==SOCKET_ERROR)//<0)
{
m_bTime = 0;
#if 1
tmpmsg.Format("连接失败!\r\n");
showmsg=tmpmsg;
tmpParam->dxDlg->m_sRev.ReplaceSel(showmsg);
#endif
m_bSTATE =0;
closesocket(sclient);
WSACleanup();
}
while(1)
{
#if 0
if(!m_bConvert)
{
tmpmsg.Format("建立连接成功!\r\nThe ARM Server's IP is:%s\r\n\r\n",HOST_IP_ADDR);
showmsg+=tmpmsg;
tmpParam->dxDlg->m_sRev.ReplaceSel(showmsg);
}
#endif
m_nCountTime = 0;//定时器清零
m_uSecondPortTime = 0;//主端口重联次数清零
ZeroMemory(data,sizeof(data));
//for(m=0;m<150;m++)
// data[m] = 0xff;
//if(tmpParam->dxDlg->m_bSerTest)
//{
ch[4]=0xc0;//串口测试命令
//}
//else
// ch[4]=0x00;
#if 0 ///////////////
//告警测试
if(ch[5]==0xdd)
{
m_sAlarm = 1;
}
else
m_sAlarm = 0;
#endif
if(m_bSerSendFlag)
{
ch[6] = 0xac;//RS485 发送命令
}
else
ch[6] = 0;
if(m_bSerSendFlag ==0)
continue;
ch[7] = m_bSerSendFlag; //置位发送标志
if(ch[7] == 0x01)
{
m_bSerSendFlag = 0; //清除发送标志
for(m = 0;m<150;m++)
ch[8 + m] = SendSerData[m];
}
//发送数据
ret=0;
SendDataLen = sizeof(ch);
str=ch;
while(SendDataLen>0)
{
ret=send(sclient,str,SendDataLen,0);
if(ret ==SOCKET_ERROR)
{
CString m_Err_Message;
m_Err_Message.Format("错误:Client无法发送数据;\n错误码:%d",WSAGetLastError());
AfxMessageBox(m_Err_Message);//,"系统错误",MB_OK|MB_ICONSTOP);
return 0;
}
SendDataLen-=ret;
if(SendDataLen>0)
{
str=ch+SendDataLen;
}
}
ch[6] = 0x00;
ch[7] = 0x00;//串口数据标志
//接收数据
int total_flag=0,total_data=0,data_tmplen=0,m;
char datatmp[150];
ret = 0;
do
{
ret = recv(sclient,datatmp,data_len,0);
if(!total_flag)
{
total_flag = 1;
total_data = data[1];
}
for(m=0;m<ret;m++)
{
data[data_tmplen + m] = datatmp[m];
}
data_tmplen +=ret;
}while(data_tmplen < total_data);
if(!m_bConvert)
{
if( (data[1] > 0) && ((unsigned char)data[0] == 3) )//数据长度
{
if(!m_bConvert)
{
loops++;
if(loops>=14)
{
tmpParam->dxDlg->m_sRev.SetSel(0,-1);
//tmpParam->dxDlg->m_sRev.Clear();
tmpParam->dxDlg->m_strReceive.Empty();
loops=0;
}
showmsg.Empty();
tmpmsg.Empty();
}
tmpmsg.Format("\r\n串口%02x 接收: ",(unsigned char)data[0]);
showmsg+=tmpm
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -