Я пытаюсь отправить файл команд 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
Что-нибудь после ";"является комментарием, остальные являются собственными командами.
Код компилируется без ошибок, но программа замораживается.