使用BCB控件遇到的问题

markxiaokeng 2016-06-08 10:17:26
这是使用BCB 中的IdTelnet组件,将设配的返回的信息显示在 TRichEdit Memo1这个控件,按正常的数据power的值应该是1002 W,但是Telnet的返回值在Memo1显示为002 W,整条信息显示如{"status":"success", "response":{"status":"on","power":"002 W","current":"9.0 A"}};如果是电流是2A,按正常的数值power为104 W,Telnet的返回值在Memo1显示为04 W,整条信息显示如{"status":"success", "response":{"status":"on","power":"04 W","current":"2.0 A"}};如果是0.2A ,在Memo1显示的是正常的值 如{"status":"success", "response":{"status":"on","power":"20 W","current":"0.2 A"}};如果不出现0 ,返回值显示OK如{"status":"success", "response":{"status":"on","power":"1124 W","current":"9.5 A"}};这是怎么回事,有知道的吗?
附上一部分代码:
void __fastcall TTelnetForm::btnConnectClick(TObject *Sender)
{
String str,str1;
IdTelnetDemo->Host = edtServer->Text;
str = edtServer->Text;
IdTelnetDemo->Port = StrToInt(spnedtPort->Text);
str1 = spnedtPort->Text;
//Application->MessageBox(str.c_str(),"IPShow");
//Application->MessageBox(str1.c_str(),"PortShow");
IdTelnetDemo->Connect();
}
//---------------------------------------------------------------------------

void __fastcall TTelnetForm::btnDisconnectClick(TObject *Sender)
{
IdTelnetDemo->Disconnect();
}
//---------------------------------------------------------------------------

void __fastcall TTelnetForm::Memo1KeyPress(TObject *Sender, char &Key)
{
if(IdTelnetDemo->Connected())
{
IdTelnetDemo->SendCh(Key);
Key = 0;
}
}
//---------------------------------------------------------------------------

void __fastcall TTelnetForm::IdTelnetDemoDataAvailable(AnsiString Buffer)
{
int Start, Stop;
String str;

str=IntToStr(Memo1->Lines->Count);

if(Memo1->Lines->Count == 0)
Memo1->Lines->Add("");


Start = 1;
Stop = Buffer.Pos(IntToStr('\n')); //the character count to a CR in the buffer

if(Stop == 0)
Stop = Buffer.Length() + 1;

while(Start <= Buffer.Length())
{
Memo1->Lines->Strings[Memo1->Lines->Count -1] =
Memo1->Lines->Strings[Memo1->Lines->Count -1] +
Buffer.SubString(Start,Stop-Start);

if(Buffer.SubString(Stop,1)=='\n')
{
Memo1->Lines->Add("");
SendMessage(Memo1->Handle,WM_KEYDOWN, VK_UP,1);
}
Start = Stop + 1;
if(Start > Buffer.Length())
{
break;
}

if(Buffer.SubString(Start,1)=='\n')
{
Start++;
}
Stop = Start;

while((Buffer.SubString(Stop, 1)!= '\n')&&(Stop <= Buffer.Length()))
{
Stop++;
}
}

}
//---------------------------------------------------------------------------
void __fastcall TTelnetForm::IdTelnetDemoConnected(TObject *Sender)
{
sbrStatus->SimpleText = "Connected";
}
//---------------------------------------------------------------------------

void __fastcall TTelnetForm::IdTelnetDemoConnect()
{
sbrStatus->SimpleText = "Connect";
}
//---------------------------------------------------------------------------
void __fastcall TTelnetForm::PingFunctionClick(TObject *Sender)
{
IdTelnetDemo->SendCh('\r');
String status = "status";
SendCommand(status);
Memo1->Lines->Add("");
}
使用Telnet连接上设配后,发送command如status,读取设配信息,然后将返回值显示在 TRichEdit Memo1这个控件;就出现了上面所述的问题,有大神知道怎么解决这个问题吗?
...全文
263 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
markxiaokeng 2016-06-15
  • 打赏
  • 举报
回复
大侠我已经找到问题了,是这个处理有问题 Memo1->Lines->Strings[Memo1->Lines->Count -1] =Memo1->Lines->Strings[Memo1->Lines->Count -1] + Buffer.SubString(Start,Stop-Start); 现在我改成 Memo1->Lines->Strings[Memo1->Lines->Count -1] =Memo1->Lines->Strings[Memo1->Lines->Count -1] +Buffer.c_str(); 这时候传到Memo1控件的数据是正常的,非常感谢你大侠
markxiaokeng 2016-06-15
  • 打赏
  • 举报
回复
引用 7 楼 markxiaokeng 的回复:
[quote=引用 5 楼 FASM_FASM 的回复:] [quote=引用 4 楼 markxiaokeng 的回复:] [quote=引用 1 楼 FASM_FASM 的回复:] 读起来很费劲啊, 考虑以下解决方案: 用抓包工具抓取设配返回状态包,如果包内容正确。请仔细检查你的IdTelnetDemoDataAvailable函数处理细节。 如果包内容本身就有问题,找设配程序开发人员吧。
抓包工具抓到的状态包的内容为{"status":"success", "response":{"status":"on","power":"108 W","current":"1.0 A"},但是接收到的信息在Memo1上显示{"status":"success", "response":{"status":"on","power":"08 W","current":"1.0 A"}[/quote] 如果这样的话,你不要对收到的内容做任何处理,直接把内容放到Memo控件内看下。如果还有错的话,那就是你用的BCB版本的问题了。如果没有问题,再好好看看你的接收处理函数吧。[/quote] 我有试过直接将收到的内容放到Memo控件中或者打印到信息提示框上,发现内容显示还是有错。[/quote] 不好意思,之前搞错了,我在IdTelnetDemoDataAvailable函数中直接将Buffer打印出来可以了 Application->MessageBox(Buffer.c_str(),"Show");这样得到的数据就没有错; 大侠可以帮忙小弟看一下这处理函数那里出问题了吗
markxiaokeng 2016-06-14
  • 打赏
  • 举报
回复
引用 5 楼 FASM_FASM 的回复:
[quote=引用 4 楼 markxiaokeng 的回复:] [quote=引用 1 楼 FASM_FASM 的回复:] 读起来很费劲啊, 考虑以下解决方案: 用抓包工具抓取设配返回状态包,如果包内容正确。请仔细检查你的IdTelnetDemoDataAvailable函数处理细节。 如果包内容本身就有问题,找设配程序开发人员吧。
抓包工具抓到的状态包的内容为{"status":"success", "response":{"status":"on","power":"108 W","current":"1.0 A"},但是接收到的信息在Memo1上显示{"status":"success", "response":{"status":"on","power":"08 W","current":"1.0 A"}[/quote] 如果这样的话,你不要对收到的内容做任何处理,直接把内容放到Memo控件内看下。如果还有错的话,那就是你用的BCB版本的问题了。如果没有问题,再好好看看你的接收处理函数吧。[/quote] 我有试过直接将收到的内容放到Memo控件中或者打印到信息提示框上,发现内容显示还是有错。
FASM_FASM 2016-06-14
  • 打赏
  • 举报
回复
其实Memo控件检查接收原始内容较好。对内容进行分析的话,建议你用cppjson来处理返回的json数据,根据数据内容用仪表、指示灯、进度条显示效果更好。
FASM_FASM 2016-06-14
  • 打赏
  • 举报
回复
引用 4 楼 markxiaokeng 的回复:
[quote=引用 1 楼 FASM_FASM 的回复:] 读起来很费劲啊, 考虑以下解决方案: 用抓包工具抓取设配返回状态包,如果包内容正确。请仔细检查你的IdTelnetDemoDataAvailable函数处理细节。 如果包内容本身就有问题,找设配程序开发人员吧。
抓包工具抓到的状态包的内容为{"status":"success", "response":{"status":"on","power":"108 W","current":"1.0 A"},但是接收到的信息在Memo1上显示{"status":"success", "response":{"status":"on","power":"08 W","current":"1.0 A"}[/quote] 如果这样的话,你不要对收到的内容做任何处理,直接把内容放到Memo控件内看下。如果还有错的话,那就是你用的BCB版本的问题了。如果没有问题,再好好看看你的接收处理函数吧。
markxiaokeng 2016-06-14
  • 打赏
  • 举报
回复
引用 1 楼 FASM_FASM 的回复:
读起来很费劲啊, 考虑以下解决方案: 用抓包工具抓取设配返回状态包,如果包内容正确。请仔细检查你的IdTelnetDemoDataAvailable函数处理细节。 如果包内容本身就有问题,找设配程序开发人员吧。
抓包工具抓到的状态包的内容为{"status":"success", "response":{"status":"on","power":"108 W","current":"1.0 A"},但是接收到的信息在Memo1上显示{"status":"success", "response":{"status":"on","power":"08 W","current":"1.0 A"}
FASM_FASM 2016-06-14
  • 打赏
  • 举报
回复
给IdTelnetDemoDataAvailable写个测试函数吧,把你的所有用例过一遍。
markxiaokeng 2016-06-13
  • 打赏
  • 举报
回复
引用 1 楼 FASM_FASM 的回复:
读起来很费劲啊, 考虑以下解决方案: 用抓包工具抓取设配返回状态包,如果包内容正确。请仔细检查你的IdTelnetDemoDataAvailable函数处理细节。 如果包内容本身就有问题,找设配程序开发人员吧。
大侠,不好意思,这么迟回复你 我使用抓包工具跑了一遍发现包里的内容是正确,关于IdTelnetDemoDataAvailable函数,求大侠指点
FASM_FASM 2016-06-08
  • 打赏
  • 举报
回复
读起来很费劲啊, 考虑以下解决方案: 用抓包工具抓取设配返回状态包,如果包内容正确。请仔细检查你的IdTelnetDemoDataAvailable函数处理细节。 如果包内容本身就有问题,找设配程序开发人员吧。

1,317

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder 网络及通讯开发
社区管理员
  • 网络及通讯开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧