Я работаю с com-портом, столкнулся с проблемой, отправляю запрос на 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, который позволяет быть готовым к новому режиму передачи связи.)
Каждое сообщение имеет символ проверки блока (BCC),который показывает, является ли сообщение нормальным или ненормальным.Следовательно, в случае правильного BCC сообщение известно как нормальное состояние (отправка ACK).В противном случае NAK отправляется и замечает сбой передачи сообщения.Набор символов EOT используется в заголовке и конце сообщения.Если он не находится на проверке BCC, весь порядок передачи игнорируется и устанавливается новый режим связи.