
Delphi7 SPCOMM串口通信
Spcomm串口通信控件的基本属性、方法和事件说明如下:CommName属性:计算机串口端口号的名字,COM1、COM2……等,在打开串口前,必须填写好此值。
Parity属性:校验位 None、Odd、Even、Mark、Space等。
BaudRate:设定支持串口通信用的波特率9600,4800等,根据实际需要来定,在串口打开后也可更改波特率,实际波特率随之更改。
ByteSize属性:表示一个字节中,使用多少个数据位收发数据,根据具体情况设定5、6、7、8等。
StopBits属性:表示一个字节中,使用停止位的位数,根据具体情况设定1、1.5、2等。
SendDataEmpty属性:布尔属性,为True时表示发送缓存为空,或者发送队列里没有信息;为False时表示表示发送缓存不为空,或者发送队列里有信息。
StartComm方法:用来打开通信串口,开始通信。
如果失败,则会导致串行口错误。
错误类型大致分为串行口己处于打开状态,所以不能打开串行口,不能创建读写进程,不能建立串行口缓冲区等。
StopComm方法:用来停止通信串行口的所有进程,关闭串口。
WriteCommData(pDataToWrite:PChar;dwSizeofDataToWrite:Word)方法是带有布尔型返回值 的函数,其中参量pDataToWrite是要写入串行口的字符串,dwSizeofDataToWrite是要写入的字符串的长度。
该函数通过一个写线程向串行口输出缓冲区发送数据。
发送操作将在后台默认执行。
如果写线程 PostMessage成功,则返回值是True,若写线程失败,返回值是False。
OnReceiveData(Buffer:Pointer;BufferLength:Word),其中Buffer是指向输入缓冲区的指针。
BufferLength是从缓冲区收到的数据长度。
当输入缓冲区收到数据时,该事件被触发。
当输入缓存有数据时将触发该事件,对从串口收到的数据进行处理。
如何使用spcomm控件读写串口数据
凡是这类问题,用你正常的QComm按你之前的正确设置向一个虚拟串口发送数据(比如连到com7,不要说你不知道VPSD是什么。
。
。
),同时用串口调试助手在另一个虚拟串口上接收数据(以十六进制显示,比如是com8),看看收到的数据是什么。
记一下这个数据,关掉 QComm,然后同样用spcomm向com7发送同样的数据,再看看串口调试助手收到的又是什么,比较一下二者的数据
请教大神,如何使用spcomm控件来实现多串口通信
以下代码请参考 if Port <> 0 then begin SPComm1 := TSPComm.Create(nil); SPComm1.BaudRate := Rate; SPComm1.CommName := 'COM'+IntToStr(Port); SPComm1.OnReceiveData := ReceiveData; SPComm1.StartComm; end;自己写个 ReceiveData函数,解析数据,并实现你要做的事
delphi spcomm串口通信程序,程序有问题,求高人详细给指导一下,把程序改正确了。
你计算机上有没有COM口,你设置了正确的COM号了没有,看程序应没有太大的问题。
我用spcomm控件做串口通信,怎么接受不到数据
串口通信和程序执行不一样。
程序是按照顺序执行的。
可串口需要响应时间。
也就是说,你发,他不一定马上会回复,一般会在一定时间段内反复接收几次。
中间可以尝试sleep一下。
另外注意端口的开启和关闭,还有占用
C++\\\/MFC 使用SPComm串口通信 用串口助手测试时 每次必须将串口助手接收的内容清空才可以接收到发送数据
本人希望的是可以一直发数据,串口助手那边可以一直接收并且显示,不知为何现在必须要每次都将接受内容清空才可以,还请高手指导。
void CSPCoomDlg::OnBnClickedButton1() { \\\/\\\/ TODO: 在此添加控件通知处理程序代码 \\\/*******************SPComm初始... 本人希望的是可以一直发数据,串口助手那边可以一直接收并且显示,不知为何现在必须要每次都将接受内容清空才可以,还请高手指导。
void CSPCoomDlg::OnBnClickedButton1(){\\\/\\\/ TODO: 在此添加控件通知处理程序代码\\\/*******************SPComm初始化*********************\\\/Serial->CommName = LCOM1;Serial->BaudRate = 9600;Serial->ByteSize = TComm::_8;Serial->Parity = TComm::None;Serial->StopBits = TComm::_1;Serial->OnReceiveData = ReceiveData;Serial->ReadIntervalTimeout = 50;if (!Serial->IsOpen())Serial->StartComm();UpdateData(TRUE);char p[8];int i;for (i = 0; i < m_send1.GetLength(); i++) \\\/\\\/char型转换为CString{p[i] = m_send1[i];}p[i] = '\\\\0';Serial->WriteCommData(p, 8);\\\/\\\/发送数据内容UpdateData(0);} 展开



