Sadržaj:

EAL - Industrijski Internet - Fabrikshal: 7 koraka
EAL - Industrijski Internet - Fabrikshal: 7 koraka

Video: EAL - Industrijski Internet - Fabrikshal: 7 koraka

Video: EAL - Industrijski Internet - Fabrikshal: 7 koraka
Video: The Third Industrial Revolution: A Radical New Sharing Economy 2024, Novembar
Anonim
EAL - Industrijski Internet - Fabrikshal
EAL - Industrijski Internet - Fabrikshal
EAL - Industrijski Internet - Fabrikshal
EAL - Industrijski Internet - Fabrikshal
EAL - Industrijski Internet - Fabrikshal
EAL - Industrijski Internet - Fabrikshal

Der er blevet fået stillet to opgave and implementater et automatiseret system in industri 4.0. Ja denne opgave, er der lavet en lille simulacija en fabrikshal. Ja hallen står der en servomotor, samt i par diode. Udevendig, sidder der RFID kortlser, der skulle bruges do runde de relevante ind and fabrikshallen. Alternativni podaci, dragulji i baza podataka na Wampserveru.

Korak 1: RFID Kortlæser

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

Der er inkluderet en RFID kortler. Potencirajte i ud 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, and godkender frrst når det nummer stemmer overens med det der er skrevet ind i koden.

Niti kortlæseren davatelj adgang, så tændes lyset i fabrikken. Lyset slukkes igen, når enhed, der er godkendt af kortlæseren, bliver detekteret.

Kortlæseren bliver fjernet fra projektit, da den kører seriel communikation. Na ovom mjestu možete pronaći forstyrrelser na serijskom portu, na projektu Arduino Uno. Seriel porten, skal ogs bruges to Arduinoens order, don vil få fra vores Windows Forms app. I den sammenhæng er lyset også fravalgt.

Korak 2: Servomotor (dopušteno)

Servomotor (dopušteno)
Servomotor (dopušteno)
Servomotor (dopušteno)
Servomotor (dopušteno)
Servomotor (dopušteno)
Servomotor (dopušteno)

Pogriješio sam na servomotoru, stigao sa Arduino Uno. Den skalsimulere et anææg, der cann Producer forskellige produkter. Naručite, preuzmite antalne podatke o udruženim proizvodima, približite ih u MySQL bazi podataka. Motoren kan køre ud i tre forskellige pozicioner. Simbolizirajte poziciju trećeg proizvođača. Niti proizvod nije proizveden, a ni motocikl nije na poziciji, niti je moguće unaprijediti. Pomoću WPF aplikacije možete se upoznati s čovjekom putem mobitela. Alt hvad bliver proizvodi bliver gemt u MySQL bazi podataka.

Korak 3: MySQL baza podataka - Indhold

MySQL baza podataka - Indhold
MySQL baza podataka - Indhold
MySQL baza podataka - Indhold
MySQL baza podataka - Indhold
MySQL baza podataka - Indhold
MySQL baza podataka - Indhold

Ja MySQL baza podataka je dostupna za označavanje tabela. Nosač najkvalitetnijih proizvoda sa najboljim proizvodima i najboljim proizvodima. En anden tabel vil logge all de udførte produkter. Den tredje, i sidste tabel indenholder and oversigt over hvor mange product der er productret, og hvor mange der mangler. Ako to učinite, proizvod je proizveden. U aplikaciji Windows Forms aplikacija koja se nalazi na vašem stilu, koja šalje arduinoen, sam baze podataka. Niste ništa bliže proslijedili niti naručili, ako ne pošaljete sve do Arduinoena, nakon što ste poslali relevantne podatke u dnevnik i bazu podataka. Der bliver sendt tre forskellige datatyper to databasen. En Integer, en String, neki bliži kaldt u VarChar -u, i baza podataka. Pogledajte vrijeme i vremensku oznaku, unesite ga, instalirajte i bazu podataka.

Korak 4: Arduino Kode

#include

Servo myServo;

int servoPos; char produkt = '0'; void setup () {myServo.attach (3); // Serijska komunikacija započinje Serial.begin (9600); } void loop () {// Pregled proizvoda serijskog porta = Serial.read (); // Zahtjev za uključivanje prekidača naručivača (proizvod) {// Proizvod A (1) udžbenik i slučaj slučaja '1': myServo.write (50); kašnjenje (1000); myServo.write (0); kašnjenje (1000); Serial.println ("Gotovo"); break; // Proizvod B (2) udžbenik i slučaj slučaja '2': myServo.write (100); kašnjenje (1000); myServo.write (0); kašnjenje (1000); Serial.println ("Gotovo"); break; // Proizvod C (3) u slučaju slučaja '3': myServo.write (150); kašnjenje (1000); myServo.write (0); kašnjenje (1000); Serial.println ("Gotovo"); break; }}

Korak 5: Aplikacija Windows Forms

koristeći System; koristeći System. Collections. Generic; pomoću System. ComponentModel; pomoću System. Data; pomoću System. Drawing; pomoću System. Linq; pomoću System. Text; pomoću System. Threading. Tasks; pomoću System. Windows. Forms; pomoću System. Collections; pomoću System. IO. Ports; koristeći MySql; koristeći MySql. Data. MySqlClient;

imenski prostor WindowsFormsApp2

{javna parcijalna klasa Form1: Obrazac { /* I denne class bliver all public variabler oprettet. Ako je u opremi, klasa (MySqlConnection) je skalna i gruba, jer je potrebna za forsiranje do MySQL servisa. Zahtjev za opremanje u nizu (connectionString) za brisanje do definiranja hvilken brugera za skeniranje lozinke i baze podataka iz ove priče. Der er oprettet en integer, i et 2d array (orde). Grunden do danas i naručitelj može biti najbolji od ostalih proizvođača i proizvoda, ili od drugih proizvođača. Seriel komunikacija do Arduinoen bliže joj definirati. Der bliver også oprettet en Class (BackgroundWorker). Upoznajte se sa programom bliže eksikvere gentagende gange i baggrunden. Dette tilfælde er det brugbart, da der kan blive oprettet nye ordrer, med korte mellemrum. */ MySqlConnection veza; string connectionString;

private int ordrenummer;

private int [,] order = new int [100, 100]; private int šaljeOrder = novi int [100]; privatni niz prodType;

SerialPort sp = novi SerialPort ();

privatni BackgroundWorker myWorker = novi BackgroundWorker ();

javni obrazac1 ()

{InitializeComponent (); // Njen bliver vores String (connectionString) defineret. connectionString = "server = 192.168.1.100; userid = root; pwd = langeland; database = arduino;"; /* Njena bliža varijabla "myWorker" sjedila je na zapisniku na različitim jezicima i bila je u procesu. */ myWorker. DoWork += novi DoWorkEventHandler (myWorker_DoWork); myWorker. WorkerReportsProgress = true; myWorker. WorkerSupportsCancellation = true; // Njen bliver selve baggrundsgennemløbet eksikveret. myWorker. RunWorkerAsync (); // Njen bliže definisani format datoteke je dodijeljen k irer. Njen format je formiran nakon baze podataka MySQL. dateTimePicker1. CustomFormat = "gggg-MM-dd"; dateTimePicker1. Format = DateTimePickerFormat. Custom; }

privatna praznina Afgiv_Ordre_Click (pošiljalac objekta, EventArgs e)

{ /* Njen er der oprettet nogle variabler, der kun bliver brugt i dette void. De tre første er Integers der skal definere hvilket product der er tale om. De næste tre er oprettet for at kunne skrive det antal man ønsker, ind and 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 petlje 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 ++) {order [ordrenummer, prod1A] = produktA; }

for (int prod1B = (prodA); prod1B <(prodB+prodA); prod1B ++) {order [ordrenummer, prod1B] = produktB; }

for (int prod1C = (prodA + prodB); prod1C 99)

{ordrenummer = 0; } // Njeni podaci o besprekornoj proizvodnji do baze podataka. DBQuery ("INSERT INTO` bestilteprod` (`Proizvod A`,` Proizvod B`, `Proizvod C`) VREDNOSTI (" + prodA + "," + prodB + "," + prodC + ")"); // Njezino nadgledanje i nadziranje preko hvilke produkter der mangler i blive producerert, do baze podataka. DBQuery ("UPDATE` total` SET `manglende produkter` = (` manglende produkter` +(" +(prodA +prodB +prodC) +")) WHERE 1 "); }

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

private void myWorker_DoWork (pošiljatelj objekta, EventArgs e) {while (true) { /* Pošaljite zahtjev na zbroj nakon što je naredba označena s 0, ako je označena tijekom petlje. */ Status (); while (sendOrder. Sum ()! = 0) { /* Određujem za fungerer petlje za slijedeće, pri slijedećoj opremi Integer (i) er umre završava sa danom naredbom, vil det eksikvere. Varijabla (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 bliže eksikveret, i inden i varijable video zapise do najnovije kolone, bliže den pågældende kolonne sjedio do 0. Ako želite uspostaviti blisku komunikaciju do Arduinoena, isključite je ili pošaljite na Arduinoen. */ for (int i = 0; i <šaljeOrder. Length; i ++) {Status (); sp. BaudRate = 9600; sp. PortName = "COM4"; sp. Open (); sp. Write (šaljeOrder . 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 varijablan (i). if (sendOrder == 1) {prodType = "Proizvod A"; } else if (sendOrder == 2) {prodType = "Proizvod B"; } else if (sendOrder == 3) {prodType = "Proizvod C"; }

sendOrder = 0;

// Niti jedno ni drugo nismo eksistirali niti smo u nizu dali davatelj 0, već smo učitali proizvode koje smo prenijeli u bazu podataka i komunicirali do Arduinoena, bliži luk. if (sendOrder. Sum () == 0) {DBQuery ("INSERT INTO` udforte` (`Vrsta proizvoda`) VALUES ('" + prodType + "')");

DBQuery ("UPDATE` total` SET `produceretkter` = =` `productretter` + 1),` manglende produkter` = (`manglende produkter` - 1)");

sp. Close ();

break; } /* Njeni afventes der at Arduinoen er færdig med ordren. Der kvitteres med et "done". Niti ovo nije dostupno, više nećete morati udružiti niti učitati u bazu podataka Grunden do ovog trenutka, ako ne želite više da pokušate sa proizvodom, već prebacite u bazu podataka. */ sp. ReadTo ("Gotovo");

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

DBQuery ("UPDATE` total` SET `produceretterter =" `productter proizvod` + 1),` manglende produkter` = (`manglende produkter` - 1)");

sp. Close (); Status (); }} // I dette for loop bliver der lagt en ny række med ordre til eksikvering, når den foregående række er eksikveret (zbroj foregående række je sa 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] = nalog [i, j];

red [i, j] = 0;

}

break; }}

}

} /* Njena naredba je poništena i nalazi se u statusu "Status". Det er lavet for at skulle undgå at skrive de samme linjer kode flere steder. Ja sam postavio osobu koja se ne mora nalaziti u skrivenom "Status" -u Ova void je isključena ako je uključena i det void, kao i druga koda, der kører i baggrunden. * / private void Status () { /* Njen stariji muškarac MySQL je forbindelsen, mora biti dodat na tablici za heder ukupnog iznosa, a eksikverer na prednjoj strani. */ MySqlConnection con = novi MySqlConnection (connectionString); con. Open (); string str = "odaberi * od ukupnog broja"; MySqlCommand com = novi MySqlCommand (str, con); Čitač MySqlDataReader = com. ExecuteReader (); // Funkcija je dostupna za brisanje Bagrundskodena na CPU -u, a zatim na kodeksu. reader. Read (); MissingProd. Invoke ((MethodInvoker) delegat {// Njen najbliži proizvodjač za manglende, sam proizvod za ovaj proizvod, skrevet za aplikaciju. MissingProd. Text = "manglende produkter:" + (čitač ["manglende produkter"]. ToString ()); OrdereProd. Text = "produkt lavet:" + (čitač ["produceret produkter"]. ToString ());}); // Njen bliver der implementeret hvad procentbaren, skal udfyldes efter. ProcenteDone. Invoke (((MethodInvoker) delegate label. if (int. Parse (reader ["produceret produkter"]. ToString ())! = 0) {// Njen tager man de producerter produktter plus plus med de manglende produkt. Rezultat od dette ganger man med stotinu, za na få det ud i procent. ProcenteDone. Text = Math. Round ((float. Parse (čitač ["produceret produkter"]. ToString ()) /(float. Parse(reader["produceret produkter "]. ToString ()) + float. Parse (čitač ["manglende produkter"]. ToString ()))) * 100). ToString (); // Njen rezultat je postignut nakon što je zabilježeno zaostajanje na prethodnoj procjeni. progressBar1. Value = Int32. Parse (ProcenteDone. Text);} else {ProcenteDone. Text = "0%";}}); // Njen luk je MySQL forbindelsen. reader. Close (); con. Close ();} // Poništavam sve proizvode, der er proizvodite på den valgte dato, lagt ud på a pplikationen. private void Vis_Produkter_Click_1 (pošiljatelj objekta, EventArgs e) {string date = dateTimePicker1. Value. ToString (). Remove (10);

date = dateTimePicker1. Text;

string query = "SELECT` Vrsta proizvoda`, `Tid` OD udforte WHERE Tid> = '" + datum + "00:00:00' I Tid <= '" + datum + "23:59:59'"; koristeći (connection = new MySqlConnection (connectionString)) koristeći (MySqlCommand naredba = novi MySqlCommand (upit, veza)) koristeći (MySqlDataAdapter adapter = novi MySqlDataAdapter (naredba)) {DataTable prodTable = new DataTable (); adapter. Fill (prodTable);

dataGridView1. DataSource = prodTable;

}

} // Obrišem void bliver MySQL forbindelsen styret. Den fungerer således at forbindelsen bliver åbnet, eksikverer, and lukkes. privatna praznina DBQuery (niz cmd) {upit upita = cmd; koristeći (connection = new MySqlConnection (connectionString)) koristeći (MySqlCommand command = new MySqlCommand (upit, veza)) {connection. Open ();

command. ExecuteScalar ();

connection. Close ();

} } } }

Korak 6: Materialeliste

1 stk. Arduino Uno

1 stk. Mikro servo SG90 9g

Korak 7: Fobindelsesdiagram / I / O Lliste

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

Servomotor:

+ = Rød

- = Sortiraj

Signal = Grøn

Preporučuje se: