gpt4 book ai didi

c# - 串口通讯,读取第9位

转载 作者:可可西里 更新时间:2023-11-01 08:26:33 26 4
gpt4 key购买 nike

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

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

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

最佳答案

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

这不会恰好适用于某种老虎机协议(protocol),对吗?我这样做是为了让你开心。也许它会起作用?

{
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

关于c# - 串口通讯,读取第9位,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8256673/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com