Cov txheej txheem:
- Kauj ruam 1: RFID Kortlæser
- Kauj Ruam 2: Servomotor (Anlæg)
- Kauj Ruam 3: MySQL Database - Indhold
- Kauj ruam 4: Arduino Kode
- Kauj Ruam 5: Windows Forms Applikation
- Kauj ruam 6: Materialeliste
- Kauj Ruam 7: Fobindelsesdiagram / I / O Lliste
Video: EAL - Kev Lag Luam Hauv Internet - Fabrikshal: 7 Kauj Ruam
2024 Tus sau: John Day | [email protected]. Kawg hloov kho: 2024-01-30 09:29
Der er blevet fået stillet til opgave at implementere et automatiseret system ud fra industryri 4.0 tus thawj tswj hwm. Kuv lees paub opgave, er der lavet en lille simulation af en fabrikshal. Kuv tau txais kev pabcuam los ntawm servomotor, samt thiab par dioder. Udevendig, sidder der en RFID kortlæser, der skulle bruges til at lukke de ពាក់ព័ន្ធe ind in fabrikshallen. Alt cov ntaub ntawv, gemmes hauv en database thiab Wampserver.
Kauj ruam 1: RFID Kortlæser
Tau txais kev suav nrog hauv RFID daim npav. 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.
Tsis txhob muab tus neeg muab rau, tsis yog lyset thiab 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 chaw nres nkoj, der er på projektets Arduino Uno. Seriel porten, skal også bruges til Arduinoens ordrer, den vil få fra vores Windows Forms applikation. Kuv tab tom hais txog qhov tsis txaus ntseeg ntawm qhov tsis txaus ntseeg.
Kauj Ruam 2: Servomotor (Anlæg)
Kuv tab tom ua haujlwm rau servomotor, ua raws li styret ntawm Arduino Uno. Nyob rau hauv cov ntaub ntawv no, der kan producersrer forskellige produkter. Ordrerbeholdningen, samt antallet af de udførte produkter, bliver gemt i en MySQL database. Motoren thiab koj tuaj yeem ua haujlwm ntxiv rau qhov chaw ua haujlwm me me. Hver txoj haujlwm tus cim tus cim tre forskellige produkter. Tsis yog cov khoom lag luam uas tau tsim, tsim cov tshuab ntxhua khaub ncaws hauv qhov chaw tsis muaj haujlwm, thiab tom qab ntawd nws yog tus tsim khoom. Tsis yog tus txiv neej, ntawm WPF applikationen kan afgive nye ordrer til motoren. Alt hvad bliver tsim tawm bliver gemt i en MySQL database.
Kauj Ruam 3: MySQL Database - Indhold
Kuv MySQL cov ntaub ntawv vil der være tre tabeller. Tus tuav lub første øje med hvilke produkter der er bestilt, og hvor mange. Ib qho ntxiv thiab tsis pom qhov twg tag nrho ntawm cov khoom tsim tawm. Tsis tas li ntawd, thiab tsis muaj leej twg nyob hauv qhov kev saib xyuas dhau los ntawm cov neeg ua haujlwm tsim khoom los ntawm kev tsim khoom, thiab cov neeg ua haujlwm tau zoo. Ydermere er der thiab tidspunkt på, hvornår de pågældende cov khoom lag luam tsim khoom. Nrhiav qhov Windows Cov Ntawv thov kev ua haujlwm tsis zoo, hvad der skal xa Arduinoen, cov ntaub ntawv khaws tseg. Når der bliver afgivet en ordrer, vil den blive xa mus rau Arduinoen, efterfølgende, vil den cuam tshuam txog cov ntaub ntawv blive logget thiab databasen. Der bliver xa tre forskellige datatyper mus rau databasen. En Integer, en String, som bliver kaldt en VarChar, thiab cov ntaub ntawv. Der er også thiab TimeStamp, Det er en indilling, der er tilføjet i databasen.
Kauj ruam 4: Arduino Kode
#suav nrog
Servo myServo;
koj servoPos; char cov khoom = '0'; teeb tsa tsis muaj dabtsis () {myServo.attach (3); // Serial kommunikation pib 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); ncua (1000); myServo.write (0); ncua (1000); Serial.println ("Ua tiav"); tawg; // Produkt B (2) udføres i denne case case '2': myServo.write (100); ncua (1000); myServo.write (0); ncua (1000); Serial.println ("Ua tiav"); tawg; // Produkt C (3) udføres i denne case case '3': myServo.write (150); ncua (1000); myServo.write (0); ncua (1000); Serial.println ("Ua tiav"); tawg; }}
Kauj Ruam 5: Windows Forms Applikation
siv System; siv System. Collections. Generic; siv System. ComponentModel; siv System. Data; siv System. Drawing; siv System. Linq; siv System. Text; siv System. Threading. Tasks; siv System. Windows. Forms; siv System. Collections; siv System. IO. Ports; siv MySql; siv MySql. Data. MySqlClient;
namespace WindowsFormsApp2
{public partial class Form1: Form { /* I denne class bliver alle public variabler oprettet. Herunder er der oprettet en Class (MySqlConnection) der skal tages kuv brug, rau ntawm kunne oprette txwv tsis pub mus txog MySQL pabcuam. Ydermere er der oprettet en String (connectionString) den bruges til ntawm tus txhais hvilken bruger der skal på og password, og hvilken database der er tale om. Der er oprettet en integer, i et 2d array (orde). Grunden til det er at en ordrer kan bestå af flere produktioner af produktion, eller flere produkter. Seriel kommunikationen til Arduinoen bliver også txhais nws. Der bliver også oprettet en Class (BackgroundWorker). Nyob rau ntawm qhov zoo tshaj plaws ntawm qhov programmeters bliver eksikveret gentagende gange i baggrunden. Kuv tau txiav txim siab ua qhov tsis zoo ntawm brugbart, tom qab ntawd nws tuaj yeem ua rau cov neeg ua haujlwm tsis txaus ntseeg, nrog rau cov tshuaj mellemrum. */ MySqlConnection kev sib txuas; Txoj hlua txuas
private int ordrenummer;
private int [,] order = tshiab int [100, 100]; private int xaOrder = tshiab int [100]; ntiag tug hlua prodType;
SerialPort sp = tshiab SerialPort ();
ntiag tug BackgroundWorker myWorker = tshiab BackgroundWorker ();
pej xeem daim ntawv 1 ()
{InitializeComponent (); // Nws bliver vores Txoj hlua (connectionString) txhais. connectionString = "server = 192.168.1.100; userid = root; pwd = langeland; database = arduino;"; /* Nws bliver variablen "myWorker" zaum til ntawm logge på hvor langt ntau yam bestillinger er kuv deres proces. */ myWorker. DoWork += tshiab DoWorkEventHandler (myWorker_DoWork); myWorker. WorkerReportsProgress = muaj tseeb; myWorker. WorkerSupportsCancellation = muaj tseeb; // Nws bliver kaum ob baggrundsgennemløbet eksikveret. myWorker. RunWorkerAsync (); // Nws bliver der defineret hvilket hom ntawv datoen kører i. Nws yog hom ntawv zoo tshaj tom qab MySQL databasen. dateTimePicker1. CustomFormat = "yyyy-MM-dd"; dateTimePicker1. Format = DateTimePickerFormat. Custom; }
ntiag tug tsis muaj dab tsi Afgiv_Ordre_Click (tus xa khoom, EventArgs e)
{ /* Nws qhov kev hloov pauv ntawm qhov tsis sib xws, der kun bliver brugt thiab kuv tsis muaj dab tsi. De tre første er Integers der skal definere hvilket produkt der er tale dab neeg om. De næste tre er oprettet rau at kunne skrive det antal man ønsker, ind i applikationen. Tsis yog qhov chaw nyob rau ntawm 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; /* Kuv hais rau loops bliver køen oprettet, således ntawm ordrene bliver tsim tawm hauv den rækkefølge, de er bestilt i. */ rau (int prod1A = 0; prod1A <prodA; prod1A ++) {order [ordrenummer, prod1A] = produktA; }
rau (int prod1B = (prodA); prod1B <(prodB+prodA); prod1B ++) {order [ordrenummer, prod1B] = produktB; }
rau (int prod1C = (prodA + prodB); prod1C 99)
{ordrenummer = 0; } // Nws cov khoom lag luam zoo tshaj plaws rau cov ntaub ntawv. DBQuery ("INSERT INTO 'bestilteprod` (` Produkt A`, `Produkt B`,` Produkt C`) VALUES (" + prodA +", " + prodB +", " + prodC +") "); // Nws overføres en oversigt hla hvilke produkter der mangler ntawm blive productionrert, txog databasen. DBQuery ("UPDATE` total` SET `manglende produkter` = (` manglende produkter` +(" +(prodA +prodB +prodC) +")) DAWB 1 "); }
// Kuv dette tsis muaj dab tsi er alt det kode der skal køre i baggrunden, lagt ind.
ntiag tug tsis muaj dab tsi myWorker_DoWork (tus xa khoom, EventArgs e) {thaum (tseeb) { /* Så længe ntawm summen af den afsendte ordre ikke er lig med 0, vil dette thaum lub voj køre. */ Xwm txheej (); thaum (xaOrder. Sum ()! = 0) { /* Kuv dette rau lub voj fungerer det således, ntawm så længe den oprettede Integer (i) er mindre kawg 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. Nyob rau hauv lub 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 yog sætningerne bliver kommunikationen til Arduinoen åbnet, og den afgivet ordre bliver xa mus rau Arduinoen. */ rau (int i = 0; kuv <xaOrder. Length; i ++) {Status (); sp. BaudRate = 9600; sp. PortName = "COM4"; sp. Open (); sp. Write (xaOrder . ToString ()); // Programmet der er i en afse disse yog cov nqe lus, vil blive eksikveret, afhængig af hvilket tal fra et til tre der er i variablen (i). yog (xaOrder == 1) {prodType = "Produkt A"; } lwm yog (xaOrder == 2) {prodType = "Produkt B"; } lwm yog (xaOrder == 3) {prodType = "Produkt C"; }
xaOrder = 0;
// Når hele den eksikverede række i arrayet samlet giver 0, bliver de udførte produkter uploadet i databasen, og komunikationen til Arduinoen, bliver lukket. yog (xaOrder. Sum () == 0) {DBQuery ("INSERT INTO` udforte` (`Produkt type`) VALUES ('" + prodType + "')");
DBQuery ( UPDATE` total` SET `produret produkter` = (` tsim khoom tsim tawm ` + 1),` tsim khoom tsim khoom `= (` manglende produkter` - 1)”);
sp. Close ();
tawg; } /* Nws qhov kev tshwm sim tom Arduinoen er færdig med ordren. Der kvitteres med thiab "ua tiav". Når det er modtaget, bliver de udførte endnu en laib uploadet til databasen Grunden til dette, er ntawm tus txiv neej skal være sikker på at det sidste udførte produkt bliver overført til databasen. */ sp. ReadTo ("Ua tiav");
DBQuery ("INSERT INTO 'udforte` (` Hom khoom `` VALUES (' " + prodType +" ') ");
DBQuery ( UPDATE` total` SET `produret produkter` = (` tsim khoom tsim tawm ` + 1),` tsim khoom tsim khoom `= (` manglende produkter` - 1)”);
sp. Close (); Xwm txheej (); }} // Kuv txiav txim siab rau lub voj 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). rau (int i = 0; kuv <order. GetLength (0); i ++) {int test = order [i, 0]; yog (xeem! = 0) {rau (int j = 0; j <100; j ++) {xa khoom [j] = xaj [i, j];
order [kuv, j] = 0;
}
tawg; }}
}
} /* Nws er der oprettet thiab void ved navn "Status". Det er lavet rau ntawm skulle undgå thiab skrive de samme linjer kode flere steder. Kuv stedet kan man nøjes med ntawm skrive "Status" Dette void er også inkluderet i det void, med det andet kode, der kører i baggrunden. * / ntiag tug tsis muaj xwm txheej xwm txheej () { /* Nws manbner txiv neej MySQL txwv tsis pub ua haujlwm, v altlger alt fra den. */ MySqlConnection con = tshiab MySqlConnection (connectionString); con. Open (); hlua str = "xaiv * los ntawm tag nrho"; MySqlCommand com = tshiab MySqlCommand (str, con); MySqlDataReader nyeem ntawv = com. ExecuteReader (); // Denne funktion er med rau ntawm dele Baggrundskoden på en tråd i CPU'en, og en anden tråd til resten af koden. nyeem ntawv. Read (); MissingProdInvoke ((MethodInvoker) tus sawv cev {// Nws bliver de manglende produkter, samt produkter der er lavet, skrevet ud på applikationen. MissingProd. Text = "manglende produkter:" + (nyeem ntawv ["manglende produkter"]. ToString ()); OrdereProd. Text = "produkter lavet:" + (nyeem ntawv ["cov khoom tsim tawm"]. ToString ());}); // Nws bliver der implementeret hvad procentbaren, skal udfyldes efter. ProcenteDoneInvoke ((MethodInvoker) tus neeg sawv cev {// Hvis læseren i Kuv SQL txwv tsis pub siv cov l atser ntawm "cov khoom lag luam tsim tawm ikke er lig med 0, bliver denne yog cov lus eksikveret. Hvis det er lig med 0, bliver der udskrevet" 0%"skrevet til daim ntawv. yog (int. Parse (nyeem ntawv ["tsim khoom tsim khoom"]. ToString ())! = 0) {// Nws tager tus txiv neej de tsim cov khoom lag luam og plusser med de manglende produkter. Resultatet af dette ganger man med puas, rau ntawm få det ud i procent. ProcenteDone. Text = Math. Round ((float. Parse (nyeem ntawv ["tsim khoom tsim khoom"]. ToString ()) /(float. Parse(reader["produceret produkter "]. ToString ()) + float. Parse (nyeem ntawv ["manglende produkter"]. ToString ()))) * 100). ToString (); // Nws lub bliver resultatet af tidligere udregning lagt på procentbaren. progressBar1. Value = Int32. Parse (ProcenteDone. Text.);} lwm yam {ProcenteDone. Text = "0%";}}); // Nws lub lukkes MySQL txwv tsis pub leej twg paub. nyeem ntawv. Kev kaw (); con. Close ();} // Kuv tshem tawm qhov tsis muaj bliver txhua qhov khoom lag luam, der er produret på den valgte dato, lagt ud på a npe. ntiag tug void Vis_Produkter_Click_1 (tus xa khoom, EventArgs e) {hlua hnub = dateTimePicker1. Value. ToString (). Tshem tawm (10);
hnub tim = dateTimePicker1. Text;
string query = "SELECT` Produkt type`, `Tid` FROM udforte WHIDE Tid> = '" + date + "00:00:00' THIAB Tid <= '" + date + "23:59:59'"; siv (txuas = MySqlConnection tshiab (txuas txuas)) siv (MySqlCommand hais kom ua = tshiab MySqlCommand (nug, txuas))) siv (MySqlDataAdapter adapter = tshiab MySqlDataAdapter (hais kom ua)) {DataTable prodTable = tshiab DataTable (); adapter. Fill (prodTable);
dataGridView1. DataSource = prodTable;
}
} // Kuv dette void bliver MySQL forbindelsen styret. Cov neeg ua si lom zem ntawm kev txwv tsis pub muaj bliver åbnet, eksikverer, thiab lukkes. ntiag tug tsis muaj dab tsi DBQuery (hlua cmd) {txoj kab lus nug = cmd; siv (txuas = MySqlConnection tshiab (txuas txuas)) siv (MySqlCommand hais kom ua = tshiab MySqlCommand (nug, txuas)) {connection. Open ();
command. ExecuteScalar ();
kaw. Close ();
} } } }
Kauj ruam 6: Materialeliste
1eq qab. Arduino Ib
1eq qab. Micro servo SG90 9g
Kauj Ruam 7: Fobindelsesdiagram / I / O Lliste
Servomotor:
+ = Rød
- = Raws li
Teeb liab = Grøn
Pom zoo:
Txheeb Luam Tsis Muaj Software Tshwj Xeeb lossis Tshuab Luam Ntawv nrog MS Excel (Txheeb Xyuas Nyiaj Txiag Hauv txhab nyiaj): 6 Kauj Ruam
Txheeb Luam Tsis Muaj Software Tshwj Xeeb lossis Tshuab Luam Ntawv Nrog MS Excel (Txheeb Xyuas Nyiaj Txiag Nyiaj Txiag): Nov yog phau ntawv ua haujlwm yooj yim, uas yuav muaj txiaj ntsig zoo rau txhua lub lag luam los sau ntau cov txhab nyiaj hauv txhab nyiaj hauv ob rau lawv Cov Neeg Muag Khoom.yog koj tsis xav tau lub tshuab luam ntawv tshwj xeeb lossis software, tsuas yog koj xav tau yog khoos phis tawj nrog MS Excel thiab lub tshuab luam ntawv ib txwm.Yog, tam sim no koj tuaj yeem
3D Luam Tus Neeg Robotic Aub (Neeg Hlau thiab 3D Luam Ntawv rau Cov Pib): 5 Kauj Ruam
3D Luam Tus Neeg Robotic Aub (Neeg Hlau thiab 3D Luam Ntawv rau Cov Pib): Neeg Hlau thiab 3D Luam Ntawv yog yam tshiab, tab sis peb tuaj yeem siv lawv! Txoj haujlwm no yog txoj haujlwm pib zoo yog tias koj xav tau lub tswv yim ua haujlwm hauv tsev kawm ntawv, lossis tsuas yog nrhiav txoj haujlwm lom zem ua
3D Luam Prosthetic Hand hauv 4 Kauj Ruam!: 4 Kauj Ruam
3D Luam Prosthetic Hand hauv 4 Kauj Ruam!: Txoj haujlwm no yog txhais tes dag uas tau luam tawm los ntawm kuv, Kuv tab tom nrhiav tshawb nrhiav qee qhov kev paub ntxiv txog kev ua lag luam thiab 3D luam ntawv. Txawm hais tias qhov no tsis yog txoj haujlwm zoo tshaj plaws, nws yog txoj hauv kev zoo kom muaj qee qhov tes ntawm kev paub thiab kawm paub tsim
Yuav Siv Tus Menyuam Li Cas Los Luam Cov Duab ntawm Splatoon 2 Siv Lub Tshuab Luam Ntawv SplatPost: 10 Kauj Ruam
Yuav Siv Tus Menyuam Li Cas Los Sau Cov Duab ntawm Splatoon 2 Siv Lub Tshuab Luam Ntawv SplatPost: Hauv Cov Lus Qhia no, Kuv yuav qhia pom yuav siv SplatPost Tshuab Luam Ntawv li cas los ntawm ShinyQuagsire. Yog tsis muaj cov lus qhia meej, ib tus neeg uas tsis muaj kev paub nrog kab hais kom ua yuav muaj teeb meem me ntsis. Kuv lub hom phiaj yog ua kom yooj yim cov kauj ruam nqis mus rau poi
Tsim Cov Luam Luam Circuit Board nrog INKJET Tshuab Luam Ntawv: 8 Cov Kauj Ruam (nrog Duab)
Tsim Cov Luam Circuit Court nrog Nrog INKJET Tshuab Luam Ntawv: Thaum kuv xub pib saib yuav ua li cas txhawm rau cim kuv tus kheej cov ntawv luam tawm Circuit Court, txhua qhov Qhia thiab qhia kuv pom siv lub tshuab luam ntawv laser thiab ironed ntawm cov qauv hauv qee yam zam. Kuv tsis muaj lub tshuab luam ntawv laser tab sis kuv muaj tus lej pheej yig