欢迎来到一句话经典语录网
我要投稿 投诉建议
当前位置:一句话经典语录 > 口号 > c读取串口号

c读取串口号

时间:2016-03-26 14:02

怎么通过串口读取51单片机某个地址的数据

请用C语言写出来。

调用输入输出的函数,它的参数大概是端口地址和缓冲区(好像是哈,TC2.0里是有的,好像是input,其它版本的C也应该有类似的函数)——跟windows里面的deviceiocontrol()很类似的,调用它就可以啦当然你要先把串口设置好,比如波特率之类的

如何在C中从串口打开,读取和写入

Linux下面有设备文件串口装好驱动后 会显示在dev下然后对这个设备文件进行读写即可。

比windows要简单的多。

求:C语言写的串口读取的程序,最好是读取GPS数据用的

看看这个项目:其实GPS的串口程序很简单,一个是打开串口设备,从串口设备读取数据,再一个就是进行字符串处理。

C#读取串口号

private System.IO.Ports.SerialPort com; private void Form1_Load(object sender, EventArgs e) { com = new System.IO.Ports.SerialPort(); \\\/\\\/获取所有的串口 Microsoft.VisualBasic.Devices.Computer pc = new Microsoft.VisualBasic.Devices.Computer(); foreach (string s in pc.Ports.SerialPortNames) { this.cbxPortName.Items.Add(s); } }

C#串口读取?

通常,在C#中实现串口通信,我们有四种方法: 第一:通过MSCOMM控件这是最简单的,最方便的方法。

可功能上很难做到控制自如,同时这个控件并不是系统本身所带,所以还得注册。

可以访问 一个外国人写的教程 第二:微软在.NET新推出了一个串口控件,基于.NET的P\\\/Invoke调用方法实现,详细的可以访问微软网站 Serial Comm Use P\\\/Invoke to Develop a .NET Base Class Library for Serial Device Communications 第三:就是用第三方控件啦,可一般都要付费的,不太合实际,何况楼主不喜欢,不作考虑 第四:自己用API写串口通信,这样难度高点,但对于我们来说,可以方便实现自己想要的各种功能。

我们采用第四种方法来实现串口通信,用现成的已经封装好的类库,常见两个串口操作类是JustinIO和SerialStreamReader。

介绍JustinIO的使用方法: 打开串口: 函数原型:public void Open() 说明:打开事先设置好的端口 示例: using JustinIO; static JustinIO.CommPort ss_port = new JustinIO.CommPort(); ss_port.PortNum = COM1; \\\/\\\/端口号 ss_port.BaudRate = 19200; \\\/\\\/串口通信波特率 ss_port.ByteSize = 8; \\\/\\\/数据位 ss_port.Parity = 0; \\\/\\\/奇偶校验 ss_port.StopBits = 1;\\\/\\\/停止位 ss_port.ReadTimeout = 1000; \\\/\\\/读超时 try { if (ss_port.Opened) { ss_port.Close(); ss_port.Open(); \\\/\\\/打开串口 } else { ss_port.Open();\\\/\\\/打开串口 } return true; } catch(Exception e) { MessageBox.Show(错误: + e.Message); return false; } 写串口: 函数原型:public void Write(byte[] WriteBytes) WriteBytes 就是你的写入的字节,注意,字符串要转换成字节数组才能进行通信 示例: ss_port.Write(Encoding.ASCII.GetBytes(AT+CGMI\\\\r)); \\\/\\\/获取手机品牌 读串口: 函数原型:public byte[] Read(int NumBytes) NumBytes 读入缓存数,注意读取来的是字节数组,要实际应用中要进行字符转换 示例: string response = Encoding.ASCII.GetString(ss_port.Read(128)); \\\/\\\/读取128个字节缓存 关闭串口: 函数原型:ss_port.Close() 示例: ss_port.Close(); 整合代码: using System; using System.Runtime.InteropServices; namespace JustinIO { class CommPort { public int PortNum; public int BaudRate; public byte ByteSize; public byte Parity; \\\/\\\/ 0-4=no,odd,even,mark,space public byte StopBits; \\\/\\\/ 0,1,2 = 1, 1.5, 2 public int ReadTimeout; \\\/\\\/comm port win32 file handle private int hComm = -1; public bool Opened = false; \\\/\\\/win32 api constants private const uint GENERIC_READ = 0x80000000; private const uint GENERIC_WRITE = 0x40000000; private const int OPEN_EXISTING = 3; private const int INVALID_HANDLE_VALUE = -1; [StructLayout(LayoutKind.Sequential)] public struct DCB { \\\/\\\/taken from c struct in platform sdk public int DCBlength; \\\/\\\/ sizeof(DCB) public int BaudRate; \\\/\\\/ current baud rate \\\/* these are the c struct bit fields, bit twiddle flag to set public int fBinary; \\\/\\\/ binary mode, no EOF check public int fParity; \\\/\\\/ enable parity checking public int fOutxCtsFlow; \\\/\\\/ CTS output flow control public int fOutxDsrFlow; \\\/\\\/ DSR output flow control public int fDtrControl; \\\/\\\/ DTR flow control type public int fDsrSensitivity; \\\/\\\/ DSR sensitivity public int fTXContinueOnXoff; \\\/\\\/ XOFF continues Tx public int fOutX; \\\/\\\/ XON\\\/XOFF out flow control public int fInX; \\\/\\\/ XON\\\/XOFF in flow control public int fErrorChar; \\\/\\\/ enable error replacement public int fNull; \\\/\\\/ enable null stripping public int fRtsControl; \\\/\\\/ RTS flow control public int fAbortOnError; \\\/\\\/ abort on error public int fDummy2; \\\/\\\/ reserved *\\\/ public uint flags; public ushort wReserved; \\\/\\\/ not currently used public ushort XonLim; \\\/\\\/ transmit XON threshold public ushort XoffLim; \\\/\\\/ transmit XOFF threshold public byte ByteSize; \\\/\\\/ number of bits\\\/byte, 4-8 public byte Parity; \\\/\\\/ 0-4=no,odd,even,mark,space public byte StopBits; \\\/\\\/ 0,1,2 = 1, 1.5, 2 public char XonChar; \\\/\\\/ Tx and Rx XON character public char XoffChar; \\\/\\\/ Tx and Rx XOFF character public char ErrorChar; \\\/\\\/ error replacement character public char EofChar; \\\/\\\/ end of input character public char EvtChar; \\\/\\\/ received event character public ushort wReserved1; \\\/\\\/ reserved; do not use } [StructLayout(LayoutKind.Sequential)] private struct COMMTIMEOUTS { public int ReadIntervalTimeout; public int ReadTotalTimeoutMultiplier; public int ReadTotalTimeoutConstant; public int WriteTotalTimeoutMultiplier; public int WriteTotalTimeoutConstant; } [StructLayout(LayoutKind.Sequential)] private struct OVERLAPPED { public int Internal; public int InternalHigh; public int Offset; public int OffsetHigh; public int hEvent; } [DllImport(kernel32.dll)] private static extern int CreateFile( string lpFileName, \\\/\\\/ file name uint dwDesiredAccess, \\\/\\\/ access mode int dwShareMode, \\\/\\\/ share mode int lpSecurityAttributes, \\\/\\\/ SD int dwCreationDisposition, \\\/\\\/ how to create int dwFlagsAndAttributes, \\\/\\\/ file attributes int hTemplateFile \\\/\\\/ handle to template file ); [DllImport(kernel32.dll)] private static extern bool GetCommState( int hFile, \\\/\\\/ handle to communications device ref DCB lpDCB \\\/\\\/ device-control block ); [DllImport(kernel32.dll)] private static extern bool BuildCommDCB( string lpDef, \\\/\\\/ device-control string ref DCB lpDCB \\\/\\\/ device-control block ); [DllImport(kernel32.dll)] private static extern bool SetCommState( int hFile, \\\/\\\/ handle to communications device ref DCB lpDCB \\\/\\\/ device-control block ); [DllImport(kernel32.dll)] private static extern bool GetCommTimeouts( int hFile, \\\/\\\/ handle to comm device ref COMMTIMEOUTS lpCommTimeouts \\\/\\\/ time-out values ); [DllImport(kernel32.dll)] private static extern bool SetCommTimeouts( int hFile, \\\/\\\/ handle to comm device ref COMMTIMEOUTS lpCommTimeouts \\\/\\\/ time-out values ); [DllImport(kernel32.dll)] private static extern bool ReadFile( int hFile, \\\/\\\/ handle to file byte[] lpBuffer, \\\/\\\/ data buffer int nNumberOfBytesToRead, \\\/\\\/ number of bytes to read ref int lpNumberOfBytesRead, \\\/\\\/ number of bytes read ref OVERLAPPED lpOverlapped \\\/\\\/ overlapped buffer ); [DllImport(kernel32.dll)] private static extern bool WriteFile( int hFile, \\\/\\\/ handle to file byte[] lpBuffer, \\\/\\\/ data buffer int nNumberOfBytesToWrite, \\\/\\\/ number of bytes to write ref int lpNumberOfBytesWritten, \\\/\\\/ number of bytes written ref OVERLAPPED lpOverlapped \\\/\\\/ overlapped buffer ); [DllImport(kernel32.dll)] private static extern bool CloseHandle( int hObject \\\/\\\/ handle to object ); [DllImport(kernel32.dll)] private static extern uint GetLastError(); public void Open() { DCB dcbCommPort = new DCB(); COMMTIMEOUTS ctoCommPort = new COMMTIMEOUTS(); \\\/\\\/ OPEN THE COMM PORT. hComm = CreateFile(COM + PortNum ,GENERIC_READ | GENERIC_WRITE,0, 0,OPEN_EXISTING,0,0); \\\/\\\/ IF THE PORT CANNOT BE OPENED, BAIL OUT. if(hComm == INVALID_HANDLE_VALUE) { throw(new ApplicationException(Comm Port Can Not Be Opened)); } \\\/\\\/ SET THE COMM TIMEOUTS. GetCommTimeouts(hComm,ref ctoCommPort); ctoCommPort.ReadTotalTimeoutConstant = ReadTimeout; ctoCommPort.ReadTotalTimeoutMultiplier = 0; ctoCommPort.WriteTotalTimeoutMultiplier = 0; ctoCommPort.WriteTotalTimeoutConstant = 0; SetCommTimeouts(hComm,ref ctoCommPort); \\\/\\\/ SET BAUD RATE, PARITY, WORD SIZE, AND STOP BITS. GetCommState(hComm, ref dcbCommPort); dcbCommPort.BaudRate=BaudRate; dcbCommPort.flags=0; \\\/\\\/dcb.fBinary=1; dcbCommPort.flags|=1; if (Parity>0) { \\\/\\\/dcb.fParity=1 dcbCommPort.flags|=2; } dcbCommPort.Parity=Parity; dcbCommPort.ByteSize=ByteSize; dcbCommPort.StopBits=StopBits; if (!SetCommState(hComm, ref dcbCommPort)) { \\\/\\\/uint ErrorNum=GetLastError(); throw(new ApplicationException(Comm Port Can Not Be Opened)); } \\\/\\\/unremark to see if setting took correctly \\\/\\\/DCB dcbCommPort2 = new DCB(); \\\/\\\/GetCommState(hComm, ref dcbCommPort2); Opened = true; } public void Close() { if (hComm!=INVALID_HANDLE_VALUE) { CloseHandle(hComm); } } public byte[] Read(int NumBytes) { byte[] BufBytes; byte[] OutBytes; BufBytes = new byte[NumBytes]; if (hComm!=INVALID_HANDLE_VALUE) { OVERLAPPED ovlCommPort = new OVERLAPPED(); int BytesRead=0; ReadFile(hComm,BufBytes,NumBytes,ref BytesRead,ref ovlCommPort); OutBytes = new byte[BytesRead]; Array.Copy(BufBytes,OutBytes,BytesRead); } else { throw(new ApplicationException(Comm Port Not Open)); } return OutBytes; } public void Write(byte[] WriteBytes) { if (hComm!=INVALID_HANDLE_VALUE) { OVERLAPPED ovlCommPort = new OVERLAPPED(); int BytesWritten = 0; WriteFile(hComm,WriteBytes,WriteBytes.Length,ref BytesWritten,ref ovlCommPort); } else { throw(new ApplicationException(Comm Port Not Open)); } } } } } 由于篇幅,以及串口通信涉及内容广泛,我在这里只讲这些。

如何通过串口读取plc的数据

串口编程的学习应以下几个方面入1.就是上位机的编程,使用c或者vc,vb等语言上位机的编程实现,主要就是操作串口,理解通信波特率,,停止位的概念。

如果使用单片机或者c语言开发的话,就会有一定麻烦,如果使用vb或者vc的话,就可以调用微软的串口通信控件进行串口的编程,这样的例子网上很多,你可以下载下来分析一下。

2.下位机的编程,就是plc的编程,主要是要理解通信协议为前提,首先把通信的协议搞定了,才可以进行通信的编程。

例如:的编程有自由口的通信,就必须编写下位机的梯形图程序;的话就简单很多了。

只要理解通信协议就可以编程了。

3.在编程中,好的通信工具很重要:。

可以帮助我们更好的进行串口的调试。

4.和的资料,我比较多,要是需要的话,给你分享一下。

windows下C语言怎么对串口进行读写操作

windows下对串口的操作可以通过WindowsAPI进行,也可以通过Linux下的read什么的直接操作,但是这种情况需要了解电路结构,比较麻烦,第三种有第三方提供的库,但是大多数针对C++,所以可能比较难找到顺手的第三方库.那么,接下来就见要介绍一下串口通信用WindowsAPI通信的方式.我们会发现,在文件名的位置填上comX X表示com口号,超过十的com口号需要另外的书写方式,这里不说了,因为网上一抓一大把,接下来,我们要对串口进行一系列的明确设置,这里就用到了一个结构体DCB结构,是专门用来描述一个com口的工作方式的,由于次结构体有28个成员,非常多,而且大部分的设置都是全世界通用的,所以,我们偷个懒,在打开一个com口之后,建立DCB结构体,接下来调用一个函数GetCommState用这个函数把现在com口的数据都写到DCB里,这样,比较通用的com口设置就已经弄好了,我们一般情况下只需要改一下DCB的波特率就好了,改好后马上用SetCommState把刚改好的结构体再写回去,这样串口就设置好了,现在还有点麻烦,串口设置好了,我们要它干什么呢?废话,读写数据呗,嘟~~~~~~可不能用fwrite和fread因为这个com口句柄不是文件句柄,是内核句柄,要用ReadFile和WriteFile来进行读写,又出麻烦了,我们怎么知道单片机什么时候发数据过来,就算我们知道,计算机什么时候知道啊?所以,一般的情况下,用ReadFile一直在哪检查,又是麻烦,通常情况下,一个com口的ReadFile设置是阻塞函数,影响编程啊!!!!!!怎么办,很简单,你不阻塞吗,打通你呗,我们再建立里一个结构体COMMTIMEOUTS这个结构体描述里一个com口的相关超时设置,我们用GetCommTimeouts把数据读回来,具体的设置方法在网上也有,但是要注意,有一个MAXDWORD用它来设置读间隔超时设置就可以使ReadFile向kbhit()函数一样完全非阻塞了.经过一些列的设置,事实上,现在已经可以通信了,要是有人觉得缓存不舒服,用SetupComm函数来重设缓存大小,对于传输速度比较快的通信,要把缓存设置的大些.

声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。联系xxxxxxxx.com

Copyright©2020 一句话经典语录 www.yiyyy.com 版权所有

友情链接

心理测试 图片大全 壁纸图片