Всем дорого дня суток!
Кто-нибудь сталкивался с задачей просмотром уровня топлива на СПК105 (или подобном) с использованием датчиков уровня топлива по RS485? Датчики работают по такому интерфейсу.
Вид для печати
Всем дорого дня суток!
Кто-нибудь сталкивался с задачей просмотром уровня топлива на СПК105 (или подобном) с использованием датчиков уровня топлива по RS485? Датчики работают по такому интерфейсу.
данный датчик работает по Modbus. Вы можете его опрашивать как стандартными средствами кодесис, так и библиотеками нашими. список регистров должен быть указан в документации к датчику.
датчик я опрашивать научился, но проблема с выдачей данных. Датчик настроен выдавать показания в литрах. А принимать правильно показания я не научился. В зависимости от выбранного типа переменой, показания очень сильно отличаются друг от друга и от того, что должен показывать в реале датчик.
Может надо преобразовывать переменные из одного типа в другой чтоб получить желаемый результат?
Прочитайте внимательно инструкцию к датчику, там есть описание протокола Modbus. Показания в литрах являются переменной Float, которую СПК 105 без преобразования не понимает. Вам необходимо считать два регистра в которых находится нужные Вам данные и преобразовать их в REAL.
Вложение 16886
на этом изображении видно, что код функции 4 - это я настроил в модбас слэйве, адрес 0х00 я записал в регистре рид в сдвиге, длину оставил 1. В сотнесении входов/выходов задал переменную, которой присвоил тип real. После этого я запускаю логин и старт и мне отображается значение 2304295Е-41. Если я меняю тип переменной на WORD, тогда значения пляшут в диапазоне от 13557 до 17096 (соответственно пустой и полный бак). Я пока не понимаю как я должен считать эти два регистра. Подскажите, пожалуйста. Может есть какой-то пример, который я не видел.
Формат REAL занимает 2 регистра, поэтому сдвиг надо ставить не 1 а 2. Во вложении пример преобразования значений в формат REAL. Установи только адрес устройства и скорость обмена. Будут вопросы пиши в личку.
Хотел еще попросить совета - при подключении СПК и датчиков вместе, СПК не открывает COM порт. А при подключении к компьютеру - все отлично работает. Может посоветуете где можно почитать. А то не вариант при каждом включении подключать компьютер.
Выложи свой проект, я посмотрю настройки, и еще при загрузке СПК зайди в конфигурацию и посмотри какой интерфейс у тебя выбран для порта 485 или 232
_Mikhail, проект я выложу, но завтра (сегодня не получится). Я немного вышел из ситуации - я прописал (точнее списал из примера) код для программного поднятия порта. Но так как у меня сейчас подключено только два датчика из 20 запланированных, я прописал код только для трех (когда написал для двух - не работало). И пока все работает. Все 20 датчиков подключу наверное не скоро. Еще хотел спросить - можно ли сделать так, что если какое-либо Slave устройство (датчик) отключается в процессе работы или оказывается неисправным, привязать эту ошибку, например, к переменной, чтобы я эту переменную мог привязать к изменению цвета на кнопке.
Проект еще не доработан, т.к. я уже писал, что не все датчики подключены.
и еще описание датчика.
Как я понял - надо создать новый к***** в котором код будет "запись и чтение 4", адрес будет 0х2200, сдвиг - 1. А дальше я пока ничего не понял.
почему-то канал в ****
В Slave_com необходимо добавить еще один к***** который и будет считывать ошибку, я правильно понял?
Михаил, я так сделал. Но в этом случае СПК и датчик показывают ошибку при условии что с датчиком какие-то проблемы (может с частотой что-то и т.д.). А когда я принудительно отключаю один датчик, эта переменная никаких ошибок не выдает - значение датчика "замерзает", значение переменной остается "0". При запуске на компьютере видно, что такой Slave_com не работает (рядом загорается красный треугольник). Я хотел бы чтоб как-нибудь можно было увидеть это и на экране СПК. Я заметил, что при программном поднятии порта при режиме онлайн значение (в моем случае) Modbus_COM_Port_2.xError меняется с TRUE на FALSE и наоборот. Я думал что можно это использовать для отображения этой информации на СПК. Если я не прав - поправьте меня, пожалуйста.
Всем спасибо кто помогал мне в решении этой задачи!!! Все работает!!! Но есть одна очень неприятная проблема - при срабатывании какого-нибудь оборудования (не относящегося к моей системе) все slave "выскакивают" и обратно подключаются не все. По монтажу все проверили, поставили фильтр. Ничего не помогает. Может есть какие мысли, поделитесь?!
Это вообще выполнимая задача?