Corel Draw подключаем к китайскому граверу GRBL

Лазерные, плазменные станки, газо- и водорезки, плоттеры.
AndrePRM
Новичок
Сообщения: 13
Зарегистрирован: 28 окт 2018, 15:40
Репутация: 3
Настоящее имя: Андрей
Откуда: Пермь
Контактная информация:

Corel Draw подключаем к китайскому граверу GRBL

Сообщение AndrePRM »

Делают подключение с использованием непрерывного опроса буфера.(в бесконечном цикле)

Код: Выделить всё

buffer = buffer & UserForm.MSComm.Input
                If InStr(buffer, "Grbl") Or InStr(buffer, "{0/0}ok" & vbCrLf) Then
                   PortCom = True  'порт ответил Grbl
                    Exit Function
                End If
Но минус такого подхода , что пока выполняется программа (крутится в цикле), нельзя нажать
на другие кнопки "пауза" , "стоп" и тд.

Пример с использованием события comEvReceive.

Плюс в том , что вы отправили команду GRBL и больше ничего не делаете , ждете
когда произойдет событие comEvReceive , которое означает , что в буфере есть ответ.

Итак приступим.
Добавляем ссылку на "Comm Control" в Tool -> References.
Ссылки.JPG (4798 просмотров) <a class='original' href='./download/file.php?id=150510&mode=view' target=_blank>Загрузить оригинал (39.41 КБ)</a>
Добавляем на форму "MSComm"
Добавляем кнопку и пишем обработку для этой кнопки.
Сами ручками указываете номер порта (пока) , к которому подключен GRBL

Код: Выделить всё

Private Sub CommandButtonConnect_Click()
         MSComm.RThreshold = 1 ' Разрешаем события  comEvReceive , которые происходят когда в буфере появляется ответ от GRBL
         Port_ = 4 '  Номер порта
         UserForm.MSComm.CommPort = Port_
         UserForm.MSComm.Settings = "115200,N,8,1"
         UserForm.MSComm.InputLen = 0
         UserForm.MSComm.PortOpen = True
End Sub
Создаете обработку события.

Код: Выделить всё

Dim GRBLAnswerText As String  ' Здесь будет ответ от  GRBL

Private Sub MSComm_OnComm()
    Select Case MSComm.CommEvent
        Case comEvReceive   ' Событие которое происходит когда в буфере находиться полный ответ GRBL
              GRBLAnswerText = MSComm.Input
                If InStr(GRBLAnswerText, "Grbl") Then
                   UserForm.Caption = "Подключили GRBL"
                Else
                    TextOut.Text = TextOut.Text & GRBLAnswerText ' TextOut.Text текстовое поле куда будет выводиться ответ от GRBL
                    TextOut.SetFocus
                    GRBLAnswerText = ""
                End If
    End Select
End Sub
Отправка команды на GRBL

Код: Выделить всё

 MSComm.Output = "G0 x19.12 y251.36 z0" & Chr(13)
Во вложении открытый пример .
В нем нет проверок от "падения", а только демонстрация подключения.
CorelDrawGRBLmini.rar
(16.27 КБ) 341 скачивание

Как определить номер порта к которому подключен GRBL.

Есть 255 потенциальных портов к которым можно подключится.
В цикле от 1 до 255 , передаем функции GetDefaultCommConfig номера портов.
В ответ получаем 0 или 1 .
0 - к порту ничего не подключено
1 - в порт включен какое то устройство.

По завершении цикла вы будете иметь номера портов (пример 1, 4 ,10) ,к которым что то подключено.
По очереди,к каждому порту (1,4,10) пытаемся подключиться и ждем 1-3 сек ответа "Grbl 1.1g ['$' for help]"
Если порт не ответил в течении 1-3 сек , переходим к следующему порту.
У меня , гарантированно (почти всегда) ответ получается через 1,5 сек.
Если у вас не успевает ответить , увеличте время.
Во вложенном выше примере , вы вручную (в коде ) указываете номер порта , но перед подключением
есть проверка функцией GetDefaultCommConfig , на наличие устройства в этом порту.

Вот еще пример , но он сильно захламлен интерфейсом.
Но в нем можно отправлять готовый g code на станок.БЕЗ парсинга вектора.
CorelDrawGRBL.rar
(18.89 КБ) 412 скачиваний
Теперь вы знаете как из Corel Draw или любой другой программы которая поддерживает vba (хоть excel)
подключиться к GRBL и отправлять G CODE.

Для генерации g coda в Corel Draw нужно , перебрать все векторные объекты "cdrCurveShape" , которые состоят из сегментов , а сегменты состоят из узлов и уже в узлах хранятся координаты х и у .
Если вы сделаете парсинг координат в Corel Draw 16 и выше и хранить координаты будете а классе Point (без явной реализации), то этот макрос не будет работать в Corel Draw 13 и ниже. Так как в Corel Draw 13 нет класса Point , что бы все работало нужно явно реализовать класс Point.

Код: Выделить всё

Private x_ As Double
Private y_ As Double

Property Get x() As Double
x = x_
End Property
Property Let x(ByVal Value As Double)
x_ = Value
End Property
Property Get y() As Double
y = y_
End Property
Property Let y(ByVal Value As Double)
y_ = Value
End Property
Все примеры носят демонстрационный характер.
Так , что без претензий к внешнему виду форм.
Плотно сижу на Corel Draw.

Вернуться в «Лазерные, плазменные и другие раскроечные станки»