Tartalomjegyzék:

EAL - Industriel Internet - Fabrikshal: 7 lépés
EAL - Industriel Internet - Fabrikshal: 7 lépés

Videó: EAL - Industriel Internet - Fabrikshal: 7 lépés

Videó: EAL - Industriel Internet - Fabrikshal: 7 lépés
Videó: ZEITGEIST: MOVING FORWARD | OFFICIAL RELEASE | 2011 2024, November
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 automiseret system ud fra industri 4.0 princippet. Én tanult opgave, er der lavet en lille szimuláció af en fabrikshal. I hallen står der en servomotor, samt et par dioder. Udevendig, sidder der en RFID kortlæser, der skulle bruges til and lukke de relevante ind i fabrikshallen. Alternatív adatok, drágakövek és adatbázisok a Wampserverben.

1. lépés: RFID Kortlæser

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

Der er inkluderet és RFID kortlæser. Hensigten er at ud fra de id numre der er på det kort, og den brik der er med skrevet ind i vores Arduino kode. Det gør and 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 giver adgang, så tændes lyset i 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, skal også bruges till Arduinoens ordrer, den vil få fra vores Windows Forms applikation. I den sammenhæng er lyset også fravalgt.

2. lépés: szervomotor (Anlæg)

Szervomotor (Anlæg)
Szervomotor (Anlæg)
Szervomotor (Anlæg)
Szervomotor (Anlæg)
Szervómotor (Anlæg)
Szervómotor (Anlæg)

I hallen er der en servomotor, der er styret af en Arduino Uno. Den skalsimulere et anlæg, der kan produrer forskellige produkter. Rendelje meg, gyűjtse össze az antallet af de udførte produkter, bliver gemt és a MySQL adatbázisát. Motorkerékpárok állítható helyzetben. Hver pozíció szimbolizáló tre forskellige produkter. Når produktet er færdigproduceret, kører motoren tilbage i nul position, og afventer nye ordrer. Határozza meg az embereket és a férfiakat, a WPF alkalmazáson keresztül, és nyerje meg a megrendelést. Alt hvad bliver productret bliver gemt i MySQL database.

3. lépés: MySQL adatbázis - Indhold

MySQL adatbázis - Indhold
MySQL adatbázis - Indhold
MySQL adatbázis - Indhold
MySQL adatbázis - Indhold
MySQL adatbázis - Indhold
MySQL adatbázis - Indhold

I MySQL adatbázisok a der taberben. A legfrissebb tartó ø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 produret, og hvor mange der mangler. Ydermere er der et tidspunkt på, hvornår de pågældende produkter er productret. A Windows Forms applikationen der vil styre, hvad der skal küldi Arduinoen, samt adatbázis. Når der bliver afgivet en ordrer, vil den blive sendt till Arduinoen, efterfølgende, vil den relevante data blive logget and dataasen. Der bliver sendt tre forskellige datatyper till adatbasen. En Integer, en String, som bliver kaldt en VarChar, and dataasen. Der er også et TimeStamp, Det er en indstilling, der er tilføjet and dataasen.

4. lépés: Arduino Kode

#befoglalni

Szervo myServo;

int servoPos; char produkt = '0'; void setup () {myServo.attach (3); // Soros kommunikáció indul Serial.begin (9600); } void loop () {// Lézer fra soros port produkt = Serial.read (); // Godkendelse af ingående ordrer switch (produkt) {// Produkt A (1) udføres i denne case case '1': myServo.write (50); késleltetés (1000); myServo.write (0); késleltetés (1000); Serial.println ("Kész"); szünet; // Produkt B (2) udføres i denne case case '2': myServo.write (100); késleltetés (1000); myServo.write (0); késleltetés (1000); Serial.println ("Kész"); szünet; // Produkt C (3) udføres i denne case case '3': myServo.write (150); késleltetés (1000); myServo.write (0); késleltetés (1000); Serial.println ("Kész"); szünet; }}

5. lépés: A Windows Űrlapok alkalmazása

a System használatával; a System. Collections. Generic használatával; a System. ComponentModel használatával; a System. Data használatával; a System. Drawing használatával; a System. Linq használatával; a System. Text használatával; a System. Threading. Tasks használatával; a System. Windows. Forms használatával; a System. Collections használatával; a System. IO. Ports használatával; MySql használatával; a MySql. Data. MySqlClient használatával;

névtér WindowsFormsApp2

{nyilvános részosztály Form1: Form { /* I denne class bliver alle public variabler oprettet. Herunder er der oprettet en Class (MySqlConnection) der skals tages i brug, for at unne oprette tiltja a MySQL serveren. Ydermere er der oprettet en String (connectionString) den bruges till and define hvilken bruger der skal på og password, and hvilken database der er tale om. Szerkessz egy egész számot, és 2d tömböt (orde). Grunden til det er at en ordrer can bestå af flere produktioner af et produkt, eller flere produkter. Seriel kommunikáció az Arduinoen bliver også defineret her. Der bliver også oprettet en Class (BackgroundWorker). Ingyenes A legjobb és legjobb programozható bliver egzikveret gentagende gange i baggrunden. I dette tilfælde er det brugbart, da der kan blive oprettet nye ordrer, med korte mellemrum. */ MySqlConnection kapcsolat; string connectionString;

private int ordrenummer;

privát int [,] rendelés = új int [100, 100]; private int sendOrder = new int [100]; privát karakterlánc prodType;

SerialPort sp = új SerialPort ();

private BackgroundWorker myWorker = új BackgroundWorker ();

nyilvános űrlap1 ()

{InitializeComponent (); // Bliver vores String (connectionString) meghatározó. connectionString = "szerver = 192.168.1.100; userid = root; pwd = langeland; database = arduino;"; /* A "myWorker" bliver változója a logge på hvor langt változatos bestillinger er i deres process alatt ült. */ myWorker. DoWork += új DoWorkEventHandler (myWorker_DoWork); myWorker. WorkerReportsProgress = igaz; myWorker. WorkerSupportsCancellation = igaz; // Her bliver selve baggrundsgennemløbet eksikveret. myWorker. RunWorkerAsync (); // Her bliver der defineret hvilket format datoen kører i. A formátuma a legjobb a MySQL adatbázis után. dateTimePicker1. CustomFormat = "yyyy-MM-dd"; dateTimePicker1. Format = DateTimePickerFormat. Custom; }

private void Afgiv_Ordre_Click (objektumküldő, EventArgs e)

{ /* Her 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 hurkok bliver køen oprettet, således and ordrene bliver produret 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; } // Her overføres de bestilte produkter til adatbázis. DBQuery ("INSERT INTO` bestilteprod` (`Produkt A`,` Produkt B`, `Produkt C`) ÉRTÉKEK (" + prodA + "," + prodB + "," + prodC + ")"); // Her overføres en oversigt over hvilke produkter der mangler and blive produrert, till datasen. DBQuery ("UPDATE` total` SET `manglende produkter` = (` manglende produkter` +(" +(prodA +prodB +prodC) +")) WHERE 1 "); }

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

private void myWorker_DoWork (objektumküldő, EventArgs e) {while (true) { /* Så længe at summen af den afsendte ordre ikke er lig med 0, vil dette while loop køre. */ Állapot (); while (sendOrder. Sum ()! = 0) { /* I dette for loop fungerer det således, at så længe den oprettede Integer (i) er mindre end længden på den afgivet ordre, vil det eksikvere. Változó (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 ekskveret, og inden and variablen rykker videre til næste kolonne, bliver den pågældende kolonne sat 0. -ig. Inden if sætningerne bliver kommunikationen to Arduinoen åbnet, and den afgivet ordre bliver sendt till Arduinoen. */ for (int i = 0; i <sendOrder. Length; i ++) {Állapot (); sp. BaudRate = 9600; sp. PortName = "COM4"; sp. Open (); sp. Write (sendOrder . ToString ()); // Programmet der er i en af disse if utasítások, vil blive eksikveret, afhængig af hvilket tal fra et til tre der er i variablen (i). if (sendOrder == 1) {prodType = "Produkt A"; } else if (sendOrder == 2) {prodType = "Produkt B"; } else if (sendOrder == 3) {prodType = "Produkt C"; }

sendOrder = 0;

// Når hele den eksikverede række i arrayet samlet giver 0, bliver de udførte produkter uploadet i dataas, og komunikationen til Arduinoen, bliver lukket. if (sendOrder. Sum () == 0) {DBQuery ("INSERT INTO` udforte` (`Produkt type`) VALUES ('" + prodType + "')");

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

sp. Bezárás ();

szünet; } /* Her afventes der at Arduinoen er færdig med ordren. Der kvitteres med et "done". Ez a moderátor, a bliver de udførte endnu és a banda feltöltése az adatbázishoz Grunden till dette, er at man skal være sikker på at det sideste udførte product bliver overført to databaseas. */ sp. ReadTo ("Kész");

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

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

sp. Bezárás (); Állapot(); }} // 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 teszt = sorrend [i, 0]; if (teszt! = 0) {for (int j = 0; j <100; j ++) {sendOrder [j] = sorrend [i, j];

sorrend [i, j] = 0;

}

szünet; }}

}

} /* Her er der oprettet et void ved navn "Status". Det er lavet for at skulle undgå and skrive de samme linjer kode flere steder. I stedet kan man nøjes med at skrive "Status" Dette void er også inkluderet i det void, med det andet kode, der kører i baggrunden. * / private void Status () { /* A saját MySQL -tiltása tiltva van, és a teljes táblázatot nem tartalmazza, és az exkverer den predpørgsel. */ MySqlConnection con = új MySqlConnection (connectionString); con. Open (); string str = "válasszon * az összesből"; MySqlCommand com = new MySqlCommand (str, con); MySqlDataReader olvasó = com. ExecuteReader (); // Denne funktion er med for at dele Baggrundskoden på en tråd i CPU'en, og en anden tråd til resten af koden. olvasó. Olvasás (); MissingProd. Invoke ((MethodInvoker) delegált {// Her bliver de manglende produkter, samt produkter der er lavet, skrevet ud på applikationen. MissingProd. Text = "manglende produkter:" + (olvasó ["manglende produkter"]. ToString ()); OrdereProd. Text = "produkter lavet:" + (olvasó ["productionret produkter"]. ToString ());}); // Her bliver der implementeret hvad procentbaren, skal udfyldes efter. ProcenteDone. Invoke ((MethodInvoker) delegált {// Hvis læseren i My SQL tiltva læser at "productionret produkter ikke er lig med 0, bliver denne if utasítás eksikveret. Hvis det er lig med 0, bliver der udskrevet" 0%"skrevet til címke. if (int. Parse (olvasó ["produceret produkter"]. ToString ())! = 0) {// Her tager man de productionret produkter og plusser med de manglende produkter. Resultatet af dette ganger man med száz, for at få det ud i százalék. ProcenteDone. Text = Math. Round ((float. Parse (olvasó ["productionret produkter"]. ToString ()) /(float. Parse(reader["produceret produkter "]. ToString ()) + float. Parse (olvasó ["manglende produkter"]. ToString ()))) * 100). ToString (); // Her bliver resultatet af tidligere udregning lagt over på percentbaren. progressBar1. Value = Int32. Parse (ProcenteDone. Text);} else {ProcenteDone. Text = "0%";}}); // Her lukkes MySQL tiltva. reader. Close (); con. Close ();} // I dette void bliver alle produkter, der er producets på den valgte dato, lagt ud på a pplikationen. private void Vis_Produkter_Click_1 (objektum feladó, EventArgs e) {string date = dateTimePicker1. Value. ToString (). Remove (10);

date = dateTimePicker1. Text;

string query = "SELECT` Produkt type`, `Tid` FROM udforte WHERE Tid> = '" + date + "00:00:00' AND Tid <= '" + date + "23:59:59'"; using (connection = new MySqlConnection (connectionString)) using (MySqlCommand command = new MySqlCommand (query, connection)) using (MySqlDataAdapter adapter = new MySqlDataAdapter (command)) {DataTable prodTable = new DataTable (); adapter. Fill (prodTable);

dataGridView1. DataSource = prodTable;

}

} // I dette void bliver MySQL tiltott styret. A fun funrerer således and tiltott bliver åbnet, eksikverer, og lukkes. private void DBQuery (string cmd) {string query = cmd; using (connection = new MySqlConnection (connectionString)) using (MySqlCommand command = new MySqlCommand (query, connection)) {connection. Open ();

command. ExecuteScalar ();

connection. Close ();

} } } }

6. lépés: Materialeliste

1 stk Arduino Uno

1 stk Mikroszervó SG90 9g

7. lépés: Fobindelsesdiagram / I / O Lliste

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

Szervómotor:

+ = Rød

- = Rendezés

Jel = Grøn

Ajánlott: