Привет всем. Возникла проблема, необходимо контро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. Решается данный недостаток более качественным парсингом приходящих команд.
Качественное и безопасное устройство, работающее от аккумулятора, должно учитывать его физические и химические свойства, профили заряда и разряда, их изменение во времени и под влиянием различных условий, таких как температура и ток нагрузки. Мы расскажем о литий-ионных аккумуляторных батареях EVE и нескольких решениях от различных китайских компаний, рекомендуемых для разработок приложений с использованием этих АКБ. Представленные в статье китайские аналоги помогут заменить продукцию западных брендов с оптимизацией цены без потери качества.
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 18
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения