সুচিপত্র:

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 - ইন্ডাস্ট্রিয়েল ইন্টারনেট - Fabrikshal
EAL - ইন্ডাস্ট্রিয়েল ইন্টারনেট - Fabrikshal
ইএএল - ইন্ডাস্ট্রিয়েল ইন্টারনেট - ফ্যাব্রিকশাল
ইএএল - ইন্ডাস্ট্রিয়েল ইন্টারনেট - ফ্যাব্রিকশাল
EAL - ইন্ডাস্ট্রিয়েল ইন্টারনেট - Fabrikshal
EAL - ইন্ডাস্ট্রিয়েল ইন্টারনেট - Fabrikshal

Der er blevet fået stillet til opgave at implementere et automatiseret system ud fra Industri 4.0 princippet। আমি 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। অল্ট ডেটা, জেমস এবং এন ডাটাবেস এবং ওয়্যাম্পসার্ভার।

ধাপ 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 er er skrevet ind i vores Arduino kode। আরো জানুন

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। আমি 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)

আমি hallen er der en servomotor, der er styret af en Arduino Uno। Den skalsimulere et anlæg, der kan উত্পাদক forskellige produkter। Ordrerbeholdningen, samt antallet af de udførte produkter, bliver gemt i en MySQL database। মোটোরেন কান কারে উদ ট্রে ফরস্কেলিজ পজিশনার। Hver অবস্থান প্রতীক ট্রে forskellige উত্পাদক। N produr produktet er færdigproduceret, k motrer motoren tilbage i nul position, og afventer nye ordrer। WPF applikationen kan afgive nye ordrer til motoren- এর মাধ্যমে মানুষের উপর বিস্তারিত জানুন। Alt hvad bliver উত্পাদন করে bliver gemt i en MySQL ডাটাবেস।

ধাপ 3: মাইএসকিউএল ডাটাবেস - ইন্ডহোল্ড

মাইএসকিউএল ডাটাবেস - ইন্ডহোল্ড
মাইএসকিউএল ডাটাবেস - ইন্ডহোল্ড
মাইএসকিউএল ডাটাবেস - ইন্ডহোল্ড
মাইএসকিউএল ডাটাবেস - ইন্ডহোল্ড
মাইএসকিউএল ডাটাবেস - ইন্ডহোল্ড
মাইএসকিউএল ডাটাবেস - ইন্ডহোল্ড

আমি মাইএসকিউএল ডেটাবেসেন ভিল ডার ভেরি ট্রে ট্যাবেলার। Den første holder ø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 produret। উইন্ডোজের ফর্মগুলি ডার ভিল স্টাইর, এইচভাদ ডার স্কাল সেন্ডেস আরডুইনোয়েন, স্যাম্ট ডাটাবেসেন। Når der 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 er også et TimeStamp, Det er en indstilling, der er tilføjet i databasen।

ধাপ 4: আরডুইনো কোড

#অন্তর্ভুক্ত

Servo myServo;

int servoPos; char produkt = '0'; অকার্যকর সেটআপ () {myServo.attach (3); // সিরিয়াল কমিউনিকেশন শুরু হয় 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); বিলম্ব (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 ("সম্পন্ন"); বিরতি; // প্রোডাক্ট সি (3) udføres i denne case case '3': myServo.write (150); বিলম্ব (1000); myServo.write (0); বিলম্ব (1000); Serial.println ("সম্পন্ন"); বিরতি; }}

ধাপ 5: উইন্ডোজ ফর্ম অ্যাপলিকেশন

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. 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, at at kunne oprette নিষিদ্ধ করা til MySQL servren। 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। Der er oprettet en পূর্ণসংখ্যা, i et 2d array (orde)। Grunden til det er at en ordrer kan bestå af flere produktioner af et produkt, eller flere produkter। Seriel kommunikationen til Arduinoen bliver også defineret her। Der bliver også oprettet en Class (BackgroundWorker)। Den gør at 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। */ মাইএসকিউএল সংযোগ সংযোগ; স্ট্রিং সংযোগ স্ট্রিং;

ব্যক্তিগত int ordrenummer;

ব্যক্তিগত int [,] অর্ডার = নতুন int [100, 100]; ব্যক্তিগত int sendOrder = নতুন int [100]; ব্যক্তিগত স্ট্রিং prodType;

SerialPort sp = নতুন SerialPort ();

ব্যক্তিগত ব্যাকগ্রাউন্ড ওয়ার্কার myWorker = নতুন ব্যাকগ্রাউন্ড ওয়ার্কার ();

পাবলিক ফর্ম 1 ()

{InitializeComponent (); // তার bliver vores স্ট্রিং (connectionString) defineret। connectionString = "server = 192.168.1.100; userid = root; pwd = langeland; database = arduino;"; /* তার ব্লিভার ভেরিয়েবল "myWorker" লগ på hvor langt diverse bestillinger er i deres proces এ বসে আছে। */ myWorker. DoWork += নতুন DoWorkEventHandler (myWorker_DoWork); myWorker. WorkerReportsProgress = সত্য; myWorker. WorkerSupportsCancellation = সত্য; // তার bliver selve baggrundsgennemløbet eksikveret। myWorker. RunWorkerAsync (); // Her bliver der defineret hvilket format datoen kører i। মাইএসকিউএল ডেটাবেসনের পরে তার ফর্ম্যাটটি তৈরি করা হয়েছে। dateTimePicker1. CustomFormat = "yyyy-MM-dd"; dateTimePicker1. Format = DateTimePickerFormat. Custom; }

ব্যক্তিগত অকার্যকর Afgiv_Ordre_Click (বস্তু প্রেরক, EventArgs ই)

{ /* 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 kernsker, 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, således at ordrene bliver produretret i den rækkefølge, de er bestilt i। */ জন্য (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; } // Her overføres de bestilte produkter til databasen। DBQuery ("INSERT INTO` bestilteprod` (`Produkt A`,` Produkt B`, `Produkt C`) VALUES (" + prodA + "," + prodB + "," + prodC + ")"); // তার overføres en oversigt over hvilke produkter der mangler at blive productrert, til databasen। 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) {while (true) { /* Så længe at summen af den afsendte ordre ikke er lig med 0, vil dette while loop køre। */ অবস্থা (); while (SendOrder. Sum ()! = 0) { /* আমি লুপ ফাঙ্গার ডিট সেলেডেসের জন্য, 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 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, og den afgivet ordre bliver sendt til Arduinoen। */ জন্য (int i = 0; i <SendOrder. Length; i ++) {Status (); 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)। যদি (SendOrder == 1) {prodType = "Produkt A"; } অন্যথায় যদি (SendOrder == 2) {prodType = "Produkt B"; } অন্যথায় যদি (SendOrder == 3) {prodType = "Produkt C"; }

সেন্ডিং অর্ডার = 0;

// N her hele den eksikverede række i arrayet samlet giver 0, bliver de udførte produkter uploadet i databasen, og komunikationen til Arduinoen, bliver lukket। যদি (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. Close ();

বিরতি; } /* Arduinoen er færdig med ordren এ তার afventes der। Der kvitteres med et "সম্পন্ন"। N detr 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 ("INSERT INTO` udforte` (`Produkt type`) VALUES ('" + prodType + "')");

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

sp. Close (); স্থিতি (); }} // 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)। জন্য (int i = 0; i <order. GetLength (0); i ++) {int test = order [i, 0]; যদি (পরীক্ষা! = 0) {জন্য (int j = 0; j <100; j ++) {sendOrder [j] = order [i, j];

অর্ডার [i, j] = 0;

}

বিরতি; }}

}

} /* Her er der oprettet et void ved navn "Status"। স্ক্রাইভ ডি সাম্মে লিনজার কোড ফ্লেয়ার স্টেডার 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। * / ব্যক্তিগত অকার্যকর অবস্থা () { /* তার manbner মানুষ মাইএসকিউএল নিষিদ্ধ, vælger alt fra den tabel der hedder total, og eksikverer den forespørgsel। */ MySqlConnection con = নতুন MySqlConnection (connectionString); con. Open (); string 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. Invoke ((MethodInvoker)) প্রতিনিধি {// Her bliver de manglende produkter, samt produkter der er lavet, skrevet ud på applikationen। OrdereProd. Text = "produkter lavet:" + (পাঠক ["produretter produkter"]। // তার ব্লিভার ডার ইমপ্লিমেন্টার এইচভাদ প্রোসেন্টবারেন, স্কাল ইউডফিল্ডেস এফটার। ProcenteDone. Invoke ((MethodInvoker)) প্রতিনিধি লেবেল।যদি få det ud i procent। float. Pars {;} på den valgte dato, lagt ud på a pplikationen। ব্যক্তিগত অকার্যকর Vis_Produkter_Click_1 (বস্তু প্রেরক, EventArgs e) {string date = dateTimePicker1. Value. ToString ()। সরান (10);

তারিখ = dateTimePicker1. Text;

স্ট্রিং ক্যোয়ারী = "সিলেক্ট 'প্রোডাক্ট টাইপ',` Tid` থেকে udforte WHERE Tid> = '" + date +" 00:00:00' এবং Tid <= '" + date +" 23:59:59' "; ব্যবহার করে (সংযোগ = নতুন MySqlConnection (connectionString)) ব্যবহার করে (MySqlCommand কমান্ড = নতুন MySqlCommand (প্রশ্ন, সংযোগ)) ব্যবহার করে (MySqlDataAdapter অ্যাডাপ্টার = নতুন MySqlDataAdapter (কমান্ড)) {DataTable prodTable = নতুন DataTable (); অ্যাডাপ্টার পূরণ করুন (prodTable);

dataGridView1. DataSource = prodTable;

}

} // আমি অকার্যকর ব্লিভার মাইএসকিউএল নিষিদ্ধ স্টাইরেট। Den fungerer således at forbindelsen bliver åbnet, eksikverer, og lukkes। ব্যক্তিগত অকার্যকর DBQuery (string cmd) {string query = cmd; ব্যবহার করে (সংযোগ = নতুন MySqlConnection (connectionString)) ব্যবহার করে (MySqlCommand কমান্ড = নতুন MySqlCommand (প্রশ্ন, সংযোগ)) {সংযোগ।

কমান্ড। ExecuteScalar ();

সংযোগ বন্ধ করুন ();

} } } }

ধাপ 6: উপাদান তালিকা

1 stk আরডুইনো উনো

1 stk মাইক্রো সার্ভো SG90 9g

ধাপ 7: Fobindelsesdiagram / I / O Lliste

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

Servomotor:

+ = Rød

- = সাজান

সংকেত = Grøn

প্রস্তাবিত: