Есть плата Melzi - управляет 3d принтером. Примерно такая:http://reprap.org/wiki/Melzi
Взял synaser. Подключил. Synaser вроде её(плату видит), по крайней мере COM порт определяет.
- Код: Выделить всё
ser:=TBlockserial.Create;
ser.RaiseExcept:=false;
ser.Connect('com3');
if ser.InstanceActive then
begin
ser.Config(115200,8,'N',SB1,false,false);
ser.SendString('G21 X5 Y5 F0.2');
a:=ser.RecvString(100);
Memo1.Lines.Add(a);
a:=ser.RecvPacket(1000);
Memo1.Lines.Add(a);
Memo1.Lines.Add(ser.Device+': '+IntToStr(ser.LastError)+'-'+ser.LastErrorDesc);
end;
ser.Free;
В мемо выводится вот это:
- Код: Выделить всё
Memo1
.COM3: 9997-Timeout during operation
Вопросы:
Как узнать команды, которые нужно отправлять плате Melzi, чтобы активировать моторы и т.д.?
Можно ли список возможных команд получить от самой платы?
Как правильно отправлять команды таким устройствам?
Заранее благодарен всем и каждому, за любую полезную информацию.
.
Добавлено спустя 15 часов 7 минут 36 секунд:
На другом форуме мне сказали что, плате Melzi - нужно отправлять G-code.
G-code - это очень простой язык, и я собственно пытался отправить плате именно G-code.
Вот он: G21 X5 Y5 F0.2. По идее моторы должны были активироваться и переместиться в позицию Х=5мм У=5мм со скоростью 0.2.
Но ничего не происходит... Я пытался послать G-code c помощью ser.SendString (пример отправки в первой записи).
Соответственно я неправильно посылаю команды...
Я никогда не программировал для внешних устройств и не знаю как это должно быть.
Человек написал, что команды G-code можно отправлять также и через терминал и всё должно работать...
Спасите помогите ПОЖАЛУЙСТА
Мне бы только крохотный рабочий пример, который отправит например такую G21 X5 Y5 F0.2 команду плате и
чтобы плата её выполнила, остальное безусловно проще, т.к. G-code - очень прост в идентификации.
прлииииз...
.
Добавлено спустя 2 часа 8 минут 43 секунды:
Ура! - устройство ответило, что всё хорошо,
нужно было добавить CR/LF в описании synaser узрел (возможно кому пригодится).
- Код: Выделить всё
запрос такой:
ser.Config(115200,8,'N',SB1,false,false);
ser.SendString('G21 X5 Y5 F0.2'+#13);
a:=ser.RecvPacket(1000);
Memo1.Lines.Add(a);
Memo1.Lines.Add(ser.Device+': '+IntToStr(ser.LastError)+'-'+ser.LastErrorDesc);
ответ такой:
Memo1
ok
\.COM3: 0-OK
Но девайс ответил только ОК и что ошибок нет...
Но с места ничего не сдвинулось, а должны были моторы заработать... наверное...
Соответственно вопрос ещё в силе...
Добавлено спустя 31 минуту 12 секунд:
Всё заработало, я неправильно вводил G-code.
Вот правильный запрос с ним всё работает, если кому понадобится:
- Код: Выделить всё
ser.SendString('%'+#13);// начало программы
ser.SendString('G90 G21'+#13); //установить миллиметры
ser.SendString('G1 X5 Y5 Z5 F0.2'+#13); // переместить туда-то с такой-то скоростью
ser.SendString('M30'+#13);// конец программы
Сам с собой разговариваю... дожили...
Всем хорошего настроения!
.