Когда происходит обмен с WinCC в цикле контроллера?
Иван Жуков; 26.3.03

Приветствую!


кто-нибудь знает, в какие моменты времени происходит запись данных в DB из WinCC? Ситуация такая: Есть блок DB1, к которому привязаны теги WinCC. Этот блок для обработки копируется в другой блок DB2, после того как обработка завершена, содержимое DB2 копируется обратно в DB1. Манипуляции с копированием и обработкой производятся в FC, вызываемой из OB1. Не спрашивайте, зачем это нужно - долго объяснять - говоря кратко, это делается для экономии памяти. Так вот: может ли оказаться так, что пока данные блока DB1 находятся в DB2, в этот момент вклинится обмен с WinCC, который обновит DB1, после чего DB2 будет скопировано обратно в DB1, при этом обновления сделанные WinCC в DB1 _БУДУТ_ЗАТЕРТЫ_?

Re: Когда происходит обмен с WinCC в цикле контроллера?
Чистяков Дмитрий "СеверСталь"; 26.3.03

WinCC использует прямой доступ коммуникационного процессора контроллера к памяти в CPU. Таким образом образуется свой цикл, который примерно равен циклу обмена по сети или (если мало данных) циклу, установленному на обновление тэгов.

Таким образом достигается асинхронная работа системы управления (контроллер) и системы визуализации. Что в свою очередь увеличивает надёжность этих систем по раздельности за счёт независимости одной подсистемы от другой.
Re: Когда происходит обмен с WinCC в цикле контроллера?
Иван Жуков; 28.3.03

Это плохо. И нет никакого способа ввести синхронизацию - т.е. программно со стороны контроллера регулировать доступ извне к его памяти? Хотелось бы, чтобы WinCC производила обмен не когда попало, а откладывала его до определенного момента (допустим пока не установлен какой-то бит). Такой возможности нет?


Второй вопрос: как работает процессор контроллера S7-300 - предположим я делаю операцию AND на каком-то байте в памяти, это будет операция атомарная? Т.е. может ли этот байт быть измененен внешним обменом с WinCC до окончания операции AND?

Re: Когда происходит обмен с WinCC в цикле контроллера?
Илья; 1.4.03

Есть разница в коммуникациях S7-300 (кроме 318 CPU)и S7-400. В 300 все коммуникации - по завершению цикла. В 400 коммуникации вклиниваются в выполнение программы. Бывает ситуация, когда народ пишет FB по обработке чего-либо и в параметр RESULT_VALUE пишет промежуточные значения. Этот параметр привязывается к тэгу WinCC. В результате у оператора периодически вылезают дебильные значения в этом тэге.

Re: Когда происходит обмен с WinCC в цикле контроллера?
Чистяков Дмитрий "СеверСталь"; 1.4.03

Ну, решается-то эта задача достаточно просто.

1. Создаём два DB.
2. Один DB используем в программе контроллера.
3. Другой для приёма данных из WinCC
4. А в конце (или начале) скана пересылаем один DB в другой при помощи SFC20.


Re: Когда происходит обмен с WinCC в цикле контроллера?
Илья; 7.4.03

Ну, наверное, лучше использовать SFC81 - она все-таки непрерываемая... А еще лучше читать книжечки, которые приходят с CPU - там написано КАКИЕ SFC-шки НУЖНО использовать в ДАННОМ цпу. Вот...