ايران ويج

نسخه‌ی کامل: ارسال اطلاعات به qt از پایتون
شما در حال مشاهده‌ی نسخه‌ی متنی این صفحه می‌باشید. مشاهده‌ی نسخه‌ی کامل با قالب بندی مناسب.
سلام،
یه سناریو داریم که قراره از پورت  (مثلا) سریال یک سری اعداد و ارقام بیاد و ورودی برنامه شماره یک ( که با سی نوشته شده ) باشه بعدش یک سری عملیات روی این اعداد اعمال بشه و خروجی برنامه شماره یک، میشه ورودی برنامه شماره دو ( که با پایتون نوشته شده) دوباره یک سری اعملیات و بعد هم خروجی باید با یه UI  یا هر چی نمایش داده بشه !
 
خب سوال های زیادی دارم  (:
اول اینکه فکر کنم میشه پایتون داخل سی استفاده کرد( این لینک ) به نظرتون چقدر این روش میتونه جواب بده ؟! اگه خدایی نکرده وسط راه اینتراپت پایتون کرش کرد یا هر اتفاق دیگه ای نمیشه هندلش کرد درسته ؟ راه دیگه سراغ ندارید ؟!
 
سوال دوم وقتی خروجی از برنامه شماره دو بیرون میاد و قراره نمایش داده بشه، خب مثلا ما قراره از qml استفاده کنیم، چطوری میتونم اطلاعات از پایتون بگیرم بدم به qt ؟ خب میشه از فایل استفاده کرد، فکر کنم دیتابیس هم بشه... اما میشه اطلاعات از رم خوند ؟ یا انتقال داد ؟
نقل قول: یه سناریو داریم که قراره از پورت  (مثلا) سریال یک سری اعداد و ارقام بیاد و ورودی برنامه شماره یک ( که با سی نوشته شده ) باشه بعدش یک سری عملیات روی این اعداد اعمال بشه و خروجی برنامه شماره یک، میشه ورودی برنامه شماره دو ( که با پایتون نوشته شده) دوباره یک سری اعملیات و بعد هم خروجی باید با یه UI  یا هر چی نمایش داده بشه !

یه برنامه دارد بنام c  (که با سی نوشته شده) که در پس ضمینه میمونه تا از پورت سریال اطلاعات بگیره
یه برنامه دارید بنام p (که یک اسکریپت پایتون هست) که فقط وقتی اجرا میشه که برنامه سی میخواد اطلاعاتی که گرفته و پردازش شده رو بده بهش

و بعدش برنامه p   این اطلاعات رو گرفت خودش نشون میده یا دوباره میفرسته به برنامه c ؟

قرار برنامه رو شخصی خودتون اجرا کنید در به صورت عمومی پابلیک کنید؟

سوال بعدی اینکه منظورتون از qt چیه؟ در پایتون qt استفاه کردید یا در برنامه سی؟


این سوالات رو جواب بدین تا بشه بهتر راهنمایی کرد
نقل قول: یه برنامه دارد بنام c  (که با سی نوشته شده) که در پس ضمینه میمونه تا از پورت سریال اطلاعات بگیره
یه برنامه دارید بنام p (که یک اسکریپت پایتون هست) که فقط وقتی اجرا میشه که برنامه سی میخواد اطلاعاتی که گرفته و پردازش شده رو بده بهش

و بعدش برنامه p   این اطلاعات رو گرفت خودش نشون میده یا دوباره میفرسته به برنامه c ؟

بله

نقل قول: قرار برنامه رو شخصی خودتون اجرا کنید در به صورت عمومی پابلیک کنید؟

پابلیک خیر، ولی خودم در حال نوشتن هستم

نقل قول: سوال بعدی اینکه منظورتون از qt چیه؟ در پایتون qt استفاه کردید یا در برنامه سی؟


مهم qml هست و فرقی نمیکنه سی باشه یا پایتون، ما به گرافیکش نیاز داریم
ولی فکر میکنم سی باشه

یه چیزی رو که یادم رفت بگم همه موارد قراره تو لینوکس اتفاق بیافته !
نقل قول: یه چیزی رو که یادم رفت بگم همه موارد قراره تو لینوکس اتفاق بیافته !
خیلی هم خوب و عالی و قشنگ و شیک Biggrin
نقل قول:
نقل قول: و بعدش برنامه p   این اطلاعات رو گرفت خودش نشون میده یا دوباره میفرسته به برنامه c ؟

بله


بهترین مدلی که میتونم پیشنهاد بدم tcp/ip هستش؛ برنامه پایتون شما منتظر ارتباطات از جانب برنامه سی میمونه؛ و بعد اطلاعات رو میخونه و پردازش میکنه و دوباره میفرسته به برنامه‌ی سی؛
اینم واسه اینکه میخوایی از qml توی پایتون استفاده کنی:
http://stackoverflow.com/questions/36093...-qml-table

به صورت دینامیکی میتونی اطلاعات اضافه کنی به عناصر qml
در تکمیل صحبتهای baby عزیز
پایتون خودش کتابخانه هایی برای کار کردن با انواع پورتها رو داره
یک توضیع پایتون برای کار با QT هست بنام pyqt میتونین از اون استفاده کنید از QTdesigner هم پشتیبانی میکنه خودش سایت داره و مثال زیادی هم داره
(۲۹-آبان-۱۳۹۵, ۱۶:۴۷:۱۶)babyy نوشته است: [ -> ]بهترین مدلی که میتونم پیشنهاد بدم tcp/ip هستش؛ برنامه پایتون شما منتظر ارتباطات از جانب برنامه سی میمونه؛ و بعد اطلاعات رو میخونه و پردازش میکنه و دوباره میفرسته به برنامه‌ی سی؛

پیشنهاد خوبیه !  :():
یعنی شما میگی از وب سرور به عنوان واسط استفاده کنیم ؟ یا اینکه یه ارتباط کلاینت، سروری ؟


(۳۰-آبان-۱۳۹۵, ۱۲:۰۰:۵۷)lord_viper نوشته است: [ -> ]در تکمیل صحبتهای baby عزیز
پایتون خودش کتابخانه هایی برای کار کردن با انواع پورتها رو داره
یک توضیع  پایتون برای کار با QT هست بنام pyqt میتونین از اون استفاده کنید از QTdesigner هم پشتیبانی میکنه خودش سایت داره و مثال زیادی هم داره

آره منتها فکر کنم فقط برای سریال داره، ما از CAN و SPI استفاده کردیم..
درسته قضیه نمایش میشه با pyqt درسته کرد مرسی  :(): 


اما یکی از دوستانم تو تلگرام سه تا روش دیگه پیشنهاد داد. استفاده از دیتابیس، فایل، memory و یه برنامه واسط.
راجع به ارتباط از طریق memory میشه یه توضیحی بدین و اینکه به نظرتون از همه روش های که پیشنهاد شده کدوم روش بهتره ؟ چیزی که برای ما مهم هست اول استفاده کم از منابع و در نهایت سرعت هست.
وب سرور نه؛ کلاینت سرور


نقل قول: اما یکی از دوستانم تو تلگرام سه تا روش دیگه پیشنهاد داد. استفاده از دیتابیس، فایل، memory و یه برنامه واسط.

با دیتابیس چطوری میشه انجامش داد؟

برنامه c اطلاعات رو بفرسته به دیتابیس و بعد چطوری به برنامه p بگه اطلاعات رو ریختم توی دیتابیس و حالا تو پردازشش کن؟
این روش یدونه بانک اطلاعاتی + یدونه ارتباط tcp بیشتری نیاز داه (c به دیتا بیس و p به دیتابیس)


با فایل هم به دوروش قابل اجراست؛
روش اول اینکه فایل ورودی رو به عنوان آرگومان به برنامه بده و هربار برنامه p رو اجرا بزنه؛ که این  بار پردازشی میندازه روی سیستمت؛ به ازای ۱۰۰ تا ورودی ۱۰۰ بار باید بنرامه‌ات تو حافظه لود بشه!!

روش دوم اگه هم برنامه p در پس زمینه هستی و منتظر فایل ورودیه که هون مشکل دیتابیس پیش میاد! یعنی اینکه چطوری میخوایی برنامه بگی فلان فایل رو بخون؟ با tcp ؟
 خب اگه با tcp میخوایی بهش بگی فلان فایل رو بخون که میشه همون مدل tcp/ip !! فقط سیستم فایل رو این وسط بیشتر از پیش درگیر میکنی!!!

در مورد memory هم پیاده سازیش برای share کردن مموری بین چندتا پروسه مختلف (در صورتی که بشه - من تا الان فکر میکردم نمیشه (هنوزم همین فکر رو میکنم البته اگه منظورش RPC نبوده باشه Biggrin )) سخت میشه



این روشهایی که دوستتون فرمودند رو اگه به عنوان روش مکمل استفاده کنید بهتره؛ مثلا اطلاعاتی که برنامه c‌ میخواد بفرسته رو اول از همه یکجا ذخیره کنه (توی فایل یا دیتابیس و ..) تا اگه برنامه p مشکلی پیس اومد واسش اطلاعات از بین نره و .. از این دست مسایل..


--------------------
دوستتون رو دعوت کنید به اینحا از اطلاعات همدیگه استفاده کنید؛ Biggrin  الکی یکم هم تعریف کنید از اینجا بگید خیلی خوبه  و.. شیرینی شما هم محفوظ Biggrin Biggrin
(۳۰-آبان-۱۳۹۵, ۱۲:۲۴:۴۰)nImaarek نوشته است: [ -> ]آره منتها فکر کنم فقط برای سریال داره، ما از CAN و SPI استفاده کردیم..
درسته قضیه نمایش میشه با pyqt درسته کرد مرسی  :(): 
پایتون برای کار با هر پورتی کنتبخانه و کلاس داره کافیه یه جستجوی ساده روی نت انجام بدین
لینک زیر ارتباط با SPI
http://raspberrypi-aa.github.io/session3/spi.html

اگه سرعت براتون مهم هست همه برنامه رو با C و QT بنویسین
نقل قول: اما یکی از دوستانم تو تلگرام سه تا روش دیگه پیشنهاد داد. استفاده از دیتابیس، فایل، memory و یه برنامه واسط.
راجع به ارتباط از طریق memory میشه یه توضیحی بدین و اینکه به نظرتون از همه روش های که پیشنهاد شده کدوم روش بهتره ؟ چیزی که برای ما مهم هست اول استفاده کم از منابع و در نهایت سرعت هست.
هم در روش دیتابیس هم مموری ریسک خیلی بالاس چون برنامه ولی نمیدونه برنامه دوم اطلاعات رو خونده یا نه و اطلاعات overwrite بشه از بین میره و ضمن اینکه سرعت این روشها بسیار پایین هست
بهترین روش انجام کلیه عملیاتها در یک برنامه واحد هست
اگه دلیل خاصی دارین که از 2 برنامه مجزی استفاده کنید بیان کنید
اگه تو ویندوز هست میتونین برای ارتباط از WM_COPY استفاده کنید اینجوری اطلاعات به سرعت منتقل میشه و امکان از دست رفتن اطلاعات از بین میره
با این حال شما باید یک برنامه واحد استفاده کنید نه 2 برنامه
نقل قول: پایتون برای کار با هر پورتی کنتبخانه و کلاس داره کافیه یه جستجوی ساده روی نت انجام بدین
لینک زیر ارتباط با SPI

مرسی منتها اجازه بدید یکم با این کتابخونه کار کنم و اینکه یه بررسی کنم...

نقل قول: بهترین روش انجام کلیه عملیاتها در یک برنامه واحد هست
اگه دلیل خاصی دارین که از 2 برنامه مجزی استفاده کنید بیان کنید
اگه تو ویندوز هست میتونین برای ارتباط از WM_COPY استفاده کنید اینجوری اطلاعات به سرعت منتقل میشه و امکان از دست رفتن اطلاعات از بین میره
با این حال شما باید یک برنامه واحد استفاده کنید نه 2 برنامه

دلیل خاصی که، خب حجم کاری خیلی بالاست یعنی این دوبرنامه فقط دو مرحله از کل کار پروژه ماست و فعلا در حال تست هستیم.
داخل لینوکس هستیم خوشبختانه.

استفاده از memory و دیتابیس سرعت کمتری نسبت به فایل داره ؟!
شما باید برنامتونو به صورت ماژولار بنویسین یا قابلیت اضافه کردن پلاگین رو بهش بدین تا بتونین فاز به فاز که جلو میرین به راحتی برنامه رو گسترش بدین یا اینکه چند نفر به صورت موازی بتونن روش کار کنن بدون اینکه نیازی به تغییر کدهای قبلی باشه