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

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

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

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


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

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 пользователей онлайн

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

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

    • От 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 и выше.
    • От Dan
      Полностью переведённый на русский язык установщик RDWorksV8.01.60/RDCamV8.01.60 последней, вроде, стабильно работающей, версии.
      Появилось много изменений и добавлений различных настроек.
      ... Интерес вызвала возможность логирования некоторых процессов при работе в RD - ведение логов.
      ... Появилась возможность выполнения компенсации смещения при двунаправленной гравировке средствами контроллера, как я понял. Но это надо проверить.
      ... Довольно сильно расширился диалог настроек импорта/экспорта с доп настройками по поиску или формированию этикеток/меток. Опять же, надо проверять, как это работает. Возможно, фича полезная.
      ... Так же появилась возможность из самой программы назначать ось для поворотки (Y или U), что было возможно только в настройках с панели самих контроллеров - 6445S/G.
      И многое другое.
      Также в своей сборке я отключил возможность установки в качестве плагина кривую и недопиленную версию RD, ибо разрабы её оч сильно перекопали, пытаясь подогнать по функционалу к полноценной версии, но при этом отключили массу возможностей - последний скрин.

      Некоторые диалоги при работе и настройки камер я не трогал, ибо там пока полный бардак .. )))
      Слишком много перепиливать для нормального отображения русских менюх.
      Если кому сильно надо вменяемые диалоги именно по работе с камерами, то допилим ... как-нить ... )
      Пожалуйста, пишите обо всех косяках в переводе и диалогах 
    • От markovki
      Уважаемые форумчане, всем доброго времени суток. Уверен, что вопрос не сложный, но ответ так и не нашел.
      Ruida. Отправляю из CorelDraw обрезанную картинку в двух битах в РДКАМ, сразу же появляется два цвета - один гравируется (BMP), второй как резка, т.е. второй цвет вырежет мне эту картинку, но мне не нужно её вырезать!!! Картинка с очень мелкими деталями, сделать качественную трассировку с такой детализацией не удается.
      Подскажите, как сделать, чтобы картинка не вырезалась?
      Удаление цвета или отключение вывода цвета на печать не устраивает, т.к. резка остального тоже отключается, да и каждый раз отключать, можно ошибиться.
×
×
  • Создать...