View Full Version : ارتباط وب سرور با یک برنامه تحت لینوکس
Aghil61
چهارشنبه 27 مرداد 1395, 18:07 عصر
سلام.
من در حال طراحی یک سیستم نمایشگر با استفاده از یک امبدد سیستم هستم. این سیستم باید یک برنامه مونیتورینگ را تحت لینوکس اجرا کند و باید تعدادی پارامتر را از پورت سریال دریافت کند و بر روی LCD نمایش دهد.
همزمان با نمایش بر روی LCD، باید یک وب سرور هم وجود داشته باشد تا اطلاعات دریافت شده توسط پورت سریال را، در مواقع نیاز کاربر، ارائه دهد. یعنی داده ای که توسط نرم افزار تحت لینوکس از طریق درگاه سریال دریافت می شود، در اختیار وب سرور نیز باید قرار داده شود. در ضمن این داده ها باید حتی الامکان در حافظه RAM قرار داشته باشند و از نوشتن آنها در فایل و ذخیره بر روی درایو هارد جلوگیری گردد. زیرا سیستم امبدد مورد استفاده از حافظه های NAND Flash به عنوان هارد درایو استفاده می کند و نوشتن داده به طور متناوب بر روی آن باعث کاهش عمر تراشه حافظه NAND Flash می گردد.
سوال من این است که آیا می توان داده های دریافتی توسط یک نرم افزار را در لینوکس، در اختیار وب سرور قرار داد؟ یا راه بهتری برای پیاده سازی چنین سیستمی وجود دارد؟
با تشکر
negative60
چهارشنبه 27 مرداد 1395, 19:40 عصر
لینوکس روی مموری نصب هست؟ اگر اینطور هست که خود سیستم عامل برای انجام خیلی از کارها روی حافظه read و write انجام میده
سوال من این است که آیا می توان داده های دریافتی توسط یک نرم افزار را در لینوکس، در اختیار وب سرور قرار داد؟ یا راه بهتری برای پیاده سازی چنین سیستمی وجود دارد؟
بله، راه بهتر بستگی به اطلاعات ارائه شده شما داره
aqm176
چهارشنبه 27 مرداد 1395, 19:41 عصر
سلام و خسته نباشید.
کل برنامه شما را بنده با یک برد رزبری انجام داده ام.
که برنامه آن با زبان سی ++ نوشته شده بود.
کار برنامه دریافت اطلاعات از پورت سریال بود با یه امنیت خاصی، که نتیجه اش نمایش روی ال سی دی مرکز بود.
شیوه دیگر این است که که با زبان پایتون بنویسید و بدون نیاز به پورت سریال.
در این روش میبایست نرم افزاری نوشته که 24 ساعت روی صفحه باشد.
نیاز به شل اسکریپت هایی دارد که در هر دقیقه برنامه را از سرور خوانده که برد شما با کابل یا هر چیز دیگر به نت محلی مرکز وصل شده باشد.
شل ها از سرور میخوانند و در بانک محلی بافر میکنند و سپس به نمایش در میآورد.
تمام اخبار و اطلاعیه های دو روز را در خود بافر میکند.
بیشتر از این نیازی نیست.
Aghil61
چهارشنبه 27 مرداد 1395, 21:00 عصر
با تشکر از شما
لینوکس روی مموری نصب هست؟ اگر اینطور هست که خود سیستم عامل برای انجام خیلی از کارها روی حافظه read و write انجام میده
بله درست است، ولی اطلاعات دریافتی از پورت سریال هر یک ثانیه به تعداد حدود 200 بایت دریافت می شود و در هر بار ممکن است متفاوت با دفعه قبل باشد. در واقع داده های اندازه گیری شده سنسورها است. بنابر این در صورت ذخیره در مموری، تعداد دفعات نوشتن در مموری بسیار زیاد می شود. اما در مورد سیستم عامل لینوکس، فکر نمی کنم این حجم نوشتن بر روی مموری را داشته باشد و احتمالا در هنگام بوت شدن ممکن است این کار را انجام دهد.
بله، راه بهتر بستگی به اطلاعات ارائه شده شما داره
همانطور که عرض کردم یک نرم افزار گرافیکی در ابتدای روشن شدن سیستم اجرا می شود و داده هایی را از پورت سریال دریافت می کند و بر روی صفحه نمایش می دهد. داده هایی مثل دما، ولتاژ و جریان برق. همچنین کاربر باید بتواند به این داده ها از طریق صفحات وب نیز دسترسی داشته باشد. در ضمن بتواند به تعداد محدودی از طریق وب، داده به پورت سریال ارسال کند. نمایش داده ها توسط نرم افزار تحت سیستم عامل و وب باید همزمان امکان پذیر باشد.
Aghil61
چهارشنبه 27 مرداد 1395, 21:25 عصر
سلام و تشکر
سلام و خسته نباشید.
کل برنامه شما را بنده با یک برد رزبری انجام داده ام.
که برنامه آن با زبان سی ++ نوشته شده بود.
کار برنامه دریافت اطلاعات از پورت سریال بود با یه امنیت خاصی، که نتیجه اش نمایش روی ال سی دی مرکز بود.
آیا آن اطلاعات از طریق پورت LAN برد رزپری و به صورت وب در دسترس بود؟
شیوه دیگر این است که که با زبان پایتون بنویسید و بدون نیاز به پورت سریال.
داده هایی که باید نمایش داده شود، باید از طریق پورت سریال دریافت شود. این سیستم در حال حاضر وجود دارد ولی توسط یک میکروکنترلر AVR داده ها از پورت سریال (با پروتکل مدباس) دریافت و بر روی LCD گرافیکی تک رنگی نمایش داده می شود. هم چنین وب سرور نیز ندارد. این جانب برای ارتقای این سیستم باید یک وب سرور به این سیستم اضافه کنم. هم چنین می خواهم برای افزایش قابلیت گرافیکی از LCD رنگیTFT استفاده کنم. در نتیجه به این فکر افتادم که از یک امبدد سیستم استفاده نمایم. حال می خواهم بدانم که پیاده سازی یک وب سرور و یک نرم افزار تحت سیستم عامل، در صورتی که هر دو از داده های مشترکی که توسط پورت سریال باید دریافت گردد، امکان پذیر است یا خیر؟ و چطور باید این کار انجام شود؟
مهدی کرامتی
چهارشنبه 27 مرداد 1395, 23:17 عصر
روی همه بردهای Embedded مبتنی بر لینوکس MySQL قابل نصب است ، از SQLite هم می توانید استفاده کنید، اما به نظر من MySQL با توجه کاربرد چند گانه دیتابیس که قرار است توسط چند برنامه جدا خوانده و نوشته شوند و نتیجتا منجر به خواندن و نوشتن به صورت Multi Thread می شود گزینه بهتری است.
شما می توانید یک برنامه Console بنویسید که و آن را به صورت سرویس اجرا کنید. این برنامه داده ها را از پورت دریافت کرده و داخل دیتابیس می نویسد. همچنین دو برنامه دیگر وجود دارند که یکی داده ها را خوانده و بر روی LCD نمایش می دهد. برای وب هم می توانید PHP و یک وب سرور مانند Apache نصب کنید. بدین ترتیب می توانید یک برنامه مبتنی بر وب نیز داشته باشید که داده ها را از همان دیتابیس بخواند و در وب نمایش دهد.
آیا آن اطلاعات از طریق پورت LAN برد رزپری و به صورت وب در دسترس بود؟
با روش فوق این خواسته نیز برآورده می شود.
negative60
چهارشنبه 27 مرداد 1395, 23:37 عصر
با تشکر از شما
بله درست است، ولی اطلاعات دریافتی از پورت سریال هر یک ثانیه به تعداد حدود 200 بایت دریافت می شود و در هر بار ممکن است متفاوت با دفعه قبل باشد. در واقع داده های اندازه گیری شده سنسورها است. بنابر این در صورت ذخیره در مموری، تعداد دفعات نوشتن در مموری بسیار زیاد می شود. اما در مورد سیستم عامل لینوکس، فکر نمی کنم این حجم نوشتن بر روی مموری را داشته باشد و احتمالا در هنگام بوت شدن ممکن است این کار را انجام دهد.
فقط زمان بوت شدن نیست بستگی به کاری که سیستم عامل انجام میده داره
همانطور که عرض کردم یک نرم افزار گرافیکی در ابتدای روشن شدن سیستم اجرا می شود و داده هایی را از پورت سریال دریافت می کند و بر روی صفحه نمایش می دهد. داده هایی مثل دما، ولتاژ و جریان برق. همچنین کاربر باید بتواند به این داده ها از طریق صفحات وب نیز دسترسی داشته باشد. در ضمن بتواند به تعداد محدودی از طریق وب، داده به پورت سریال ارسال کند. نمایش داده ها توسط نرم افزار تحت سیستم عامل و وب باید همزمان امکان پذیر باشد.
پس شما میخواهید ارتباط آنتایم به وسیله وب با برنامه تون داشته باشید در واقع میخواید اینترفیس سیستمون وب باشه که هم اطلاعات بگیره و به صورت لحظه ایی اطلاعات سنسورها رو نمایش بده و هم اطلاعات یا دستور بفرسته
در این صورت تو لینوکس میتونید از وبسوکت یا سوکت پرگرمینگ استفاده کنید به صورت کلاینت سروری کار کنید
Aghil61
شنبه 30 مرداد 1395, 14:22 عصر
با سلام و تشکر
پس شما میخواهید ارتباط آنتایم به وسیله وب با برنامه تون داشته باشید در واقع میخواید اینترفیس سیستمون وب باشه که هم اطلاعات بگیره و به صورت لحظه ایی اطلاعات سنسورها رو نمایش بده و هم اطلاعات یا دستور بفرسته
در این صورت تو لینوکس میتونید از وبسوکت یا سوکت پرگرمینگ استفاده کنید به صورت کلاینت سروری کار کنید
اگر درست فهمیده باشم منظور شما این است که به جای استفاده از وب سرور لینوکس (مثل آپاچی)، آن را در نرم افزار تحت لینوکس پیاده سازی کنم. اگر منظور شما این بود، فکر میکنم که کار ساده ای نباشه و مانند یک وب سرور، دستم برای پیاده سازی صفحات وب حرفه ای، باز نباشد.
Aghil61
شنبه 30 مرداد 1395, 14:40 عصر
روی همه بردهای Embedded مبتنی بر لینوکس MySQL قابل نصب است ، از SQLite هم می توانید استفاده کنید، اما به نظر من MySQL با توجه کاربرد چند گانه دیتابیس که قرار است توسط چند برنامه جدا خوانده و نوشته شوند و نتیجتا منجر به خواندن و نوشتن به صورت Multi Thread می شود گزینه بهتری است.
شما می توانید یک برنامه Console بنویسید که و آن را به صورت سرویس اجرا کنید. این برنامه داده ها را از پورت دریافت کرده و داخل دیتابیس می نویسد. همچنین دو برنامه دیگر وجود دارند که یکی داده ها را خوانده و بر روی LCD نمایش می دهد. برای وب هم می توانید PHP و یک وب سرور مانند Apache نصب کنید. بدین ترتیب می توانید یک برنامه مبتنی بر وب نیز داشته باشید که داده ها را از همان دیتابیس بخواند و در وب نمایش دهد.
با روش فوق این خواسته نیز برآورده می شود.
با سلام و تشکر
استفاده از دیتا بیس برای چنین کاری، همانطور که شما اشاره کردید، بهترین و اصولی ترین روش است. فقط تنها نکته ای که در این مورد خاص وجود دارد، همانطوری که در پست اول اشاره کردم، این است که نمی خواهم اطلاعات دریافتی از پورت سریال را (که در هر ثانیه باید دریافت شود) در فایل و بر روی درایو سخت (که معمولا در سیستم های امبدد تراشه NAND Flash است) ذخیره کنم. می خواهم این اطلاعات را در حافظه RAM نگه دارم. البته باید بررسی بیشتری در مورد روش ذخیره سازی داده به دفعات زیاد بر روی NAND Flash انجام دهم. در همین راستا خواهشمندم دوستان لطف کنند و به لینک زیر یک نگاهی بیندازند و نظر خودشان را بیان کنند. (دو پاراگراف اول را مطالعه کنید کافیست)
https://www.google.com/url?sa=t&rct=j&q=&esrc=s&source=web&cd=1&cad=rja&uact=8&ved=0ahUKEwj5z4OI5c_OAhXGNhoKHWnyCvwQFggdMAA&url=http%3A%2F%2Fwww.embedded-tools.de%2Fsites%2Fdefault%2Ffiles%2Fsmxflog.pdf&usg=AFQjCNHya3CaRcEzUnXpALZXHKZCMxP9Vw
من یک ایده ای به ذهنم رسیده که می خواهم بدانم عملی هست یا نه و آیا از نظر برنامه نویسی، درست است یا خیر. به نظر شما می توانم در برنامه ای که تحت لینوکس اجرا می شود، یک آرایه از نوع استاتیک تعریف کنم و در هنگام اجرا شدن برنامه، آدرس آن متغیر را در یک فایل و در یک مسیر مشخص، بر روی هارد ذخیره کنم. آن گاه برای دسترسی به داده های این آدرس در برنامه PHP تحت وب، آدرس داده ها را از فایلی که توسط نرم افزار لینوکس ساخته شده بخوانم و به داده های آن آدرس دسترسی داشته باشم؟
aqm176
یک شنبه 31 مرداد 1395, 18:06 عصر
سلام و خسته نباشید.
اطلاعات از طریق پورت لن نیز در دسترس بود چرا که شل اسکریپت هایی که طراحی کرده بودم، اطلاعات را از سرور مرکزی میخواند. بافر میکرد و نرم افزار من از بانک محلی دیکد میکرد و به نمایش در میآورد.
Aghil61
دوشنبه 15 شهریور 1395, 13:59 عصر
با سلام و تشکر از همه.
خواستم اطلاع دهم که در نهایت تصمیم بر این شد که از دیتابیس در سیستم استفاده شود و با هر بار دریافت داده از پورت سریال، یک رکورد در جدول دیتابیس اضافه شود. و با توجه به این که یکی از فیلدهای دیتابیس، تاریخ و زمان است، در این صورت یک سیستم Log هم خواهیم داشت. در بخش وب هم برای به روز کردن داده ها، همیشه آخرین رکورد از دیتابیس خوانده می شود. پس از این که یک تعداد بسیار زیادی داده در جدول دیتابیس ذخیره شد (این تعداد به حجم حافظه NAND بستگی دارد)، داده های جدید از اول و روی قدیمی ترین داده ها ذخیره می شوند و به این شکل مشکل تعداد زیاد دفعات نوشتن در یک قسمت حافظه (نسبت به حالتی که دیتا Log نشود) برطرف می شود. در واقع تعداد دفعات نوشتن داده در حافظه، برابر می شود با تعداد داده ها تقسیم بر تعداد رکوردها. در هر صورت از کمک همه سپاسگزارم.
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.