Съдържание:

EAL - Industriel Internet - Fabrikshal: 7 стъпки
EAL - Industriel Internet - Fabrikshal: 7 стъпки

Видео: EAL - Industriel Internet - Fabrikshal: 7 стъпки

Видео: EAL - Industriel Internet - Fabrikshal: 7 стъпки
Видео: Беслан. Помни / Beslan. Remember (english & español subs) 2024, Ноември
Anonim
EAL - Industriel Internet - Fabrikshal
EAL - Industriel Internet - Fabrikshal
EAL - Industriel Internet - Fabrikshal
EAL - Industriel Internet - Fabrikshal
EAL - Industriel Internet - Fabrikshal
EAL - Industriel Internet - Fabrikshal

Der er blevet fået stillet til opgave and implementere et automatiseret system ud fra industri 4.0 принцип. I denne opgave, er der lavet en lille симулация на en fabrikshal. I hallen står der en servomotor, samt et par dioder. Udevendig, sidder der en RFID kortlæser, der skulle bruges til в lukke de relevante ind i fabrikshallen. Алтернативни данни, скъпоценни камъни и база данни в Wampserver.

Стъпка 1: RFID Kortlæser

RFID Kortlæser
RFID Kortlæser
RFID Kortlæser
RFID Kortlæser

Дер е включен в RFID код. Hensigten er at ud fra de id numre der er på det kort, og den brik der er med er skrevet ind i vores Arduino kode. Det gør at når kortlæseren opfanger en brik eller et kort, kigger den på enhedens id-nummer, og godkender først når det nummer stemmer overens med det der er skrevet ind i koden.

Når kortlæseren даряващ adgang, så tændes lyset и fabrikken. Lyset slukkes igen, når en enhed, der er godkendt af kortlæseren, bliver detekteret.

Kortlæseren bliver fjernet fra projektet, da den kører seriel kommunikation. Det vil sige at der kan opstå forstyrrelser på den seriel port, der er på projektets Arduino Uno. Seriel porten, скалирайте до Bruges до Arduinoens, поръчайте приложението за Windows Forms. I den sammenhæng er lyset også fravalgt.

Стъпка 2: Сервомотор (Anlæg)

Сервомотор (Anlæg)
Сервомотор (Anlæg)
Сервомотор (Anlæg)
Сервомотор (Anlæg)
Сервомотор (Anlæg)
Сервомотор (Anlæg)

Хелън е der der servomotor, der er styret af en Arduino Uno. Den skalsimulere et anlæg, der kan Producer forskellige produkter. Поръчайте, запазете анталета на обединените продукти, най -близкия gemt в MySQL база данни. Motoren kan køre ud и tre forskellige позиционер. Символизирайте позицията на производителя. Når produktet е færdigproduceret, kører motoren tilbage и нулева позиция, и afventer nye ordrer. Намерете това за човека, чрез WPF приложение, което може да бъде изпратено до моторен. Alt hvad bliver произвежда bliver gemt в MySQL база данни.

Стъпка 3: MySQL база данни - Indhold

MySQL база данни - Indhold
MySQL база данни - Indhold
MySQL база данни - Indhold
MySQL база данни - Indhold
MySQL база данни - Indhold
MySQL база данни - Indhold

I MySQL база данни база данни ви tabeller. Den første притежател øje med hvilke produkter der er bestilt, og hvor mange. En anden tabel vil logge alle de udførte produkter. Den tredje, og sidste tabel indenholder en oversigt over hvor mange produkter der er produceret, og hvor mange der mangler. Ydermere er der et tidspunkt på, hvornår de pågældende produkter er produceret. Като приложение за Windows Forms, което е използвано от стила, можете да изпратите Arduinoen, само бази данни. Når der bliver afgivet en ordrer, vil den blive sendt til Arduinoen, efterfølgende, vil den relevante data blive logget и databasen. Der bliver sendt tre forskellige datatyper до база данни. En Integer, en String, som bliver kaldt и VarChar, и база данни. Der er også et TimeStamp, Det er en indstilling, der er tilføjet и база данни.

Стъпка 4: Arduino Kode

#включва

Серво myServo;

int servoPos; char produkt = '0'; void setup () {myServo.attach (3); // Серийна комуникация стартира Serial.begin (9600); } void loop () {// Преглед на сериен порт продукт = Serial.read (); // Препоръчва се при превключване на поръчката (продукт) {// Продукт A (1) обединение и случай на случай „1“: myServo.write (50); забавяне (1000); myServo.write (0); забавяне (1000); Serial.println ("Готово"); прекъсване; // Продукт B (2) обединение и делото случай „2“: myServo.write (100); забавяне (1000); myServo.write (0); забавяне (1000); Serial.println ("Готово"); прекъсване; // Продукт C (3) Съдържание и случай на случай „3“: myServo.write (150); забавяне (1000); myServo.write (0); забавяне (1000); Serial.println ("Готово"); прекъсване; }}

Стъпка 5: Приложение за Windows Forms

използване System; използване System. Collections. Generic; използване на System. ComponentModel; използване на System. Data; използване на System. Drawing; използване на System. Linq; използване на System. Text; използване на System. Threading. Tasks; използване на System. Windows. Forms; използване на System. Collections; използване на System. IO. Ports; използване на MySql; използване на MySql. Data. MySqlClient;

пространство на имената WindowsFormsApp2

{публичен частичен клас Form1: Форма { /* I denne class bliver alle public variabler oprettet. Препоръчва се да се опретирате в клас (MySqlConnection), за да намерите скала и да го направите, тъй като най -добре е да го поддържате за MySQL обслужване. Ydermere er der oprettet en String (connectionString) den bruges til at definere hvilken bruger der skal på og password, og hvilken database der er tale om. Der er oprettet en integer, i et 2d array (orde). Grunden til det er at en ordrer can bestå af flere productioner af et produkt, eller flere produkter. Seriel kommunikationen, докато Arduinoen не я определи. Der bliver også oprettet bg Class (BackgroundWorker). Den gør at en bestemt del af programmet bliver eksikveret gentagende gange i baggrunden. I dette tilfælde er det brugbart, da der kan blive oprettet nye ordrer, med korte mellemrum. */ MySqlConnection връзка; string connectionString;

private int ordrenummer;

private int [,] order = new int [100, 100]; private int sendOrder = нов int [100]; частен низ prodType;

SerialPort sp = нов SerialPort ();

частен BackgroundWorker myWorker = нов BackgroundWorker ();

публичен формуляр1 ()

{InitializeComponent (); // Нейният най -близък глас String (connectionString) defineret. connectionString = "сървър = 192.168.1.100; userid = root; pwd = langeland; база данни = arduino;"; /* Нейната близка променлива "myWorker" седеше до дневника, за да се запознае с различни разновидности, както и от процеса. */ myWorker. DoWork += нов DoWorkEventHandler (myWorker_DoWork); myWorker. WorkerReportsProgress = вярно; myWorker. WorkerSupportsCancellation = вярно; // Нейният бливер селв baggrundsgennemløbet eksikveret. myWorker. RunWorkerAsync (); // Нейният най -близък формат за определяне на формат на файла, зададен с i. Нейният формат е създаден след MySQL база данни. dateTimePicker1. CustomFormat = "yyyy-MM-dd"; dateTimePicker1. Format = DateTimePickerFormat. Custom; }

частна празнота Afgiv_Ordre_Click (подател на обект, EventArgs e)

{ /* Нейният er der oprettet nogle variabler, der kun bliver brugt i dette void. De tre første er Integers der skal definere hvilket produkt der er tale om. De næste tre er oprettet for at kunne skrive det antal man ønsker, ind i applikationen. Den sidste er oprettet for at få en længde på den pågældende ordre. */ int produktA = 1; int produktB = 2; int produktC = 3; int prodA = int. Parse (prodAOrder. Text); int prodB = int. Parse (prodBOrder. Text); int prodC = int. Parse (prodCOrder. Text); int orderLength = prodA + prodB + prodC; /* I disse for loops bliver køen oprettet, således at ordrene bliver produceret i den rækkefølge, de er bestilt i. */ for (int prod1A = 0; prod1A <prodA; prod1A ++) {ред [ordrenummer, prod1A] = produktA; }

за (int prod1B = (prodA); prod1B <(prodB+prodA); prod1B ++) {ред [ordrenummer, prod1B] = produktB; }

за (int prod1C = (prodA + prodB); prod1C 99)

{ordrenummer = 0; } // Нейните прекалено добри продукти към базата данни. DBQuery ("INSERT INTO` bestilteprod` (`Produkt A`,` Produkt B`, `Produkt C`) СТОЙНОСТИ (" + prodA + "," + prodB + "," + prodC + ")"); // Нейните прегледи и пренасочване над hvilke produkter der mangler и blive producerert, до база данни. DBQuery ("UPDATE` total` SET `manglende produkter` = (` manglende produkter` +(" +(prodA +prodB +prodC) +")) WHERE 1 "); }

// I dette void er alt det kode der skal køre i baggrunden, lagt ind.

private void myWorker_DoWork (изпращач на обект, EventArgs e) {while (true) { /* Да се изведе на сумата, след като бъде изпратено наред, ако е с 0, вилнете, докато цикълът се върти. */ Статус (); while (sendOrder. Sum ()! = 0) { /* Откривам за fungerer цикъл det således, at så længe den oprettede Integer (i) er mindre end længden på den afgivet ordre, vil det eksikvere. Variablen (i) kigger på den pågældende række i arrayet, der på nuværende tidspunkt arbejdes i. Den kigger i kolonnen, ser hvilket tal der står i kolonnen. Tallet bliver eksikveret, og inden и variablen rykker videre til næste kolonne, bliver den pågældende kolonne sat do 0. De ekskverede produkter bliver uploadet to databasen. Inden if sætningerne bliver kommunikationen til Arduinoen åbnet, og den afgivet ordre bliver sendt til Arduinoen. */ for (int i = 0; i <sendOrder. Length; i ++) {Status (); sp. BaudRate = 9600; sp. PortName = "COM4"; sp. Open (); sp. Write (sendOrder . ToString ()); // Programmet der er i en af disse if statement, vil blive eksikveret, afhængig af hvilket tal fra et til tre der er i variablen (i). if (sendOrder == 1) {prodType = "Продукт А"; } else if (sendOrder == 2) {prodType = "Продукт B"; } else if (sendOrder == 3) {prodType = "Продукт C"; }

sendOrder = 0;

// Når hele den eksikverede række и arrayet samlet giver 0, bliver de udførte produkter uploadet и databasen, og komunikationen til Arduinoen, bliver lukket. if (sendOrder. Sum () == 0) {DBQuery ("INSERT INTO` udforte` (`Тип на продукта`) VALUES ('" + prodType + "')");

DBQuery ( UPDATE` total` SET `produceret produkter` = (` produceret produkter` + 1), `manglende produkter` = (` manglende produkter` - 1) “);

sp. Close ();

прекъсване; } /* Нейните afventes der в Arduinoen er færdig med ordren. Der kvitteres med et "направено". Når det er modtaget, bliver de udførte endnu en gang uploadet to databasen Grunden til dette, er at man skal være sikker på at det sidste udførte produkt bliver overført до база данни. */ sp. ReadTo ("Готово");

DBQuery ("INSERT INTO` udforte` (`Produkt type`) VALUES ('" + prodType + "')");

DBQuery ( UPDATE` total` SET `produceret produkter` = (` produceret produkter` + 1), `manglende produkter` = (` manglende produkter` - 1) “);

sp. Close (); Статус (); }} // I dette for loop bliver der lagt en ny række med ordre til eksikvering, når den foregående række er eksikveret (summen af foregående række er lig med 0). for (int i = 0; i <order. GetLength (0); i ++) {int test = order [i, 0]; if (test! = 0) {for (int j = 0; j <100; j ++) {sendOrder [j] = поръчка [i, j];

ред [i, j] = 0;

}

прекъсване; }}

}

} /* Her er der oprettet et void ved navn "Status". Det er lavet for at skulle undgå at skrive de samme linjer kode flere steder. Изисках, че мога да намеря в скрипта "Статус" Отмената на void е включена в ide void, med det andet kode, der kører и baggrunden. * / private void Status () { /* Нейният ъбнер мъж MySQL forbindelsen, вижте алтернатива от табелата на хедъра общо, и ексикварерът на предния панел. */ MySqlConnection con = нов MySqlConnection (connectionString); con. Open (); низ str = "изберете * от общо"; MySqlCommand com = нов MySqlCommand (str, con); MySqlDataReader четец = com. ExecuteReader (); // Denne funktion е med for for at Baggrundskoden på en tråd и CPU'en, og en anden tråd til resten af koden. reader. Read (); MissingProd.); OrdereProd. Text = "produkter lavet:" + (четец ["produceret produkter"]. ToString ());}); // Her bliver der implementeret hvad procentbaren, skal udfyldes efter. ProcenteDone. Invoke ((MethodInvoker) делегат {// Hvis læseren in My SQL forbindelsen læser at "produceret produkter ikke er lig med 0, bliver denne if statement eksikveret. Hvis det er lig with 0, bliver der udskrevet" 0%"skrevet til етикет. if (int. Parse (reader ["produceret produkter"]. ToString ())! = 0) {// Нейният тагър man de produceret produkter og plusser med de manglende produkter. Резултат от dette ganger man med сто, за при få det ud i procent. ProcenteDone. Text = Math. Round ((float. Parse (reader ["produceret produkter"]. ToString ()) /(float. Parse(reader["produceret produkter "]. ToString ()) + float.);} else {ProcenteDone. Text = "0%";}}); // Нейният lukkes MySQL forbindelsen. reader. Close (); con. Close ();} // Отстранявам void bliver all produkter, der er produceret på den valgte dato, lagt ud på a pplikationen. private void Vis_Produkter_Click_1 (подател на обект, EventArgs д) {string date = dateTimePicker1. Value. ToString (). Премахване (10);

date = dateTimePicker1. Text;

string query = "SELECT` Тип на продукта`, `Tid` ОТ udforte WHERE Tid> = '" + дата + "00:00:00' И Tid <= '" + дата + "23:59:59'"; използвайки (връзка = нов MySqlConnection (connectionString)) използвайки (MySqlCommand команда = нов MySqlCommand (заявка, връзка)) с помощта на (MySqlDataAdapter адаптер = нов MySqlDataAdapter (команда)) {DataTable prodTable = new DataTable (); адаптер. Fill (prodTable);

dataGridView1. DataSource = prodTable;

}

} // Отстраних void bliver MySQL forbindelsen styret. Den fungerer således at forbindelsen bliver åbnet, eksikverer, og lukkes. private void DBQuery (низ cmd) {низова заявка = cmd; използвайки (връзка = нов MySqlConnection (connectionString)) използвайки (MySqlCommand команда = нова MySqlCommand (заявка, връзка)) {connection. Open ();

command. ExecuteScalar ();

връзка. Затвори ();

} } } }

Стъпка 6: Материали

1 stk Arduino Uno

1 stk Микро серво SG90 9g

Стъпка 7: Fobindelsesdiagram / I / O Lliste

Fobindelsesdiagram / I / O Lliste
Fobindelsesdiagram / I / O Lliste

Сервомотор:

+ = Rød

- = Сортиране

Сигнал = Grøn

Препоръчано: