Сообщество - Лига КИПиА
Добавить пост

Лига КИПиА

14 постов 216 подписчиков
8

Плк аллен бредли

имеется такой зверь на производстве

Плк аллен бредли Плк, Производство, Plc, КИПиА, Автоматизация, АСУ ТП, Длиннопост

как у него заменить батарейку.

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

подскажите как действовать, те кто знаком с аллен бредли этой серии.

Показать полностью 1
10

КИП, прошу помощи

Всем привет, ребят.Пост без рейтинга. Нужна помощь.

Объект-предприятие, выпускающее мясо (свинину). На предприятии стоит септик. Стоит установка, очищающая сточные воды. Установка управляется в автоматическом режиме с помощью реле easy 819 с дополнительным блоком 618.

то-ли из за глюка, то-ли из за саботажа предыдущего киповца (деньги платили вовремя, но киповец был пойман на неоднократном обмане и саботаже (оплата сдельная) пришлось разорвать с ним отношения. если кому интересно, саботировал работу он посредством gsm блока, из которого вовремя не вытащили сим карту... и вот результат) на изи сбросились настройки. Периферия установки исходя из схемы: два погружных насоса, два дозировочных насоса, центробежный насос, мотор-редуктор, две мешалки. я-штатный электрик, работаю недавно.но в принципе могу запрограммировать изи. схема есть, вся предельно ясна. но я не знаю технологию, что в какой момент должно включаться. есть ли хоть какой-то шанс, что у меня получится установку запустить? есть ли у кого-то инфа, как вообще работают такие установки?каков принцип работы? с погружными насосами вопросов нет, изи по расписанию включал их по ночам, ориентируясь на поплавки. но вот все остальное пока что для меня загадка.. на готовую инфу не надеюсь, хотя бы подскажите в какую сторону копать.
предприятие хорошее, людей не обманывают.директор, мне не друг, но он по моему мнению очень хороший человек , и я хотел бы ему помочь. периодически приезжает проверка, берут воду на анализ. возможны огромные штрафы. очень хочется разобраться. всем заранее огромное спасибо))

18

Работа

Доброго времени суток, пикабутяне.
Если кто ищет работу слесарем КИПиА (прибористом), есть предложение.
Работа в ХМАО, вахтовым методом 30х30, обслуживание объектов нефтедобычи. Соцпакет, проезд оплачивается, трудоустройство официальное.
По оплате и по остальным вопросам можно писать в личку, там дальше скоординируемся.
Спасибо за внимание.
P.s.
Также есть вакансии инженеров АСУП, АСУТП.

6

Интересуюсь по RapidScada

Сам сейчас сидим в самописной на Delphi СКАДЕ. Дикие тонны легаси-кода, поддерживать сложно. Пока оптимизируем что можно.

Присматриваюсь к RapidScada (2 дня только тыкал её).

Что имеем:

1. бесплатна, лиц. Apache 2, написана на C# sic!

2. Вроде заявлена работа на linux через mono

3. тоскливо с модулями, но толпа платных(без подписок) и вроде для РФ цены норм (для организации 7200руб это не деньги)


Условия использования:

1. Данные получать будет только с OPC-DA сервера (одного) Решено -к WinDecont`у подключился

2. Данные будут распределены по более чем 20 объектам (тут непонятно - насколько оно тормозить будет)

3. Ведение тренда и уставок по объектам (Сейчас сидим на MS-SQL)  - заявлена совместимость - ещё не дошёл

4. Не нравится использование веб-морды для клиентов и диспетчеров - будем писать в качестве клиентов что-то своё (тупо использовать к-нить Qt-WebEngine) - х.з.


Если кто использовал это много ли там своего дописывать?

Как с надёжностью?

Как уже говорил, в качестве фрондэнда не нравится использование браузеров. Мы ресурсоснабжайка - есть требования к безопасности и "импортозамещению"...


Да и вообще, хотел бы почитать об историях успехов и провалов с этой СКАДой...

Показать полностью
5

КИПиА

Создал телеграмм канал по вопросам КИПиА, присоединяйтесь, не реклама монетизации нету

https://t.me/KIP_and_ASUTP

10

Codesys 3. Очередь для ПЛК

Здравствуйте, коллеги. Сегодня мы с вами познакомимся с организацией работы при ограниченных ресурсах. Рассмотрим что такое "Очередь" как она работает, реализуем пару вариантов очередей, затронем динамическое выделение памяти в ПЛК.

Я пишу эту статью и программирую в режиме реального времени, т.е. у меня есть задача и я ее решаю. Все свои мысли и попытки(за исключением очень глупых) я записываю в эту статью так что приятного чтения.

ТЕОРИЯ

Очередь - это абстрактный тип данных, в котором доступ организуется по принципу FIFO(first in, first out) - первый пришел, первый ушел. Имеет два метода: добавить в очередь и достать из очереди. Данные которые мы достали из очереди - удаляются.

Согласно теории есть два метода реализации - массивом и односвязным списком. В большинстве ПЛК второй способ невозможен.

РЕАЛИЗАЦИЯ

Начнем с малого. Реализуем очередь для одного типа данных. Например, мы будем вырезать отверстия. По нужным координатам нужного диаметра.

Создадим необходимы  DUT. В структуре у нас хранятся координаты по X,Y и диаметр отверстия.

Codesys 3. Очередь для ПЛК АСУ ТП, Плк, Программирование ПЛК, Видео, Длиннопост

Теперь организуем список необходимых операций, которые нам понадобятся. Всего их три: Ожидание, Добавить элемент, Достать элемент. Для такого типа операций я использую перечисление и CASE в реализации. Мне просто так удобнее. Можно с помощью флагов, триггеров, IF'ов, но я делаю так.

Codesys 3. Очередь для ПЛК АСУ ТП, Плк, Программирование ПЛК, Видео, Длиннопост

Теперь работаем с FB. Пытаемся уместить все в одном месте. Нам потребуется на вход:

1) Указатель на Глобальный UDT для чтения

2) Указатель на UDT куда будем писать.

(*тут я думаю как сделать команды*)

3) Команды управления

На выход у нас получается:

1) Сигнал об успешной записи в очередь

2) Сигнал об успешном чтении из очереди

3) Очередь пустая

4) Очередь полная

5) В работе

Пункты 3 и 4 можно объединить в ошибку и сделать какой-нибудь код для нее, но я не буду.

Под капотом:

1) Массив элементов( для теста 10)

2) Индекс старта

3) Индекс окончания

Codesys 3. Очередь для ПЛК АСУ ТП, Плк, Программирование ПЛК, Видео, Длиннопост

ЛОГИКА РАБОТЫ

Логика легка и проста. читаем из элемента под индексом iStart. Считали прибавили 1. Записываем в индекс iEnd. Записали прибавили единицу.

Дошли до конца, скинули счетчик. Пошли по кругу. Всего может быть 10 элементов. Если индексы пересекаются, то это неопределенность. Либо очередь полная, либо пустая. Так что этот вопрос продеться контролировать.


ДОБАВЛЕНИЕ/ИСПРАВЛЕНИЕ

При старте реализации было обнаружено, что значения пустой и полной очереди необходимо обрабатывать внутри кода. Есть два три выхода: переносим в In_Out, переносим указателями в In, создаем в области VAR и во время WAIT копируем значения.

Я выбираю третий вариант с дублированием.

Добавил в Output переменную Error.


ИТОГ

Я опять пожалуюсь, что вставлять и сюда код очень проблематично так что ссылка на PDF документ на Яндекс.Диск с листингом.

Ну и небольшая видео демонстрация как там все происходит. 

Спасибо за внимание. Если что стучите в комментарии, если что-то очень личное, то на почту info@engcore.ru.

Показать полностью 3 1
6

S7-1500, Группа Pointers, References

Появилось желание потыкать более подробно ПЛК 1500 серии от Siemens. И немного разобрать что там интересного есть, как с этим работать и понять для чего это надо. И первыми под небольшой обзор попала такая группа данных как pointer(указатель), которых в s7-1500 аж 4 вида. Сейчас хочу быстро пробежимся по каждому и немного поработать с References

Типы данных в ПЛК.
Начнем с теории. Типы данных - определяют свойства данных, например, размер в памяти или их представление. У Siemens есть:
Элементарные типы данных(bool, int, real, char)
Сложные типы данных (DT, String, Array, Struct)
UDT - типы определяемые пользователем
УКАЗАТЕЛЬ
Тип параметров
Системные типы данных
Типы данных оборудования
Ну и если с верхней частью списка все более менее понятно, исходя из начальных уроков по программированию. То где-то с указателей начинается магия. Однако все не так просто.
Немного об оптимизированном доступе

У контроллеров S7-1200/1500 имеется возможность оптимизированного
хранения данных. В оптимизированных блоках, все теги автоматически
сортируются по их типу данных. Данный метод позволяет минимизировать
промежутки между тегами, таким образом такие теги оптимизированы по
времени доступа для процессора.
(c)Базовое системное руководство  11/2015Руководство по программированию
S7-1200/S7-1500
И теперь если просто, то в оптимизированном блоке нет доступа по адресу. Там происходит магия, данные сортируются так как надо, теперь тебе не надо играть в тетрис, когда у тебя все бинарные значения должны быть в конце. Но от этого мы получаем новые виды указателей.

УКАЗАТЕЛИ
В данную группу входят следующие ребята:
- References
- VARIANT
- POINTER
- ANY
Для наглядности где какие указатели могут быть использованы вне 1500 контроллеров ловите табличку.

S7-1500, Группа Pointers, References Siemens, Программирование ПЛК, АСУ ТП, Plc, Длиннопост

References
References - это тэг, который указывает на область памяти. вы указываете тип данных, на который он ссылается, является безопасным по типу. Гарантируется, что либо она принадлежит к конкретному типу данных, либо ей присваивается NULL.
References у нас указывают только на конкретный тип и могут быть прочитаны или записаны через разыменовывание. ТОЛЬКО ДЛЯ ОПТИМИЗИРОВАННЫХ БЛОКОВ,
VARIANT
Это тэг, который указывает на различные типы данных, но не может указывать на экземпляры. Операнд типа данных VARIANT не занимает места в блоке данных экземпляра или в рабочей памяти. Однако он будет занимать место в памяти ЦП.

Тег типа VARIANT - это не объект, а ссылка на другой объект. Отдельные элементы типа VARIANT могут быть объявлены только для формальных параметров в блочном интерфейсе функции в разделах VAR_IN, VAR_IN_OUT и VAR_TEMP. По этой причине его нельзя объявить в блоке данных или в статическом разделе интерфейса блока функционального блока, например, потому что его размер неизвестен. Размер объектов, на которые имеются ссылки, может измениться.
(с) Перевод гуглом справки от Сименса
Ну и много других вещей. Вот тут уже можно себе выстрелить немножко в ножку, но радует, что мы не можем просто читать и записывать Variant.
POINTER
Еще указатель. Занимает 6 байтов. Может хранить данные о тэге.
1)Номер DB
2)Память в ЦПУ
3)Адрес тэга
Работает лишь со стандартным доступом, не работает с оптимизированным. Ну и еще область определения. В функциях - это InOut, а в функциональных блоках - это везде за исключением TEMP, а UDT - только InOut
ANY
Указывает на начало области данных и содержит ее длину. Занимает 10 байт памяти.
Может содержать:
1)Тип данных элементов
2)Количество элементов
3)Номер БД
4)Область памяти ЦП, в которой хранятся элементы
5)Начальный адрес данных в формате «байт.бит»

ПРАКТИКА
Начнем с референсов)) Объявить данный тип мы можем в FC,FB,OB, но в разных частях интерфейса
- FC: Input, Output, Temp, Return
- FB: Temp
- OB: Temp
Объявление происходит конструкцией REF_TO, присваивание значений командой REF();

S7-1500, Группа Pointers, References Siemens, Программирование ПЛК, АСУ ТП, Plc, Длиннопост

А дальше мы пойдем немного усложнять задачи. И чуток поработаем в связке VARIAN и REF. Придумаем себе несуществующую задачу, которая гласит, что у нас есть функция, на вход которой могут подаваться различные UDT.
В нашем случае следующего вида:

S7-1500, Группа Pointers, References Siemens, Программирование ПЛК, АСУ ТП, Plc, Длиннопост
S7-1500, Группа Pointers, References Siemens, Программирование ПЛК, АСУ ТП, Plc, Длиннопост

И нам надо записать туда значения. в случае udt_2pointж 5.0, а в случае udt_3point -4.

S7-1500, Группа Pointers, References Siemens, Программирование ПЛК, АСУ ТП, Plc, Длиннопост

Из всего что написано выше, что стоит понять функция TypeOf - возвращает тип тэга Variant.
Конструкция ?= пытается присвоить REF тэг Variant. Так как это слегка удобнее. Если присвоение провалилось, то тэг REF будет NULL.

S7-1500, Группа Pointers, References Siemens, Программирование ПЛК, АСУ ТП, Plc, Длиннопост
S7-1500, Группа Pointers, References Siemens, Программирование ПЛК, АСУ ТП, Plc, Длиннопост

Теперь на вход подаем udt_2point.

S7-1500, Группа Pointers, References Siemens, Программирование ПЛК, АСУ ТП, Plc, Длиннопост
S7-1500, Группа Pointers, References Siemens, Программирование ПЛК, АСУ ТП, Plc, Длиннопост

Тут должен быть примерно какой-то вывод, но в целом даже подобную конструкцию можно использовать для создания какого-нибудь максимально универсального блока с проверкой типов данных и относительной безопасностью.

Показать полностью 9
Отличная работа, все прочитано!