Πίνακας περιεχομένων:

EAL - Industriel Internet - Fabrikshal: 7 Βήματα
EAL - Industriel Internet - Fabrikshal: 7 Βήματα

Βίντεο: EAL - Industriel Internet - Fabrikshal: 7 Βήματα

Βίντεο: EAL - Industriel Internet - Fabrikshal: 7 Βήματα
Βίντεο: Erfindungen aus Fulda - der erste Kleinwagen | Pioniere in Fulda | erlebnis hessen | doku 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

Μπορείτε να το χρησιμοποιήσετε για να χρησιμοποιήσετε το σύστημα και να εφαρμόσετε αυτόματα το σύστημα από τη βιομηχανία 4.0 princippet. I denne opgave, er der 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 at lukke de relevante ind i fabrikshallen. Alt δεδομένα, gemmes και βάση δεδομένων στο Wampserver.

Βήμα 1: RFID Kortlæser

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

Απορρίψτε τις πληροφορίες για το RFID kortlæser. 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, και 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 til Arduinoens ordrer, den vil få fra vores Windows Forms applikation. I den sammenhæng er lyset også fravalgt.

Βήμα 2: Servomotor (Anlæg)

Servomotor (Anlæg)
Servomotor (Anlæg)
Servomotor (Anlæg)
Servomotor (Anlæg)
Servomotor (Anlæg)
Servomotor (Anlæg)

I hallen er der en servomotor, der er styret af en Arduino Uno. Den skalsimulere et anlæg, der kan productionrer forskellige produkter. Ordrerbeholdningen, samt antallet af de udførte produkter, bliver gemt i en MySQL database. Μπορώ να χρησιμοποιήσω τον εντοπιστή θέσης. Hver position symboliserer tre forskellige produkter. Δεν υπάρχουν προϊόντα που μπορούν να χρησιμοποιηθούν, μπορούν να χρησιμοποιηθούν από τη θέση τους, καθώς και με την παραγγελία. Προσδιορίστε τον άνθρωπο, μέσω του WPF applikationen που μπορεί να σας ζητήσει από τον κινητήρα. Alt hvad bliver productret bliver gemt σε βάση δεδομένων MySQL.

Βήμα 3: Βάση δεδομένων MySQL - Indhold

MySQL Database - Indhold
MySQL Database - Indhold
MySQL Database - Indhold
MySQL Database - Indhold
MySQL Database - Indhold
MySQL Database - Indhold

I MySQL βάσεις δεδομένων vil der være tre tabeller. Κατέβασε τον εαυτό σου σε μια καλή παραγωγή, και σε μεγάλο βαθμό. Μπορείτε επίσης να χρησιμοποιήσετε όλες τις παραγωγές. Ωστόσο, θα μπορούσατε να λάβετε υπόψη σας και να παραγγείλετε το προϊόν σας, καθώς και να παραγγείλετε κάτι παραπάνω. Ydermere er der et tidspunkt på, hvornår de pågældende produkter er productionret. Εφαρμογή των Windows Forms για τη χρήση του αρχείου, την εγκατάσταση του Arduinoen, τη βάση δεδομένων. Δεν είναι δυνατή η παραγγελία, μπορείτε να χρησιμοποιήσετε το Arduinoen, να μάθετε περισσότερα σχετικά με τα δεδομένα και να δημιουργήσετε βάσεις δεδομένων. Πηγαίνετε για να αποκτήσετε πληροφορίες για τη βάση δεδομένων. En Integer, en String, som bliver kaldt en VarChar, και βάσεις δεδομένων. Der er også και TimeStamp, Det er en indstilling, der er tilføjet και βάσεις δεδομένων.

Βήμα 4: Arduino Kode

#περιλαμβάνω

Servo myServo;

int servoPos; char produkt = '0'; void setup () {myServo.attach (3); // Serial kommunikation startes Serial.begin (9600); } void loop () {// Læsning fra serial port produkt = Serial.read (); // Πλήρης διακόπτης παραγγελίας (προϊόν) {// Παραγωγή A (1) udføres i denne case case '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

χρησιμοποιώντας 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

{public partial class Form1: Form { /* I denne class bliver alle public variabler oprettet. Herunder er der oprettet en Class (MySqlConnection) μπορεί να χρησιμοποιηθεί, επειδή μπορείτε να χρησιμοποιήσετε το MySQL. Ydermere er der oprettet en String (connectionString) δεν μπορεί να χρησιμοποιηθεί για να καθορίσει τον κωδικό πρόσβασης, αλλά και τη βάση δεδομένων από την ιστορία όλων. Der er oprettet en integer, i et 2d array (orde). Μπορείτε να το χρησιμοποιήσετε για να το κάνετε καλύτερα από προϊόντα και προϊόντα, ή ακόμα και από την παραγωγή. Seriel kommunikationen til Arduinoen bliver også definret her. Der bliver også oprettet en Class (BackgroundWorker). Είμαι σε θέση να επιλέξω ένα πρόγραμμα που θα σας επιτρέψει να εκμεταλλευτείτε το πρόβλημα. I dette tilfælde er det brugbart, da der kan blive oprettet nye ordrer, med korte mellemrum. */ Σύνδεση MySqlConnection. string connectionString;

ιδιωτικό int ordrenummer?

ιδιωτικό int [,] παραγγελία = νέο int [100, 100]; private int sendOrder = new int [100]; ιδιωτική συμβολοσειρά prodType;

SerialPort sp = νέο SerialPort ();

ιδιωτικό BackgroundWorker myWorker = νέο BackgroundWorker ();

δημόσια φόρμα1 ()

{InitializeComponent (); // Her bliver vores String (connectionString) defineret. connectionString = "διακομιστής = 192.168.1.100; userid = root; pwd = langeland; βάση δεδομένων = arduino;"; /* Η ευμετάβλητη μεταβλητή της "myWorker" κάθισε μέχρι να καταγραφεί και να διαφέρει από διαφορετικές διαδικασίες bestillinger. */ myWorker. DoWork += νέο DoWorkEventHandler (myWorker_DoWork); myWorker. WorkerReportsProgress = true; myWorker. WorkerSupportsCancellation = true; // Her bliver selve baggrundsgennemløbet eksikveret. myWorker. RunWorkerAsync (); // Her bliver der defineret hvilket format datoen kører i. Είναι καλύτερα να διαμορφωθεί μετά από βάσεις δεδομένων MySQL. dateTimePicker1. CustomFormat = "εεεε-ΜΜ-ηη"; dateTimePicker1. Format = DateTimePickerFormat. Custom; }

ιδιωτικό κενό Afgiv_Ordre_Click (αποστολέας αντικειμένων, EventArgs e)

{ /* Her er oprettet nogle variabler, der kun bliver brugt και 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; /* Ανακαλύπτω για βρόχους που μπορούν να χρησιμοποιηθούν, να επιλέξουν και να προχωρήσουν στην παραγωγή, και να βελτιωθούν. */ για (int prod1A = 0; prod1A <prodA; prod1A ++) {order [ordrenummer, prod1A] = produktA; }

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

για (int prod1C = (prodA + prodB); prod1C 99)

{ordrenummer = 0; } // Οι υπερπαραγωγές της για τη δημιουργία βάσεων δεδομένων. DBQuery ("INSERT INTO` bestilteprod "(` Produkt A`, `Produkt B`,` Produkt C`) VALUES (" + prodA +", " + prodB +", " + prodC +") "); // Οι υπερτιμήσεις της είναι υπερβολικές για την παραγωγή προϊόντων στο blive productionrert, μέχρι τη βάση δεδομένων. DBQuery ("UPDATE` total` SET `manglende produkter` = (` manglende produkter` +(" +(prodA +prodB +prodC) +")) ΠΟΥ 1 "); }

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

ιδιωτικό κενό myWorker_DoWork (αποστολέας αντικειμένων, EventArgs e) {ενώ (αληθές) { /* Λήψη στο summen af den afsendte ordre ikke er lig med 0, vil dette while loop køre. */ Κατάσταση (); while (sendOrder. Sum ()! = 0) { /* Βρίσκω για το loop fungerer det således, στο så lgenge 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 μπορεί να χρησιμοποιηθεί για περισσότερες πληροφορίες, αλλά και για μεταβλητές λήψεις βίντεο μέχρι να μην είναι κολόνια, αλλά και για το kolonne μέχρι τις 0. Έκδοση προϊόντων για την αποθήκευση δεδομένων. Ενδείκνυται αν σας βοηθήσουν να επικοινωνήσετε με το Arduinoen åbnet, και να καταργήσετε την παραγγελία σας μέχρι το Arduinoen. */ για (int i = 0; i <sendOrder. Length; i ++) {Κατάσταση (); 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 = "Produkt A"; } else if (sendOrder == 2) {prodType = "Produkt B"; } else if (sendOrder == 3) {prodType = "Produkt C"; }

sendOrder = 0;

// Δεν είναι δυνατή η εκτέλεσή μου στο arrayet samlet giver 0, bliver de udførte produkter uploadet και βάσεις δεδομένων, και επικοινωνία με Arduinoen, bliver lukket. if (sendOrder. Sum () == 0) {DBQuery ("INSERT INTO` udforte` (`` Produkt type`) VALUES ('" + prodType +"') ");

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

sp. Κλείσιμο ();

Διακοπή; } /* Her afventes der at Arduinoen er færdig med ordren. Der kvitteres med et "done". Δεν είναι δυνατή η τροποποίηση, η οποία μπορεί να μεταφορτωθεί και να μεταφορτωθεί με βάση τις βάσεις δεδομένων από τον Όμιλο, αλλά και με τον τρόπο με τον οποίο μπορεί να χρησιμοποιηθεί για να υπερβεί τις βάσεις δεδομένων. */ sp. ReadTo ("Τέλος");

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

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

sp. Κλείσιμο (); Κατάσταση(); }} // Καταργώ το 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). για (int i = 0; i <order. GetLength (0); i ++) {int test = order [i, 0]; εάν (δοκιμή! = 0) {για (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. Στήριξα το man man nøjes med στο skrive "Status" Dette void er også inkluderet i det void, med det andet kode, der kører i baggrunden. * / private void Status () { /* Her åbner man MySQL forbindelsen, vælger alt fra den tabel der hedder total, και eksikverer den forespørgsel. */ MySqlConnection con = new MySqlConnection (connectionString); con. Open (); string str = "επιλέξτε * από το σύνολο"; MySqlCommand com = νέα MySqlCommand (str, con); MySqlDataReader reader = 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. αναγνώστης. Διαβάστε (); MissingProd. Invoke ((MethodInvoker) delegate {// Her bliver de manglende produkter, samt produkter der er lavet, skrevet ud på applikationen. MissingProd. Text = "manglende produkter:" + (αναγνώστης ["manglende produkter"]. ToString ()); OrdereProd. Text = "produkter lavet:" + (αναγνώστης ["productionret produkter"]. ToString ());}); // Her bliver der implementeret hvad procentbaren, skal udfyldes efter. ProcenteDone. Invoke ((MethodInvoker) εκπρόσωπος {// Hvis læseren i My SQL απαγορεύει τη διεύθυνση στο "productionret produkter ikke er lig med 0, bliver denne if statement eksikveret. Hvis det er lig med 0, bliver der udskrevet" 0%"skrevet til ετικέτα. if (int. Parse (αναγνώστης ["productionret produkter"]. ToString ()) = 0) {// Her tager man de productionret producter og plusser med de manglende produkter. Resultatet af dette ganger man med εκατ, για στο få det ud i procent. ProcenteDone. Text = Math. Round ((float. Parse (αναγνώστης ["productionret produkter"]. ToString ()) /(float. Parse(reader ["produceret produkter "]. ToString ()) + float. Parse (αναγνώστης ["manglende produkter"]. ToString ()))) * 100). ToString (); // Her bliver resultatet tidligere udregning lagt over på procentbaren. progressBar1. Value = Int32. Parse (ProcenteDone. Text);} else {ProcenteDone. Text = "0%";}}); // Her lukkes MySQL forbindelsen. reader. Close (); con. Close ();} // I dette void bliver alle produkter, der er productionret på den valgte dato, lagt ud på a pplikationen. ιδιωτικό κενό Vis_Produkter_Click_1 (αποστολέας αντικειμένων, EventArgs e) {string date = dateTimePicker1. Value. ToString (). Κατάργηση (10);

ημερομηνία = dateTimePicker1. Text;

string query = "SELECT` Produkt type`, `Tid` FROM udforte WHERE Tid> = '" + date + "00:00:00' AND Tid <= '" + date + "23:59:59'"; χρησιμοποιώντας (σύνδεση = νέο MySqlConnection (connectionString)) χρησιμοποιώντας (εντολή MySqlCommand = νέα MySqlCommand (ερώτημα, σύνδεση)) χρησιμοποιώντας (προσαρμογέα MySqlDataAdapter = νέο MySqlDataAdapter (εντολή)) {DataTable prodTable = νέο DataTable (); προσαρμογέας. Συμπλήρωση (prodTable)

dataGridView1. DataSource = prodTable;

}

} // I dette void bliver MySQL forbindelsen styret. Den fungerer således στο forbindelsen bliver bnet, eksikverer, και lukkes. ιδιωτικό κενό DBQuery (string cmd) {string query = cmd; χρησιμοποιώντας (σύνδεση = νέο MySqlConnection (connectionString)) χρησιμοποιώντας (εντολή MySqlCommand = νέα MySqlCommand (ερώτημα, σύνδεση)) {connection. Open ();

command. ExecuteScalar ();

σύνδεση. Κλείσιμο ();

} } } }

Βήμα 6: Υλικό

1 κουτ. Arduino Uno

1 κουτ. Micro servo SG90 9g

Βήμα 7: Fobindelsesdiagram / I / O Lliste

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

Βοηθητικό μοτέρ:

+ = Rød

- = Ταξινόμηση

Σήμα = Grøn

Συνιστάται: