Имеется контроллер фирмы Advantech5510/TCP(подключенные модули - ADAM-5017, ADAM-5050).
Через утилиту ADAM-5510 SeriesUtilityсвязь с контроллером есть.
При настройке IPадреса указываю статический IP. В документации по настройке IPнеобходимо указывать Gateway и DNS.
Подскажите, пожалуйста, что именно писать в этих полях. До настоящего времени ничего не указываю. По IP адресу он пингуется.
Далее я создаю проект на SCADA Citect 6.0. SCADAдолжна иметь связь с модулями данного контроллера по протоколу MODBUSчерез TCP/IP. При запуске проекта, SCADAмодули невидит. Обращалась за помощью к поставщикам SCADA – в проекте все настройки верны.
Пожалуйста, подскажите, как правильно настроить данный контроллер для работы по TCP/IP.
Заранее благодарна за ответ.
Оксана.
Здравствуйте!
Извините, но мне кажется, что ADAM-5510 не поддерживает аппаратно протокол modbus.
Для этого существует ADAM-5511
Первоначально опубликовано adam
Здравствуйте!
Извините, но мне кажется, что ADAM-5510 не поддерживает аппаратно протокол modbus. Для этого существует ADAM-5511
Зато поддерживает "программно"
Для Модбас TCP есть библиотека MBTCPх.LIB. Смотрите примеры, которые при установки утилит ставятся.
Должен быть инициализирован сервер Modbus TCP функцией ADAMTCP_ModServer_Create.
Gateway - это то же, что маска подсети. Обычно 255.255.255.0
DNS server - ничего не указывайте или указывайте тот, который у вас в сети установлен.
Спасибо большое за ответы.
Нашли пример программы (из тех, которые при установке утилит поставились). Теперь её дописываем.
Только не совсем понятно как обращаться к памяти при записи данных. SCADA обращается к контроллеру по Modbus адресам (в частности, у нас стоит в слоте "0" модуль 5017(адреса 40001-40008)).
В свою очередь программа на контроллере считывает данные с модуля и записывает их в адресное пространство, которое будет доступно клиентам по протоколу Modbus/TCP.
На форуме уже обсуждалась эта тема - всё понятно, кроме того, как всё же обращаться к памяти, указатель на которую передаётся в функции ADAMTCP_ModSrever_Create(502,5000,20,(unsigned char *)Share_Mem,sizeof(Share_Mem))).
Будем выяснять на практике как оно на самом деле.
Первоначально опубликовано Oksana
На форуме уже обсуждалась эта тема - всё понятно, кроме того, как всё же обращаться к памяти, указатель на которую передаётся в функции ADAMTCP_ModSrever_Create(502,5000,20,(unsigned char *)Share_Mem,sizeof(Share_Mem))).
Как к обычному массиву, например Share_Mem[10]
Да, обращение как к массиву.
Например, прочитали значение с нулевого канала модуля аналогового ввода и теперь необходимо поместить это значение в память, чтоб затем SCADA считала его по адресу 40001.
Как узнать по какому индексу массива Share_Mem[] обратиться, чтобы значение было записано именно по этому адресу?
В комментарии их программы написано следующее Share_Mem[0]= LocalDIO;// Write to adress 40001
Получается, что для записи значений 0-7 каналов модуля необходимо записывать в массив по индексам Share_Mem[0] - Share_Mem[7], что будет соответствовать адресам 40001-40008.
Далее, если у нас появиться ещё один модуль в слоте «1», то у него будет уже другой диапазон Modbus-овских адресов. Какой же тогда диапазон индексов массива будет соответствовать диапазону его адресов?
Share_Mem[0]- 400001,
Share_Mem[1]- 400002,
Share_Mem[2]- 400003,
и т.д.
Попробовали записывать в массив по индексам Share_Mem[0] - Share_Mem[7] (соответствие адресам 40001-40007) - всё получилось.
Осталось проверить чтение значений с дискретных входов.
Спасибо за помощь.
Share_Mem[0]= LocalDIO;// Write to adress 40001
А каким образом записывать и получать данные по адресам 10001 30001 00001?
Вы не можете публиковать новые темы в этом форуме Вы не можете отвечать на сообщения в этом форуме Вы не можете удалять Ваши сообщения на этом форуме Вы не можете редактировать Ваши сообщения на этом форуме Вы не можете создавать голосования на этом форуме Вы не можете выражать своё мнение в голосованиях на этом форуме