BlueScreen [Ошибка: 0x0000003b / c0000005] Чтение байтов из SerialPort - PullRequest
0 голосов
/ 20 января 2020

У меня здесь есть BarcodeScanner, который говорит, что мне нужно сделать фотографию. Я посылаю команду в виде байта на сканер, жду ответа, а затем пытаюсь его прочитать.

Если я просто использую последовательный монитор и вручную отправляю байты, все работает нормально, я получаю весь jpeg и я счастлив.

если я попробую это в C#, я попытаюсь прочитать байты простым методом (это был метод хлеба с маслом, который я нашел в Google. Normal, который я использовал (serialport.ReadExisting () который вылетает так же).

вот целое событие:

 public void serial_datareceived(object sender, SerialDataReceivedEventArgs e)
        {
            try
            {
                usescanner = (SerialPort)sender;
                if (sender is SerialPort)
                {
                    string port = ((SerialPort)sender).PortName;
                    int count = ((SerialPort)sender).BytesToRead;
                    int returnAscii = 0;
                    string message = "";
                    while (count > 0)
                    {
                        returnAscii = ((SerialPort)sender).ReadByte();
                        message = message + Convert.ToChar(returnAscii);
                        count--;
                    }
                    ScanPort sport = new ScanPort(port, true);
                    scanner.ScannerPort = sport;
                }

            ((SerialPort)sender).Close();
            }
            catch(Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
        }

i Всегда получите 4096 байт для чтения назад, и затем я могу прочитать до примерно 70-90 байт, так что да, моя строка сообщений такая длинная, так что она работает! Просто в середине происходит сбой.

Сканер не является проблемой, так как я работаю со сканером в течение длительного времени. я могу отправлять данные туда и обратно. Также я проверил их на демопрограмме, которую производитель вручил мне, чтобы она работала.

есть идеи? Может быть, я просто не знаю, как читать байты.

спасибо за помощь

1 Ответ

0 голосов
/ 22 января 2020

Вы устанавливаете usescanner в качестве SerialPort, но затем продолжаете вызывать ((SerialPort)sender) по всему коду и не ссылаетесь на usescanner. Какой смысл его устанавливать?

В любом случае, вам нужно просто установить очень простой пример и посмотреть, сможете ли вы получить ошибку. Иногда, когда вы добавляете слишком много сложного кода, трудно найти проблему. Я рекомендую идти просто, чтобы доказать, что это проблема, а не ваш код. Создайте новую форму с помощью кнопки «Открыть» и «Закрыть».

public partial class Form2 : Form
{
    SerialPort sp;

    public Form2()
    {
        InitializeComponent();
    }

    private void buttonOpen_Click(object sender, EventArgs e)
    {
        sp = new SerialPort("COM1", 9600);  //initialize our serial port
        sp.DataReceived += new SerialDataReceivedEventHandler(sp_DataReceived); //create our data received event
        sp.Open(); //Open the port
    }

    void sp_DataReceived(object sender, SerialDataReceivedEventArgs e)
    {
        string Data = sp.ReadExisting();

        Console.Write(Data);
    }

    private void buttonClose_Click(object sender, EventArgs e)
    {
        sp.Close(); //close the port
    }
}
...