Talaan ng mga Nilalaman:

EAL - Industriel Internet - Fabrikshal: 7 Hakbang
EAL - Industriel Internet - Fabrikshal: 7 Hakbang

Video: EAL - Industriel Internet - Fabrikshal: 7 Hakbang

Video: EAL - Industriel Internet - Fabrikshal: 7 Hakbang
Video: Машинное обучение для разработчиков Java: переход на стек технологий ИИ. 2024, Hulyo
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

Sa gayon ay mapupunta ka pa rin sa pamamagitan ng pagpapatawad at pagpapatupad ng system na ito mula sa 4.0 industriya na prinsipyo. Tinanggap ko ang opgave, er der lavet en lille simulation af en fabrikshal. Pinapakita ko ang mga ito sa servomotor, sam et et par dioder. Udevendig, sidder der en RFID kortlæser, der skulle bruges til at lukke de relevante ind i fabrikshallen. Alt data, mga gemme sa database ko sa Wampserver.

Hakbang 1: 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 er skrevet ind i vores Arduino kode. Ang detalyado na ito ay dapat na mag-sign in sa pamamagitan ng operter para sa brig eller et kort.

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 for 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.

Hakbang 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 para produser forskellige produkter. Ordrerbeholdningen, samt antallet af de udførte produkter, bliver gemt i en MySQL database. Ang motoren ay maaaring makita para sa posisyon ng posisyon. Hver posisyon ng tagapaglarawan tre forskellige produkter. Ang mga produktong ito ay dapat gawin, maaari kang mag-motor sa posisyon, at pagkatapos nito. Narito ang meningen at man, sa pamamagitan ng WPF applikationen para sa afgive nye ordrer til motoren. Alt hvad bliver produceret bliver gemt i sa MySQL database.

Hakbang 3: MySQL Database - Indhold

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

Ang MySQL ay nagtatrabaho sa tabeller. Ang may-ari ng ibang tao sa iyo ay may pinakamataas na produkto, upang masubukan. En anden tabel vil logge alle de udførte produkter. Ang tredje, at sidste tabel indenholder en oversigt over hvor mange produkter der er produceret, og hvor mange der mangler. Ydermere er der et tidspunkt på, hvornår de pågældende produkter er produceret. Det er Windows Forms applikationen der vil styre, hvad der skal sendes Arduinoen, samt databasen. Natapos ang bliver afgivet en ordrer, vil den blive sendt til Arduinoen, efterfølgende, vil den relevante data blive logget i databasen. Der bliver sendt tre forskellige datatyper til databasen. En Integer, en String, som bliver kaldt en VarChar, i databasen. Der ers et et TimeStamp, Det er enstilling, der er tilføjet i databasen.

Hakbang 4: Arduino Kode

# isama

Servo myServo;

int servoPos; char produkt = '0'; void setup () {myServo.attach (3); // Nagsisimula ang Serial kommunikation sa Serial.begin (9600); } void loop () {// Læsning fra serial port produkt = Serial.read (); // Godkendelse af ingående ordrer switch (produkt) {// Produkt A (1) udføres i denne case case '1': myServo.write (50); pagkaantala (1000); myServo.write (0); pagkaantala (1000); Serial.println ("Tapos Na"); pahinga; // Produkt B (2) udføres i denne case case '2': myServo.write (100); pagkaantala (1000); myServo.write (0); pagkaantala (1000); Serial.println ("Tapos Na"); pahinga; // Produkt C (3) udføres i denne case case '3': myServo.write (150); pagkaantala (1000); myServo.write (0); pagkaantala (1000); Serial.println ("Tapos Na"); pahinga; }}

Hakbang 5: Pag-apply ng Windows Forms

gamit ang System; gamit ang System. Collection. Generic; gamit ang System. ComponentModel; gamit ang System. Data; gamit ang System. Pagguhit; gamit ang System. Linq; gamit ang System. Txt; gamit ang System. Treading. Tasks; gamit ang System. Windows. Forms; gamit ang System. Collection; gamit ang System. IO. Ports; gamit ang MySql; gamit ang MySql. Data. MySqlClient;

namespace WindowsFormsApp2

{pampublikong bahagyang klase na Form1: Form {/ * I denne class bliver all public variabler oprettet. Herunder er der oprettet en Class (MySqlConnection) der skal tages i brug, for at kunne oprette forbindelse til MySQL serveren. Ydermere er der oprettet en String (connectionString) sa bruges hanggang sa tiyak na hvilken bruger der skal på og password, at ang database ng database ay binabanggit. Ang mga ito ay nasa integer, i et 2d array (orde). Grunden til det er at en ordrer para sa pinakamahusay na mga produkto dito at mga produkto, iba pang mga produkto. Seriel kommunikationen til Arduinoen bliver også defineret her. Der bliver også oprettet tl Class (BackgroundWorker). Maaring magbigay ng pinakamainam na programmet bliver eksikveret gentagende gange i baggrunden. I dette tilfælde er det brugbart, da der para blive oprettet nye ordrer, med korte mellemrum. * / MySqlConnection koneksyon; koneksyon sa stringString;

pribadong int ordrenummer;

pribadong int [,] order = bagong int [100, 100]; pribadong int nagpapadalaOrder = bagong int [100]; pribadong stringType;

SerialPort sp = bagong SerialPort ();

pribadong BackgroundWorker myWorker = bagong BackgroundWorker ();

pampublikong Form1 ()

{InitializeComponent (); // Her bliver vores String (connectionString) defineret. connectionString = "server = 192.168.1.100; userid = root; pwd = langeland; database = arduino;"; / * Ang kanyang bliver ay nagbago ng "myWorker" upang maupo at mag-logge upang maiiba ang magkakaibang bestillinger at i-download ang mga proces. * / myWorker. DoWork + = bagong DoWorkEventHandler (myWorker_DoWork); myWorker. WorkerReportsProgress = totoo; myWorker. WorkerSupportsCancellation = totoo; // His bliver selve baggrundsgennemløbet eksikveret. myWorker. RunWorkerAsync (); // Her bliver der defineret hvilket format datoen kører i. Ang kanyang format na pinakamahusay na magagawa ang MySQL databasen. dateTimePicker1. CustomFormat = "yyyy-MM-dd"; dateTimePicker1. Format = DateTimePickerFormat. Custom; }

pribadong walang bisa Afgiv_Ordre_Click (nagpadala ng object, EventArgs e)

{/ * Ang kanyang 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. Tungkol dito para sa at sa aking pde den pågældende ordre. * / int produktA = 1; int produktB = 2; int produktC = 3; int prodA = int. Parse (prodAOrder. Txt); int prodB = int. Parse (prodBOrder. Txt); int prodC = int. Parse (prodCOrder. Txt); int orderLength = prodA + prodB + prodC; / * Nagdidisenyo ako para sa mga loop ng bliver para sa oprettet, mga tagataguyod sa ordrene bliver prodyuser sa den rækkefølge, de er bestilt i. * / para sa (int prod1A = 0; prod1A <prodA; prod1A ++) {order [ordrenummer, prod1A] = produktA; }

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

para sa (int prod1C = (prodA + prodB); prod1C 99)

{ordrenummer = 0; } // Her overføres de bestilte produkter til databasen. Ang DBQuery ("INSERT INTO` bestilteprod` (`Produkt A`,` Produkt B`, `Produkt C`) VALUES (" + prodA + "," + prodB + "," + prodC + ")"); // Her overføres en oversigt over hvilke produkter der mangler at blive producerert, til databasen. DBQuery ("UPDATE` total` SET `manglende produkter` = (` manglende produkter` + ("+ (prodA + prodB + prodC) +")) WHERE 1 "); }

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

pribadong void myWorker_DoWork (object sender, EventArgs e) {habang (totoo) {/ * Så længe at summen af den afsendte ordre ikke er lig med 0, vil dette habang loop køre. * / Katayuan (); habang (nagpapadala ngOrder. Sum ()! = 0) {/ * Tumitingin ako para sa loop fungerer det således, at sa aking wika 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. Tungkol sa kolonnen, ser hvilket tal der står i kolonnen. Tallet bliver eksikveret, at inden at variablen rykker videre til næste kolonne, bliver den pågældende kolonne sat til 0. De eksikverede produkter bliver uploadet til databasen. Kung nais mong magbahagi ng komunikasyon hanggang sa Arduinoen åbnet, at pagkatapos ay bigyan ito ng utos na ipadala hanggang sa Arduinoen. * / para sa (int i = 0; i <sendOrder. Length; i ++) {Status (); sp. BaudRate = 9600; sp. PortName = "COM4"; sp. Buksan (); sp. Write (nagpapadala ngOrder . ToString ()); // Programmet der er i en af disse if statements, vil blive eksikveret, afhængig af hvilket tal fra et til tre der er i variablen (i). kung (nagpapadala ngOrder == 1) {prodType = "Produkt A"; } iba pa kung (nagpapadala ngOrder == 2) {prodType = "Produkt B"; } iba pa kung (nagpapadala ngOrder == 3) {prodType = "Produkt C"; }

nagpapadala ngOrder = 0;

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

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

sp. Close ();

pahinga; } / * Ang kanyang mga afventes der at Arduinoen er færdig med ordren. Der kvitteres med et "tapos". Når det er modtaget, bliver de udførte endnu en gang uploadet til databasen Grunden til dette, er at man skal være sikker på at det sidste udførte produkt bliver overført til databasen. * / sp. ReadTo ("Tapos Na");

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

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

sp. Close (); Katayuan (); }} // 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). para sa (int i = 0; i <order. GetLength (0); i ++) {int test = order [i, 0]; kung (pagsubok! = 0) {para sa (int j = 0; j <100; j ++) {nagpapadala ngOrder [j] = order [i, j];

order [i, j] = 0;

}

pahinga; }}

}

} / * Ang kanyang er der oprettet et void ved navn "Katayuan". Det er lavet for at skulle undgå at skrive de samme linjer kode flere steder. Ako stedet para man nøjes med at skrive "Katayuan" Dette void er også inkluderet i det void, med det andet kode, der kører i baggrunden. * / pribadong walang bisa na Katayuan () {/ * Ang kanyang MySQL forbindelsen na tao, na nabuo sa buong tab ng hedder total, at eksikverer for forespørgsel. * / MySqlConnection con = bagong MySqlConnection (connectionString); con. Buksan (); string str = "select * from total"; MySqlCommand com = bagong MySqlCommand (str, con); MySqlDataReader reader = com. ExecutReader (); // Denne funktion er med for at dele Baggrundskoden på en tråd i CPU'en, og en anden tråd til resten af koden. mambabasa. Basahin (); MissingProd. Invoke ((MethodInvoker) delegado {// 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:" + (reader ["produceret produkter"]. ToString ());}); // Her bliver der implementeret hvad procentbaren, skal udfyldes efter. Ang ProcenteDone. Invoke ((MethodInvoker) ay nag-delegate ng {// Hvis læseren i My SQL forbindelsen læser sa "produseretter produktoryo para sa ligaw na 0, bliver denne kung ang pahayag na ito ay nag-uusap. Hvis det er lig med 0, bliver der udskrevet" 0% "skrevet til label. kung (int. Parse (mambabasa ["produseret produkter"]. ToString ())! = 0) {// Her tager man de produceret produkter og plusser med de manglende produkter. Resultatet af dette ganger man med gatus, for at få det ud i procent. ProcenteDone. Text = Math. Round ((float. Parse (reader ["produceret produkter"]. ToString ()) /(float. Parse(reader["produceret produkter "]. ToString ()) + float. Parse (reader ["manglende produkter"]. ToString ()))) * 100). ToString (); // Her bliver resultatet af tidligere udregning lagt over på procentbaren. ProgressBar1. Value = Int32. Parse (ProcenteDone. Text);} iba pa {ProcenteDone. Text = "0%";}}); // Ang kanyang lukso ng MySQL forbindelsen. reader. Close (); con. Close ();} // I dette void bliver all produkter, der er produceret på den valgte dato, lagt ud på a pplikationen. pribadong walang bisa Vis_Produkter_Click_1 (nagpadala ng bagay, EventArgs e) {string date = dateTimePicker1. Value. ToString (). Alisin (10);

petsa = dateTimePicker1. Txt;

string query = "SELECT` Produkt type`, `Tid` MULA sa udforte WHERE Tid> = '" + date + "00:00:00' AND Tid <= '" + date + "23:59:59'"; gamit ang (koneksyon = bagong MySqlConnection (koneksyonString)) gamit ang (MySqlCommand utos = bagong MySqlCommand (query, koneksyon)) gamit ang (MySqlDataAdapter adapter = bagong MySqlDataAdapter (utos)) {DataTable prodTable = bagong DataTable (); adapter. Punan (prodTable);

dataGridView1. DataSource = prodTable;

}

} // I dette void bliver MySQL forbindelsen styret. Ang fungerer således at forbindelsen bliver åbnet, eksikverer, at lukkes. pribadong void DBQuery (string cmd) {string query = cmd; gamit ang (koneksyon = bagong MySqlConnection (connectionString)) gamit ang (MySqlCommand command = bagong MySqlCommand (query, koneksyon)) {connection. Open ();

utos. ExecutScalar ();

koneksyon. Close ();

} } } }

Hakbang 6: Materialeliste

1 stk Arduino Uno

1 stk Micro servo na SG90 9g

Hakbang 7: Fobindelsesdiagram / I / O Lliste

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

Servomotor:

+ = Rød

- = Pagbukud-bukurin

Signal = Grøn

Inirerekumendang: