Mục lục:

EAL - Internet Industriel - Fabrikshal: 7 bước
EAL - Internet Industriel - Fabrikshal: 7 bước

Video: EAL - Internet Industriel - Fabrikshal: 7 bước

Video: EAL - Internet Industriel - Fabrikshal: 7 bước
Video: Erfindungen aus Fulda - der erste Kleinwagen | Pioniere in Fulda | erlebnis hessen | doku 2024, Tháng mười một
Anonim
EAL - Internet Industriel - Fabrikshal
EAL - Internet Industriel - Fabrikshal
EAL - Internet Industriel - Fabrikshal
EAL - Internet Industriel - Fabrikshal
EAL - Internet Industriel - Fabrikshal
EAL - Internet Industriel - Fabrikshal

Der er blevet fået stillet tới opgave tại hệ thống implementere et automatiseret ud fra công nghiệp 4.0 Princecippet. Tôi denne opgave, er der lavet en lille mô phỏng af en fabrikshal. I hallen står der en servomotor, samt et par dioder. Udevendig, sidder der en RFID kortlæser, der skulle Bruges tới lukke de Relatede ind i fabrikshallen. Dữ liệu thay thế, gemmes i en database i Wampserver.

Bước 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. 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 skrevet ind i koden.

Når kortlæseren giver adgang, så tændes lyset i fabrikken. Lyset slukkes igen, når 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 tới người đặt hàng Arduinoens, den vil få fra vores ứng dụng Windows Forms. Tôi đến sammenhæng er lyset også fravalgt.

Bước 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, nhà sản xuất der kan forskellige produkter. Ordrerbeholdningen, samt antallet af de udførte produkter, Bliver gemt tôi vi cơ sở dữ liệu MySQL. Motoren kan køre ud i tre forskellige định vị. Biểu tượng vị trí của Hver tre forskellige produkter. Når produktet er færdigproduceret, kører motoren Tilbage i nul position, og afventer nye orderrer. Det er meningen at man, via WPF Appkationen kan afgive nye ordrer cho đến motoren. Alt hvad Bliver productionret Bliver gemt tôi vi Cơ sở dữ liệu MySQL.

Bước 3: Cơ sở dữ liệu MySQL - Giữ nguyên

Cơ sở dữ liệu MySQL - Giữ nguyên
Cơ sở dữ liệu MySQL - Giữ nguyên
Cơ sở dữ liệu MySQL - Giữ nguyên
Cơ sở dữ liệu MySQL - Giữ nguyên
Cơ sở dữ liệu MySQL - Giữ nguyên
Cơ sở dữ liệu MySQL - Giữ nguyên

I MySQL databasen vil der være tre tabeller. Người giữ Den 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 productionret, og hvor mange der mangler. Ydermere er der et tidspunkt på, hvornår de pågældende produkter er productionret. Det er Windows Forms appkationen der vil styre, hvad der skal sendes Arduinoen, samt databasen. Når der Bliver afgivet en ordrer, vil den blive sendt tới Arduinoen, efterfølgende, vil den Relatede data Blive logget i databasen. Der Bliver sendt tre forskellige datatyper đến 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.

Bước 4: Arduino Kode

#bao gồm

Servo myServo;

int servoPos; char produkt = '0'; void setup () {myServo.attach (3); // Serial kommunikation bắt đầu Serial.begin (9600); } void loop () {// Cổng nối tiếp Læsning fra produkt = Serial.read (); // Chuyển đổi đơn hàng Godkendelse af ingående (produkt) {// Produkt A (1) udføres i denne case case '1': myServo.write (50); chậm trễ (1000); myServo.write (0); chậm trễ (1000); Serial.println ("Xong"); nghỉ; // Produkt B (2) udføres i denne case case '2': myServo.write (100); chậm trễ (1000); myServo.write (0); chậm trễ (1000); Serial.println ("Xong"); nghỉ; // Produkt C (3) udføres i denne case case '3': myServo.write (150); chậm trễ (1000); myServo.write (0); chậm trễ (1000); Serial.println ("Xong"); nghỉ; }}

Bước 5: Windows Forms Applikation

using System; using System. Collections. Generic; sử dụng System. ComponentModel; sử dụng System. Data; sử dụng System. Drawing; sử dụng System. Linq; sử dụng System. Text; sử dụng System. Threading. Tasks; sử dụng System. Windows. Forms; sử dụng System. Collections; sử dụng System. IO. Ports; sử dụng MySql; sử dụng MySql. Data. MySqlClient;

không gian tên WindowsFormsApp2

{public part class Form1: Form {/ * I denne class bliver alle public variabler oprettet. Herunder er der oprettet en Class (MySqlConnection) der skal tages i brug, for at kunne oprette forbindelse allow MySQL serveren. Ydermere er der oprettet en String (connectionString) den bruges cho đến khi xác định mật khẩu hvilken bruger der skal på og mật khẩu, cơ sở dữ liệu hvilken der er truyện om. Der er oprettet en integer, i et 2d array (orde). Grunden đến khi det er at en ordrer kan bestå af flere produktioner af et produkt, eller flere produkter. Seriel kommunikationen đến khi Arduinoen Bliver også xác định cô ấy. Der Bliver også oprettet en Class (BackgroundWorker). Den gør at en bestemt del af programmet Bliver eksikveret gentagende gange i baggrunden. Tôi dette tilfælde er det brugbart, người đặt hàng da der kan Blive oprettet nye, med korte mellemrum. * / Kết nối MySqlConnection; chuỗi kết nốiString;

private int ordrenummer;

private int [,] order = new int [100, 100]; private int sendOrder = new int [100]; chuỗi riêng prodType;

SerialPort sp = new SerialPort ();

private BackgroundWorker myWorker = new BackgroundWorker ();

public Form1 ()

{InitializeComponent (); // Cô ấy có lỗ hổng String (connectionString) xác định. connectString = "server = 192.168.1.100; userid = root; pwd = langeland; database = arduino;"; / * Biến Bliver của cô ấy "myWorker" ngồi ở logge på hvor langt đa dạng bestillinger er i deres proces. * / myWorker. DoWork + = new DoWorkEventHandler (myWorker_DoWork); myWorker. WorkerReportsProgress = true; myWorker. WorkerSupportsCancellation = true; // Her Bliver selve baggrundsgennemløbet eksikveret. myWorker. RunWorkerAsync (); // Định dạng Bliver der defineret hvilket của cô ấy datoen kører i. Cô ấy đã định dạng riêng cho cơ sở dữ liệu MySQL. dateTimePicker1. CustomFormat = "yyyy-MM-dd"; dateTimePicker1. Format = DateTimePickerFormat. Custom; }

private void Afgiv_Ordre_Click (người gửi đối tượng, EventArgs e)

{/ * Her der oprettet nogle variabler, der kun Bliver brugt i dette void. De tre første er Số nguyên der skal definere hvilket produkt der er truyện om. De næste tre er oprettet for at kunne skrive det antal man ønsker, ind i appkationen. 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; / * Tôi phản đối vòng lặp Bliver køen oprettet, således at ordrene Bliver productionret i den rækkefølge, de er bestilt i. * / 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; } // Cô ấy overføres de bestilte produkter đến khi dữ liệu. 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 productionrert, đến khi databasen. DBQuery ("UPDATE` total` SET `manglende produkter` = (` manglende produkter` + ("+ (prodA + prodB + prodC) +")) WHERE 1 "); }

// Tôi phát hiện ra void er alt det kode der skal køre tôi baggrunden, lagt ind.

private void myWorker_DoWork (object sender, EventArgs e) {while (true) {/ * Så længe at summen af den afsendte ordre ikke er lig med 0, vil dette while loop køre. */ Trạng thái(); while (sendOrder. Sum ()! = 0) {/ * Tôi không thích vòng lặp thay thế, tại 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 mảng, der på nuværende tidspunkt arbejdes i. Den kigger tôi kolonnen, ser hvilket tal der står tôi kolonnen. Tallet Bliver eksikveret, og inden at variablen rykker videre Til næste kolonne, Bliver den pågældende kolonne sat tới 0. De eksikverede produkter Bliver uploadet đến databasen. Inden if sætningerne bliver kommunikationen đến Arduinoen åbnet, og den afgivet ordre bliver sendt tới Arduinoen. * / for (int i = 0; i <sendOrder. Length; i ++) {Status (); sp. BaudRate = 9600; sp. PortName = "COM4"; sp. Open (); sp. Write (sendOrder . ToString ()); // Câu lệnh 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 (sendOrder == 1) {prodType = "Produkt A"; } else if (sendOrder == 2) {prodType = "Produkt B"; } else 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 databasen, og komunikationen cho đến Arduinoen, Bliver lukket. if (sendOrder. Sum () == 0) {DBQuery ("INSERT INTO` udforte` (`Produkt type`) VALUES ('" + prodType + "')");

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

sp. Close ();

nghỉ; } / * Her afventes der at Arduinoen er færdig med ordren. Der kvitteres med et "xong". Når det er modtaget, Bliver de udførte endnu en gang uploadet cho den databasen Grunden cho den dette, er at man skal være sikker på at det sidste udførte produkt Bliver overført đến databasen. * / sp. ReadTo ("Xong");

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

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

sp. Close (); Trạng thái(); }} // Tôi phát hiện ra vòng lặp Bliver der lagt en ny række med ordre tới eksikiding, når den foregående række er eksikveret (summen af foregående række er lig med 0). for (int i = 0; i <order. GetLength (0); i ++) {int test = order [i, 0]; if (test! = 0) {for (int j = 0; j <100; j ++) {sendOrder [j] = order [i, j];

đặt hàng [i, j] = 0;

}

nghỉ; }}

}

} / * "Trạng thái" er der oprettet et void ved navn. 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 () {/ * Her åbner man MySQL forbindelsen, vælger alt fra den tabel der hedder total, og eksikverer den forespørgsel. * / MySqlConnection con = new MySqlConnection (connectionString); con. Open (); string str = "chọn * từ tổng số"; MySqlCommand com = new MySqlCommand (str, con); MySqlDataReader reader = com. ExecuteReader (); // Từ chối funktion er med for khi xóa Baggrundskoden på en tråd i CPU'en, og en anden tråd đến resten af koden. reader. Read (); Đại biểu MissingProd. Invoke ((MethodInvoker) {// Her Bliver de manglende produkter, samt produkter der er lavet, skrevet ud på Appkationen. MissingProd. Text = "manglende produkter:" + (reader ["manglende produkter"]. ToString ()); OrdereProd. Text = "produkter lavet:" + (reader ["productionret produkter"]. ToString ());}); // Her Bliver der implementeret hvad procentbaren, skal udfyldes efter. Ủy viên ProcenteDone. Invoke ((MethodInvoker) {// Hvis læseren i My SQL forbindelsen læser at "productionret produkter ikke er lig med 0, bliver denne if câu lệnh eksikveret. Hvis det er lig med 0, bliver der udskrevet" 0% "skrevet đến label. if (int. Parse (reader ["productionret produkter"]. ToString ())! = 0) {// Her tager man de productionret produkter og plusser med de manglende produkter. Kết quả få det ud i procent. ProcenteDone. Text = Math. Round ((float. Parse (reader ["productionret produkter"]. ToString ()) /(float. Parse(reader["produceret produkter "]. ToString ()) + float.);} else {ProcenteDone. Text = "0%";}}); // Her lukkes MySQL forbindelsen. reader. Close (); con. Close ();} // Tôi không thích void Bliver alle produkter, der er productionret på den valgte dato, lagt ud på a pplikationen. private void Vis_Produkter_Click_1 (object sender, EventArgs e) {string date = dateTimePicker1. Value. ToString (). Remove (10);

date = dateTimePicker1. Text;

string query = "SELECT` Produkt type`, `Tid` FROM udforte WHERE Tid> = '" + date + "00:00:00' AND Tid <= '" + date + "23:59:59'"; using (connection = new MySqlConnection (connectionString)) using (MySqlCommand command = new MySqlCommand (query, connection)) using (MySqlDataAdapter adapter = new MySqlDataAdapter (command)) {DataTable prodTable = new DataTable (); adapter. Fill (prodTable);

dataGridView1. DataSource = prodTable;

}

} // Tôi không thích void Bliver MySQL forbindelsen styret. Den Musherer således tại forbindelsen Bliver åbnet, eksikverer, og lukkes. private void DBQuery (string cmd) {string query = cmd; using (connection = new MySqlConnection (connectionString)) using (MySqlCommand command = new MySqlCommand (query, connection)) {connection. Open ();

command. ExecuteScalar ();

kết nối. Close ();

} } } }

Bước 6: Tư liệu

1 stk. Arduino Uno

1 stk. Micro servo SG90 9g

Bước 7: Fobindelsesdiagram / I / O Lliste

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

Servomotor:

+ = Rød

- = Sắp xếp

Tín hiệu = Grøn

Đề xuất: