Как считать данные со счетчика Chint PD666 по протоколу Modbus-RTU
Мы столкнулись с тем, что инструкция в комплекте со счётчиком была не актуальна. Получив от производителя требуемую версию, нам удалось считать необходимые параметры со счетчика. Поэтому, в первую очередь, Вам нужно убедиться в актуальности документации на счетчик, так как адресация регистров Modbus для разных партий счетчиков Chint отличается. Для этого можно связаться с техподдержкой АйДи-Электро через вашего менеджера или запросить актуальную документацию в технической поддержке производителя Chint.
Когда актуальная документация под рукой, можно приступать к параметрированию счетчика и написанию программы для ПЛК. В самом счетчике достаточно настроить 2 параметра (коммуникационный адрес Addr и скорость передачи данных bAud). В нашем случае выставим Addr = 5 и bAud = 3 (9600 бит/c). Доступ к редактированию этих параметров появляется после корректного ввода пароля, указанного в инструкции. Обращаем внимание, что если пароль был введен неправильно, вы все равно попадете в нужное меню, но без возможности изменения параметров, при этом сообщений о некорректности введенного пароля счетчик не выдаёт.
В качестве тестового контроллера мы взяли только что появившиеся на рынке ПЛК System Electric SM-253 с средой программирования Codesys v3.5. Коммуникации через интерфейс RS-485 по протоколу Modbus RTU в данном ПЛК осуществляется с помощью библиотеки «Systeme-Electric_Modbus_V1.6.library», поэтому её необходимо импортировать в проект:
Для конфигурации порта в качестве ведущего устройства в данной библиотеке используется функциональный блок «mbus_ctrl». При активации данного блока порт будет включаться с заданными параметрами связи. Заполним данные функционального блока: Baud (скорость передачи данных = 9600 бит/c), Partity (проверка четности = 0), Timeout (время ошибки сети = 500 мс), выходу Error назначим переменную, в которую будет записываться код ошибки связи:
Чтобы опросить ведомое устройство будем использовать функциональный блок «mbus_msg», в котором заполним следующие параметры: Slave (адрес ведомого устройства = 5), RW (чтение/запись = 0 (чтение)), Addr (адрес регистра памяти счетчика, с которого начнется чтение = 38193), Count (количество слов, которые хотите считать начиная с заданного регистра =30), DataPtr (буфер данных в памяти ПЛК куда все запишется, для этого создали массив данных «write_buf» типа WORD), выходу Error назначим переменную, в которую будет записываться код ошибки опроса счетчика:
Чтобы определить нужный адрес регистра, необходимо открыть документацию на счетчик и найти адресацию параметров. В нашем случае прочитаем параметры, начиная с регистра 2000H. Данный регистр указан в 16-ричном формате, чтобы обратиться к нему, необходимо число 2000 перевести в десятичный формат = 8192 и прибавить к этому числу 1 = 8193, впереди поставить цифру 3, что будет сигналом счетчику о чтении данных. Получилось число 38193:
Для запуска функционального блока «mbus_msg» можно использовать положительный фронт переменной «Read_Slave», которую в свою очередь коммутируем с помощью таймеров. В примере получился опрос счетчика каждые 200 мс:
Данные (30 слов), начиная с 2000 адреса начнут записываться со счетчика в массив данных «write_buf». Обратите внимание, что в нашем случае каждый параметр состоит из 2 слов, комбинация которых должна представляться в формате с плавающей запятой (REAL). Причем, в данном случае, последовательность 2 слов одного параметра необходимо поменять местами, для правильного отображения. Для этого воспользуемся библиотекой «CAA Memory» и функциональным блоком «packwordstodword». Далее присвоим регистру памяти, где хранятся наши слова указатель на тип данных REAL и получим необходимый нам результат, переменная «Data_final» будет отображать параметр Uab:
Надеемся, что наш опыт будет вам полезен!
- Комментарии