Სარჩევი:

EAL - Industriel Internet - Fabrikshal: 7 Steps
EAL - Industriel Internet - Fabrikshal: 7 Steps

ვიდეო: EAL - Industriel Internet - Fabrikshal: 7 Steps

ვიდეო: EAL - Industriel Internet - Fabrikshal: 7 Steps
ვიდეო: Erfindungen aus Fulda - der erste Kleinwagen | Pioniere in Fulda | erlebnis hessen | doku 2024, ივლისი
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

ჩვენ შევარჩიეთ სტილი, რომ დავიწყოთ მისი დანერგვა და ავტომატიზირებული სისტემა ინდუსტრიის 4.0 პრინციპით. მე შევეცადე, გამოვიყენო სიმულაცია ლილის სიმულაციით ქარხანაში. I 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 მონაცემები, ძვირფასი და მონაცემთა ბაზა და Wampserver.

ნაბიჯი 1: RFID Kortlæser

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

ეს არის RFID დაფარვის სისტემა. Hensigten er at ud fra de id numre der er på det kort, og den brik der er med er skrevet ind i vores არდუინო კოდი. დაწვრილებით გვეუბნებიან opfanger en brik eller et kort, kigger den på enhedens id-nummer, და godkender først når det nummer stemmer overens med det der er skrevet ind i koden.

არ შემიძლია მივაწოდო adgang, როგორც ჩანს, lyset i fabrikken. Lyset slukkes igen, n enr 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 აპლიკაცია. I den sammenhæng er lyset også fravalgt.

ნაბიჯი 2: სერვომოტორული (Anlæg)

სერვომოტორული (Anlæg)
სერვომოტორული (Anlæg)
სერვომოტორული (Anlæg)
სერვომოტორული (Anlæg)
სერვომოტორული (Anlæg)
სერვომოტორული (Anlæg)

I hallen er der en servomotor, der er styret af en Arduino Uno. ჩვენ ვსაუბრობთ სხვა პროდუქტებზე, ასევე წარმოებული პროდუქტების წარმოებაში. ორდერბეჰოლდინგი, შემდგომი პროდუქტების წარმოება, დამუშავება და MySQL მონაცემთა ბაზა. Motoren შეიძლება გამოყენებულ იქნას როგორც forskellige positioner. Hver თანამდებობის სიმბოლო არ არის პროდუქცია წარმოებული, არის ძრავის მოშორება და მისი უწყვეტი პოზიცია, ასევე შემდგომი მითითებები. ეს შეიძლება დაემართოს ადამიანს, WPF აპლიკაციის საშუალებით, რომლითაც არ შემიძლია ხელი შევუწყო. Alt hvad bliver აწარმოებს bliver gemt i MySQL მონაცემთა ბაზაში.

ნაბიჯი 3: MySQL მონაცემთა ბაზა - Indhold

MySQL მონაცემთა ბაზა - Indhold
MySQL მონაცემთა ბაზა - Indhold
MySQL მონაცემთა ბაზა - Indhold
MySQL მონაცემთა ბაზა - Indhold
MySQL მონაცემთა ბაზა - Indhold
MySQL მონაცემთა ბაზა - Indhold

მე MySQL მონაცემთა ბაზები შევიტანე თქვენს ვებ გვერდზე. Den første holder øje med hvilke produkter der er bestilt, og hvor mange. თქვენ ასევე შეგიძლიათ დაარეგისტრიროთ ყველა პროდუქტი, რომელიც გამოიყენება. რა თქმა უნდა, და ქვემოთ ჩამოთვლილთა მფლობელი მეტისმეტად გადააჭარბა ამ პროდუქტების წარმოებას, ასევე მმართველს. Ydermere er der et tidspunkt på, hvornår de pågældende produkter er productionret. Windows Forms– ის გამოყენებისათვის საჭირო პროგრამული უზრუნველყოფა, რომელიც შეიცავს Arduinoen– ს, ასევე მონაცემთა ბაზებს. არ არის ნათქვამი, რომ გაგზავნილია, არ გამოქვეყნებულია Arduinoen– ში, შემდგომში, თუ არ არის შესაბამისი მონაცემები blive logget და მონაცემთა ბაზები. გაგზავნეთ ინფორმაცია მონაცემთა ბაზის მონაცემთა ბაზის შესახებ. მთელი რიცხვი, სიმებიანი, რამდენიმე ბარათი ვარჩარში და მონაცემთა ბაზაში. გამოქვეყნებულია და TimeStamp, Det er en indstilling, der er tilføjet i databasen.

ნაბიჯი 4: არდუინო კოდი

#ჩართეთ

Servo myServo;

int servoPos; char produkt = '0'; void setup () {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 ("შესრულებულია"); შესვენება; // პროდუქცია B (2) უდეფექტო საქმეში "2": myServo.write (100); დაგვიანება (1000); myServo.write (0); დაგვიანება (1000); Serial.println ("შესრულებულია"); შესვენება; // პროდუქტი C (3) უდეფექტო საქმეში "3": myServo.write (150); დაგვიანება (1000); myServo.write (0); დაგვიანება (1000); Serial.println ("შესრულებულია"); შესვენება; }}

ნაბიჯი 5: Windows Forms Applikation

სისტემის გამოყენება; System. Collections. Generic; System. ComponentModel- ის გამოყენებით; System. Data- ს გამოყენებით; System. Drawing– ის გამოყენებით; System. Linq- ის გამოყენებით; System. Text- ის გამოყენებით; System. Threading. Tasks- ის გამოყენებით; System. Windows. Forms- ის გამოყენებით; System. Collection- ების გამოყენებით; System. IO. Ports- ის გამოყენებით; MySql გამოყენებით; MySql. Data. MySqlClient– ის გამოყენებით;

სახელების სივრცე WindowsFormsApp2

{საჯარო ნაწილობრივი კლასი ფორმა 1: ფორმა { /* მე ვხსნი კლასს ყველა საჯარო ცვლადზე. იგი გადის კლასში (MySqlConnection), სადაც მე ვიყენებ, რადგან შემიძლია ჩემი MySQL სერვისის აკრძალვა. Ydermere er der oprettet en String (connectionString) დაარღვიე და გაარკვიე, რომ გაარკვიო, რომ დაგავიწყდეს პაროლი, და შეაგროვო მონაცემთა ბაზა ზღაპარში. ამოიღეთ მთელი რიცხვი, i და 2d მასივი (ორდერი). ჯგუფმა შეიძლება შეაფასოს იგი საუკეთესო პროდუქტებით და პროდუქტებით, სხვა პროდუქტების წარმოებით. Seriel kommunikationen til Arduinoen bliver også განსაზღვრეთ იგი. გაეცანით და გაეცანით კლასს (BackgroundWorker). ეს იყო საუკეთესო პროგრამული უზრუნველყოფის შემდგომი ექსპრესიული განზრახვისა და გაფართოების მიზნით. I dette tilfælde er det brugbart, da der kan blive oprettet nye ordrer, med korte mellemrum. */ MySqlConnection კავშირი; სიმებიანი კავშირი სიმებიანი;

პირადი int ordrenummer;

კერძო int [,] შეკვეთა = ახალი int [100, 100]; პირადი int sentOrder = new int [100]; პირადი სიმებიანი prodType;

SerialPort sp = ახალი SerialPort ();

პირადი BackgroundWorker myWorker = ახალი BackgroundWorker ();

საჯარო ფორმა 1 ()

{ინიციალიზაცია კომპონენტი (); // Her bliver vores String (connectionString) defineret. connectionString = "სერვერი = 192.168.1.100; userid = root; pwd = langeland; მონაცემთა ბაზა = arduino;"; /* მისი დამამცირებელი ცვლადი "myWorker" იჯდა შენახვისას, რათა გამოირჩეოდეს სხვადასხვა სახის საუკეთესო პროცესებით. */ myWorker. DoWork += ახალი DoWorkEventHandler (myWorker_DoWork); myWorker. WorkerReportsProgress = ჭეშმარიტი; myWorker. WorkerSupportsCancellation = true; // მისი ბლივერი selve baggrundsgennemløbet eksikveret. myWorker. RunWorkerAsync (); // Her bliver der definret hvilket format datoen kører i. მისი ფორმატი საუკეთესოა MySQL მონაცემთა ბაზის შემდგომ. dateTimePicker1. CustomFormat = "yyyy-MM-dd"; dateTimePicker1. Format = DateTimePickerFormat. Custom; }

პირადი სიცარიელე Afgiv_Ordre_Click (ობიექტის გამგზავნი, EventArgs e)

{ /* მისი შეცდომაა nogle variabler, der kun bliver brugt i detete void. De tre første er Integers der skal define hvilket product 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; /* მე ვშორდები მარყუჟებს, ვიმსჯელებ მათზე, ვამზადებ და ვამზადებ პროდუქტებს და ვაკეთებ მათ, რაც საუკეთესოა. */ 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; } // მისი საუკეთესო მონაცემთა ბაზების წარმოება. DBQuery ("INSERT INTO` bestilteprod "(` Produkt A`, `Produkt B`,` Produkt C`) VALUES (" + prodA +", " + prodB +", " + prodC +") "); // მისი გადაჭარბებული მოხმარება ზედმეტად გაიზარდა მწარმოებელთა ჯგუფში, ბაზის მონაცემთა ბაზამდე. 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.

კერძო ბათილად myWorker_DoWork (ობიექტის გამგზავნი, EventArgs e) {ხოლო (ჭეშმარიტი) { /* შეაფასეთ აქცია summen af den afsendte ordre ikke er lig med 0, vil dette while loop køre. */ სტატუსი (); while (sendOrder. Sum ()! = 0) { /* მე ვაგროვებ მარყუჟის შემქმნელებს, რათა შევარჩიო, მაშინ როდესაც მთელი რიცხვი არის ოპტიმალური (მე) გავითვალისწინებ მას შემდეგ, რაც შემიძლია გამოვიყენო. 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 ექსპერიმენტი, და inden და ცვლადი ვიდეოები til nost kolonne, bliver den pågældende kolonne იჯდა 0. 0. ექსექსირებული წარმოების შემქმნელი ატვირთავს მონაცემთა ბაზებს. დაარღვიე თუ არა დაარღვიე კომუნიკაცია Arduinoen åbnet– ში, და შეაფასე ის, რომ გაგზავნო Arduinoen– ში. */ for (int i = 0; i <sentOrder. Length; i ++) {სტატუსი (); sp. BaudRate = 9600; sp. PortName = "COM4"; sp. ღია (); sp. Write (sendOrder . ToString ()); // Programmet der er i en af disse if განცხადებები, vil blive eksikveret, afhængig af hvilket tal fra et til tre der er i variablen (i). if (გაგზავნის შეკვეთა == 1) {prodType = "პროდუქტი A"; } else if (გაგზავნის შეკვეთა == 2) {prodType = "პროდუქტი B"; } else if (გაგზავნის შეკვეთა == 3) {prodType = "პროდუქტი C"; }

გაგზავნის შეკვეთა = 0;

// არ გამოვიყენო რამოდენიმე შემთხვევა, როდესაც მე მივიღებ მისაბმელს 0, გავააქტიურო და ჩავტვირთო მონაცემთა ბაზები, ასევე კომუნიკაცია არდუინოენთან, ბლივერ ლუკკეტთან. if (sendOrder. Sum () == 0) {DBQuery ("INSERT INTO` udforte` ("Produkt type") VALUES ('" + prodType +"') ");

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

sp. დახურვა ();

შესვენება; } /* Her afventes der at Arduinoen er færdig med ordren. Der kvitteres med et "შესრულებულია". არ არის შესაძლებელი მოდულის შეცვლა, რომელიც შეიძლება შეიცვალოს მონაცემთა ბაზაში Grunden til dette, მაგრამ ადამიანებს შეუძლიათ შეაფასონ ეს პროდუქტი და შეცვალონ მონაცემთა ბაზები. */ sp. ReadTo ("შესრულებულია");

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

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

sp. დახურვა (); სტატუსი (); }} // მე გამოვყოფდი მარყუჟის გასამყარებლად და გამოსაყენებლად, რაც შეეხება ექსკლუზიურ გაფართოებას და გამოვიყენებ წინასწარ (შემაჯამებელი მითითებით 0). for (int i = 0; i <order. GetLength (0); i ++) {int test = order [i, 0]; თუ (ტესტი! = 0) {for (int j = 0; j <100; j ++) {გაგზავნის შეკვეთა [j] = შეკვეთა [i, j];

შეკვეთა [i, j] = 0;

}

შესვენება; }}

}

} /* Her er der oprettet და void ved navn "სტატუსი". Det er lavet for at skulle undgå at skrive de samme linjer kode flere steder. მე შევეცადე, რომ გამოვიყენო სტატუსის "სტატუსი" გამოტოვებით და შევიტანე ძალადაკარგულად, შევეცადე გამოვიყენო კოდი, გამოვიყენო და შევინახო. * / private void Status () { /* Her åbner man MySQL forbindelsen, v altlger alt fra den tabel der hedder total, და eksikverer den forespørgsel. */ MySqlConnection con = ახალი MySqlConnection (connectionString); con. ღია (); string str = "აირჩიეთ * სულ"; MySqlCommand com = ახალი MySqlCommand (str, con); MySqlDataReader reader = 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. MissingProd. Text = "manglende produkter:" + (მკითხველი ["manglende produkter"]. ToString () OrdereProd. Text = "produkter lavet:" + (მკითხველი ["productionret produkter"]. ToString ());}); // Her bliver der implementeret hvad procentbaren, skal udfyldes efter. ProcenteDone. Invoke ((MethodInvoker) დელეგატი {// Hvis læseren i My SQL აკრძალულია) 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. ProcenteDone. Text = მათემატიკა. მრგვალი ((float. Parse (მკითხველი ["productionret produkter"]. ToString ()) /(float. Parse(reader ["produceret produkter "]. ToString ()) + float. Parse (მკითხველი ["manglende produkter"]. ToString ()))) * 100). ToString (); // Her bliver resultatet af tidligere udregning lagt over på procentbaren. progressBar1. Value = Int32. Parse (ProcenteDone. Text);} else {ProcenteDone. Text = "0%";}}); // მას უყვარს MySQL. წაკითხვა. დახურვა (); დახურვა ();} // მე გამოვატოვებ ბათილად ყველა პროდუქტს på den valgte dato, lagt ud på a pplikationen. პირადი სიცარიელე Vis_Produkter_Click_1 (ობიექტის გამგზავნი, EventArgs ე) {string date = dateTimePicker1. Value. ToString (). წაშლა (10);

თარიღი = dateTimePicker1. Text;

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 = ახალი DataTable (); ადაპტერი. შევსება (ცხრილი);

dataGridView1. DataSource = prodTable;

}

} // I dette void bliver MySQL forbindelsen styret. დენ ფუნგერერმა შეაძრწუნა ბლივერ ებნეტი, ექსპერიმენტი და ლუკესი. პირადი სიცარიელე DBQuery (string cmd) {string query = cmd; გამოყენებით (კავშირი = ახალი MySqlConnection (connectionString)) გამოყენებით (MySqlCommand ბრძანება = ახალი MySqlCommand (მოთხოვნა, კავშირი)) {კავშირი. გახსნა ();

command. EcecuteScalar ();

კავშირი. დახურვა ();

} } } }

ნაბიჯი 6: მასალები

1 სთ. არდუინო უნო

1 სთ. მიკრო სერვო SG90 9 გ

ნაბიჯი 7: Fobindelsesdiagram / I / O Lliste

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

სერვომოტორული:

+ = რუდი

- = დალაგება

სიგნალი = გრანი

გირჩევთ: