1. Обязательно представиться на русском языке кириллицей (заполнить поле "Имя").
  2. Фиктивные имена мы не приветствуем. Ивановых и Пупкиных здесь уже достаточно.
  3. Не надо писать свой вопрос в первую попавшуюся тему - всегда лучше создать новую тему.
  4. За поиск, предложение и обсуждение пиратского ПО и средств взлома - бан без предупреждения. Непонятно? - Читать здесь.
  5. Рекламу и частные объявления "куплю/продам/есть халтура" мы не размещаем ни на каких условиях.
  6. Перед тем как что-то написать - читать здесь, а затем здесь и здесь.
  7. Не надо писать в ЛС администраторам свои технические вопросы. Администраторы форума отлично знают как работает форум, а не все-все контроллеры, о которых тут пишут.

Вопрос по программе в SCL. Обнуление данных в DB

ПЛК SIMATIC (S7-200, S7-1200, S7-300, S7-400, S7-1500, ET200)

Модератор: Глоб.модераторы

Ответить

Автор темы
Panic
здесь недавно
здесь недавно
Сообщения: 8
Зарегистрирован: 28 авг 2018, 12:20
Имя: Павел
Страна: Россия
Поблагодарили: 1 раз

Вопрос по программе в SCL. Обнуление данных в DB

Сообщение Panic »

Всем доброго времени суток! Курю тут программу одной установки и наткнулся на такие строки:

Код: Выделить всё

POKE_BLK(area_src := 16#84,
         dbNumber_src := 65,
         byteOffset_src := 0,
         area_dest := 16#84,
         dbNumber_dest := 66,
         byteOffset_dest := 0,
         count := 104);


%DB65.DBD0 := %DB65.DBD0 AND (%DB66.DBD0 XOR 16#FFFFFFFF);
%DB65.DBD4 := %DB65.DBD4 AND (%DB66.DBD4 XOR 16#FFFFFFFF);
//Идет перебор все двойных слов в DB
%DB65.DBD96 := %DB65.DBD96 AND (%DB66.DBD96 XOR 16#FFFFFFFF);
%DB65.DBD100 := %DB65.DBD100 AND (%DB66.DBD100 XOR 16#FFFFFFFF); 
Данные из DB65 копируются в DB66, затем данные в DB65 обнуляются с помощью побитовых операций. Но почему они обнуляются так заморочено? Можно например вот так написать:

Код: Выделить всё

%DB65.DBD0 := 0;
..
%DB65.DBD100 := 0;

И тут я начал беспокоится что в этом есть какой-то смысл. Вопрос такой - этот код (после POKE_BLK) используется для обнуления всех значений в DB или я что-то упускаю и есть какая-то заморочка?
Аватара пользователя

M3f
не первый раз у нас
не первый раз у нас
Сообщения: 386
Зарегистрирован: 31 янв 2017, 11:08
Имя: Николай
Благодарил (а): 8 раз
Поблагодарили: 122 раза

Вопрос по программе в SCL. Обнуление данных в DB

Сообщение M3f »

Panic, сложно сказать, не видя картины в целом.
Возможно, изначально так делалось под другую установку, где была иная обработка 65 и 66 блоков или для какого-либо теста, а потом перекачивало в вашу программу.
Но судя по коду, тот кто его писал знает функционал POKE_BLK, а значит мог обнулять такое количество двойных слов гораздо проще, через тот же POKE_BLK или FILL_BLK.
EPLAN Electric P8 Professional+ 2.7 HF1 11496 | TIA Portal Professional V17 Upd1 | Creo Parametric 4.0 M070
Аватара пользователя

Nicolayy
не первый раз у нас
не первый раз у нас
Сообщения: 318
Зарегистрирован: 14 фев 2014, 11:55
Имя: Николай
Страна: Россия
Благодарил (а): 16 раз
Поблагодарили: 72 раза

Вопрос по программе в SCL. Обнуление данных в DB

Сообщение Nicolayy »

Panic,

а точно значения битов в DB65 не обновляются с других устройств асинхронно циклу программы (с панели оператора, например)? просто выглядит всё так, что отслеживается фронт установки битов в TRUE (т.е. переход бита из FALSE в TRUE с использованием промежуточного буфера DB66 для хранения изначального значения бита), и затем бит фронта записывается туда же в DB65. для простого обнуления битов никто бы не стал такой ерундой заморачиваться, как мне кажется...

Автор темы
Panic
здесь недавно
здесь недавно
Сообщения: 8
Зарегистрирован: 28 авг 2018, 12:20
Имя: Павел
Страна: Россия
Поблагодарили: 1 раз

Вопрос по программе в SCL. Обнуление данных в DB

Сообщение Panic »

Так если отслеживать фронт, то какая разница как обнулять, так %DB65.DBD0 := 0; или так %DB65.DBD0 := %DB65.DBD0 AND (%DB66.DBD0 XOR 16#FFFFFFFF); ? Результат один и тот-же.

У меня есть теория что конструкция %DB65.DBD0 := %DB65.DBD0 AND (%DB66.DBD0 XOR 16#FFFFFFFF); изначально использовалась для сброса определенных битов в двойном слове по маске (вместо 16#FFFFFFFF стояло что-то другое), но потом, недолго думая, ее приспособили просто под обнуление двойных слов.

Я вообще тут более развернутый пост написал, но когда в очередной раз нажал предпросмотр, появилось окно входа на форум и весь мой текст похерился (когда залогинился). Теперь просто настроения нет повторять это. Надо не забывать привычку - пишешь пост - копируй в блокнот и сохраняй :ges_down:, сколько раз я повторно набирал сообщения из-за того, что черновик сбросился (особенно вконтакте).
Ответить

Вернуться в «Simatic TIA Portal»