2005下读串口的问题

vcshox 2006-10-31 11:26:53
使用2005的串口类做实验,程序启动一点时间就直接死调了(没有开始发送数据,也没有开始接收数据)
接收部分:
private void sp_DataReceived(object sender, SerialDataReceivedEventArgs e)
{
try
{
Byte[] buf = new byte[sp.BytesToRead];//容器
int iCount = sp.Read(buf, 0, sp.BytesToRead);//读串口
}
catch (Exception exp)
{}
}
基本上没有做其他的功能。会不会是我用的USB转串口的接头引起的?如果是,要怎么改。
我用串口调试工具,发送的数据是可以接收的。
谢谢!
...全文
204 13 打赏 收藏 举报
写回复
13 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
kyle315 2006-10-31
  • 打赏
  • 举报
回复
你串口端口是否存在,其他一些参数是否设置,还有超时时间,缓冲区大小是否设置?
Knight94 2006-10-31
  • 打赏
  • 举报
回复
to 不是很懂,能不能说详细一点?谢谢

用"e.Data"
GXY2005 2006-10-31
  • 打赏
  • 举报
回复
USB转串口的接头引起的?
-----------------------
這個不影響!
vcshox 2006-10-31
  • 打赏
  • 举报
回复
不是很懂,能不能说详细一点?谢谢
Knight94 2006-10-31
  • 打赏
  • 举报
回复
你可以用事件的SerialDataReceivedEventArgs参数的Data属性来替换试试。
vcshox 2006-10-31
  • 打赏
  • 举报
回复
问题基本解决;在接收数据触发事件中先Thread.Sleep(200)就OK了
vcshox 2006-10-31
  • 打赏
  • 举报
回复
用COM1第一次发送没有问题;第二次就只能收到一半了
vcshox 2006-10-31
  • 打赏
  • 举报
回复
如果不用USB/串口转接头,直接用COM1就接收一点问题没有
楼上的能不能贴几行代码说明一下。新手,见谅
GXY2005 2006-10-31
  • 打赏
  • 举报
回复
用sp_DataReceived只能收到发送的第一个字
----------------------
在接收事件中要這么作
string Receive;
Receive+=收到數據;
因為并不是一次接收完畢!
vcshox 2006-10-31
  • 打赏
  • 举报
回复
现在把READTIMEOUT改为3000,但是用sp_DataReceived只能收到发送的第一个字,例如:2006-10-31 14:30:30;就只能收到2;如果放到TIMER里面用sp.Read(buf,0,buf.Length);就会弹出错误TimeoutException。不知道是怎么回事
兔子-顾问 2006-10-31
  • 打赏
  • 举报
回复
如果死掉。就看看有没有死循环。
色郎中 2006-10-31
  • 打赏
  • 举报
回复


private void button1_Click(object sender, EventArgs e)
{
string st;
byte aa;
byte bb;
byte[] sendbyte ={ 0x40, 0x02, 0x02, 0xbc };
byte[] readbyte = new byte [256];
int readnum;
readnum = 12;
// CommPort testCom = new CommPort();
testCom.PortNum = "COM1";
testCom.Parity = 0;
testCom.StopBits = 1;
testCom.ReadTimeout = 1000;
testCom.BaudRate = 57600;
testCom.ByteSize = 120;
testCom.Open();

testCom.Write(sendbyte);
for (int i = 0; i < 2000; i++)
{ }

readbyte=testCom.Read(readnum);
//aa = readbyte[0];
//bb = readbyte[1];

for (int i = 0; i < 2000; i++)
{ }
st=null;
for (int ii = 0; ii < readbyte[1]+2; ii++)
{
st += string.Format("{0:X2} ",readbyte[ii]);
}
textBox1.Text =st;//textBox1.Text = readbyte[0].ToString();
// testCom.Close();


}

private void button2_Click(object sender, EventArgs e)
{
string st;
int readnum;
readnum = 12;
byte[] sendbyte ={ 0x40, 0x02, 0x02, 0xbc };
byte[] readbyte = new byte[256];


testCom.Write(sendbyte);
for (int i = 0; i < 2000; i++)
{ }

readbyte = testCom.Read(readnum);
//aa = readbyte[0];
//bb = readbyte[1];

for (int i = 0; i < 2000; i++)
{ }
st = null;
for (int ii = 0; ii < readbyte[1] + 2; ii++)
{
st += string.Format("{0:X2} ", readbyte[ii]);
}
textBox1.Text = st;//textBox1.Text = readbyte[0].ToString();
}

private void button3_Click(object sender, EventArgs e)
{
testCom.Close();
}


}


我做过的实验 你可以参考下
vcshox 2006-10-31
  • 打赏
  • 举报
回复
没有发现e.Data;还需要设置什么参数?
加了个sp.ReadTimeOut=400;
看了一下,抛出了TIMEOUT异常,要怎么解决?
相关推荐
发帖
C#

10.8w+

社区成员

.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
帖子事件
创建了帖子
2006-10-31 11:26
社区公告

让您成为最强悍的C#开发者