无限期地从 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 的字符集 用于头部和末端 消息。如果它不在密件抄送上 检查,所有传输顺序是 忽略,新的通信模式是 建立。
设备可能会使用与预期Serial.RaedLine()
不匹配的换行符进行响应。从文档默认为LF
,尝试使用CR
甚至CRLF
:
mySerialPort.NewLine = "'r";