Перейти к содержанию
  • Привет. Кажется, ты используешь AdBlock. Наш форум развивается и существует за счет доходов от рекламы. Добавь нас в исключения =) КАК ДОБАВИТЬ?

Рекомендуемые сообщения

05.05.2016 в 17:26, PavelK сказал:

@KUZNETS  к сожалению нет, та панель практически совмещена с материнкой. 

Моя подходит только к RDL320 и RDL430 

Доброго времени суток.

А вот мне весьма интересна эта Ваша разработка. Я сегодня сделал публикацию на тему ремонта RDLC320, материнку удалось восстановить, а вот прошивку к панели управления найти пока что возможным не представляется.

Очень мне любопытно, каким образом Вы реализовали обмен инфой между материнкой и планшетом. Это же надо знать заранее, какие именно команды бегают в пакетах между материнкой и панелью. Допустим, если есть живой экземпляр, тогда вполне можно каким-нибудь логическим анализатором спарсить все возможные команды. А вот если есть только мать, как тогда? 

Ну еще, как вариант, можно попробовать разреверсить прошивку от материнки. Я пробовал запихивать последнее (и вроде единственное) обновление от RDLC320 в дизассемблер, и в IDA, и в Ghidra, но что-то там плоховато с анализом прошивок для ПЛИС.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Блин, закусила меня эта мысль. И так её размышлял и эдак и вроде сам допёр, как можно сделать. Хотя получается костыль, конечно, и весь функционал панели таким образом не выйдет восстановить. Однако...

Подключил плату к компу, открыл RDWorks, и также запустил сниффер COM-порта. Посмотрел, какие данные идут при проверке связи в программе, посмотрел пакеты, бегущие при нажатии Read на вкладке Doc, и еще что идёт при управлении головой из вкладки Test. Записал запросы и ответы, закрыл RDWorks, открыл терминал и послал запрос из него. Ответ совпадает, супер! Дальше, в принципе, ясно, рисуем в каком-нибудь конструкторе морду android-приложения, привязываем на кнопки запросы, подключаемся в USB-разъем на материнке, рулим головой с планшета, профит!

Но, повторюсь, эт костыль. Ресет, например, так реализовать не выйдет. Вот была бы рабочая панелька, тогда возможен вариант перехватить пакеты, которые с неё идут и приходят, и тогда на планшет можно вывести прямо всё, что может сток-панель, и сверху еще навернуть чего-нибудь)

Еще вот прямо сейчас подумалось, что можно попробовать записать пакеты с панели RDLC6442. Кнопочный функционал у неё такой же, поэтому наверняка китайцы не стали заморачиваться и переписывать код. Было бы интересно, да)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

6 часов назад, Alterpalm сказал:

Записал запросы и ответы, закрыл RDWorks, открыл терминал и послал запрос из него. Ответ совпадает, супер!

В правильном направлении идёте.  Помогу чутка - первые 2 байта - контрольная сумма. Всё остальное зашифровано простейшим алгоритмом побайтно, тынц:

uint8_t descramble(uint8_t s) {
   uint8_t a = (s + 0xFF) & 0xFF;
   uint8_t b = a ^ 0x88;
   uint8_t p = b & 0x7E; 
   p |= b >> 7 & 0x01; 
   p |= b << 7 & 0x80;
   return p; 
}

 

6 часов назад, Alterpalm сказал:

Ресет, например, так реализовать не выйдет.

Выйдет ;)  за любую материнку не скажу, но начиная с 6442 всех можно и сбросить и импульс сделать (есть ещё один UDP порт чисто для управления).

6 часов назад, Alterpalm сказал:

ще вот прямо сейчас подумалось, что можно попробовать записать пакеты с панели RDLC6442.

Другие :D 

Я сейчас в процессе написания полнофункционального софта для Андроида по удалённому управлению, большую часть распарсил.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
Награды пользователя

7 часов назад, PavelK сказал:

В правильном направлении идёте.  Помогу чутка - первые 2 байта - контрольная сумма. Всё остальное зашифровано простейшим алгоритмом побайтно, тынц:

uint8_t descramble(uint8_t s) {
   uint8_t a = (s + 0xFF) & 0xFF;
   uint8_t b = a ^ 0x88;
   uint8_t p = b & 0x7E; 
   p |= b >> 7 & 0x01; 
   p |= b << 7 & 0x80;
   return p; 
}

 

7 часов назад, PavelK сказал:

(есть ещё один UDP порт чисто для управления)

Ооо, как сладенько, сколько пищи для размышлений. Благодарю, буду думать

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

13.06.2020 в 02:47, PavelK сказал:

uint8_t descramble(uint8_t s) {
   uint8_t a = (s + 0xFF) & 0xFF;
   uint8_t b = a ^ 0x88;
   uint8_t p = b & 0x7E; 
   p |= b >> 7 & 0x01; 
   p |= b << 7 & 0x80;
   return p; 
}

Поработал с алгоритмом, действительно работает, есть некоторые результаты.

Но вопросов и непонятностей только прибавилось)

Для начала я взял хорошо распознаваемую строчку и в лоб пересчитал на калькуляторе все байты. Но быстро надоело, преодолел лень и немного автоматизировал пересчет. В коде я полностью лох. Самым быстрым для меня способом оказалось набросать скрипт на Пайтоне и запустить его в VS Code. И то, я еще с часик разбирался с синтаксисом. Ввожу один байт, получаю дешифровку в трех представлениях, repeat. Вообще, по-хорошему стоило написать так, чтоб всю строчку сразу пихать на ввод и получать отформатированное представление. Но я б тогда залип на весь день с синтаксисом и плюнул бы в итоге))

 

while True:

 s=int(input("enter s: "))

 a=(s+0xFF)&0xFF

 b=a^0x88

 p=b&0x7E

 p|=b>>7&0x01

 p|=b<<7&0x80

 print "HEX:", hex(p)[2:]

 print "CHAR:", chr(p)

 print "DEC:", p

 

Решил поиздеваться с ответами материнки по запросу Read. Для моей платы список файлов выглядит так:

RD8_read.jpg.99b4af056f21eabf3bbcbecea0226bfa.jpg

 

А это дамп ответов. Так как файлов много, я опущу часть кода, чтоб не засорять эфир, оставлю только важное. Вывод инфы о файлах оставил только для двух, первого и четвертого:

1911197932_.thumb.jpg.17a446093e55a1608643c1e1d4f462a6.jpg

 

Первые две строки одинаковые – похоже на проверку связи. А дальше хз, только вот в последнем байте до вывода инфы о файлах увидел количество файлов. Удалось обнаружить номер файла, его имя, количество запусков. Также хорошо видно что-то типа позывного (первые два байта), причем для строк с названиями первый байт другой(E2).

Из непоняток:

- для первого файла количество запусков является трехзначным числом, и дешифровка не бьётся с этим значением. Для двухзначных значение совпадает.

- не удалось распознать время выполнения файла

- третья строка в инфе о файле полностью мимо

- с третьей по седьмую строки от начала тоже мимо

Подскажите, плиз)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

1. Какая версия RDWorks?  Если 6, то 0x88 нужно заменить на 0x86 в дешифраторе.

2. В "лоб" из байт числовые значения Вы не получите, нужно переводить:

long Parser::parse5b(const QByteArray &bytes, int o)
{
    long as = bytes[o+0] << 28 | bytes[o+1]<< 21 | bytes[o+2] << 14 | bytes[o+3] << 7 | bytes[o+4];
    return as;
}

На вход 5 байтов, на выход числовое представление (если число кодируется 5 байтами, для 2х байтых по принципу так же)

3. Время в миллисекундах (timestamp), 5 байт.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
Награды пользователя

5 часов назад, PavelK сказал:

1. Какая версия RDWorks?  Если 6, то 0x88 нужно заменить на 0x86 в дешифраторе.

Пользую RDWorksV8. Есть еще LaserWorkV5, он же RDCAM5.0.27, но он, по ходу, с Win10 не в ладах: пока не отключишь панель с цветами, не видно большей части кнопок управления + нет отображения количества выполненных циклов

 

5 часов назад, PavelK сказал:

long Parser::parse5b(const QByteArray &bytes, int o)
{
    long as = bytes[o+0] << 28 | bytes[o+1]<< 21 | bytes[o+2] << 14 | bytes[o+3] << 7 | bytes[o+4];
    return as;
}

В коде я по-прежнему лох. Не понимаю, откуда взять int o, вроде явно значение здесь нигде не присвоено.

 

5 часов назад, PavelK сказал:

3. Время в timestamp, 5 байт.

Я так понимаю, речь идет о третьей строке в выводе инфы о каждом файле.

 

Теперь вроде дошло, почему не сошлось количество запусков в первом файле. Теперь вижу единичку во втором с конца байте, типа как следующий разряд получается.

За пятибайтные числовые представления спасибо, картина стала однозначно яснее. Осталось разобраться с переводом)

Вообще смотрю на Ваш код и понимаю, что догадаться самостоятельно у меня не получилось бы, наверное, никогда. Перебором, в лоб получить алгоритм дешифровки просто нереально. Ведь когда его нет, хз, сколько в нем операций преобразования и использованных вспомогательных переменных, может, 4-5, а может и штук 20. Моё почтение, однозначно. А мне, по ходу, пора садиться и учить OllyDbg

Изменено пользователем Alterpalm
Опечатка

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

7 часов назад, Alterpalm сказал:

Не понимаю, откуда взять int o,

Это смещение (offset) начала из bytes, откуда проводить считывание.  Если на вход ровно 5 байт, то o=0;

7 часов назад, Alterpalm сказал:

что догадаться самостоятельно у меня не получилось бы, наверное, никогда. Перебором, в лоб получить алгоритм дешифровки просто нереально.

Как раз таки реально и в "лоб". Записываем несколько десятков пакетов, смотрим идентичные байты, добиваемся, что бы менялось за раз как можно меньше (отправкой команд из RDWorks), смотрим, как много байт поменялись при общении и вычисляем, что за зависимость. В данном случае зависимость оказалась лишь однобайтная (контрольная сумма невсчёт). Так что получается всего 255 вариантов перевода. Собираем таблицу и дешифровка готова.  Функцию, которую первую прислал, я уже потом где-то нашёл и решил, что в данном случае она уместнее, т.к. можно подстраивать под разные версии RDWorks. Перевод чисел - один из "стандартных" вариантов представления.

До кучи некоторые команды с описанием:

RUIDA_RDWORKS_V8.ini

Смотрите блоки [KR_N]  

title - соответственно что собой представляет запрос

regexp  - маска запроса. Точки обозначают, что на этом месте может быть любое значение (вначале - контрольная сумма, после -  изменяемое значение аргументов).

Вы вообще с какой целью этим занимаетесь?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
Награды пользователя

Благодарю за инфу, будем посмотреть)

21 минуту назад, PavelK сказал:

Вы вообще с какой целью этим занимаетесь?

Просто хочу развиваться, больше знать и уметь. На прикладных задачах получается лучше, чем на примерах что-то изучать. Потом уже идет желание выдать результат по итогам ремонта. Если не удастся реанимировать панель, так может хоть заменитель получится сделать

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.


  • Последние посетители   0 пользователей онлайн

    Ни одного зарегистрированного пользователя не просматривает данную страницу

  • Похожий контент

    • От AdelI
      Добрый день всем, не так давно начал знакомиться с лазерными станками и программой RDWorks. Скачал установил, какие-то основные моменты понял, но возникла следующая проблема. Все макеты где бы они не были выставлены в рабочей области RDWorks начинают резаться из нулевой точки, даже если сам макет в середине рабочего пространства. Как я понял, за это отвечает зеленый маркер. Может я заблуждаюсь. Видел что у многих работает следующим образом: поставил макет в середину рабочей области RDWorks, режет в середине рабочей области станка. У меня же куда бы ни выставил макет резка начинается с нулевой точки. Помогите разобраться. Как сделать так, чтобы рабочие области были "синхронизированы" и если я ставлю в середину макет в RDWorks, то и на станке он режется в середине стола.
    • От PavelK
      Оригинальная версия RDWorks V8.01.48
    • От Dan
      RDWorksV8.01.48-20200707
      Полностью переведённый на русский язык установщик RDWorksV8.01.48/RDCamV8.01.48. При переводе диалоговые окна полной программы не менялись. В урезанной версии плагина были изменены диалоговые окна с целью подгонки размеров под русский перевод. Основное ядро программы не менялось. Для теста и примера добавлена небольшая библиотека параметров - можно посмотреть. 
      В урезанном плагине есть  некоторые окна, текст которых зашит в сам код программы и они не дёргают строки из языковых файлов. Я мог их перевести, но посчитал лишним подобное вмешательство, ибо в этом случае, они на всех языках отображались бы только на русском языке. 
      Но, есть и окна, которые я не смог вытащить без подключения к контроллеру. Поэтому, если вас не затруднит, то сообщите пожалуйста, какие окна не переведены и обязательно со скриншотом окна, что бы я мог их правильно идентифицировать в ресурсах программы. 
      А так же прошу сообщать о всех косяках в переводе и в работе программы, которые могут вылезти. 
      Заранее говорю - Я ничего не трогал ... ) 
       

      Video_2021-01-24_182502.wmv Video_2021-01-23_124000.wmv
    • От Roman_Tret
      здравствуйте, как задать поэтапно очередь для резки разных элементов? Выделял разными цветами, ставил выше - ниже, все равно по какой то причине более крупные элементы режутся в первую очередь.
       
      Corellaser RDCAM 6.0.24
    • От Ли виктор
      Вот такая уменя панель управление мне подсказали какая у меня руйда как называется сказали забыть про рд воркс потомучто старая руйда а мая програма гонит вырезает в начале наружныы контур а потом внутренние объекты из за чего деталь врезается а внутренние нет он по воздуху режит уже пытался менять в настройках бестолку незнаю что и делать
×
×
  • Создать...