|
| دورة تدريبية في الحاكمات المنطقية قابلة للبرمجة طرازSiemens S7 300,400 | |
| | كاتب الموضوع | رسالة |
---|
Admin Admin
عدد المساهمات : 156 نقاط : 9772 السٌّمعَة : 0 تاريخ التسجيل : 09/02/2012 العمر : 41
| موضوع: دورة تدريبية في الحاكمات المنطقية قابلة للبرمجة طرازSiemens S7 300,400 الجمعة مارس 09, 2012 12:23 pm | |
| سوف نبدأ إن شاء الله دورة تدريبية في الحاكمات المنطقية قابلة للبرمجة طراز Siemens S7 300,400 أولا : لابد أن يكون للمتدرب معرفة بأسس الدوائر الكهربية ومصطلحاتها ثانيا : لابد أن يكون عند المتدرب فكرة ولو بسيطة عن نظم الترقيم - العشري , الثنائي , السداسي عشري , ... ثالثا : لابد أن يكون لدى المتدرب معرفة ولو بنسبة بسيطة عن اللغة الانجليزية رابعا : أن يكون لدى المتدرب معرفة ولو بسيطة بالحاسب الآلي ومصطلحاته خامسا : يفضل أن يكون لدى المتدرب معرفة سابقة بنظم التحكم العادية باستخدام الدوائر الكهربية المعتادة سادسا : لابد أن يكون لدى المتدرب الرغبة والعزيمة في التغلب على أي نقص أو قصور في الجوانب والمتطلبات السابق ذكرها ووجود هدف واضح من حضور هذه الدورة وفقنا الله وإياكم دائما برنامجنا للدورة : - سوف يتم إدراج موضوع جديد يوم بعد يوم إن شاء الله - سوف يتم نقل الموضوعات السابقة إلى الأرشيف لإمكانية الرجوع إليها ممن يلحق بنا بعد ذلك - سوف نعطي للموضوعات اسم الدرس رقم - ... ثم نتبع الاسم برقم الدرس - سوف ننتظر الردود والتعليقات من الأخوة الأعضاء والزوار وذلك لتطوير الموضوعات أو طريقة العرض - بعد الانتهاء سوف يكون هناك ورشة عمل بوضع أمثلة وعرض حلها في ميعاد الدرس التالي - في المرحلة الأخيرة سوف يتم عرض امتحان بسيط لمن يرغب في اختبار نفسه وترسل الإجابات على البريد الخاص بي وسوف أرسل بالتالي الرد إذا طلب هذا بالإجابة من وجهة نظري وتقييمي للإجابة ونتمنى من الله التوفيق والاستمرار ولكم مني خالص التحية | |
| | | Admin Admin
عدد المساهمات : 156 نقاط : 9772 السٌّمعَة : 0 تاريخ التسجيل : 09/02/2012 العمر : 41
| موضوع: رد: دورة تدريبية في الحاكمات المنطقية قابلة للبرمجة طرازSiemens S7 300,400 الجمعة مارس 09, 2012 12:32 pm | |
| اليوم سوف نبدأ فعليا في كيفية عمل برنامج بواسطة Simatic s7 من المفروض بعد أن قمنا بتنزيل البرنامج أن يكون لدينا الآن وسيط التعامل مع PLC كذلك لدينا ما يمكن أن ننفذ فيه البرنامج الذي سوف نكتبه والآن نبدأ في كيفية إنشاء أول مشروع لنا ولنجعل هذا المشروع مع النوع S7-300 - أولا نقوم بتحديد عدد Inputs/Outputs التي سوف نستخدمها ونوعها بالتحديد لنفترض أن النظام الذي لدينا به 40 دخل - Input - وعدد 20 خرج - Outputs - بناء على ذلك سوف نقوم بتحديد المكونات اللازمة كالآتي : * مصدر جهد كهربي طراز Siemens - 5A * وحدة CPU S7-314 * عدد 3 موديول دخل 16 طرف Digital input module 16 input 24 VDC * عدد 2 موديول خرج 16 طرف Digital output module 16 output 24VDC/0.5A * راك Rail لتثبيت المكونات عليه نقوم بفتح البرنامج ونختار من قائمة file --> new project ندخل اسم المشروع الجديد وليكن example1 سوف يقوم البرنامج بفتح مشروع جديد بالاسم example1 ويفتح نافذة للمشروع وتكون جميع بياناته خالية من قائمة insert اختر station ثم اختر s7-300 plc سوف يظهر تحت اسم المشروع سطر آخر يمثل منظومة PLC S7-300 اضغط عليه مرتين سوف يظهر في النافذة المجاورة Hardware configuration وهو الذي سوف نستعمله لإدخال بيانات مكونات النظام التي اخترناها من قبل اضغط على Hardware configuation سوف يفتح نافذة جديدة بها مكان لإدخال المكونات أول شئ من قائمة insert نختار Rail سوف يفتح نافذة تمثل Rail بها 11 مكان وبعد ذلك ندخل المكونات المكان رقم-1 محجوز لمصدر الجهد Power supply نقف عليه وبزر الماوس اليمين تظهر قائمة نختار insert سوف يفتح قائمة للاختيار بها كل أنواع مصادر الجهد الممكن استعمالها من انتاج سيمنس نقف على المكان رقم 2 وهو المحجوز لوحدة CPU ونضغط ماوس يمين ونختار insert تفتح قائمة اختيار تشمل كل أنواع CPU الممكن استعمالها نختار منها CPU S7-300 ثم أي CPU 314 هناك أرقام موديلات خاصة بسيمنس تظهر مع كل وحدة منها مثلا 6ES7 314-1AE04-0AA0 سوف نركز الآن على الأرقام الثلاثة على يمين 6ES7 هنا هي 314 فإذا كان الرقم المئات 3 فهو يمثل S7-300 وإذا كان رقم العشرات صفر 0 كان يمثل مصدر جهد وإذا كان رقم العشرات 1 فهو يمثل CPU وإذا كان رقم العشرات 2 فهو يمثل موديول رقمي دخول أو خروج وإذا كان رقم العشرات 3 فهو يمثل موديول تناظري Analog دخول أو خروج أما رقم الآحاد فهو خاص بكل نوع أما الأرقام الخمسة التالية فلها علاقة برقم الإصدار وجهد التشغيل والمواصفات الفنية الأخرى للجزء لن نهتم بها الآن بعد أن أدخلنا رقم CPU في الخانة رقم 2 نترك الخانة رقم 3 خالية حيث أنها محجوزة لوحدات التوصيل بين أكثر من راك عند الحاجة إلى ذلك ونبدأ من رقم 4 ماوس يمين ثم insert ونختار SM300 و هو يشمل جميع وحدات الإدخال والإخراج ومنها نختار Digital input module ثم نختار الموديول المطلوب Digital input module sm321 16/24VDC ثم نكمل بنفس الطريقة إلى أن ننتهي من جميع المكونات مع ملاحظة أنه في الأجزاء المتماثلة يمكن استعمال Copy/past كذلك يجب ملاحظة وجود نافذة أسفل الشاشة يظهر فيها نفس المكونات التي نختارها مع وجود تفاصيل عليها نهتم منها الآن بخانة Address ونقوم بتسجيل Addresses التي تظهر لكل من المكونات بعد الانتهاء نغلق النافذة وهكذا نكون قد أدخلنا المكونات إلى البرنامج في انتظار التعليقات قبل الخطوات القادمة إلى اللقاء - السلام عليكم ورحمة الله وبركاته | |
| | | Admin Admin
عدد المساهمات : 156 نقاط : 9772 السٌّمعَة : 0 تاريخ التسجيل : 09/02/2012 العمر : 41
| موضوع: رد: دورة تدريبية في الحاكمات المنطقية قابلة للبرمجة طرازSiemens S7 300,400 الجمعة مارس 09, 2012 12:33 pm | |
| لابد أن نعرف أن كل ما نريد تنفيذه من برامج أو تعليمات أو بيانات تكتب داخل ما يسمى Blocks ولها أنواع عديدة في Simatic S7 كالآتي : Organization blocks OB Function blocks FB Functions FC Data blocks DB System function SFC System function blocks SFB وسوف نتعرض في هذا الدرس بشرح كل نوع على حده OB-Organization block وهو بكل بساطة يمثل الوسيط بين CPU و البرنامج ولا يتم تنفيذ أي تعليمات أو برنامج مالم تكن متضمنة بشكل ما في أي OB والبلوك الأساسي الذي يشمل البرنامج هو OB1 وهو يشمل ما يتم تنفيذه كل دورة من دورات تنفيذ البرنامج حيث يتم تنفيذ البرنامج بشكل متسلسل أولا بأول ثم يعاد التنفيذ بعد ذلك ووقت تنفيذ دورة كاملة للبرنامج يطلق عليه one cycle time وهناك بلوكات خاصة بالقطع المفاجئ للتسلسل بشكل دوري Real time interrupts وهي أيضا من فصيلة OB ويكون عددها بحسب نوع CPU المستعملة وهي من OB31 وحتى OB40 ويمكن إذا كان البرنامج بسيط أن يكتب كله داخل OB1 وإذا زاد حجم البرنامج وكثرت العلاقات يتم استخدام أنواع أخرى طبقا للاحتياجات على أن يتم تضمينها في OB1 بأي شكل والآن لنبدأ بشكل بسيط إنشاء أول برنامج باستعمال OB1 فقط بعد أن أنشأنا المكونات Hardware config في الدرس السابق : أولا نفتح Project الذي تم انشاؤه ثم ندخل بالضغط على + مرة واحدة حتى نصل إلى blocks ويظهر معنا الشكل التالي : وعند الضغط مرتين على OB1 تظهر الشاشة التالية وهي تبين بيانات OB1 نضغط OK فتفتح شاشة الكتابة داخل OB1 | |
| | | Admin Admin
عدد المساهمات : 156 نقاط : 9772 السٌّمعَة : 0 تاريخ التسجيل : 09/02/2012 العمر : 41
| موضوع: رد: دورة تدريبية في الحاكمات المنطقية قابلة للبرمجة طرازSiemens S7 300,400 الجمعة مارس 09, 2012 12:35 pm | |
| والآن سوف نبدأ بالتعرض لمكونات البرنامج وكيفية عمل البرنامج :
أولا أنواع المتغيرات : عند التعامل مع أي نوع من أنواع البرمجة لابد أن نضع في حسابنا أنواع البيانات التي نجري عليها العمليات فمثلا العمليات الحسابية البسيطة هناك الأرقام التي نجري عليها عمليات الجمع والطرح والضرب والقسمة ولهذا وجب علينا أن نبين أن أنواع الأرقام هي حقيقية وصحيحة وكسرية وكذلك تخيلية وهكذا حتى يكون طرفي المعادلة متساويين تماما في الكم والتمييز كذلك فعند التعامل مع برنامج PLC فلابد أن تكون العمليات على نوع واحد من البيانات وهناك أنواع عديدة من البيانات هي موضوعنا اليوم
أول تقسيم سنتعرض له هو عدد خانات المتغير وهو إما خانة واحدة Bit أو 8 خانات Byte أو كلمة 16 خانة word أو كلمة مزدوجة 32 خانة double word أما من حيث نوع البيانات
النوع الأول : الثنائي Binary type وهو يأخذ القيمة 0 أو 1 فقط أو كهربيا ON - OFF فقط وعند التعامل مع هذا النوع يتم كتابة ذلك على النحو الآتي : تمثيل رقم مكون من 16 خانة : b#1001 0110 0011 0001 b هنا معناها أن الرقم ثنائي وعلامة # هي الفاصل بين الرقم والتميز أما مجموعة الأرقام فهي قيمة الرقم
النوع الثاني : الأرقام الصحيحة Integer numbers وهي أرقام عشرية صحيحة وهي إما دقة 16 رقم أو 32 رقم ثنائي الأرقام ذات الدقة 16 خانة تكتب كما تكتب في النظام العشري العادي دون علامة عشرية مثلا 120 وهي تتراوح مابين 32768- إلى 32767+ في حالة الأرقام ذات الإشارة signed integers وتتراوح بين 0 و65535+ في حالة الأرقام الموجبة الصحيحة unsigned integers أما الأرقام ذات الدقة 32 خانة الصحيحة double integers فعند كتابتها نكتبها بالشكل الآتي : L#150
النوع الثالث : وهو الأرقام العشرية Real ( floating point ) numbers وتكتب على الصيغة الآتية : x.ye+/-z حيث x الجزء الصحيح من الرقم العشري لخانة واحدة y الجزء الكسري في الرقم العشري e تعني أس الرقم 10 +/- وهي إشارة الأس z تمثل الأس بمعني 23000 مثلا تكتب كالآتي : 2.3e+4 0.0354 تكتب : 3.54e-2 وإذا كان الرقم ككل موجب لا تكتب أمامه إشارة وإذا كان سالبا تكتب أمامه إشارة -
النوع الرابع وهو : نوع متغير زمني للتايمر Timer type ويكتب كالآتي : s5t#100ms هذا الرقم معناه زمن تايمر قيمته 100 مللي ثانية
النوع الخامس : متغير يدل عل التاريخ date ويكتب كالآتي : d#2008-04-08 كتاريخ 8 أبريل 2008
متغير وقت حقيقي time of day ويكتب كالآتي : tod#hh:mm:ss.ms مثلا tod#23:30:24.500
متغير وقت مطلق time ويكتب كالآتي :t#Od_0h_0m_0s_0ms مثلا t#Od_10h_50m_28s_880ms
متغير وقت وتاريخ ويكتب كالآتي : DT#2008-04-08-20:25:30.850
وهناك متغيرات حرفية String وتكتب بين علامات تنصيص 'xyz' كذلك هناك للعدادات وتكتب على الشكل c#897
والمطلوب في هذا المكان هو التأكد من نوع البيانات المطلوب إجراء العمليات عليها في البرنامج وبالتالي استخدام العمليات المناسبة لذلك حتى لا يحدث خطأ في البرنامج
وسوف نبدأ معا الدرس القادم إن شاء الله في أول نوع من أنواع العمليات وهي العمليات الثنائية المنطقية Binary ( bit logic ) operations العمليات المنطقية الثنائية هي التي تتم على مستوى متغير ذو خانة واحدة bit وبالتالي فهو إما تحميل قيمة خانة أو تطبيق أي معامل عليها مع أخرى نظيرتها أو وضع قيمتها 0 أو وضع قيمتها 1 بكل بساطة وسوف نذكر هنا العمليات االتي تتم على مستوى الخانة الواحدة bit
قبل تمثيل العمليات لابد أن نتعرض لعنونة المعاملات Addressing : المدخلات الرقمية Digital inputs : تأخذ الشكل : Ix.y حيث I رمز أنه دخول و x رقم Byte وهي تتراوح من 0 وحتى الحد الأقصى ل CPU المستعملة يمكن أن يكون 127 أو 255 أما y فهي رقم الخانة bit داخل الكلمة Byte ويتراوح بين 0 و 7 مثلا : I0.2 - I10.7 - I127.5
المخرجات الرقمية Digital outputs : وهي مثل المدخلات تماما غير أن الرمز Q بدلا من I مثلا : Q1.3 - Q7.6 - Q47.3
الذاكرة المؤقتة Memory flags : وتأخذ الرمز M مثلا : M100.0 - M4.5 - M0.7
العدادات Counters: وتأخذ الرمز C متبوعا برقم العداد طبقا لنوع CPU مثلا : C1 - C10 - C126
المؤقتات Timers : وتأخذ الرمز T متبوعا برقم التايمر طبقا لنوع CPU مثلا : T2 - T10 - T70
Data block قوالب البيانات : وتأخذ الشكل الآتي : DByDBXz.u حيث y هو رقم بلوك البيانات و z رقم الكلمة Data byte و u رقم الخانة bit مثلا : DB10.DBX1.2 - DB100.DBX10.7 - DB120.DBX34.6
A And وهي مثل عملية التوصيل على التوالي كهربيا وتتم بين معاملين لكي يكون هناك نتيجة لابد أن يكون الاثنان 1 حسب الجدول الآتي مثلا : z=A And B
A B z ---------------- 0 0 0 1 0 0 0 1 0 1 1 1
من هذا الجدول لا يكون Z لها قيمة 1 إلا كان A , B معا لهما قيمة 1
تمثيل العملية بشكل السلم Ladder diagram LAD --------I0.0---------I0.1-------------Q1.2 |-------( )--------------| |----------| |------|
تمثيل العملية بنظام الكود Statement list STL A I0.0 A I0.1 Q1.2 =
وهي تنطبق على الأنواع الآتية من Data type I-Inputs , Q-Outputs, M-Memory flag, L-Local variable, D-Data block bit, T-Timer, C-Counter
AN And Not
وهي مثل عملية التوصيل على التوالي كهربيا وتتم بين معاملين أحدهما وضعة الطبيعي مغلق NC حسب الجدول الآتي مثلا : z=A And Not B
A B B' z ------------------ 0 0 1 0 1 0 1 1 0 1 0 0 1 1 0 0
تمثيل العملية بشكل السلم Ladder diagram LAD --------I0.0---------I0.1-------------Q1.2 |-------( )--------------|/|----------| |------|
تمثيل العملية بنظام الكود Statement list STL A I0.0 AN I0.1 Q1.2 =
وهي تنطبق على الأنواع الآتية من Data type I,Q,M,L,D,T,C
O Or
وهي مثل عملية التوصيل على التوازي كهربيا وتتم بين معاملين لكي يكون هناك نتيجة لابد أن يكون واحد فقط 1 حسب الجدول الآتي مثلا : z=A Or B
A B z ---------------- 0 0 0 1 0 1 0 1 1 1 1 1
تمثيل العملية بنظام الكود Statement list STL O I0.0 O I0.1 Q1.2 =
وهي تنطبق على الأنواع الآتية من Data type I,Q,M,L,D,C,T
ON Or Not
وهي مثل عملية التوصيل على التوازي كهربيا وتتم بين معاملين أحدهما أو كلاهما NC حسب الجدول الآتي مثلا : z=A Or Not B
A B B' z ---------------- 0 0 1 1 1 0 1 1 0 1 0 0 1 1 0 1
تمثيل العملية بنظام الكود Statement list STL O I0.0 ON I0.1 Q1.2 =
وهي تنطبق على الأنواع الآتية من Data type I,Q,M,L,D,C,T
X Exclusive Or
وهي مثل عملية التوصيل المتداخل حيث يكون هناك فرعان توازي معا كل فرع به اثنان توالي حيث لا يكون هناك نتيجة إلا إذا كان الاثنان مختلفان حسب الجدول الآتي مثلا : z=A XOr B
A B z ---------------- 0 0 0 1 0 1 0 1 1 1 1 0
تمثيل العملية بنظام الكود Statement list STL X I0.0 X I0.1 Q1.2 =
وهي تنطبق على الأنواع الآتية من Data type I,Q,M,L,D,C,T
XN Exclusive Or Not
وهي مثل عملية التوصيل المتداخل حيث يكون هناك فرعان توازي معا كل فرع به اثنان توالي حيث لا يكون هناك نتيجة إلا إذا كان الاثنان متطابقان حسب الجدول الآتي مثلا : z=A XN Or B
A B z ---------------- 0 0 1 1 0 0 0 1 0 1 1 1
تمثيل العملية بنظام الكود Statement list STL XN I0.0 XN I0.1 Q1.2 =
وهي تنطبق على الأنواع الآتية من Data type I,Q,M,L,D,C,T
Assign =
وهو أمر يسجل نتيجة العملية التي تمت في العنوان الذي يلي علامة = وهو ينطبق علي الأنواع I, Q, M, L, D كما سبق واستخدمناه في الأمثلة السابقة
R Reset
وهو يقوم بتخزين 0 في العنوان الذي يليه مثل : R Q0.1 - R M20.7 - R DB100.DBX2.1
S Set
وهو يقوم بتخزين 1 في العنوان الذي يليه مثل : S M10.2 - S Q3.1 - S DB10.DBX14.6
NOT Negate RLO
وهو يقوم بعكس نتيجة آخر عملية تمت من 0 إلى 1 أو من 1 إلى 0
ويكتب كما هو NOT
SET Set RLO --> 1
وهو يقوم بتخزين 1 في مكان نتيجة العمليات المنطقية Result of Logic Operation RLO وذلك لإمكان استخدام ذلك في عمليات Set
مثلا : SET = Q10.3
CLR Clear RLO --> 0
وهو يقوم بتخزين 0 في RLOو | |
| | | Admin Admin
عدد المساهمات : 156 نقاط : 9772 السٌّمعَة : 0 تاريخ التسجيل : 09/02/2012 العمر : 41
| موضوع: رد: دورة تدريبية في الحاكمات المنطقية قابلة للبرمجة طرازSiemens S7 300,400 الجمعة مارس 09, 2012 12:35 pm | |
| يظن البعض أنه بمجرد أن عرف العمليات المنطقية التي ذكرناها في الدرس السابق مع معرفة استعمالات المؤقتات Timers والعدادات counters إضافة إلى عمليات التمييز بين المدخلات والمخرجات أنه هكذا قت أصبح مبرمجا ولكن هذه فقط هي البداية وتلك فقط يمكن الاستغناء بها عن بعض دوائر التحكم البسيطة ولكن الإمكانيات الهائلة للمبرمجات المنطقية تمكننا من عمل عمليات لا حصر لها وتنفيذ تطبيقات لا حصر لها وبكل بساطة أي شئ يمكن صياغته بشكل رياضي يمكن تنفيذه عن طريق العمليات الحسابية البسيطة وهو هنا ما نحاول فعله وهو تعلم الكثير من الأساسيات والتي عند ربطها معا تمكننا بلا مبالغة من بناء ليس هرم بل أهرامات
والآن لنذهب إلى موضوع اليوم وهو التايمر Timers
أنواع التايمر الموجودة في سيمنس والتي يمكن استخدامها داخل البرنامج هي كالآتي : - تايمر تشغيل مؤخر On-Delay Timer : SD - تايمر فصل مؤخر Off-Delay Timer : SF - تايمر نبضي Pulse Timer : SP - تايمر نبضي ممتد Extended Pulse Timer : SE - تايمر تشغيل مؤخر مسجل Retentive (Stored) On-Delay Timer : SS
والآن لنستعرض الفرق الوظيفي بين الأنواع الخمسة :
لنفترض أن إشارة التشغيل هي الشرط الواجب توافره لتشغيل التايمر والخرج من التايمر هو الحالة التي يكون فيها التايمر ON ووقت الضبط للتايمر هو t :
ففي النوع الأول وهو تشغيل مؤخر On-Delay Timer تنتقل حالة الخرج من 0 إلى 1 إذا كانت إشارة التشغيل موجودة وتجاوز وقت وجودها من وقت بدايتها الزمن t وتنزل من 1 إلى 0 مع إشارة التشغيل
وفي النوع الثاني تايمرفصل مؤخر Off-Delay Timer ينتقل حالة الخرج من 0 إلى 1 مع إشارة التشغيل وعند انتقال إشارة التشغيل من 1 إلى 0 تتأخر حالة الانتقال من 1 إلى 0 في الخرج بزمن قدره t
والنوع الثالث تايمر نبضي وفي هذا النوع عند وجود إشارة التشغيل أي انتقالها من 0 إلى 1 واستمرارها لوقت أكبر من زمن ضبط التايمر t فإن خرج التايمر ينتقل من 0 إل 1 ثم يعود من 1 إلى 0 بعد زمن قدره t أي على شكل نبضة ولكن إذا كان زمن وجود إشارة التشغيل أقل من t فإن خرج التايمر ينتقل من 1 إلى 0 مع إشارة التشغيل
النوع الرابع وهو تايمر نبضي ممتد في هذا النوع تخرج نبضة التايمر لزمن قدره t بغض النظر عن وقت وجود إشارة التشغيل مع ملاحظة أن كل انتقال لإشارة التشغيل من 0 إلى 1 يعطي بداية جديدة لنبضة الخروج أي أنه إذا كانت إشارة التشغيل نبضات متكررة بزمن أقل من t فإن خرج التايمر سوف يظل 1 باستمرار
النوع الخامس وهو تايمر تشغيل مؤخر مخزن وفي هذا النوع تنتقل حالة خرج التايمر من 0 إلى 1 بعد زمن قدره t من انتقال إشارة التشغيل من 0 إلى 1 ولا يشترط هنا استمرار إشارة الشغيل مثل أمر SET ولكن بعد زمن t
لنعلم أنه يتم حجز one word لكل تايمر مكونة من 16 خانة في ذاكرة CPU
وأنه يتم تخصيص الخانات من 0-9 لقيمة الوقت في شكل ثنائي ويمكن نقل هذه القيمة إلى Accumulator-1 في شكل Hexadecimal H, BCD وذلك للتعامل معها في البرنامج عند الاحتياج لذلك كذلك يمكن تحميل قيمة أولية للتايمر بإحدى الصيغ التالية : W#16#txyz حيث W#16 تعني رقم مكون من 16 خانة t طريقة حساب الوقت - 00 , 01 , 10 , 11 - 10 مللي ثانية , 100 مللي ثانية , 1 ثانية , 10 ثانية xyz قيمة الوقت معبرا عنها بشكل BCD
أو يمكن التعبير عن الوقت بالشكل : S5t#aH_bM_cS_dMS حيث أن a قيمة الساعات , b الدقائق , c الثواني , d مللي ثانية و H,M,S,MS هو تمييز الوقت
والآن لنستعرض الأوامر المستعمله مع التايمر :
FR Enable Timer
والصورة العامة لتشغيل هذا الأمر تكون في STL فقط وتكون بالشكل الآتي : FR where Timer --> T1,T2,...,T256
مثلا : ِA I0.1 FR T2
L Load Current Timer Value into ACCU 1 as Integer
الصورة العامة لتشغيل هذا الأمر هو : L where Timer : T1,T2,...,T256 ويستعمل لتحميل قيمة التايمر في Accumulator-1 في شكل رقم صحيح Integer
مثلا : L T1
LC Load Current Timer Value into ACCU 1 as BCD
الصورة العامة لتشغيل هذا الأمر هو : LC where Timer : T1,T2,...,T256 ويستعمل لتحميل قيمة التايمر في Accumulator-1 في شكل BCD
مثلا : LC T1
R Reset Timer
الصورة العامة لتشغيل هذا الأمر هو : R where Timer : T1,T2,...,T256 ويستعمل لإيقاف التايمر وإعادة وضع التايمر إلى الوضع الأولي
مثلا : A I2.3 R T25
SP Pulse Timer
الصورة العامة لتشغيل هذا الأمر هو : SP where Timer : T1,T2,...,T256 ويستعمل لتشغيل تايمر نبضي
مثال :
A I 2.0 FR T1 //Enable timer T1. A I 2.1 L S5T#10s //Preset 10 seconds into ACCU 1. SP T1 //Start timer T1 as a pulse timer. A I 2.2 R T1 //Reset timer T1. A T1 //Check signal state of timer T1. = Q 4.0
SE Extended Pulse Timer
الصورة العامة لتشغيل هذا الأمر هو : SE where Timer : T1,T2,...,T256 ويستعمل لتشغيل تايمر نبضي ممتد
مثال :
A I 2.0 FR T1 //Enable timer T1. A I 2.1 L S5T#10s //Preset 10 seconds into ACCU 1. SE T1 //Start timer T1 as an extended pulse timer. A I 2.2 R T1 //Reset timer T1. A T1 //Check signal state of timer T1. = Q 4.0 L T1 //Load current timer value of timer T1 as binary. T MW10 LC T1 //Load current timer value of timer T1 as BCD. T MW12
SD On-Delay Timer
الصورة العامة لتشغيل هذا الأمر هو : SD where Timer : T1,T2,...,T256 ويستعمل لتشغيل تايمر تشغيل مؤخر
مثال :
A I 2.0 FR T1 //Enable timer T1. A I 2.1 L S5T#10s //Preset 10 seconds into ACCU 1. SD T1 //Start timer T1 as an on-delay timer. A I 2.2 R T1 //Reset timer T1. A T1 //Check signal state of timer T1. = Q 4.0 L T1 //Load current timer value of timer T1 as binary. T MW10 LC T1 //Load current timer value of timer T1 as BCD. T MW12
SS Retentive On-Delay Timer
الصورة العامة لتشغيل هذا الأمر هو : SS where Timer : T1,T2,...,T256 ويستعمل لتشغيل تايمر تشغيل مؤخر مخزن
مثال :
A I 2.0 FR T1 //Enable timer T1. A I 2.1 L S5T#10s //Preset 10 seconds into ACCU 1. SS T1 //Start timer T1 as a retentive on-delay timer. A I 2.2 R T1 //Reset timer T1. A T1 //Check signal state of timer T1. = Q 4.0 L T1 //Load current time value of timer T1 as binary. T MW10 LC T1 //Load current time value of timer T1 as BCD. T MW12
SF Off-Delay Timer
الصورة العامة لتشغيل هذا الأمر هو : SF where Timer : T1,T2,...,T256 ويستعمل لتشغيل تايمر فصل مؤخر
مثال :
A I 2.0 FR T1 //Enable timer T1. A I 2.1 L S5T#10s //Preset 10 seconds into ACCU 1. SF T1 //Start timer T1 as an off-delay timer. A I 2.2 R T1 //Reset timer T1. A T1 //Check signal state of timer T1. = Q 4.0 L T1 //Load current timer value of timer T1 as binary. T MW10 LC T1 //Load current timer value of timer T1 as BCD. T MW12 | |
| | | Admin Admin
عدد المساهمات : 156 نقاط : 9772 السٌّمعَة : 0 تاريخ التسجيل : 09/02/2012 العمر : 41
| موضوع: رد: دورة تدريبية في الحاكمات المنطقية قابلة للبرمجة طرازSiemens S7 300,400 الجمعة مارس 09, 2012 12:36 pm | |
| لنعلم أن هذه التعليمات هي وسيلة نقل البيانات من وحدات الإدخال وإلى وحدات الإخراج مرورا بذاكرة وحدة المعالجة المركزية كذلك تستخدم لنقل البيانات داخل الذاكرة نفسها وأيضا فهي تنفذ على أنها تعليمات غير مشروطة فهي لا تعتمد على نتيجة RLO العمليات المنطقية وبالتالي فيتم تنفيذها أولا بأول ولا يمكن تفاديها إلا بتوجيه التنفيذ إلى مكان آخر وسوف نتعرض له في حينه عند عرض تعليمات التحكم في البرنامج Load LL
وهو يقوم بتحميل البيانات الموجودة في Address إلى ACCU1 وإذا كان هناك أمر Load تالي فإنه يتم نقل محتويات ACCU1 إلى ACCU2 وتحميل البيانات الجديدة في ACCU1 أي يحدث عملية ترحيل
وينطبق الأمر Load على أي من أحجام البيانات سواء كانت Byte أو Word أو Double Word
كذلك فإن Address يمكن أن يكون Digital input(Byte/Word/DWord) أو يكون Digital output بنفس الطريقة أو Memory أو Analogue input أو Data block أو متغير داخلي L
أمثلة :
L IB20 L MW200 L QD10 L PIW224 L DB50.DBD20
ويجب أن نلاحظ أنه إذا تم تحميل Byte فإنه يتم تحميلها في الخانات من 1 إلى 8 الخاصة ب ACCU1 وتكون الخانات من 9 - 32 أصفار 00000000-00000000-00000000 وإذا تم تحميل Word يتم تحميلها في الخانات من 1 إلى 16 في ACCU1 وتكون الخانات من 17 - 32 كلها أصفار 00000000-00000000 وإذا تم تحميل Double word فيتم تحميل الرقم بالكامل في ACCU1 في الخانات من 1-32
الأمر Load status word into Accumulator-1 L STW
وكما هو واضح من اسم الأمر فهو يقوم بتحميل Status word والتي تعبر عن حالة CPU بعد إتمام آخر عملية عند الرغبة في عمل اختبار لذلك ويتم تحميلها في الخانات من 1 وحتى 8 أما بقية الخانات فتكون أصفار
الأمر Load Address register-1 Or 2 From Accumulator-1 LAR1 , LAR2
هذا الأمر يستخدم كذلك وهو لا يؤثر على محتويات ACCU1 ,ACCU2 ويستخدم هذا الأمر في العمليات الخاصة والتي يقصد بها التعامل مع جزء محدد من الذاكرة ( برمجة متقدمة )
الأمر Transfer T
يقوم هذا الأمر بنسخ محتويات ACCU1 إلى المكان المشار إليه ب Address والذي يمكن أن يكون : QB/QW/QD/PQW/MB/MW/MD/L/DBB/DBW/DBD
أمثلة :
T QB10 T MW32 T DB20.DBD48 T PQW446
الأمر Transfer contents of Accumulator-1 into Status word T STW
وهو يقوم بنقل الخانات التسعة الأول إلى Status word عند الرغبة في وضعها في حالة معينة دون النظر إلى النتائج الأخرى
والأمران L,T هما من أكثر الأوامر استخداما خلال عمليات البرمجة وسوف يظهر ذلك جليا خلال الفترات القادمة إن شاء الله | |
| | | Admin Admin
عدد المساهمات : 156 نقاط : 9772 السٌّمعَة : 0 تاريخ التسجيل : 09/02/2012 العمر : 41
| موضوع: رد: دورة تدريبية في الحاكمات المنطقية قابلة للبرمجة طرازSiemens S7 300,400 الجمعة مارس 09, 2012 12:36 pm | |
| ملحوظة : في جميع الأمثلة الكلام بعد // يعتبر تعليق على السطر أي شرح لمساعدة المستخدم في فهم الأمور Comments
هذه العمليات تتم كلها بين محتويات Accumulator-1 و Accumulator-2 وتخزن النتيجة مكان القديمة في Accumulator-1 بحيث تتم مقارنة كل خانة bit بما يماثلها طبقا للعملية المطلوبة
AW AND Word : 16-Bit
ويأخذ الأمر الصورة :
AW AW Constant
حيث يتم قبل الأمر تحميل الكلمة الأولى في ACCU1 وتحميل الكلمة الثانية ACCU2
مثال :
L IW20 //Load contents of IW20 into ACCU 1-L. L IW22 //Load contents of ACCU 1 into ACCU 2. Load contents of IW22 into ACCU 1-L. AW //Combine bits from ACCU 1-L with ACCU 2-L bits by AND; store result in ACCU 1-L. T MW 8 //Transfer result to MW8
وفي حالة عمل AND مع ثابت Constant يتم بتحميل الكلمة الأولى في ACCU1 ويتم عمل AND مباشرة مع الرقم ويكون الناتج في ACCU1 مثل الآتي :
L IW20 //Load contents of IW20 into ACCU 1-L. AW W#16#0FFF //Combine bits of ACCU 1-L with bit pattern of 16-bit constant (0000_1111_1111_1111) by AND; store result in ACCU 1-L. JP NEXT //Jump to NEXT jump label if result is unequal to zero, (CC 1 = 1)
OW OR Word :16-Bit
ويأخذ الأمر الصورة :
OW OW Constant
حيث يتم قبل الأمر تحميل الكلمة الأولى في ACCU1 وتحميل الكلمة الثانية ACCU2
مثال :
L IW20 //Load contents of IW20 into ACCU 1-L. L IW22 //Load contents of ACCU 1 into ACCU 2. Load contents of IW22 into ACCU 1-L. OW //Combine bits from ACCU 1-L with ACCU 2-L by OR, store result in ACCU 1-L. T MW8 //Transfer result to MW8
وفي حالة عمل OR مع ثابت Constant يتم بتحميل الكلمة الأولى في ACCU1 ويتم عمل OR مباشرة مع الرقم ويكون الناتج في ACCU1 مثل الآتي :
L IW20 //Load contents of IW 20 into ACCU 1-L. OW W#16#0FFF //Combine bits of ACCU 1-L with bit pattern of 16-bit constant (0000_1111_1111_1111) by OR; store result in ACCU 1-L. JP NEXT //Jump to NEXT jump label if result is unequal to zero (CC 1 = 1)
XOW Exclusive OR Word : 16-Bit
ويأخذ الأمر الصورة :
XOW XOW Constant
حيث يتم قبل الأمر تحميل الكلمة الأولى في ACCU1 وتحميل الكلمة الثانية ACCU2
مثال :
L IW20 //Load contents of IW20 into ACCU 1-L. L IW22 //Load contents of ACCU 1 into ACCU 2. Load contents of ID24 into ACCU 1-L. XOW //Combine bits of ACCU 1-L with ACCU 2-L bits by XOR, store result in ACCU 1-L. T MW8 //Transfer result to MW8
وفي حالة عمل XOR مع ثابت Constant يتم بتحميل الكلمة الأولى في ACCU1 ويتم عمل XOR مباشرة مع الرقم ويكون الناتج في ACCU1 مثل الآتي :
L IW20 //Load contents of IW20 into ACCU 1-L. XOW 16#0FFF //Combine bits of ACCU 1-L with bit pattern of 16-bit constant (0000_1111_1111_1111) by XOR, store result in ACCU 1-L. JP NEXT //Jump to NEXT jump label if result is unequal to zero, (CC 1 = 1)
AD AND Double Word : 32-Bit
وهو يقوم بعمل AW ولكن على مستوى 32 خانة أي كل محتويات ACCU1, ACCU2
ويأخذ الأمر الصورة :
AD AD Constant
حيث يتم قبل الأمر تحميل الكلمة الأولى في ACCU1 وتحميل الكلمة الثانية ACCU2
مثال :
L ID20 //Load contents of ID20 into ACCU 1. L ID24 //Load contents of ACCU 1 into ACCU 2. Load contents of ID24 into ACCU 1. AD //Combine bits from ACCU 1 with ACCU 2 by AND, store result in ACCU 1. T MD8 //Transfer result to MD8
وفي حالة عمل AD مع ثابت Constant يتم بتحميل الكلمة الأولى في ACCU1 ويتم عمل AD مباشرة مع الرقم ويكون الناتج في ACCU1 مثل الآتي :
L ID 20 //Load contents of ID20 into ACCU 1. AD DW#16#0FFF_EF21 //Combine bits of ACCU 1 with bit pattern of 32-bit constant (0000_1111_1111_1111_1110_1111_0010_0001) by AND; store result in ACCU 1. JP NEXT //Jump to NEXT jump label if result is unequal to zero, (CC 1 = 1)
OD OR Double Word : 32-Bit
ويأخذ الأمر الصورة :
OD OD Constant
حيث يتم قبل الأمر تحميل الكلمة الأولى في ACCU1 وتحميل الكلمة الثانية ACCU2
مثال :
L ID20 //Load contents of ID20 into ACCU 1. L ID24 //Load contents of ACCU 1 into ACCU 2. Load contents of ID24 into ACCU 1. OD //Combine bits from ACCU 1 with ACCU 2 bits by OR; store result in ACCU 1. T MD8 //Transfer result to MD8
وفي حالة عمل OD مع ثابت Constant يتم بتحميل الكلمة الأولى في ACCU1 ويتم عمل OD مباشرة مع الرقم ويكون الناتج في ACCU1 مثل الآتي :
L ID20 //Load contents of ID20 into ACCU 1. OD DW#16#0FFF_EF21 //Combine bits of ACCU 1 with bit pattern of 32-bit constant (0000_1111_1111_1111_1110_1111_0010_0001) by OR, store result in ACCU 1.
JP NEXT //Jump to NEXT jump label if result is not equal to zero, (CC 1 = 1)
XOD Exclusive OR Double Word : 32-Bit
ويأخذ الأمر الصورة :
XOD XOD Constant
حيث يتم قبل الأمر تحميل الكلمة الأولى في ACCU1 وتحميل الكلمة الثانية ACCU2
مثال :
L ID20 //Load contents of ID20 into ACCU 1. L ID24 //Load contents of ACCU 1 into ACCU 2. Load contents of ID24 into ACCU 1. XOD //Combine bits from ACCU 1 with ACCU 2 by XOR; store result in ACCU 1. T MD8 //Transfer result to MD8
وفي حالة عمل XOD مع ثابت Constant يتم بتحميل الكلمة الأولى في ACCU1 ويتم عمل XOD مباشرة مع الرقم ويكون الناتج في ACCU1 مثل الآتي :
L ID20 //Load contents of ID20 into ACCU 1. XOD DW#16#0FFF_EF21 //Combine bits from ACCU 1 with bit pattern of 32-bit constant (0000_1111_1111_1111_1111_1110_0010_0001) by XOR, store result in ACCU 1. JP NEXT //Jump to NEXT jump label if result is unequal to zero, (CC 1 = 1 | |
| | | Admin Admin
عدد المساهمات : 156 نقاط : 9772 السٌّمعَة : 0 تاريخ التسجيل : 09/02/2012 العمر : 41
| موضوع: رد: دورة تدريبية في الحاكمات المنطقية قابلة للبرمجة طرازSiemens S7 300,400 الجمعة مارس 09, 2012 12:37 pm | |
| هذه العمليات تمكننا من تحويل الأرقام من صيغة إلى أخرى والصيغ الأهم التي تقوم عليها كل أنواع الحسابات هي : - الأرقام الصحيحة Integer numbers 16 bits - الأرقام الصحيحة المضاعفة الدقة Double integers 32 bits - الأرقام العشرية Real numbers - الأرقام المعبر عنها بكود Binary coded decimal BCD
BTI BCD to Integer
وهذا الأمر يقوم بتحويل محتويات Accumulator-1 من صيغة BCD مكون من 3 أرقام تتراوح بين 000 , 999 إلى رقم صحيح مثلا : الرقم 689 يكون كالآتي في نظام BCD كل رقم يمثل بأربع خانات : 1001 - 1000 - 0110 - 0000 وعند التحويل إلى الصيغة Integer يكون كالآتي : 0001 - 1011 - 0010 - 0000
مثال :
L MW10 //Load the BCD number into ACCU 1-L. BTI //Convert from BCD to integer; store result in ACCU 1-L. T MW20 //Transfer result (integer number) to MW20
ITB Integer (16-Bit) to BCD
وهذا الأمر يقوم بالعملية العكسية حيث يحول الرقم من الصورة الصحيحة إلى الصورة BCD
مثال :
L MW10 //Load the integer number into ACCU 1-L. ITB //Convert from integer to BCD (16-bit); store result in ACCU 1-L. T MW20 //Transfer result (BCD number) to MW20
BTD BCD to Integer-32 bits
هذا الأمر يقوم بتحويل رقم 32 خانة من صيغة BCD إلى الصيغة Double integer وتكون القيمة القصوى للرقم BCD هي : 9,999,999 موجبة أو سالبة كالآتي : الرقم 235648- يكون : 1000-0100-0110-0101-0011-0010-0000-1111 وعند تحويله إلى صحيح : 0000-1000-1000-1001-0011-0000-0000-1000
مثال :
L MD10 //Load the BCD number into ACCU 1. BTD //Convert from BCD to integer; store result in ACCU 1. T MD20 //Transfer result (double integer number) to MD20
ITD Integer - 16 Bit to Double Integer - 32-Bit
وهو يقوم بتحويل محتويات Accumulator-1 من صورة الصحيح 16 خانة إلى 32 خانة وذلك بإضافة أصفار 0000000000000000 إلى الخانات من 16 وحتى 31 في Accumulator-1 ونقل خانة الإشارة من الخانة 16 إلى الخانة 32
مثال :
L MW12 //Load the integer number into ACCU 1. ITD //Convert from integer (16-bit) to double integer (32-bit); store result in ACCU 1. T MD20 //Transfer result (double integer) to MD20
DTB Double Integer (32-Bit) to BCD
وهو يقوم بتحويل الأرقام من صحيحة ذات دقة مضاعفة 32 خانة إلى الصورة BCD
مثال :
L MD10 //Load the 32-bit integer into ACCU 1. DTB //Convert from integer (32-bit) to BCD, store result in ACCU 1. T MD20 //Transfer result (BCD number) to MD20
DTR Double Integer - 32-Bit to Floating-Point - 32-Bit IEEE-FP
وهو يقوم بتحويل محتويات Accumulator-1 من الصيغة الصحيحة دقة مضاعفة إلى الصورة العشرية بالشكل الآتي : x.ye+/-z+/- حيث +/- قبل x هي الإشارة العامة للرقم أما x فهو الجزء الصحيح من الرقم و y الجزء العشري و +/- الثانية هي إشارة الأس و z هي أس الرقم 10 بعد اختصار الرقم مثلا : 10245.5- تمثل كالآتي : 1.02455e+4-
مثال :
L MD10 //Load the 32-bit integer into ACCU 1. DTR //Convert from double integer to floating point (32-bit IEEE FP); store result in ACCU 1. T MD20 //Transfer result (BCD number) to MD20
INVI Ones Complement Integer -16-Bit
هذا الأمر يقوم بتحويل محتويات Accumulator-1 إلى المعكوس الأحادي للمحتويات وتخزين النتيجة في Accumulator-1
والمعكوس الأحادي بكل بساطة هو قلب كل 0 إلى 1 وكل 1 إلى 0 مثلا : الرقم : 1010-0011-1100-0100 يكون : 0101-1100-0011-1011
مثال :
L IW8 //Load value into ACCU 1-L. INVI //Form ones complement 16-bit. T MW10 //Transfer result to MW10
INVD Ones Complement Double Integer -32-Bit
وهو مثل الأمر السابق تماما ولكن على مستوى 32 خانة Double integer
مثال :
L ID8 //Load value into ACCU 1. INVD //Form ones complement (32-bit). T MD10 //Transfer result to MD10
NEGI Twos Complement Integer -16-Bit
وهو يقوم بتحويل محتويات Accumulator-1 إلى المعكوس الثنائي للرقم وتخزين المحتويات في Accumulator-1 والمعكوس الثنائي بكل بساطة هو المعكوس الأحادي + 1
مثلا الرقم : 1011-1001-0001-1010 الأحادي : 0100-0110-1110-0101 الثنائي : 0101-0110-1110-0101
مثال :
L IW8 //Load value into ACCU 1-L. NEGI //Form twos complement 16-bit. T MW10 //Transfer result to MW10
NEGD Twos Complement Double Integer -32-Bit
وهو نفس الأمر السابق ولكن على مستوي 32 خانة رقم صحيح دقة مضاعفة
NEGR Negate Floating-Point Number -32-Bit, IEEE-FP
في هذا الأمر يقوم بعكس إشارة الرقم العشري ( ذو العلامة العشرية ) إذا كانت + تكون - والعكس
مثال :
L ID8 //Load value into ACCU 1 example: ID 8 = 1.5E+02 NEGR //Negate floating-point number (32-bit, IEEE-FP); stores the result in ACCU 1. T MD10 //Transfer result to MD10 example: result = -1.5E+02 | |
| | | | دورة تدريبية في الحاكمات المنطقية قابلة للبرمجة طرازSiemens S7 300,400 | |
|
| صلاحيات هذا المنتدى: | لاتستطيع الرد على المواضيع في هذا المنتدى
| |
| |
| |