求高手知道c#串口程序,基于控制台的

soochow_wang 2012-05-13 04:25:08
我的串口程序是这样的
using System;
using System.IO.Ports;
using System.Threading;

public class PortChat
{
static bool _continue;
static SerialPort _serialPort;

//基于控制台的应用程序入口,相当于C的main函数的作用
public static void Main()
{
byte[] b = new byte[20];
byte[] bytes = {0x68,0x4C,0x00,0x4C,0x00,0x68,0x80,0x05,0x32,0x00,0x00,0x00,0x05,0x60,0x00,0x00,0x40,0x05,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x16 };
string name;
string message;
StringComparer stringComparer = StringComparer.OrdinalIgnoreCase;//不区分大小写
Thread readThread = new Thread(Read); //创建一个线程 用于监控串口的接收buff是否有新数据到来readThread 为线程句柄

// Create a new SerialPort object with default settings.
_serialPort = new SerialPort(); //用串口类 创建一个串口对象

//设置串口的各个属性,处理方法
// Allow the user to set the appropriate properties.

_serialPort.PortName = "COM4";

_serialPort.BaudRate = 9600;

_serialPort.Parity =System.IO.Ports .Parity.Even;

_serialPort.DataBits = 8;

_serialPort.StopBits = System.IO.Ports.StopBits.One;

_serialPort.Handshake = Handshake.None;


// Set the read/write timeouts

_serialPort.ReadTimeout = 500;
_serialPort.WriteTimeout = 500;

_serialPort.Open(); //打开串口
_continue = true;
readThread.Start(); //启动 读取串口接收数据的线程

Console.WriteLine("Name:"+"串口程序"); //向控制台 打印提示信息 提示用户为串口命令(用户自定的别名)


Console.WriteLine("Type QUIT to exit");

while (_continue) //主处理线程中的死循环,读取用户在控制台输入的字符串并负责串口发送数据/响应用户的退出命令
{
message = Console.ReadLine(); //读取用户在控制台输入的字符串并负责串口发送数据

if (message.Equals("quit")) //如果用户输入了quit测设置变量 使循环退出 即可结束程序
{
_continue = false;
}
else if (stringComparer.Equals("quit", message))
{
_continue = false;
}
else //如果用户输入了普通字符串 则通过串口发送
{
_serialPort.Write( bytes,0,4);
}
}

readThread.Join();
_serialPort.Close();

}

public static void Read() //等待读取串口接收的数据的线程 处理函数
{
while (_continue)
{
try

{
string message = _serialPort.ReadLine(); //如果串口没有接收到数据的话 本线程将一直在这条语句等待

//char message = _serialPort.ReadChar(); //如果串口没有接收到数据的话 本线程将一直在这条语句等待
Console.WriteLine(message); //将接受的信息显示出来
_continue = false;
}
catch (TimeoutException) { }
}
}



这个程序中只能发送数据而读不到数据,不知道是什么原因,还望高手指点!!!
...全文
344 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
leafmao 2012-12-13
  • 打赏
  • 举报
回复
string message = _serialPort.ReadLine(); 会不会是你接收到的数据没有换行符啊?导致读取一直无法完成。ReadLine要一直读取到NewLine值才会停止
混乱之序 2012-12-13
  • 打赏
  • 举报
回复
不是什么高手了 一起学习看看吧

SerialPort ComPort = new SerialPort();
ComPort.DataReceived += new SerialDataReceivedEventHandler(ComPort_DataReceived);
ComPort.ErrorReceived += new SerialErrorReceivedEventHandler(ComPort_ErrorReceived);

        /// <summary>
        /// 接收数据
        /// </summary>
        private void ReceivedData()
        {
            flag = true;
            try
            {
                while (true)
                {
                    Thread.Sleep(100);
                    bytes = ComPort.BytesToRead;
                    if (bytes > 0)
                    {
                        // 创建字节数组
                        buffer = new byte[ComPort.BytesToRead];
                        ComPort.ReceivedBytesThreshold = ComPort.ReadBufferSize;
                        // 读取缓冲区的数据到数组
                        ComPort.Read(buffer, 0, buffer.Length);
                        data = Assist.ByteArrayToHexString(buffer);
                        Console.WriteLine(data + "\t");
                    }
                }
            }
            catch (Exception ex)
            {
                Assist.WritetText(ex.ToString());
            }
            finally
            {
                ComPort.ReceivedBytesThreshold = 1;
            }
        }
缭绕飘渺 2012-10-15
  • 打赏
  • 举报
回复
读写超时稍微设置大点,半秒能读取到什么啊
另外你这个使用serialport类自身的接收事件比较合适
你那个发送没有意义
每次都是发送4位定义好的数组,难道不是发送控制台输入的数据吗
vejacky 2012-10-15
  • 打赏
  • 举报
回复
public static void Read() //等待读取串口接收的数据的线程 处理函数
{
while (_continue)
{

if(_serialPort.BytesToRead!=0)
try
{

char[] ca = new char[30];

while (_serialPort.BytesToRead > 0)
{
Thread.Sleep(30);
_serialPort.Read(ca, 0, ca.Length);

}

message = new string(ca);
Console.WriteLine(message); //将接受的信息显示出来

}
catch (TimeoutException) { }
}
}
doubleu2005 2012-05-15
  • 打赏
  • 举报
回复
如果是这样,你可以在用串口调试工具来接收阿,看看能接收到么?如果也接受不到就证明你的客户端没有反馈信息啊
soochow_wang 2012-05-13
  • 打赏
  • 举报
回复
我用过了 用串口调试工具发字符串,程序中的 message始终是空(null),不知问题出在哪个地方,还望高手再指导下。
doubleu2005 2012-05-13
  • 打赏
  • 举报
回复
能发送数据并不能证明接收端接受到了数据并做了响应,因此建议用串口调试工具跟踪一下

110,534

社区成员

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

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

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