Satura rādītājs:

EAL - industriālais internets - Fabrikshal: 7 soļi
EAL - industriālais internets - Fabrikshal: 7 soļi

Video: EAL - industriālais internets - Fabrikshal: 7 soļi

Video: EAL - industriālais internets - Fabrikshal: 7 soļi
Video: ТАКОЙ РЫНОК ВИЖУ ВПЕРВЫЕ!! ОДЕССА ПРИВОЗ. САМЫЙ БЫСТРЫЙ РЕЦЕПТ САЛА "ОЙ" 2024, Jūlijs
Anonim
EAL - industriālais internets - Fabrikshal
EAL - industriālais internets - Fabrikshal
EAL - industriālais internets - Fabrikshal
EAL - industriālais internets - Fabrikshal
EAL - industriālais internets - Fabrikshal
EAL - industriālais internets - Fabrikshal

Der er blevet fået stillet til opgave and implementere et automiseret system ud fra industri 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 en RFID kortlæser, der skulle bruges til and lukke de relevante ind i fabrikshallen. Alt dati, dārgakmeņi un datu bāze Wampserver.

1. darbība: RFID Kortlæser

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

Der er inkluderet en 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. Detalizēti un nē 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 jā, 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.

2. darbība: Servomotors (Anlæg)

Servomotors (Anlæg)
Servomotors (Anlæg)
Servomotors (Anlæg)
Servomotors (Anlæg)
Servomotors (Anlæg)
Servomotors (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. Pasūtiet, samt antallet af de udførte produkter, bliver gemt un lv MySQL datu bāze. Motoren kan køre ud i tre forskellige pozicionētājs. Hver pozīcijas simbolizētājs tre forskellige produkter. Når produktet er færdigproduceret, kører motoren tilbage i nul position, og afventer nye ordrer. Deter meningen at man, via WPF applikationen kan afgive nye ordrer til motoren. Alt hvad bliver produret bliver gemt i lv MySQL datu bāze.

3. darbība: MySQL datu bāze - aizturēt

MySQL datu bāze - Indhold
MySQL datu bāze - Indhold
MySQL datu bāze - Indhold
MySQL datu bāze - Indhold
MySQL datu bāze - Indhold
MySQL datu bāze - Indhold

I MySQL datu bāze ir pieejama tabulā. Den første turētājs ø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 der producents, og hvor mange der mangler. Ydermere er der et tidspunkt på, hvornår de pågældende produkter er productionret. Det Windows operētājsistēmas veidlapu lietojumprogrammas, kas tiek izmantotas stilā, kā arī nosūta Arduinoen, datu bāzes. Når der bliver afgivet en ordrer, vil den blive sendt to Arduinoen, efterfølgende, vil den relevante data blive logget and dataasen. Nosūtiet datu bloku, izmantojot datu bloku. En Integer, en String, som bliver kaldt en VarChar, and dataasen. Der er også et TimeStamp, deter en enstilling, der er tilføjet and dataasen.

4. solis: Arduino Kode

#iekļaut

Servo myServo;

int servoPos; char produkt = '0'; void setup () {myServo.attach (3); // Sērijas komunikācija sākas Serial.begin (9600); } void loop () {// Lādēšana no seriālā porta produkta = Serial.read (); // Godkendelse af ingående ordrer switch (produkt) {// Produkt A (1) udføres i denne case case '1': myServo.write (50); kavēšanās (1000); myServo.write (0); kavēšanās (1000); Serial.println ("Gatavs"); pārtraukums; // Produkt B (2) udføres i denne case case '2': myServo.write (100); kavēšanās (1000); myServo.write (0); kavēšanās (1000); Serial.println ("Gatavs"); pārtraukums; // Produkt C (3) udføres i denne case case '3': myServo.write (150); kavēšanās (1000); myServo.write (0); kavēšanās (1000); Serial.println ("Gatavs"); pārtraukums; }}

5. darbība: Windows veidlapu lietošana

izmantojot System; izmantojot System. Collections. Generic; izmantojot System. ComponentModel; izmantojot System. Data; izmantojot System. Drawing; izmantojot System. Linq; izmantojot System. Text; izmantojot System. Threading. Tasks; izmantojot System. Windows. Forms; izmantojot System. Collections; izmantojot System. IO. Ports; izmantojot MySql; izmantojot MySql. Data. MySqlClient;

nosaukumvieta WindowsFormsApp2

{public partical class Form1: Form { /* I denne class bliver alle public variabler oprettet. Herunder er der oprettet en Class (MySqlConnection) der skal tages i brug, jo kunne oprette aizliegt līdz MySQL serveren. Ydermere er der oprettet lv String (connectionString) ir bruģis līdz noteiktam hvilken bruger der skal på og password, un hvilken datubāze der er state om. Iegūstiet opciju un veselu skaitli, kā arī 2d masīvu (orde). Grunden til det er at en ordrer kan bestå af flere produktioner af et produkt, eller flere produkter. Seriela komunikācija līdz Arduinoen bliver vai viņas definīcijai. Der bliver også oprettet en Class (BackgroundWorker). Den gør un en bestemt del af programmet bliver eksikveret gentagende gange i baggrunden. I dette tilfælde er det brugbart, da der kan blive oprettet nye ordrer, med korte mellemrum. */ MySqlConnection savienojums; virknes savienojumsString;

privāts int pasūtījums;

privāts int [,] pasūtījums = jauns int [100, 100]; privāts int sendOrder = jauns int [100]; privāta virkne prodType;

SerialPort sp = jauns SerialPort ();

privāts BackgroundWorker myWorker = jauns BackgroundWorker ();

publiska 1. veidlapa ()

{InitializeComponent (); // Viņas bliver vores String (connectionString) definēts. connectionString = "serveris = 192.168.1.100; lietotāja ID = sakne; pwd = langeland; datu bāze = arduino;"; /* Viņas bliver mainīgais "myWorker" sēdēja līdz logge på hvor langt daudzveidīgs bestillinger er i deres process. */ myWorker. DoWork += jauns DoWorkEventHandler (myWorker_DoWork); myWorker. WorkerReportsProgress = true; myWorker. WorkerSupportsCancellation = true; // Her bliver selve baggrundsgennemløbet eksikveret. myWorker. RunWorkerAsync (); // Viņas bliver der defineret hvilket format datoen kører i. Viņas formāts ir vislabākais pēc MySQL datu bāzes. dateTimePicker1. CustomFormat = "gggg-MM-dd"; dateTimePicker1. Format = DateTimePickerFormat. Custom; }

private void Afgiv_Ordre_Click (objekta sūtītājs, 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 cilpas bliver køen oprettet, således at ordrene bliver producents i den rækkefølge, de er bestilt i. */ par (int prod1A = 0; prod1A <prodA; prod1A ++) {order [ordrenummer, prod1A] = produktA; }

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

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

{ordrenummer = 0; } // Her overføres de bestilte produkter til datubāzes. DBQuery ("INSERT INTO` bestilteprod` (`Produkt A`,` Produkt B`, `Produkt C`) VĒRTĪBAS (" + prodA + "," + prodB + "," + prodC + ")"); // Her overføres en oversigt over hvilke produkter der mangler and blive produrert, till datubāze. DBQuery ("UPDATE` total` SET `manglende produkter` = (` manglende produkter` +(" +(prodA +prodB +prodC) +")) WHERE 1 "); }

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

private void myWorker_DoWork (objekta sūtītājs, EventArgs e) {while (true) { /* Så længe at summen af den afsendte ordre ikke er lig med 0, vil dette while loop køre. */ Statuss (); 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 eksikveret, og inden and variablen rykker videre til næste kolonne, bliver den pågældende kolonne sat 0. Līdz ekskluzīva produkcija bliver uploadet till database. Inden if sætningerne bliver communicationationen to Arduinoen åbnet, and den afgivet ordre bliver sendt to Arduinoen. */ par (int i = 0; i <sendOrder. Length; i ++) {Statuss (); sp. BaudRate = 9600; sp. PortName = "COM4"; sp. Atvērt (); sp. Write (sendOrder . ToString ()); // Programmet der er i en af disse if paziņojumi, vil blive eksikveret, afhængig af hvilket tal fra et til tre der er i variablen (i). ja (sendOrder == 1) {prodType = "Produkt A"; } cits if (sendOrder == 2) {prodType = "Produkt B"; } cits 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 data, og komunikationen til Arduinoen, bliver lukket. if (sendOrder. Sum () == 0) {DBQuery ("INSERT INTO` udforte` (`Produkt type`) VALUES ('" + prodType + "')");

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

sp. Aizvērt ();

pārtraukums; } /* Viņas afventes der at Arduinoen er færdig med ordren. Der kvitteres med et "darīts". Når det er modtaget, bliver de udførte endnu en band uploadet to dataas Grunden til dette, er at man skal være sikker på at det sideste udførte product bliver overført till datubāzes. */ sp. ReadTo ("Gatavs");

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

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

sp. Aizvērt (); Statuss (); }} // 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). par (int i = 0; i <order. GetLength (0); i ++) {int test = order [i, 0]; ja (tests! = 0) {par (int j = 0; j <100; j ++) {sendOrder [j] = secība [i, j];

secība [i, j] = 0;

}

pārtraukums; }}

}

} /* Her er der oprettet et void ved navn "Status". Det er 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 () { /* Viņas vīrietis MySQL ir aizliegts, vai nav pieejams kopējais tabulas derīguma termiņš, kā arī ekskluzīvs priekšplāna ziņojums. */ MySqlConnection con = jauns MySqlConnection (connectionString); con. Open (); string str = "atlasīt * no kopējā"; MySqlCommand com = new MySqlCommand (str, con); MySqlDataReader lasītājs = 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. lasītājs. Lasīt (); MissingProd. Invoke ((MethodInvoker) delegāts {// Her bliver de manglende produkter, samt produkter der er lavet, skrevet ud på applikationen. MissingProd. Text = "manglende produkter:" + (lasītājs ["manglende produkter"]. ToString ()); OrdereProd. Text = "produkter lavet:" + (lasītājs ["productionret produkter"]. ToString ());}); // Viņas bliver der implementeret hvad procentbaren, skal udfyldes efter. ProcenteDone. Invoke ((MethodInvoker) delegāts {// Hvis læseren i My SQL aizliegts læser at "producentu produkcija ikke er lig med 0, bliver denne if utasítás eksikveret. Hvis det er lig med 0, bliver der udskrevet" 0%"skrevet til etiķete. if (int. Parse (lasītājs ["producentu produkcija"]. ToString ())! = 0) {// Her tager man de productionret produkter og plusser med de manglende produkter. Resultatet af dette ganger man med simts, par plkst. få det ud i proc. ProcenteDone. Text = Math. Round ((float. Parse (lasītājs ["producentu produkcija"]. ToString ()) /(float. Parse(reader["produceret produkter "]. ToString ()) + float. Parse (lasītājs ["manglende produkter"]. ToString ()))) * 100). ToString (); // Viņas blivera rezultāts pēc tidligere udregning lagt over på procentbaren. progressBar1. Value = Int32. Parse (ProcenteDone. Text);} else {ProcenteDone. Text = "0%";}}); // Her lukkes MySQL aizliegts. reader. Close (); con. Close ();} // I dette void bliver all produkter, der er producents på den valgte dato, lagt ud på a pplikationen. private void Vis_Produkter_Click_1 (objekta sūtītājs, EventArgs e) {string date = dateTimePicker1. Value. ToString (). Noņemt (10);

date = dateTimePicker1. Text;

string query = "SELECT` Produkt type`, `Tid` FROM udforte WHERE Tid> = '" + date + "00:00:00' AND Tid <= '" + date + "23:59:59'"; izmantojot (savienojums = jauns MySqlConnection (connectionString)) izmantojot (MySqlCommand komanda = new MySqlCommand (vaicājums, savienojums)), izmantojot (MySqlDataAdapter adapter = new MySqlDataAdapter (komanda)) {DataTable prodTable = new DataTable (); adapter. Fill (prodTable);

dataGridView1. DataSource = prodTable;

}

} // I dette void bliver MySQL aizliegta stila. Den fungerer således at aizliegts bliver åbnet, eksikverer, og lukkes. private void DBQuery (virkne cmd) {virknes vaicājums = cmd; izmantojot (savienojums = jauns MySqlConnection (connectionString)) izmantojot (MySqlCommand komanda = new MySqlCommand (vaicājums, savienojums)) {connection. Open ();

komanda. ExecuteScalar ();

savienojums. Aizvērt ();

} } } }

6. solis: materiāla saraksts

1 stk. Arduino Uno

1 stk. Mikro servo SG90 9g

7. darbība: Fobindelsesdiagram / I / O Lliste

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

Servomotors:

+ = Rød

- = Kārtot

Signāls = Grøn

Ieteicams: