هدفنا: صُممت هذه المكتبة لمساعدتك في بناء وحدة تحكم منطقية قابلة للبرمجة (PLC) خاصة بك. تهدف إلى إنشاء منظومة متكاملة من الأجهزة القابلة للبرمجة باستخدام برنامج Fulmatic SOFT ، مما يمنحك تحكمًا كاملًا في مكوناتك . يمكنك استخدام هذه المكتبة الشاملة مع أي شريحة وبيئة تطوير متكاملة (IDE) تختارها. كما يمكنك تحديد مخطط الدائرة وجميع مواصفات الأجهزة الأخرى بنفسك.
برنامج Fulmatic SOFT: أضف مكتبة Fulmatic Core إلى كود الشريحة الخاص بك وفقًا للتعليمات، وبذلك يمكنك برمجة أنظمتك المدمجة باستخدام Fulmatic SOFT ولغة السلم ( IEC 61131-3 ). يوفر لك Fulmatic SOFT أكثر من مجرد وحدة تحكم منطقية قابلة للبرمجة (PLC)، فهو يضم جميع ميزات وحدات التحكم المنطقية القابلة للبرمجة الحديثة، بالإضافة إلى أوامر TCP وUDP والحركة وبطاقة SD. يوفر لك Fulmatic SOFT مساحة عمل واسعة تضم 771 كتلة (255 قاعدة بيانات، 256 كتلة معالجة، 256 كتلة وظائف، و4 كتل تخزين) و16384 منفذ إدخال/إخراج.
برنامج PLC الثابت مجاني: يمكنك استخدام مكتبة PLC مجانًا حتى 2048 بايت (1026 بايت مستخدمة بواسطة DB0). إذا كنت بحاجة إلى ذاكرة أكبر، فيجب عليك شراء ترخيص (10 دولارات أمريكية) . بدون ترخيص، سيعمل PLC لمدة 60 دقيقة. نموذج الترخيص الشفاف لدينا لا يتضمن عقودًا أو إجراءات معقدة. يجب عليك إضافة شريحة TSHA204A-SSHDA إلى دائرتك. عند شراء الترخيص، ستتلقى مفتاحًا. سيتصل تطبيق الترخيص بخادمنا باستخدام هذا المفتاح ويرفع رمز الترخيص إلى الشريحة عبر منفذ تسلسلي أو إيثرنت. سينخفض عدد تراخيصك على الخادم تلقائيًا.
جيت هاب: يمكنك تنزيل مشروعنا التجريبي المُعدّ باستخدام VS Code لـ STM32F407VGTx من جيت هاب لاختبار مكتبة PLC . https://github.com/FultekPLC/Plc-Firmware
ستجد في هذا المشروع برنامج PLC الثابت الكامل، الذي يستغل جميع ميزات الشريحة تقريبًا، وهو متاح كمصدر مفتوح. يمكنك تعديل مواصفات الشريحة باستخدام برنامج Cube MX ومواصلة العمل على المشروع نفسه. كما يمكنك تغيير مواصفات الأجهزة والبرامج باستخدام VS Code. يمكنك إضافة وظائف مخصصة إلى برنامج PLC الثابت وتشغيلها من داخل كود PLC . يمكنك استخدام أي علامة تجارية أو طراز من شرائح ARM، مع تحديد عدد وأنواع منافذ الإدخال/الإخراج. باختصار، يمكنك استخدام مكتبة Fulmatic Core دون أي قيود، وفقًا لشروط الترخيص.
تحديث البرامج الثابتة: يمكن لعملاء منتجك تحديث البرامج الثابتة لوحدة التحكم المنطقية القابلة للبرمجة (PLC) باستخدام برنامج Fulmatic SOFT. شفرة تحديث البرامج الثابتة لوحدة التحكم المنطقية القابلة للبرمجة مفتوحة المصدر بالكامل، ويمكنك الاطلاع على شفرة برنامج الإقلاع وتعديلها في المشروع النموذجي. بالإضافة إلى الشفرة التي نوصي بها، يمكنك كتابة شفرة برنامج الإقلاع الخاصة بك.



دليل التعليمات البرمجية
نعمل على تبسيط استخدام مشروع العينة بحجم 256 كيلوبايت . يُعدّ هذا الحجم من التعليمات البرمجية لشريحة إلكترونية مشروعًا ضخمًا، ولن يكون فهمه وتعديله وتنفيذه أمرًا سهلاً. لقد حاولنا شرح الوظائف في هذه الصفحة وفي التعليمات البرمجية، ونعمل حاليًا على تحسين شرحها. سنحاول الإجابة على أسئلتكم قدر الإمكان في قسم المناقشات في مستودعنا على GitHub. مع الأسف، لا نقدم دعمًا مجانيًا لـ Fulmatic Core. يمكنكم طلب عرض سعر منّا لإدارة جميع العمليات نيابةً عنكم، بما في ذلك تصميم لوحة الدوائر.
يمكنك تنزيل المشروع التجريبي من رابطنا على GitHub: https://github.com/FultekPLC/Plc-Firmware. يتيح لك هذا المشروع التجريبي استعراض جميع ميزات وحدة التحكم المنطقية القابلة للبرمجة (PLC) وتعديلها باستخدام شفرة المصدر المفتوح. كما يمكنك حذف الوظائف غير الضرورية وإضافة وظائف جديدة.
يمكنك العثور على جميع المعلومات المتعلقة ببيئات التطوير المتكاملة وأدوات البناء في مستودعنا على GitHub. في هذه الصفحة، سنشرح الوظائف المستخدمة لدمج المكتبات مع كود وحدة التحكم الدقيقة (MCU) الخاص بك.
FulmaticConfig.h
يتم تحديد إصدار البرنامج الثابت وحجم السلسلة في هذا الملف.
FulmaticCore.h
يحتوي هذا الملف على رؤوس الدوال الموجودة في المكتبة والتي ستستدعيها من كود وحدة التحكم الدقيقة (MCU). ستجد وصفًا لجميع الدوال في هذا الملف. تتعامل المكتبة مع العديد من المتغيرات والسلاسل النصية، لذا يجب عليك إنشاء هذه السلاسل والمتغيرات في كود وحدة التحكم الدقيقة (MCU). يُستخدم هيكل `variables_TypeDef` لتمرير المتغيرات التي تُنشئها إلى المكتبة، ولا يمكنك تعديل هذا الهيكل.
FulmaticInit : لا يلزم تشغيل هذا الأمر إلا مرة واحدة عند تشغيل الشريحة لأول مرة. تشير القيمة 1 إلى أنه تمت قراءة شريحة الترخيص بشكل صحيح وأنها تعمل بموجب ترخيص.
FulmaticExecute هي دالة تُستدعى داخل الملف main.c لتنفيذ كود سلم PLC . يتم استدعاؤها أثناء كتلة بدء التشغيل (عند بدء تشغيل PLC)، والكتلة الرئيسية (في كل دورة)، وكتلة الإيقاف (عند توقف PLC)، وعند حدوث مقاطعة إدخال رقمي داخل الملف Interrput.c، وعند حدوث مقاطعة زمنية (Timer) داخل الملف Fulmatic.c.
Fulmatic.c
جميع الدوال اللازمة لاستخدام المكتبة في برنامجك موجودة في ملف Fulmatic.c. يتفرع هذا الملف إلى ملفات أخرى. نُصنّف الدوال تحت أربعة عناوين رئيسية. تُكتب أوصاف الدوال في الملف الذي يحتوي على متن الدالة.
- الوظائف المطلوبة للمشروع النموذجي والتي لا تستخدمها المكتبة.
- الوظائف التي تستخدمها المكتبة والتي يجب تضمينها في التعليمات البرمجية الخاصة بك.
- الوظائف التي تستخدمها المكتبة لأغراض الترخيص. الوظائف غير المطلوبة للاستخدام غير المرخص.
- تعتمد وظائف المكتبة على أوامر وحدة التحكم المنطقية القابلة للبرمجة (PLC) المستخدمة. على سبيل المثال، إذا لم تُستخدم عمليات مثل TCP وUDP وSPI والمنفذ التسلسلي وبطاقة SD في وحدة التحكم المنطقية القابلة للبرمجة (PLC)، فستعمل المكتبة بدون هذه الوظائف.
_DefaultEprom: تُخزَّن إعدادات الأجهزة القابلة للتحديد باستخدام برنامج Fulmatic SOFT في مصفوفة PlcSetupEprom[STPMEMORYSIZE] ومصفوفة كود السلم ، PlcEprom[PRGMEMORYSIZE]. تحتوي الدالة _DefaultEprom في هذا الملف على الإعدادات الافتراضية لوحدة التحكم المنطقية القابلة للبرمجة (PLC). يمكنك تخصيص التكوين إلى حدٍّ ما باستخدام هذه المصفوفات في الكود الخاص بك.
`_EachMilliSecond`: تُنفَّذ هذه الدالة، التي تعمل كل ميلي ثانية، من داخل الملف الرئيسي والمكتبة. في المشروع النموذجي، تُضبط العلامات باستخدام `TIM7_IRQHandler` في `Interrupt.c`، وليس مباشرةً. بالإضافة إلى ذلك، تُعاير قيمة `TIM7->ARR` باستخدام ساعة الوقت الحقيقي (RTC). يُرجى مراجعة الدالة `_RtcCalibration` في `Fulmatic.c`. سيؤدي عدم دقة المعايرة إلى تشغيل جميع العمليات الزمنية في وحدة التحكم المنطقية القابلة للبرمجة (PLC) بأخطاء طفيفة.
_DelayUs: قد تحتاج إلى تعديل الكود لضمان ضبطه بدقة وفقًا لتردد الشريحة. يُنصح باختباره ومعايرته على مدى فترة طويلة. تمت معايرته لتردد 168 ميجاهرتز.
_SetOutputs: عادةً، تُقرأ المدخلات وتُكتب المخرجات داخل ملف main.c. ولكن، عند حدوث مقاطعات زمنية أو مقاطعات إدخال رقمية، يتم تفعيل كتلة المقاطعة OB2. ثم يتم استدعاء هذه الكتلة من داخل المكتبة لضبط المخرجات دون تأخير.
_GetMsTimerCount : تُستخدم لقياس المدة في العديد من العمليات. يجب أن تكون موجودة في التعليمات البرمجية الخاصة بك. عليك تفعيل قراءة قيمة المؤقت بالمللي ثانية.
_CrcCalculate: تُستخدم لحساب مجموع التحقق باستخدام المكونات المادية. يجب التأكد من أنها تعمل بشكل صحيح حسب الشريحة المستخدمة.
الاتصال.ج
يحتوي هذا الملف على الشيفرة اللازمة لاستخدام الإيثرنت، والمنفذ التسلسلي، وواجهة SPI داخل وحدة التحكم المنطقية القابلة للبرمجة (PLC). ويستقبل هذا الملف استدعاءات Modbus وبرنامج Fulmatic SOFT. ويتم ضمان اتساق البيانات من خلال بدء الاستجابة بتأخير زمني من الملف main.c. بالإضافة إلى ذلك، كُتبت شيفرة تحديث البرامج الثابتة وبطاقة SD بشكل صريح في هذا الملف. يُجري برنامج Fulmatic SOFT تحديثات البرامج الثابتة وعمليات بطاقة SD باستخدام هذه الشيفرة. يمكنك تعديل هذه الشيفرة لتنفيذ عمليات مماثلة باستخدام برنامجك الخاص بدلاً من Fulmatic SOFT. تُرسل عمليات Fulmatic SOFT الأخرى وعمليات Modbus إلى المكتبة ويتم الرد عليها من خلالها عبر هذه الشيفرة. بتعديل الشيفرة، يمكنك أيضًا الرد على استدعاءات Modbus دون إرسالها إلى المكتبة.
Flash.c
يتم حفظ كود وحدة التحكم المنطقية القابلة للبرمجة (PLC) ومعلومات عداد المؤقت الدائم في ذاكرة الفلاش عند إيقاف تشغيلها. عند إعادة تشغيلها، يُقرأ آخر كود محفوظ من ملف flash.h. تذكر ضبط معلومات القطاع للشريحة المستخدمة. يمكنك استخدام الدائرة التالية للكشف عن إيقاف تشغيل وحدة التحكم المنطقية القابلة للبرمجة.

ستقوم هذه الدائرة بخفض مستوى إشارة طرف كشف الإيقاف عند انخفاض الجهد من 24 فولت إلى حوالي 19 فولت. يسمح المكثف C1 للشريحة بمواصلة العمل لفترة وجيزة. خلال هذه الفترة الممتدة، يُعد مسح ذاكرة الفلاش وإعادة كتابتها أمرًا محفوفًا بالمخاطر. لذلك، يجب اتباع الخطوات التالية.
- عند تشغيل وحدة التحكم المنطقية القابلة للبرمجة (PLC) لأول مرة، نقوم بنسخ القطاع 10 إلى القطاع 11. إذا انقطع التيار الكهربائي أثناء بدء التشغيل، فسيتم تخزين البيانات السليمة في القطاع 11.
- لحفظ بيانات جديدة في ذاكرة الفلاش، يجب أولاً حذفها. تستغرق عملية الحذف وقتًا أطول بكثير من عملية الحفظ. لذلك، نقوم بحذف القطاع 10 عند بدء التشغيل وننتظر إيقاف التشغيل.
- تُتيح لنا دائرة كشف الإيقاف مدة زمنية تزيد قليلاً عن ثانية واحدة. عند اكتشاف الإيقاف، تُحفظ البيانات في القطاع 10 خلال 100-200 مللي ثانية. ولأنّ كتلة الإيقاف OB 1 ستعمل قبل الإيقاف، وقد يحتوي مُتحكّم PLC على كود مُعقّد، يجب ألا تقلّ سعة المُكثّف C1 عن 2200 ميكروفاراد. ويُستخدم مُقاوم لتحديد التيار بقيمة 100 أوم لمنع حدوث صدمة كهربائية في الدائرة نتيجةً للسعة الكبيرة.
- عند بدء تشغيل وحدة التحكم المنطقية القابلة للبرمجة (PLC)، تقرأ جميع البيانات في القطاع 10 وتُجري فحصًا للتحقق من المجموع الاختباري. في حال انقطاع التيار الكهربائي أثناء بدء تشغيل وحدة التحكم، سيفشل فحص المجموع الاختباري. لا داعي للقلق، فالبيانات الموثوقة متوفرة دائمًا في القطاع 11. يتم بدء التشغيل تلقائيًا من القطاع 11.
Interrupt.c
يحتوي هذا الملف على مدخلات رقمية، ومحول تناظري رقمي، ومؤقت، ومقاطعات UART. يتم تفعيلها وتعطيلها وفقًا لوضع تشغيل وحدة التحكم المنطقية القابلة للبرمجة (PLC) في الدالة _INTSetup ضمن ملف Fulmatic.c. تذكر تعديل كود _INTSetup ليتناسب مع جهازك. يجب أن تعمل الدوال في هذا الملف بسرعة. في مثال الكود الخاص بنا، استخدمنا الأمر switch لتحسين سهولة قراءة الكود. مع ذلك، توجد طرق لتسريع تشغيله. على سبيل المثال، يمكن كتابة العمليات داخل الأمر switch كدوال منفصلة.
- void Handle_Encoder(void)
- void (*EXTI0_Handler_Ptr)(void);
- بناءً على الاختيار الذي تم إجراؤه باستخدام Fulmatic SOFT في INTSetup: EXTI0_Handler_Ptr = Handle_Encoder;
- عند حدوث مقاطعة: قم بتشغيل EXTI0_Handler_Ptr(); داخل EXTI0_IRQHandler.
هناك طريقة أخرى لتسريع العمليات وهي تحويل البيانات من بايت إلى 32 بت. يمكنك استخدام هذا الكود لسلسلة STM: *(int32_t *)&PlcIO[EncIAdr[0]] = __rev(ValueS32);
لا ينبغي استخدام مكتبة HAL لمسح علامات المقاطعة. بدلاً من ذلك، يُفضّل استخدام الطريقة الأسرع المتمثلة في تعديل قيمة السجل مباشرةً. TIM3->SR = 0; //__HAL_TIM_CLEAR_IT(htim, TIM_IT_UPDATE);
مقاطعات الإدخال الرقمي: تستخدم للعدادات عالية السرعة، وأجهزة التشفير، والتطبيقات المماثلة.
محول الإشارة التناظرية إلى الرقمية: لا نستخدم الوصول المباشر إلى الذاكرة؛ بل نجري عمليات قراءة محول الإشارة التناظرية إلى الرقمية داخل المقاطعة. وهذا يسمح لنا بإجراء عمليات التصفية.
المؤقت: نستخدم هذا المؤقت لمدة ميلي ثانية واحدة ومخرجات PTO. لا يكفي أن يتوقف المؤقت كل ميلي ثانية فحسب، بل يجب أن يعدّ أيضًا من 0 إلى 999.
USART: تُستخدم مقاطعات المنفذ التسلسلي لنقل البيانات واستقبالها. بالإضافة إلى ذلك، يحتوي الملف Fulmatic.c -> _EachMilliSecond على عمليات تفعيل دبابيس RS485.
SdCard.c
تُجرى عمليات بطاقة الذاكرة SD في هذا الملف. يمكنك أيضًا القيام بذلك بطريقة مختلفة عن مشروعنا النموذجي. كُتبت أكواد الاتصال لتحميل أو تنزيل الملفات إلى وحدة التحكم المنطقية القابلة للبرمجة (PLC) بلغة مفتوحة المصدر ضمن ملف Communication.c. يمكنك تحميل وتنزيل الملفات باستخدام برنامج Fulmatic SOFT. إذا لم يكن مشروعك مزودًا ببطاقة ذاكرة SD، فيمكنك حذف جميع الوظائف.
ج الرئيسية
سيتغير هذا الملف في كل مرة تحفظ فيها المشروع باستخدام Cube MX. لضمان بقاء أوامرك دون تغيير، يجب عليك كتابة التعليمات البرمجية في المساحات المخصصة لها في Cube MX. /* بداية التعليمات البرمجية للمستخدم 2 */ اكتب التعليمات البرمجية هنا. /* نهاية التعليمات البرمجية للمستخدم 2 */
يمكنك إنشاء جميع المتغيرات المطلوبة للمكتبة في هذا الملف. قد تحتاج إلى إنشاء مصفوفات كبيرة عند عنوان محدد. `uint8_t PlcEprom[PRGMEMORYSIZE] __attribute__((section(“.ccmram”))));`
افحص العمليات داخل حلقة التكرار "while" بدقة. يجب ألا تُخلّ أي تغييرات تُجريها بالبنية العامة للبرنامج. كما يجب ألا يُبطئ الكود المكتوب في أجزاء أخرى من البرنامج هذه الحلقة.
