利用spcomm读取磅秤数据,
波特率:1200
停止位:1
无校验
数据位:8function HexStrToStr(const S:string):string;
var
t:Integer;
ts:string;
M,Code:Integer;
begin
t:=1;
Result:='';
while t<=Length(S) do
begin
while (t<=Length(S)) and (not (S[t] in ['0'..'9','A'..'F','a'..'f'])) do
inc(t);
if (t+1>Length(S))or(not (S[t+1] in ['0'..'9','A'..'F','a'..'f'])) then
ts:='$'+S[t]
else
ts:='$'+S[t]+S[t+1];
Val(ts,M,Code);
if Code=0 then
Result:=Result+Chr(M);
inc(t,2);
end;
end;
procedure TFrmMain.Comm1ReceiveData(Sender: TObject; Buffer: Pointer;
BufferLength: Word);
var
i,k:integer;
s, str1:string ;
begin
SetLength(Str1,BufferLength);
move(buffer^,pchar(Str1)^,bufferlength);
if length(trim(Str1)) <= 0 then Exit;
for i := 1 to length(Str1) do
s := s + inttohex(ord(Str1[i]), 2);
Memo1.Lines.Add(HexStrToStr(s));
Edit1.text:=HexStrToStr(s); //此处显示到edit中不对
end;收到的数据显示在memo中为:
wn00004.5k
g
wn000
4.3kg
wn00004.2kg
类似这样的数据。我需要
wn00004.5kg
wn00004.3kg
wn00004.2kg
这样的数据。
如果像上面那种情况的话显示到edit中就不对了
波特率:1200
停止位:1
无校验
数据位:8function HexStrToStr(const S:string):string;
var
t:Integer;
ts:string;
M,Code:Integer;
begin
t:=1;
Result:='';
while t<=Length(S) do
begin
while (t<=Length(S)) and (not (S[t] in ['0'..'9','A'..'F','a'..'f'])) do
inc(t);
if (t+1>Length(S))or(not (S[t+1] in ['0'..'9','A'..'F','a'..'f'])) then
ts:='$'+S[t]
else
ts:='$'+S[t]+S[t+1];
Val(ts,M,Code);
if Code=0 then
Result:=Result+Chr(M);
inc(t,2);
end;
end;
procedure TFrmMain.Comm1ReceiveData(Sender: TObject; Buffer: Pointer;
BufferLength: Word);
var
i,k:integer;
s, str1:string ;
begin
SetLength(Str1,BufferLength);
move(buffer^,pchar(Str1)^,bufferlength);
if length(trim(Str1)) <= 0 then Exit;
for i := 1 to length(Str1) do
s := s + inttohex(ord(Str1[i]), 2);
Memo1.Lines.Add(HexStrToStr(s));
Edit1.text:=HexStrToStr(s); //此处显示到edit中不对
end;收到的数据显示在memo中为:
wn00004.5k
g
wn000
4.3kg
wn00004.2kg
类似这样的数据。我需要
wn00004.5kg
wn00004.3kg
wn00004.2kg
这样的数据。
如果像上面那种情况的话显示到edit中就不对了
解决方案 »
- 如何在图表上标注信息,谢谢解答,“顶” 就有分。在线等。
- 请各位大虾帮忙!!!如何测试出程序为什么不能退出系统(采用Application.terminate),如何定位错误?
- 如何使用fastreport生成下列报表?
- 如何获得一幅图片有那些色彩值??
- 请问我想在工程里做几个公用函数,不需要界面的,就新建了一个UNIT,里面写了函数,可说申明出错
- 如何用TTabel控件更新表中已存在记录???????用下面语句更新,提示:"记录主键重复"
- 最新研究成果(Listview->header->icon),共享!!!
- 大家讨论web开发!
- 有谁见过既能避免闪烁(象TPaintBox),又能自动重绘(象TImage)的绘图控件?
- hank,俺终于忍痛改结构了!你可有收到$130?嘻嘻,顺便再问个简单问题。。。
- ◆问一个引用Dll的问题,好像没人问过◆
- 怎么添加chat中的边框
SetLength(Str1, BufferLength); //接收RS232的数据并显示Memo1上。
Move(Buffer^, PChar(Str1)^, BufferLength);
writeLog('从串口接收到数据:' + Str1);
s:=trim(s);
s:=AnsiReplaceStr(s,'g','g'+#13#10);
memo1.text:=memo1.text+s;
就是个字符串拼接的问题。串口就是串行的数据, spcomm怎么知道你哪些数据是要拼在一起的? 拼接的工作当让要你自己来做
我08年写过这种程序,spcomm就是这个毛病,我那个时候用spcomm,不接收2k数据他不停。
用 CommPortDriver,虽然也会多接收一些,不过你可以抛弃后面的数据,1秒种接收6、7组应该没问题。