Изучение [закрытого] программирования PLC

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

У вас в основном есть два варианта:

  1. Использование PDO (для любой поддерживаемый драйвер базы данных):
    $stmt = $pdo->prepare('SELECT * FROM employees WHERE name = :name');
    
    $stmt->execute(array('name' => $name));
    
    foreach ($stmt as $row) {
        // do something with $row
    }
    
  2. Использование MySQLi (для MySQL):
    $stmt = $dbConnection->prepare('SELECT * FROM employees WHERE name = ?');
    $stmt->bind_param('s', $name); // 's' specifies the variable type => 'string'
    
    $stmt->execute();
    
    $result = $stmt->get_result();
    while ($row = $result->fetch_assoc()) {
        // do something with $row
    }
    

Если вы подключаетесь к база данных, отличная от MySQL, есть вторая опция, зависящая от драйвера, к которой вы можете обратиться (например, pg_prepare() и pg_execute() для PostgreSQL). PDO является универсальной опцией.

Правильная настройка соединения

Обратите внимание, что при использовании PDO для доступа к базе данных MySQL real подготовленные операторы не используются по умолчанию. Чтобы исправить это, вы должны отключить эмуляцию подготовленных операторов. Пример создания соединения с использованием PDO:

$dbConnection = new PDO('mysql:dbname=dbtest;host=127.0.0.1;charset=utf8', 'user', 'pass');

$dbConnection->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
$dbConnection->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

В приведенном выше примере режим ошибки не является строго необходимым, но рекомендуется добавить его. Таким образом, сценарий не остановится с Fatal Error, когда что-то пойдет не так. И это дает разработчику шанс catch получить любую ошибку (ы), которые являются throw n как PDOException s.

Однако обязательной является первая setAttribute() строка, которая сообщает PDO об отключении эмулируемых подготовленных операторов и использует подготовленные операторы real . Это гарантирует, что оператор и значения не будут разбираться с PHP перед отправкой на сервер MySQL (предоставление возможности злоумышленнику возможности внедрить вредоносный SQL).

Хотя вы можете установить charset в варианты конструктора, важно отметить, что «более старые» версии PHP (& lt; 5.3.6) молча игнорировали параметр charset в DSN.

Объяснение

Случается, что оператор SQL, который вы передаете prepare, анализируется и компилируется сервером базы данных. Указав параметры (либо ?, либо именованный параметр, такой как :name в примере выше), вы указываете механизм базы данных, в который вы хотите включить фильтр. Затем, когда вы вызываете execute, подготовленный оператор объединяется со значениями параметров, которые вы указываете.

Важно то, что значения параметров объединены с компилируемым оператором, а не с строкой SQL. SQL-инъекция работает, обманывая сценарий, включая вредоносные строки, когда он создает SQL для отправки в базу данных. Поэтому, отправляя фактический SQL отдельно от параметров, вы ограничиваете риск того, что закончите то, чего не намеревались. Любые параметры, которые вы отправляете при использовании подготовленного оператора, будут обрабатываться только как строки (хотя механизм базы данных может сделать некоторую оптимизацию, поэтому, конечно, параметры могут также оказаться как числа). В приведенном выше примере, если переменная $name содержит 'Sarah'; DELETE FROM employees, результатом будет просто поиск строки "'Sarah'; DELETE FROM employees", и вы не получите пустую таблицу .

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

О, и поскольку вы спросили, как это сделать для вставки, вот пример (с использованием PDO):

$preparedStatement = $db->prepare('INSERT INTO table (column) VALUES (:column)');

$preparedStatement->execute(array('column' => $unsafeValue));

Могут ли подготовленные операторы использоваться для динамических запросов?

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

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

// Value whitelist
// $dir can only be 'DESC' otherwise it will be 'ASC'
if (empty($dir) || $dir !== 'DESC') {
   $dir = 'ASC';
}

38
задан skaffman 22 January 2012 в 12:11
поделиться

8 ответов

Можно узнать о PLC, программирующем из различных источников в Интернете, один из которых этот (Викиучебник) или это

программа, которую Вы пишете, будет в значительной степени то же через различные бренды PLCs для LLDs (Лестничные Логические схемы), если Вы не используете определенные функции PLC. Но будет намного больше различий при использовании некоторого языка как IL (Список Инструкции). Но как только Вы записали программу, формат устройства хранения данных и выполнения отличается широко через бренды

, Лестничная логика является одним из этих 5 языков программирования для PLC, другие являющиеся FBD (Схема функционального блока), ST (Структурированный текст, подобный языку программирования Паскаля), IL (Список инструкции, подобный ассемблеру) и SFC (Диаграмма последовательной функции). Это просто различные представления языка программирования, различные ароматы, если Вы будете. Но обычно, данный бренд поддерживает только один из них. В США широко используются LLDs, в то время как в Европе, ILS более популярен.

18
ответ дан anand.trex 27 November 2019 в 03:07
поделиться

Лестничная структура, часто звоните, LD является одним из нескольких стилей языка, определенных в стандарте программирования автоматизации ISO 61131. Другие являются SFC (последовательная блок-схема), FBD (функциональная схема), ST (структурированный текст) и IL (список инструкции). IL подобен ассемблеру, и очень немного людей используют его. ST является основанным на тексте программированием во многом как ранние версии ОСНОВНЫХ. Это не часто используется также. LD разработан для сходства релейных контактов от электрической панели управления (который много PLC заменили). FBD больше походит на принципиальную схему. SFC является в основном блок-схемой.

поддержка Some PLC все, другое единственное некоторые, или даже один. В то время как LD наиболее распространен, FBD и SFC, завоевывают популярность.

Различные бренды действительно используют немного отличающиеся языки программирования. Они обычно достаточно подобны, что, как только Вы понимаете один бренд, можно работать с любым из них, но Вы не можете непосредственно взять код от одного PLC и использующий на другом бренде.

14
ответ дан Jim C 27 November 2019 в 03:07
поделиться

Ответы, данные до сих пор, симпатичны на цели. Одна вещь я нашел, что PLCs имеют раздвоение личности когда дело доходит до своих языков и установки. Их базовый дизайн должен дать электрическим парням гибкое средство установки управляющей логики для их общего замысла. PLCs являются в основном набором входа и набором выводов и как они соединены, управляется программным обеспечением, которое Вы загружаете в устройство.

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

Однако в последние годы PLCs поддерживали множество языков для максимальной гибкости. Однако, по-моему, небольшому количеству PLCs, я работал, очень недостает с точки зрения того, чтобы быть средой программирования. Простые вещи как присвоение имен переменной к ячейке памяти часто не разрабатываются на используемый язык. Те, которые легки работать, являются часто не самыми экономически эффективными для задания.

Несмотря на эти препятствия они превосходны для упрощения сложных электрических систем. Если Вы будете работать с другими на проекте, Вы найдете, что Ваше знание программирования поможет проекту решить тернистые программы. Я смог взять 100 лестничных программ логики, которым звонят, и переписать ее в одну треть ступенек. Как только я смог выучить лестничный язык логики, я смог реализация различная оптимизация, которая уменьшила сложность программы.

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

13
ответ дан Scott Whitlock 27 November 2019 в 03:07
поделиться

У меня было немного PLC, программирующих на Университете. Это, казалось, мне, было одним уровнем ниже, чем блок, но устройство, которое мы использовали, не было новейшим.

я живо у Вас должен быть драйвер PLC, но я сначала искал бы средства моделирования и читал бы больше об этом перед покупкой.

1
ответ дан Klesk 27 November 2019 в 03:07
поделиться

PLC является термином, использованным для устройств та лестничная логика использования. Устройства, которые программируются на более типичных языках программирования, обычно называют микроконтроллерами. Однако существуют некоторые из нас, что при случае глыба их всех под PLC называет.:-), Не уверенный то, сколько лестничной логики варьируется, но код микроконтроллера, может значительно варьироваться.

-3
ответ дан Brian Knoblauch 27 November 2019 в 03:07
поделиться

Я много занимался программированием ПЛК, а теперь немного занимаюсь программированием .NET. Очень опасно переключаться в любом случае, потому что многие навыки, которые, по вашему мнению, должны передаваться (шаблоны и тому подобное), очень сильно сбивают вас с пути.

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

Например, если выход не включается, они вводят идентификатор выходного электрического устройства в функцию поиска программного обеспечения для программирования, найдите эту выходную катушку и начните искать оттуда проблемы. Одна из частых ошибок, которую допускают некоторые программисты ПЛК, - это «отображать» свои вводы / выводы в структуру (в ПЛК они называются типами, определяемыми пользователем), и они используют инструкцию копирования для перемещения всех вводов или выводов в структура сразу. Имеет смысл с точки зрения программирования ПК, но заставляет обслуживающего персонала убить вас. Обычно программное обеспечение для программирования предоставляет функцию перекрестных ссылок, где они могут указать эту выходную катушку, и она будет сообщать им везде в программе, что она используется. Если вы используете инструкцию копирования для перемещения 10 слов ввода-вывода в структуру данных из 10 слов, он должен сидеть там и подсчитывать биты, чтобы выяснить, какой бит в источнике копии сопоставляется с каким битом на стороне назначения копировать. Правда, комментарии могут помочь, но с этим тоже есть проблема ... ПЛК хранят всю программу и позволяют загружать программу из нее в экстренных случаях, если вам нужно устранить неполадки и у вас нет копии исходной программы. Проблема в том, что из-за недостатка места ПЛК не сохраняет комментарии. Так что, если линия не работает, это обходится в 5000 долларов за минуту простоя, и парень выбегает туда с ноутбуком, ему, возможно, придется выполнить быструю загрузку без комментариев и попытаться устранить неполадки. Наличие тех инструкций по копированию там, потеря 10 минут его времени, просто стоило компании 50 000 долларов простоя. Это то, о чем вы должны знать при написании программ для ПЛК.

Еще несколько советов: некоторые ПЛК поддерживают циклы FOR. Никогда не используйте их. По той же причине выше, они делают код очень трудным для устранения неисправностей для специалиста по обслуживанию. Это связано с тем, что если у вас есть один фрагмент кода в ПЛК, который сканируется более одного раза за одно сканирование (например, содержимое цикла), то, когда вы переходите в режим онлайн-отладки, программное обеспечение не может показать вам значения для каждого из 10 циклов, которые выполнили это сканирование, поэтому вы действительно не знаете, на какое значение вы смотрите. Затем вам нужно написать весь этот хитрый код, чтобы вывести значения цикла для определенного индекса цикла в некоторые другие теги (переменные), которые вы можете отслеживать. Это всего лишь еще один аргумент в пользу решения проблемы в экстренных случаях. Использование подпрограммы более одного раза за одно сканирование страдает той же проблемой.

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

В программировании на ПК мы, конечно, стремимся повторно использовать код насколько это возможно. Однако в ПЛК и системах управления простои очень дороги, а оборудование - дорого. Память - дешевая, а программисты ПЛК - дешевы. Следовательно, ожидается, что если у вас есть 10 одинаковых вещей на вашем компьютере (например, конвейерные приводы или что-то в этом роде), у вас будет 10 разных файлов (подпрограмм), по одному для каждого диска, и каждый диск будет иметь свои собственные переменные, связанные с ними: например, Drive1_Run, Drive2_Run, Drive3_Run и т. Д. Это будет очень "неправильно" для вас, когда вы начнете программировать на ПК, но это все из-за пунктов, которые я ' сделал выше. Когда вы находитесь в ситуации простоя и кто-то говорит, что Drive 3 не работает, вы открываете ноутбук, переходите к файлу для Drive 3 и смотрите на выходную цепочку Run. Вы начинаете устранение неполадок оттуда, пока программа выполняется. Нет никаких точек останова (программа никогда не останавливается).

Удачи в ваших начинаниях. Я написал еще несколько идей за годы программирования ПЛК , если вы хотите их проверить.

57
ответ дан 27 November 2019 в 03:07
поделиться

Программирование ПЛК следует рассматривать как деятельность по реализации результатов разработки программного обеспечения ПЛК, если только вы не используете ПЛК исключительно как часть компонентов, альтернативных механическим или электрическим решениям.

Исходя из этого, ПЛК среда программирования, как правило, управляется IEC61131, гарантированное время цикла, «упреждающее» реальное время, нет необходимости обрабатывать проблемы, связанные с ОС в реальном времени, непрерывное сканирование кода, непрограммный указатель, концепция, отличная от типичной многозадачности, порождающей компьютерные задачи. Выполнение кода, естественно, атомарно, нет необходимости использовать мониторы между задачами.

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

  1. Лестничная диаграмма имеет свою базовую концепцию, касающуюся электроэнергии. стиль блокировки потока. Разрешение кода в одной сети - это либо горизонтальное, либо вертикальное сканирование (вы можете найти ресурс по этой теме у производителя или на других сайтах). Если ваш код имеет единственное разрешение сканирования и находится в одной сети, некоторое непостижимое поведение может быть связано с типом сканирования (важно помнить, что релейная диаграмма - это только эмуляция электрической схемы, она все еще выполняется последовательно).

  2. FBD или функция Блок-схема представляла собой электронный поток сигналов, но сегодня это может быть поток данных в зависимости от типа ПЛК. FBD показывает более четкую последовательность выполнения, очень похожую на лестницу горизонтального сканирования в последовательности сканирования. Сегодня FBD обычно используется как контейнер для функциональных блоков объекта, хотя реализация зависимостей и визуальное сходство с моделью процесса зависят от типа ПЛК.

  3. Литерал очень похож на БЕЙСИК, но только синтаксис; выполнение все еще сквозное сканирование. Дословный язык хорош для математических расчетов. Для реализации высокого уровня методы или создание атрибутов внутри объекта может быть проще с помощью Literal. Программирование конечного автомата с использованием представления состояний или констант на английском языке делает программу очень удобочитаемой.

  4. Список операторов похож на мнемонику ассемблера, но опять же, выполнение по-прежнему является сквозным сканированием, а не указателем программы. Он силен в битовых операциях и дискретной логике в стиле скобок. Это может быть очень эффективный язык для использования с правильным структурированием и комментированием.

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

Управление системой ПЛК при обработке ввода-вывода, коммуникации, горячее резервирование - это усилия по настройке оборудования и зависят от продукта. Как правило, это можно рассматривать отдельно от программной инженерии. Однако данные, относящиеся к управлению системой ПЛК, относятся к типу «локализованных» (независимая область адресации данных), хороший подход к моделированию данных в разработке программного обеспечения может помочь в управляемости системных данных.

7
ответ дан 27 November 2019 в 03:07
поделиться

У Allen-Bradley есть бесплатный программный ПЛК на основе DOS, специально предназначенный для обучения. Вероятно, вы сможете найти его, если зайдете на их сайт или в Google. Он используется для обучения программированию ПЛК в школах.

1
ответ дан 27 November 2019 в 03:07
поделиться
Другие вопросы по тегам:

Похожие вопросы: