串口读取/读取数据一般分为三步:打开串口,设置串口(波特率,串口数据传送方式等),然后是串口读取数据或者发送数据
void
OpenComm()
{
hCom=CreateFile("COM3",GENERIC_READ|GENERIC_WRITE,0,
NULL,
OPEN_EXISTING,
FILE_ATTRIBUTE_NORMAL|FILE_FLAG_OVERLAPPED,
NULL);
}
void
SetComm()
{
SetupComm(hCom,1024,1024);
DCB
dcb;
dcbBaudRate=115200;
展开串口读取/读取数据一般分为三步:打开串口,设置串口(波特率,串口数据传送方式等),然后是串口读取数据或者发送数据
void
OpenComm()
{
hCom=CreateFile("COM3",GENERIC_READ|GENERIC_WRITE,0,
NULL,
OPEN_EXISTING,
FILE_ATTRIBUTE_NORMAL|FILE_FLAG_OVERLAPPED,
NULL);
}
void
SetComm()
{
SetupComm(hCom,1024,1024);
DCB
dcb;
dcbBaudRate=115200;
dcbfParity=NOPARITY;
dcbByteSize=8;
dcbStopBits=ONESTOPBIT;
GetCommState(hCom,&dcb);
if(!GetCommState(hCom,&dcb)){
std::cerr<<"串口被占用"<<std::endl;
return;
}
if(!SetCommMask(hCom,EV_RXCHAR|EV_TXEMPTY)){
std::cerr<<"掩码设置失败"<<std::endl;
}
}
void
SendMessageOut(const
BYTE
snd[],int
len)
{
DWORD
factdata=100;
DWORD
res=0;
wOverLappedhEvent=CreateEvent(NULL,TRUE,FALSE,NULL);
//创建事件
BOOL
tempflag
=
WriteFile(hCom,snd,len,&factdata,&wOverLapped);//在数据缓冲Ipbuffer不知道是否有问题
if(tempflag!=0)
{
std::cerr<<"等待信号"<<std::endl;
res=WaitForSingleObject(wOverLappedhEvent,5000);
WriteFile(hCom,snd,len,&factdata,&wOverLapped);
}
if(res!=WAIT_OBJECT_0)
std::cout<<"数据发送失败"<<std::endl;
}
这是发送数据的设置
接受数据很类似
你可以根据自己情况修改,然后你就可以根据MATLAB的数据读取以及数据传送方式来写你的程序了收起
最近看到有人讨论matlab 串口通信的话题,结合以往的VB串口通信,做了这么个小实验。
需要用到的软件:matlab 7,VB 6,还有一个就是虚拟串口 Virtual Serial Port Driver!
前面2个软件就不用解释了,虚拟串口 Virtual Serial Port Driver 就是生成一对虚拟串口2和3,
本实验中一个matlab来存取COM2,另一个COM3就用VB编程打开,而且这2个串口是连接在一起的,一个输出数据,就可以从另外一个得到数据!
VB程序
放一个MSComm 控件在form上,在 Form_Load里设置相关属性,当然还包括串口通信参数字符串:
Private Sub Form_Load()
MSComm1CommPort = 3
MSComm1InputMode= comInputModeBinary
MSComm1RThreshold = 1
MSComm1Settings = "9600,e,8,1"
MSComm1PortOpen = True
End Sub
再在MSComm1的OnComm事件里加入数据生成代码:
Private Sub MSComm1_OnComm()
Dim i%
Dim Data(1024) As Byte
Randomize
Select Case MSComm1CommEvent
Case comEvCD
Case comEvCTS
Case comEvDSR
Case comEvRing
Case comEvReceive
For i = 0 To 100
Data(i) = CByte(255 Rnd())
Next i
MSComm1Output = Data
Case comEvSend
End Select
End Sub
当收到对方一个数据时,触发此事件。这里用随机函数来生成100个数,赋值给Data数组,然后用串口输出!
运行VB程序,串口3就出在打开状态,当收到一个字符,就会发送出生成的100个byte型随机数据!
Matlab程序
clear
u=uint8(zeros(1024,1));
ser_port1=serial('COM2')
ser_port1InputBufferSize=4096;
ser_port1OutputBufferSize=4096;
ser_port1Timeout=10;
ser_port1BaudRate=9600;
ser_port1Parity='even';
ser_port1StopBits=1;
fopen(ser_port1);
fwrite(ser_port1,'S');
u=fread(ser_port1,100,'uint8');
fclose(ser_port1)
delete(ser_port1)
clear ser_port1
plot(u)
grid
程序运行时,先初始化u,然后设置串口通信的相关数据,打开串口2,发送一个字符S,对方收到后会发出100个数据,matlab 接收这100个数据,存放在u中,关闭串口,清楚变量,图示变量u 中的数据!
以上是用虚拟串口软件来模拟串口通信环境,实践中用2台电脑的串口建立真实的串口通信环境也可以。当然,连接时采用的是交叉线,即A机的发送Tx连B机的接收Rx,A机的接收Rx连B机的发送Rx,信号地相连。
本实验仅起抛砖引玉的作用,如果朋友们有兴趣还可以深入,比如建立握手过程、每次指定数据个数,或者PC串口连接单片机的通信环境等等。
另外,需要虚拟串口软件可以去官方网站去下载,也可以联系索取。
matlab对底层硬件支持较差,我也做这个,虽然我无法帮你解决问题,我给你个建议,如果你有C基础或者C++,你可以使用VC++写个接口的再给数据传递该matlab引擎计算,或者直接建立一个MFC工程,用混合编程,解决问题,效果非常好,还有你可以在百度搜一下Matlab2008又可以下载的破解版,对硬件支持有所改观。你试下!祝你好运!
以上就是关于紧急求助一个串口接收数据,写入文本并画图的MATLAB程序,求大神帮忙全部的内容,包括:紧急求助一个串口接收数据,写入文本并画图的MATLAB程序,求大神帮忙、你好,我也正打算用matlab读串口数据、怎样在matlab中读取串口等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)