فهرست مطالب:
- مرحله 1: RFID Kortlæser
- مرحله 2: سرووموتور (Anlæg)
- مرحله 3: پایگاه داده MySQL - Indhold
- مرحله 4: آردوینو کد
- مرحله 5: Windows Forms Applikation
- مرحله 6: Materialeliste
- مرحله 7: Fobindelsesdiagram / I / O Lliste
تصویری: EAL - Industriel Internet - Fabrikshal: 7 Step
2024 نویسنده: John Day | [email protected]. آخرین اصلاح شده: 2024-01-30 08:57
اگر بخواهید در سیستم اجرا و سیستم خودکار از طریق صنعت 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
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
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
سرووموتور:
+ = Rød
- = مرتب سازی
سیگنال = Grøn
توصیه شده:
EAL - مجموعه داده های صنعت GPS 4.0 GPS در ماشین Rc: 4 مرحله
EAL - Industry 4.0 GPS Data collection on Rc Car: در این دستورالعمل ما در مورد نحوه راه اندازی ماژول GPS در ماشین RC و ارسال اطلاعات جمع آوری شده به صفحه وب برای نظارت آسان صحبت خواهیم کرد. ما قبلاً در مورد نحوه ساخت ماشین RC خود دستورالعمل هایی را ارائه کرده ایم ، که در اینجا یافت می شود. این با استفاده از
EAL- جاسازی شده - قفل ترکیبی: 4 مرحله
EAL- جاسازی شده- قفل ترکیبی: این پروژه یک پروژه مدرسه است ، که من برای انتخاب موضوع 2.1 برنامه نویسی C در EAL انتخاب کرده ام. این اولین بار است که یک پروژه آردوینو و برنامه نویسی C ایجاد کردم. این یک پروژه است که قفل ترکیبی را ارائه می دهد. قفل ترکیبی
EAL - برنامه نویسی جاسازی شده: Candy Mixer 1000: 9 مرحله
EAL - برنامه نویسی جاسازی شده: Candy Mixer 1000: برای پروژه ما در آردوینو تصمیم گرفته ایم که یک میکسر برای آب نبات بسازیم. ایده این است که کاربر می تواند یک دکمه را فشار دهد و سپس موتورها شروع به بیرون ریختن آب نبات در یک کاسه می کنند و هنگامی که برنامه راه خود را اجرا کرد ، متوقف می شود. اولین پیش نویس با
EAL- آب و هوای داخلی: 5 مرحله
EAL- آب و هوای داخلی: برای پروژه مدرسه ما ، وظیفه داشتیم که آردوینو را در یک سیستم خودکار ادغام کنیم. ما انتخاب کردیم که یک سنسور آب و هوای داخلی ایجاد کنیم ، که می تواند دما ، رطوبت و سطح دسی بل را در داخل خانه حس کند. ما چند سوراخ در کابینت ایجاد کردیم ،
EAL - ذخیره سازی هوشمند: 3 مرحله
EAL - SmartStorage: این یک پروژه برای SmartStorage توسط Kasper Borger Tulinius است