Добрый день,
Это будет долго. Я пытаюсь связаться с платой «SainSmart iMatic with RJ45», которая используется вместе с «16-канальным релейным модулем SainSmart 12 В».
По сути, я могу успешно отправлять шестнадцатеричные команды на плату, но не могу получить ответ от платы, когда это необходимо. Что я имею в виду?
У меня есть ноутбук с Ubuntu 14.04.4 LTS, подключенный напрямую к плате через прямой кабель Ethernet (больше не требуется перекрестный тип). У меня конфигурация для такого типа сети (всего два устройства). IP-адрес платы imatic фиксированный, 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, и Windows смогла получить ответ от платы, но что-то должно быть не так в моей конфигурации Ubuntu. Я уже отключил свой брандмауэр, ufw. Это НЕ проблема с кабелем Ethernet. Я уже пробовал другие представления команд, такие как: echo -n '5801100000000069' | xxd -r -p | nc -v -n -w3 192.168.1.4 3000 | xxd Я уже использовал netcat для сканирования всех доступных портов на плате, и только порт 3000 отображается как доступный, как заявлено производителем. Это похоже на проблему с конфигурацией сети, но в Windows я указал тот же IP-адрес и сетевую маску, что и в Ubuntu.
Что мне здесь не хватает?