Sisällysluettelo:

EAL - Industriel Internet - Fabrikshal: 7 vaihetta
EAL - Industriel Internet - Fabrikshal: 7 vaihetta

Video: EAL - Industriel Internet - Fabrikshal: 7 vaihetta

Video: EAL - Industriel Internet - Fabrikshal: 7 vaihetta
Video: ZEITGEIST: MOVING FORWARD | OFFICIAL RELEASE | 2011 2024, Heinäkuu
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

Saat ergonomisen tyylin optiikkaan ja käyttöönotto- ja automaattijärjestelmästä teollisuus 4.0 princippet. Olen oppinut, er la lavet en lille simulation 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. Vaihtoehtoiset tiedot, jalokivet ja tietokanta Wampserverissä.

Vaihe 1: RFID Kortlæser

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

Der er inkluderet ja RFID -kortti. Hensigten er at ud fra de id numre der er på det kort, and den brik der er med 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 først når det nummer stemmer overens med det der er skrevet in i koden.

Ei korttia, joka antaa adgang, så tændes lyset ja fabrikken. Lyset slukkes kyllä, når en enhed, der er godkendt af kortlæseren, bliver detekteret.

Kortlæseren bliver fjernet fra projektet, da den kører seriel communication. Det vil sige at der kan opstå forstyrrelser på den seriel port, der er på projektets Arduino Uno. Seriel porten, skal også bruges to Arduinoens ordrer, den vil få fra vores Windows Forms applikation. I den sammenhæng er lyset også fravalgt.

Vaihe 2: Servomoottori (Anlæg)

Servomoottori (Anlæg)
Servomoottori (Anlæg)
Servomoottori (Anlæg)
Servomoottori (Anlæg)
Servomoottori (Anlæg)
Servomoottori (Anlæg)

I hallen er der en servomotor, der er styret af en Arduino Uno. Den skalsimulere et anlæg, der can producerrer forskellige produkter. Tilaa, hanki antallet de udførte produkter, bliver gemt ja MySQL -tietokanta. Motoren kan køre ud i tre forskellige asennoitin. Hver position symboliserer tre forskellige produkter. Jos tuotetta ei ole saatavana, moottori on tyhjä, se on nolla -asemassa, ja se on tilaaja. Määritä meningen at man, WPF -sovelluksen kautta, joka voi antaa sinulle uuden tilauksen. Vaihtoehtoinen läpipainopakkaus tuottaa haavan, joka on MySQL -tietokannassa.

Vaihe 3: MySQL -tietokanta - pidätä

MySQL -tietokanta - Indhold
MySQL -tietokanta - Indhold
MySQL -tietokanta - Indhold
MySQL -tietokanta - Indhold
MySQL -tietokanta - Indhold
MySQL -tietokanta - Indhold

Minulla on MySQL -tietokanta, joka on peräisin tabellerista. Kiinnitä pidike ø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. Määritä Windows Forms -sovellus, joka sisältää tyylin, hvad der skal lähettää Arduinoenin, samt -tietokannan. Når der bliver afgivet en ordrer, vil den blive sendt to Arduinoen, efterfølgende, vil den relevante data blive logget and dataasen. Lähetä bliver -lähetin kolmelle tietokannalle tietokantaan. En Integer, en String, som bliver kaldt en VarChar, and datasen. Osoite ja TimeStamp, yksityiskohtainen ja selkeä tietokanta.

Vaihe 4: Arduino Kode

#sisältää

Servo myServo;

int servoPos; char produkt = '0'; void setup () {myServo.attach (3); // Sarjaliikenne alkaa Serial.begin (9600); } void loop () {// Sarjaportin tuote = Serial.read (); // Godkendelse af ingående ordrer switch (produkt) {// Produkt A (1) udføres i denne case case '1': myServo.write (50); viive (1000); myServo.write (0); viive (1000); Serial.println ("Valmis"); tauko; // Tuotteet B (2) udføres i denne case case '2': myServo.write (100); viive (1000); myServo.write (0); viive (1000); Serial.println ("Valmis"); tauko; // Tuotteet C (3) udføres i denne case case '3': myServo.write (150); viive (1000); myServo.write (0); viive (1000); Serial.println ("Valmis"); tauko; }}

Vaihe 5: Windows Forms -sovellus

käyttämällä järjestelmää, käyttämällä System. Collections. Generic; käyttämällä System. ComponentModel; käyttämällä System. Dataa; käyttäen System. Drawing; käyttämällä System. Linq; käyttämällä System. Text; käyttämällä System. Threading. Tasks; käyttämällä System. Windows. Forms; System. Collectionsin avulla; käyttämällä System. IO. Portsia; MySql: n avulla; käyttämällä MySql. Data. MySqlClient;

nimiavaruus WindowsFormsApp2

{public partial class Form1: Form { /* I denne class bliver alle public variabler oprettet. Herunder er der oprettet en Class (MySqlConnection) der skal tages i brug, for at one oprette kieltää MySQL serveren. Ydermere er der oprettet en String (connectionString) den Bruges tilille ja määritetylle halvalle ikkunalle ja salasanalle, ja hvilken tietokanta on er tarle om. Voit operoida kokonaislukuna ja 2d -matriisina (orde). Grunden til det er at en ordrer can bestå af flere produktioner af et produkt, eller flere produkter. Seriel kommunikaatio tilille Arduinoen bliver tai määrittele hänet. Der bliver også oprettet fi Class (BackgroundWorker). Geenit ja parhaat ohjelmat bliver eksikveret gentagende gange i baggrunden. I dette tilfælde er det brugbart, da der kan blive oprettet nye ordrer, med korte mellemrum. */ MySqlConnection -yhteys; merkkijono connectionString;

yksityinen int tilaisuus;

yksityinen int [,] tilaus = uusi int [100, 100]; yksityinen int SendOrder = uusi int [100]; yksityinen merkkijono prodType;

SerialPort sp = uusi SerialPort ();

yksityinen BackgroundWorker myWorker = uusi BackgroundWorker ();

julkinen lomake1 ()

{InitializeComponent (); // Hänen bliver vores String (connectionString) määritelmä. connectionString = "server = 192.168.1.100; userid = root; pwd = langeland; database = arduino;"; /* Hänen bliver -muuttujansa "myWorker" istui kirjautumalla sisään erilaisiin parhaisiin sovelluksiin. */ myWorker. DoWork += uusi DoWorkEventHandler (myWorker_DoWork); myWorker. WorkerReportsProgress = true; myWorker. WorkerSupportsCancellation = true; // Her bliver selve baggrundsgennemløbet eksikveret. myWorker. RunWorkerAsync (); // Hänen bliver der defineret hvilket -muodon tiedot kører i. Hänen muotoaan parhaiten MySQL -tietokannan jälkeen. dateTimePicker1. CustomFormat = "yyyy-MM-dd"; dateTimePicker1. Format = DateTimePickerFormat. Custom; }

private void Afgiv_Ordre_Click (objektin lähettäjä, EventArgs e)

{ /* Hänen 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 silmukat bliver køen oprettet, således at 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)

{järjestysluku = 0; } // Her overføres de bestilte produkter til datasen. DBQuery ("INSERT INTO` bestilteprod` (`Produkt A`,` Produkt B`, `Produkt C`) ARVOT (" + prodA + "," + prodB + "," + prodC + ")"; // Her overføres en oversigt over hvilke produkter der mangler at 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 (objektin lähettäjä, EventArgs e) {while (true) { /* Så længe at summen af den afsendte ordre ikke er lig med 0, vil dette while loop køre. */ Tila(); 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. Muuttuja (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 and variablen rykker videre til næste kolonne, bliver den pågældende kolonne sat 0. asti. Ilmoita, jos haluat lähettää viestin Arduinoenin verkkoon, ja anna afgivetin tai bliver -lähetyksen Arduinoenille. */ for (int i = 0; i <sendOrder. Length; i ++) {Tila (); sp. BaudRate = 9600; sp. PortName = "COM4"; sp. avaa (); sp. Write (sendOrder . ToString ()); // Ohjelmoi der er i en af disse if lausunnot, vil blive eksikveret, afhængig af hvilket tal fra et til tre der er i variablen (i). jos (sendOrder == 1) {prodType = "Produkt A"; } muu jos (sendOrder == 2) {prodType = "Produkt B"; } muu jos (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 in dataasen, og communicationation to Arduinoen, bliver lukket. if (sendOrder. Sum () == 0) {DBQuery ("INSERT INTO` udforte` (`Tuotetyyppi`) ARVOT ('" + prodType + "')");

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

sp. Sulje ();

tauko; } /* Hänen afventes der at Arduinoen er færdig med ordren. Der kvitteres med ja "valmis". Jos haluat muokata tiettyä laitetta, muodonmuutoksen lopetus ja jengin lataaminen tietokantaan Grunden til dette, er at man skal være sikker på at det sideste udførte product bliver overført to databaseasen. */ sp. ReadTo ("Valmis");

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

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

sp. Sulje (); Tila(); }} // 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]; jos (testi! = 0) {for (int j = 0; j <100; j ++) {sendOrder [j] = järjestys [i, j];

järjestys [i, j] = 0;

}

tauko; }}

}

} /* Hänen er der oprettet et void ved navn "Status". Määritä lavet for skulle undgå at 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 () { /* Hänen miehensä MySQL on kielletty, se on vaihtoehtoisesti saatavilla taulukosta, ja se on kokonaisuudessaan, ja eksikverer den forepørgsel. */ MySqlConnection con = uusi MySqlConnection (connectionString); con. Open (); merkkijono str = "valitse * kokonaismäärästä"; MySqlCommand com = new MySqlCommand (str, con); MySqlDataReader -lukija = 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. lukija. Lue (); MissingProd. Invoke ((MethodInvoker) -edustaja {// Her bliver de manglende produkter, samt produkter der er lavet, skrevet ud på applikationen. MissingProd. Text = "manglende produkter:" + (reader ["manglende produkter"]. ToString ()); OrdereProd. Text = "produkter lavet:" + (lukija ["produret produkter"]. ToString ());}); // Hänen bliver der implementeret hvad prosenttiosuus, skal udfyldes efter. ProcenteDone. Invoke ((MethodInvoker) -edustaja {// Hvis læseren i My SQL kieltää 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 etiketti. if (int. Parse (lukija ["produret produkter"]. ToString ())! = 0) {// Her tager man de productionret produkter og plusser med de manglende produkter. Resultatet af dette ganger man med sim, for at få det ud i procent. ProcenteDone. Text = Math. Round ((float. Parse (lukija ["produret produkter"]. ToString ()) /(float. Parse(reader["produceret produkter "]. ToString ()) + float. Parse (lukija ["manglende produkter"]. ToString ()))) * 100). ToString (); // Hänen bliver -tuloksensa tidligere udregning lagt over på percentbaren. progressBar1. Value = Int32. Parse (ProcenteDone. Text);} else {ProcenteDone. Text = "0%";}}); // Hänen lukunsa MySQL -kielto. reader. Close (); con. Close ();} // I dette void bliver alle produkter, der er produret på den valgte dato, lagt ud på a pplikationen. private void Vis_Produkter_Click_1 (objektin lähettäjä, EventArgs e) {string date = dateTimePicker1. Value. ToString (). Poista (10);

date = dateTimePicker1. Text;

string query = "SELECT` Tuotetyyppi ",` Tid` FROM udforte WHERE Tid> = '" + date +" 00:00:00' AND Tid <= '" + date +" 23:59:59' "; käyttämällä (yhteys = uusi MySqlConnection (connectionString)) käyttäen (MySqlCommand -komento = uusi MySqlCommand (kysely, yhteys)) käyttäen (MySqlDataAdapter adapter = new MySqlDataAdapter (command)) {DataTable prodTable = new DataTable (); adapter. Fill (prodTable);

dataGridView1. DataSource = prodTable;

}

} // I dette void bliver MySQL kieltää styret. Den fungerer således at blokeindelsen bliver åbnet, eksikverer, og lukkes. private void DBQuery (merkkijono cmd) {merkkijono kysely = cmd; using (connection = new MySqlConnection (connectionString)) using using (MySqlCommand command = new MySqlCommand (query, connection)) {connection. Open ();

command. ExecuteScalar ();

Sulje ();

} } } }

Vaihe 6: Materialeliste

1 stk Arduino Uno

1 stk Mikroservo SG90 9g

Vaihe 7: Fobindelsesdiagram / I / O Lliste

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

Servo moottori:

+ = Rød

- = Lajittele

Signaali = Grøn

Suositeltava: