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

SD карта для S7-1200

ПЛК SIMATIC (S7-200, S7-1200, S7-300, S7-400, S7-1500, ET200)
Ответить

Автор темы
Igoro-fil6567
здесь недавно
здесь недавно
Сообщения: 2
Зарегистрирован: 10 апр 2018, 14:03
Имя: Игорь

SD карта для S7-1200

Сообщение Igoro-fil6567 »

Очень интересует вопрос: можно ли увеличить энергонезависимую память DB блоков с помощью SD карты. Без неё у контроллера, например S7-1217c, выделено всего 10кБайт. А надо вести архив полугодичный объёмом 30кБайт?

Михайло
почётный участник форума
почётный участник форума
Сообщения: 3558
Зарегистрирован: 10 ноя 2009, 04:58
Имя: Толмачев Михаил Алексеевич
город/регион: г. Чехов, МО
Благодарил (а): 6 раз
Поблагодарили: 253 раза

SD карта для S7-1200

Сообщение Михайло »

10 кБайт у всех ЦПУ и никак не увеличить. На SD-карту вроде можно выгружать рецепты и логи, но это процедура не на уровне "поставить галочку retain, использовать ячейку для хранения как обычный бит или байт", это делается через процедуру выгрузки файла и т.п.

Автор темы
Igoro-fil6567
здесь недавно
здесь недавно
Сообщения: 2
Зарегистрирован: 10 апр 2018, 14:03
Имя: Игорь

SD карта для S7-1200

Сообщение Igoro-fil6567 »

спасибо за подсказку - нашёл в расширенных инструкциях команду DataLogCreate. В хелпе про неё сказано, что лог создаётся на Sd карте или во внутренней памяти в соответствующем каталоге. Из хелпа следует, что по умолчанию лог создаётся на SD карте, если она есть?

Михайло
почётный участник форума
почётный участник форума
Сообщения: 3558
Зарегистрирован: 10 ноя 2009, 04:58
Имя: Толмачев Михаил Алексеевич
город/регион: г. Чехов, МО
Благодарил (а): 6 раз
Поблагодарили: 253 раза

SD карта для S7-1200

Сообщение Михайло »

Карта памяти расширяет встроенную flash-память и (я так думаю) считается её неразрывной частью. Или таки заменяет её, как считаете вы?
Аватара пользователя

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

SD карта для S7-1200

Сообщение Nicolayy »

Igoro-fil6567 писал(а): 10 апр 2018, 14:18 Очень интересует вопрос: можно ли увеличить энергонезависимую память DB блоков с помощью SD карты. Без неё у контроллера, например S7-1217c, выделено всего 10кБайт. А надо вести архив полугодичный объёмом 30кБайт?
Ничего не надо увеличивать. Там и так встроенная флешка на несколько мегабайт (не помню сколько у 1217C, помню, что 1215C - 4 Мб). Архив нужно вести в обычный DB без Retain. При выключении питания значения надо скидывать на флешку функцией WRIT_DBL.

Vitaliy_A
новенький
новенький
Сообщения: 1
Зарегистрирован: 04 фев 2019, 10:23
Имя: Виталий
Страна: Россия
Благодарил (а): 1 раз

SD карта для S7-1200

Сообщение Vitaliy_A »

Nicolayy, день добрый. Вы имеете ввиду при ручном выключении питания предварительно "ручками" запускать функцию копирования DB в Load memory? Или есть какой-то программный триггер, который запускается при отключении питания CPU?
Аватара пользователя

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

SD карта для S7-1200

Сообщение Nicolayy »

Vitaliy_A, честно говоря, я такого триггера не знаю. Я использовал на одном из объектов флешку для сохранения больших групп параметров (т.н. рецептов), а они сохранялись по нажатии соответствующей кнопки на панели после того как таблица рецепта заполнена оператором. Касательно Вашей задачи, я не вижу проблемы, чтобы просто завести напрямую с блока питания на дискретный вход контроллера сигнал, по которому и отслеживать предстоящее выключение ПЛК.

Еще могу добавить, что там есть две функции - WRIT_DBL и READ_DBL (соответственно, запись на флешку и чтение с нее). Так вот, с WRIT_DBL вообще никаких проблем не было, а вот READ_DBL у меня работала очень косячно, т.е. при тестировании на небольших объемах данных всё работало хорошо, но при чтении больших массивов происходили какие-то необъяснимые глюки - то, условно, из 100 чисел 99 считывало нормально, а какое-нибудь одно - не считывало, ну что-то типа того. Причем, всё достаточно хаотично было (иногда вообще всё нормально считывалось, перезагружаешь ПЛК - с ошибками считывается, еще раз перезагружаешь - опять всё нормально). Я сначала и не знал, что конкретно не так работает (думал, может это WRIT_DBL неправильно сохраняет что-то). Короче говоря, потом выяснилось, что функцию READ_DBL вообще не надо использовать, там как-то автоматически (к сожалению, я уже не помню как именно) при включении ПЛК с флешки всё копируется в нужный DB, т.е. нужно только сохранять данные через WRIT_DBL и всё.
Аватара пользователя

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

SD карта для S7-1200

Сообщение Nicolayy »

Ну, в общем, если кому-то понадобиться сохранять что-то на флешку.

Чтобы сохранить значения дата-блока в память, а потом чтобы значения автоматически загрузились при включении PLC, не нужно вообще использовать функцию READ_DBL. Значит так: создаете Data Block, в нём обязательно НЕ должна стоять галочка "Only store in load memory". Значения хранятся без Retain. В общем, в каждом цикле вызываете функцию WRIT_DBL, где в качестве SOURCE и DESTINATION указываете ОДИН И ТОТ АДРЕС в этом DB, например,

if(#is_Busy) then #is_Save := false; end_if;
#Code := WRIT_DBL(REQ := #is_Save, SRCBLK := "Temp_DB".Value1, SRCBLK := "Temp_DB".Value1, BUSY => #is_Busy);
#is_Save := false;

Бит запроса (REQ) нужно устанавливать только один раз, потом уже надо просто вызывать функцию с REQ = false, поэтому бит is_Save сразу надо обнулять.

В переменную #code возвращается код "ошибки" судя по инструкции, но на самом деле не только ошибки там возвращаются, т.е. при первом цикле с REQ = true будет возвращаться значение 16#7001 (First call with REQ = 1: Data transfer triggered; BUSY has the value "1"), при последующих циклах будет возвр. 7002 (Intermediate call (REQ 
irrelevant): Data transfer already active; BUSY has the value "1"), а после завершения записи на флешку - 7001 (First call with REQ = 0: No data transfer active; BUSY has the value "0").

И всё. На первом цикле PLC сохраненные значения будут автоматически загружаться, READ_DBL вызывать не надо.

Ну, и еще нужно помнить, что функцию можно вызывать несколько раз одновременно, т.е.

#Code :=WRIT_DBL(REQ := #is_Save, SRCBLK := "Temp_DB".Value1, SRCBLK := "Temp_DB".Value1, BUSY => "is_Busy");
#Code :=WRIT_DBL(REQ := #is_Save, SRCBLK := "Temp_DB".Value2, SRCBLK := "Temp_DB".Value2, BUSY => "is_Busy");
#Code :=WRIT_DBL(REQ := #is_Save, SRCBLK := "Temp_DB".Value3, SRCBLK := "Temp_DB".Value3, BUSY => "is_Busy");
"is_Save" := false;

Но если сделать сразу слишком много вызовов (раз 100, наверное), то может возникнуть ошибка 16#80C3. Честно говоря, я не заметил, чтобы эта ошибка как-то влияла на успешность сохранения, т.е. всё вроде бы и даже с ней нормально сохранятся, но лучше, наверно, всё-таки стараться так делать, чтобы такой ситуации не возникало. Еще странно, что в инструкции написано для 80C3 - Note: This error code is only for S7-1500 CPUs, почему так написано, не очень понятно, потому что на S7-1200 она также вылазит.

И еще можно сразу весь Data Block отправлять на сохранение, а не отдельные переменные:

#Code :=WRIT_DBL(REQ := #is_Save, SRCBLK := "Temp_DB", SRCBLK := "Temp_DB", BUSY => "is_Busy");

Теперь касательно того, что нужно что-то сохранить не по нажатию какой-то кнопки или по событию, а при отключении электропитания. Тут есть такой нюанс, что времени на сохранение может и не хватить. Например, у меня 6 секунд вот сохраняются значения, хотя их там достаточно много (DB на 60 кб), для такого случая нужно что-то мутить с ИБП, например, конденсаторного типа, который позволит сохранять контроллер во включенном состоянии секунд 20 после пропадания питания.
Ответить

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