兄弟们啊,搞一个串口通讯,老出现操作已超时提示。一下是代码//初始化串口
SerialPort TestSerialPort = new SerialPort();
string serialportpar = "com3,57600,0,8,1";
string[] comPortParams = comParams.Split(new char[] { ',' }, 5);
TestSerialPort .PortName = comPortParams[0];
TestSerialPort .BaudRate = Convert.ToInt32(comPortParams[1]);
TestSerialPort .Parity = Parity.None;
TestSerialPort .DataBits = Convert.ToInt32(comPortParams[3]);
TestSerialPort .ReadTimeout = 500;
TestSerialPort .WriteTimeout = 500;
TestSerialPort .ReadBufferSize = 2000;
TestSerialPort .WriteBufferSize = 2000; //发送给串口的初始byte数组
byte[] firstsendBuf ={ 0x7E,0x0A,0x01, 0xA3, 0x00, 0x00, 0x7E };
string aa = "";
//开启端口
TestSerialPort.Open();
Thread.Sleep(100);
try
{
TestSerialPort.Write(firstsendBuf, 0, firstsendBuf.Length);
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
Thread.Sleep(100);
//接收缓存。这里只接收一个byte
byte[] receiveBuf =new byte[1];
Thread.Sleep(100);
while (true)
{
if (int.Parse(receiveBuf[0].ToString()) > 0)
break;
else
TestSerialPort.Read(receiveBuf, 0, 1);}
就是红色部分报错,请做过串口通信的兄弟们帮个忙
SerialPort TestSerialPort = new SerialPort();
string serialportpar = "com3,57600,0,8,1";
string[] comPortParams = comParams.Split(new char[] { ',' }, 5);
TestSerialPort .PortName = comPortParams[0];
TestSerialPort .BaudRate = Convert.ToInt32(comPortParams[1]);
TestSerialPort .Parity = Parity.None;
TestSerialPort .DataBits = Convert.ToInt32(comPortParams[3]);
TestSerialPort .ReadTimeout = 500;
TestSerialPort .WriteTimeout = 500;
TestSerialPort .ReadBufferSize = 2000;
TestSerialPort .WriteBufferSize = 2000; //发送给串口的初始byte数组
byte[] firstsendBuf ={ 0x7E,0x0A,0x01, 0xA3, 0x00, 0x00, 0x7E };
string aa = "";
//开启端口
TestSerialPort.Open();
Thread.Sleep(100);
try
{
TestSerialPort.Write(firstsendBuf, 0, firstsendBuf.Length);
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
Thread.Sleep(100);
//接收缓存。这里只接收一个byte
byte[] receiveBuf =new byte[1];
Thread.Sleep(100);
while (true)
{
if (int.Parse(receiveBuf[0].ToString()) > 0)
break;
else
TestSerialPort.Read(receiveBuf, 0, 1);}
就是红色部分报错,请做过串口通信的兄弟们帮个忙
解决方案 »
- 娃哈哈,看我写的五子棋程序,,。。。。。娃哈哈
- C# 导出 dbf文件
- 求教关于SQL触发器的最基本的语法规则(VS200C#语言)的问题!
- 通过http下载下来的文件,如何让文件的修改日期和服务器上的保持一致?
- 请问有什么办法可以copy整个目录,除了用SHFileOpera
- C# .net 程序员应具备啥条件,才可胜任工作
- RichTextBox问题,给个思路,在线等......
- 请帮忙
- 请问用c#如何实现像csdn论坛助手那样保存用户名和密码就可以直接登陆到论坛或者其他需要验证的网页的功能
- 提供C#制作的论坛下载,并且提供免费asp.net空间申请.
- FusionChartsFree
- 关于 richtextbox 设置字体颜色的问题
狂汗啊,就是这句话报错!提示操作已超时,我代码中有错误么各位?
{
if(TestSerialPort.BytesToRead==0)
{
Application.DoEvents();
continue;
}
if (int.Parse(receiveBuf[0].ToString()) > 0)
{
break;
}
else
{
receiveBuf = (byte)TestSerialPort.ReadByte();
}
}
但是用逍遥的码,一直在while循环里,意思就是读不到串口的数据,
另外,波特率是57600没错,别的参数也都是正确的,我这个代码是别人很早前做的,发和读数据都没问题,可现在要更改下读数据方式,所以我必须重写,
while ((System.Environment.TickCount - tickCount) < 1000)
{
System.Threading.Thread.Sleep(30);
if (comPort.BytesToRead > 0)
{
while (comPort.BytesToRead > 0)
{
System.Threading.Thread.Sleep(30);
byte[] RcvBytes = new byte[comPort.BytesToRead];
comPort.Read(RcvBytes, 0, RcvBytes.Length);
System.Threading.Thread.Sleep(50);
}
break;
}
}试下这段代码