高分求援,关于串口通讯。难度偏大。(300分)

  • 主题发起人 主题发起人 11111
  • 开始时间 开始时间
看你上面写的,应该是程序写错了

procedure TForm1.Button1Click(Sender: TObject);
var
Buf: Array[1..259] of Byte;
begin
//comm1.WriteCommData('64',1); 你这里写的是字符串 64,是两个字节了
Buf[1]:=64;
Comm1.WriteCommData(@Buf,1);
end;

procedure TForm1.Comm1ReceiveData(Sender: TObject; Buffer: Pointer;
BufferLength: Word);
var
Buf: PChar;
begin
GetMem(Buf,BufferLength*2);
BinToHex(PChar(Buffer),Buf,BufferLength); //转成16进制字符器显示出来
Memo1.Lines.Add(StrPas(Buf));
FreeMem(Buf);
end;
 
谢谢pihome,我马上试。
 
试了pihome朋友的代码,终于可以接收数据了,但有些数据不对,估计需要定义一下
格式。传上来的信息如下:
0704120E23320043BCA60500000000
但和厂商提供的软件读取的不相同。
我再试试格式。
年 + 月 + 日 + 时 + 分 + 秒 + 表号 + “#” + 表值 + &HEF(0xEF),

谢谢pihome。
 
看看校验位对不对?速率对不对?
 
采样率是多少呀,SPCOMM的实时性可不怎么样
 
这是上传的数据:0704120E23320043BCA60500000000
这是正确的数据:030418143550000000000005A6BC43
为什么有这样的差别呢?
 
仔细检查一下。。。两行数据有相似点。。。撇出第一位不看。。。

第一行好像是十六进制的。。。第二行好像是10进制的。。。
 
0704120E23320043BCA60500000000

应该是正确的吧
07 = 1996+7 = 2003 //看上面的协议,是从1996开始算起的
04 = 04
12 = 18
0E = 14
23 = 35
32 = 50
这应该是2003年4月18日14点35分50秒的数据
到于后面的部分,再仔细看看你的协议,注意进制的转换
 
再看你这个不同之处
43BCA60500000000
0000000005A6BC43
应该是和计算机内存存储一样,高位在前,低位在后
 
用多串口调试程序试试!
下载地址:
华军软件园:http://www.onlinedown.net/mcom.htm
这是一个小巧而功能强大、齐全的多串口调试工具.是单片机通讯开发、工业串口
控制的最佳助手。
 
谢谢各位的热心帮助。这几天非典厉害,一直没有上班。今天我把贴子结了。
问题已经大部份解决了,特别感谢pihome朋友。谢谢你。我的邮件是job2002@sohu.com。
如有时间还望赐教。
 
后退
顶部