首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >串行通信,读取第9位

串行通信,读取第9位
EN

Stack Overflow用户
提问于 2011-11-24 19:57:52
回答 1查看 4.2K关注 0票数 13

我有一个使用串行通信与外部协议连接的应用程序。

我需要知道是否在它发送给我的每个包上设置了唤醒位(9位),因为通信速率必须低于40ms,并且响应必须在20ms以下发送。该框架封装了从端口读取的位,并且只将8位数据发回给我。此外,由于时序问题,我不能等待奇偶校验错误事件。

我需要知道如何读取9位,或者是否有http://www.wcscnet.com/CdrvLBro.htm的免费替代方案

EN

回答 1

Stack Overflow用户

发布于 2011-11-27 09:17:02

您是否尝试将串行读取函数放入奇偶校验错误事件处理程序中?根据驱动程序的不同,这可能足够快了。

这不会碰巧是针对某个老虎机协议的,对吧?我这么做是为了给你找乐子。也许它能行得通?

代码语言:javascript
运行
复制
{
    public Form1()
    {
        InitializeComponent();
    }

    SerialPort sp;
    private void Form1_Load(object sender, EventArgs e)
    {
        sp = new SerialPort("COM1", 19200, Parity.Space, 8, StopBits.One);
        sp.ParityReplace = 0;
        sp.ErrorReceived += new SerialErrorReceivedEventHandler(sp_SerialErrorReceivedEventHandler);          
        sp.ReadTimeout = 5;
        sp.ReadBufferSize = 256;
        sp.Open();
    }

    object msgsLock = new object();
    Queue<byte[]> msgs = new Queue<byte[]>();
    public void sp_SerialErrorReceivedEventHandler(Object sender, SerialErrorReceivedEventArgs e)
    {
        if (e.EventType == SerialError.RXParity)
        {
           byte[] buffer = new byte[256];            
           try
           {                   
               int cnt = sp.Read(buffer, 0, 256);
               byte[] msg = new byte[cnt];
               Array.Copy(buffer, msg, cnt);
               if (cnt > 0)
               {
                   lock (msgsLock)
                   {
                       msgs.Enqueue(msg);
                   }
               }
           }
           catch
           {
           }              
        }
    }

    private void timer1_Tick(object sender, EventArgs e)
    {
        if (msgs.Count > 0)
        {
            lock (msgsLock)
            {
                listBox1.Items.Insert(0, BitConverter.ToString(msgs.Dequeue()));
            }
        }
    }
}

}

无论如何,为了更好地控制串行端口,我建议使用win32调用来获得您想要的东西。

http://msdn.microsoft.com/en-us/magazine/cc301786.aspx

票数 8
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8256673

复制
相关文章

相似问题

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