Turinys:

EAL - pramoninis internetas - „Fabrikshal“: 7 žingsniai
EAL - pramoninis internetas - „Fabrikshal“: 7 žingsniai

Video: EAL - pramoninis internetas - „Fabrikshal“: 7 žingsniai

Video: EAL - pramoninis internetas - „Fabrikshal“: 7 žingsniai
Video: Digital Twin - Introduction 2024, Liepa
Anonim
EAL - pramoninis internetas - Fabrikshal
EAL - pramoninis internetas - Fabrikshal
EAL - pramoninis internetas - Fabrikshal
EAL - pramoninis internetas - Fabrikshal
EAL - pramoninis internetas - Fabrikshal
EAL - pramoninis internetas - Fabrikshal

Der er blevet fået stillet til opgave and implementere and automiseret system ud fra industri 4.0 princippet. Aš supratau, kad tai yra simuliacija ir fabrikshal. I hallen står der en servomotor, samt et par dioder. Naudojant RFID kortelių įrenginius, skull bruges til ir lukke de relevante ind i fabrikshallen. Alternatyvūs duomenys, brangakmeniai ir duomenų bazė „Wampserver“.

1 žingsnis: RFID kortelės

RFID kortelės
RFID kortelės
RFID kortelės
RFID kortelės

In er inkluderet ir RFID kortelės. 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. Išsiaiškinkite ir nenaudokite kortelių, kad galėtumėte pasirinkti brik ellerį ir kortelę, nuskaityti piktogramą ir numeris, o ne sugalvoti pirmąjį numerį, kai yra skaičiaus kamuolys.

Når kortlæseren giver adgang, så tændes lyset i fabrikken. Lyset slukkes taip, 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. Serial porten, skal også bruges to Arduinoens ordrer, den vil få fra vores Windows Forms applikation. I den sammenhæng er lyset også fravalgt.

2 žingsnis: 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 produrer forskellige produkter. Užsakyti, surinkti antalletą, kad būtų galima išgauti produkciją, „bliver gemt“ir „MySQL“duomenų bazę. Motoro valdiklis gali turėti teigiamą padėtį. Hver pozicijos simbolis tre forskellige produkter. Negalima gaminti produktą, gaminti produktą, pasirinkti motyvaciją ir nulinę poziciją, o taip pat ir nebent. Išsiaiškinkite žmogų, naudodamiesi WPF taikomosiomis programomis, kad gautumėte naują užsakymą iki motoren. MySQL duomenų bazė.

3 žingsnis: „MySQL“duomenų bazė - sulaikykite

„MySQL“duomenų bazė - „Indhold“
„MySQL“duomenų bazė - „Indhold“
„MySQL“duomenų bazė - „Indhold“
„MySQL“duomenų bazė - „Indhold“
„MySQL“duomenų bazė - „Indhold“
„MySQL“duomenų bazė - „Indhold“

Turiu „MySQL“duomenų bazę, kurioje rasite trečiųjų šalių tablerių. Dangtelio laikiklis ø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 productret, og hvor mange der mangler. Ydermere er der et tidspunkt på, hvornår de pågældende produkter er productret. Nustatykite „Windows Forms“taikomąsias programas, hvad der skal siunčia Arduinoen, duomenų bazę. Når der bliver afgivet en ordrer, vil den blive sendt to Arduinoen, efterfølgende, vil den relevante data blive logget and dataasen. Išsiųskite duomenų bazę, kad gautumėte duomenų bazę. En Integer, en String, som bliver kaldt en VarChar, and dataasen. Naudokite „TimeStamp“, išsamią informaciją ir nustatykite duomenų bazę.

4 žingsnis: „Arduino Kode“

#įtraukti

Servo myServo;

int servoPos; anglies produktas = '0'; void setup () {myServo.attach (3); // Serijinė komunikacija prasideda Serial.begin (9600); } void loop () {// Žiūrėti iš serijinio prievado produkt = Serial.read (); // Godkendelse af ingående ordrer switch (produkt) {// Produkt A (1) udføres i denne case case '1': myServo.write (50); vėlavimas (1000); myServo.write (0); vėlavimas (1000); Serial.println („Atlikta“); pertrauka; // Produkt B (2) udføres i denne case case '2': myServo.write (100); vėlavimas (1000); myServo.write (0); vėlavimas (1000); Serial.println („Atlikta“); pertrauka; // Produkt C (3) udføres i denne case case '3': myServo.write (150); vėlavimas (1000); myServo.write (0); vėlavimas (1000); Serial.println („Atlikta“); pertrauka; }}

5 veiksmas: „Windows“formų pritaikymas

naudojant sistemą; naudojant System. Collections. Generic; naudojant System. ComponentModel; naudojant System. Data; naudojant „System. Drawing“; naudojant System. Linq; naudojant System. Text; naudojant System. Threading. Tasks; naudojant System. Windows. Forms; naudojant System. Collections; naudojant System. IO. Ports; naudojant „MySql“; naudojant MySql. Data. MySqlClient;

vardų sritis „WindowsFormsApp2“

{viešoji dalinė klasė 1 forma: forma { /* I denne class bliver alle public variabler oprettet. Herunder er der oprettet en Class (MySqlConnection) der skals tages i brug, for at kunne oprette draindelse til MySQL serveren. Ydermere er der oprettet en String (connectionString) yra briuselis, kuriame yra tam tikras apibrėžimas ir slaptažodis, o taip pat ir duomenų bazė. Išskirkite visą skaičių ir 2d masyvą (orde). Grunden til det er at en ordrer can bestå af flere produktioner af et produkt, eller flere produkter. Serielo komunikacija iki Arduinoen bliver arba jos apibrėžimo. Der bliver også oprettet en Class (BackgroundWorker). Išsiaiškinkite ir gaukite geriausią programavimo bliverio egzikveret gentagende gange i baggrunden. I dette tilfælde er det brugbart, da der kan blive oprettet nye ordrer, med korte mellemrum. */ „MySqlConnection“ryšys; string connectionString;

private int ordrenummer;

privatus int [,] užsakymas = naujas int [100, 100]; private int sendOrder = naujas int [100]; privati eilutė prodType;

SerialPort sp = naujas SerialPort ();

private BackgroundWorker myWorker = naujas BackgroundWorker ();

vieša forma1 ()

{InitializeComponent (); // Jos bliver vores String (connectionString) apibrėžimas. connectionString = "serveris = 192.168.1.100; userid = root; pwd = langeland; database = arduino;"; /* Jos bliverio kintamasis „myWorker“sėdėjo iki žurnalo, nes jis buvo įvairus geriausias ir geriausias procesas. */ myWorker. DoWork += naujas DoWorkEventHandler (myWorker_DoWork); myWorker. WorkerReportsProgress = tiesa; myWorker. WorkerSupportsCancellation = true; // Her bliver selve baggrundsgennemløbet eksikveret. myWorker. RunWorkerAsync (); // Jos bliver der defineret hvilket format datoen kører i. Jos formatas buvo geriausias po „MySQL“duomenų bazės. dateTimePicker1. CustomFormat = "yyyy-MM-dd"; dateTimePicker1. Format = DateTimePickerFormat. Custom; }

private void Afgiv_Ordre_Click (objekto siuntėjas, „EventArgs e“)

{ /* Jos 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 the kunne skrive det antal man ønsker, ind i applikationen. Tai yra operettet for 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; /* Aš disse for kilpos 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)

{ordrenummer = 0; } // Her overføres de bestilte produkter til databaseasen. DBQuery ("INSERT INTO` bestilteprod` (`Produkt A`,` Produkt B`, `Produkt C`) VERTĖS (" + prodA + "," + prodB + "," + prodC + ")"); // Her overføres en oversigt over hvilke produkter der mangler and blive produrert, till databaseas. DBQuery ("UPDATE` total` SET `manglende produkter` = (` manglende produkter` +(" +(prodA +prodB +prodC) +") WHERE 1 "); }

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

private void myWorker_DoWork (objekto siuntėjas, EventArgs e) {while (true) { /* Så længe at summen af den afsendte ordre ikke er lig med 0, vil dette while loop køre. */ Būsena (); 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. 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 egzikveret, og inden and variablen rykker videre til næste kolonne, bliver den pågældende kolonne sat till 0. De eksikverede produkter bliver uploadet till database. Inden if sætningerne bliver communicationation to Arduinoen åbnet, and den afgivet ordre bliver sendt to Arduinoen. */ for (int i = 0; i <sendOrder. Length; i ++) {Status (); sp. BaudRate = 9600; sp. PortName = "COM4"; sp. Atviras (); sp. Write (sendOrder . ToString ()); // Programmet der er i en af disse if teiginiai, 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 `productionret produkter` = (` produret produkter` + 1), `manglende produkter` = (` manglende produkter` - 1) ");

sp. Uždaryti ();

pertrauka; } /* Jos afventes der at Arduinoen er færdig med ordren. Der kvitteres med et "done". Jei norite, kad būtų pakeistas modulis, bliver de udførte endnu ir gauja įkeltų į duomenų bazę Grunden til dette, er at man skal være sikker på at det sideste udførte product bliver overført to databaseas. */ sp. ReadTo ("Atlikta");

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

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

sp. Uždaryti (); Būsena (); }} // 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] = tvarka [i, j];

tvarka [i, j] = 0;

}

pertrauka; }}

}

} /* Jos er der oprettet et void ved navn "Status". Deter lavet for at 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 () { /* Jos „MySQL“uždraustas vyras, bet ne iš viso lentelės, bet iš viso, o ne iš anksto. */ MySqlConnection con = new MySqlConnection (connectionString); con. Open (); string str = "pasirinkite * iš viso"; MySqlCommand com = new MySqlCommand (str, con); MySqlDataReader skaitytuvas = 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. skaitytojas. Skaityti (); MissingProd. Invoke ((MethodInvoker) delegate {// Her bliver de manglende produkter, samt produkter der er lavet, skrevet ud på applikationen. MissingProd. Text = "manglende produkter:" + (skaitytojas ["manglende produkter"]. ToString ()); OrdereProd. Text = "produkter lavet:" + (skaitytojas ["productionret produkter"]. ToString ());}); // Jos bliver der implementeret hvad procentbaren, skal udfyldes efter. ProcenteDone. Invoke ((MethodInvoker) delegatas {// Hvis læseren i My SQL uždraustas leidimas 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 etiketė. if (int. Parse (skaitytojas ["productionret produkter"]. ToString ())! = 0) {// Her tager man de productionret produkter og pliuser med de manglende produkter. Resultatet af dette ganger man med simt, for at få det ud i proc. ProcenteDone. Text = Math. Round ((float. Parse (skaitytojas ["productionret produkter"]. ToString ()) /(float. Parse(reader["produceret produkter "]. ToString ()) + float. Parse (skaitytojas ["manglende produkter"]. ToString ()))) * 100). ToString (); // Jos bliverio rezultatas po tidligere udregning lagt over på percentbaren. progressBar1. Value = Int32. Parse (ProcenteDone. Text);} else {ProcenteDone. Text = "0%";}}); // Jos lukkes MySQL uždrausta. reader. Close (); con. Close ();} // I dette void bliver all produkter, der er produc på den valgte dato, lagt ud på a pplikationen. private void Vis_Produkter_Click_1 (objekto siuntėjas, EventArgs e) {string date = dateTimePicker1. Value. ToString (). Pašalinti (10);

date = dateTimePicker1. Text;

string query = "SELECT` Produkt type`, `Tid` FROM udforte WHERE Tid> = '" + date + "00:00:00' AND Tid <= '" + date + "23:59:59'"; naudojant (ryšys = naujas MySqlConnection (connectionString)) naudojant (MySqlCommand komanda = naujas MySqlCommand (užklausa, ryšys)) naudojant (MySqlDataAdapter adapter = new MySqlDataAdapter (komanda)) {DataTable prodTable = new DataTable (); adapter. Fill (prodTable);

dataGridView1. DataSource = prodTable;

}

} // I dette void bliver MySQL uždrausta stiret. Den fungerer således at tiltas bliver åbnet, eksikverer, og lukkes. private void DBQuery (eilutė cmd) {eilutės užklausa = cmd; naudojant (ryšys = naujas MySqlConnection (connectionString)) naudojant (MySqlCommand komanda = new MySqlCommand (užklausa, ryšys)) {connection. Open ();

komanda. ExecuteScalar ();

jungtis. Uždaryti ();

} } } }

6 žingsnis: Materialeliste

1 stk. Arduino Uno

1 stk. Mikro servo SG90 9g

7 žingsnis: Fobindelsesdiagram / I / O Lliste

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

Servo variklis:

+ = Rød

- = Rūšiuoti

Signalas = Grøn

Rekomenduojamas: