我现在需要串口通信的资料,
情况:
一个带有串口的万用表,连接到计算机。
我使用什么办法可以检测他传递的数据。
万用表型号 : ut70d
情况:
一个带有串口的万用表,连接到计算机。
我使用什么办法可以检测他传递的数据。
万用表型号 : ut70d
解决方案 »
- delphi怎么控制USB
- 画动态波形
- 初学编程的迷惑~~请各位前辈多多指点~~
- 菜鸟上路,Database Desktop的问题
- 转让MPEG4格式卡拉vod点歌系统源代码,送9000千首高清析歌库和ksc歌词脚本文件。此举道尽穷酸程序员出卖源代码之艰难苦涩,这么
- 怎么样调用已编好的帮助文件
- 请问,去除字符串前后空格的函数是哪个?
- 该如何来设计这个QRreport,参与者有分
- Delphi2010里面,如何把GB2312转换为utf编码呢,在线等!!!
- 急,TQUERY有获取最大记录数限制吗,我要得到20多万条,可是只得到19万多就没有了!
- asp + Com + IIS
- 找了个新的工作,感觉还可以,散分!
1.属性
●CommName:表示 COM1、 COM2等串口的名字;
●BaudRate:根据实际需要设定的波特率,在串口打开后也可更改此值,实际波特率随之更改;
●ParityCheck:表示是否需要奇偶校验;
●ByteSize:根据实际情况设定的字节长度;
●Parity:奇偶校验位;
●StopBits:停止位;
●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) of object
当有数据输入缓存时将触发该事件,在这里可以对从串口收到的数据进行处理。 Buffer中是收到的数据, BufferLength是收到的数据长度。
●OnReceiveError : procedure(Sender: TObject; EventMask : DWORD)
当接收数据出现错误时将触发
//---------------------------------------------------------------来自:http://www.gjwtech.com
主页上就有!
ut70d的万用表.希望各位支持.我需要万用表测量的数据.这个万用表自带的软件有我所需要的功能.怎么能把这些功能加入到我自己的程序中.因为我要定时执行他的任务.
那么我怎么做,才可以接受到信号,并且处理.我在一个按钮中写 发送命令如下:a := '10001001';
Comm1.StartComm;
comm1.WriteCommData(a,length(a));
这样写错误在那里。
我怎么发送了命令之后,接受不到数据啊。最好可以给出一个具体的小例子。谁先给出,分全给他。
后台串口监测,满意了吧!
关于delphi中串口通讯控件的选择
mscomm:微软的东西,ActivX控件,使用简单,在VB中带的,性能一般,由于是ActivX控件,打包时需要注册好多信息,不推荐使用。
spcomm:比较好的vcl,算是比较专业的,解剖了一下,功能比较完善。
TurboPower:公认的专业通讯控件。可以到其站点下载,开放源码了。
我在制作串口通讯软件时三种都用过,最终全部使用TurboPower!所以也推荐大家使用它。
写了个例子,基本的串口通讯都可以实现,可提供参考。
下载地址:http://www.kaer.cn/default.aspx(网站安全性较差,经常当机,如果急用,mail我)
多多指正:[email protected]
读取FS970x Sum1——直接读值 100-00000b 80 0
读取FS970x Sum2——直接读值 100-00010b 82 2
读取FS970x 正Peak——直接读值 100-00100b 84 4
读取FS970x 负Peak——直接读值 100-00110b 86 6
读取FS970x Ktb及Ksg 100-01000b 88 8
读取目前显示值 100-01001b 89 9
读取Bar Graph值 100-01010b 8a 10
读取Dual显示值 100-01011b 8b 11
Range Key按一秒 101-0000-0b A0 23
Range Key按一次 101-0000-1b A1 23uP->PC传回资料格式 作用 1 2~5 6~ ck* 0ah
传回FS970x Sum1——直接读值 100-00000b st1~st4 [格式一] Byte 10 Byte 11
传回FS970x Sum2——直接读值 100-00010b st1~st4 [格式一] Byte 10 Byte 11
传回FS970x 正Peak——直接读值 100-00100b st1~st4 [格式一] Byte 10 Byte 11
传回FS970x 负Peak——直接读值 100-00110b st1~st4 [格式一] Byte 10 Byte 11
传回FS970x Ktb及Ksg 100-01000b st1~st4 [格式二] Byte 14 Byte 15
传回目前显示值 100-01001b st1~st4 [格式三] Byte 11 Byte 12
传回Bar Graph值 100-01010b st1~st4 [格式四] Byte 7 Byte 8
传回Dual显示值 100-01011b st1~st4 [格式三] Byte 11 Byte 12注1:st1~st4的设定值如下:
bit7 bit6 bit5 bit4 bit3 bit2 bit1 bit0
st1 1 st(RFS) st(RFS) st(RFS) st(RFS) st(Sel) st(Sel) st(Sel)
st2 1 st(Rng) st(Rng) st(Rng) st(Rng) st(Hz) st(Hz) st(Hz)
st3 1 st(Rec) st(Rec) st(Rec) st(Rec) st(Rel) st(Rel) st(Rel)
st4 1 fgAuto fgLb fgSn fgOL fgHV st(AH) st(AH) stRng=Dis1_Val_R in uP
for Dual: stRng=Dis2_Val_R in uP
1) fgOL: 1=OL,0=not OL
2) fgSn: 1=负数,0=正数
3) fgLb: 1=Low Battery
4) fgAuto: 1=Menu Range,0=AutoRange
5) fgHV: 1=Hi Voltage,0=Normal注2:传回资料格式说明格式一:(此表格要从上到下直看)
Byte6 1,0,b23,b22,b21,b20,b19,b18
Byte7 1,0,b17,b16,b15,b14,b13,b12
Byte8 1,0,b11,b10,b9,b8,b7,b6
Byte9 1,0,b5,b4,b3,b2,b1,b0格式二:(此表格要从上到下直看)
Ktb Byte6 1,0,b23,b22,b21,b20,b19,b18
Ktb Byte7 1,0,b17,b16,b15,b14,b13,b12
Ktb Byte8 1,0,b11,b10,b9,b8,b7,b6
Ktb Byte9 1,0,b5,b4,b3,b2,b1,b0
Ksg Byte10 1,0,b23,b22,b21,b20,b19,b18
Ksg Byte11 1,0,b17,b16,b15,b14,b13,b12
Ksg Byte12 1,0,b11,b10,b9,b8,b7,b6
Ksg Byte13 1,0,b5,b4,b3,b2,b1,b0格式三:
6 7 8 9 10
计算值 ASCII字串的数字
时间 ASCII字串的数字 'S'/'M'
Duty ASCII字串的数字 '0'
*计算值:无小数点、正负号、最高为固定放在Byte6,其后不足位数补0
*时间:ex:12分37秒->'1','2','3','7','S'
1小时48分->'0','1','4','8','M'
*Duty:62.52%->'6','2','5','2','0'格式四:
6
100-b4,b3,b2,b1,b0
我现在的要求事这样的,通过那个rs-232c接口,自己写程序控制,例如定时检测等功能,当然,最重要的功能事我要可以自己写程序读出万用表现在测量的数据.
我现在用SPCOMM,可是我以下的代码根本得不到返回值.不知道为什么,是程序错了,还是思路错误.程序:
procedure TForm1.Button1Click(Sender: TObject);
var
s : pchar;
begin
s := '10001001';
Comm1.WriteCommData(s,8);
end;procedure TForm1.Comm1ReceiveData(Sender: TObject; Buffer: Pointer;
BufferLength: Word);
var
s: string;
begin
SetLength(S, BufferLength); //接收RS232的数据并显示Memo1上。
Move(Buffer^, PChar(S)^, BufferLength);
Memo1.Lines.Add(S);
Memo1.Invalidate;end;procedure TForm1.FormDestroy(Sender: TObject);
begin
Comm1.StopComm;
end;procedure TForm1.FormCreate(Sender: TObject);
begin
Comm1.StartComm;
end;