ዝርዝር ሁኔታ:

EAL - ኢንዱስትሪያል ኢንተርኔት - ፋብሪክሻል 7 ደረጃዎች
EAL - ኢንዱስትሪያል ኢንተርኔት - ፋብሪክሻል 7 ደረጃዎች

ቪዲዮ: EAL - ኢንዱስትሪያል ኢንተርኔት - ፋብሪክሻል 7 ደረጃዎች

ቪዲዮ: EAL - ኢንዱስትሪያል ኢንተርኔት - ፋብሪክሻል 7 ደረጃዎች
ቪዲዮ: ዓባይ ባንክ አ.ማ እና የኢትዮጵያ አየር መንገድ የስራ ስምምነት... 6.4.2012 E.C 2024, ሀምሌ
Anonim
EAL - ኢንዱስትሪያል ኢንተርኔት - ፋብሪክሻል
EAL - ኢንዱስትሪያል ኢንተርኔት - ፋብሪክሻል
EAL - ኢንዱስትሪያል ኢንተርኔት - ፋብሪክሻል
EAL - ኢንዱስትሪያል ኢንተርኔት - ፋብሪክሻል
EAL - ኢንዱስትሪያል ኢንተርኔት - ፋብሪክሻል
EAL - ኢንዱስትሪያል ኢንተርኔት - ፋብሪክሻል

ዴር er blevet fået stillet til opgave at implementere et automatiseret system ud fra industri 4.0 ርእሰ. እኔ denne opgave ፣ er der lavet en lille simulation af en fabrikshal. እኔ 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 ውሂብ ፣ እንቁዎች i en ጎታ i i Wampserver.

ደረጃ 1: RFID Kortlæser

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

ደር er inkluderet en RFID kortlæser. ሄንሴግተን ኤር በኡድ ፍራድ ደ ኢድ numre ደር 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, og godkender først når det nummer stemmer overens med det der er er skrevet ind i koden.

Når kortlæseren ሰጪ 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, ዳ 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 የዊንዶውስ ቅጾች አፕሊኬሽን። እኔ sammenhæng er lyset også fravalgt.

ደረጃ 2 Servomotor (Anlæg)

ሰርቮሞተር (አንልግ)
ሰርቮሞተር (አንልግ)
ሰርቮሞተር (አንልግ)
ሰርቮሞተር (አንልግ)
ሰርቮሞተር (አንልግ)
ሰርቮሞተር (አንልግ)

እኔ hallen er der en servomotor, der er styret af en Arduino Uno. ዴን skalsimulere et anlæg, der kan አምራች forskellige produkter. Ordrerbeholdningen, samt antallet af de udførte produkter, bliver gemt i en MySQL database. Motoren kan køre ud i tre forskellige positioner. Hver አቀማመጥ symboliserer tre forskellige produkter. Når produktet er færdigproduceret ፣ kører motoren tilbage i nul position ፣ og afventer ny ordrer። በሰው ላይ Det er meningen, WPF applikationen kan afgive ናይ ordrer til motoren በኩል። Alt hvad bliver productret bliver gemt i በ MySQL የመረጃ ቋት ውስጥ።

ደረጃ 3 - MySQL ጎታ - ያዝ

MySQL ጎታ - ያዝ
MySQL ጎታ - ያዝ
MySQL ጎታ - ያዝ
MySQL ጎታ - ያዝ
MySQL ጎታ - ያዝ
MySQL ጎታ - ያዝ

እኔ MySQL የመረጃ ቋቶች vil der være tre tabeller። ዴን første ባለቤት ø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 produceret, og hvor mange der mangler. Ydermere er der et tidspunkt på, hvornår de pågældende produkter er productionret. Det er የዊንዶውስ ቅጾች applikationen der vil styre ፣ hvad der skal Arduinoen ፣ samt databasen ይልካል። Når der bliver afgivet en ordrer ፣ vil den blive sendt til Arduinoen ፣ efterfølgende ፣ vil den relevante data blive logget i databasen. ዴር bliver sendt tre forskellige datatyper til databasen. ኤን ኢንቲጀር ፣ ኤን ሕብረቁምፊ ፣ ሶም ብሊቨር ካልድት በቫርቻር ፣ i databasen። ደር er også et TimeStamp ፣ Det er en indstilling ፣ der er tilføjet i databasen.

ደረጃ 4: አርዱዲኖ ኮዴ

#ያካትቱ

Servo myServo;

int servoPos; ቻር produkt = '0'; ባዶነት ማዋቀር () {myServo.attach (3); // ተከታታይ kommunikation Serial.begin (9600) ይጀምራል። } ባዶነት 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); መዘግየት (1000); myServo.write (0); መዘግየት (1000); Serial.println ("ተከናውኗል"); ሰበር; // Produkt B (2) udføres i denne case case '2': myServo.write (100); መዘግየት (1000); myServo.write (0); መዘግየት (1000); Serial.println ("ተከናውኗል"); ሰበር; // Produkt C (3) udføres i denne case case '3': myServo.write (150); መዘግየት (1000); myServo.write (0); መዘግየት (1000); Serial.println ("ተከናውኗል"); ሰበር; }}

ደረጃ 5 የዊንዶውስ ቅጾች አተገባበር

ሲስተምን መጠቀም ፤ ስርዓት. Collections. Generic; System. ComponentModel በመጠቀም; System. Data በመጠቀም; ስርዓትን በመጠቀም መሳል; System. Linq በመጠቀም; ስርዓት በመጠቀም። ጽሑፍ; System. Threading. Tasks በመጠቀም; System. Window. Forms ን በመጠቀም; ስርዓትን በመጠቀም ስብስቦችን; 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) der skal tages i brug, ለ kunne oprette forbindelse til MySQL serveren ድረስ። Ydermere er der oprettet en String (connectionString) den bruges til at definere hvilken bruger der skal på og password, og hvilken database der er tale om om. Der er oprettet en ኢንቲጀር ፣ i et 2d ድርድር (orde)። Grunden til det er at en ordrer kan bestå af flere produktioner af et produkt, eller flere produkter. ሴርኤል kommunikationen til Arduinoen bliver også እሷን ይገልፃል። Der bliver også oprettet en Class (BackgroundWorker)። Den gør at en bestemt del af programmet bliver eksikveret gentagende gange i baggrunden. እኔ tilfælde er det brugbart, ዳ ደር kan blive oprettet ny ordrer, med korte mellemrum. */ MySqlConnection ግንኙነት; ሕብረቁምፊ ግንኙነት ሕብረቁምፊ;

የግል int ordrenummer;

የግል int [,] ትዕዛዝ = አዲስ int [100, 100]; የግል int sendingOrder = አዲስ int [100]; የግል ሕብረቁምፊ prodType;

SerialPort sp = አዲስ SerialPort ();

የግል BackgroundWorker myWorker = አዲስ BackgroundWorker ();

የህዝብ ቅጽ 1 ()

{InitializeComponent (); // የእሷ ብልጭልጭ vores String (connectionString) defineret። connectionString = "server = 192.168.1.100; userid = root; pwd = langeland; database = arduino;"; /* የእሷ ብልጭ ድርግም የሚል ተለዋዋጭ “myWorker” በሎጅ ፓå hvor langt የተለያዩ bestillinger er i deres proces ላይ ተቀመጠ። */ myWorker. DoWork += አዲስ DoWorkEventHandler (myWorker_DoWork); myWorker. WorkerReportsProgress = እውነት; myWorker. WorkerSupportsCancellation = እውነት; // የእሷ ብልጭልጭ አሥራ ሁለት baggrundsgennemløbet eksikveret። myWorker. RunWorkerAsync (); // የእሷ bliver der defineret hvilket ቅርጸት datoen kører i. የእሷ er formatet bestemt efter MySQL databasen. dateTimePicker1. CustomFormat = "yyyy-MM-dd"; dateTimePicker1. ቅርጸት = DateTimePickerFormat. Custom; }

የግል ባዶነት Afgiv_Ordre_Click (የነገር ላኪ ፣ EventArgs e)

{ /* የእሷ er der oprettet nogle variabler ፣ der kun bliver brugt i dette ባዶነት። ደ ትሬርቴር ኢ ኢንቲጀርስ ደር ደር ተካል hvilket produkt der er tale tale om. ደ næste tre er oprettet ለ በ 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; /* እኔ loops bliver køen oprettet ለ disse, ordrene bliver productret i den rækkefølge, de er bestilt i. */ ለ (int prod1A = 0; prod1A <prodA; prod1A ++) {ትዕዛዝ [ordrenummer ፣ prod1A] = produktA; }

ለ (int prod1B = (prodA) ፤ prod1B <(prodB+prodA) ፤ prod1B ++) {ትዕዛዝ [ordrenummer ፣ prod1B] = produktB; }

ለ (int prod1C = (prodA + prodB) ፤ prod1C 99)

{ordrenummer = 0; } // የእሷ overføres de bestilte produkter til databasen. DBQuery ("አስገባ" bestilteprod` ('Produkt A`,' Produkt B`, 'Produkt C`) VALUES (" + prodA +", " + prodB +", " + prodC +") "); // የእሷ overføres en oversigt በላይ hvilke produkter ደር mangler ላይ blive productrert, til databasen. DBQuery ("አዘምን 'ጠቅላላ' SET 'manglende produkter` = (' manglende produkter` +(" +(prodA +prodB +prodC) +")) የት 1"); }

// እኔ ባዶ እድርን አጠፋለሁ።

የግል ባዶነት myWorker_DoWork (የነገር ላኪ ፣ EventArgs e) {ሳለ (እውነት) { /* Så længe at summen af den afsendte ordre ikke er lig med 0, vil dette while loop køre. */ ሁኔታ (); ሳለ (sendOrder. Sum ()! = 0) { /* እኔ loop fungerer det således, በ så længe den oprettede Integer (i) er mindre end længden på den afgivet ordre, vil det eksikvere. ተለዋዋጭ (i) kigger på den pågældende række i arrayet, der på nuværende tidspunkt arbejdes i. ዴን ኪግገር i kolonnen ፣ ser hvilket tal der står i kolonnen። Tallet bliver eksikveret ፣ og 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. Inden ከሆነ sætningerne bliver kommunikationen til Arduinoen åbnet, ዐግ ዴን afgivet ordre bliver sendt til Arduinoen. */ ለ (int i = 0; i <sendingOrder. Length; i ++) {ሁኔታ (); sp. BaudRate = 9600; sp. PortName = "COM4"; sp. Open (); sp. ጻፍ (ኦርደር መላክ . ToString ()); // Programmet der er i en af disse ካሉ መግለጫዎች ፣ vil blive eksikveret ፣ afhængig af hvilket tal fra et til tre der er i variablen (i)። ከሆነ (sendOrder == 1) {prodType = "Produkt A"; } ሌላ ከሆነ (sendOrder == 2) {prodType = "Produkt B"; } ሌላ ከሆነ (sendOrder == 3) {prodType = "Produkt C"; }

sendOrder = 0;

// Når hele den eksikverede række i arrayet samlet ሰጪ 0 ፣ ብሊቨር ደ udførte produkter uploadet i databasen ፣ og komunikationen til Arduinoen ፣ bliver lukket። ከሆነ (sendOrder. Sum () == 0) {DBQuery («INSERT INTO 'udforte` (' Produkt type`) VALUES ('" + prodType + "'))");

DBQuery ("አዘምን 'ጠቅላላ' SET 'productionret produkter` = (' productret produkter` + 1), 'manglende produkter` = (' 'manglende produkter` - 1)");

sp. Close ();

ሰበር; } /* የእሷ afventes der በ Arduinoen er færdig med ordren። Der kvitteres med et “ተከናውኗል”። 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 ("ተከናውኗል");

DBQuery ("አስገባ" udforte` ('Produkt type`) VALUES (' " + prodType +" ') ");

DBQuery ("አዘምን 'ጠቅላላ' SET 'productionret produkter` = (' productret produkter` + 1), 'manglende produkter` = (' 'manglende produkter` - 1)");

sp. Close (); ሁኔታ (); }} // እኔ 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 ++) {sendingOrder [j] = order [i, j];

ትዕዛዝ [i, j] = 0;

}

ሰበር; }}

}

} /* የእሷ er der oprettet et ባዶነት ved navn “ሁኔታ”። Det er lavet for skulle undgå at skrive de samme linjer kode flere steder። በ skrive "ሁኔታ" ውስጥ እኔ stedet kan man nøjes med Dette void er også inkluderet i det ባዶ ፣ med det andet kode ፣ der kører i baggrunden። * / የግል ባዶነት ሁኔታ () { /* የእሷ åbner man MySQL forbindelsen ፣ vælger alt fra den tabel der hedder total ፣ og eksikverer den forespørgsel። */ MySqlConnection con = አዲስ MySqlConnection (connectionString); con. Open (); ሕብረቁምፊ str = "ከጠቅላላው ይምረጡ *"; MySqlCommand com = አዲስ MySqlCommand (str, con); MySqlDataReader አንባቢ = 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.); OrdereProd. Text = "produkter lavet:" + (አንባቢ ["አምራች አምራች"]. // የእሷ ብልጭጭጭጭጭጭጭጭጭጭጭጭጭጭጭጭጭጭጭጭጭጭጭጭጭጭጭጭጭጭጭጭጭጭጭጭጭጭጭጭጭጭጭጭጭጭጭጭጭጭጭጭጭጭጭጭጭጭጭጭጭጭጭጭ l liliver der implementerett hvad procentbaren ፣ skal udfyldes efter. ProcenteDone. Invoke ((MethodInvoker) ውክልና {// Hvis læseren i My SQL forbindelsen læser at “productret produkter ikke er lig med 0, bliver denne if statement eksikveret. Hvis det er lig med 0, bliver der udskrevet" 0%"skrevet til መሰየሚያ። få det ud i procent. float. Parse (አንባቢ ["manglende produkter"]. ToString ()))) * 100). ToString (); // የእሷ ተዘዋዋሪ ውጤት በ på procentbaren ላይ ከትንሽ ጊዜ በላይ መዘግየት። progressBar1. Value = Int32. Parse (ProcenteDone. Text);} ሌላ {ProcenteDone. Text = "0%";}})); // My lukkes MySQL forbindelsen. reader. Close (); con. Close ();} // እኔ ባዶ ቢሊቨር alle produkter, der er productionret på den valgte dato, lagt ud på ሀ pplikationen. የግል ባዶ Vis_Produkter_Click_1 (የነገር ላኪ ፣ EventArgs e) {string date = dateTimePicker1. Value. ToString ()። አስወግድ (10) ፤

ቀን = dateTimePicker1. ጽሑፍ;

string query = "SELECT 'Produkt type`,' Tid` FROM udforte WHERE Tid> = '" + date + "00:00:00' AND Tid <= '" + date + "23:59:59'"; (ግንኙነት = አዲስ MySqlConnection (connectionString)) በመጠቀም (MySqlCommand command = new MySqlCommand (መጠይቅ ፣ ግንኙነት)) በመጠቀም (MySqlDataAdapter አስማሚ = አዲስ MySqlDataAdapter (ትዕዛዝ)) {DataTable prodTable = new DataTable (); አስማሚ። ይሙሉ (prodTable);

dataGridView1. DataSource = prodTable;

}

} // እኔ ባዶ ብሌቨርን MySQL forbindelsen styret ን እጥላለሁ። ዋሻ fungerer således forbindelsen bliver åbnet, eksikverer, og lukkes. የግል ባዶነት DBQuery (ሕብረቁምፊ cmd) {string query = cmd; (ግንኙነት = አዲስ MySqlConnection (connectionString)) በመጠቀም (MySqlCommand command = new MySqlCommand (መጠይቅ ፣ ግንኙነት)) {connection. Open ();

ትእዛዝ ።ExecuteScalar ();

ግንኙነት. ();

} } } }

ደረጃ 6: Materialeliste

1 stk. አርዱዲኖ ኡኖ

1 stk. ማይክሮ ሰርቮ SG90 9 ግ

ደረጃ 7: Fobindelsesdiagram / I / O Lliste

Fobindelsesdiagram / እኔ / ኦ Lliste
Fobindelsesdiagram / እኔ / ኦ Lliste

ሰርቮሞተር ፦

+ = Rød

- = ደርድር

ምልክት = ግሪን

የሚመከር: