NVEM Протокол. Реверс инжениринг.

Контроллеры, драйверы, датчики, управляющие устройства.
AIG.Livny
Новичок
Сообщения: 3
Зарегистрирован: 10 дек 2018, 13:15
Репутация: 6
Настоящее имя: Агибалов Иван
Контактная информация:

NVEM Протокол. Реверс инжениринг.

Сообщение AIG.Livny »

Здравствуйте! Купил контроллер NVEM Mach3 и хотел бы использовать его без привязки к Mach, например от своей программы или от LinuxCNC. Решил посмотреть как общаются Mach и NVEM. В общем кое что-то удалось выяснить но еще многое не понятно. Чувствую, один я не справлюсь и прошу вас помочь. Высказывайте любые идеи, неизвестно что окажется верным, будем пробовать. Может быть вы знаете что-то. Причем тут скорее поможет математик чем программист. В общем вот что сделано и удалось узнать.

Подлючение
Mach3 с плагином NVEM запущен на ноуте с IP адресом 192.168.31.2. "Эмулятор" NVEM на стационарном компе с адресом 192.168.31.100.
Сначала я запустил Wireshark сниффер и посмотрел процедуру связи с настоящим NVEM. Файл прилагаю.
В начале все понятно. NVEM подключенный в сеть посылает раз в секунду пакеты UDP на широковещание 192.168.31.255 по порту 888 такого содержания "6162000000000001FCCF" назовем его NOL-сообщение (NVEM On Line) . Между посылками NVEM слушает пакеты UDP на порту 890 с содержанием "6162020000000001" назовем его MOL (Mach On Line).
Mach при включении слушает пакеты NOL, узнает IP NVEM'a и высылает пакет MOL. NVEM принимает MOL, узнает IP адрес Mach'a и иницирует соединение TCP c сервером Mach на порту 1888 (Mach-сервер, NVEM - клиент)

Работа.
Первым пакетом по TCP приходит от Mach настройки. Выяснил я это изменяя параметры в Mach и подключая заново. Пакет выглядит так:
Пакет (для просмотра содержимого нажмите на ссылку)
00:cc:0e:40:06:cc:03:02:00:00:
00:cc:04:02:00:00:
00:cc:05:00:01:06:01:
00:cc:06:00:00:08:00:00:00:08:00:00:00:a8:02:00:00:08:00:00:00:08:00:00:00:08:
00:cc:14:00:01:00:00:00:01:00:00:00:02:00:00:00:01:00:00:00:01:00:00:00:01:00:
00:cc:13:00:00:08:00:00:00:08:00:00:00:a8:02:00:00:08:00:00:00:08:00:00:00:08:
00:cc:07:31:08:00:00:31:08:00:00:0a:57:00:00:31:08:00:00:31:08:00:00:31:08:00:00:
ee:dd:aa:bb
Выяснил что байты "00ссXX" - (где XX число) - это регистры для настроек. Например регистр "00cc01" хранит параметры инвертирования осей, полный запрос выглядит так: "00cc01 01cc050001060100" - где 01 (первый байт после адреса регистра) это флаги инвертирования остальные байт не изменяются.
Т.е. Сначала идут 2 байта "00cc" - флаг начала регистра, потом один байт - адрес регистра, потом идут данные разных длин.
Причем, регистры 05 и 06 могут быть длиннее или короче на один байт. Потому разбивка пакета усложняется.
Таким образом я создал список возможным регистров и длины данных для них:
Регистры (для просмотра содержимого нажмите на ссылку)
Пишу в Python'e потому такой вид. Первая колонка адреса, вторая - длины в байтах, третья - какое-то значение, не факт, что дефолтное
bytes.fromhex('00CC01') : [3, bytes.fromhex('000000')],
bytes.fromhex('00CC02') : [3, bytes.fromhex('000000')],
bytes.fromhex('00CC03') : [3, bytes.fromhex('000000')],
bytes.fromhex('00CC04') : [3, bytes.fromhex('020000')],
bytes.fromhex('00CC05') : [4, bytes.fromhex('00010601')],
bytes.fromhex('00CC06') : [23, bytes.fromhex('00000000000000000000a8020000000000000000000000')],
bytes.fromhex('00CC07') : [24, bytes.fromhex('31080000310800000a570000310800003108000031080000')],
bytes.fromhex('00CC09') : [3, bytes.fromhex('020000')],
bytes.fromhex('00CC0A') : [3, bytes.fromhex('000000')],
bytes.fromhex('00CC0B') : [3, bytes.fromhex('200000')],
bytes.fromhex('00CC0C') : [23, bytes.fromhex('7f0000000000000071ac00000000000000000000000000')],
bytes.fromhex('00CC0E') : [7, bytes.fromhex('4006cc03020000')],
bytes.fromhex('00CC10') : [0, bytes.fromhex('')],
bytes.fromhex('00CC13') : [23, bytes.fromhex('00000800000008000000a8020000080000000800000008')],
bytes.fromhex('00CC14') : [23, bytes.fromhex('0001000000010000000200000001000000010000000100')],
bytes.fromhex('00CC18') : [0, bytes.fromhex('')],
bytes.fromhex('00CC15') : [2, bytes.fromhex('0201')],
bytes.fromhex('00CC16') : [1, bytes.fromhex('02')],
bytes.fromhex('00CC17') : [1, bytes.fromhex('01')]

Далее, выяснил что последовательность ee:dd:aa:bb - это разделитель, назовем EOL (End Of Line), обычно он приходит в конце сообщения но не всегда! т.е. В конце любого сообщения от Mach находится EOL. В сообщениях от NVEM никогда. EOL также встречается в пакетах движения как разделитель.

Бывает, что в пакете содержится: "00сс0a 00cc05000000" - т.е. Идут адрес регистра но без данных, затем идут уже другой регистр или конец строки. Предполагаю, что это означает "обнулить регистр".

Также, можно заметить в файле NVEM starting, что NVEM отправляет пакеты следующего содержания:
(для просмотра содержимого нажмите на ссылку)
61:62:03:01:cc:08:ff:1f:00:
00:cc:0a:00:00:00:
00:cc:0c:7f:00:00:00:00:00:00:00:71:ac:00:00:00:00:00:00:00:00:00:00:00:00:00:
00:cc:09:02:00:00:
00:cc:10:
00:cc:05:00:01:06:01:
00:cc:0b:20:00:00
61:62:03:01:cc:08:ff:1f:00: - не меняется, затем идут значения регистров, думаю это координаты и что-то еще, например состояния входов.
В эмуляторе я отправляю такое сообщение через раз, так как не знаю когда его нужно отправлять.

Пакеты движения. Вот тут я пока ничего не понимаю. И хочу показать здесь, может у кого будут идеи. Я не совсем понимаю как вообще устроена совместная работа Mach и NVEM.
Я писал команды на движения в Mach, например G1 X10 и получал такие пакеты.
Осторожно! Под спойлером длинные пакеты. Там где написаны G- коды это просто комментарий, этого в пакете не было!
Пакеты движения (для просмотра содержимого нажмите на ссылку)
#G1 X10
# 01:
# 01:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:
# 01:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:
# 01:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:
# 01:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:
# 01:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:
# 01:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:
# 01:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:
# 01:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:
# 01:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:
# 01:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:
# 01:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:
# 01:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:ee:dd:aa:bb:
# 01:
# 01:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:
# 01:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:
# 01:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:
# 01:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:
# 01:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:
# 01:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:
# 01:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:ee:dd:aa:bb:
# 00:cc:05:00:01:06:01:00:ee:dd:aa:bb:
# 01:00:00:00:00:00:00:00:00:00:00:00:00:
# 01:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:
# 01:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:
# 01:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:
# 01:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:
# 01:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:
# 01:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:
# 01:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:
# 01:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:
# 01:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:
# 01:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:
# 01:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:
# 01:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:ee:dd:aa:bb:
# 01:00:00:00:00:00:00:00:00:00:00:00:00:
# 01:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:
# 01:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:
# 01:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:
# 01:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:
# 01:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:
# 01:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:
# 01:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:
# 01:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:
# 01:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:
# 01:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:
# 01:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:
# 01:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:ee:dd:aa:bb:
# 00:cc:05:00:01:06:01:00:ee:dd:aa:bb:
# 00:cc:05:00:01:06:01:00:ee:dd:aa:bb:
# 00:cc:05:00:01:06:01:00:ee:dd:aa:bb:
# 00:cc:05:00:01:06:01:00:ee:dd:aa:bb:
# 00:cc:05:00:01:06:01:00:ee:dd:aa:bb:
# 00:cc:05:00:01:06:01:00:ee:dd:aa:bb

#G1 Y1
# 01:00:00:
# 01:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:
# 01:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:
# 01:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:
# 01:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:
# 01:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:
# 01:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:
# 01:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:
# 01:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:
# 01:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:
# 01:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:
# 01:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:
# 01:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:ee:dd:aa:bb:
# 01:00:00:
# 01:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:
# 01:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:
# 01:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:
# 01:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:
# 01:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:
# 01:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:
# 01:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:ee:dd:aa:bb:
# 00:cc:05:00:01:06:01:00:ee:dd:aa:bb:
# 00:cc:05:00:01:06:01:00:ee:dd:aa:bb:
# 01:00:00:00:00:00:00:00:00:00:00:00:00:00:00:
# 01:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:
# 01:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:
# 01:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:
# 01:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:
# 01:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:
# 01:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:
# 01:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:
# 01:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:
# 01:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:
# 01:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:
# 01:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:
# 01:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:ee:dd:aa:bb:
# 01:00:00:00:00:00:00:00:00:00:00:00:00:00:00:
# 01:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:
# 01:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:
# 01:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:
# 01:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:
# 01:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:
# 01:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:
# 01:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:
# 01:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:
# 01:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:
# 01:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:
# 01:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:
# 01:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:ee:dd:aa:bb:
# 00:cc:05:00:01:06:01:00:ee:dd:aa:bb:
# 00:cc:05:00:01:06:01:00:ee:dd:aa:bb:
# 00:cc:05:00:01:06:01:00:ee:dd:aa:bb:
# 00:cc:05:00:01:06:01:00:ee:dd:aa:bb:
# 00:cc:05:00:01:06:01:00:ee:dd:aa:bb

#01
# XX XX YY YY ZZ ZZ AA AA BB BB CC CC - Предположение!!!

#G1 Z0.01
# 01:
# 00:00:00:00:ff:ff:00:00:00:00:00:00:00:00:
# 00:00:00:00:00:00:00:00:00:00:00:00:00:00:
# 00:00:00:00:00:00:00:00:00:00:00:00:
# ff:ff:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:
# ff:ff:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:
# ff:ff:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:
# ff:ff:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:
# ff:ff:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:
# ff:ff:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:
# ff:ff:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:
# ff:ff:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:
# ff:ff:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:
# ff:ff:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:
# ff:ff:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:ee:dd:aa:bb:
# 01:00:00:00:00:
# ff:ff:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:
# ff:ff:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:
# ff:ff:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:
# ff:ff:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:
# ff:ff:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:
# ff:ff:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:
# ff:ff:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:
# ff:ff:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:
# ff:ff:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:
# ff:ff:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:
# ff:ff:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:
# ff:ff:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:ee:dd:aa:bb:
# 00:cc:05:00:01:06:01:00:ee:dd:aa:bb:
# 01:00:00:00:00:
# ff:ff:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:
# ff:ff:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:
# ff:ff:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:
# ff:ff:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:
# ff:ff:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:
# ff:ff:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:
# ff:ff:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:
# ff:ff:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:
# ff:ff:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:
# ff:ff:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:
# ff:ff:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:
# ff:ff:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:ee:dd:aa:bb:
# 01:00:00:00:00:
# ff:ff:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:
# ff:ff:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:
# ff:ff:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:
# ff:ff:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:
# ff:ff:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:
# ff:ff:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:
# ff:ff:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:
# ff:ff:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:
# ff:ff:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:
# ff:ff:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:
# ff:ff:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:
# ff:ff:00:00:00:00:00:00:00:00:00:00
Я разбил пакеты на строки по не нулевому разделителю просто так. Я не знаю как именно разделять эти пакеты.
Вот что я думаю, но это только предположение! : сначала идет байт 01 означающий команду на движение
затем я заметил, что следующая единица смещается в зависимости от оси по которой я двигал.
Таким образом, можно предположить что пакет имеет такую структуру: 01 XX XX YY YY ZZ ZZ AA AA BB BB CC CC Но что будут означать числа на этих местах мне не ясно.
Есть идея, что сообщение это кадр в котором записаны значения вектора в пространстве для всех шести осей... Дальше пока не знаю.

Прилагаю скриптик на Python'e для эмуляции NVEM. Правда при подключении Mach почему-то не пишет "NVEM connected" однако, соединение есть.
Если кому-то интересно, вы могли бы помочь выяснить какой регистр за какую настройку отвечает. Просто меняя настройку в Mach и смотря какой регистр изменится.
Вложения
NVEM wireshark.zip
(29.51 КБ) 291 скачивание
Аватара пользователя
MX_Master
Мастер
Сообщения: 7489
Зарегистрирован: 27 июн 2015, 19:45
Репутация: 3113
Настоящее имя: Михаил
Откуда: Алматы
Контактная информация:

Re: NVEM Протокол. Реверс инжениринг.

Сообщение MX_Master »

Иван, я ценю ваше время, потраченное на эту работу. Но в данном случае, накатать новую прошивку будет в несколько раз быстрее, чем разобрать весь протокол передачи и затем с костылями его применить. К тому же, если в оригинальной прошивки уже заложены какие-то лимиты, то одним протоколом передачи их не обойти. Я, кстати, разбирался в распайке и подключении микроконтроллера, и скажу прямо - китайцы на этой плате не используют аппаратные возможности МК для вывода сигналов. Отсюда и заявленные 200 КГц шагов вместо мегагерцев.
Аватара пользователя
Serg
Мастер
Сообщения: 21923
Зарегистрирован: 17 апр 2012, 14:58
Репутация: 5183
Заслуга: c781c134843e0c1a3de9
Настоящее имя: Сергей
Откуда: Москва
Контактная информация:

Re: NVEM Протокол. Реверс инжениринг.

Сообщение Serg »

IMHO проще и продуктивнее будет подружить Mach и Mesa - всё документировано, бери и делай.
А с NVEM (и прочими реверсинжениригами) запросто может получится так, что выйдет новая версия с несовместимым протоколом и начинай по новой...
Я не Христос, рыбу не раздаю, но могу научить, как сделать удочку...
Аватара пользователя
MX_Master
Мастер
Сообщения: 7489
Зарегистрирован: 27 июн 2015, 19:45
Репутация: 3113
Настоящее имя: Михаил
Откуда: Алматы
Контактная информация:

Re: NVEM Протокол. Реверс инжениринг.

Сообщение MX_Master »

UAVpilot писал(а):IMHO проще и продуктивнее будет подружить Mach и Mesa - всё документировано, бери и делай.
Кстати, интересно, почему месовцы сами не запилили плагины для Mach3 и 4? Количество проданных платок увеличилось бы в несколько раз.
Аватара пользователя
Serg
Мастер
Сообщения: 21923
Зарегистрирован: 17 апр 2012, 14:58
Репутация: 5183
Заслуга: c781c134843e0c1a3de9
Настоящее имя: Сергей
Откуда: Москва
Контактная информация:

Re: NVEM Протокол. Реверс инжениринг.

Сообщение Serg »

А они не пользуются Mach. :) А продажи в области "ЧПУ на основе компа" у них далеко не основные.
Я тут где-то рассказывал про чувака, который начал делать плагин для Mach3 под 7i43 - там даже уже что-то "шевелилось", но всё кончилось тем, что он перешёл на LinuxCNC. :)
Я не Христос, рыбу не раздаю, но могу научить, как сделать удочку...
AIG.Livny
Новичок
Сообщения: 3
Зарегистрирован: 10 дек 2018, 13:15
Репутация: 6
Настоящее имя: Агибалов Иван
Контактная информация:

Re: NVEM Протокол. Реверс инжениринг.

Сообщение AIG.Livny »

Вы правы. Я и сам думал о прошивке, но насчет скорости разработки сомневаюсь. А как на ваш взгляд должен работать контроллер? Он должен обрабатывать G-коды или управляться каким-то софтом с компьютера? Я в этой теме не разбираюсь, не знаю что лучше. Если с обработкой кодов, тогда можно подумать над адаптированием прошивок с ардуин. Кажется я где-то встречал порт grbl на stm32.
MX_Master писал(а):китайцы на этой плате не используют аппаратные возможности МК для вывода сигналов.
Т.е. даже перепрошивка NVEM не лучший вариант. Это жаль, а то ведь и плата уже готовая...
Михаил, вы говорите, что разбирались со схемой, а нет ли у вас этой схемы? Просто NVEM в шкафу прикручен, лень снимать. :)
Хочу убедиться. В принципе, даже если импульсные выходы не на таймерных ножках висят, то не особо страшно. Неудобно, но все-же сделать можно.
Изучу эту тему, плата неплоха, не хочу выбрасывать. Правда если с нуля программу разрабатывать, то не возьмусь.

По поводу mesa. Я просто поспешил :) Купил NVEM, не изучив тему. Потом то я уже узнал что мне нужна была mesa.
Аватара пользователя
selenur
Почётный участник
Почётный участник
Сообщения: 4605
Зарегистрирован: 21 авг 2013, 19:44
Репутация: 1622
Настоящее имя: Сергей
Откуда: Новый Уренгой
Контактная информация:

Re: NVEM Протокол. Реверс инжениринг.

Сообщение selenur »

AIG.Livny писал(а):Кажется я где-то встречал порт grbl на stm32
http://robomechs.com/grbl-1-1-smt32f103c8t6/ - проверил, работает нормально.

Я реверсил в свое время протокол контроллера Planet-CNC, даже удалось написать свою программу для управления, но когда пользователи начали ей управлять своими контроллерами той-же самой модели выявились новые нюансы....
И реверсинг крайне трудоемкий процесс, который в большинстве случаев не стоит того, проще и быстрее подобрать другой контроллер, т.к. вместо того что-бы пользоваться станком, ты потратишь не один месяц на это занятие.
Мой сайт: http://selenur.ru
Исходники моих программ: https://github.com/selenur
Instagram https://www.instagram.com/zheigurov/
Аватара пользователя
Serg
Мастер
Сообщения: 21923
Зарегистрирован: 17 апр 2012, 14:58
Репутация: 5183
Заслуга: c781c134843e0c1a3de9
Настоящее имя: Сергей
Откуда: Москва
Контактная информация:

Re: NVEM Протокол. Реверс инжениринг.

Сообщение Serg »

AIG.Livny писал(а):По поводу mesa. Я просто поспешил :) Купил NVEM, не изучив тему. Потом то я уже узнал что мне нужна была mesa.
"Чтобы продать что-нибудь ненужное, нужно сначала купить что-нибудь ненужное". Т.е. пол дела уже сделано. :)
Я не Христос, рыбу не раздаю, но могу научить, как сделать удочку...
Аватара пользователя
MX_Master
Мастер
Сообщения: 7489
Зарегистрирован: 27 июн 2015, 19:45
Репутация: 3113
Настоящее имя: Михаил
Откуда: Алматы
Контактная информация:

Re: NVEM Протокол. Реверс инжениринг.

Сообщение MX_Master »

AIG.Livny писал(а):А как на ваш взгляд должен работать контроллер? Он должен обрабатывать G-коды или управляться каким-то софтом с компьютера?
Планировщик с G кодами на ПК, генераторы импульсов отдельно. В данном случае мы имеем дело с отдельным софт генератором импульсов.
AIG.Livny писал(а):Михаил, вы говорите, что разбирались со схемой, а нет ли у вас этой схемы?
Я подключение смотрел по этим фоткам - http://www.cnc-club.ru/forum/viewtopic. ... 97#p441676
Но у вас там может быть всё иначе. Так что придётся, всё-таки, сделать фотки крупным планом и разобраться.
AIG.Livny
Новичок
Сообщения: 3
Зарегистрирован: 10 дек 2018, 13:15
Репутация: 6
Настоящее имя: Агибалов Иван
Контактная информация:

Re: NVEM Протокол. Реверс инжениринг.

Сообщение AIG.Livny »

Так что придётся, всё-таки, сделать фотки крупным планом и разобраться.
Во, набросал схему :) Прилагаю схему в dipTrace формате

Все импульсные выходы на порту Е, а весь порт Е по даташиту имеет выходы от таймеров. Так что вполне есть смысл портировать сюда, например grbl.
Только надо дополнительно модуль связи по Ethernet писать, и загрузчик желательно.
Вложения
NVEM схема.jpg (3153 просмотра) <a class='original' href='./download/file.php?id=152363&mode=view' target=_blank>Загрузить оригинал (2.03 МБ)</a>
NVEM diptrace.zip
(23.19 КБ) 232 скачивания
IMG_20181210_215036.jpg (3153 просмотра) <a class='original' href='./download/file.php?id=152365&mode=view' target=_blank>Загрузить оригинал (4.14 МБ)</a>
Аватара пользователя
MX_Master
Мастер
Сообщения: 7489
Зарегистрирован: 27 июн 2015, 19:45
Репутация: 3113
Настоящее имя: Михаил
Откуда: Алматы
Контактная информация:

Re: NVEM Протокол. Реверс инжениринг.

Сообщение MX_Master »

AIG.Livny писал(а):Все импульсные выходы на порту Е, а весь порт Е по даташиту имеет выходы от таймеров.
Если внимательно перепроверить по пинам:
  • на PE7-PE15 выходят разные каналы первого таймера
  • на PE4-PE6 выходят разные каналы девятого таймера
  • на PA0 выходят первые каналы второго и пятого таймера
  • на PC2,PC3 таймеры не выходят
Это значит, что на этой гребёнке можно получить аппаратный вывод шагов только на 3 оси. При условии, что GRBL умеет использовать такой вид аппаратного вывода. Но, скорее всего, не умеет. По сети тоже не умеет работать. Всё это надо вручную дописывать и тестировать, а это ещё тот геморрой. Ну и учитывая, что это будет всего лишь GRBL, а не LinuxCNC, оно того не стоит. Дешевле и быстрее взять любую макетку (2-7$) с USB, залить туда GRBL и по желанию доработать на предмет аппаратного вывода. Что тоже далеко не быстро.

Чтобы сделать из этого контроллера софт генератор (и частично аппаратный) для LinuxCNC, работы уйдёт не меньше чем на GRBL. При этом контроллер получится всё равно неполноценный, в отличии от платок MESA.

Я, кстати, не отговариваю. Если в арсенале есть достаточно свободного времени, то почему бы и да.
Ответить

Вернуться в «Электроника»