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

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

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

    • От Alterpalm
      RuiDa RDLC320-A, делюсь опытом ремонта + помогите файлом прошивки от панели управления
       
      Попала ко мне на ремонт система управления ЧПУ CO2 лазером RuiDa RDLC320-A с жалобой, что дисплей ничего не показывает и материнку комп не видит. Забавно, что владелец станка – бывший директор, и сам я за именно этим станком три года проработал. Зная условия, в которых эксплуатируется станок, однозначно предположил, что виной всему статика. В общем-то и сам успел убить две трубки, все линейные подшипники, упороть и заколхозить кнопку и устроить с десяток пожаров =) Как бы хорошо ни были защищены эти контроллеры от таких напастей, время и ураганная эксплуатация без оглядки на какую-либо защиту/заземление и т.п. своё дело сделали. Тем более тут связь только по USB через никакой шнурок без экрана.
       
      Подал питание:

       
      Ну да, ничего не происходит. Вскрываю:

       
      Даа, тут много всего прикольного и интересного, особенно сточенная маркировка на одной из микрух)

       
      В общем-то под подозрение сразу попала Альтера, но вдруг нет, надо ж всё проверить. Две недели проверял… Всё перекопал, перепроверил, и таки да, сдохла Альтера и только она.
      Причем сдохла как-то частично, как будто в ПЛИСине выгорело несколько функциональных блоков. Нащупал у неё jtag (который никуда на плате не выведен, хотя штырьков разных навалом), кое-как припаялся к ножкам – отвечает, зараза, Quartus её видит.

       
      Значит, сдуваю её и замеряю сопротивление всех ножек на GND, для начала (или середины уже). Занятие не для нервных, однозначно =) Ну и назамерял кое-чего.
      У таких замороченных микрух выводы питания и GND есть со всех сторон по несколько штук. Логично предположить, что все земляные ножки должны между собой звониться накоротко. А у этой подлянки несколько земляных ножек имели по паре килоОм по отношению к остальным. Я-то хз, нормально это для ПЛИСин, или нет, первый раз дело имею. Как нельзя кстати у меня завалялся аналогичный чип, только Cyclone III. Думал его впихнуть, но вторая и третья серия циклонов по распину не совпадают, от слова «совсем». Ну хоть как пример взял и промерил всё то же самое и на нём:

       
      И да, у заведомо рабочего чипа все ножки GND звонятся накоротко. Чип на кладбище. Заказал новый, припаял, плата ожила, отзывается на подключение к компу, все файлы и настройки остались, плата без проблем дала обновить себе прошивку через RDworks. С этим разобрался, супер.
      Такие дела)
       
      Но это только полремонта. Панель управления как не показывала ничего, так и не показывает. Я-то думал, что дисплей и управление кнопками рулится с материнки, но нет. Панель управления – самостоятельное устройство со своим контроллером и прошивкой на нем, обмен с материнкой идёт по UART. Если на заведомо рабочую панель подать питание 5В, картинка должна появиться и без соединения с материнкой. По идее…


       
      Контроллер тут NXP P89V51RD2. С ним тоже можно общаться, еще и проще, чем с Альтерой, нужен только USB-UART переходничок:

       
      Тот, что есть у меня, имеет по минимуму выводов, всяких там DTR, RTS, и что там еще в COM портах обычно имеется, не выведено. Конвертер тут CP2102, он умеет во всякие доп. штучки, поэтому я аккуратно вывел наружу еще ножку DTR – она понадобится при общении, но в данном случае с этой панелью можно и без DTR обойтись. Втыкаться можно прямо в шнур от панели до материнки. Втыкаться надо, как того требует интерфейс, крест-накрест, т.е. RX от конвертера идет в TX на шнуре от панели, а у второго провода особо-то выбора и не остается)) Выбор конвертера, полагаю, не критичен, можно взять и FTDI и СH341A, и любой другой.

       
      1 – RX
      2 – TX
      6 – GND
      9 – 5V
      Скорость порта 19200:

       
      Дальше нужна прога Flash Magic версии 11.20. В более новых вроде как нет поддержки целевого чипа:
      https://flashmagictool.com/download.html

       
      Установил, всё соединил, подключил, открываю программу, иду в Advanced Options – Hardware Config, снимаю все галки, жму ОК:

      Выбираю нужный чип, выставляю порт и скорость:

       
      Дальше пробую считать айдишник чипа. И здесь интересно:

       
      Просят ввести чип в режим ISP – нужно подать плюс питания на ногу reset контроллера.
      Именно для этого я добавлял контакт DTR на своем конвертере, хотя это необязательно, и вот почему:

       
      На плате есть переходное отверстие, отмечено желтым кружком, его удобно касаться выведенным проводком DTR. Но если такового нету, то можно просто замкнуть, (например, отвёрточкой или пинцетом) две площадки под отсутствующий резистор R5, они отмечены красным овалом на фото. Нужно коснуться и подержать примерно секунду, тогда чип войдёт в нужный режим. Но это еще не все грабли ))

       
      Чип войдёт в режим, но он запаролен. Нужен пароль. И он таки есть, спасибо PavelK, вот ссылка на его пост с паролями от Руидовских контроллеров:
       
      Иду в ISP – Serial Number:

       
      Во фрейме Unlock Device ввожу 666888, выбираю кодировку Hex, жму Unlock Device. Прога ругается окном с предупреждением. Жму ОК и пробую считать сигнатуру чипа еще раз:

       
      Успех, чип разлочен! Теперь надо считать память. Но сдается мне, что там пустота. Оч вероятно, что разряд статики каким-то раком потер прошивку, оставив при этом чип в живых. Но это не точно..
      Иду в ISP – Display Memory. Я так и знал, сплошные унылые F-ки. Чип забыл всё, чему его научили на заводе. И не исключено, что какой-нибудь кусок памяти забэдблочился…

       
      В интернетах категорически не найти эту прошивку. Полагаю, что в Руиду обращаться бесполезно, поэтому  ПАМАГИИИТЕЕЕ!!!  хочу попросить помощи у участников форума: если вдруг еще есть у кого этот динозавр в эксплуатации, выручите, пожалуйста, файликом. Я вроде бы достаточно подробно описал, что нужно для этого сделать. А если Вы находитесь в СПб, то я готов приехать. Займу не более получаса Вашего времени, от «Добрый день» до «Благодарю, всего хорошего!»
      Безусловно, есть такие моменты, что эту панель на Алике можно таки найти тыщи за 4 рублей, да и в общем контроллер этот уже древность. Однако хочется и владельцу помочь, человек достойный, и дело сделать до конца, раз уж взялся. Как-то так)
      Спасибо за внимание!
    • От pururu
      Добрый день всем,
      Прошу помочь с поиском станка с функциями автоматизации. 
      Мы смогли подобрать неплохой вариант для нашей задачи - NOVA35 Thunderlaser, 100 Ваттный.
      По технологии и скорости резки он подошел, в нем же система зрения работает как нам надо - по меткам. 

      Но оказалось, что в нем контроллер Ruida 6445g не имеет функций отправки/приемки внешних сигналов, как в PLC.
      Нам нужно подключить погрузчик/разгрузчик листового материала собственного изготовления для достижения требуемой производительности.
      Подача материала планируется через боковые стенки. 

      Цикл резки смогли получить хороший, а вот на открытие/закрытие крышки, нажатие всех кнопок уходит в пять раз больше времени, чем на саму резку.

      Как вариант, может даже есть какие-то совместимые контроллеры на замену с такими функциями? Я видел некие платы на алиэкпресс, которые якобы работают под mach3.
      Но лучше конечно полноценный комплекс мозгов и ПО.

      Буду рад всем предложениям!
    • От erhtrfdjnarhe
      установил программу rdworks подключаюсь к станку пишет ошибка соединения, контроллер garden group, выручайте 
    • От neo7407
      Добрый вечер, новая беда со станком.После грозы пропала возможность закинуть макеты в станок. Ни комп, ни роутер не видят станок, сам станок не видит и флешку.Файлы до этого бывшие в станке режутся прекрасно, а новые не закинуть. Во время грозы от сети 220в был отключен, в станке был включен только интернет кабель. Помогите советом пожалуйста. )(((
×
×
  • Создать...