我开发的远程监控系统分两个程序,一个服务器端程序,它运行在远程的服务器上,服务器通过一个485串口与远在5公里外的一个监测模块相连,这个模块可以监测电流电压等数据,模块有它的协议,实现实时监控,需要不停地向模块发送监测命令,模块接收到正确的命令就会返回电流电压值到串口。另一个客户端程序,需要通过网络与服务器程序通信,我设计的客户端程序是,在客户端设置一个时钟,周期地向服务器程序发送自定义命令,服务器程序收到命令后,向485端口发送监测模块的命令,模块返回电流电压值后,将返回的值经过处理,处理原理就是加头标志,和结束标志,处理过的数据发送到客户端程序,客户端程序收到数据再去掉头标志和结束标志显示出来。我的程序能运行正常,在实验室里(传输距离不远)也运行正常,但是程序在现场运行,3个小时后,程序就死了实时的电流电压值不变了,重新关闭,再运行又好了。第一次作类似的系统,请问问题会出在什么地方?
解决方案 »
- 关于操作符new的问题
- 为什么我的static控件上文字的颜色和背景色又复原了呢????????
- 难道是MFC的BUG?如果在一个CDialog里面创建一个CTabCtrl,在CTableCtrl里面做一个Child类型的Dialg,这个时候有个问题,请大家帮忙...
- SQL Server 2000里的存储过程怎么申明数组参数?
- 急,200分请教一个关于文件缓存的问题!
- 【请教】如何读取如下这段HTML???急急急急急急急急
- ▁▂▃▄▅在线结贴▅▄▃▂▁关于using namespace
- 请问怎么样搜索一个目录下的所有文件,包括子目录的文件???在线求救
- 汉字编码问题,高手来看下.(有解了200分相送)
- 如何给网友送分,请指教。立即送分!
- VC中的makefile怎么用,能不能自己编写,就知道linux 中可以自己写。
- 菜鸟求助:ADO查询数据库后,显示查询数据(在线等答)
i=0;
switch (m_strEditRecvData.GetAt(i))//m_strEditRecvData保存了接收到的数据
{
case 'V'://V为电压数据的头
{
m_strV ="";
for(j=1;j<length;j++)
{
if('Z'!=m_strEditRecvData.GetAt(j))
{//Z是数据的结束标志
m_strV +=m_strEditRecvData.GetAt(j);
}
else
{
UpdateData(FALSE);
break;
}
}
m_WorkstrV = m_strV;
break;
}
case 'A'://A为电流数据的头标志
{
m_strA ="";
for(k=1;k<length;k++)
{
if('Z'!=m_strEditRecvData.GetAt(k))
{//Z是数据的结束标志
m_strA +=m_strEditRecvData.GetAt(k);
}
else
{
UpdateData(FALSE);
break;
}
}
m_WorkstrA = m_strA;
break;
}
case 'H':
{
m_strHZ ="";
for(m=1;m<length;m++)
{
if('Z'!=m_strEditRecvData.GetAt(m))
{
m_strHZ +=m_strEditRecvData.GetAt(m);
}
else
{
UpdateData(FALSE);
break;
}
}
m_WorkstrHZ = m_strHZ;
break;
}
default:
break;
}
switch (m_strEditRecvData.GetAt(i))//m_strEditRecvData保存了接收到的数据
{
case 'V'://V为电压数据的头
{
。
break;
}
case 'A'://A为电流数据的头标志
{
break;
}
case 'H':
{
break;
}
}
m_WorkstrHZ = m_strHZ;
break;
}
default:
break;
}
--------
这样的话,对于因意外,数据有丢失情况下
起始字符不是 V、A、H的情况,似乎没有做相应处理,会不会导致不断死循环在这个switch上?
break;
应该就不会死循环吧。