首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >串行端口写入和读取事件未订阅/未读取串行端口

串行端口写入和读取事件未订阅/未读取串行端口
EN

Stack Overflow用户
提问于 2014-09-08 09:50:32
回答 1查看 271关注 0票数 1

我一直在尝试使用串行端口COM4发送和读取命令,该端口已经使用此代码进行了配置,它连接到一个纸币接收器设备

我正在使用一个事件来暂停无论何时设备发送答案然而,当我发现它从来没有真正到达事件或订阅它,我已经阅读了整整一周如何解决这个问题,但没有运气。

即使我碰巧将“读端口”行放在“写端口行”之后,并且程序到达

代码语言:javascript
复制
 ptSerial.Read(RxMensaje, 0, 5);

我必须停止这个程序,希望这里有人能帮我。

代码语言:javascript
复制
public partial class Form1 : Form
{
  public SerialDataReceivedEventHandler DataReceivedDelegate;


    public Form1()
    {
        InitializeComponent();
    }

    private  void DataReceivedHandler(object sender, SerialDataReceivedEventArgs e)
    {
        DataReceivedDelegate = new SerialDataReceivedEventHandler(DataReceivedHandler);
        //SerialPort sp = (SerialPort)sender;
        //string indata = sp.ReadExisting();

        byte[] RxMensaje = new byte[5];
        ptSerial.Read(RxMensaje, 0, 5);
        rtbDevice.Text = Encoding.ASCII.GetString(RxMensaje, 0, 5);

      //  rtbDevice.Text = indata;
    }

    private void btnOpen_Click(object sender, EventArgs e)
    {
        try
        {
            Open(sender, e);
        }
        catch (Exception ex)
        {
            lblSalida.Text = ex.Message;
        }
    }

    private void Open(object sender, EventArgs e)
    {
        ptSerial.DataReceived += new SerialDataReceivedEventHandler(DataReceivedHandler);
        ptSerial.Open();
        lblSalida.Text = "Puerto COM4 Abierto";
    }

   private void btnSend_Click(object sender, EventArgs e)
    {
        if (ptSerial.IsOpen)
        {
            byte[] TxMensaje = new byte[5] { 0x02, 0x00, 0x01, 0xFE, 0xFF }; //CCtalk  
            ptSerial.Write(TxMensaje, 0, 5);

            rtbHost.Text = "2 0 1 254 255 Enviado";

            //byte[] RxMensaje = new byte[5];
            //ptSerial.Read(RxMensaje, 0, 5);
            //rtbDevice.Text = Encoding.ASCII.GetString(RxMensaje, 0, 5);


            ptSerial.Close();
            lblSalida.Text = "Bytes Enviados Pto Cerrado";
        }
        else
        {
            lblSalida.Text = "Puerto Cerrado";
        }
    }

    private void btnCerrar_Click(object sender, EventArgs e)
    {
        if (ptSerial.IsOpen)
        {
            ptSerial.Close();
            lblSalida.Text = "Puerto COM4 Cerrado";
        }
        else
        {
            lblSalida.Text = "No ocurrio nada :(";
        }
    }
}
EN

回答 1

Stack Overflow用户

发布于 2014-09-08 10:01:01

我没有看到串行端口的完整定义(例如,在哪里绑定到"COM4")。非常重要的是要正确设置波特率,否则设备将无法与您的应用程序正确同步,也不会产生任何事件。

请参阅http://msdn.microsoft.com/en-us/library/system.io.ports.serialport(v=vs.110).aspx

代码语言:javascript
复制
_serialPort = new SerialPort(); // Allow the user to set the appropriate properties.
_serialPort.PortName = SetPortName(_serialPort.PortName);
_serialPort.BaudRate = SetPortBaudRate(_serialPort.BaudRate);
_serialPort.Parity = SetPortParity(_serialPort.Parity);
_serialPort.DataBits = SetPortDataBits(_serialPort.DataBits);
_serialPort.StopBits = SetPortStopBits(_serialPort.StopBits);
_serialPort.Handshake = SetPortHandshake(_serialPort.Handshake); 
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25716449

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档