تطبيق MATLAB / Simulink مع المعدات المصنعة من قبل InSys JSC

من المهام العملية المهمة استخدام Matlab / Simulink مع معدات حقيقية تتيح لك تلقي إشارة من العالم الحقيقي. هذا مفيد جدا لتصحيح الخوارزميات. تقدم هذه الورقة تقنية توصيل أجهزة ADC المصنعة من قبل InSys JSC إلى Simulink. يتم استخدام DLL للاتصال ، وهو مرئي في Simulink كمكون sm_adc. يتم استخدام برنامج وحدة التحكم منفصلة للعمل مع المعدات. التواصل مع DLL هو من خلال الذاكرة المشتركة. وفقًا لهذه التكنولوجيا ، يمكن توصيل أي ADC على أي وحدات حاملة من InSys JSC. يقدم العمل نظامًا لمولد A7_DAC ووحدة اقتناء FMC128E / FM412x500M.

تم عرض هذا العمل في مؤتمر "تقنيات لتطوير وتصحيح النظم التقنية المعقدة" في 27-28 مارس 2018.





بيان المشكلة

يتطلب تطوير نظام من مولد إشارة و ADC من شأنه أن يولد إشارة مع المعلمات المعينة وترقيمها. يجب أن يتم نقل البيانات المستلمة إلى Simulink للمعالجة.

معدات

للعمل ، تم تجميع حامل من وحدة ADC والمولد. نظرًا لأن ADC ، يتم استخدام وحدة FM412x500M الفرعية التي توجد فيها أربع قنوات ADC بتردد أخذ العينات يبلغ 500 MHz. تم تثبيت الوحدة الفرعية على وحدة الموجة الحاملة FMC128E حيث يوجد Artix 7 FPGA وواجهة USB 3.0. كلا الجهازين متصلان بجهاز كمبيوتر محمول يشغل Simulink. لمراقبة الأداء ، بالطبع ، يتم استخدام الذبذبات.

مظهر الموقف:



المخطط الهيكلي للموقف:



إشارة ولدت:



خوارزمية الموقف:

  1. Simulink تستعد لإطلاق ADC والمولد
  2. Simulink يرشد المولد للبدء
  3. المولد يشكل ستروب (إشارة صفراء) والإشارة الفعلية (الأزرق)
  4. ADC على مقدمة البوابة يبدأ في جمع البيانات
  5. تجمع ADC الصفيف ويمررها إلى Simulink
  6. يعرض Simulink الإشارة المستلمة من ADC


هذا هو وضع جمع الكلاسيكية لمرة واحدة. خصوصية لها هو بالضبط منفردة. تجمع المعدات الموجودة على طول مقدمة الإشارة مجموعة بيانات معينة. تحدث مرحلة جمع البيانات في وضع "الوقت الحقيقي الصعب" ، ولكن المعالجة هي كيفية الحصول عليها. يتحدد معدل التجميع بعدد القنوات المختارة ومعدل أخذ العينات. بالنسبة لأربع قنوات ADC وتردد أخذ العينات يبلغ MHz 500 ، يبلغ معدل البيانات 4 غيغابايت / ثانية. في هذه السرعة ، يمكن كتابة البيانات إلى SODIMM من FMC128E. وهذا هو ، يمكن حفظ عينة 4 غيغابايت.

علاوة على ذلك ، ينبغي نقل البيانات إلى الكمبيوتر. وحدة FMC128E متصلة بالكمبيوتر عبر واجهة USB 3.0. معدل نقل البيانات هو 300 ميغابايت / ثانية.

يتلقى Simulink مجموعة من البيانات ويقوم بتمريرها لمزيد من المعالجة. يتم تحديد وقت هذه المعالجة بالفعل بواسطة تعقيد النموذج. في هذا المثال ، يتم عرض المصفوفة ببساطة على لوحة الذبذبات.

في مرحلة ما ، يقرر Simulink أنه من الضروري تنفيذ الدورة التالية ويتكرر كل شيء. مرة أخرى يتم إرسال أوامر USB لإعداد ADC ، لبدء المولد وجمع البيانات.

هذا الوضع مناسب جدًا لتصحيح أخطاء الأجهزة والخوارزميات. لا يمكنك التسرع في أي مكان. جمع مجموعة من البيانات. يمكنك أن تنظر إليها بهدوء وتحرقها على قرص وتشرب القهوة. ولكن عندما يتم عمل كل شيء ، فمن الممكن بالفعل التبديل إلى وضع التجميع المستمر.

اتصال DLL

يسمح لك Matlab بربط الوظائف المنفذة في DLL الخارجية. يتمتع Simulink أيضًا بالقدرة على توصيل DLLs الخارجية ، بينما يضيف بعض المتطلبات. داخل Simulink ، يشبه DLL الخارجية كتلة S-Function.



يوفر MATLAB عددًا كبيرًا من الأمثلة ، بما في ذلك إنشاء DLLs الخارجية. ومع ذلك ، فإن الطريقة التي توفرها MATLAB ليست مريحة للغاية. يوجد مشروع easyLink مفتوح المصدر. قام هذا المشروع بتطوير مكتبة صيفية للاتصال بـ Simulink.

لإنشاء مكون ، تحتاج إلى إنشاء فئة مشتقة من BaseBlock وتعلن المنافذ:





مشاكل اتصال DLL

DLLs الخارجية تسمح بالكثير ، ولكن هناك عدد من المشاكل عند العمل معهم. أهم بالنسبة لي شخصيا هي ما يلي:

  1. تصحيح DLL أمر صعب
  2. من المحرج مشاهدة إخراج printf ()
  3. يتطلب إعادة ترجمة DLL الخروج من MATLAB

عند تصحيح أخطاء برنامج ما ، يلزم تصحيح الأخطاء خطوة بخطوة. في حالة DLL ، من الممكن الاتصال بـ DLL الذي تم تحميله بالفعل في الذاكرة ، وتعيين نقطة توقف هناك ، وإجراء جلسة تصحيح الأخطاء. ولكن من الضروري التقاط لحظة تحميل DLL من خلال Simulink ، إلى حد ما تأخير بدء العمل. كل هذا يمكن القيام به ، ولكن غير مريح.

في هذه العملية ، أريد حقًا رؤية إخراج التصحيح الذي تم تكوينه كتدفق قياسي قياسي. في حالة مكتبة الارتباط الحيوي (DLL) ، يمكن بطريقة ما اعتراض هذا الخيط ، لكنني لم ينجح.

وأخيرًا ، أهم إزعاج هو الحاجة إلى إنهاء MATLAB عند إعادة ترجمة DLL. خلاف ذلك ، لا يمكنك فقط كتابة ملف جديد. والخروج والإطلاق اللاحق لـ MATLAB يستغرق الكثير من الوقت.

لحل هذه المشكلات ، هناك طريقة كلاسيكية لبناء أنظمة برامج معقدة. هذا هو التفاعل بين البرامج من خلال الذاكرة المشتركة.

اتصال الذاكرة المشتركة

تتيح لك أنظمة التشغيل الحديثة ، كلا من Windows و Linux ، تنظيم مناطق مشتركة من الذاكرة. هذا يسمح لك بإنشاء برامج موثوقة. على سبيل المثال ، قد يحتوي أحد البرامج على واجهة رسومية ويتفاعل مع المشغل ، وقد يتفاعل برنامج آخر مع الجهاز. في هذه الحالة ، لن يؤدي تجميد البرنامج الذي يتفاعل مع الجهاز إلى تجميد برنامج التفاعل مع المشغل. في حالة Simulink ، يوفر هذا النهج أيضًا بعض المزايا. سيتم إطلاق برنامج العمل مع الجهاز مرة واحدة ، وسيعد الجهاز وسينتظر الأمر من خلال الذاكرة المشتركة. سيتم تحميل DLL في كل مرة تقوم فيها بتشغيل Simulink على المحاكاة. نظرًا لأن مكتبة الارتباط الحيوي (DLL) لا تعمل مباشرةً مع الأجهزة ، فسيكون هذا الإطلاق سريعًا.

تم تطوير برنامجين و DLLs اثنين لهذا الموقف:

  1. simulink_a7dac - برنامج التحكم في المولد
  2. simulink_adc - برنامج التحكم ADC
  3. sm_ctrl - مولد التحكم DLL
  4. sm_adc - ADC السيطرة DLL


ويرد مخطط كتلة في الشكل أدناه:



يعتمد برنامج simulink_adc على مكتبة باردي. يتيح لك هذا البرنامج العمل مع أي ADC تصنعه InSys JSC. يتم التوليف إلى وحدة ADC ووحدة خدمة محددة من خلال ملفات التهيئة.

عرض مخطط في Simulink

وأخيراً ، ما يبدو داخل Simulink:



كل شيء يبدو كما هو الحال في Simulink. وحدة واحدة للتحكم ADC. الكتلة الثانية للسيطرة على المولد. وهناك عدد من المعلمات المتاحة للسيطرة على المولد. بالنسبة إلى ADC ، يكون كل شيء من خلال ملف التهيئة. إذا لزم الأمر ، يمكن أيضًا عرض عدد من معلمات ADC على مستوى الكتلة.

لاحظ اثنين من مؤشرات التذبذب الرئيسية. من حيث الوقت النموذجي ، فهي تحدد وقت البدء ولحظة جمع البيانات. هذه النقاط مهمة جدا. لقد قاموا بالفعل بتعيين الاتصال بين النموذج والعالم الحقيقي. تدخل إشارة البدء في كتلة ADC ، وتتم معالجتها في DLL. من خلال الذاكرة المشتركة ، يدخل برنامج ADC. ثم يتم تحويله إلى سلسلة من أوامر الكتابة إلى السجلات ، والتي تدخل عبر FPGA عبر USB. وداخل FPGA ، يتم اختصار حافة البحث الأمامية لإشارة البدء. وفقط بعد ضبط الجهاز في الاتجاه المعاكس ، يمر التأكيد عبر نفس السلسلة. عندما يصل التأكيد إلى Simulink ، ستظهر إشارة start_out عند إخراج كتلة sm_adc ، والتي سيتم تمريرها إلى كتلة sm_ctrl. وسيكون كل نفس الوقت من الوقت النموذجي. في كتلة sm_ctrl ، على طول نفس السلسلة ، سيتم إرسال الإشارة إلى FPGA للمولد وستكون الإشارة. سوف ADC التقاط هذه الإشارة في ذاكرتها. سيتم إنشاء إشارة الحصول على البيانات من المذبذب الرئيسي الثاني. بنفس الطريقة ، تنتقل البيانات إلى Simulink وتذهب إلى إخراج البيانات في كتلة sm_adc. في الوقت الحالي ، يتم إرجاع كتلة من 16384 التهم. يتم عرض الكتلة المستلمة على مرسمة الذبذبات.



النتائج

لقد ثبت أن العمل من خلال الذاكرة المشتركة فعال. يتيح لك برنامج إدارة ADC العمل مع أي من الشركات الإعلانية التابعة لنا. في الوقت نفسه ، تظل هناك طريقة مناسبة لتكوين المعلمات من خلال ملف التكوين. تم تصميم البرنامج كتطبيق وحدة التحكم ، في حين أن جميع إخراج التصحيح مرئية. هناك إشارة إلى قابلية التشغيل. يتيح لك مكون SM_CTRL توصيل التطبيقات الخارجية المختلفة للتحكم في المعدات. تصحيح برنامج التحكم ADC لا يسبب أي صعوبات. هذا برنامج شائع حيث يمكنك تعيين نقاط التوقف والتصحيح. باستخدام نفس التكنولوجيا ، يمكن تطوير برامج أخرى للتفاعل بين Matlab / Simulink والعالم الخارجي.

يتم نشر العمل على موقع hub.exponenta.ru ؛

المراجع:
  1. مشروع SIMULINK_SM - شفرة مصدر البرنامج: https://github.com/dsmv/simulink_sm
  2. مشروع EasyLink: https://sourcesup.renater.fr/frs/؟group_id=1500
  3. وحدة الناقل FMC128E http://insys.ru/fmc/fmc128e
  4. وحدة فرعية FM412x500M http://insys.ru/mezzanine/fm412x500m
  5. قناة برقية InSys Research

Source: https://habr.com/ru/post/ar470327/


All Articles