Программа зависает при попытке пропустить строки текстового файла через последовательное соединение. Что я делаю неправильно? - PullRequest
0 голосов
/ 20 июня 2019

Я пытаюсь отправить файл команд gcode на 3D-принтер через последовательное соединение.В принтере очень мало буферного пространства, поэтому я должен пропустить по одной строке за раз.Когда я запускаю свою программу, кажется, что она не передает и не выполняет ни одну из команд.

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

    String^ gcodeFile = "C:\\LUPrint\\profiles\\graphene\\temp.gcode";
    try
    {
        // Open file for reading
        StreamReader^ dataIn = File::OpenText(gcodeFile);
        String^ gcodeCommand;

        // Set variable equal to the number of bytes in buffer
        int bytesAvailable = serialPort->BytesToRead;
        while ((gcodeCommand = dataIn->ReadLine()) != nullptr)
        {
            // Holds while buffer is more than half full
            while (serialPort->BytesToRead >= (bytesAvailable / 2))
            {
                // Do nothing
            }

            // Only write line if line isnt empty;
            if (!String::IsNullOrEmpty(gcodeCommand))
            {
                this->serialPort->WriteLine(gcodeCommand);
            }
        }
    }

    catch (Exception^ e)
    {
        if (dynamic_cast<FileNotFoundException^> (e))
            this->textBox1->Text = "File not found";
        else
            this->textBox1->Text = "Problem reading file";
    }

Первые несколько строк файла gcode (прославленного текста) выглядят так:

; generated by Slic3r 1.3.0 on 2019-06-20 at 09:36:32

; external perimeters extrusion width = 0.38mm (0.00mm^3/s)
; perimeters extrusion width = 0.49mm (0.00mm^3/s)
; infill extrusion width = 0.44mm (0.00mm^3/s)
; solid infill extrusion width = 0.49mm (0.00mm^3/s)
; top infill extrusion width = 0.49mm (0.00mm^3/s)
; support material extrusion width = 0.38mm (0.00mm^3/s)

M107
M190 S50 ; set bed temperature and wait for it to be reached
M104 S175 ; set temperature
G28 ; home all axes
G1 Z5 F5000 ; lift nozzle

; Filament gcode

M109 S175 ; set temperature and wait for it to be reached
G21 ; set units to millimeters
G90 ; use absolute coordinates
M82 ; use absolute distances for extrusion
G92 E0
G1 Z0.150 F7800.000
G1 E-2.00000 F2400.00000
G92 E0
G1 X85.206 Y83.418 F7800.000
G1 E2.00000 F2400.00000
G1 F1800
G1 X87.472 Y82.260 E2.04249
G1 X90.000 Y81.858 E2.08525
G1 X110.000 Y81.858 E2.41928

Что-нибудь после ";"является комментарием, остальные являются собственными командами.

Код компилируется без ошибок, но программа замораживается.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...