marocautomatique عريف
عدد الرسائل : 16 العمر : 35 تاريخ التسجيل : 07/07/2014
| موضوع: شرح بسيط ل indirect addressing الإثنين 11 مايو 2015 - 8:33 | |
| الطريقة اﻷكثر شيوعا للعنونة في step7 هي بدون الشك العنونة المباشرة و العنونة بالرموز symbolic addressing, في هذه الحالة تكون الذاكرة المراد استعمالها معروفة مسبقا و هذه أمثلة للعنونة المباشرة :
INPUT : I0.0; IB10; IW20; ID40
OUTPUT : Q0.0; QB30; QW50; QD60
MARKERS : M124.0; MB132; MW200; MD300
TIMERS: T2; T54
COUNTERS : C30
LOCAL : L0.1; LB52; LW300; LD30
DATA BLOCK : DB5.DBX4.0; DB6.DBB2; DB20.DBW6; DB60.DBD4
لكن قد يقتضي الامر استعمال العنونة غير المباشرة و ذلك لعدة اسباب نذكر منها على سبيل المثال لا الحصر :
تقليص عدد التعليمات في برنامج ما و بالتالي تقليص حجم البرنامج
تمرير البيانات الغير معروفة حتى وقت التشغيل
مع هذا يبقى استعمال العنونة غير المباشرة محفوفا بالمخاطر ان صح التعبير لاسيما و ان استعماله بدون حذر قد يؤدي الى تجاوب غير منتضر من قبل الحاكم المنطقى زد على ذلك ان تتبع الاعطال يصبح اكثر صعوبة
لذلك يتوجب استعماله بحذر و ان يستعمل في العمليات الحسابية ان كانت هذه الاخيرة طويلة
سنستعرض ان شاء الله تعالى بعض الشروحات اللتى اود ان يصححها الاخ مدير هذا المنتدى او ان يعلق عليها على الاقل للتاكد من سلامتها من الاخطاء و ذلك لكي نقدم ان شاء الله مادة مفيدة.
و سوف استعرض في الاخير ان شاء الله برنامجا قمت بصياغته بعون الله و اللذي يشعل مخارج الحاكم الواحدة تلو الاخرى حيت يمكننا اختيار تردد اشتعال المخارج.
مميزات العنونة غير المباشرة كثيرة فهي تقلص عدد التعليمات بشكل ملحوظ و تستعمل ايضا في بعض الدوال المبرمجة مسبقا و التي توجد في step7 library كالدالة بلوك موڤ (BLOCK MOVE) التي تعمل على نقل و ارسال مساحات كبيرة من الذاكرة.
قبل ان نخوض في التفاصيل يجب ان نفهم اولا عنصرا مهما في البرمجة و اود من كل من له دراية بهذا الامر ان يدلي بدلوه حتى نصل الى شرح ممل لهذا الجزء الذي هو المؤشر the pointer
THE POINTER
هذا العنصر المهم الذي لا يتجزء عن البرمجة و هو يستعمل لتشكيل عدد يستعمل في شكل عنوان عوضا عن قيمة، هذا يعني ان العدد او القيمة المخزنة في المؤشر هي عنوان لمكان ما في الذاكرة و ليست قيمة محضة و يكتب المؤشر مسبوقا ب #P
اذن فالمؤشر يحوي عنوان لذاكرة ما قد تكون مدخل، مخرج، ميركر، داتا بلوك، جزء من داتا بلوك، عداد، تايمر الخ و تنقسم المؤشرات في step7 الى 3 انواع :
1-Memory Indirect Addressing
اول طريقة لاستخدام العنونة غير المباشرة هي memory indirect addressing حيث انها تسمح لذاكرة ما ان تحدد او ان تؤشر لعنوان ذاكرة اخرى و تستعمل بهذا الشكل : [operation identifier [memory مثلا [L T [MW2
و هذا يعني : حمل قيمة التايمر اللذي رقمه متواجد في MW2 فلو كانت القيمة المخزنة في MW2 تساوي 4 مثلا فسوف يحمل قيمة الزمن المتواجدة في T4.
عند استعمال هذه الطريقة يجب مراعاة نوع البيانات التي نتعامل معها ف مثلا عند التعامل مع T, C, DB, DI, FB and FC يجب ان يكون حجم الذاكرة المستخدمة للإشارة الى العناوين السابق ذكرها 16 بت اي WORD لذلك فقد استخدمت MW2 و لم استخدم MB2.
هذه بعض الامثلة:
L 5 T MW2 [L T [MW2
حمل القيمة 5 في ACCU1
ارسل محتوى ACUU1 الى MW2
حمل قيمة التايمر المحدد بواسطة MW2 اي T5 [OPN DB [#DB_Temp
إفتح الداتا بلوك اللذي رقمه موجود في المتغير DB_Temp#
[CALL FC[MW6
نادي على الدالة المشار اليها بالرقم المتواجد في MW6هذا في ما يخص T, C, DB, DI, FB and FC. اما بالنسبة لI, Q, M, L, DB فينطبق عليهم ما ينطبق على ما سبق باستثناء استعمال ذاكرة بحجم 32-bits بدلا من 16-bits
و هذه بعض الامثلة :
L P#0.5 T MD4 [A I[MD4 [Q[MD4=
حمل ACUU1 بالمؤشر P#0.5
ارسل محتوى ACUU1 الى MD4
إستجوب المدخل المشار إليه بواسطة MD4 في هذه الحالة I0.5
ارسل حالة المدخل I0.5 الى المخرج Q0.5 OPN DB 3
L P#4.0
T #TempPointer
[L DBW [#TempPointer
L 0
D<
افتح الداتا بلوك DB3
حمل المؤشر P#4.0 في ACUU1
ارسل المؤشر الى الذاكرة المؤقته TempPointer#
حمل WORD اللذي رقمه موجود داخل الذاكرة المؤقته TempPointer#
العمليات على المؤشرات :
يمكن تطبيق الجمع على المؤشرات بإستخدام التعليمة D+ و المثال التالي يوضح ذلك :
L P#3.0
L P#4.0
D+
T MD 6 //الآن تحتوي MD6 على P#7.0
عدل سابقا من قبل marocautomatique في الإثنين 11 مايو 2015 - 9:35 عدل 1 مرات | |
|
RAMA رائد
عدد الرسائل : 276 العمر : 54 الموقع : almadinah almnora العمل/الترفيه : PLC PROGRAMMER تاريخ التسجيل : 25/06/2008
| موضوع: رد: شرح بسيط ل indirect addressing الجمعة 15 مايو 2015 - 4:17 | |
| السلام عليكم اكمل الموضوع ان امكن واذا يوجد امثلة اخرى عملية اذكرها شكرا لمجهودك | |
|