|
Связь с внешним миром Modbus, RS232, RS485, Lon и другое. |
|
Опции темы | Поиск в этой теме |
10.03.2018, 21:43 | #1 |
Senior Member
Регистрация: Apr 2008
Сообщения: 204
Благодарил(а): 1 раз(а)
Поблагодарили:
0 раз(а) в 0 сообщениях
|
Modbus, float
читаю по ТСП переменную флоат
запрос 00 00 00 00 00 06 01 04 A0 00 00 02 00 ответ 00 00 00 00 00 0F 01 04 0C 00 00 3F 80 на выходе стоит число 1 насколько я помню там нужно переставлять биты местами или что то такое напомните вылетело из головы и где там найти знак числа может док какой то дайтен ссыль на документину пож а то кроме инта с остальными у меня проблемы |
11.03.2018, 01:25 | #2 | |
Сотрудник Segnetics
Регистрация: Jan 2006
Адрес: Russia, SPb
Сообщения: 18 180
Благодарил(а): 15 раз(а)
Поблагодарили:
665 раз(а) в 607 сообщениях
|
Ответ: Modbas C# - 2Gi
Цитата:
На форуме, в этом же разделе под вашей темой: http://forum.segnetics.com/showthread.php?t=461 На форуме, в статьях: http://forum.segnetics.com/showthread.php?t=2666 __________________ Программа делает то что написал программист, а не то что он хотел. Добро всегда побеждает зло. Кто победил - тот и добрый. |
|
11.03.2018, 11:15 | #3 |
Senior Member
Регистрация: Apr 2008
Сообщения: 204
Благодарил(а): 1 раз(а)
Поблагодарили:
0 раз(а) в 0 сообщениях
|
Ответ: Modbus, float
Не проблема поменять байты местами как вы написали
FLOAT и LONG побайтно передаются в порядке 3-4-1-2, т.е. число LONG, равное 08403020h передаётся как 30h.20h.08h.40h В моем случае это на входе 1 на сервере 00 00 3F 80 т е при пересчете 3F 80 00 00(10 ое 1065353216) как из 1 получается такое 1065353216 ? вот не понимаю я в двоично- шестнадц.. виде 00 11 11 11 10 00 00 00 00 00 00 00 ... здесь первые два ноля это знак числа я так понял а дальше темный лес Мне непонятно где найти точку а еще там Е может быть я так понял. нашел в ОПС сервере такую строку Перестановка байтов в значении 10325476 Только я не понял там 8 байт а в контроллере 4 же? Сервер получает теже ответы что и я но у него из 3F 80 00 00 получается 1 а у меня нет )) Вариант преобразования на стороне контроллера не рассматриваю поскольку контроллер ограничен в ресурсах |
11.03.2018, 12:45 | #4 |
Senior Member
Регистрация: Apr 2008
Сообщения: 204
Благодарил(а): 1 раз(а)
Поблагодарили:
0 раз(а) в 0 сообщениях
|
Ответ: Modbus, float
Вопрос решился
byte[] buf = new byte[8]; // ответ контроллера 50 00 47 C3 (1 2 3 4 ) // в с# должен выгледить так ( 2 1 4 3) buf[0] = 0x00; buf[1] = 0x50; buf[2] = 0xc3; buf[3] = 0x47; float x = BitConverter.ToSingle(buf, 0); textBox3.Text = Convert.ToString(x); всем спасибо сча буду логику читать не закрывайте пока тему пож |
11.03.2018, 16:01 | #5 |
Senior Member
Регистрация: Apr 2008
Сообщения: 204
Благодарил(а): 1 раз(а)
Поблагодарили:
0 раз(а) в 0 сообщениях
|
Ответ: Modbus, float
остальное все получилось тему можно закрывать
|
21.03.2018, 12:07 | #6 |
Senior Member
Регистрация: Apr 2008
Сообщения: 204
Благодарил(а): 1 раз(а)
Поблагодарили:
0 раз(а) в 0 сообщениях
|
Ответ: Modbus, float
Пытаюсь изменить переменную Input status типа bool с адресом 3800h
команда 05 передавая значение FF 00 05 38 00 FF 00 получаю ощибку 85 85 38 00 FF 00 подскажите как задавать запрос на запись bool |
21.03.2018, 12:53 | #7 | |
Сотрудник Segnetics
Регистрация: Jan 2006
Адрес: Russia, SPb
Сообщения: 18 180
Благодарил(а): 15 раз(а)
Поблагодарили:
665 раз(а) в 607 сообщениях
|
Ответ: Modbus, float
Цитата:
2) Загрузить в него карту памяти http://forum.segnetics.com/showthread.php?t=2231 3) Посмотреть в логе лектуса, как всё должно работать __________________ Программа делает то что написал программист, а не то что он хотел. Добро всегда побеждает зло. Кто победил - тот и добрый. |
|
21.03.2018, 13:56 | #8 |
Senior Member
Регистрация: Apr 2008
Сообщения: 204
Благодарил(а): 1 раз(а)
Поблагодарили:
0 раз(а) в 0 сообщениях
|
Ответ: Modbus, float
лектус использует 15 команду на запись и она тоже не работает )
а команда 05 вобще поддерживается? Типы команд Modbus TCP Приведем таблицу с кодами функций чтения и записи регистров Modbus TCP. Код функции Что делает функция Тип значения Тип доступа 01 (0x01) Чтение DO Read Coil Status Дискретное Чтение 02 (0x02) Чтение DI Read Input Status Дискретное Чтение 03 (0x03) Чтение AO Read Holding Registers 16 битное Чтение 04 (0x04) Чтение AI Read Input Registers 16 битное Чтение 05 (0x05) Запись одного DO Force Single Coil Дискретное Запись 06 (0x06) Запись одного AO Preset Single Register 16 битное Запись 15 (0x0F) Запись нескольких DO Force Multiple Coils Дискретное Запись 16 (0x10) Запись нескольких AO Preset Multiple Registers 16 битное Запись он не реагирует не на ff 00 00 ff 00 01 01 00 ff ff вобщем ни как создается впечатление что команда одиночной записи койла не поддерживается Последний раз редактировалось kostkost, 21.03.2018 в 14:17 |
21.03.2018, 15:00 | #9 |
Сотрудник Segnetics
Регистрация: Jan 2006
Адрес: Russia, SPb
Сообщения: 18 180
Благодарил(а): 15 раз(а)
Поблагодарили:
665 раз(а) в 607 сообщениях
|
Ответ: Modbus, float
Прикрепите ваш проект, пожалуйста.
__________________ Программа делает то что написал программист, а не то что он хотел. Добро всегда побеждает зло. Кто победил - тот и добрый. |
21.03.2018, 15:26 | #10 |
Senior Member
Регистрация: Apr 2008
Сообщения: 204
Благодарил(а): 1 раз(а)
Поблагодарили:
0 раз(а) в 0 сообщениях
|
Ответ: Modbus, float
скинул
|
21.03.2018, 15:38 | #11 |
Сотрудник Segnetics
Регистрация: Jan 2006
Адрес: Russia, SPb
Сообщения: 18 180
Благодарил(а): 15 раз(а)
Поблагодарили:
665 раз(а) в 607 сообщениях
|
Ответ: Modbus, float
__________________ Программа делает то что написал программист, а не то что он хотел. Добро всегда побеждает зло. Кто победил - тот и добрый. |
21.03.2018, 15:40 | #12 |
Senior Member
Регистрация: Apr 2008
Сообщения: 204
Благодарил(а): 1 раз(а)
Поблагодарили:
0 раз(а) в 0 сообщениях
|
Ответ: Modbus, float
старую карту нажмите
там койлы 3с 00 |
21.03.2018, 15:44 | #13 |
Сотрудник Segnetics
Регистрация: Jan 2006
Адрес: Russia, SPb
Сообщения: 18 180
Благодарил(а): 15 раз(а)
Поблагодарили:
665 раз(а) в 607 сообщениях
|
Ответ: Modbus, float
Я ничего нажимать не буду. Вы должны были прислать тот проект, что загружаете, безо всяких "смотрите туда, не смотрите сюда".
Пришлите тот проект, с которым коннектитесь. Мне неинтересно испытывать то, что работает без проблем. Мне нужно найти вашу ошибку. Для этого мне нужен ваш проект. PS. Пишете койлы 3800h, теперь говорите 3C00h. Похоже я начинаю понимать вашу проблему. __________________ Программа делает то что написал программист, а не то что он хотел. Добро всегда побеждает зло. Кто победил - тот и добрый. |
21.03.2018, 15:50 | #14 |
Senior Member
Регистрация: Apr 2008
Сообщения: 204
Благодарил(а): 1 раз(а)
Поблагодарили:
0 раз(а) в 0 сообщениях
|
Ответ: Modbus, float
да похоже когда тестил 05 писал 3800
а когда перешел на 0F наал писать 3с 00 вобщем исправил 05 3с 00 ff 00 ставит в 1 05 3с 00 00 00 ставит в 0 сори если что |
21.03.2018, 15:57 | #15 |
Сотрудник Segnetics
Регистрация: Jan 2006
Адрес: Russia, SPb
Сообщения: 18 180
Благодарил(а): 15 раз(а)
Поблагодарили:
665 раз(а) в 607 сообщениях
|
Ответ: Modbus, float
Если бы вы с самого начала сделали по картинкам из моей ссылки, то и ошибку свою нашли бы быстрее.
__________________ Программа делает то что написал программист, а не то что он хотел. Добро всегда побеждает зло. Кто победил - тот и добрый. |