日期:2014-05-17  浏览次数:20803 次

C# 串口通讯问题,大家帮忙解决一下@@@
是这样的 我在网上弄了一个代码,串口通讯的,出现的问题在于 这个串口通讯的代码 不好用。

如何不好用法

01 单独运行它 ,发送不出去数据。
02 当我开启串口测试助手之后,再把串口测试助手关闭,在运行就可以用

03 我问了 好多人,说 可能是初始化的问题,或者是串口到底有没有打开。


大家能帮忙解决一下这个问题吗?

------解决方案--------------------
1.检查COM口号对不对
2.检查参数,停止位、校验位、数据位
3.降低波特率,比如9600、4800
4.延长Timeout,或者取消Timeout再试
------解决方案--------------------
建议楼主检查一下CardCom和this.Open()的关系,感觉你对前者进行了参数设置,但是Open的时候是否就是调用了前者呢?因为没看到你的Open()时有什么参数?
------解决方案--------------------
补充一下:也许把下面这里改一下试试
if (this.OpenCom())
改为
if (cardCom.OpenCom())

------解决方案--------------------
using System;
using System.IO.Ports;

namespace WinTempApp
{
public class PortData
{
public event PortDataReceivedEventHandle Received;
public event SerialErrorReceivedEventHandler Error; 
public SerialPort port;
public bool ReceiveEventFlag = false; //接收事件是否有效 false表示有效
public bool OpenPortLost;
private string logCaption = "PortData";
public PortData(string sPortName, int baudrate,Parity parity,StopBits stopbit)
{
try
{
port = new SerialPort(sPortName, baudrate, parity, 8, stopbit);
port.RtsEnable = true;
port.ReadTimeout = 3000;
port.DataReceived += DataReceived;
port.ErrorReceived += ErrorEvent;
OpenPortLost = false;
}
catch (Exception ex) 
{
OpenPortLost = true;
LogFile.LogMessage(String.Format("{0}:{1}", logCaption, ex.Message), AppEnum.Exception.ToString());
}

}

~PortData()
{
Close();
}
/// <summary>
/// COM端口打开
/// </summary>
public void Open()
{
if (!port.IsOpen)
{
port.Open();
}
}

public void Close()
{
try
{
if (port.IsOpen)
{
port.Close();
}
}
catch (Exception ex)
{
LogFile.LogMessage(String.Format("{0}:{1}", logCaption, ex.Message), AppEnum.Exception.ToString());
}

}
//数据发送
public void SendData(byte[] data)
{
try
{
if (port.IsOpen)
{
port.Write(data, 0, data.Length);
}
}
catch (Exception ex) 
{
LogFile.LogMessage(String.Format("{0}:{1}", logCaption, ex.Message), AppEnum.Exception.ToString());
}
}
public void SendData(byte[] data,int offset,int count)
{
try
{
if (port.IsOpen)
{
port.Write(data, offset, count);
}
}
catch (Exception ex)
{
LogFile.LogMessage(String.Format("{0}:{1}", logCaption, ex.Message), AppEnum.Exception.ToString());
}

}


//发送命令
public int SendCommand(byte[] SendData, ref byte[] ReceiveData,int Overtime)
{
try