关于串行通讯返回数据如何动态处理的问题(100分)

  • 主题发起人 主题发起人 query1
  • 开始时间 开始时间
Q

query1

Unregistered / Unconfirmed
GUEST, unregistred user!
应用程序要和不同的多个设备(提供串行接口)进行通讯(都有协议),要把返回数据按照通讯协议截取或计算后放入到数据库中。
我的初步解决办法为:
1、制作一组函数(类似截串,取位,逻辑操作等....);
2、根据各个设备的通讯协议,用这些函数生成处理数据的表达式(string类型)并写入数据库;
3、做一个解析函数,解析该string型的表达式,计算出结果。
诸位富翁:哪位作过类似的功能或有更好的方案,请赐教!(提供源码最好)
 
和交换机的电话记费要吗?
 
to: pcchan
也可以!
 
procedure Tmain.TelComReceiveData(Sender: TObject; Buffer: Pointer;
BufferLength: Word);
var
PBuffer:Pchar;
len,x,x1,i,j,k,mm,t:integer;
ASCStr:String;
BYTEStr:String;
str:array[0..140] of char;
temppos:array[0..200] of integer;
tp:pchar;
newdate:TdateTime;
substr1,substr2,substr3:string;
TempBuffer:array[0..200] of char;

begin
Timer4.Enabled:=False;
NoTele:=0;//ÊÕµ½»°µ¥±¨¾¯Öµ¹éÁã
Alerm:=0;
newdate:=date;
if formatdatetime('yymmdd',olddate)<>formatdatetime('yymmdd',newdate) then
Begin
closefile(outfile);
olddate:=newdate;
AssignFile(outfile, 'c:/zttele/'+formatdatetime('yyyymmdd',olddate)+'.txt');
Rewrite(outfile);

end;

// if BufferLength<10 then Exit;

for mm:=0 to 200 do
Begin
temppos[mm]:=0;
end;

j:=0;
k:=0;
temppos[0]:=0;
PBuffer:=Buffer;

writeln(outfile,PBuffer);
// PrintLine(PBuffer);


if (glHotelName='&Ecirc;&reg;&Ntilde;&szlig;&Atilde;&Agrave;&Agrave;&Ouml;&acute;ó&frac34;&AElig;&micro;ê') then
begin
IF (PBuffer[0]<>'X') and (Has_second_line=false) then //'0'&AElig;&auml;&Euml;&ucirc;&sup2;&raquo;&Ecirc;&Ccedil;&micro;&ccedil;&raquo;°
begin
Exit;
end;
if (PBuffer[0]='X') and (Has_second_line=false) then
begin
P_ASCStr:='';
Has_second_line:=true;
end;
end;







ASCStr:='';
BYTEStr:='';
// P_ASCStr:='';


PBuffer:=Buffer;
for i:=0 to BufferLength-1 do
begin
if (ORD(PBuffer)>=32) AND (ORD(PBuffer)<=100) then
begin
ASCStr:=ASCStr+PBuffer;
BYTEStr:=BYTEStr+'#'+IntToStr(ORD(PBuffer));
end;
end;
if not Has_second_line then
begin
P_ASCStr:=ASCStr;
exit;
end
else
P_ASCStr:=P_ASCStr+ASCStr ;
is_e:=true;

if (PBuffer[0]='X') then exit;
// ASCStr:=ASCStr;
// P_ASCStr:='';
is_e:=false;








ASCStr:=P_ASCStr;
memo1.lines.clear;
memo2.lines.clear;
// writeln(outfile,ASCStr);
Memo1.Lines.Add(ASCStr);

Memo2.Lines.Add(BYTEStr);




{ Buffer1.Top:=0;
Buffer1.Bottom:=0;
Buffer1.TelePos:=0;
Buffer1.Buffer[0]:=#0; }


StrPcopy(Str,ASCStr);
len:=Strlen(str);
//&Eacute;&frac34;&sup3;&yacute;&para;&Igrave;&raquo;°&micro;&yen;
// if len<10 then exit;


Str[Len]:=#13;
Str[Len+1]:=#10;
Str[Len+2]:=#0;
Tp:=Str;
Buffer1.Write(Tp,strlen(Tp));
TeleSysParam.BufferCheck;
ASCStr:='';
BYTEStr:='';
Has_second_line:=false;


end;
 
后退
顶部