在SPCOMM控件中,通信协议命令字串如何写? 大虾关注啊 急(20分)

  • 主题发起人 主题发起人 carrie4002
  • 开始时间 开始时间
C

carrie4002

Unregistered / Unconfirmed
GUEST, unregistred user!
在SPCOMM中,仪表的命令字如果为':
disp:text:data ''START 2000'''
那:WriteCommData()这句指令该怎么写,
以使仪表接收后自动识别为一条指令呢?
 
简单介绍一下
1.属性:
●CommName:表示 COM1、 COM2等串口的名字,默认是COM2.
●BaudRate: 根据实际需要设定的波特率,在串口打开后也可更改此值,实际波特率随之更改;
●ParityCheck:表示是否需要奇偶校验;
●ByteSize:根据实际情况设定的字节长度;
●Parity: 奇偶校验位;
●StopBits:停止位,提供1位半;
●SendDataEmpty:这是一个布尔型属性,为 true时表示发送缓存为空,或者发送队列里没
有信息;为 false时表示发送缓存不为空,或者发送队列里有信息。

2.方法
●Startcomm方法用于打开串口,当打开失败时会报错。错误主要有 7种:⑴串口已经打开;
⑵打开串口错误;⑶文件句柄不是通信句柄;⑷不能够安装通信缓存;⑸不能产生事件;⑹
不能产生读进程;⑺不能产生写进程;
●StopComm方法用于关闭串口,没有返回值;
●WriteCommData(pDataToWrite: PChar;dwSizeofDataToWrite:Word )方法 是个带有布尔
型返回值的函数,用于将一个字符串发送到写进程,发送成功返回 true,发送失败返回
false。执行此函数将立即得到返回值,发送操作随后执行。该函数有两个参数,其中
pDataToWrite是要发送的字符串, dwSizeofDataToWrite是发送字符串的长度。

3.事件
●OnReceiveData :procedure (Sender: TObject;Buffer: Pointer;BufferLength: Word)
当有数据输入缓存时将触发该事件,在这里可以对从串口收到的数据进行处理。 Buffer中
是收到的数据, BufferLength是收到的数据长度,一般使用mov命令将数 据从缓存读入。
●OnReceiveError : procedure(Sender: TObject; EventMask : DWORD)
当接收数据出现错误时将触发该事件。

具体实现:
单片机端我们使用现成的,avrgcc的gcctest4是个上位机通信例子,正好可以用来发数据。

1.设定 COMM1属性:


●波特率: 9600;
●奇偶校验位:无;
●字节长度: 8;
●停止位: 1;
●串口: COM1。
Memo1中将显示发送和接收的数据。


2.编写源代码


//变量说明


var
fcomm: TFCOMM;
viewstring:string;
rbuf,sbuf:array[1..8] of byte;

//打开串口

procedure TFCOMM.FormShow(Sender: TObject);
begin
comm1.StartComm;
end;
//关闭串口
procedure TFCOMM.FormClose(Sender: TObject; var Action: TCloseAction);
begin
comm1.StopComm;
end;

//接收过程
procedure TFCOMM.Comm1ReceiveData(Sender: TObject; Buffer: Pointer;BufferLength: Word);
var
i:integer;
begin
viewstring:=‘’ ;
move(buffer^,pchar(@rbuf)^,bufferlength);
for i:=1 to bufferlength do
viewstring:=viewstring+ inttohex(rbuf,2)+‘’ ;
viewstring:=‘接收’+ viewstring;
memo1.lines.add(viewstring);
memo1.lines.add(‘’ );
end;
 
To hebei_ty:
谢谢你。你的代码我调试过。
现在只是碰到一个特殊的问题。
 
指令送入仪表串口时报错。“非法字符”!
大虾们,诚请!
 
我告诉你
那个给你的程序是网上到处都能找到的.
你说的spcomm.dcu不存在
可以将你下载的spcomm控件的压缩包释放到你project所在的文件夹中。这样就可以解决了。或者你将里面的那个找不到的文件放到project所在的文件夹中也可以解决。就是缺这个。主要问题是没有建立好连接。但是我的方法绝对好使。
 
谢谢。
怎样把:disp:text:data ''START 2000'''
用WriteCommData()这个函数如何将上面这条通讯命令字写到
通讯缓存里去?急急急
 
把spcomm卸载了重装,另外不要忘记在library加上spcomm的路径。
没听说过装spcomm这么麻烦的
 
一、代码如下:
Str:=pchar(':disp:text:data ''START 2000''');
Comm1.WriteCommData(@Str,Length(Str));
可调试时,仪表显示器上,报“Invalid charactor”。
二、在SPCOMM中,发送的每条命令串需要结束符吗?
(不然,仪表接收后如何认为该条命令结束呢?
或者,spcomm自动认为每个字符串为一条完整的指令?)
哪位大虾知道,诚请!
 
给个邮箱,传给你。
 
多人接受答案了。
 
我靠,给我一分,太多了吧...不要
 
后退
顶部