Простой способ создания диалоговоко окошка.
Для более подробного ознакомления - MessageBox function (Windows), Message Box Example (C++) (Windows) и Using Dialog Boxes (Window).
Немного кода (скачать):
#include <windows.h>
int DisplayResourceNAMessageBox() {
int msgboxID = MessageBox(
NULL,
(LPCWSTR)L"Are you sitting down for an hour. Quickly raise your ass and go a walk",
(LPCWSTR)L"Health timer",
MB_OK
);
return msgboxID;
}
int main() {
DisplayResourceNAMessageBox();
return 0;
}
Ну и как всегда - удачи!
RSLogix5000. Создание массива. Объяснение на пальцах.
Как создать массив в RSLogix 5000? Очень просто. Есть два пути. По-крайней мере известных мне: - 1) Создать соответствующий тег в общем списке всех тегов контроллера (Control Tags); - 2) завести непосредственно в программе и далее правым кликом выбрать - `создать`. Ниже на пальцах на скриншотах показаны ориентиры в этом нелегком деле (выбран первый способ). Use it!
| Step 1 |
| Step 2 |
| Step 3 |
| Step 4 |
| Step 5 |
Промышленное программирование. Введение. PLC/RSLogix5000/Archestra
Промышленное программирование.
Что же это такое? С чем приходиться больше сталкиваться: больше с промышленностью или с программированием? Лично у меня на это свой ответ: все зависит от технологии конкретного производства и, конечно, от степени внедренности на предприятии it-технологий. Также для меня стало очевидно, что круг вопросов программирования становится иным, весь фокус ложится именно на разработку промышленной логики (алгоритм) и визуализацию данной логики (по-сути - разработка интерфейса, позволяющего пользователю взаимодествовать с данной логикой в рамках технологических процессов). С этой точки зрения, промышленное программирование эквивалентно классическому: также - разработка алгоритма и также - разработка интерфейсной части. Но инструменты (язык) при этом свои, а ведь именно инструмент накладывает свои отпечатки на образ мышления. Думать по "С++" - ному - не то что думать по "PHP" - шному. Уверен, что Вы со мной согласитесь. Это же относится и к промышленному программированию.
Разработка помышленной логики (алгоритм).
Для кодинга в этом направлении используются свои языки. Все зависит от того, какой контроллер используется на предприятии. В моем случае - RSLogix, скорее это даже не язык, а среда разработки - RSLogix 5000 (разработка компании Rockwell Automation) для контроллеров производителя Allen Bredly (Allen Bredly Programmable Controller).
В RSLogix реализованы три подхода в программировании:
1 - Ladder Diagram (по-сути - RAD (от англ. rapid application development — быстрая разработка приложений));
2 - Function Block (графичский подход, ориентировано больше на инженеров по микроэлектронике);
3 - Structered Text (можно сказать - Паскаль в действии);
В большей степени на практике использую именно первый подход - Ladder Diagram. Ниже представлен небольшой пример программы: каждые 0,1 секунду контроллер считывает внешний сигнал - Signal - и записывает полученные значения в одномерный массив test[i]. И так - 10 раз. Программа конечно несложная, скорее - наглядная.
Сам по себе, синтаксис паскалеподобный.
Типы данных представлены не только такими как - bool, int, dint (double int), string, real (аналог float), timer, но и специфичными - alarm, hmi_button, etc.
Максимальная допустимая к созданию размерность массива - `3`мерная (Array Dimensions). Если в Паскале мы имеем дело с процедурой, то здесь представлены `Add-on`ы (Control module), в которых есть как внешние (Parameters), так и внутренние (Local Tags) члены, есть возможность назначить модификаторы доступа как в классах ООП (required, visibility).
Раасматривать другие возможности здесь не буду, просто скажу, что все, что есть в обычном программировании - есть и здесь, плюс свои "штучки".
Вообще, когда начинаешь программировать, то приходиться работать с 1) со множеством сигналов от различных датчиков, устройств, моторов, клапанов, ну и прочего оборудования и 2) центром всего - контроллером. Когда мы сидим за ноутом или компом и программируем, то часто не берем в счет то, что мы также обращаемся к микрокотроллеру - центральному процессору. Для высокоуровневых языков с ООП подходом - нормально, но если взять ассемблер - без этого никак. Ниже представлен промышленный контроллер. Протокол общения - сетевой стандарт - tcp/ip.

Для контоллеров Siemens используется Simatic Step7. Подходы теже самые, но со своими нюансами.
Визуализация промышленной логики (графический интерфейс пользователя).
"Общение" программы с конечным пользователем происходит на уровне интерефейса, в большей степени - графическом интерфейсе. В промышленном программировании - конечным пользователем является так называемый - оператор, причем так звучит должность человека на фабрике. Все серьезно :) Отсюда понятно, что интерефейс должен быть интуитивно понятным, а значит - графическим (70 % информации "бежит" по глазам). Поэтому приходиться решать и чисто дизайнерские задачи. Для наглядности приведен скриншотик рабочей зоны вот такого вот интефейса.
Что же это такое? С чем приходиться больше сталкиваться: больше с промышленностью или с программированием? Лично у меня на это свой ответ: все зависит от технологии конкретного производства и, конечно, от степени внедренности на предприятии it-технологий. Также для меня стало очевидно, что круг вопросов программирования становится иным, весь фокус ложится именно на разработку промышленной логики (алгоритм) и визуализацию данной логики (по-сути - разработка интерфейса, позволяющего пользователю взаимодествовать с данной логикой в рамках технологических процессов). С этой точки зрения, промышленное программирование эквивалентно классическому: также - разработка алгоритма и также - разработка интерфейсной части. Но инструменты (язык) при этом свои, а ведь именно инструмент накладывает свои отпечатки на образ мышления. Думать по "С++" - ному - не то что думать по "PHP" - шному. Уверен, что Вы со мной согласитесь. Это же относится и к промышленному программированию.Разработка помышленной логики (алгоритм).
Для кодинга в этом направлении используются свои языки. Все зависит от того, какой контроллер используется на предприятии. В моем случае - RSLogix, скорее это даже не язык, а среда разработки - RSLogix 5000 (разработка компании Rockwell Automation) для контроллеров производителя Allen Bredly (Allen Bredly Programmable Controller).В RSLogix реализованы три подхода в программировании:
1 - Ladder Diagram (по-сути - RAD (от англ. rapid application development — быстрая разработка приложений));
2 - Function Block (графичский подход, ориентировано больше на инженеров по микроэлектронике);
3 - Structered Text (можно сказать - Паскаль в действии);
В большей степени на практике использую именно первый подход - Ladder Diagram. Ниже представлен небольшой пример программы: каждые 0,1 секунду контроллер считывает внешний сигнал - Signal - и записывает полученные значения в одномерный массив test[i]. И так - 10 раз. Программа конечно несложная, скорее - наглядная.
Типы данных представлены не только такими как - bool, int, dint (double int), string, real (аналог float), timer, но и специфичными - alarm, hmi_button, etc.
Максимальная допустимая к созданию размерность массива - `3`мерная (Array Dimensions). Если в Паскале мы имеем дело с процедурой, то здесь представлены `Add-on`ы (Control module), в которых есть как внешние (Parameters), так и внутренние (Local Tags) члены, есть возможность назначить модификаторы доступа как в классах ООП (required, visibility).
Раасматривать другие возможности здесь не буду, просто скажу, что все, что есть в обычном программировании - есть и здесь, плюс свои "штучки".
Вообще, когда начинаешь программировать, то приходиться работать с 1) со множеством сигналов от различных датчиков, устройств, моторов, клапанов, ну и прочего оборудования и 2) центром всего - контроллером. Когда мы сидим за ноутом или компом и программируем, то часто не берем в счет то, что мы также обращаемся к микрокотроллеру - центральному процессору. Для высокоуровневых языков с ООП подходом - нормально, но если взять ассемблер - без этого никак. Ниже представлен промышленный контроллер. Протокол общения - сетевой стандарт - tcp/ip.
Для контоллеров Siemens используется Simatic Step7. Подходы теже самые, но со своими нюансами.
Визуализация промышленной логики (графический интерфейс пользователя).
"Общение" программы с конечным пользователем происходит на уровне интерефейса, в большей степени - графическом интерфейсе. В промышленном программировании - конечным пользователем является так называемый - оператор, причем так звучит должность человека на фабрике. Все серьезно :) Отсюда понятно, что интерефейс должен быть интуитивно понятным, а значит - графическим (70 % информации "бежит" по глазам). Поэтому приходиться решать и чисто дизайнерские задачи. Для наглядности приведен скриншотик рабочей зоны вот такого вот интефейса.
Вообще, система визуализации в промышленности именуется SCADA (аббр. от англ. supervisory control and data acquisition, диспетчерское управление и сбор данных). На самом деле, визуализация - это не просто создание интерфеса, это система сбора, управления и вывода данных. У нас на фабрике используется системная платформа - Archestra SCADA компании Invensys Systems. Также есть альтернативные системы, например - Elipse.
Стоит отметить и еще одну вещь. Теги (англ. tag — ярлык, этикетка, бирка; метить). После знакомства с промышленным программированием, понятие тега встречается практически на всех этапах. Для меня тег - не просто какая-то высокоуровневая метка, это носитель информационных единиц (true/false), также и носитель физических данных между контроллером и человеком. Своего рода теговый мостик (Tags bridge). Ниже представлены модели взаимодействия контроллера со SCADA с одной стороны, и с другой - датчиками, моторами, клапанами и другими устройствами.
Вот такое небольшое введение в промышленное программирование. Всем удачи :)
Javascript. Обмен данными между html - страничками. Альтернатива PHP скрипту
Конечно, громко сказано - альтернатива php скрипту. Имеется в виду отправка, обработка и получение ответа данных всевозможными методами (GET, POST). Как говорится, это классика. Но есть и вот такой вот альтернативный способ. Это взаимодействие html - файликов с помощью URL - адресов и JavaScript. Итак, подробности.
Передача данных в html-файл через URL-адрес.
После адреса ставиться знак вопроса и после него параметр, который нужно передать.
html://webpage.html?parametr
Если этих параметров несколько, то между ними ставиться амперсанд (&).
Помимо этого можно передавать при помощи форм. Для этого нужно воспользоваться методом GET.
Выглядеть URL-адрес в строке броузера будет следующим образом:
Получение переданных данных выполняется при помощи JavaScript.
Сначало мы присваиваем переменной все то, что находится после знака вопроса:
Если передавался один параметр, то переменную p_url можно обрабатывать.
Если параметров было много, то их нужно разделить:
В итоге мы получаем массив parametr, который содержит полученные данные.
Если Вы переслали данные при помощи форм, то надо избавиться от знака равенства и присвоить каждой переменной свое значение:
Если строчка была вида:
то получим массив:
или можно так:
Последнее время популярность набирает такой сервис как говорят - микроблогинга (по мне это больше, чем просто микроблогинг) - www.tumblr.com. Разработчики сервиса предоставили простой способ создания шаблона или по-другому - тем оформления с помощью обычной html
верстки с поддержкой javascript. И это отрадно. Для демонстрации отправки данных с одной html странички на другую я воспользовался именно этим сервисом.
Для этого я создал два блога, по-сути - две странички. Один из них - http://datasource.tumblr.com/ - будет служить формой для отправки данных, которые Вы туда поместите, ну и второй - http://tempbuffer.tumblr.com - принимающая Ваши данные страничка. Эта страничка парадирует php-скрипту, так сказать - пытается играть ее роль. Вот отсюда и было упомянуто об альтернативе. It`s working. Отрадно, все работает.
Ниже приведены сорсы, если нужно скачать, то кликай здесь - datasource и tempbuffer. Всем гуд лака :)
Передача данных в html-файл через URL-адрес.
После адреса ставиться знак вопроса и после него параметр, который нужно передать.
html://webpage.html?parametr
Если этих параметров несколько, то между ними ставиться амперсанд (&).
html://webpage.html?parametr1¶metr2¶metr3
Помимо этого можно передавать при помощи форм. Для этого нужно воспользоваться методом GET.
Выглядеть URL-адрес в строке броузера будет следующим образом:
webpage.html?name1=value1&name2=value2&name3=value3
Получение переданных данных выполняется при помощи JavaScript.
Сначало мы присваиваем переменной все то, что находится после знака вопроса:
var p_url=location.search.substring(1);
Если передавался один параметр, то переменную p_url можно обрабатывать.
Если параметров было много, то их нужно разделить:
var parametr=p_url.split("&");
В итоге мы получаем массив parametr, который содержит полученные данные.
Если Вы переслали данные при помощи форм, то надо избавиться от знака равенства и присвоить каждой переменной свое значение:
var values= new Array();
for(i in parametr) {
var j=parametr[i].split("=");
values[j[0]]=unescape(j[1]);
}
Если строчка была вида:
webpage.html?name=Serg&city=Рязань&age=21
то получим массив:
values[name]="Serg"; values[city]="Рязань"; values[age]="21";
или можно так:
values[0]="Serg"; values[1]="Рязань"; values[2]="21";
Последнее время популярность набирает такой сервис как говорят - микроблогинга (по мне это больше, чем просто микроблогинг) - www.tumblr.com. Разработчики сервиса предоставили простой способ создания шаблона или по-другому - тем оформления с помощью обычной html
верстки с поддержкой javascript. И это отрадно. Для демонстрации отправки данных с одной html странички на другую я воспользовался именно этим сервисом.
Для этого я создал два блога, по-сути - две странички. Один из них - http://datasource.tumblr.com/ - будет служить формой для отправки данных, которые Вы туда поместите, ну и второй - http://tempbuffer.tumblr.com - принимающая Ваши данные страничка. Эта страничка парадирует php-скрипту, так сказать - пытается играть ее роль. Вот отсюда и было упомянуто об альтернативе. It`s working. Отрадно, все работает.
Ниже приведены сорсы, если нужно скачать, то кликай здесь - datasource и tempbuffer. Всем гуд лака :)
C++. Пентамино. Решатель головоломки
Пентамино. Интересная конечно головоломка. На днях столкнулся с подобной задачкой. Есть 9 фигурок, каждая из которых представлена во входном файлике, причем своеобразной формы. Ниже парочка изображений этих фигурок
Также после нахождения решений в виде таких же рисунков, нужно каждую из фигурок как-то отделить визуально, обычно в классическом пентамино для этого квадратные фигуры разукрашивают в разные цвета. Но в нашем случае фигурки необычные :) На выходе должен быть выходной файл с приведенными решениями пентамино! Как быть? С чего начать? Какую выбрать тактику? На первый взгляд непонятно с какого угла подойти к вопросу. Но для себя определил пару критериев, которых попробую придерживаться.
1. Необходимо фигуры перевести в цвет. Номер фигуры определяет цвет в виде числа(числовой цвет, числовая идентификация)
2. Каждая фигура определяется матрично (2ух мерно) размера m*n. Матричный каркас
3. У фигуры есть форма, а значит должна быть возможность симметричных поворотов определенных для данной фигуры. Объектно-ориентированный подход
4. Метод сортировки - обход ладьей по часовой стрелке около первой фигуры (ближайшие ячейки, точки сопряжения) с переопределением матричного каркаса (подгонка)
5. Решением для двух фигур считается такая сортировка, при которой площадь сопряжения поверхностей двух фигур максимальна
Вперед и с песней :)
Также после нахождения решений в виде таких же рисунков, нужно каждую из фигурок как-то отделить визуально, обычно в классическом пентамино для этого квадратные фигуры разукрашивают в разные цвета. Но в нашем случае фигурки необычные :) На выходе должен быть выходной файл с приведенными решениями пентамино! Как быть? С чего начать? Какую выбрать тактику? На первый взгляд непонятно с какого угла подойти к вопросу. Но для себя определил пару критериев, которых попробую придерживаться.
1. Необходимо фигуры перевести в цвет. Номер фигуры определяет цвет в виде числа(числовой цвет, числовая идентификация)
2. Каждая фигура определяется матрично (2ух мерно) размера m*n. Матричный каркас
5. Решением для двух фигур считается такая сортировка, при которой площадь сопряжения поверхностей двух фигур максимальна
Вперед и с песней :)
Subscribe to:
Posts
(
Atom
)





