نحن نصنع وحدة تحكم للمنزل الذكي وليس فقط.
في مقال سابق ، وصفت تطور النظام ككل. في هذا ، سوف أصف تطوير وحدة تحكم مسؤولة عن أجهزة استشعار الاقتراع ووحدات الإدخال / الإخراج. "لماذا إعادة اختراع العجلة؟" - أنت تسأل. أولاً ، إنه أمر مثير للاهتمام ، وثانياً ، من الغريب أنه لا يوجد حل مفتوح المصدر لمثل هذه الأداة التي تغطي كل من البرامج والأجهزة. يستهدف المقال الأشخاص الذين هم على دراية بسيطة بالإلكترونيات وفي تطوير نظام لينكس المضمّن.
إن إنشاء وحدة تحكم ، كما تقول ، معقد للغاية - تحتاج إلى إنشاء لوحة ، وكتابة البرامج ، وطباعة الحالة. ولكن في الواقع ، كل شيء أكثر تعقيدًا قليلاً ، هذا ما سكب لي ، لكنك على صواب من حيث المبدأ:
1. أجهزة تحكم
- اختيار لوحة وحدة المعالجة المركزية للتحكم
- اختيار وحدة تحكم IO
- اختيار امدادات الطاقة
- مخطط كتلة وحدة تحكم
- تطوير لوحة الصليب للتحكم
- تطوير لوحات لوحدات RS-485
- إنتاج لوحات
2. برنامج للتحكم
- اختيار نظام بناء لنظام التشغيل linux kernel و rootfs
- هيكل التقسيم من بطاقة SD
- اختيار محمل الإقلاع وتحميل rootfs الضروري
- التغييرات في شجرة الجهاز
- اختيار نظام لجمع الديون المتداولة
- كتابة نظام البناء
- كتابة الاتصالات الأساسية
- كتابة بوابة mqtt (نقاط تحكم منفصلة / تناظرية -> مواضيع mqtt)
- كتابة محلل جوجل وبناء ملف التكوين json للبوابة
- كتابة شاشة نقطة للوصول إلى نقاط تحكم
- جبل نظام الملفات للقراءة فقط
3. حالة تحكم
- ما الذي يجب أن يكون ، الموصلات ، التبريد ، مقاعد اللوحة ، الرهون العقارية لمقاطع الأقواس على dinrake.
- التصميم والطباعة
بضع كلمات عن الأجهزة.
ربما فقط الأكثر يائسة الآن تأخذ معالج منفصل ، والذاكرة ، والفلاش ، تحكم السلطة ، بضع مئات من المكونات والبدء في نحت كل ذلك معا. يستخدم الباقي ثمار عمل الآخرين ، وهو أسرع وأسهل. تحتاج فقط إلى فتح مستعرض وكتابة "كمبيوتر أحادي اللوحة" وقضاء بقية اليوم في اختيار المستعرض المناسب. كنت بحاجة إلى الكثير من المنافذ التسلسلية ، ومن المرغوب فيه أن تدعم اللوحة -40 درجة مئوية إلى +85 درجة مئوية ، لذلك وقع الاختيار على BeagleBone Black (BBB). على BBB أيضًا ، يتم توصيل جميع الأجهزة الطرفية بموصلين PBD مكونين من 46 دبوسًا بزيادة قدرها 2.54 ، وهو مناسب لنماذج أولية وتطوير ألواح متقاطعة. هناك حاجة إلى لوحة متقاطعة للجمع بين جميع المكونات في لوحة واحدة ، بالنسبة لي هي لوحة وحدة المعالجة المركزية ، وإمدادات الطاقة ، وحدة تحكم IO ، ولوحات قنوات RS485. وأيضًا ، فإن اللوحة المتقاطعة هي التي تحتاج إلى إصلاح في العلبة ، وهناك موصلات عليها من أجل الطاقة وكابل RS485.

لذلك ، اكتشفنا لوحة وحدة المعالجة المركزية ، والشيء التالي الذي يجب تحديده هو ما إذا كان من الضروري وضع وحدة تحكم الإدخال / الإخراج (IO) على اللوحة المتقاطعة أم لا. لقد وضعتها على السبورة ، ولم أستخدمها بنجاح حتى الآن. الشيء الوحيد الذي يفعله هو تأجيل بدء BBB لمدة 1 ثانية بعد تطبيق الطاقة ويقدم زر إعادة الضبط.
مزود الطاقة لوحدة التحكم ، أخذت MeanWell NSD10-12S5 الجاهزة ، وتطويره لجهاز واحد هو مشروع لا معنى له ، لقد التقطت للتو للاستهلاك وهذا كل شيء. لا تولي اهتماما لشاشات الكريستال السائل ، بل هو على متن الطائرة ، لكنني لم تنفذ الدعم.


بضع كلمات حول بطاقات قنوات RS485.
هناك 4 واجهات BBB التسلسلية على اللوحة المتقاطعة. لذلك يمكنك وضع أي نوع من القنوات التي تحتاج إليها ، RS485 ، CAN ، وحدة Zigbee ...
كنت بحاجة إلى قنوات RS485 ، لذلك قمت بتصنيعها فقط ، فهي مزودة بالتحكم التلقائي في الإرسال / الاستقبال ومع عزل كلفاني. لماذا لا تستخدم التحكم في جهاز الإرسال والاستقبال مع BBB ، لأن TI توقف رسميًا عن دعم strobe لـ RS485 في برنامج تشغيل الجهاز التسلسلي. يمكنك العثور على تصحيح للسائق ، يمكنك إضافته بنفسك ، ولكن لماذا؟ بعد أن تم تأمين القناة بنفسها ، يمكن وضعها على أي لوحة ، على سبيل المثال ، في RaspberyPi ، حيث لم يكن هناك مثل هذا الدعم ، إذا كان هناك ، ثم صححني. تم تكوين القوية لبرنامج التشغيل rs485 على attiny10 ، ورخيصة والبهجة.
نعود إلى البرنامج.
اختيار نظام بناء لنواة لينكس و rootfs.
هناك عدة أنظمة من هذا النوع ، والأكثر شعبية هي Yocto و BuildRoot. إذا كنت بحاجة إلى تطوير مشروع كبير ، إذا كان لديك الكثير من الوقت وترغب في كتابة وصفات ، فإن Yocto هو اختيارك. بمساعدة BuildRoot ، يمكنك جمع كل ما تحتاجه لإطلاق بسيط للوحة بسيط للغاية ، لأنه أقوم بإنشاء نظام على Beaglebone Black (يشار إليه فيما يلي بـ BBB) ثم:
- اقرأ ما يكتب هنا habr.com/en/post/448638
- جعل نظيفة
- جعل beaglebone_defconfig
- جعل
هذا كل شيء. الآن كل ما تحتاجه لتشغيل اللوحة يكمن في مجلد / buildroot / output / images.
يبدو كل شيء بسيطًا جدًا وغير مثير للاهتمام ، لذلك يمكنك القيام ببعض التعقيدات:
- دمج buildroot في نظام الإنشاء الخاص بك ، قم بتنزيله باستخدام برنامج نصي ، وتذكر أن تستخدم علامة ثابتة ، ولا تأخذ التطوير الأخير
- اكتب defconfig الخاص بك ورمي البرنامج النصي في مجلد / buildroot / configs قبل تجميع buildroot ، لا تنس أن كل defconfigs يجب أن ينتهي بـ * _defconfig ، وإلا فإن buildroot لا يرى ذلك
- انسخ post-build.sh إلى اللوحة / beaglebone / post-build.sh
- جعل إعداد البرنامج النصي الذي سوف تفعل N1 ، N2 و N3 بالنسبة لك
نتيجة لذلك ، سوف تنشئ buildroot zImage و rootfs.tar
اختيار هيكل التقسيم لبطاقة SD:
على هذا ، في اعتقادي ، ليس من الضروري تركيز الكثير من الاهتمام.
لقد صنعت 4 أقسام BOOT / ROOT_1 / ROOT_2 / DATA.
يحتوي قسم BOOT على كل ما تحتاجه للتمهيد: MLO ، barebox.bin ، barebox.env ، am335x-boneblack.dtb ، zImage ، boot.txt.
يحتوي ROOT_1 و ROOT_2 على ملفات root ، يتم تحديد تحديدها في ملف boot.txt (انظر أدناه). يتم تثبيت كل هذه الأقسام بشكل للقراءة فقط لتجنب تعطل نظام الملفات عند إيقاف تشغيل الطاقة. تحتوي DATA على تكوينات التصميم ، عند تغييرها والتي ليست هناك حاجة لإعادة إنشاء التعليمات البرمجية.
مثل هذه البنية من الأقسام في المستقبل سوف تجعل من السهل كتابة مكون تحديث البرنامج. سيقوم هذا المكون بالكتابة فوق أحد الأقسام ROOT_1 / ROOT_2 ، والذي لا يتم استخدامه الآن ، ثم قم فقط بتغيير ملف boot.txt إذا لم تكن بحاجة إلى تغيير النواة.
اختيار محمل الإقلاع.
كان لدي الكثير من التجارب مع محمل الإقلاع لـ BBB. في البداية كنت ، مثل أي شخص آخر ، U-Boot الذي ينشئه BuildRoot. لكنني لم يعجبني ، ربما ، بالطبع ، هذه مسألة عادة ، لكن بدا لي أنها كانت أكثر من اللازم ، إنها ثقيلة للغاية وصعبة التكوين. بعد ذلك ، اعتقدت أنه لن يكون من الجيد تشغيل النظام بسرعة ، خلال 2-3 ثوانٍ ، وتقديم ملف X-Loader بحيث يتم تحميل kernel ، لقد نجحت ، ولكن مرة أخرى كانت هناك مشكلة في التكوين ، ووقت البدء بالنسبة لي ليس حرجًا (يقوم النظام الموجود على systemd بالتمهيد ببطء من تلقاء نفسه ، حتى إذا قمت بحذف كل شيء غير مطلوب).
في النهاية ، استقرت على barebox ، لقد أحببت بساطته حقًا ، بالإضافة إلى أن الموقع يحتوي على جميع الوثائق (www.barebox.org).
على سبيل المثال ، لتحميل rootfs من القسم الأول أو الثاني ، تحتاج فقط إلى:
1. في قسم التمهيد ، أدخل الملف boot.txt الذي سيقوم بتصدير متغير من النوع "export BOOT_NUM = X"
2. قم بعمل نصين / env / boot / sdb1 / env / boot / sdb2 فيه لوصف خيارات التمهيد ، على سبيل المثال:
echo "botting with mmcblk0p2 as rootfs..." global.bootm.image=/boot/zImage global.bootm.oftree=/boot/am335x-boneblack.dtb global.linux.bootargs.console="console=ttyO0,115200" global.linux.bootargs.debug="earlyprintk ignore_loglevel" global.linux.bootargs.base="root=/dev/mmcblk0p2 ro rootfstype=ext4 rootwait"
3. قم بإعداد برنامج نصي / env / boot / sd ، حيث يمكنك ، بناءً على BOOT_NUM ، بدء البرنامج النصي sdb1 أو sdb2
4. تعيين boot.default متغير
nv boot.default=sd saveenv
5. لمزيد من التغيير BOOT_NUM في boot.txt ، سنقوم بتحميل ملفات root من القسم الأول أو الثاني ، والتي يمكن استخدامها في المستقبل لتحديث البرنامج.
التغييرات في شجرة الجهاز.
منذ أن استخدمت MODBUS RTU عبر RS485 للتواصل مع الوحدات النمطية ، كنت بحاجة إلى تمكين جميع المنافذ التسلسلية الموجودة على BBB تقريبًا. للقيام بذلك ، تحتاج إلى إعادة تمكينهم في شجرة الجهاز ، لأنه افتراضيًا ، يتم إيقاف تشغيل معظمها.
سيكون من الصحيح أن تقوم بتصحيح ملفك am335x-bone-common.dtsi من حزمة buildrut وتطبيقه في كل مرة قبل تجميعه ، لكن الكسل فاز ، وسحبت كل الملفات التي احتاجها ، وغيرت كل شيء أحتاجه وقمت بإنشائه بيدي.
لأن يتم ذلك مرة واحدة ، فمن الممكن وهكذا:
1. إنشاء مجلد مع الملفات اللازمة للتجميع:
am335x-bone-common.dtsi am335x-boneblack-common.dtsi am335x-boneblack.dts am33xx-clocks.dtsi am33xx.dtsi am33xx.h gpio.h omap.h tps65217.dtsi
2. في ملف am335x-bone-common.dtsi ، تحتاج إلى تكوين الدبابيس بشكل صحيح وإلغاء تمكين برامج تشغيل المنفذ:
uart1_pins: pinmux_uart1_pins { pinctrl-single,pins = < AM33XX_IOPAD(0x980, PIN_INPUT_PULLUP | MUX_MODE0) AM33XX_IOPAD(0x984, PIN_OUTPUT_PULLDOWN | MUX_MODE0) >; }; uart2_pins: pinmux_uart2_pins { pinctrl-single,pins = < AM33XX_IOPAD(0x950, PIN_INPUT_PULLUP | MUX_MODE1) AM33XX_IOPAD(0x954, PIN_OUTPUT_PULLDOWN | MUX_MODE1) >; }; uart4_pins: pinmux_uart4_pins { pinctrl-single,pins = < AM33XX_IOPAD(0x870, PIN_INPUT_PULLUP | MUX_MODE6) AM33XX_IOPAD(0x874, PIN_OUTPUT_PULLDOWN | MUX_MODE6) >; }; uart5_pins: pinmux_uart5_pins { pinctrl-single,pins = < AM33XX_IOPAD(0x8C4, PIN_INPUT_PULLUP | MUX_MODE4) AM33XX_IOPAD(0x8C0, PIN_OUTPUT_PULLDOWN | MUX_MODE4) >; }; &uart1 { pinctrl-names = "default"; pinctrl-0 = <&uart1_pins>; status = "okay"; }; &uart2 { pinctrl-names = "default"; pinctrl-0 = <&uart2_pins>; status = "okay"; }; &uart4 { pinctrl-names = "default"; pinctrl-0 = <&uart4_pins>; status = "okay"; }; &uart5 { pinctrl-names = "default"; pinctrl-0 = <&uart5_pins>; status = "okay"; };
3. بعد ذلك ، يوجد القليل من السحر والملف النهائي am335x-boneblack.dtb في نفس الدليل:
a. sudo apt-get install device-tree-compiler
ب. تشغيل المعالج الأولي:
cpp -Wp,-MD,am335x-boneblack.dtb.d.pre.tmp -nostdinc -Iinclude -Isrc -Itestcase-data -undef -D__DTS__ -x assembler-with-cpp -o am335x-boneblack.dtb.dts.tmp am335x-boneblack.dts
ج. تشغيل المترجم نفسه:
dtc -O dtb -o am335x-boneblack.dtb -b 0 -i src -d am335x-boneblack.dtb.d.dtc.tmp am335x-boneblack.dtb.dts.tmp
4. يجب وضع am335x-boneblack.dtb على قسم التمهيد بجوار kernel وفي نص بدء التشغيل لـ barebox أضف السطر التالي - "
global.bootm.oftree=/boot/am335x-boneblack.dtb
"
اختيار نظام لجمع الديون المتداولة.
كما تعلمون ، لا توجد أنظمة بدون أخطاء ، وكذلك تحليل نظام متعدد مؤشرات الترابط دون آثار. يعد هذا الإجراء مناسبًا جدًا إذا لم يتم عرض هذه الآثار في وحدة التحكم ، ولكن يتم جمعها باستخدام شيء تم إنشاؤه خصيصًا لهذا الغرض ، بحيث يكون من الممكن فرزها حسب العمليات ، وتطبيق المرشحات ، إلخ. وأنا أعرف نظامًا واحدًا جيدًا يسهل بناؤه تحت كل من المضيف والهدف. هذا هو DLT ، إذا لم تكن قد سمعت بهذا مطلقًا ، فلا يهم ، يمكن تغطية جميع فجوات المعرفة بسهولة من خلال قراءة:
www.projects.genivi.org/wiki/display/PROJ/Diagnostic+Log+and+Trace .
يتكون هذا النظام من dlt-daemon و dlt-viewer. كما يوحي الاسم ، يتم تشغيل dlt-daemon على الهدف ، و dlt-viewer على المضيف. بالإضافة إلى كل هذا ، إلى ملفك الثنائي ، الذي نرغب في جمع الآثار منه ، تحتاج إلى ربط dlt lib.

بشكل عام ، كل شيء مناسب ، وكيفية جمع الآثار وتحليلها ، أوصي.
كتابة نظام البناء.
لماذا تكتب نظام بناء ، لأنه يمكنك تنزيل كل شيء من المستودعات ، قم ببنائه بيديك ، والبناء على أساس هذا rootfs والحجاب ، تعمل وحدة التحكم. لكن تكرار مثل هذه الخدعة خلال شهر سيكون أكثر صعوبة ، وفي شهرين - هذا أمر مستحيل عمومًا. مرة أخرى ، عليك أن تتذكر ماذا وأين تضع وماذا تبني وكيف تبدأ. لذلك ، بعد أن قضيت الكثير من الوقت في البداية ، يمكنك حفظه لاحقًا ، بالإضافة إلى حصولك على فرصة بناء مريح تحت المضيف والهدف. يتكون نظام الإنشاء من مجموعة من البرامج النصية التي تقوم أولاً بإعداد المضيف للبناء ، وتنزيل مكونات الطرف الثالث ، مثل buildroot ، و mosquitto ، و DLT daemon ، من مستودعاتهم ، وإنشائها ، ووضعها في أماكنهم. وبعد ذلك يمكنك إطلاق بناء مشروعك. إذا لم يكن من الصعب القيام بالبناء الموجود تحت المضيف ، فستحتاج دائمًا إلى العبث بالبناء تحت الهدف ، وسيكون من الأفضل أن يفعله البرنامج النصي.
يمكن تكوين Buildroot بحيث يستدعي برنامجًا نصيًا بعد الإنشاء بعد أن يقوم بتكوين rootfs ، والذي سيكون في buildroot / output / target. يمنحك هذا فرصة رائعة لوضع كل ما تحتاجه هناك. وبعد ذلك ، ستحتوي صورة نظام الملفات بالفعل على كل ما تحتاجه لبدء تشغيل نظامك.
الوصفة شيء مثل هذا:
- تحتاج إلى نسخ الثنائيات الخاصة بك في مكان ما في buildroot / output / target ، على سبيل المثال في / opt / bin
- إذا كان هناك تكوينات ، فافعل الشيء نفسه معهم ، فقط في / opt / etc
- نسخ ثنائيات الطرف الثالث ، بالنسبة لي هو البعوض ، DLT الخفي ، libs والتكوينات الخاصة بهم
- من أجل بدء تشغيل النظام نفسه عند تحميل وحدة التحكم ، تحتاج إلى نسخ خدمات systemd الخاصة بك ، فمن الأفضل دمجها في هدفك وإعادة تمكينه من خلال إنشاء رابط في مستخدمين متعددين.
- قم بنسخ fstab المعدلة (لماذا ، سأخبرك لاحقًا)
بعد ذلك ، تحتاج فقط إلى فك buildroot / output / images / rootfs.tar إلى القسم المطلوب من بطاقة SD وتشغيل الطاقة.
build git repo: https://github.com/azhigaylo/build
كتابة الاتصالات الأساسية.
مفهوم هذا قديم قدم modbus نفسه.
يحتوي كل جهاز إدخال / إخراج في شبكة modbus (16 بت) على سجلات متاحة للقراءة والقراءة / الكتابة ، حيث يتم تخزين البيانات والتي يتم من خلالها التحكم في هذه الأجهزة. تحتوي وحدة التحكم ، بدورها ، على صفيفات منفصلة (قيمة الحالة والبايت) ونقاط تمثيلية (الحالة وقيمة التعويم) ، حيث يخزن حالة جميع المعلمات.
لذا ، فإن مهمة مركز الاتصالات بسيطة - جمع البيانات من أجهزة الإدخال / الإخراج باستخدام بروتوكول modbus ، وتعيينها على نقاط تحكم وتوفير الوصول إلى هذه النقاط للمستوى العلوي. وإذا كنت بحاجة إلى إدارة شيء ما ، فكل شيء في الاتجاه الآخر - يجب الاشتراك في الجهاز المنطقي (المزيد عن ذلك لاحقًا) في نقطة التحكم وأن تبدأ هذه النقطة في ترجمة هذه المعلمة إلى جهاز إخراج الماء الفعلي.

من أجل هيكلة البيانات بطريقة ما والعمل مع الأجهزة ، يمكنك تقديم مفهوم الجهاز المنطقي الذي سيعرض حالة الجهاز الفعلي في البرنامج الخاص بك.
قررت أيضًا تقسيم الأجهزة المنطقية إلى مجموعتين:
- قياسي (وحدات Aries من المدخلات / المخرجات المنفصلة) ، والتي تُعرف بها مسبقًا أعداد سجلات modbus بالبيانات ، ويكفي تحديد نقاط وحدة التحكم في مكان حفظ هذه البيانات.
- أجهزة المستخدم ، بالنسبة لهم من الضروري أن تصف بشكل مستقل تعيين سجلات modbus لنقاط التحكم.
من كل ما سبق ، من المنطقي أن يكون هناك نوع من مكون التهيئة لوحدة التحكم ، سواء كان مجرد تكوين json أو أداة مكتوبة ذاتيًا تولد تهيئة ثنائية ، يناسب أي شيء. لدي الخيار الثاني ، لأنه كانت هناك أفكار لكتابة نواة اتصال بحيث يمكن تشغيلها بسهولة ليس فقط على لوحة Linux ولكن أيضًا على Arduin مع FreeRtos ، مما يغير مستوى PAL في البرنامج.
في مكون كل جهاز ، تحتاج إلى تعيين رقم منفذ وحدة التحكم rs485 ، وعنوان الجهاز ، ونقطة التحكم التي يتم عرضها على حالة الاتصال بالجهاز ، بالإضافة إلى كل جهاز قياسي يتم وصف قنواته ، وبالنسبة لجهاز المستخدم ، يتم تعيينه للتسجيلات.


يتيح لك ملف التكوين هذا ، الذي يحتوي على جميع البيانات اللازمة عن إنشاء شبكة modbus ، عدم تعديل الكود المصدري للمشروع إذا كنت بحاجة إلى إضافة / إزالة / تغيير أجهزة الإدخال / الإخراج ، وهو ما يكفي لتغيير المعلمات في configurator وحفظها في ملف config.
عند بدء التشغيل ، يوزع جوهر الاتصال التكوين ويقوم بإنشاء قوائم منطقية للأجهزة المنطقية لكل منفذ rs485 بوحدة التحكم ، ثم يتم إنشاء مؤشرات الترابط على كل منفذ ويبدأ الاستقصاء الدوري للأجهزة المادية.
core git repo: https://github.com/azhigaylo/homebrain_core
كتابة بوابة mqtt.
في الواقع - نقاط تحكمك ، المنفصلة والتناظرية ، مع واجهة خاصة للوصول إليها ، لا تهم أي أحد. لذلك هناك طريقة واحدة فقط للخروج - mqtt. أعتقد أنني لن أبالغ إذا قلت إن هذا هو البروتوكول الأكثر شيوعًا لتبادل الرسائل الصغيرة ، بالإضافة إلى أنه سهل الاستخدام ومفهوم للغاية. لذلك عندما كنت بحاجة لنقل البيانات من وحدة التحكم - لم أفكر طويلا في ما لاستخدام.

لأن لدي الكثير من المعلمات ، ثم كان هناك دائمًا تشويش في ملف تكوين البوابة ، حيث تم تسجيل تعيين نقاط التحكم لموضوعات بوابة mqtt. ساعد Google الجدول ، وكتابة محلل CSV من هذا الجدول في ملف تكوين json للعبّارة.
بوابة بوابة الريبومحلل بوابة ريبورصد نقطة الكتابة.
في بعض الأحيان يكون من المفيد للغاية معرفة ما يحدث مع نقاط التحكم ، لذلك قمت بكتابة تطبيق صغير يتصل مباشرة بنواة الاتصال وقراءة حالة النقاط المنفصلة والتناظرية. أنا مشدود إلى حد كبير مع واجهة المستخدم ، لذلك تمكنت من رمي التطبيق بطريقة أو بأخرى في QML ، لقد عملت مع صرير ، يمكنك حساب النقطة ، يمكنك كتابتها ، لكنني لست بحاجة إلى المزيد.
pointmonitor git repo: https://github.com/azhigaylo/pointmonitor
جبل نظام للقراءة فقط.
عادةً ما يهتم عدد قليل من الناس بهذا الأمر ، وحتى في مشاريع الإنتاج ، يمكنك العثور على أجهزة يمكن فيها تقسيم القسم باستخدام rootfs. هذا عاجلاً أم آجلاً يؤدي إلى تعطل نظام الملفات الأكثر استقرارًا. لأن نظرًا لأنه يمكن إيقاف تشغيل وحدة التحكم في أي وقت ، فهي مسألة وقت / حالة فقط عندما يحدث ذلك. لتقليل هذا الاحتمال إلى الحد الأدنى ، تحتاج إلى العبث قليلاً باستخدام fstab ، وقبل إنشاء صورة rootfs ، ضعها هناك ، كما هو موضح أعلاه. في fstab ، أولاً ، تحتاج إلى تحميل نظام الملفات بشكل للقراءة فقط ، وثانياً ، يمكن تعيين كل شيء يمكن تغييره إلى ملفات tmpfs.
fstab بلدي هو هذا ، قد يختلف بالنسبة لك:
/dev/root / auto ro 0 1 tmpfs /tmp tmpfs nodev,nosuid,size=50M 0 0 tmpfs /srv tmpfs nodev,size=50M 0 0 tmpfs /var/log tmpfs defaults,noatime,size=50M 0 0 tmpfs /var/tmp tmpfs defaults,noatime,size=50M 0 0 tmpfs /var/run tmpfs defaults,noatime,size=50M 0 0 tmpfs /var/lib tmpfs defaults,noatime,size=10M 0 0
هيئة تحكم
تم تضمين طابعة ثلاثية الأبعاد في أقسام التسمية الرئيسية لكل مهندس مزارع جماعي ، لكن للأسف لا أمتلكها ، لكنها تعمل. في الآونة الأخيرة ، اختفى إثارة الموظفين الآخرين بالنسبة له ، وأنا استخدم هذا عند طباعة كل ما أحتاج إليه ولا أحتاج إليه ، يمكن أن تكون مقتنعا بذلك من خلال قراءة منصبي السابق.
نرسم في FreeCAD ، نقوم بإنشاء الرمز في Cura ونحصل على حقيبة ، دون أن ننسى أن نجعل مقاعد للوحة ، وقواطع للموصلات والتبريد والرهون العقارية للمقاطع على السكك الحديدية din.


حسنًا ، هذا كل شيء ، الآن لدينا لوحة وبرنامج على بطاقة SD وحالة. نأخذ ملفًا (أنا لا أمزح) ونربط كل شيء معًا ، وربط الطاقة وكابلات RS485 وكل شيء يبدأ في العمل. وقلت الصعب ، الصعب ...