جدول المحتويات:

EAL - Industriel Internet - Fabrikshal: 7 خطوات
EAL - Industriel Internet - Fabrikshal: 7 خطوات

فيديو: EAL - Industriel Internet - Fabrikshal: 7 خطوات

فيديو: EAL - Industriel Internet - Fabrikshal: 7 خطوات
فيديو: Erfindungen aus Fulda - der erste Kleinwagen | Pioniere in Fulda | erlebnis hessen | doku 2024, يوليو
Anonim
EAL - الإنترنت الصناعي - Fabrikshal
EAL - الإنترنت الصناعي - Fabrikshal
EAL - الإنترنت الصناعي - Fabrikshal
EAL - الإنترنت الصناعي - Fabrikshal
EAL - الإنترنت الصناعي - Fabrikshal
EAL - الإنترنت الصناعي - Fabrikshal

لا يزال بإمكانك تشغيله حتى يتم تشغيله في نظام التنفيذ والتشغيل الآلي للصناعة 4.0 princippet. I denne opgave، er der lavet en lille simulation af en fabrikshal. لقد قمت بعمل محرك مؤازر ، سامت ومعدل الثنائيات. Udevendig، sidder der en RFID kortlæser، der skulle bruges til at lukke de relatede ind i fabrikshallen. البيانات البديلة ، الأحجار الكريمة في قاعدة البيانات i 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 في سجل Arduino. اكتشف جيدًا في når kortlæseren opfanger en brik eller et kort، kigger den på enhedens id-nummer، og godkender først nummer stemmer overens med det der er skrevet in 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 til Arduinoens ordrer، den vil få fra vores Windows Forms applikation. أنا دن sammenhæng إيه lyset også fravalgt.

الخطوة 2: محرك مؤازر (Anlæg)

مؤازر (Anlæg)
مؤازر (Anlæg)
مؤازر (Anlæg)
مؤازر (Anlæg)
مؤازر (Anlæg)
مؤازر (Anlæg)

أنا في الواقع محرك مؤازر ، وهو أسلوب من Arduino Uno. Den skalsimulere et anlæg ، منتج der kan forskellige produkter. Ordrerbeholdningen، samt antallet af de udførte produkter، bliver gemt i en MySQL database. يمكن استخدام Motoren køre ud i tre forskellige positioner. موقع Hver رمز المنتج tre forskellige produkter. Når produktet er færdigproduceret، kører motoren tilbage is nul position، og afventer nye ordrer. Det er meningen في الرجل ، عبر WPF applikationen kan afgive nye ordrer til motoren. البديل hvad bliver productet bliver gemt i en MySQL database.

الخطوة 3: قاعدة بيانات MySQL - Indhold

قاعدة بيانات MySQL - Indhold
قاعدة بيانات MySQL - Indhold
قاعدة بيانات MySQL - Indhold
قاعدة بيانات MySQL - Indhold
قاعدة بيانات MySQL - Indhold
قاعدة بيانات MySQL - Indhold

قاعدة بيانات MySQL من خلال الجداول ثلاثية الأبعاد. حامل حامل من منتجات ذات جودة عالية أفضل ما يمكن ، أو جرب hvor. En anden tabel vil logge all de udførte produkter. Den tredje، og sidste tabel indenholder en oversigt over hvor mange produkter der er productet، og hvor mange der mangler. Ydermere er et tidspunkt på، hvornår de pågældende produkter er productet. Det er Windows Forms applikationen der vil styre، hvad der skal sendes Arduinoen، samt databasen. Når der bliver afgivet en ordrer، vil den blive sendt til Arduinoen، efterfølgende، vil den ذات الصلة البيانات blive logget i databas. Der bliver أرسل بيانات forskellige إلى قاعدة بيانات. En Integer، en String، som bliver kaldt en VarChar، i databasen. Der er også et TimeStamp، Detre enstilling، der er tilføjet and databasen.

الخطوة 4: Arduino Kode

#يشمل

أجهزة myServo ؛

المؤازرة int؛ char produkt = '0' ؛ إعداد باطل () {myServo.attach (3) ؛ // kommunikation المسلسل يبدأ Serial.begin (9600) ؛ } حلقة فارغة () {// Læsning fra من المنفذ التسلسلي produkt = Serial.read () ؛ // Godkendelse af ingående ordrer switch (produkt) {// Produkt A (1) udføres i denne case '1': myServo.write (50) ؛ تأخير (1000) ؛ myServo.write (0) ، تأخير (1000) ؛ Serial.println ("تم") ؛ استراحة؛ // Produkt B (2) udføres i denne case '2': myServo.write (100) ؛ تأخير (1000) ؛ myServo.write (0) ، تأخير (1000) ؛ Serial.println ("تم") ؛ استراحة؛ // Produkt C (3) udføres i denne case '3': myServo.write (150) ؛ تأخير (1000) ؛ myServo.write (0) ، تأخير (1000) ؛ Serial.println ("تم") ؛ استراحة؛ }}

الخطوة 5: تطبيق نماذج Windows

باستخدام النظام باستخدام 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 part class Form1: Form {/ * I denne class bliver all public variabler oprettet. Herunder er der oprettet en Class (MySqlConnection) der skal tages i brug ، لـ kunne oprette forbindelse til MySQL serveren. Ydermere er der oprettet en String (connectionString) den Bruges til at Definere hvilken bruger der skal på og password ، og hvilken database der tale om. Der er oprettet en number، i et 2d array (orde). Grunden حتى اكتشافه في en ordrer kan bestå af flere produktioner af and produkt، eller flere produkter. Seriel kommunikationen til Arduinoen bliver også تحديد لها. Der bliver også oprettet en Class (BackgroundWorker). Den gør at en bestemt del af programmet bliver eksikveret gentagende gange i baggrunden. لقد ألغيت تيلفيلدي إيه ديت بروجبارت ، دا دير كان بليف أوبريت ناي أوردر ، ميد كورت ميلمروم. * / اتصال MySqlConnection ؛ سلسلة اتصال

النظام الداخلي الخاص ؛

int [،] order = new int [100، 100]؛ int الخاص sendOrder = new int [100] ؛ prodType سلسلة خاصة ؛

SerialPort sp = new SerialPort () ،

Private BackgroundWorker myWorker = new BackgroundWorker () ؛

العامة Form1 ()

{InitializeComponent () ، // لها bliver vores String (connectString) Defineret. ConnectionString = "الخادم = 192.168.1.100 ؛ معرف المستخدم = الجذر ؛ pwd = langeland ؛ قاعدة البيانات = arduino ؛" ؛ / * جلست المتغيرات الخاصة بها "myWorker" الخاصة بها حتى ساعات العمل المختلفة. * / myWorker. DoWork + = جديد DoWorkEventHandler (myWorker_DoWork) ؛ myWorker. WorkerReportsProgress = true ، myWorker. WorkerSupportsCancellation = صحيح ؛ // هديتها الاثني عشر baggrundsgennemløbet eksikveret. myWorker. RunWorkerAsync () ، // هديتها محددة شكل hvilket datoen kører i. أفضل تنسيق لها لقواعد بيانات MySQL. dateTimePicker1. CustomFormat = "yyyy-MM-dd" ؛ dateTimePicker1. Format = DateTimePickerFormat. Custom ؛ }

الفراغ الخاص Afgiv_Ordre_Click (كائن المرسل ، EventArgs e)

{/ * Her er der oprettet nogle variabler، der kun bliver brugt i dette void. عدد الأعداد الصحيحة الخاصة بالتعريف أحدث الخيارات المتاحة في kunne skrive det antal man ønsker، ind i applikationen. يمكنك الاختيار من بين الخيارات المتاحة في مكان الإقامة هذا في منطقة الانتظار. * / int produktA = 1 ؛ int produktB = 2 ؛ int produktC = 3 ؛ int prodA = int. Parse (prodAOrder. Text) ؛ int. prodB = int. Parse (prodBOrder. Text) ؛ int. Parse = int. Parse (prodCOrder. Text) ؛ int orderLength = prodA + prodB + prodC ؛ / * أنا أبحث عن حلقات bliver køen oprettet ، و således في أودررين bliver productet 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 ؛ } // منتجاتها الضخمة حتى قاعدة البيانات. DBQuery ("INSERT INTO" bestilteprod "(` Produkt A`، `Produkt B`،` Produkt C`) VALUES ("+ prodA +"، "+ prodB +"، "+ prodC +") ") ؛ // لها زيادة كبيرة في الإنتاج الهائل في منتج blive ، حتى قاعدة البيانات. DBQuery ("UPDATE" total` SET `manglende produkter` = (` manglende produkter` + ("+ (prodA + prodB + prodC) +")) حيث 1 ") ؛ }

// لقد ألغيت void er alt det kode der skal køre i baggrunden، lagt ind.

خاص باطل myWorker_DoWork (كائن المرسل ، EventArgs e) {while (true) {/ * Så længe at Summen af den afsendte ordre ikke er lig med 0، vil dette while loop køre. */ حالة()؛ while (sendOrder. Sum ()! = 0) {/ * لقد قمت بالتسجيل في loop fungerer det således ، في 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 arrayet، der på nuværende tidspunkt arbejdes i. Den kigger i 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 حتى 0. De eksikverede produkter bliver uploadet til databasen. Inden if sætningerne bliver kommunikationen til Arduinoen åbnet، og den afgivet ordre bliver أرسل إلى Arduinoen. * / لـ (int i = 0؛ i <sendOrder. Length؛ i ++) {Status ()؛ sp. BaudRate = 9600 ؛ sp. PortName = "COM4" ؛ sp. Open () ؛ sp. Write (sendOrder . ToString ()) ؛ // Programmet der er i en af disse if statement، vil blive eksikveret، afhængig af hvilket tal fra et tre der er i variablen (i). إذا (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 til Arduinoen، bliver lukket. إذا (sendOrder. Sum () == 0) {DBQuery ("INSERT INTO` udforte` (`Produkt type`) VALUES ('" + prodType + "')") ؛

DBQuery ("UPDATE" total` SET "productet produkter` = (` productet produkter` + 1) ، `manglende produkter` = (` manglende produkter` - 1) ") ؛

sp. إغلاق () ؛

استراحة؛ } / * Her afventes der at Arduinoen er færdig med ordren. Der kvitteres med et "فعل". Når det er modtaget، bliver de udførte endnu en gang uploadet til databasen til dette، er at man skal være sikker på at det sidste udførte produkt bliver overført to databasen. * / sp. ReadTo ("تم") ؛

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

DBQuery ("UPDATE" total` SET "productet produkter` = (` productet produkter` + 1) ، `manglende produkter` = (` manglende produkter` - 1) ") ؛

sp. إغلاق () ؛ حالة()؛ }} // I dette for loop 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). لـ (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]؛

الطلب [i، j] = 0 ؛

}

استراحة؛ }}

}

} / * Her er der oprettet et ved ved navn "Status". Det er lavet لـ skulle undgå في skrive de samme linjer kode flere steder. أنا يمكن أن يكون الرجل في skrive "الحالة" Dette void er også Inkluderet i det void، med det andet kode، der kører i baggrunden. * / حالة الفراغ الخاص () {/ * رجلها الخارق MySQL forbindelsen، vælger alt fra den tabel der hedder total، og eksikverer den forespørgsel. * / MySqlConnection con = جديد MySqlConnection (connectionString) ؛ con. Open () ؛ سلسلة str = "حدد * من الإجمالي" ؛ MySqlCommand com = new 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. Reader. Read () ؛ MissingProd. Invoke ((MethodInvoker) مفوض {// Her bliver de manglende produkter، samt produkter der er lavet، skrevet ud på applikationen. MissingProd. Text = "manglende produkter:" + (Reader ["manglende produkter ("].) ؛ OrdereProd. Text = "produkter lavet:" + (القارئ ["productet produkter"]. ToString ()) ؛}) ؛ // لها bliver der Implementeret hvad procentbaren و skal udfyldes efter. ProcenteDone. Invoke ((MethodInvoker) مندوب {// Hvis læseren i My SQL forbindelsen læser في "productet produkter ikke er lig med 0، bliver denne if statement eksikveret. Hvis det er lig med 0، bliver der udskrevet" 0٪ "skrevet til التسمية. if (int. Parse (reader ["productet produkter"]. ToString ())! = 0) {// Her tager man de productet produkter og plusser med de manglende produkter. Resultatet af dette ganger man med hundred، for at få det ud i procent. ProcenteDone. Text = Math. Round ((float. float.)؛} else {ProcenteDone. Text = "0٪"؛}})؛ // Her lukkes MySQL forbindelsen. reader. Close ()؛ con. Close ()؛} // لقد ألغيت bliver all produkter، der er productet på den valgte dato، lagt ud på a pplikationen. Vis_Produkter_Click_1 باطل خاص (مرسل الكائن ، EventArgs e) {string date = dateTimePicker1. Value. ToString (). Remove (10)؛

date = dateTimePicker1. Text ؛

استعلام سلسلة = "SELECT` Produkt type`، `Tid` FROM udforte WHERE Tid> = '" + date + "00:00:00' AND Tid <= '" + date + "23:59:59'"؛ باستخدام (connect = new MySqlConnection (connectionString)) باستخدام (MySqlCommand command = new MySqlCommand (استعلام ، اتصال)) باستخدام (MySqlDataAdapter adaptor = new MySqlDataAdapter (command)) {DataTable prodTable = new DataTable () ؛ محول. ملء (prodTable) ؛

dataGridView1. DataSource = prodTable ؛

}

} // لقد ألغيت Bliver void MySQL forbindelsen Styret. Den fungerer således في forbindelsen bliver åbnet، eksikverer، og lukkes. DBQuery الفراغ الخاص (سلسلة cmd) {استعلام سلسلة = cmd ؛ باستخدام (connect = new MySqlConnection (connectionString)) باستخدام (MySqlCommand command = new MySqlCommand (استعلام ، اتصال)) {connection. Open () ؛

command. ExecuteScalar () ،

Connection. Close () ؛

} } } }

الخطوة 6: القائمة المادية

1 قطعة. اردوينو اونو

1 قطعة. مايكرو سيرفو SG90 9g

الخطوة 7: مخطط Fobindelsesdiagram / I / O Lliste

مخطط Fobindelsesdiagram / I / O Lliste
مخطط Fobindelsesdiagram / I / O Lliste

أجهزة السيارات:

+ = Rød

- = فرز

الإشارة = Grøn

موصى به: