Twincat 2 [Problem]: *** is greater than maximum number of POUs(2048). Increase the maximum number of POUs and reload! Do you want to cancel the loading now?

Have you ever got in such situation? After opening some project for the first time you get this error: 

* is greater than the maximum number of POUs(2048). Increase the maximum number of POUs and reload!Do you want to cancel the loading now?

* is greater than the maximum number of POUs(2048). Increase the maximum number of POUs and reload!Do you want to cancel the loading now?

Here Is the solution: 

1 . Open your Twincat folder. Navigate to “Plc” folder.

2. Find TwinCAT PLC Control.ini and open it with some text editor.

3. Search for “MaxNumOfPOUs

4. Change the value from 2048 to 4096

5. Save changes.

If you have any questions about the article, or with the Mitsubishi robots at all, please don’t hesitate to write me an email.

Codesys: Едномерни масиви


Здравейте колеги.

В тази статия съм решил да обясня какво представляват масивите, за какво се използват и как се декларират и извикват в средата Codesys.
Какво представляват масивите.Масива е структура която съдържа подредена информация. Може да си го представите, като последователност от клетки, като всяка клетка си има свой собствен пореден номер и вътре в нея се съдържа информация. Специфичното  в случая е, че всички клетки трябва да съдържат еднотипна информация, като тя може да бъде числа, символи както дори и структури. За структурите ще говорим по-нататък.
Какво е предназначението на масивите.

  • Събирането и организирането на информация от един и същи тип
  • Използване на едно име при използване на която и да е клетка от масива, като разликата е само индекса
  • Значително се улеснява сортирането на информация

Как се използват масивите.
Най-основната декларация, съдържа само името на масива, големината и типа на данните в него.

Име: ARRAY[From..To] of INT;

Тук е важно да се отбележи, че не е задължително броенето да започва от 1 до N както е при повечето езици за програмиране. В случая нямаме ограничение да броенето да започне от 7 и да свърши на 90.Ето и един пример за реална декларация:
NewArray: ARRAY[5..20] of INT;
Също така можем да дадем стойности на масива при самата инициализация.Ще използваме горния пример:
NewArray: ARRAY[5..20] of INT := [6,49,3,659,5];
Как се извикват елементи от масива.
Достъпването на всеки един елемент от масива става като в повечето езици от високо ниво. Пишем името на масива, и в скобите добавяме индекса който искаме да достъпим. За да покажа нагледно ще декларирам нова променлива от същия тип какъвто е и масива, и ще присвоя някоя от неговите стойности.

testBoolVar: BOOL;

testBoolVar:= NewArray[1];

Индкса на масива може да бъде и променлива.

arrIndex: int:=1;

testBoolVar: BOOL;

testBoolVar:= NewArray[arrIndex];

Ако имате въпроси с гореописаните неща, моля да задайте ги в коментарите.

Основни методи на декларация в Codesys (Structured text)

Здравейте колеги. 
 В тази кратка статия съм решил да ви опиша основните методи за декларации в Codesys. Ще ви покажа как се създават нови променливи, стрингове, масиви. Декларациите са абсолютно валидни за всички софтуери който са базирани на езика за програмиране “Structured text” (ST), дефиниран в стандарта IEC 61131-3. 
Първо ще започна с деклариране на променлива. 

TestVar: INT; 

 Декларираме променлива с име “TestVar” от тип Integer. 
При декларацията можем да използваме бързите клавиши за деклариране,а те работят последния начин: Името на променливата : първата буква от типа -> CTRL+ enter. олзваме буквите както следва:
– I – INT – S – STRING – B – BOOL – R – REAL 
Ако не напишете нищо след името на променливата, а просто натиснете CTRL+ Enter , автоматично ще декларирате променлива от тип BOOL. Деклариране на променлива с инициализираща стойност.                       TestVar: INT := 10; 
Това означава, че при първото извикване на променливата, тя ще има някаква стартова стойност. За пример ще дам, всеки един цикъл. Винаги трябва да имаме начална стойност, от която да започне броенето. Също така инициализиращата стойност може да бъде друга променлива.                       ТestVar1: INT:= 50;                        ТestVar: INT :=ТestVar1 ; Деклариране на стринг с дефинирана дължина.                      ТestString: STRING(80); 
В случая казваме, че дължината на стринга е от 80 символа. Можем да декларираме и инициализираща стойност на стринга. 
ТestString: STRING:= ‘Hello World’; Деклариране на масив с инициализираща стойност.                        TestArray: ARRAY[1..5] OF INT := [1,2,3,4,5]; 
В случая даваме освен големината на масива, също така и всичките инициализиращи стойности. Индексите на масива могат да бъдат както [1..5], също и [50..70], всичко зависи от целите на задачата. Деклариране на многомерен масив. 
                       TestArray: ARRAY[0..10,0..5] OF INT; 
В случая декларираме двумерен масив, в който всички стойности ще бъдат от целочислен тип.Деклариране на пойнтер. 
TestPointerToStrArray : POINTER TO STRING ( 50 ); Деклариране на пойнтер към масив от стрингове. 
TestPointerToStrArray : POINTER TO ARRAY[1..50] OF STRING ( 50 ); 
 Тук декларацията е много подобна на предната, с разликата, че първо казваме каква да е размерността на масива, и след това размерността на стринговеете. Ако имате накакви въпроси или забележки, ще се радвам да ги прочета в коментарите. Също така можете да ми задавате въпроси и на посочения имейл. 
 If you have any questions about the article, or with the Codesys programing at all, please don’t hesitate to write me email.

TestVar: INT; 

 Декларираме променлива с име “TestVar” от тип Integer. 
При декларацията можем да използваме бързите клавиши за деклариране,а те работят последния начин: Името на променливата : първата буква от типа -> CTRL+ enter. олзваме буквите както следва:
– I – INT – S – STRING – B – BOOL – R – REAL 
Ако не напишете нищо след името на променливата, а просто натиснете CTRL+ Enter , автоматично ще декларирате променлива от тип BOOL. Деклариране на променлива с инициализираща стойност.                       TestVar: INT := 10; 
Това означава, че при първото извикване на променливата, тя ще има някаква стартова стойност. За пример ще дам, всеки един цикъл. Винаги трябва да имаме начална стойност, от която да започне броенето. Също така инициализиращата стойност може да бъде друга променлива.                       ТestVar1: INT:= 50;                        ТestVar: INT :=ТestVar1 ; Деклариране на стринг с дефинирана дължина.                      ТestString: STRING(80); 
В случая казваме, че дължината на стринга е от 80 символа. Можем да декларираме и инициализираща стойност на стринга. 
ТestString: STRING:= ‘Hello World’; Деклариране на масив с инициализираща стойност.                        TestArray: ARRAY[1..5] OF INT := [1,2,3,4,5]; 
В случая даваме освен големината на масива, също така и всичките инициализиращи стойности. Индексите на масива могат да бъдат както [1..5], също и [50..70], всичко зависи от целите на задачата. Деклариране на многомерен масив. 
                       TestArray: ARRAY[0..10,0..5] OF INT; 
В случая декларираме двумерен масив, в който всички стойности ще бъдат от целочислен тип.Деклариране на пойнтер. 
TestPointerToStrArray : POINTER TO STRING ( 50 ); Деклариране на пойнтер към масив от стрингове. 
TestPointerToStrArray : POINTER TO ARRAY[1..50] OF STRING ( 50 ); 
 Тук декларацията е много подобна на предната, с разликата, че първо казваме каква да е размерността на масива, и след това размерността на стринговеете. Ако имате накакви въпроси или забележки, ще се радвам да ги прочета в коментарите. Също така можете да ми задавате въпроси и на посочения имейл. 
 If you have any questions about the article, or with the Codesys programing at all, please don’t hesitate to write me email.

Problem with starting of SIMATIC S7-PLCSIM v13 and solution

Hello, guys.

In this article I want to tell you about a problem I encountered , and my solution.Probably there are a few different solutions, but I will tell you about mine.

It’s about SIMATIC S7-PLCSIM v.13 software, with SIMATIC S7-1200 1212CAC/DC/RLY hardware.

When I try to start PLCSIM v.13 SP1,with TIA PORTAL on Windows 7 64 bits, I get the following error message:

Fig 1. Error message 

Also when I try to go in Simulation Mode on Tia portal, there was also an error message: Тhe totally integrated automation portal has encountered a problem and needs to close
First, I try to follow the instructions, shown in the error message. I put the disc in the PC and start the repair. Unfortunately, it was useless ,and I tried another  method.. the working method.

SOLUTION:1.    Go to Updates for PLCSIM V13 SP1  and download the update.2.    Download both files:a.     SIMATIC_S7_PLCSIM_V13_SP1_Upd1.exe (2.5 MB)b.     SIMATIC_S7_PLCSIM_V13_SP1_Upd1.001 (370.6 MB)3.    IMPORTANT: Download the both files in one directory.4.    Execute SIMATIC_S7_PLCSIM_V13_SP1_Upd1.exe   5.    Follow the instructions

If you have any questions about the article, or with the Mitsubishi robots at all, please don’t hesitate to write me an email.

Mitsubishi robots: Параметри част 1

Здравейте колеги.
Започвам да правя една серия от статии в които ще разписвам един от най-важните сегменти при програмирането и настройка на индустриални манипулатори на фирма Mitsubishi, а именно параметрите.Започваме със категория “Movment parameter” , тъй като там се намират параметрите които се използват най-често.

Motion Limit (Ограничаване на движенията) Ограничение на движението може да бъде направено в двете основни координатни системи а именно : Joint movement range и XYZ movement range .

–     За да зададем ограничение в Joint координатната система можем да използваме интерфейса в менюто Movement parameter -> Motion limit , или да променяме стойностите на параметъра „MEJAR“. Което и от двете да изберем трябва да запомним няколко важни неща:

*   Лоша практика е да се увеличават ограниченията в движенията, защото това може да доведе до достигане на механичните стопери на робота.

*   Ограниченията се задават, като се съобразява в двете граници долна и горна, да е поставен съответния положителен или отрицателен знак.

–     За да зададем ограничение в XYZ координатната система можем да използваме интерфейса в същото меню, или да променяме параметъра “MEPAR”. Общо взето рестрикциите при него са подобни, както при първият.

Motion Limits


Фиг.1 Меню Motion LimitParameter

JOGОт менюто JOG можем да прави настройка на оперативните скорости, когато управляваме робота в режим „Joint jog” или в „XYZ Jog”. Съответно имаме да настроим следните параметри:               За Joint JOG:-        H-Inching – стъпката в градуси(deg) когато сме избрали High Unit за скорост.-        L-Inching – стъпката в градуси(deg) когато сме избрали Low Unit за скорост.
За XYZ JOG:-        H-Inching – стъпката милиметри(mm) когато сме избрали High Unit за скорост.-        L-Inching – стъпката в милиметри(mm)  когато сме избрали Low Unit за скорост.


Фиг.2 Меню JOGParameter

HANDЗа параметъра HAND както и неговите подменюта, ще има цяла отделна статия.Weight and SizeТова е менюто в което можем да подадем информация на робота за физическите характеристики на инструмента. Това в общия случай е необходимо ако целта ни е да направим оптимизация на съотношението Скорост/Време за изпълнение на движение, или да използваме функцията “Оadl”.
Work–        Weight [Kg] – задаваме теглото на детайла който ще вдига робота-        Size[mm]  по X,Y,Z – задаваме физическите размери на детайла-        Center of gravity position[mm]  по X,Y,Z – трябва да пресметнете центъра на тежестта по всяка една от осите и да ги въведете във съответните полета.

Hand–        Weight [Kg] – задаваме теглото на инструмента-        Size[mm]  по X,Y,Z – задаваме физическите размери на инструмента, измерени от началото на координатната система на инструмента, или по-точно казано, премерени от края на фланеца на последната става.-        Center of gravity position[mm]  по X,Y,Z – трябва да пресметнете центъра на тежестта по всяка една от осите и да ги въведете във съответните полета.


Фиг.3 Меню Weight and sizeParameter

Така завършва първата част от поредица статии описващи параметричните възможности на роботите на фирма Mitsubishi.
Ако имате каквито и да е въпроси свързани със статията, или със роботите като цяло, можете да ги зададете в коментарите или на имейл.

If you have any questions about the article, or with the Mitsubishi robots at all, please don’t hesitate to write me email.

Свързване към Mitsubishi робот посредством TCP/IP протокол

Свързване към Mitsubishi робот, ще бъде първата от редица статии свързан със индустриалните манипулатори на фирма Mitsubishi.
Преди да обяснявам за каквито и да е настройки или да покажа примери свързани със програмирането на самите роботи, ще започна със една въвеждаща статия за това как да направим комуникация със робота.
Като първа и най-важна стъпка е да намерим какъв е IP адреса на конкретния робот. Това може да стане като използвамеTeaching box-а.
За R56TB:При пускане на ТB, влизаме в Menu -> Parameter – > Edit( както е показано на фиг.1) .Въвеждаме “NETIP“, след това натискаме “Read”. Този параметър ще ни изведе IP адреса на робота.

За R32TB:При пускане на TB, натискаме EXE, от менюто избираме „3.PARAM“ там пишем “NETIP”, натискаме “EXE” бутона и ни се извежда на монитора IP адреса на робота.

След като вече имаме IP-то, трябва да отворим RT ToolBox2.За да създаден нов проект избираем от главното меню Workspace-> New.Пишем съответните имена.В менюто Edit Project първо трябва да изберем типа на контролера, тоест дали е Q или D тип.След това избираме метод за комуникация. За директно свързване към робота избираме TCP/IP.

След като изберем типа на комуникация избираме “Detail”, където попълваме IP-то на робота.След това „ОК“, в другото контекстно меню пак „ОК“ и вече всички настройки са готови.Остава само да отиде в менюто „Offline” което се намира в най-горното контекстно меню и да да изберем „Online”.

Ако имате някакви проблеми, не се колебайте да ги напишете във коментарите или направо да ми пуснете имейл, ще ви отговоря във възможно най-кратък срок.

Управление на асинхронен двигател посредством G120 и S7-1200 на фирма Siemens

Статията е свързана със един проблем който разреших по време на дипломното ми проектиране. Той се появи когато проектирах частта свързана със вентилация, и по-конкретно управление на вентилатора. Под управление се разбира старт-стоп и продължителност на вентилиране. След като успях да “разреша проблема” реших, че може би разяснение в една кратка статия би спестила главоболия и време на колеги които също като мен са в началото на своята работа със продуктите на Siemens, и програмирането на PLC като цяло.
Като за начало да уточня със какво точно работя. Това е софтуера на фирма Siemens – TIA Portal 13(Totally Integrated Automation). Той е удобен за работа, и съчетава в себе си функционалности свързани не само със програмирането на PLC-то, но и със интеграцията между устройствата, определяне методите на комуникация, йерархичната структура на системата както и много други неща. Инвертор G120c PN 4.7, както и контролер S7-1200.  

Като за начало ще присъединим инвертора към системата,а това става по следния начин:1.От менюто “Hardware catalog” избираме модела инвертор с който разполагаме(за целите на проекта: SINAMICS G120c PN 4.7). Чрез drag and drop го добавяме в “Devices and networks”.2.Свързваме контролера и инвертора. Избираме Profinet комуникация за текущия проект.3.Кликва се с десен бутон на създадената връзка и от контекстното меню се избира „Assign device“.Когато връзката между устройствата е установена, трябва да ъплоуднем конфигурацията на PLC-то.

Фиг.1 Конфигурирана връзка между S7-1200 и G120c
За да се уверим, че комуникацията работи коректно, от главното меню на TIA портал избираме “Device and Networks”, където ни е предоставена опция за “Flash” на което и да е от периферните устройства. След това трябва да добавим така наречената стандартна телеграма. Тя се използва за циклична комуникация между контролера и инвертора. В случая зa най-подходяща е избрана “Standard Telegram 1, PZD-2/2”. Тя е подходяща по редица причини. 

                Фиг 2. Структура на Standard Telegram 1, PZD-2/2               

ПараметърОписание
STWControl Word
ZSWStatus Word
NSOLL_ASpeed setpoint 16 bit
NIST_ASpeed actual value 16 bit

Таблица 1. Описание на Standard Telegram 1, PZD-2/2
Както се вижда на фиг.2 тази телеграмa има сравнително проста структура. Имаме по една 16 битова дума, съответно контролна и статусна с които можем да манипулираме, и съответно следим състоянието на инвертора. Също така имаме по една 16 битова дума за заданието по скорост, и сътоветно такава с която да четем реалната скорост.

Телегратама се избира по следния начин:1.В “Device view” , избираме от „Hardware catalog“ -> „Submodules“ сътоветно Standard Telegram 1, PZD-2/2.2. Чрез drag and drop я поставяме в “Device overview”.

Фиг.3 Добавяне на станратната телеграма към проекта.
След като всичко по настроиките е готово, следва да се напише програмата която ще управлява двигателя. Ще използваме езика за програмиране Ladder. Освен стандартните ключове, ще използваме и няколко функционални блока. Те са ни нужни за да можем да пишем или съответно четем информацията за инвертора. За писане се използват DPWR_DAT и съответно Move. За четене DPRD_DAT. 

Фиг. 4 Старт на трансфера посредством избраната телеграма
Използваме блока DPWR_DAT за да определим първо коя ще ни е контроната дума(STW). Също така със тази функция задаваме канала по който ще бъдат прехвърляни думите, а именно телеграмата „Standard Telegram 1, PZD-2/2“. 
Точно в обратната посока работи DPWR_DAT. Тя служи за четене на дума от инверотора към PLC-то.Трансфера на думата трябва да следва логиката заложена в Таблица 2.За пишем и презаписваме нужните ни стойности във думата с която ще работим, ползваме библиотечната функция “Move”. Първо се подава дума в която 0 бит да бъде със стойност 0. След това се подава същата дума със стойност на нулевия бит 1. Това поставя инвертора в режим “Ready”, тоест имаме направена идентификация и при стойност 1, на бит ноомер 3, двигателя ще се развърти. 

Таблица 2. Структора на контролната дума по битове
В конкретния случай първата контролна дума която ще бъде записана е „047E“. След това следвайки логиката, пишем новата дума която е „047F”. В Таблица 3, са показани думите във бинарен формат, където ясно се виждат кои са активираните битове при двете думи. В случая става дума само за пускане и спиране на двигателя, но това е една много малка част от възможностите на инвертора.

HexadecimalBinary
047E0000 0100 0111 1110
047F0000 0100 0111 1111

Таблица 3. Контролните думи в HEX и BIN формат
Освен да пуснем двигателя, трябва и да зададем скорост на въртене. Нея ще я зададем, като подадем на следващата поредна дума скороста която искаме.

Фиг5. Програмна реализация за Start-Stop алгоритъм

Това е решението което аз успях да реализирам. Готов съм да отговря на всякакви въпроси, както и да прочета критика. Всяка градивна дискусия би била полезна за всички четящи темата.

Проблем при стартиране на SIMATIC S7-PLCSIM v13

Здравейте, колеги. В текущата статия искам да споделя един проблем, и съответно решението му, на който аз се натъкнах. Той е свързан със SIMATIC S7-PLCSIM v.13. Преди да опиша какъв точно е проблемът искам да кажа, че ползвам SIMATIC S7-1200 с процесор 1212CAC/DC/RLY.

Когато се опитах да стартирам PLCSIM v.13 SP1 с TIA PORTAL v.13 SP1 на Windows 7, който е 64-битов, получих следното обезпокояващо съобщение показано на Фиг.1. Също така, при опит за стартиране на симулация през TIA PORTAL v13 поlучавах следното съобщение за грешка
“Тhe totally integrated automation portal has encountered a problem and needs to close”

Фиг.1 Грешка при стартиране на SIMATIC S7-PLCSIM v.13
Направих това, което пише, а именно да поправя инсталацията. За съжаление това не свърши никаква работа. След това направих малко проучване и установих, че трябва да имам направен ъпдейт.
Ъптдейта може да намерите на следния линк ->Updates for PLCSIM V13 SP1
ВАЖНО! – Задължително двата файла SIMATIC_S7_PLCSIM_V13_SP1_Upd1.exe и
SIMATIC_S7_PLCSIM_V13_SP1_Upd1.001  трябва да ги свалите в една и съща папка(директория). След това стартирате .ехе файла и следвате инструкциите. След като приключи с ъпдейтването PLC SIM V13 тръгна без проблем, както е показано на фиг.2

Фиг.2 Начален енгран PLC SIM V13

В бъдеще имам намерение да качвам разяснения по всички проблеми, с които съм се сблъсквал, съответно и техните решения. Така надявам се допринасям с частица към развитието на българското Siemens комюнити.

Актуализация на система с девиаторни ключове. Схема с Smart Relay

Разработката която искам да ви покажа, я направих преди няколко месеца. Тя ми беше дадена като задание за курсов проект, но смятам, че има своята експлоатационна тежест, и може да търпи развитие и модификации.

Поради факта, че имах конкретни задания, схемата е реализирана с програмируемо реле на фирмата Schneider Electric, но концепцията може да бъде реализирана спокойно с който и да е подобен продукт.

I.                  Съдаржание на проекта
1.     Задание. Същност и пояснения.2.     Блок схема на поставаената задача.3.     Актуализация на заданието, чрез промяна на технологията и ТСА.4.     Описание на входните и изходните сигнали на системата.5.     Програмна реализация на задачата.

II.            Реализация на поставените задачи
1. Задание. Същност и пояснения.

Целта на поставената задача е да се реализира система за включването и изключването на лампа от няколко различни ключа.

Фиг.1 Схема на свързване на лампа, с два отделни ключа
На Фиг.1 виждаме реализирана схема на свързвана, която използва два ключа за промяна на състоянието на една лампа. Независимо от това който от ключовете бива натиснат, винаги лампата ще променя състоянието си от включено в изключено.

Фиг.2 Схема на свързване на лампа, с три отделни ключаАналогично на първия случай, на фигура 2 имаме същата система, но реализирана с 3 ключа. Класическото изпълнение на тази задача става, чрез използването на девиаторни ключове (Multiway Switches). То е доказано във времето, като ефективно но само по себе си има няколко съществени недостатъка. Най-съществения от тях е, че при нужда за добавяне на допълнителни ключове, трябва да се правят сложни хардуерни и монтажни процедури, които при реализацията посредством PLC са премахнати.
2. Блок схеми на поставените задачи.
Принципа на работа на двете схеми на свързване може да бъде описано, чрез съответните блок схеми.

Фиг.3 Блок схема на вариант с два ключа
На схемата като Input 1 и Input 2 са отбелязани съответно промяната на състоянието на ключове 1 и 2. Тя е изградена, съборазно таблицата за истинност на „сума по модул 2“ или „изключващо ИЛИ“.

Фиг. 5 Таблица на истинност на „изключващо ИЛИ“.Ако приемем, че лампата е логически елемент който може да приема две състояния, 1 –„Включено“ и 0-„Изключено“, и ключовете могат да заемат същите състояния, тогава можем да разсъждаваме по блок схемата по следния начин. Ако двата ключа имат еднакви състояния, то това означава, че лампата е включена, и към нея се подава „0“ за да бъде спряна. Ако са с различни стойности, означава, че лампата е спряна и към нея се подава „1“ за да бъде пусната.3.     Актуализация на заданието, чрез промяна на технологията и ТСА.
В класическия си вид, този тип системи за запалване на лампа, използват така наречените девиаторни ключове (Multiway Switches).

Фиг.6 Принципна схема на свързване с девиаторни ключовеАко добавим един кръстат ключ можем да направим схемата да пали лампата от 3 различни места.

Фиг.7 Принципна схема на свързване с три ключа
Чрез добавянето на още допълнителни кръстати ключове, свързани последователно между двата девиаторни, можем да направим колкото са необходими места за включване. Това само по себе си работи добре, но при нужда от добавяне на нови ключове, се налагат няколко по-сложни от монтажна гледна точка операции. Първо трябва да се прекъсне захранването. След това трябва да се прекъсне връзката между два кръстати ключа, или между девиаторен и кръстат, да се разпънат нови проводници, който да са свързват новия елемнт към старите два, да се свърже новия елемент, и след това да се пусне отново захранването. В цялата процедура могат да възникнат няколко основни проблема. Един от тях е физическото разположение на ключовете и проводниците. Ако са на неудобно място, където трябва да се правят разрези, пробиви в стени, с цел да се достигнат самите проводници. След това трябва да се изтеглят проводници до мястото на поставянето на новия ключ, което само по себе си означава 4 проводника.Цялата тази процедура може да се съкрати ако се използват така наречените Smart Relay. Те представляват програмируеми релета, имащи различни на брой входове и изходи. Предимството на тези релета е, че в тях може да се залагат потребителски програми. В случая можем да използваме такова реле, като междинен модул, който да обработва подадените от физическите ключове сигнали, и да управляваме лампата. С използването на такъв междинен модул, много лесно можем да добавям допълнителни ключове, и интегрирането им в работната програма става много лесно.

За целите на курсовата работа е избрано програмируемо реле на фирма “Schneider electric” модел SR2B121JD.

Фиг.8 Програмируемо реле модел SR2B121JD
Релето е подходящо защото има 8 входни канала, поддържащи дискретни входове, каквито ще поучаваме от ключовете. Също така има релейни изходи, поддъращи над 220VAC, което ни позволява да свържем лампата дикретно, и така да я управялваме без допълнителна силова електроника.

Фиг.9 Принципна схема за управление реализирана с SR2B121JDИдейната постройка тук се базира на това, че ключовете и релето са закачени на една обща захранваща шина. Това означава, че когато искаме да добавим нов ключ това може да стане лесно, като го прикачим на захранващата шина, и съответно към релето. След това просто се добавя новия канал в кода на релето, както ще бъде пояснено.
4.     Описание на входните и изходните сигнали на системата. Избор на подходящ контролер.

ПроменливаO/IТип на сигналаОписание
I1IДискретенВходен сигнал от първи ключ
I2IДискретенВходен сигнал от втори ключ
I3IДискретенВходен сигнал от трети ключ
Q1OРелеенИзходен сигнал за включване на лампа

Таблица 1. Описание на входно-изходните сигнали
5.     Програмна реализация на задачата.Поставената задача е релаизирана, чрез програмируемо реле модел SR2B121JD на фирма Schneider electric. Изпозлван е FB пакета на софтуера ZelioSoft 2.

Фиг 10. Реализация на схема с два ключа в средата ZelioSoft 2Схемата реализирана със три ключа е подобна, единственото което трябва е да добави още един сравняващ елемент.

Фиг 11. Реализация на схема с три ключа в средата ZelioSoft 2Логиката на работа покирва описаното в точка три.
ЛИТЕРАТУРА
[1]   SR2B121JD Datasheet – Mouser Electronics[2] http://www.eltro-bg.com/articles_8.htm

Основен преглед на инструмента Fuzzy Logic Toolbox в средата Matlab

Fuzzy Logic Toolbox (FLT) e инструмент на Matlab, който служи за проектиране и теоритичено изпитание на размити регулатори. В него са заложени варианти за реализация на Fuzzy регулатор настройван по методите Мамдани и Сугено.  Инструмента притежава семпъл и удобен за работа графичен интерфейс. За работа с него не е нужен предишен опит със средата Matlab.Стартиране и създаване на нов проект
За да стартиранем Fuzzt Toolbox-a пишем  “Fuzzy” в “Command Windows” на Matlab. На фигура 1 е показан началния изглед на Toolbox-a. След като бъде зареден, виждаме следния начален екран, показан на фиг.1

Fuzzy Logic, FLT

Фиг1. Начален екран на FLT
От началния екран на тулбокса можем да видим веднага някой основни за интерфейса поелта. Първото е условно направената с блокове последователност на Fuzzy логиката скеции, а именно „Входни вериги“ , „Логически правила“ както и „Изходни вериги“. За входните и изходните вериги съответно имаме опция да променяме тяхното име от секцията “Current Variable” ->  „Name” както е показано на фиг.2.

Fuzzy Logic, FLT

Фиг.2 Промяна на името на верига

Промяната на името на изхода става по аналогичен начин.
На фиг.3 е очертано полето което ни дава информация за името на текущия регулатор, както и структурата която ползваме. За промяна на структурата “Мандами/Сугено” трябва да направим нов проект.

Fuzzy Logic, FLT

Фиг3. Информационен блок
 -Редактор на логически правила (Rule Editor).
            Включва се във FIS редакторът през последователния прозорец View-Edit Rules. Съдържа редакционно и изобразяващо поле. В това поле е възможно правилата пряко да се радактират ръчно или чрез използване на бутоните.            Delete rule – изтрива правило, Add rule – добавя правило, Change rule- променя правило.            Даденото правило може да се състави с помоща на последователните менюта на входните и изходните лингвистични променливи (е(t), de(t) и  u(t)), включително задаване на теглови коефициенти. Rule Editor предлага последователно меню за входните и изходните променливи, където всяка съставка е образувана от името на лингвистичната променлива – размитото множество. Размитите множества могат да се свързват с операторите and или or. Отделните множества могат да се генерират от логическите правила и при инвертиране, за което е необходимо да кликнем върху оператор not.
– Редактор на правила и повърхнина (Rule Viewer, Surface Viewer).
            Rule Viewer (графично изобразяване на процеса на извеждане) се активира с помоща на последователното меню View чрез избор Rule Viewer. Съдържа както всички правила, така и форми на функциите на принадлежност на входовете и изходите, както и тяхното извеждане.            Surface Viewer (графично изобразяване в тримерното пространство) се активира с помоща на последователното меню View чрез избор Surface Viewer. Изобразява в пространството стойностите на изходните величини. При размито управление се взема впредвит системната грешка и нейната производна.