Перейти к публикации
  • Привет. Кажется, ты используешь 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 сказал:

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

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

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


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

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

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

Доброго дня. Случайно не выкладывали разобранные запросы в открытый доступ?

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


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

2 часа назад, v.sivtsevich сказал:

Случайно не выкладывали разобранные запросы в открытый доступ?

https://edutechwiki.unige.ch/en/Ruida

Здесь впринципе все есть.

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


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

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

https://edutechwiki.unige.ch/en/Ruida

Здесь впринципе все есть.

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

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


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

10 часов назад, v.sivtsevich сказал:

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

Пожалуйста. Если что-то нужно конкретное для разработки можно попробовать объединить усилия.

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


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

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

Если что-то нужно конкретное для разработки можно попробовать объединить усилия.

Пока ничего конкретного не надо. У нас задача достаточно необычная. Мы делаем сканеры лазерные, сейчас разрабатываем систему. На каретке устанавливается наш сканер, он проходит по материалу, сканирует его и строит карту высот. Затем произвольно размещается шаблон и начинается резка. Пока нужно элементарное управление кареткой и некоторые настройки, в дальнейшем возможно еще нужно будет управлять резкой. В целом эти команды легко парсятся, но информация все равно полезная. Можно найти что-то новое и убедится в том что сам нашел.

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


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

1 час назад, v.sivtsevich сказал:

он проходит по материалу, сканирует его и строит карту высот.

Учтите, что при резке карта высот может вполне поменяться =)  ибо внутренние напряжения материала типа фанера и т.д. многослоных.

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


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

02.06.2022 в 11:10, PavelK сказал:

Учтите, что при резке карта высот может вполне поменяться

Мы хотим резать органику животного происхождения, да и важна как я понял толщина. Это все будет уже опытным путем проверяться. Спасибо.

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


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

Присоединяйтесь к обсуждению

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

Гость
Ответить в тему...

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

  Разрешено не более 75 эмодзи.

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

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

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


  • Сейчас на странице   0 пользователей

    Нет пользователей, просматривающих эту страницу.

  • Похожие публикации

    • Автор: ivankarpov
      Всем привет,если не сложно помогите кто сможет,не давно приобрел станочек и совсем только начал изучать,вроде бы все подключил,с корелом более менее разобрался,вчера даже значки вырезал,а сегодня при переносе макета(при чем любого,даже который вчера нормально вырезал)пишет что мало места,хотя в кореле и в рд указано все в мм,настройки импорт/экспорт пробывал(по похожей теме на сайте)какой бы макет в станок не передавал он во все поле или вообще больше,в чем проблема может быть?

    • Автор: dauren.selhanov
      ассалаумалейкум.У меня не рабоает стрелки и кнопки как справит  
    • Автор: PavelK
      В общем, понадобилось тут добиться, что бы RDWorksV8 не требовал прав администратора при запуске.
      Для этого просто переходим в папку, куда устанавливали RDWorks (если не меняли, то обычно C:\RDWorks\),
      находим файл под названием RDWorksV8.exe.manifest и удаляем его.

      После этого правой клавишей на RDWorksV8 и в менюшке выбираем "Создать ярлык" и по этому ярлыку уже можно будет запускать без запросов прав администратора. Ярлык можно перетащить на рабочий стол.
      Другой вариант это просто скопировать RDWorksV8.exe  и вставить в эту же папку (без замены, если спросит)
      - у него будет другое имя и так же не будут нужны права администратора.
    • Автор: PavelK
      В файле распиновка контроллера RDC6332G-BS  (С фиолетовой панелью) от Реклаба.
      Внимание!  Не путайте с обычной RDC6332G!  
       
    • Автор: Dan
      Оригинальная версия ПО RDWorksV8.01.60 для контроллеров RUIDA
      Свежая линейка контроллеров RDC6445S с прошивками V26.х.х (например, RDLC-V26.01.13) работает только с ПО версии v48 и выше.
×
×
  • Создать...