فهرست مطالب:

EAL - Industriel Internet - Fabrikshal: 7 Step
EAL - Industriel Internet - Fabrikshal: 7 Step

تصویری: EAL - Industriel Internet - Fabrikshal: 7 Step

تصویری: EAL - Industriel Internet - Fabrikshal: 7 Step
تصویری: Erfindungen aus Fulda - der erste Kleinwagen | Pioniere in Fulda | erlebnis hessen | doku 2024, نوامبر
Anonim
EAL - اینترنت اینستریل - فابریکشال
EAL - اینترنت اینستریل - فابریکشال
EAL - اینترنت اینستریل - فابریکشال
EAL - اینترنت اینستریل - فابریکشال
EAL - اینترنت اینستریل - فابریکشال
EAL - اینترنت اینستریل - فابریکشال

اگر بخواهید در سیستم اجرا و سیستم خودکار از طریق صنعت 4.0 princippet استفاده کنید ، می توانید آن را انتخاب کنید. I denne opgave، er 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، der skulle bruges til and lukke de relevante ind i fabrikshallen. Alt data ، gemmes و en database در Wampserver.

مرحله 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، and 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 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 Windows applikation. I den sammenhæng er lyset også fravalgt.

مرحله 2: سرووموتور (Anlæg)

سرووموتور (آنلیگ)
سرووموتور (آنلیگ)
سرووموتور (آنلیگ)
سرووموتور (آنلیگ)
سرووموتور (آنلیگ)
سرووموتور (آنلیگ)

I hallen er der en servomotor، der er styret af en Arduino Uno. Den skalsimulere et anlæg، der kan hilberrer forskellige produkter. Ordrerbeholdningen ، samt antallet af de udførte produkter ، bliver gemt i en database MySQL. Motoren kan køre ud i tre forskellige positioner. Hver position symboliserer tre forskellige produkter. N produktr produktet er færdigproduceret ، kører motoren tilbage i nul position ، و afventer nye ordrer. با استفاده از WPF applikationen می توانید از دستگاه خود استفاده کنید. Alt hvad bliver productret bliver gemt i در پایگاه داده MySQL.

مرحله 3: پایگاه داده MySQL - Indhold

پایگاه داده MySQL - Indhold
پایگاه داده MySQL - Indhold
پایگاه داده MySQL - Indhold
پایگاه داده MySQL - Indhold
پایگاه داده MySQL - Indhold
پایگاه داده MySQL - Indhold

I MySQL databasen vil der være tre tabeller. Den første holder øje med hvilke produkter der er bestilt، og hvor mange. Enen tabel vil logge alle de udførte produkter. از این رو، و در غیر این صورت می توانید بیش از حد در مورد تولید محصولات خود ، و در خارج از منزل ، تحقیق کنید. Ydermere er der et tidspunkt på، hvornår de pågældende produkter er productionret. برای استفاده از Windows Windows Forms ، hvad der skal sendes Arduinoen ، samt databasen استفاده کنید. Når der bliver afgivet en ordrer، vil den blive sendtil to Arduinoen، efterfølgende، vil den relevante data blive logget و پایگاه داده ها. Der bliver sendt tre forskellige dataatyper til databasen. En Integer، en String، som bliver kaldt en VarChar، و پایگاه داده. Der er også et 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 kommunikation startes 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 ("انجام شد") ؛ زنگ تفريح؛ // Produkt C (3) udføres i denne case case '3': myServo.write (150)؛ تاخیر (1000) ؛ myServo.write (0)؛ تاخیر (1000) ؛ Serial.println ("انجام شد") ؛ زنگ تفريح؛ }}

مرحله 5: Windows Forms Applikation

با استفاده از System ؛ با استفاده از 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 ؛ با استفاده از MySql. Data. MySqlClient ؛

فضای نام WindowsFormsApp2

{public partial class Form1: Form { /* I denne class bliver alle public variabler oprettet. Herunder er der oprettet en Class (MySqlConnection) در صورت استفاده از سرویس MySQL می تواند از خدمات خود استفاده کند. Ydermere er der oprettet en String (connectionString) در صورت لزوم استفاده از رمز عبور ، و همچنین پایگاه داده hvilken der er om om. Der er oprettet en integer، i et 2d array (orde). می توانید از محصولات و محصولات خود در خارج از کشور استفاده کنید. Seriel kommunikationen til Arduinoen bliver også defineret او. 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. */ اتصال MySqlConnection ؛ string connectionString؛

int intregrenmer شماره خصوصی؛

خصوصی int [،] order = new int [100، 100]؛ private int sendOrder = int جدید [100]؛ رشته خصوصی prodType؛

SerialPort sp = جدید SerialPort ()؛

خصوصی BackgroundWorker myWorker = new BackgroundWorker ()؛

فرم عمومی 1 ()

{InitializeComponent ()؛ // Bliver vores String (connectionString) defineret. connectionString = "server = 192.168.1.100؛ userid = root؛ pwd = langeland؛ database = arduino؛"؛ /* متغیر متغیر او "myWorker" تا زمان ورود به سیستم متنوع bestillinger er i deres process نشسته است. */ myWorker. DoWork += DoWorkEventHandler جدید (myWorker_DoWork) ؛ myWorker. WorkerReportsProgress = true؛ myWorker. WorkerSupportsCancellation = true؛ // Bliver selve baggrundsgennemløbet eksikveret. myWorker. RunWorkerAsync ()؛ // Her bliver der defineret hvilket format datoen kører i. پس از پایگاه داده MySQL ، بهترین فرمت را دارد. dateTimePicker1. CustomFormat = "yyyy-MM-dd"؛ dateTimePicker1. Format = DateTimePickerFormat. Custom؛ }

خلأ خصوصی Afgiv_Ordre_Click (فرستنده شیء ، EventArgs e)

{ /* Her er oprettet nogle variabler ، der kun bliver brugt i dette void. De tre første er Integers der skal definre hvilket produkt 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؛ /* من برای حلقه ها bliver køen oprettet ، s atledes and ordrene bliver productret i den rækkefølge ، de er bestilt i را بررسی می کنم. */ for (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 +") ") ؛ // او بیش از حد در مورد hvilke produkter der mangler در blive productionrert ، تا پایگاه داده ، بیش از حد تجویز کرد. 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.

private void myWorker_DoWork (فرستنده شیء ، EventArgs e) {در حالی که (درست) { /* Så lgenge at summen af den afsendte ordre ikke er lig med 0، vil dette while loop køre. */ وضعیت () ؛ while (sendOrder. Sum ()! = 0) { /* من برای حلقه fungerer det således را انتخاب می کنم ، در حال حاضر 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 را انتخاب کنید ، و در متغیرهای متغیرهای تصویری تا رسیدن به kolonne ، bliver den pågældende kolonne نشسته تا 0. Inden if sætningerne bliver kommunikationen til Arduinoen åbnet ، og den afgivet ordre bliver sendt til Arduinoen. */ for (int i = 0؛ i <sendOrder. Length؛ i ++) {وضعیت ()؛ sp. BaudRate = 9600 ؛ sp. PortName = "COM4"؛ sp باز ()؛ sp. Write (ارسالOrder . ToString ()) ؛ // Programmet der er i en af disse if statements، 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 (ارسالOrder == 2) {prodType = "Produkt B"؛ } else if (ارسالOrder == 3) {prodType = "Produkt C"؛ }

sendOrder = 0؛

// N her hele den eksikverede række i arrayet samlet giver 0 ، bliver de udførte produkter uploadet و پایگاه داده ها ، و ارتباطات تا Arduinoen ، bliver lukket. if (ارسال

DBQuery ( UPDATE` total` SET `productret produkter` = (` `produret produkter` + 1)،` manglende produkter` = (`` manglende produkter` - 1) ')؛

sp بستن () ؛

زنگ تفريح؛ } /* Her afventes der at Arduinoen er færdig med ordren. Der kvitteres med et "done". در صورت بروزرسانی ، می توانید از طریق گروه های دیگر از پایگاه داده ها استفاده کنید ، در صورت نیاز ، می توانید با استفاده از این محصول ، از پایگاه داده خود استفاده کنید. */ sp. ReadTo ("انجام شد") ؛

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

DBQuery ( UPDATE` total` SET `productret produkter` = (` `produret produkter` + 1)،` manglende produkter` = (`` manglende produkter` - 1) ')؛

sp بستن () ؛ وضعیت () ؛ }} // من برای حلقه bliver der lagt en ny række med ordre til eksikvering ، از پیش تعیین شده 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]؛ if (test! = 0) {for (int j = 0؛ j <100؛ j ++) {sendOrder [j] = سفارش [i، j] ؛

سفارش [i ، j] = 0 ؛

}

زنگ تفريح؛ }}

}

} /* Her er der oprettet and 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 void Status () { /* Her åbner man MySQL forbindelsen، vælger alt fra den tabel der hedder total، and eksikverer den forespørgsel. */ MySqlConnection con = جدید MySqlConnection (connectionString) ؛ con. Open ()؛ string str = "select * from total"؛ 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. MissingProd. Text = "manglende produkter:" + (خواننده ["manglende produkter"]. ToString ())؛ OrdereProd. Text = "produkter lavet:" + (خواننده ["productret produkter"]. ToString ())؛})؛ // Her bliver der implementeret hvad procentbaren، skal udfyldes efter. ProcenteDone. Invoke ((MethodInvoker) نماینده {// Hvis læseren i My SQL forbindelsen læser at "productionret produkter ikke er lig med 0، bliver denne if statement eksikveret. Hvis det er lig med 0، bliver der udskrevet" 0٪ "skrevet til label. if (int. Parse (خواننده ["productret produkter"]. ToString ()) = 0) {// Her tager man de productionret produkter og plusser med de manglende produkter. Resultatet af dette ganger man med sed، for at få det ud i procent. ProcenteDone. Text = Math. Round ((float. Parse (خواننده ["productret produkter"]. ToString ()) /(float. Parse(reader ["produceret produkter "]. ToString ()) + float. Parse (خواننده ["manglende produkter"]. ToString ()))) * 100). ToString ()؛ // Her bliver resultat tidligere udregning lagt over på procentbaren. progressBar1. Value = Int32. Parse (ProcenteDone. Text)؛} else {ProcenteDone. Text = "0٪"؛}})؛ // Her lukkes MySQL forbindelsen. reader. Close ()؛ con. Close ()؛} // I dette void bliver alle produkter، der er productionret på den valgte dato، lagt ud på a pplikationen خلأ خصوصی Vis_Produkter_Click_1 (فرستنده شیء ، EventArgs e) {string date = dateTimePicker1. Value. ToString (). حذف (10) ؛

date = 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 = جدید MySqlCommand (پرس و جو ، اتصال)) استفاده از (آداپتور MySqlDataAdapter = جدید MySqlDataAdapter (فرمان)) {DataTable prodTable = DataTable جدید ()؛ آداپتور. پر (prodTable) ؛

dataGridView1. DataSource = prodTable؛

}

} // من از بین رفتن خلاء MySQL forbindelsen styret استفاده می کنم. Den fungerer s atledes at forbindelsen bliver netbnet، eksikverer، og lukkes. private void DBQuery (string cmd) {string query = cmd؛ استفاده از (اتصال = MySqlConnection جدید (connectionString)) استفاده از (دستور MySqlCommand = جدید MySqlCommand (پرس و جو ، اتصال)) {connection. Open ()؛

command. ExecuteScalar ()؛

اتصال. بستن ()؛

} } } }

مرحله 6: Materialeliste

1 چنگال آردوینو اونو

1 چنگال میکرو سرو SG90 9 گرم

مرحله 7: Fobindelsesdiagram / I / O Lliste

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

سرووموتور:

+ = Rød

- = مرتب سازی

سیگنال = Grøn

توصیه شده: