无限期地从 COM 端口响应

本文关键字:响应 COM 无限期 | 更新日期: 2023-09-27 17:57:03

>我使用 com port遇到问题,向COM端口发送请求并等待答案。答案是无限的...

static void Main(string[] args)
        {
             byte[] cahs;
             byte[] cash_with_bbc;
            SerialPort mySerialPort = new SerialPort("COM4", 9600, Parity.None, 8, StopBits.One);
            mySerialPort.Open();
            cahs = new byte[] { 0x04, 0x30, 0x02, 0x44, 0x03 };
            cash_with_bbc = new byte[] { 0x04, 0x30, 0x02, 0x44, 0x03, GetBCC(cahs) };
            mySerialPort.Write(cash_with_bbc, 0, cash_with_bbc.Length);
            Thread.Sleep(50);
            Console.WriteLine(mySerialPort.ReadLine());
            while (mySerialPort.BytesToRead > 0)
            {
                Console.WriteLine(mySerialPort.ReadLine());
            }
            mySerialPort.Write(new byte[] {0x06}, 0, 1);
            mySerialPort.Close();
        }
        private static byte GetBCC(byte[] inputStream)
        {
            byte bcc = 0;
            if (inputStream != null && inputStream.Length > 0)
            {
                // Exclude SOH during BCC calculation
                for (int i = 0; i < inputStream.Length; i++)
                {
                    bcc ^= inputStream[i];
                }
            }
            return bcc;
        }

文档

自动取款机由 来自上层设备(主机)的命令 并为此发送响应。什么时候 自动取款机接收命令, 响应应在 接收下一个命令。如果命令 在处理过程中发送 回应,自动取款机不会 响应和响应命令 都。自动取款机也不给 命令之前的任何响应 到。

当消息(命令或响应) 已发送,响应已发送至 指示消息是否已 成功收到。

ACK (0x06):指示该消息 已被接受。 NAK (0x15): 至 指示消息已 已拒绝,并且邮件应 被怨恨。

重新发送一条消息将是 最多尝试 3 次,以防万一 的试验失败,消息将 被取消和新的传输模式 做好准备。除 ACK 之外的所有文本 将被视为 NAK。 (例外情况。EOT (0x04) 是 从上部新发送的字符集 水平,它被公认为EOT 这使得能够为新的做好准备 通信传输模式。

每条消息都有阻止检查 字符 (密件抄送),显示是否 消息正常或异常。 因此,在正确的密件抄送的情况下, 消息称为正常状态 (发送确认)。否则,将发送 NAK 并注意消息失败 传输。EOT 的字符集 用于头部和末端 消息。如果它不在密件抄送上 检查,所有传输顺序是 忽略,新的通信模式是 建立。

无限期地从 COM 端口响应

设备可能会使用与预期Serial.RaedLine()不匹配的换行符进行响应。从文档默认为LF,尝试使用CR甚至CRLF

mySerialPort.NewLine = "'r";