Страница 3 из 5 ПерваяПервая 12345 ПоследняяПоследняя
Показано с 21 по 30 из 47

Тема: Modbus TCP и ретентив

  1. #21

    По умолчанию

    Цитата Сообщение от RASP Посмотреть сообщение
    Также и в CODESYS никто не использует периферийные адреса. Для этого есть обычные глобальные данные.
    Да я бы с удовольствием их бы и не использовал, но CODESYS привязал протокол модбас к периферийной области памяти. Из за чего невозможно тогда с ним нормально работать.
    Какой смысл вообще тогда в реализации 3й функции в CODESYS, если прочитать можно то, и только то, что было записано 6й функцией?
    Последний раз редактировалось @ND; 08.02.2016 в 07:53.

  2. #22

    По умолчанию

    Цитата Сообщение от RASP Посмотреть сообщение
    Господа из Siemens просто ввели всех в заблуждение. Области памяти IW,QW пришли из S5, где была жесткая адресация от положения модуля. В S7 свободная адресация, поэтому , пока входной модуль не привязан к конкретному адресу он свободен и в него можно записывать. Это было сделано для конвертации программ.
    Это называется асинхронный метод опроса физических входов.
    Механизм характеризуется запросами к физическим входам (PIW) независимо от запроса к области процесса (IW). Обычно запросы к (PIW) осуществляются периодически в собственной задаче опроса отдельно взятого контроллера и блоками по несколько сигналов. При этом запросом к (IW) возвращается значение, полученное последним сеансом связи с (PIW). С помощью этого метода можно обеспечить оптимизацию временного ресурса, затраченного на один сигнал, и тем самым увеличить максимальное количество опрашиваемых сигналов за интервал времени опроса.

    В качестве примера рассмотрим промышленный ПЛК Siemens S7-315 при опросе его по шине Profibus (1,5 Мбит/с). Среднее время обработки MPI-запроса этим контроллером составляет 30 мс. Если использовать синхронный механизм для каждого сигнала, т.е. один запрос на каждый сигнал, то в течении одной секунды мы сможем получить около 33 сигналов. А если применить асинхронный механизм, т.е. в одном MPI-пакете получать до 220 байт или 110 сигналов целочисленного типа на 16-разрядов, то мы сможем за одну секунду получить до 3630 сигналов. Как можно видеть, эффективность асинхронного механизма в данном случае составляет 110 раз, а именно значение максимальной ёмкости MPI-пакета.

    Недостатком асинхронного механизма является то, что запрос значения атрибута параметра возвращает не актуальное на момент запроса значение, а значение последнего сеанса опроса контроллера. Впрочем, если учесть, что источник данных может обновляться с периодичностью аппаратных ограничений АЦП, да и сами датчики могут иметь определённые ограничения в скорости реакции, то применение асинхронного механизма сбора может иметь серьёзные основания, а не потому, что это необходимо для какой то там конвертации.
    Последний раз редактировалось @ND; 08.02.2016 в 07:21.

  3. #23

    По умолчанию

    Как я и говорил Siemens всех запутал. Есть PII, PIO, PIW, IW, OW, MW, DB, TEMP. Физические входа/выхода и области операндов(куда входят и образы процессов) не одно и тоже.
    Впрочем разговор о CODESYS. Как я понял речь идет не локальной периферии, а о удаленной периферии или передачи данных по сети. И речь идет о CODESYS 3. Если честно не совсем понял, почему Вы используете IW и QW, а не хотите подключить например массив. Функции 3 и 16 (если речь идет о Modbus) позволяют за один цикл опрашивать больше 220 байт, а скорость по Modbus TCP может быть больше 1,5 Мбит/с. Впрочем если Вы любите Profibus, есть много достойных фирм у которых контроллеры работают на CODESYS и при этом есть эта достойнейшая сеть (от которой сам Siemens уже много лет пытается отойти). Лично мне гораздо больше нравится EtherCat, CAN, Modbus TCP, TCP/IP. Кстати, в CODESYS можно не использовать для работы с сетями "конфигуратор", а работать с сетевыми библиотеками напрямую, с помощью библиотек, через буферы обмена и даже лепить свои собственные протоколы.
    По поводу семафора:
    Семафо́р — объект, ограничивающий количество потоков, которые могут войти в заданный участок кода.
    Это к тому, что одновременный доступ из нескольких мест к переменной, с возможностью записи, является очень плохим вариантом решения задачи.

  4. #24
    Пользователь
    Регистрация
    19.11.2011
    Адрес
    г. Белгород
    Сообщений
    357

    По умолчанию

    Цитата Сообщение от @ND Посмотреть сообщение
    Не совсем понял идею.

    Собственно что мне нужно:

    Смотреть, менять значения уставок по месту (на СПК207)
    Смотреть, менять значения этих же уставок с верхнего уровня (ВУ).
    И что бы значения уставок сохранялись при выключении/включении контроллера.
    (ВУ) хочет читать уставку и записывать её по одному адресу регистра хранения.
    Читать уставку (ВУ) будет периодически, записывать непосредственно один раз при вводе/изменению.


    Как это реализовать на СПК207, я пока не вижу, наверное это невозможно.
    . Организуем слэйв для уставки из верхнего уровня (далее ВУ).
    . Заводим глобальную переменную для уставки по месту (далее "переменная по месту").
    . Заводим глобальную рабочую переменную текущей уставки, которая будет использоваться в программе.

    При первом старте:
    . ПЛК читает уставку из файла.
    . записываем прочитанную уставку в слэйв ВУ и в переменную по месту.

    Делаем ФБ
    входы:
    . уставка ВУ
    . уставка по месту

    вместо выхода используем глобальную переменную (или VAR_IN_OUT):
    . уставка текущая

    ФБ на свои входы получает уставки из двух мест и контролирует их изменение.
    1. Уставку по месту постоянно сравниваем с текущей (рабочей). Если изменилась, то присваиваем ее значение текущей и в слэйв ВУ.
    2. Если изменилась уставка ВУ, то присваиваем ее значение текущей (рабочей).
    Для того, чтобы менять уставку по месту используем переменную уставки по месту, а для отображения по месту используем текущую (рабочую).

    Если проверяем изменения именно в таком порядке, то приоритет имеет уставка от ВУ.

    После каждого изменения текущей (рабочей) уставки сохраняем значения в файл. Из него данные будут читаться при включении ПЛК (вместо РЕТАИН).

  5. #25

    По умолчанию

    . записываем прочитанную уставку в слэйв ВУ и в переменную по месту.
    Всё бы хорошо, да только есть одна проблема!

    111.png

    Как я уже говорил выше, не получается записывать значения в область памяти %I, хоть через соотнесение переменных, хоть напрямую!
    Вот он корень зла!!!
    Последний раз редактировалось @ND; 09.02.2016 в 06:59.

  6. #26

    По умолчанию

    Цитата Сообщение от RASP Посмотреть сообщение
    Если честно не совсем понял, почему Вы используете IW и QW, а не хотите подключить например массив. Функции 3 и 16 (если речь идет о Modbus) позволяют за один цикл опрашивать больше 220 байт, а скорость по Modbus TCP может быть больше 1,5 Мбит/с.
    А какая разница?
    Я всё равно не могу записать значение из программы контроллера, хоть в %IW, хоть в соотнесённую переменную.
    И потом, так же без разницы, что ты будешь обрабатывать в программе 10 шт IW, или 10 шт переменных массива.
    Последний раз редактировалось @ND; 09.02.2016 в 10:30.

  7. #27
    Пользователь Аватар для capzap
    Регистрация
    25.02.2011
    Адрес
    Киров
    Сообщений
    10,225

    По умолчанию

    а что там получается если объявить foo AT %IW500 : WORD;
    а в проге aa[3]:=foo; добавить вместо прямого присваивания области IW и еще как себя ведет если aa[3]:=aa[0]; в окне слейва тоже ни чего не отображается?
    Bad programmers worry about the code. Good programmers worry about data structures and their relationships

    среди успешных людей я не встречала нытиков
    Барбара Коркоран

  8. #28

    По умолчанию

    Цитата Сообщение от capzap Посмотреть сообщение
    а что там получается если объявить foo AT %IW500 : WORD;
    а в проге aa[3]:=foo; добавить вместо прямого присваивания области IW и еще как себя ведет если aa[3]:=aa[0]; в окне слейва тоже ни чего не отображается?
    Получается вот так:

    2016-02-10_081627.png

    если я в foo ничего не могу записать, то нет тогда ни какого смысла её кому то присваивать.


    В окне слейва, что я выкладывал на предыдущем скрине как раз значения отображаются, но реально там нули, я же показывал.

    А ещё пробовал вот так:
    2016-02-10_084316.png
    Последний раз редактировалось @ND; 10.02.2016 в 06:45.

  9. #29

    По умолчанию

    Вернулся к проблеме:

    Попробовал вот так:
    1.png

    Всё равно не получается.
    Как работать с уставками записываемых по модбас?
    Как сделать так, чтоб они сохранялись при вкл/выкл контроллера?

    Наверняка кто то в своих проектах это решал.
    Вложения Вложения

  10. #30
    Пользователь
    Регистрация
    23.09.2008
    Адрес
    Центророссийск
    Сообщений
    2,318

    По умолчанию

    При надежде на ретайн.

    x_где_то_в_слейве : тип;
    Код:
    var retain
     x : тип;
    end;
    var
     init : bool;
    end;
    ------------------
    if not init then
      init := true;
      x_где_то_в_слейве := x;
    end_if
    x := x_где_то_в_слейве;
    Все. Работаем с x_где_то_в_слейве

Страница 3 из 5 ПерваяПервая 12345 ПоследняяПоследняя

Похожие темы

  1. Modbus (Master) не отображается в память Modbus (Slave)
    от ghoch в разделе Помощь Разработчикам
    Ответов: 3
    Последнее сообщение: 07.05.2018, 09:40
  2. ПЛК160: Modbus TCP Master и Modbus TCP Slave одновременно.
    от Антон Костюченко в разделе ПЛК1хх
    Ответов: 10
    Последнее сообщение: 18.07.2016, 10:36
  3. Modbus Universal MasterOPC сервер или Lectus MODBUS OPC?
    от Olegis в разделе Master SCADA 3
    Ответов: 11
    Последнее сообщение: 05.04.2013, 09:35
  4. Ответов: 4
    Последнее сообщение: 18.09.2012, 22:16
  5. Ответов: 5
    Последнее сообщение: 14.10.2010, 14:42

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •