يظن البعض أنه بمجرد أن عرف العمليات المنطقية التي ذكرناها في الدرس السابق مع معرفة استعمالات المؤقتات 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 <Timer> where Timer --> T1,T2,...,T256
مثلا :
ِA I0.1
FR T2
L Load Current Timer Value into ACCU 1 as Integerالصورة العامة لتشغيل هذا الأمر هو :
L <Timer> where Timer : T1,T2,...,T256
ويستعمل لتحميل قيمة التايمر في Accumulator-1 في شكل رقم صحيح Integer
مثلا :
L T1
LC Load Current Timer Value into ACCU 1 as BCD
الصورة العامة لتشغيل هذا الأمر هو :
LC <Timer> where Timer : T1,T2,...,T256
ويستعمل لتحميل قيمة التايمر في Accumulator-1 في شكل BCD
مثلا :
LC T1
R Reset Timerالصورة العامة لتشغيل هذا الأمر هو :
R <Timer> where Timer : T1,T2,...,T256
ويستعمل لإيقاف التايمر وإعادة وضع التايمر إلى الوضع الأولي
مثلا :
A I2.3
R T25
SP Pulse Timerالصورة العامة لتشغيل هذا الأمر هو :
SP <Timer> 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 <Timer> 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 <Timer> 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 <Timer> 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 <Timer> 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