|
Проблемы с панелями Weintek Всё о багах панелей Weintek |
|
Опции темы | Поиск в этой теме | Опции просмотра |
25.09.2012, 15:05 | #1 |
Сотрудник Segnetics
Регистрация: Jan 2006
Адрес: Russia, SPb
Сообщения: 18 017
Благодарил(а): 15 раз(а)
Поблагодарили:
655 раз(а) в 599 сообщениях
|
Разбор проблемы чтения input status панелью (решено)
Картинка номер один: "новая" карта памяти, неудачное чтение
Картинка номер два: "старая" карта памяти, удачное чтение Теперь словами. Панель по какой-то причине не может или не умеет считывать нужное количество переменных. Она пытается прочитать то количество переменных, которое целиком помещается в одно слово. А одно слово - это 16 битовых переменных. В итоге, вместо запроса на чтение трёх переменных она отправляет запрос на чтение 16 переменных. Т.к. в режиме "новой" карты объём памяти оптимизирован, то оставшиеся 13 переменных взять не от куда и поэтому контроллер отвечает флагом "общая ошибка". В режиме же "старой" карты, в памяти контроллера безусловно выделяется буфер на 1024 переменные. В результате при запросе 16 переменных контроллер отдаёт требуемое количество вне зависимости, использована ли эта память в программе или нет. Решение проблемы: нужно объявить в программе 16 переменных, пусть и не все из них будут использоваться. Рисунок три. __________________ Программа делает то что написал программист, а не то что он хотел. Добро всегда побеждает зло. Кто победил - тот и добрый. |
25.09.2012, 16:40 | #2 |
Сотрудник Segnetics
Регистрация: Sep 2011
Сообщения: 129
Благодарил(а): 0 раз(а)
Поблагодарили:
0 раз(а) в 0 сообщениях
|
Ответ: Разбор проблемы чтения input status панелью
Добавлю.
При создании модбас сервера для 2Gi мы руководствовались документом http://www.modbus.org/docs/Modbus_Ap...ocol_V1_1b.pdf в котором на странице, например, 13/51 имеется диаграмма (Figure 11) для проверки валидности запроса (см. в аттаче). Там есть такая проверка: Starting Address + Quantity of outputs == OK, т.е. мы считали, что если у контроллера запрашивают больше данных чем у него есть, то возвращаем ExceptionCode2. В примере Fasterа панель запрашивает 16 битовых переменных и поскольку столько данных у нас нет, то 2Gi возвращает ошибку 0x81 0x02. Последний раз редактировалось Arsie, 12.09.2017 в 12:46 |
27.11.2017, 12:59 | #3 |
Новичок
Регистрация: Apr 2012
Адрес: Санкт-Петербург
Сообщения: 13
Благодарил(а): 0 раз(а)
Поблагодарили:
0 раз(а) в 0 сообщениях
|
Ответ: Разбор проблемы чтения input status панелью
Добрый день.
Подтверждаю. При выборе битовых типов 0x/1x панель запрашивает по 16 битовых регистров в одном запросе. Если слейв не может предоставить все 16 битов, он возвращает ошибку. Лучшим решением здесь, на мой взгляд, является дополнение карты адресов контроллера, как предлагает Arsie. Таким образом уменьшается трафик за счет уменьшения количества запросов. Но, есть еще одно решение: Используйте тип регистра 0x_single_Bit/1x_single_Bit. В этом случае запрашивается только один конкретный бит. |
Опции темы | Поиск в этой теме |
Опции просмотра | |
|
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
SMH-2010 проблемы подключения (решено) | spec_yug | Вопросы о SMH2010 | 5 | 25.03.2016 09:27 |