понедельник, 12 февраля 2018 г.

Проблемы совместимости S7-200 и китайских PLC: глюк с оператором JMP

Читай также:
Проблемы совместимости S7-200 и китайских PLC: глюк с оператором FOR
Китайские поделки на тему Siemens S7-200

Итак, я хочу рассказать об интересном дефекте китайских контроллеров, который я на днях случайно обнаружил. Как уже известно, если вам нужен ПЛК Siemens S7-200 (снятый с производства в Германии в 2012 году), то есть два способа его купить: это выкупить остатки со склада каких-нибудь торгашей, которые берегут это добро уже больше пяти лет, чтобы продать по цене в 2 - 4 раза превышающей его былую стоимость, либо (самый простой способ) - купить S7-200CN на Aliexpress.

Контроллеры с маркировкой CN производятся в КНР официально, т.е. это оригинальный Siemens, но сделанный в Китае. Его отличие от немецкого Siemens's только в том, что Step-7 Micro/Win отказывается с ним работать при активированном английском интерфейсе, по крайней мере так было раньше (после переключения интерфейса на иероглифы проблема решается).
 Update. Аллелуя! Похоже, Siemens таки убрал необходимость переключения на китайский язык при заливки контроллеров S7-200CN (покупал тут, залился в английском MicroWIN без проблем, на вид, вроде, настоящий Siemens, label присутствует, цвет корпуса с зеленоватым оттенком как у немецких S7-200)

Однако, на Aliexpress есть и другие ПЛК, которые повторяют функционал S7-200. О них я уже как-то рассказывал в этой статье. Все они деляться на три группы:
1. Имеют полную совместимость с S7-200. Т.е. программируются в среде Step-7 Micro/Win и совместимы с модулями Siemens (GIPENG, AMSAMOTION, SHENJUYE (продаются под лэйблом LOLLETTE)).
2. Имеют совместимость с модулями S7-200, но имеют свою среду разработки (CO-TRUST, среда - MagicWorks PLC)
3. Не имеют совместимости с модулями S7-200, но программируются в среде Step-7 Micro/Win (FONIN)

Итак, я никогда не приобретал не полностью совместимые с Siemens контроллеры, такие как Co-Trust или Fonin, ничего не могу о них пока сказать.
Но у меня в распоряжении имеются контроллеры Gipeng, Amsamotion и Shenjuye (Lollette). И вот, добавив в программу для Amsamotion ранее написанную функцию ПИД-регулирования (я использую только свои собственные функции регуляторов), я внезапно обнаруживаю, что она не работает. Удивительное дело, ведь функция уже проверена на контроллерах Siemens S7-200, как же так? Оказывается, в контроллере Amsamotion наблюдается непонятный глюк: неправильно работает оператор JMP. Я проверил выполнение этого оператора на том же примере на контроллерах Siemens, Gipeng и Shenjuye (Lollette) и вот оказалось, что глюк не проявляется на оригинальном Siemens S7-200 и на Shenjuye (Lollette) LE-200, а на Gipeng GF-200 проявляется в том же виде, что и на Amsamotion AMX-200CN.

Описание проблемы оператора JMP

В общем, напомню, что оператор JMP (jump) из набора команд S7-200 является оператором условного перехода, что является косвенным аналогом оператора JE в классическом ассемблере и оператора JC в языке STL для S7-300. В языках программирования высокого уровня для ЭВМ обычно называется GOTO (go to).

Суть работы оператора JMP # в том, что при логической 1 в вершине стека он осуществляет переход на указанную метку, которая задаётся командой LBL #, где # - это номер метки.
При компиляции этот номер заменяется адресом строки кода, куда осуществляется переход. Т.е. весь код программы, который находится между операторами JMP и LBL чисто физически не должен выполняться.
Соответственно, после выполнения перехода стек сохраняется в том виде, в котором был на момент перехода. А поскольку переход условный, то если он выполнен, то после перехода в вершине стека может быть только логическая 1, т.к. это и есть условие для перехода. Инструкция от Siemens для особо одарённых даже содержит специальное уточнение:

The Jump To Label (JMP) instruction performs a branch to the specified label (n) withon program. When a jump is taken, the top of stake value is always is logical 1.

И вот представьте моё удивление, когда на моём ПЛК Amsamotion AMX-200CN переход выполняется, а в вершине стека при этом логический ноль. Взаимоисключающие параграфы сие называется. Я начал разбираться и выяснил, что, оказывается, не всем операторам одинаково везёт, как говориться. Т.е. большинство операторов спокойно игнорируются, когда оказываются между JMP и LBL при переходе, но есть операторы, которые таки выполняются! Невероятно, но факт. Смотрим.
 

Для удобства восприятия я выбрал адреса переменных похожими на адреса системных битов, т.е. в моих примерах бит M10.0 должен всегда быть равен 1 (т.е. равен SM0.0), а бит M10.1 всегда быть равен 0 (т.е. равен SM0.1, который равен нулю во всех циклах программы, кроме первого).
Я немного добавил линий, чтобы было понятно, какие команды выполняются правильно, а какие - нет (зелёные - это правильно, красные - нет).
В синей рамке находится то, что по правильному алгоритму работы программы должны быть пропущено.


Как видим на представленном выше скриншоте перед командой JMP находится команда LD SM0.0, результат которой всегда = 1, что подтверждается тут же в самой правой колонке. На скриншоте видно, что команда NOT расположена между JMP и LBL, т.е. выполняться не должна, но она таки выполняется и первое же присваивание M10.0 заканчивается записью туда не 1, а 0, поскольку произошло инвертирование, которого быть не должно.

Таким же точно глючным образом выполняются и некоторые другие команды, работающие только со стеком, а именно команды: OLD, LDS, LPS, LRD, LPP. Глючно выполняются команды LB=, LB<>, LB<, LB>, LB<= и LB>=, а также аналогичные команды для WORD (LW= и т.д.) и DWORD (LD= и т.д.). Вот пара примеров:





Команды LD, A и O, а также команды фронта EU и ED не выполняются между JMP и LBL, т.е. работают корректно:





Ну, и напоследок, есть команда, которая работает вообще непонятным образом в такой ситуации - это команда ALD. Она не просто выполнилась между JMP и LBL, хотя не должна была, но и дала результат равный логическому нулю, несмотря на то, что в обоих первых уровнях стека были единицы. Вот гляньте, картина маслом:


Контроллер команду ALD выполняет нормально в обычной ситуации, чему также даю подтверждение:



 В общем и целом, хочу заметить, что для написания новых программ тут нет проблемы: обойти эти препятствия нет никакой сложности. Совсем другое дело, если требуется использовать контроллер вместо уже существующего оригинального Siemens как резерв. Да, можно сказать, что вероятность, что результат работы будет иным, не так и велика. Но у меня, лично, в программе нашлось аж две функции, а всего три конкретных места кода, которые пришлось исправить. Т.е. если кто-то на предприятиях, где находятся мои программы с этими функциями в ПЛК Siemens S7-200 решит заменить эти контроллеры на Amsamotion или Gipeng, то, в лучшем случае, алгоритм не будет работать, а в худшем даже и не знаю.

Более-менее застрахованы от проявления глюка те, кто использует более примитивные языки LAD и FBD, поскольку интерпретатор, автоматически переводящий в STL, не осуществляет особо сильной оптимизации, т.е. не заботиться о более рациональном использовании стека, поэтому вероятность проблем меньше, хотя они и не исключены.
Кроме того, не застрахованы также и те, кто использует функции от Siemens, поскольку гипотетически и они могут содержать небезопасный код. Я бы рекомендовал, на всякий случай, распароливать функции от Siemens (смотри здесь) и проверять код.


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

Всё очень просто. Нужно осуществить поиск по всему коду программы, искать надо оператор LBL. Если после него не следует команд, продолжающих логическую цепочку с использованием значений стека из того фрагмента кода, который шёл до LBL, то всё в порядке. Если же таковые команды имеются, то надо просто внести коррективы в код.

Условно говоря, если до оператора JMP в стеке были какие-то значения, которые будут использоваться после команды LBL путём вызова команд A, O, LPP, LRD, LDS, NOT, EU, ED и др., то надо до оператора JMP выполнить присвоение значений стека определённым битам (желательно тем, которые больше в программе нигде не участвуют), а после команды LBL изменить код так, чтобы использовать эти самые биты, а не стек. Да, это будет дольше выполняться (хоть этого никто и не заметит), будет менее рационально, но зато обезопасит всех от потенциальных проблем с китайскими ПЛК. Операторы, использующие стек и меняющие его значение, расположенные между JMP и LBL, имеют право на существование, поскольку, если JMP не выполнится, то их выполнение не будет иметь проблем, однако, важно понимать, что использования этих значений после LBL не должно быть, или же эти значения еще до оператора LBL нужно присвоить каким-то битам памяти.
Вот примитивный пример:

 
Как видим, выполнялась команда LPP, которая не должна была выполняться, и результат, записанный в M10.2, оказался рассчитан неправильным образом. Исправить это можно так:


Ну, я думаю, что все понимают, что речь идёт об абстрактном примере, поэтому в нём значение M10.0 присваивается биту M20.0, естественно, что можно это упростить, просто это не делается именно потому что предполагаются гораздо более сложные алгоритмы, где подобное упрощение не будет возможно.

пятница, 1 декабря 2017 г.

Проблема с прямой адресацией на S7-1200

Как известно, TIA Portal использует косвенную адресацию, но, одновременно с этим, не запрещена и прямая адресация. Для этого в Data Block надо просто снять галочку в разделе Attributes под названием Optimized block access (это для версии TIA Portal V13 SP1).

В общем и целом адресация пародирует S7-200, только нет привычных нормальных команд (типа ANDB и т.д.), приходится обходиться тем, что есть в языке SCL.
Однако, и с этим оказались проблемы.

Описание проблемы я разместил на сайте Siemens.

Вот вам русское описание этого примера.

Я создал data block DB1 с именем "HMI_DB". Добавил в него 4 переменных:

var1  Real  DB1.DBD0 
var2  Real  DB1.DBD4
var3  Word  DB1.DBW8
var4  Word  DB1.DBW10
 
Я хочу использовать HMI_DB.var3 и HMI_DB.var4 как буфер для моих операций пересылки байтов.
В частности, данная операция востребована при приёме и дальнейшем использовании данных по интерфейсу RS485, где данные принимаются по количеству слов данных.

Итак, я хочу передать два слова данных из HMI_DB.var1 в два отдельных слова HMI_DB.var3 и  HMI_DB.var4, затем я хочу передать результат из var3 и var4 в переменную var2:




"HMI_DB".var1 := 24.7; // (для примера), это 16#41C5_999A
-------------
%DB1.DBW8 := %DB1.DBW0; // 16#41C5
%DB1.DBW10 := %DB1.DBW2; // 16#999A
%DB1.DBD4 := %DB1.DBD8; // (oops!) 16#4E83_8B33



Нежданчик! Программа автоматически конвертировала (DINT_TO_REAL), хотя никто этого не просил, значение 16#41C5_999A (что является 1,103,468,954 в DEC-формате) в 16#4E83_8B33 (что является 1.103469e+009 в Real-формате).
 

Если я напишу таким образом, то всё работает нормально:

%DB1.DBW4 := %DB1.DBW8;
%DB1.DBW6 := %DB1.DBW10;

Вот такая интересная система конвертации в TIA Portal, т.е. среда разработки как бы "знает", что %DB1.DBD4 имеет тип Real. Какая умная среда разработки, правда? Да, не совсем. Попробуем написать вот такое присвоение:

%DB1.DBD0 := 24.7;

И что мы видим? На такую запись компилятор отругался следующим сообщением:

Datatype "LReal" cannot be converted implicitly to datatype "DWord".

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

В обсуждении на форуме Siemens разъясняют, что компилятор просто не умеет автоматически преобразовывать LReal в DWord, т.е. число с плавающей точкой компилятор всегда понимает как LReal, а если его присваивают переменной типа Real, то автоматом происходит преобразование LREAL_TO_REAL. Таким образом, для присвоения DWord дробного числа требуется два поочерёдного преобразования: LREAL_TO_REAL, а затем - REAL_TO_DINT, чего компилятор делать автоматически не умеет.



среда, 22 ноября 2017 г.

Панель быстрого запуска в Windows 7

Как известно, корпорация Microsoft, начиная с Windows Vista, последовательно ухудшает интерфейс операционной системы, который в совершенном виде присутствовал в Windows XP и не требовал никаких изменений. В настоящее время (ноябрь 2017 года) единственной приемлемой для работы операционной системой является Windows 7 SP1. Несмотря на изуродованный интерфейс, его можно преобразить до уровня Windows XP, используя Classic Shell.

Однако, вернувшись в нормальный классический вид, я обнаружил, что панель быстрого запуска работает как-то странно: значки ярлыков, расположенные слева от панели задач пропадают сразу после запуска соответствующего приложения, а если уже были открытые окна, то новые, вызванные через панель быстрого запуска, добавляются в панель задач не справа, как положено, а на том месте, где располагается ярлык вызова.
Оказалось, что это никакая не панель быстрого запуска, а всё то же продолжение панели задач, на которую тоже можно добавлять ярлыки. А панель быстрого запуска в WIndows 7 вообще отсутствует. Но её можно организовать, делается это просто:

1. Правой кнопкой мыши на панели задач, в выпадающем меню выбираем Панели -> Создать панель инстументов...


2. В появившемся диалоговом окне ввести в нижней строке

%AppData%\Microsoft\Internet Explorer\Quick Launch

После этого на панели задач появится раздел "Quick Launch" и ярлыки из этой папки (ярлыки можно сразу не увидеть из-за слишком большой надписи, тогда ярлыки будут в выпадающем меню ("»").

3. Правой кнопкой мыши на панели задач, в выпадающем меню снимаем галочку с пункта "Закрепить панель задач"

4. Правой кнопкой мыши по надписи "Quick Launch", снимаем галочки с пунктов "Показывать подписи" и "Показывать заголовки" (любители ублюдочного "ленточного" интерфейса последнюю галку могут не снимать)

5. Левой кнопкой мыши за вертикальную линию (слева от ярлыков) перемещаем наш раздел с ярлыками на удобную позицию на экране (рядом с кнопкой "Пуск", конечно же).

6. Правой кнопкой мыши на панели задач, в выпадающем меню ставим галочку на пункте "Закрепить панель задач"

среда, 26 июля 2017 г.

Отключить встроенный автоматический просмотр PDF в Firefox

давно раздражает совершенно ненужная функция браузера - просмотр pdf. Раздражает, потому что ни в одном браузере эта функция пока не реализована по-человечески, постоянно всё тормозит, глючит и ни в какое сравнение с просмотром в нормальном просмотрщике (читай - Foxit Reader'e) ни идёт. Это касается как встроенный плагинов, так и внешних. Причем внешние плагины легко отключаются, как известно, а встроенные через одно место. Ну, в частности, для отключения ненужной функции просмотра pdf в Firefox нужно следующее:

1. открыть страницу about:config

2. найти пункт pdfjs.disabled

3. установить его в состояние true

четверг, 23 марта 2017 г.

Проблема с WinCC Flexible - перестали открываться проекты

Несколько лет назад была у меня проблема с WinCC Flexible 2008 SP3 касательно того, что проект во время открытия вдруг переставал загружаться (т.е. ProgressBar на экране доходил примерно до середины - и arrivederci). Тут намедни возникла всё та же проблема, только с WinCC Flexible Smart. Видимо у них это общая болезнь, поэтому не лишним будет вспомнить способ исцеления, а именно сброс настроек WInCc Flexible.

Итак, удаляем вот эти папки и всё:
C:\Documents and Settings\All Users\Application Data\SIEMENS AG\SIMATIC WinCC flexible ХХХ
C:\Documents and Settings\USER NAME\Application Data\SIEMENS AG\SIMATIC WinCC flexible ХХХ
C:\Documents and Settings\USER NAME\Local Settings\Application Data\SIEMENS AG\SIMATIC WinCC flexible ХХХ

(вместо "ХХХ" будет конкретная версия программы)

У меня в связи с этим всплыл ещё один нюанс. Как известно, Microsoft с некоторых пор зачем-то озаботился никому не нужной безопасностью в Windows (никому не нужной, потому что те, кому нужна безопасность, Windows'ом не пользуется), и напридумывал всяких ограничений по доступу к файлам. Т.е. попытка открыть папку "Documents and Settings" приводила к сообщению, что отказано в доступе. Не оказалось проблемой это обойти, но не лишним будет вспомнить, как сие делается:

1. Заходим в свойства папки, вкладка "Безопасность", жмём кнопку "Дополнительно"



2. В окрывшемся окне выбираем вкладку "Владелец" и меняем его на себя, конечно же

воскресенье, 25 декабря 2016 г.

Программируемое реле против ПЛК на примере Siemens LOGO vs S7-200

Недавно был у меня спор с одним товарищем (монтажником) по поводу программируемых реле, их отличий от ПЛК и т.п. В общем-то закончилось всё предсказуемо, во-первых, тем, что нет строго определения "программируемого реле", поскольку понятие "контроллер" слишком широкое и включает в себя и программируемые реле тоже. Во-вторых, надо выбирать оборудование в зависимости от решаемой задачи. Нет смысла переплачивать тысячи долларов за какой-нибудь дорогой ПЛК, если можно купить дешевле, долларов за 500, равно как и нет смысла покупать программируемое реле за 10 000 рублей то, что не позволит быстро и эффективно решить задачу, которую можно решить с помощью ПЛК за 20 000 рублей.

В этой статье я хочу рассказать о некоторых нюансах при программировании наноконтроллера (программируемого реле) Siemens LOGO! Сравнивать его я буду с микроконтроллером Siemens S7-200, который стоит вдвое дороже, но при этом имеет гораздо больше функций. Контроллер S7-200 был снят с производства в Германии в конце 2012 года и формально заменён на линейку S7-1200. Однако, сравнивать LOGO! с S7-1200 не имеет смысла, поэтому сравним всё же с S7-200, к тому же в Китае их по прежнему производят, и своей актуальности они не потеряли. Я здесь не буду описывать что-то невероятное для LOGO!, например, сложные математические операции, которые запросто можно осуществить на S7-200. Остановимся на булевой алгебре, т.е. на том, что можно осуществить на языках LAD и FBD, представленных в обоих рассматриваемых контроллерах. Я не использую язык FBD с некоторых пор, поэтому примеры будут только на LAD и, дополнительно, на STL (STL или обобщённое название IL - Instruction List - аналог языка Ассемблера, только для ПЛК), который есть в S7-200.

Адреса я буду писать в формате для S7-200, а в фигурных скобках после них - те же адреса для программы для LOGO!.

Многократное присвоение

Главная проблема LOGO! - невозможность многократного присвоения значения одному и тому же элементу в разных частях программы.

Например, у нас имеется три дискретных входа: I0.1 {I1}, I0.2 {I2}, I0.3 {I3}, по которым срабатывает авария. И есть вход I0.7 {I7} для подтверждения аварии. Бит аварии храним в V0.1 {SF001}.

Напишем программу на Step-7/MicroWIN на языке STL (IL) для S7-200:

 Переведём эту программу на LAD для того же S7-200:

А теперь попытаемся изобразить нечто подобное на LOGO!


На первый взгляд проблем нет. Но мы видим явные отличия от программы для S7-200. Заключаются они в том, что у нас нет возможности создать несколько блоков с названием SF001 и для каждого из них производить операции присвоения (S) и сброса (R). Вот для S7-200 мы как раз могли сделать их все вместе, получив программу вида:

LD I0.1
O  I0.2
O  I0.3
S  V0.1, 1
LD I0.7
R  V0.1, 1

Она работала бы как мой пример для LOGO!, но нам этого как раз не нужно, нам, наоборот, нужно присваивать значения одному и тому же элементу в разных частях программы. На LOGO! мы этого сделать так просто не можем (т.е. теоретически можем, но такую программу будет невозможно нормально просматривать и редактировать), поэтому придётся изворачиваться. Для начала создадим переменные, которые будут отвечать установку бит SF001. Для I1, I2 и I3 это будут биты SF002, SF003 и SF004 соответственно.


Теперь, по идее, нужно по битам SF002, SF003 и SF004 установить бит SF001. Но и тут есть нюанс, а заключается он в том, что поскольку установленный бит SF001 сбрасывает любой из битов его устанавливающих, то LOGO! не даст вам создать такую программу.


Чисто теоретически, такое ограничение - бред, ибо мы имеем дело лишь с пародией на настоящюю релейную схему. На самом деле у нас тут самая обычная программа, которая в машинном коде никаких "блоков" не содержит. Т.е. программа выполняется сверху вниз слева направо, и все ограничения на "рекурсию" искусственны. Но сделать мы ничего с этим не можем, кроме как дополнительно усложнять программу:


Задействовав промежуточный бит M1, мы решили задачу.

Чтобы понять, насколько больше стало бы кода, напишим программу в таком виде на STL для S7-200:

Знаете, что такое "китайский код"? Это вот он самый.

Таймеры

Казалось бы, уж таймеры в программируемом реле должны быть коронной фишкой. Ну, например, есть не самый удобный способ установки бита и его сброса по таймеру в ПЛК S7-200:

Пришлось написать 8 строк кода и задействовать два таймера для простейшей, казалось бы вещи: по одному и тому же биту I0.1 устанавливать с задержкой в 1 секунду бит M0.1, по нему же с такой же задержкой сбрасывать тот же бит.

Попробуем воспользоваться стандартной функцией On-/Off-Delay...




 ...и получаем совсем не то, что хотели. Т.е. первоначально бит устанавливается с задержкой 1 секунда. Но впоследствии, если сигнал I1 пропадает (меньше, чем установленная на выключение 1 секунда), а затем снова появляется, то T001 всё равно сбросится в 0 на некоторое время, которое будет проходить между тем, как таймер на выключение досчитает, а таймер на включение ещё нет. Зачем нужен такой элемент как On-/Off-Delay - мне не понятно.

Попробуем другой способ, задействуем On-Delay (T002) и Off-Delay (T001):


Опять ничего не вышло. Дело в том, что T002 и T001 не должны быть одновременно включены, согласно нашей логике, а именно так оно и получается, поскольку Off-Delay не включается при выключении входа (с паузой), как нам надо, а просто включается вместе с включение входа, а при его выключении с паузой выключается.

Такой способ тоже ничего не даст:

 
В итоге, прекращаем заниматься ерундой и реализуем по аналогии с S7-200:
 

Короче говоря, никаких преимуществ перед S7-200 мы не увидели, а нашли лишь пару ненужных функций.

Итог: если вам надо реализовать управление контроллера безопасности (Safety Controller), управление системой загазованности или простейшей насосной станцией, то программируемое реле вполне можно использовать. Но достаточно, казалось бы, небольшого усложнения задачи, и потребуется уже нормальный ПЛК. Я бы не рекомендовал рисковать. Лучше купить китайский S7-200, чем долго и упорно мучиться с LOGO! (которые, кстати, уже несколько лет в Германии тоже не делают, а делают всё в том же Китае).

суббота, 24 декабря 2016 г.

Как запрограммировать Siemens LOGO! 8

Тут столкнулся с такой проблемой: в LOGO! версии 8 есть порт Ethernet, но нет старого-доброго порта для подключения фирменного кабеля LOGO!. На месте порта, куда раньше он втыкался, расположен порт для разъёма подключения флеш-карты Micro SD.

Попытка запрограммировать порт через интерфейс Ethernet привела к ошибке. Причём, само устройство в сети определяется.


Но дальше дело не идёт, вылазит ошибка следующего содержания:

Some network environment changes are detected. Restart LOGO!Soft Comfort to apply changes


В сети интернет были найдены предположения, что всё дело в настройках сетевой карты, мол, надо их сбросить через коммандную строку, а кто-то говорит, что всё дело в кракозябрах, которые могут находиться в строке с названием выбираемой сетевой карты. Следуя этим советам, я и переустанавливал драйвера, чтоб название сетевухи отображалось в Logo SoftComfort без кракозябр, и сбрасывал настройки неоднократно, - ничего не помогло.

Закончилось всё тем, что я просто выбрал в выпадающем меню "Interface"->"Connect throught" не Ethernet, а Dinamic DNS, ввёл туда вручную 192.168.0.1 (этот IP мне выдал поиск, когда я выбирал интерфейс "Ethernet"), и было мне счастье.
Поствил версию SoftComfort 8.2.0 вместо 8.0.0 - та же история, также только через Dynamik DNS получилось залить программу.

По умолчанию требуется пароль. Пароль: LOGO
Если пароль не подходит (программа ругается, что пароль неправильный), то возможно, что нужно обновить версию LOGO! SoftComfort. Например, такое наблюдалось с версией 8.0, пароль "LOGO" не подходил, а при установке версии 8.2 пароль подошёл. Из явных отличий версии 8.2 от 8.0 - наличие пункта меню Factory Reset (заводской сброс), что актуально для контроллеров LOGO, не имеющих собственного дисплея.

Обновления LOGO! SoftComfort по ссылке. Обновления не являются полноценными программами и устанавливается поверх предыдущей версии SoftComfort.

P. S.> Есть интересный момент: в интерфейсе для подключения можно выбирать не только Ethernet, но и кабель LOGO!, тот самый, через которые подключаются предыдущие модели. Вот только по факту такого разъёма на LOGO! 8 физически нет. Замечательная история ))

P. S. 2> Касательно заливки программы через флешку microSD. На флешку записывается откомпилированный файл проекта с расширением .bin. В Logo SoftComfort странным образом реализовано создание этого *.bin-файла. Компиляция вызывается через обычное сохранение файла (File->Save As), где надо поменять тип сохраняемого файла на бинарный - bin. Возможность сохранять в такой тип файла появляется только для программ, написанных на языке FBD, поэтому если пишите на LAD, то перед компиляция в бинарный файл нужно конвертировать проект в FBD:
Интересно, что первая попытка прошить бездисплейный Logo! таким способом не увенчалась успехом - оказалось, что при сохранении bin-файла нельзя менять стандартное имя этого файл LOGO_U_P.bin, иначе Logo! его игнорирует при включении питания и программу с него не забирает.