Добрый день,Невозможно получить шестнадцатиричный отклик от Imatic board
Это будет длинный. Я пытаюсь общаться с платой «SainSmart iMatic с RJ45», которая используется вместе с «SainSmart 16-канальным модулем реле 12V».
В принципе, я могу успешно отправлять шестнадцатеричные команды на плату, но при необходимости не может получить ответ от платы. Что я имею в виду?
У меня есть ноутбук с Ubuntu 14.04.4 LTS, подключенный непосредственно к плате через Ethernet Прямой кабель (больше не нужен тип кроссовера). У меня есть конфигурация для этого типа сети (только два устройства). IP-адрес иматической платы фиксирован, 192.168.1.4 с портом 3000. Мой IP-адрес ноутбука имеет фиксированный IP-адрес 192.168.1.2, с сетевой маской 255.255.255.0 и без шлюза.
Я использую netcat (в режиме TCP-протокола) в своем ноутбуке для отправки команд на плату в этом формате в терминале: echo '580112000000016C' | xxd -r -p | nc 192.168.1.4 3000 Как я узнаю, что это работает? Ну, в основном реле с дополнительной платы успешно включены («SainSmart 16-Channel 12V Relay Module»).
Существует список шестнадцатеричных команд для включения и выключения каждого реле. В предыдущей инструкции я говорю доске, чтобы включить реле номер 1, оставив остальные 15. Строка «580112000000016C» преобразуется из шестнадцатеричного в двоичный с xxd, а затем отправляется в netcat. Эта часть работает.
Единственная инструкция, которая не работает, следующая: echo '580113000000006C' | xxd -r -p | nc 192.168.1.4 3000 Эта инструкция только запрашивает плату, реле которой в данный момент отключена, ожидая ответа в таком формате: 28 01 00 00 00 XX XX HH (XX XX 16 бит, каждый бит представляет собой одно реле состояние «1» указывает на «0» означает «ВЫКЛ», HH представляет собой сумму всех предыдущих данных вместе, то есть работает как контрольная сумма)
Я уже тестировал и доказал, что это НЕ проблема с доска. Я написал код в Visual Basic, и окна смогли получить ответ с доски, но что-то должно быть неправильным в моей конфигурации ubuntu. Я уже отключил свой брандмауэр, ufw. Это не проблема с кабелем Ethernet. Я уже пробовал другие командные представления, такие как: echo -n '5801100000000069' | xxd -r -p | nc -v -n -w3 192.168.1.4 3000 | xxd Я уже использовал netcat для сканирования всех доступных портов на плате, и только 3000 портов показаны как доступные, как указано у изготовителя. Это, похоже, проблема с конфигурацией сети, но в Windows я указал тот же IP-адрес и маску сети, что и в ubuntu.
Что я здесь вижу?