суббота, 7 апреля 2018 г.

FATEK и импульсное управление

Буквально намедни я писал о тайваньских контроллерах FATEK и их взломе и тут внезапно вспомнил, что у меня есть одна интересная информация. В своей статье я вскользь упомянул, что у меня есть в распоряжении контроллер FBs-20MN. Спрашивается, откуда он у меня, если я работаю только с Siemens? На самом деле, мы весьма успешно заменяем всякую узкоплёночную автоматику (да, да вот её самую) на нашу, российскую (с нашими правильными алгоритмами, написанными для контроллером Siemens) и вот остался после такой модернизации контроллер FATEK. Я не буду ничего плохого про него говорить, потому что этот ПЛК плохо работал не из-за производителя, а из-за тупых тайваньских программистов, но есть кое-что и в самом ПЛК, что отличает его от Siemens, далее предлагаю вам две фотографии моего осциллографа, который показывает сигнал высокочастотного управления сервоприводом: первая - импульсные сигналы от FATEK, вторая - тоже самое от Siemens S7-1200. Без комментариев.




Особенности измерения сопротивления на S7-1200

Как известно, к контроллерам S7-1200 можно подключать модули расширения для измерения сигналов сопротивления, но предназначены эти модули, в первую очередь, для сигналов с датчиков температур (термосопротивлений), потому модули так и называются RTD - Resistance Temperature Detectors. Но ведь может быть задача, когда мерить надо вовсе не сигнал от термосопротивлений, может стоять задача измерить сопротивление от 0 до нескольких килоом, например. В настройках данного модуля в TIA Portal можно выставить диапазон измерений для каждого канала:



Как видим, чтобы захватить наибольший диапазон измерения варианта всего два:

- мерить сопротивление от 0 до 600 Ом - значения в этом случае будут в тех же единицах, что и для аналоговых модулей 0..10 В и 0..20 мА, т.е. значение 27500 будет соответствовать 600 Ом. Экспериментально выяснилось, что померить удаётся чуть больше, чем 700 Ом (у меня получилось максимум 714 Ом, после этого показывает 32767 - ошибка датчика).

- мерить сопротивление для датчика Pt1000. Конечно, у самих таких датчиков диапазон изменения сопротивления гораздо уже, чем может понадобится (от 800 до 1800 Ом), но это вовсе не значит, что модуль RTD не способен охватить бОльший диапазон. Экспериментально выяснилось, что можно померить таким образом сопротивление от 60 Ом до примерно 4900 Ом. Значение получается градусах (точнее, в целых числах, где последняя цифра - это знак после запятой, т.е. как бы градусы помноженные на 10), его надо масштабировать в Омы самостоятельно. Если брать по таблице, то значение -500 (т.е. -50 град) должно соответствовать 803.15 Ом, а 1000 (т.е. 100 град) - 1385 Ом. У меня так оно и получилось. Но есть один нюанс: нельзя померить слишком маленькое сопротивление (ниже 60 Ом). Верхняя граница в 4.9 кОм определяется исходя из того, что максимальное значение может быть 10000 (т.е. 1000.0 град).

У меня была задача померить сопротивление от 0 Ом. Как видим, вариант 60..4900 Ом для этого не подходит. Поэтому я вышел из положения следующим образом: я подсоединил датчик одновременно к двум каналам модуля RTD, настроил их: первый на 0..600 Ом, второй - на Pt1000 и написал алгоритм переключения:

R_.isR1_actual := (AI_RTD_R1 <> 32767 AND AI_RTD_R1 <> -32768);

R_.isR2_actual := (AI_RTD_R2 <> 32767 AND AI_RTD_R2 <> -32768);
 

OBRYV_R := R_.isR1_actual = false AND R_.isR2_actual = false;
 

R_average := (Read_AI_R1.OUT_value + Read_AI_R2.OUT_value) / 2.0;
 

useAverageValue := false;

IF(R_.isR1_actual AND R_.isR2_actual) THEN 
   R_.PV := R_average;
   IF(R_average > R_.R_switch - R_.R_delta AND
      R_average < R_.R_switch + R_.R_delta)
   THEN
      useAverageValue := true;
      IF(Read_AI_R1.OUT_value < R_average) THEN R_.mode := 0;
      ELSE R_.mode := 1; END_IF;
   END_IF;

   IF(R_.isUseR2 = false AND
      ((R_.mode = 0 AND Read_AI_R1.OUT_value > R_.R_switch) OR     
       (R_.mode = 1 AND Read_AI_R2.OUT_value > R_.R_switch)))
   THEN
      R_.isUseR2 := true;  
   ELSIF(R_.isUseR2 AND
      ((R_.mode = 0 AND Read_AI_R2.OUT_value < R_.R_switch) OR     
       (R_.mode = 1 AND Read_AI_R1.OUT_value < R_.R_switch)))
   THEN
      R_.isUseR2 := false;
   END_IF;
ELSE
   IF(R_.isR1_actual) THEN R_.isUseR2 := false;
   ELSIF(R_.isR2_actual) THEN R_.isUseR2 := true; 
   END_IF;
END_IF;

IF(OBRYV_R = false) THEN
   IF(useAverageValue = false) THEN
      IF(R_.isUseR2 = false) THEN R_.PV := Read_AI_R1.OUT_value;
      ELSE R_.PV := Read_AI_R2.OUT_value;
      END_IF;
   END_IF;
ELSE
   R_.PV := 99999.0;
END_IF;


В этом фрагменте кода:
OBRYV_R - это такой бит, который предназначен для проверки аварии обрыва датчика
Read_AI_R1.OUT_value - это такое значение Real в Омах, которое получилось в результате масштабирования сигнала AI_RTD_R1 c первого канала модуля RTD (0 - 0 Ом, 27500 - 600 Ом)
Read_AI_R2.OUT_value - это такое значение Real в Омах, которое получилось в результате масштабирования сигнала AI_RTD_R2 cо второго канала модуля RTD (-500 - 803.15 Ом, 1000 - 1385 Ом)
R_.R_switch -  значение сопротивления, при котором будет происходить переключение между каналами (у меня выставлено значение 693 Ом)
R_.R_delta - дельта (плюс/минус) к R_.R_Switch (у меня выставлено значение 1 Ом)

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

Нюансы


В настройках TIA Portal можно выбрать двух, трёх и четырёхпроводную схему подключения датчика. Я не знаю, зачем эта настройка, но факт в том, что если не подключить все 4 клеммы, то работать нормально ничего не будет. Т. е. даже если выбрана двухпроводная схема и датчик подключен на клеммы I+ и I-, то остальные две клеммы (M+ и M-) всё равно нельзя оставлять неподключенными, т.е. надо ставить перемычки с M+ на I+ и с M- на I-. В общем-то в сименовской инструкции об этом тоже написано.

По ходу проведения экспериментов я заметил, что модуль RTD ведёт себя как-то странно: то показывает ошибку при нормально подключенном датчике, то показывает одно и тоже значение, какое бы сопротивление я не подключал (т.е. как будто бы "зависает", при этом при отключении датчика исправно показывает 32767). Выяснилось, что модуль немного "сходит с ума", если к нему "на горячую" то подключать что-то, то отключать, то провода местами менять и т.д. Делать надо так: обесточили контроллер, подсоединили всё, что нужно, после этого включили, тогда никаких глюков нет.

Какие ещё варианты



1. Использовать модуль обычных аналоговых входов и преобразователь сигнала сопротивления в унифицированный сигнал в mA. Следует отметить, что у многих производителей (например, Schneider или Овен) такие устройства изначально заточены на термосопротивления, т.е. для нестандартных диапазонов у них преобразователей нет. Но, всё таки можно что-то найти. Например:

- у ABB есть такой преобразователь TTR200 с входным сигналом до 5 кОм. Сколько стóит не знаю.

- есть российская такая штука: НПСИ-ПМ, которая позволяет измерять до 10 кОм (диапазон выхода в mA настраиваемый). Цена его около 6000 р., делают в Ростове-на-Дону.

- у Овен есть контроллер ПР200 примерно за те же 6000 р., у которого 4 аналоговых входа на борту, которыми можно померить в т.ч. и сопротивление до нескольких кОм и есть аналоговый выход 0..20 мА, т.е. остаётся дело за малым - написать примитивную программку для этого дела.

2. Изменить входное сопротивление через дополнительный резистор, т.е. сместить диапазон, чтобы не от 60 Ом по факту мерить, а от 0. Верхняя граница также, естественно, сместится.

3.Использовать распределённую станцию ET200SP, к которой цеплять модули от контроллера S7-300 ($$$ money, money, must be funny...).

Распароливание контроллеров FATEK

Недавно появилась задача слить программу с запороленного тайваньского контроллера FATEK FBs-40MA. В общем и целом задача оказалось весьма простой. Для того, чтобы слить программу, необходимо скачать взломанную версию среды разработки WinProladder.
В интернете архив со взломанной версией называется WPlad300-12308-ENU_CR2.rar, он содержит исполняемый файл установки, скачать его вы можете здесь:

WinProladder 3.00 Build 12308 CRACKED

Для тех, кто не знаком с ПЛК FATEK, может показаться странным отсутствие кнопок Download и Upload. Действительно, интерфейс немного нетипичный. Т.е. там есть кнопка Online, которая означает не только переход в соответствующий режим, но и запрос на загрузку и выгрузку проекта в/из ПЛК. Причём, в этом режиме все изменения тоже автоматически отправляются на контроллер. Ну, вот такая странная у них среда разработки.

Взломанная версия - это не последняя версия WinProladder, сейчас уже есть версия 3.24, но я никакой разницы не заметил.

Что касается установки пароли и его отмены


Значит, во-первых, не факт, что вот это взломанное ПО 100% поможет слить вам программу из ПЛК. Дело в том, что пароль может запрашиваться как в момент установки соединения при переходе в режим Online, так и уже после того, как программа слита. Если вы подключаетесь к ПЛК и программа сразу просит пароль - взломанная среда вам не поможет.



Но может быть и так, что программа сливается, а потом просит пароль, и если он введён не верно, то программу нельзя ни посмотреть (она снова просит пароль), ни сохранить. В этом случае считайте, что вам повезло. Во взломанной версии WinProladder на запрос пароля в таком случае просто ничего не надо вводить, а сразу нажимать OK. После того как программа успешно выгрузилась нужно убрать пароль и Project ID. Для этого заходим в меню Project -> Project Setup -> Password, там сначала просят ввести старый пароль (ничего не вводим), потом просят новый пароль (опять ничего не вводим). Повторяем процедуру для Program ID в том же меню. Сохраняем файл проекта. После этого проект, при желании, можно открывать уже в более новой версии WinProladder.

Повторюсь, такой способ работает не всегда. Я не знаю тонкостей работы с этими ПЛК, но суть в том, что я один и тот же проект сначала успешно слил из контроллера FBs-40MA, а потом ради интереса залил в свой контроллер FBs-20MN, и когда я попытался уже со своего контроллера программу слить, то у меня сначала запросили пароль, т.е. не зная его слить программу уже было нельзя ни в какой версии WinProladder.

Внимание, FAKE!



Помимо всего этого дела, есть ещё какая-то странная программа под названием что-то типа All PLC and HMI Crack или как-то так. Программа платная. Вы её легко найдёте в интернете по дебильному салатовому внешнему виду. Разработал её какой-то вьетнамец. Вообще, внешне есть определённый намек на истину, т.е., например, в меню его программе есть пункты для снятия пароля с Siemens S7-200, так вот только для прошивки 2.0 предлагается снимать пароль с ПЛК, а для прошивки 2.1 - только пароль с файла проекта. Это действительно так и есть у Siemens S7-200 (только для это давно есть бесплатные программы). Так вот, я не берусь утверждать, что вьетнамская программа - это прям 100% фейк, но тот факт, что программа стоит не особо и дорого (что-то вроде $200), и то, что она рекламируется как ПО с функциями по взлому сразу многих моделей ПЛК разных фирм, но при этом никто ещё не выложил такой программы в общий доступ в интернет, намекает на то, что это всё-таки фейк. Какой-то парень на форуме писал, что заплатил за прогу и она не работает, может быть она не работала, потому что у него не был нормально установлен ActiveX (да-да, чудо-прога на кой-то чёрт требует ActiveX, представьте себе!). Тем временем, вьетнамец усердно постит ролики на youtube о том, как его программа замечательно работает, при этом подделать всё, что в этих роликах показано не составляет труда, поскольку его чудо-программа расшифровывает пароли с ПЛК, которые сам вьетнамец и запоролил, т.е. не факт, что прога просто не показывает заранее известный пароль всегда чисто для того, чтобы снять доказательное видео для youtube.