Привет всем. Возникла проблема, необходимо контроkлировать текущее состояние 3д принтера, а именно: понять выполняет он сейчас перемещение по осям или находится в простое. Например отправляю команду G0 X100 F50, то есть перемещаюсь по оси Х до координаты 100 мм с медленной скорость (50 мм/мин), необходимо привязать событие в ПО к моменту когда закончится перемещение в эту точку. Есть ли какая-нибудь команда G-кода, возвращающая что-то типо состояние занят/свободен? или может кто-нибудь знает как по-другому программными средствами контроллировать?
В общем один из способов контроля состояния перемещения я нашёл исходя из команды M114, на возврат от которой получаем текущие координаты и координаты в которые перемещение происходит. Путём их сравнения можно понять достиг требуемой точки или нет (то есть происходит движение или находится в простое).
Вот пример кода как организовать задержку на время выполнения перемещения на с# (код набросан на скорую руку и получился корявый, но если кто-то заинтересуется, то алгоритм становится понятен).
public void GetDelayTest() //делает задержку потока пока принтер не вышел в заданную координату { string ReadedLine; //строка для чтения команд с порта char[] delimiterChars = {':', ' ', ':', ' ',':', ' ', ':', ' ', ':', ' ', ':', ' ', ':', ' ',}; //разделители строки, подробнее на MSDN в описании метода Split
string[] words; //массив для полученных после операции Split
bool ReadPosition=false; bool done=false;
string CurrentX=""; string NeedX="";
string CurrentY=""; string NeedY="";
string CurrentZ=""; string NeedZ="";
SendingCommand = "M114\r\n";
while (done==false) { PositionerPort.Write(SendingCommand);
words = ReadedLine.Split(delimiterChars); if (words[0]=="X"Шутливо //это проверка является ли прочитанная строкой подходящей нам { ReadPosition =true; //заканчиваем чтение строк CurrentX=words[11]; //считываем текущий Х NeedX=words[1]; //считываем необхдимый Х
CurrentY=words[13];//считывыем текущий Y NeedY=words[3]; //считываем необходимый Х
CurrentZ=words[15]; //считывыем текущий Z NeedZ=words[5]; //считываем необходимый Х
} else { Thread.Sleep(100); //задержка 100 мс, чтобы слишком часто порт не опрашивало }
Опробовал, всё работает нормально. Хотя вижу сразу недостаток в том, что если от принтера придёт другая команда, то она будет прочитана и проигнорирована, пока не придёт ответ именно от команды M114. Решается данный недостаток более качественным парсингом приходящих команд.
Обязательным условием долгой и стабильной работы Li-FePO4-аккумуляторов, в том числе и производства EVE Energy, является применение специализированных BMS-микросхем. Литий-железофосфатные АКБ отличаются такими характеристиками, как высокая многократность циклов заряда-разряда, безопасность, возможность быстрой зарядки, устойчивость к буферному режиму работы и приемлемая стоимость. Но для этих АКБ очень важен контроль процесса заряда и разряда для избегания воздействия внешнего зарядного напряжения после достижения 100% заряда. Инженеры КОМПЭЛ подготовили список таких решений от разных производителей.
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 17
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения