C#串口通讯问题

xy_wolf 2010-03-30 10:19:26
private void Form1_Load(object sender, EventArgs e)
{
MyPort = new SerialPort();
MyPort.PortName = "COM3";
MyPort.BaudRate = 9600;
MyPort.DataBits = 8;
MyPort.StopBits = System.IO.Ports.StopBits.One;
MyPort.Parity = System.IO.Ports.Parity.None;
}

private void button1_Click(object sender, EventArgs e)
{
if (MyPort.IsOpen != true)
{
MyPort.Open();
}

byte[] _write = new byte[] { 0x00, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf6, 0xa0 };
MyPort.Write(_write, 0, 12);

}
上面是是我写的代码:
下面是串口调试精灵:


不知道为什么我发下去后下位机不能识别,但是用串口调试精灵发送后下位可以识别。
下位机在收到第一个字节后启动了一个timer若100ms没有收到第二个字节讲清空。
麻烦大家给看看
...全文
69 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
yingzhilian2008 2010-03-30
  • 打赏
  • 举报
回复
UPP
兔子-顾问 2010-03-30
  • 打赏
  • 举报
回复
还是和协议有关么。不过一般都是3线串口,用不到rts的。
yilaozhuang 2010-03-30
  • 打赏
  • 举报
回复
在你的下位机里面读一下收到的数据,看看到底是什么数据,然后跟发的数据对照一下,很容易找到问题的
xy_wolf 2010-03-30
  • 打赏
  • 举报
回复
RtsEnable = true就好了
兔子-顾问 2010-03-30
  • 打赏
  • 举报
回复
串口配置正确的话,应该是对的。因为上位机和下位机通讯时依赖win的串口驱动的,串口驱动被createfile,writefile,readfile,setcommevent,setcommmask来调用,.net的serialport是对api的封装,sscomm32.exe直接用了api而已。

所以,你要确认的
1.你串口设置真的没错
2.你下位机没问题
xy_wolf 2010-03-30
  • 打赏
  • 举报
回复
设置完ReceivedBytesThreshold=1还是不行
我上位机只给下位机发送命令若下位机执行成功下位机返回OK
我自己写的程序发下去下位机能收到但是没有执行。。。
用串口调试工具就发下去就可以


doubleu2005 2010-03-30
  • 打赏
  • 举报
回复
可以buf = buf + serialPort1.ReadLine().ToString();一次把串口的返回值读出来
doubleu2005 2010-03-30
  • 打赏
  • 举报
回复
设置ReceivedBytesThreshold=1
xy_wolf 2010-03-30
  • 打赏
  • 举报
回复
郁闷图片看不见
串口调试精灵里头具体配置如下
串口号:COM3
波特率:9600
数据位:8
停止位:1
效验位:none
流控制:none

110,566

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

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

试试用AI创作助手写篇文章吧