C# 串口读取问题!!!!

问题描述

我用serialPort做的串口读写,       stringsend="Y0122570";serialPort1.BaudRate=115200;serialPort1.PortName="COM1";serialPort1.Open();serialPort1.Write(checksum_compute(send)+(char)13);发送完checksum_compute(send)+(char)13之后,就可以下指令来读设备的返回数据了,请大侠们扔两个读串口的代码。谢谢了。

解决方案

解决方案二:
C#串口通信编程类这是从网上down下来的一个串口通信类,发现close函数忘记了设置Opened属性为false还有后面string转byte[]和byte[]转string的函数有错误,索性删掉了修改后的串口通信类如下:下一篇将把我的测试程序主程序部分全部代码贴出来可以坚强勇敢的用来实现串口通信。usingSystem;usingSystem.Runtime.InteropServices;namespaceBusApp{///<summary>//////</summary>publicclassmycom{publicmycom(){////TODO:在此处添加构造函数逻辑//}publicintPortNum;//1,2,3,4publicintBaudRate;//1200,2400,4800,9600publicbyteByteSize;//8bitspublicbyteParity;//0-4=no,odd,even,mark,spacepublicbyteStopBits;//0,1,2=1,1.5,2publicintReadTimeout;//10//commportwin32filehandleprivateinthComm=-1;publicboolOpened=false;//win32apiconstantsprivateconstuintGENERIC_READ=0x80000000;privateconstuintGENERIC_WRITE=0x40000000;privateconstintOPEN_EXISTING=3;privateconstintINVALID_HANDLE_VALUE=-1;[StructLayout(LayoutKind.Sequential)]privatestructDCB{//takenfromcstructinplatformsdkpublicintDCBlength;//sizeof(DCB)publicintBaudRate;//currentbaudratepublicintfBinary;//binarymode,noEOFcheckpublicintfParity;//enableparitycheckingpublicintfOutxCtsFlow;//CTSoutputflowcontrolpublicintfOutxDsrFlow;//DSRoutputflowcontrolpublicintfDtrControl;//DTRflowcontroltypepublicintfDsrSensitivity;//DSRsensitivitypublicintfTXContinueOnXoff;//XOFFcontinuesTxpublicintfOutX;//XON/XOFFoutflowcontrolpublicintfInX;//XON/XOFFinflowcontrolpublicintfErrorChar;//enableerrorreplacementpublicintfNull;//enablenullstrippingpublicintfRtsControl;//RTSflowcontrolpublicintfAbortOnError;//abortonerrorpublicintfDummy2;//reservedpublicushortwReserved;//notcurrentlyusedpublicushortXonLim;//transmitXONthresholdpublicushortXoffLim;//transmitXOFFthresholdpublicbyteByteSize;//numberofbits/byte,4-8publicbyteParity;//0-4=no,odd,even,mark,spacepublicbyteStopBits;//0,1,2=1,1.5,2publiccharXonChar;//TxandRxXONcharacterpubliccharXoffChar;//TxandRxXOFFcharacterpubliccharErrorChar;//errorreplacementcharacterpubliccharEofChar;//endofinputcharacterpubliccharEvtChar;//receivedeventcharacterpublicushortwReserved1;//reserved;donotuse}[StructLayout(LayoutKind.Sequential)]privatestructCOMMTIMEOUTS{publicintReadIntervalTimeout;publicintReadTotalTimeoutMultiplier;publicintReadTotalTimeoutConstant;publicintWriteTotalTimeoutMultiplier;publicintWriteTotalTimeoutConstant;}[StructLayout(LayoutKind.Sequential)]privatestructOVERLAPPED{publicintInternal;publicintInternalHigh;publicintOffset;publicintOffsetHigh;publicinthEvent;}[DllImport("kernel32.dll")]privatestaticexternintCreateFile(stringlpFileName,//filenameuintdwDesiredAccess,//accessmodeintdwShareMode,//sharemodeintlpSecurityAttributes,//SDintdwCreationDisposition,//howtocreateintdwFlagsAndAttributes,//fileattributesinthTemplateFile//handletotemplatefile);[DllImport("kernel32.dll")]privatestaticexternboolGetCommState(inthFile,//handletocommunicationsdevicerefDCBlpDCB//device-controlblock);[DllImport("kernel32.dll")]privatestaticexternboolBuildCommDCB(stringlpDef,//device-controlstringrefDCBlpDCB//device-controlblock);[DllImport("kernel32.dll")]privatestaticexternboolSetCommState(inthFile,//handletocommunicationsdevicerefDCBlpDCB//device-controlblock);[DllImport("kernel32.dll")]privatestaticexternboolGetCommTimeouts(inthFile,//handletocommdevicerefCOMMTIMEOUTSlpCommTimeouts//time-outvalues);[DllImport("kernel32.dll")]privatestaticexternboolSetCommTimeouts(inthFile,//handletocommdevicerefCOMMTIMEOUTSlpCommTimeouts//time-outvalues);[DllImport("kernel32.dll")]privatestaticexternboolReadFile(inthFile,//handletofilebyte[]lpBuffer,//databufferintnNumberOfBytesToRead,//numberofbytestoreadrefintlpNumberOfBytesRead,//numberofbytesreadrefOVERLAPPEDlpOverlapped//overlappedbuffer);[DllImport("kernel32.dll")]privatestaticexternboolWriteFile(inthFile,//handletofilebyte[]lpBuffer,//databufferintnNumberOfBytesToWrite,//numberofbytestowriterefintlpNumberOfBytesWritten,//numberofbyteswrittenrefOVERLAPPEDlpOverlapped//overlappedbuffer);[DllImport("kernel32.dll")]privatestaticexternboolCloseHandle(inthObject//handletoobject);publicvoidOpen(){DCBdcbCommPort=newDCB();COMMTIMEOUTSctoCommPort=newCOMMTIMEOUTS();//OPENTHECOMMPORT.hComm=CreateFile("COM"+PortNum,GENERIC_READ|GENERIC_WRITE,0,0,OPEN_EXISTING,0,0);//IFTHEPORTCANNOTBEOPENED,BAILOUT.if(hComm==INVALID_HANDLE_VALUE){throw(newApplicationException("CommPortCanNotBeOpened"));}//SETTHECOMMTIMEOUTS.GetCommTimeouts(hComm,refctoCommPort);ctoCommPort.ReadTotalTimeoutConstant=ReadTimeout;ctoCommPort.ReadTotalTimeoutMultiplier=0;ctoCommPort.WriteTotalTimeoutMultiplier=0;ctoCommPort.WriteTotalTimeoutConstant=0;SetCommTimeouts(hComm,refctoCommPort);//SETBAUDRATE,PARITY,WORDSIZE,ANDSTOPBITS.//THEREAREOTHERWAYSOFDOINGSETTINGTHESEBUTTHISISTHEEASIEST.//IFYOUWANTTOLATERADDCODEFOROTHERBAUDRATES,REMEMBER//THATTHEARGUMENTFORBuildCommDCBMUSTBEAPOINTERTOASTRING.//ALSONOTETHATBuildCommDCB()DEFAULTSTONOHANDSHAKING.dcbCommPort.DCBlength=Marshal.SizeOf(dcbCommPort);GetCommState(hComm,refdcbCommPort);dcbCommPort.BaudRate=BaudRate;dcbCommPort.Parity=Parity;dcbCommPort.ByteSize=ByteSize;dcbCommPort.StopBits=StopBits;SetCommState(hComm,refdcbCommPort);Opened=true;}publicvoidClose(){if(hComm!=INVALID_HANDLE_VALUE){CloseHandle(hComm);Opened=false;}}publicbyte[]Read(intNumBytes){byte[]BufBytes;byte[]OutBytes;BufBytes=newbyte[NumBytes];if(hComm!=INVALID_HANDLE_VALUE){OVERLAPPEDovlCommPort=newOVERLAPPED();intBytesRead=0;ReadFile(hComm,BufBytes,NumBytes,refBytesRead,refovlCommPort);OutBytes=newbyte[BytesRead];Array.Copy(BufBytes,OutBytes,BytesRead);}else{throw(newApplicationException("CommPortNotOpen"));}returnOutBytes;}publicintWrite(byte[]WriteBytes){intBytesWritten=0;if(hComm!=INVALID_HANDLE_VALUE){OVERLAPPEDovlCommPort=newOVERLAPPED();WriteFile(hComm,WriteBytes,WriteBytes.Length,refBytesWritten,refovlCommPort);}else{throw(newApplicationException("CommPortNotOpen"));}returnBytesWritten;}}}

时间: 2024-11-10 12:20:33

C# 串口读取问题!!!!的相关文章

串口通信 读取报错-自编程序从串口读取数据,会出现串口错误,超级终端能读取成功

问题描述 自编程序从串口读取数据,会出现串口错误,超级终端能读取成功 我一个程序从COM1口读取数据,出现串口错误,我用电脑自带超级终端读取的话是可以成功读取我另一边发送的数据的,也稳定,然后我再启动我的程序进行读取,这时候也能成功读取,当我再重新启动程序的时候却又报错了,求大神解答 解决方案 我用PCI外接的串口就没有这种问题,之前一直就是用的COM1,也是好的,用了几个月忽然出现了这种问题

vb.net 串口读取操作造成死机

问题描述 vb.net 串口读取操作造成死机 VB.net串口操作,timer定时发送,程序运行一段时间之后,界面死机,程序停止在serialport.read 这一行,这段程序在datareceived接收事件中,并且已设置ReceivedBytesThreshold属性,readtimeout 设置再大(1000.2000.3000)都不管用,如何处理这个错误让串口继续工作? 解决方案 可试试创建一个线程,和对应的进度事件代理和错误信息事件代理,长时间的io操作不应该和ui处于相同的线程,那

跪求帮忙!-c# 485串口 读取 继电保护器电流

问题描述 c# 485串口 读取 继电保护器电流 现在项目需要读取"继电保护器"里的电流.电压.电功等信息, 采样c#串口读取(协议是103规约),谁做过相应的例子, 解决方案 从串口读取数据,然后根据协议来解析就行了, 解决方案二: public partial class Form1 : Form { private System.IO.Ports.SerialPort serialPort1; string InputData = String.Empty; delegate v

串口读取数据如何以表格形式实时显示

问题描述 各位,本人纯菜鸟,刚接触C#没几天,想要用串口读取下位机数据并在上位机上以表格形式显示,类似下图所示的.在网上看了看,有的说是要用datagridview还要连接数据库,但是不太明确实施的步骤.请教各位指点一下思路,比如应该用什么控件,先干什么,后干什么等等,先谢过. 解决方案 解决方案二:1.连接串口采集数据2.将采集到的数据整理存储到datatable3.将datatable绑定到datagridview解决方案三:首先你得会串口最简单的也要通过DataReceived把需要的数据

怎么实现利用C#编上位机程序,然后通过串口读取单片机的温度数据,并且保存

问题描述 然后利用ACESS数据库存储这些温度数据...大神,求助啊,真心没学过C#,第一步串口接收并保存数据就不会,求大神指点,有代码最好了,我是个菜鸟,,求帮助...... 解决方案 解决方案二:你到不如外包出去.百度谷歌上搜C#串口编程解决了你第一个问题,至于Access存储这些数据,再去看看Ado.Net.自己做就是时间的问题了.解决方案三:类似于这个么?解决方案四:对你得跟下位机确定数据传输规范(也就是高大上的说法协议),然后上位机持续监听,处理数据就ok了解决方案五:引用2楼qq_2

c# 串口读取-读取串口数据添加了一个TimeoutException异常处理方法,出现了dll异常

问题描述 读取串口数据添加了一个TimeoutException异常处理方法,出现了dll异常 报错信息: 在 System.TimeoutException中第一次偶然出现的"System.dll"类型异常. 之后程序就不在接收数据了,也不出现程序报错,必须重新启动程序,才能继续接收数据. 错误一般会在程序运行1天之后出现假死现象.是不是因为我只是把错误信息记下来了,并没有进行错误处理?我的逻辑是,错误之后,丢弃这一组数据,然后重新进行数据接收. 跪求,本人无法解觉了现在. 相关代码

usb转串口-安卓读取串口数据时read阻塞,程序不能向下进行

问题描述 安卓读取串口数据时read阻塞,程序不能向下进行 用安卓 通过串口读取单片机发来的数据时,用inputstream.read()去读取数据时会发生阻塞,程序就卡在read()函数不能往下运行了,我是用的网上来源的serial_port_api,,,本人新手做项目卡在这了,求大神指导一下!!感谢

485串口-串口发送读取继电保护器

问题描述 串口发送读取继电保护器 现在项目需要读取"继电保护器"里的电流.电压.电功等信息, 采样c#串口读取(协议是103规约),谁做过相应的例子, 解决方案 串口发送 解决方案二: 串口发送

C#串口数据读取速度很慢,但串口调试助手工具数据变化很快,怎么解决啊?

问题描述 我用FPGA向C#上位机串口实时连续发送数据,并在testbox控件中显示出来,当所发数据内容改变时,上位机串口数据的显示会维持原来的数一段时间很慢才变化,而利用串口调试助手可以看到,串口接收到的数据确实很快就变化了,不明白C#的串口为什么会那么长时间才变化.急求各位大神大牛帮忙解决,小弟学生党一枚,初学C#,缺少经验,也请大家帮帮忙,跪谢了!! 解决方案 解决方案二:第一,两个是不是采用的相同波特率?其次,你的textbox显示变更是在发送成功前还是成功后?解决方案三:private