Përmbajtje:

EAL - Industriel Internet - Fabrikshal: 7 hapa
EAL - Industriel Internet - Fabrikshal: 7 hapa

Video: EAL - Industriel Internet - Fabrikshal: 7 hapa

Video: EAL - Industriel Internet - Fabrikshal: 7 hapa
Video: Erfindungen aus Fulda - der erste Kleinwagen | Pioniere in Fulda | erlebnis hessen | doku 2024, Korrik
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

Mund të blini një stillet për të hapur dhe zbatuar sistemin tuaj automatik në industrinë 4.0 princippet. Unë i thashë, në der lavet en lille simulation af en fabrikshal. I hallen står der en servomotor, samt et par dioder. Udevendig, sidder der en RFID kortlæser, derdh skulle bruges til and lukke de relevante ind i fabrikshallen. Të dhëna shtesë, të dhëna dhe baza të dhënash në Wampserver.

Hapi 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. Detajoni më tej në opfanger en brik eller et kort, kigger den på enhedens id-nummer, dhe godkender për herë të parë nuk e di det nummer stemmer overens med det der er skrevet ind i koden.

Asnjë kortlæseren dhuroj adgang, si tændes 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å projektet Arduino Uno. Seriel porten, shikoni dhe shikoni në Arduinoens ordrer, por nuk mund të përdorni aplikacionet Windows Forms. Unë den sammenhæng er lyset også fravalgt.

Hapi 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. Për më tepër, ju mund të prodhoni produkte të mëtejshme. Urdhëro, mbajtja e informacionit në prodhimin e mëtejshëm, zbulimi i të dhënave në bazën e të dhënave MySQL. Motoren mund të përdorni një pozicionues të fortë. Hver position symboliserer tre forskellige produkter. Nuk ka produkt për prodhimin e produktit, për të hequr qafe motorin në pozicionin e parë, dhe për të kërkuar një urdhërues. Përgjigja për njeriun, përmes aplikacionit WPF mund të falë asnjë urdhër në motoren. Alt hvad bliver prodhon një gemt bliver në bazën e të dhënave MySQL.

Hapi 3: Baza e të dhënave MySQL - Indhold

Baza e të dhënave MySQL - Indhold
Baza e të dhënave MySQL - Indhold
Baza e të dhënave MySQL - Indhold
Baza e të dhënave MySQL - Indhold
Baza e të dhënave MySQL - Indhold
Baza e të dhënave MySQL - Indhold

Unë kam bazën e të dhënave MySQL në këtë tabelë. Mbajeni një mbajtës të përzgjedhur nga produktet e tij më të mira, dhe të gjithë të këqij. Për më tepër, regjistroni të gjitha prodhimet tuaja. Për më tepër, ju mund të kontrolloni të dhënat tuaja mbi mbajtjen e tepërt të produkteve të prodhuara nga një prodhues, ose një mangler. Ydermere er der et tidspunkt på, hvornår de pågældende produkter er productionret. Përdorni aplikacionet e Windows Forms, të cilat mund të gjenden në të dhënat e Arduinoen, të dhënat e të dhënave. Nuk mund të fshihet me një urdhër, nuk do të dërgohet deri në Arduinoen, do të zbulohet, nuk do të ketë lidhje me të dhënat në bazën e të dhënave. Dërgoni të dhënat tuaja për të dhënat e të dhënave. Në numër të plotë, në String, në një mënyrë të caktuar në VarChar, dhe baza të dhënash. Derdhni dhe vlerësoni TimeStamp, Det er en indstilling, der er tilføjet dhe databasen.

Hapi 4: Arduino Kode

#përfshi

Servo myServo;

int servoPos; char produkt = '0'; void setup () {myServo.attach (3); // Serial kommunikation startes Serial.begin (9600); } void loop () {// Læsning fra serial port produkt = Serial.read (); // Përzgjedhja e ndërrimit të porosisë (produktit) {// Produkti A (1) udføres i denne case case 1 ": myServo.shkruaj (50); vonesa (1000); myServo.shkruaj (0); vonesa (1000); Serial.println ("U krye"); pushim; // Produkti B (2) udføres i denne rasti '2': myServo.write (100); vonesa (1000); myServo.shkruaj (0); vonesa (1000); Serial.println ("U krye"); pushim; // Produkti C (3) udføres i denne rasti '3': myServo.write (150); vonesa (1000); myServo.shkruaj (0); vonesa (1000); Serial.println ("U krye"); pushim; }}

Hapi 5: Aplikimi i Windows Forms

duke përdorur Sistemin; duke përdorur System. Collections. Generic; duke përdorur System. ComponentModel; duke përdorur System. Data; duke përdorur System. Drawing; duke përdorur System. Linq; duke përdorur System. Text; duke përdorur System. Threading. Tasks; duke përdorur System. Windows. Forms; duke përdorur System. Collection; duke përdorur System. IO. Ports; duke përdorur MySql; duke përdorur MySql. Data. MySqlClient;

hapësira e emrave WindowsFormsApp2

{klasa e pjesshme publike Form1: Formulari { /* Unë klasën e fundit e ndryshoj të gjithë ndryshoret publike. Herunder er der oprettet en Class (MySqlConnection) është në dispozicion për t'u përdorur, sepse mund të ndaloni deri në shërbimin e MySQL. Ju mund të përdorni një varg (lidhjeString) për të përcaktuar fshirjen e fjalëkalimit, fjalëkalimin dhe bazën e të dhënave të të dhënave të tjera. Der er oprettet en integer, i et 2d array (orde). Grunden për të hequr qafe produktin më të mirë të produktit dhe produktit, për të prodhuar produkte të tjera. Seriel kommunikationen deri në Arduinoen bliver dhe përcaktojeni atë. 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. */ Lidhja MySqlConnection; lidhja e vargutString;

int ordrenummer privat;

int int [,] rendi = int i ri [100, 100]; int int sendOrder = int e re [100]; varg privat prodType;

SerialPort sp = SerialPort i ri ();

BackgroundWorker private myWorker = BackgroundWorker i ri ();

Formulari publik 1 ()

{InitializeComponent (); // Bliveri i saj vores String (connectionString) defineret. connectionString = "server = 192.168.1.100; userid = root; pwd = langeland; baza e të dhënave = arduino;"; /* Variabli i saj bliver "myWorker" u ul deri sa të regjistrohesha për të parë një larmi të mirë të proceseve të ndryshme. */ myWorker. DoWork += i ri DoWorkEventHandler (myWorker_DoWork); myWorker. WorkerReportsProgress = e vërtetë; myWorker. WorkerSupportsCancellation = true; // Bliver saj selve baggrundsgennemløbet eksikveret. myWorker. RunWorkerAsync (); // Bliver i saj përcakton formatin e të dhënave me të dhënat e i. Ajo është në formatin më të mirë pas bazës së të dhënave MySQL. dateTimePicker1. CustomFormat = "yyyy-MM-dd"; dateTimePicker1. Format = DateTimePickerFormat. Custom; }

zbrazëti private Afgiv_Ordre_Click (dërguesi i objektit, EventArgs e)

{ /* Her er der oprettet nogle variabler, deris kun bliver brugt i dette void. De tre første er Integers der skal definer hvilket produkt der er tale tale. 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; /* Unë zbuloj për sythe duke hequr dorë, duke zgjedhur dhe prodhuar në mënyrë të shkëlqyeshme për të hequr qafe, për shembull, më së miri. */ për (int prod1A = 0; prod1A <prodA; prod1A ++) {rendi [ordrenummer, prod1A] = produktA; }

për (int prod1B = (prodA); prod1B <(prodB+prodA); prod1B ++) {rendi [ordrenummer, prod1B] = produktB; }

për (int prod1C = (prodA + prodB); prod1C 99)

{ordrenummer = 0; } // Përmirësimet e saj më të mira për prodhimin e bazave të të dhënave. DBQuery ("INSERT INTO` bestilteprod` (`Produkt A`,` Produkt B`, `Produkt C`) VLERAT (" + prodA + "," + prodB + "," + prodC + ")"); // Mbingarkesa e saj tejkalon kërkesën për prodhimin e mangler në prodhimin e blive, deri në bazat e të dhënave. DBQuery ("UPDATE` total` SET `manglende produkter` = (` manglende produkter` +(" +(prodA +prodB +prodC) +")) KU 1 "); }

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

private void myWorker_DoWork (dërguesi i objektit, EventArgs e) {ndërsa (e vërtetë) { /* Så længe at summen af den afsendte ordre ikke er lig med 0, vil dette while loop køre. */ Statusi (); ndërsa (sendOrder. Sum ()! = 0) { /* Unë heq një fungues loop për të zgjedhur, në të njëjtën kohë ju mund të zgjidhni një numër të plotë (i) nëse mendoni se do të përfundojë një urdhër, 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 eksplorohet, ose inden në variabla të ndryshme të videove deri në kolonën e mëparshme, nëse dëshironi të blini kolonën deri në 0. Për të krijuar një prodhues bliver të ngarkuar deri në bazën e të dhënave. Nëse dëshironi të blini komu- nikacione deri në Arduinoen åbnet, ju mund të falni një urdhër për të dërguar në Arduinoen. */ për (int i = 0; i <sendOrder. Gatësia; i ++) {Statusi (); sp. BaudRate = 9600; sp. PortName = "COM4"; sp. Hapur (); sp. Shkruani (dërgimi i Porosisë . 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). nëse (dërgimi i Porosisë == 1) {prodType = "Produkt A"; } tjetër nëse (dërgimi i Porosisë == 2) {prodType = "Produkt B"; } tjetër nëse (dërgimi i Porosisë == 3) {prodType = "Produkt C"; }

sendOrder = 0;

// Nuk ka qasje të veçantë në dhënien e të dhënave nga 0, bliver de udførte prodhimin e të dhënave të ngarkuara dhe komunikimin deri në Arduinoen, bliver lukket. if (sentOrder. Sum () == 0) {DBQuery ("INSERT INTO` udforte` (`Type product`) VALUES ('" + prodType + "')");

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

sp. Mbyll ();

pushim; } /* Her afventes der at Arduinoen er færdig med ordren. Der kvitteres med et "bërë". Nuk mund të modifikohet, por nuk mund të shkarkohet në grupin e të dhënave të dhëna nga Grupet e tjera, por në qoftë se ju dëshironi të përdorni produktin që të tejkaloni deri në bazat e të dhënave. */ sp. ReadTo ("U krye");

DBQuery ("INSERT INTO` udforte` (`Type product`) VALUES ('" + prodType + "')");

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

sp. Mbyll (); Statusi (); }} // Unë heq detyrën për lak duke hequr qafe atë që është e mundur për të eksploruar, nuk do të thotë se do të zbulohet (përmbledhur paraprakisht në lidhje me med 0). për (int i = 0; i <order. GetLength (0); i ++) {int test = urdhër [i, 0]; nëse (test! = 0) {për (int j = 0; j <100; j ++) {sendOrder [j] = porosi [i, j];

rendi [i, j] = 0;

}

pushim; }}

}

} /* Her er der oprettet et void ved navn "Status". 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 pavlefshme Statusi () { /* Her åbner burri MySQL ndalon, ju mund të lexoni të gjitha të dhënat, dhe të shikoni paraprakisht. */ MySqlConnection con = MySqlConnection i ri (lidhjeString); kon. Hapur (); string str = "zgjidhni * nga totali"; MySqlCommand com = MySqlCommand i ri (str, con); MySqlDataReader reader = com. ExecuteReader (); // Denne funksional er med for at dele Baggrundskoden på en tråd i CPU'en, og en anden tråd til resten af koden. lexues. Lexo (); MissingProd. Invoke ((MethodInvoker) delegat {// Her bliver de manglende produkter, samt produkter der er lavet, skrevet ud på applikationen. MissingProd. Text = "manglende produkter:" + (lexuesi ["manglende produkter"]. ToString ()); OrdereProd. Text = "prodhuesi lavet:" + (lexuesi ["productret produkter"]. ToString ());}); // Her bliver der implementeret hvad procentbaren, skal udfyldes efter. ProcenteDone. Invoke ((MethodInvoker) delegat {// Hvis læseren në SQL -në time duke e ndaluar atë në "prodhimin e produkteve të tjera të lidhura me meditimin 0, bliver denne if statement eksikveret. Hvis det er lig med 0, bliver der udskrevet" 0%"skrevet til etiketë. nëse (int. Parse (lexuesi ["productret produkter"]. ToString ()) = 0) {// Her tager man of productionret producter og plusser med de manglende produkter. Resultatet af dette ganger man med qindra, për në få det ud i procent. ProcenteDone. Text = Math. Round ((float. Parse (lexuesi ["productret produkter"]. ToString ()) /(float. Parse(reader ["produceret produkter "]. ToString ()) + float. Parse (lexues ["manglende produkter"]. ToString ()))) * 100). ToString (); // Bliver resultatet it tidligere udregning lagt over på procentbaren. progressBar1. Value = Int32. Parse (ProcenteDone. Text);} else {ProcenteDone. Text = "0%";}}); // Lukkes e saj MySQL forbindelsen. lexues. Mbyll (); mbyll. Mbyll ();} // Unë heq dorë nga zbrazja e të gjithë prodhuesve, nga prodhimi på den valgte dato, lagt ud på a pplikationen. zbrazëti private Vis_Produkter_Click_1 (dërguesi i objektit, EventArgs e) {string date = dateTimePicker1. Value. ToString (). Hiq (10);

data = dateTimePicker1. Text;

string query = "SELECT` Type product`, `Tid` FROM udforte WHERE Tid> = '" + date + "00:00:00' DHE Tid <= '" + date + "23:59:59'"; duke përdorur (lidhje = MySqlConnection i ri (connectionString)) duke përdorur (komanda MySqlCommand = MySqlCommand i ri (pyetje, lidhje)) duke përdorur (përshtatës MySqlDataAdapter = MySqlDataAdapter i ri (komandë)) {DataTable prodTable = DataTable e re (); përshtatës. Plotësoni (prodTable);

dataGridView1. DataSource = prodTable;

}

} // I dette void bliver MySQL forbindelsen styret. Den fungerer således at forbindelsen bliver bnet, eksikverer, dhe lukkes. private void DBQuery (vargu cmd) {query string = cmd; duke përdorur (lidhje = MySqlConnection e re (lidhjeString)) duke përdorur (komanda MySqlCommand = MySqlCommand e re (pyetje, lidhje)) {lidhje. Hap ();

command. ExecuteScalar ();

lidhje. Mbyll ();

} } } }

Hapi 6: Materialeliste

1 copë Arduino Uno

1 copë Mikro servo SG90 9g

Hapi 7: Fobindelsesdiagram / I / O Lliste

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

Servomotor:

+ = Rød

- = Rendit

Sinjal = Grøn

Recommended: