串口通讯(SPCOMM) ( 积分: 100 )

  • 主题发起人 主题发起人 zhangqingyun200
  • 开始时间 开始时间
Z

zhangqingyun200

Unregistered / Unconfirmed
GUEST, unregistred user!
3、 数据大屏幕通过计算机串口接收数据,共两个大屏幕,分别显示车辆总重、超限重量;大屏幕以连续发送方式接收,标准RS232C串行数据,波特率为1200,ASCⅡ码方式接收,每帧数据共有8组组成(包括小数点)。数据传送先低位后高位,每帧数据间有一组是分隔符“=”,接收数据为毛重,如当前毛重70.15,连续发送51.0700=……
如何用ASCII发送和接收呀
 
///以下函数将字符串转换为对应的Ascii 码 (十六进制)
Function StrCharsToAscii(S1: String):String;
Var
ks,Len:Integer;
HexStr:String;
begin
HexStr:='';
Len:=Length(S1);
For ks:=1 To Len Do
HexStr:=HexStr+IntToHex(Byte(S1[ks]),2)+' ';
Result:=HexStr;
end;
///////发送代码
if edit6.Text<>'' then
begin
zz:=edit6.Text; ///////实际总重
zz:=copy(zz,7,1)+copy(zz,6,1)+copy(zz,5,1)+copy(zz,4,1)+copy(zz,3,1)+copy(zz,2,1)+copy(zz,1,1)+'=';
zz:=StrCharsToAscii(zz);
memo1.Lines.Text:=zz;
comm3.WriteCommData(Pchar(zz),Length(zz));
end;
帮我看看问题出在哪呀
谢谢各位,在线等待
 
那位大侠帮我看看呀,谢谢了!!!!!!!!1[:(]
 
楼主啊,概念模糊, 问题表述不清楚:
1. 你的问题表述不清楚的地方: 你既要做发送,又要接收? 你现在不会的(没有成功)的是发送?
2. 你的概念错误的地方: 你对计算机的数据的存取与传输中的&quot;字符&quot;、&quot;字节&quot;,&quot;二进制&quot;等概念模糊;
3. 简单地说: 你的代码中 zz:=StrCharsToAscii(zz); 是多余的, 不是画蛇添足, 而是错误的.
 
谢谢新世纪的批评
但是协议规定必须用ASCII发送呀,怎么实现呀
的确这几个概念把我搞晕了,谢谢你的支持,如果解决了我肯定会加倍给分的
 
难道没有人帮我吗
郁闷呀
 
我有现存的源码,请联系我QQ263508014
 
谢谢我已经解决了,把代码给大家与你们共享
 
procedure TFrm_main.Button1Click(Sender: TObject);
var
SendData: array[1..9] of byte;
bb,zz:string;
i:integer;
begin
if edit6.Text<>'' then
begin
zz:=edit6.Text;
while length(zz)<7 do
begin
zz := '0'+zz;
end;
bb := '';
bb := bb + copy(zz,7,1);
bb := bb + copy(zz,6,1);
bb := bb + copy(zz,5,1);
bb := bb + copy(zz,4,1);
bb := bb + copy(zz,3,1);
bb := bb + copy(zz,2,1);
bb := bb + copy(zz,1,1);
bb := bb + '=';
for i:= 1 to length(bb) do
begin
SendData := ord(bb);
end;
comm2.WriteCommData(@SendData,length(SendData));
end;
end;
 
多人接受答案了。
 
后退
顶部