Vous êtes sur la page 1sur 70

‫‪ PLC‬داخل ‪ Data Formats‬مثيل العاداد‬

‫الدرس ده من اهم الدروس لنه تمهيد و اساس لكل العمليات الحسابية و المقارنات و‬
‫التحويلت‬
‫‪ : integer - double integer - Real‬ها نشرح النواع التية‬
‫‪(floating points numbers) -BCD numbers‬‬
‫‪ INT :‬و اختصارها ‪integer numbers‬‬
‫تحتوى عالى قيمة ‪ 1‬او ‪ bit 0‬كل ‪ bits‬و ده نوع من العاداد يتكون من ‪16‬‬
‫و قيمها يتم حساب قيمة الرقم ‪ bits‬و حسب ترتيب‬
‫يمكن ان يمثل ارقام موجبة و ايضا ارقام سالبة و لكن يجب ان تكون ‪ integer‬النوع‬
‫الرقام ارقام صحيحة فقط اى انه ل يقبل العلمة العشرية‬
‫يمكن ان يستوعاب ارقام من ‪ 32768 -‬الى ‪ integer data type +‬مبدئيا كدا‬
‫‪32767‬‬
‫لزام نكون عاارفين ان لو حملت رقم اكبر من ‪ 32767‬او اقل من ‪ 32768-‬نجد ان‬
‫‪ fault‬اعاطى ‪CPU‬‬
‫‪ integer‬اول ‪ :‬تمثيل العدد الموجب بذاكرة نوعاها‬

‫‪ :‬بثلثا طرق ‪ integer‬يمكن تمثيل الرقام‬


‫و هى التمثيل العادى للرقم مثل ‪ decimal 662+‬طريقة‬
‫اى نجد ‪ 16‬خانة كل خانة تحتوى فقط عالى ‪ 0‬او ‪ ( bin ) 1‬او ‪ binary‬طريقة‬
‫و تحتوى هنا عالى ‪ 4‬خانات فقط ‪ Hexa-decimal‬طريقة‬
‫‪ BIN‬التمثيل من النوع‬
‫لزام اكتبها بالصيغة ‪ binary‬ان طريقة قراءة الرقم هى ‪ PLC‬عاشان اوضح لل‬
‫التية ‪ 2# :‬ثم نكتب الرقم‬
‫نجد ان الخانة رقم ‪ ) 15‬اخر خانه ( هى خانة تحديد الشاره بحيثا عاندما تكون ‪0‬‬
‫هذا يعنى ان الرقم موجب و عاندما تكون ‪ 1‬يعنى ان الرقم سالب‬
‫الى الصيغة العددية ‪ binary‬كيفية قراءة قيمة الرقم اى التحويل من الصيغة‬
‫‪decimal :‬‬
‫نقوم بضرب قيمة كل خانة فى ‪^ 2‬رقم الخانة اى ان‬
‫الخانة الولى قيمتها ‪0^2*0‬‬
‫الخانة الثانية قيمتها ‪1^2*1‬‬
‫و هكذا فنجد ان قيمة الرقم = ‪*1 + 3^2*0 + 2^2*1 + 1^2*1 + 0^2*0‬‬
‫‪10^2*0 + 9^2*1 + 8^2*0 + 7^2*1 + 6^2*0 + 5^2*0 + 4^2‬‬
‫‪662+ = 15^2*0 + 14^2*0 + 13^2*0 + 12^2*0 + 11^2*0 +‬‬
‫‪ Hexadecimal‬تمثيل الرقم بطريقة‬
‫لزام اكتبها ‪ hexadecimal‬ان طريقة قراءة الرقم هى ‪ PLC‬عاشان اوضح لل‬
‫‪ : (W#16#(value‬بالصيغة التية‬
‫‪ bits‬اى تحتوى عالى ‪ word 16‬ان قيمة العدد من النوع ‪ W‬معنى‬
‫‪ hexa-decimal‬معنى ‪ 16‬اى ان نوع طريقة قراءة الرقم من النوع‬
‫الرقم نفسه يتكون من ‪ 4‬خانات فقط‬
‫‪ A-B-C-D-E-F‬ممكن كل خانة تحتوى عالى ارقام من ‪ 0‬الى ‪ 9‬و حروف‬
‫‪ F = 15‬و ‪ E = 14‬و ‪ D = 13‬و ‪ C = 12‬و ‪ B =11‬و ‪ A = 10‬اى ان‬
‫‪ hexadecimal format‬الى ‪ binary‬التحويل من‬
‫بقوم بأخذ كل ‪ 4‬خانات و احسب قيمة رقمها و ذلك من اليمين لليسار‬
‫‪ :‬بمعنى ان‬
‫عاند حسابها بالطريقة العادية نجد انها تساوى ‪0110 : 6 :‬‬
‫‪1001 = 9‬‬
‫‪0110 =2‬‬
‫‪0000 = 0‬‬
‫‪ : W#16#0296‬اذا الرقم يساوى‬

‫‪ hexadecimal :‬كيفية حساب قيمة الرقم الممثل بطريقة‬


‫‪W#16#0296‬‬
‫‪ :‬لو انا عاايزا احسب قيمة الرقم العددى‬
‫و لكن الساس ‪ 16‬بدل من ‪ binary 2‬نفس طريقة حساب‬
‫اذا الرقم بالصيغة العددية = ‪3^16*0 + 2^16*2 + 1^16*9 + 0^16*6‬‬
‫= ‪662‬‬

‫‪ integer‬ثانيا ‪ :‬تمثيل العدد السالب بذاكرة نوعاها‬


‫نجد ان اخر خانة ) رقم ‪ ( 15‬تحتوى عالى ‪ 1‬اى ان العدد سالب‬
‫‪ decimal‬الى ‪ binary‬كيفية التحويل من‬
‫قيمة الرقم = ‪^2*1 + 4^2*0 + 3^2*1 + 2^2*0 + 1^2*1 + 0^2*0‬‬
‫‪11^2*1 + 10^2*1 + 9^2*0 + 8^2*1 + 7^2*0 + 6^2*1 + 5‬‬
‫‪662 - = 15^2*1 - 14^2*1 + 13^2*1 + 12^2*1 +‬‬

‫‪ hexa decimal :‬الصيغة‬


‫‪ integer‬فى تمثيل الرقم ‪ hexa decimal‬هنا من الخطا استخدام الصيغة‬
‫ل تعرف الشارة السالبة ‪ hexa decimal format‬السالب لن‬
‫بالطريقة المعتادة ) كل ‪ hexa decimal‬الى ‪ binary‬بمعنى لو انا حولت من‬
‫‪ 4‬خانات برقم (‬
‫‪0101 = 10 = A‬‬
‫‪0110 = 6‬‬
‫‪1101 =13 = D‬‬
‫‪1111 = 15 = F‬‬
‫الرقم ده خطا و ل يساوى ‪ 662-‬باى شكل ( ‪ : W#16#FD6A‬اذا الرقم يساوى‬
‫) من الشكال‬
‫الى ‪ hexa decimal‬لثبات ذلك ‪ ,‬لو حسبنا القيمة السابقة بالتحويل من‬
‫‪decimal‬‬
‫قيمة الرقم بالصيغة العددية = ‪*15 + 2^16*13 + 1^16*6 + 0^16*10‬‬
‫‪64874 = 3^16‬‬
‫و ده رقم مختلف تماما عان ‪662 -‬‬
‫مع رقم ‪ hexa decimal‬نفهم من كدا ان ل يجوزا انى استخدم الصيغة‬
‫سالب ‪integer‬‬

‫‪ DINT :‬و اختصارها ‪ Double integer‬العاداد بصيغة‬


‫‪ bits‬بالضبط و لكن الفارق هنا ان الرقم يحتوى عالى ‪ integer 32‬نفس طرق‬
‫يمكن ان يستوعاب ارقام من ‪ double integer 2147483648 -‬و هنا الرقم‬
‫الى ‪ 2147483647+‬و ايضا يجب ان تكون الرقام ارقاما صحيحة فقط‬
‫‪ :‬بثلثا طرق ‪ double integer‬يمكن تمثيل الرقام‬
‫و لحظ انى ‪#L‬و هى التمثيل العادى للرقم مثل ‪ decimal 100787+‬طريقة‬
‫‪ double integer‬ان ده رقم ‪ PLC‬عاشان اعارف ‪ #L‬كتبت‬
‫اى نجد ‪ 32‬خانة كل خانة تحتوى فقط عالى ‪ 0‬او ‪ ( bin ) 1‬او ‪ binary‬طريقة‬
‫و تحتوى هنا عالى ‪ 8‬خانات ‪ Hexa-decimal‬طريقة‬
‫الموجب ‪ double integer‬طريقة تمثيل الرقم‬

‫‪+#L‬نكتب ‪ decimal : 540809‬الصيغة‬


‫الخيره تحتوى عالى ‪ 0‬اى ان الرقم ‪ bit‬و تكون ‪ bit‬نجد ‪ binary : 32‬الصيغة‬
‫موجب‬
‫‪ binary format‬و لحساب الرقم فى حالة تمثيله بصيغة‬
‫قيمة الرقم العددى = ‪+ 4^2*0 + 3^2*1 + 2^2*0 + 1^2*0 + 0^2*1‬‬
‫‪*0 + 10^2*0 + 9^2*0 + 8^2*0 + 7^2*1 + 6^2*0 + 5^2*0‬‬
‫‪+ 16^2*0 + 15^2*0 + 14^2*1 + 13^2*0 + 12^2*0 + 11^2‬‬
‫‪22^2*0 + 21^2*0 + 20^2*0 + 19^2*1 + 18^2*0 + 17^2*0‬‬
‫‪^2*0 + 27^2*0 + 26^2*0 + 25^2*0 + 24^2*0 + 23^2*0 +‬‬
‫‪540809+ = 31^2*0 + 30^2*0 + 29^2*0 + 28‬‬

‫‪ hexa decimal :‬االصيغة‬


‫نأخذ كل ‪ 4‬ارقام و نحسبها ‪ hexa decimal‬الى ‪ binary‬للتحويل من‬
‫بالطريقة العادية‬
‫‪1001 = 9‬‬
‫‪1000 = 8‬‬
‫‪0000 =0‬‬
‫‪0100 = 4‬‬
‫‪1000 = 8‬‬
‫‪0000 = 0‬‬
‫‪0000 =0‬‬
‫‪0000 = 0‬‬
‫لحظ انى ( ‪ DW#16#00084089 = hexa decimal‬اذا الرقم بالصيغة‬
‫) ‪ double integer‬عاشان اوضح ان ده ‪ W‬مش ‪ DW‬كتبت‬
‫‪ decimal‬الى القيمة العددية ‪ hexa decimal‬للتحويل من‬
‫‪9*16^0 + 8*16^1 + 0*16^2 + 4*16^3 + 8*16^4 +‬‬
‫‪0*16^5 + 0*16^6 + 0*16^7 = +540809‬‬

‫السالب ‪ double integer‬طريقة تمثيل الرقم‬

‫‪- #L‬نكتب ‪ decimal : 540809‬الصيغة‬


‫الخيره تحتوى عالى ‪ 1‬اى ان الرقم ‪ bit‬و تكون ‪ bit‬نجد ‪ binary : 32‬الصيغة‬
‫سالب‬
‫‪ decimal‬الى ‪ binary format‬و يمكن التحويل بنفس الطريقة من‬
‫‪ hexadecimal :‬الصيغة‬
‫السالبة ‪ double integer‬السالبة يكون لل ‪ integar data‬كما الحال فى‬
‫السالبة بالصيغة ‪ double integer‬اى انه من الخطا تمثيل القيمة‬
‫ل تعرف الشارة السالبة ‪ hexadecimal format‬لن ‪hexadecimal‬‬

‫‪ floating point :‬و يطلق عاليها ارقام ‪ real‬الرقام العشرية‬


‫لتمثيل رقم عاشرى ‪ PLC‬و هى الطريقة الوحيدة التى يقبلها‬
‫و يمكن ان يستوعاب ارقام موجبة او سالبة‬
‫‪ bits‬عالى ‪ floating point 32‬يحتوى الرقم‬
‫‪ :‬طريقة تمثيل الرقم العشرى‬
‫)‪((Sign) • (1.f) • (2^(e-127‬‬
‫بمعنى لو ان الشارة موجبة‬
‫‪ F= 5‬و‬
‫‪ e=126‬و‬
‫اذا الرقم = ‪0.75‬‬
‫السابق كل اللى بكتبه مثل ‪ format‬لحظ ان ‪ :‬انا غير مطالب بكتابة الرقم عان طريق‬
‫يقوم بالتحويل الى الصيغة السابقة اوتوماتيكيا ‪ 200.76 PLC‬و‬
‫‪ bits‬كيفية توزايع الرقم عالى ‪32‬‬
‫‪ :‬انظر الرسم الموضح‬

‫‪ f‬الخانات من ‪ 0‬الى ‪ : 22‬تحتوى عالى قيمة المعامل‬


‫‪ e‬الخانات من ‪ 23‬الى ‪ : 30‬تحتوى عالى قيمة المعامل‬
‫الخانة الخيرة ‪ :‬خانة الشارة بحيثا ان ) ‪ = 0‬موجب ‪ = 1 ,‬سالب (‬
‫الموجود بالرسم هو تمثيل الرقم ‪0.75‬‬

‫‪ BCD :‬العاداد بصيغة‬


‫‪ Binary Coded Decimal‬يعنى ‪ BCD‬اختصار‬
‫و يستوعاب ارقاما من ‪ bits 999-‬و يحتوى عالى ‪ word 16‬توجد منه نوعاان‬
‫الى ‪999+‬‬
‫و يستوعاب ارقاما من ‪ bits -‬الذى يحتوى عالى ‪ double word 32‬و‬
‫‪ 9999999‬الى ‪9999999+‬‬
‫هو التمثيل بصيغة ‪ BCD‬اختصارا للوقت نستطيع ان نقول مجازاا ان‬
‫مع امكانية تحديد الشارة اى يحدد اذا كان موجب او سالب ‪hexadecimal‬‬
‫تحتوى عالى الشارة ) ‪ 0‬تعنى موجب و ‪ 1‬تعنى سالب ( ‪ Bit‬بحيثا ان اخر‬
‫انظر كيفية تمثيل العدد ‪296‬‬

‫‪ BCD‬الى ‪ binary‬نجد انه للتحويل من‬


‫‪ hexadecimal‬و حساب قيمتهم بالضبط عاند التحويل الى ‪ bits‬تم اخذ كل ‪4‬‬
‫تم اخذ كل ‪ bits 4‬التى تتكون من ‪ BCD double word 32‬و ايضا فى حالة‬
‫خانات و حساب قيمتهم و تم حساب قيمة ‪ 8‬ارقام بدل من ‪4‬‬
‫و حسابات الوقت ‪ Counters‬هى العدادات ‪ BCD format‬من اشهر تطبيقات‬
‫و التاريخ ) سيتم شرحهم فى درس اخر (‬
‫‪S5 Counters‬‬
‫و هى المستخدمة فى معظم البرامج‬
‫‪ :‬مميزااتها‬
‫سهلة الستخدام‬
‫‪ :‬عايوبها‬
‫ل يمكن العد اكثر من ‪- 999‬‬
‫يمكن استخدامه مثل ‪ 250‬عاداد او ‪ Counters 300‬له عادد معين من ‪ CPU‬كل ‪-‬‬
‫‪ CPU‬عاداد حسب نوع و ثمن‬
‫‪IEC Counters‬‬
‫نوع متقدم من العدادات‬
‫‪ :‬مميزااتها‬
‫يمكن العد لقيم كبيرة جدا تتجاوزا ‪ 2‬مليون ‪-‬‬
‫ايضا حسب حجم ذاكرة ( ‪ Counters‬تتوفر بكثرة جدا فى البرنامج تتجاوزا الف ‪-‬‬
‫) ‪CPU‬‬
‫‪ :‬عايوبها‬
‫صعبة الستخدام بالنسبة للمبتدئين‬

‫‪ S5 Counters‬شرح‬
‫‪ Simatic Manager‬توجد ثلثا انواع من العدادات داخل‬
‫‪ CU‬و اختصاره ‪counter up :‬‬
‫‪ CD‬و اختصاره ‪counter down :‬‬
‫‪ CUD‬و اختصاره ‪counter up down :‬‬

‫‪ C2‬و ‪ C1‬و ‪ C0‬فنجد ‪ CPU‬تاخد العدادات ارقام من ‪ 0‬الى اقصى رقم يمكن ان يتحمله‬
‫الخ‬
‫‪ word‬بحجم ‪ BCD‬بالعد عالى ذاكرة نوعاها ‪ Counters‬تقوم‬
‫لذلك نجد ان اقصى قيمة للعداد هى ‪ ) 999‬من اهم مساوئ العدادات ( راجع درس شرح تمثيل‬
‫‪ Siemens PLC‬العاداد داخل‬

‫اذا وصل العداد الى القيمة ‪ 999‬فأنه يبقى عالى هذه القيمة و ل يتغير حتى بعد اعاطاء‬
‫عالى نقطة تشغيله ‪pulses‬‬
‫‪ Counter Up‬شرح‬
‫يستخدم فى العد التصاعادى فقط‬

‫شرح كيفية عامل العداد التصاعادى‬


‫يقوم العداد بزايادة قيمته بمقدار ‪ CU 1‬عاند كل مره يتم تشغيل الشارة عالى‬
‫‪ PV‬يقوم العداد بالقفظ مباشرة الى القيمة الموجودة عالى ‪ S :‬اذا تم اعاطاء اشارة عالى‬
‫تتحول قيمة العداد الى ‪ 15‬مباشرة ‪ I0.1‬اى فى المثال السابق اذا تم تشغيل‬
‫يتم تصفير العداد ‪ R :‬اذا تم اعاطاء اشارة عالى ريسيت‬
‫و ليس شرطا ان يصل ( يعمل الخرج فى حالة ان قيمة العداد اكبر من صفر ‪ Q :‬الخرج‬
‫) ‪ PV‬الى قيمة‬
‫‪ integer‬تستخدم فى تخزاين قيمة العداد بالصيغة ‪CV :‬‬
‫‪ BCD‬تستخدم فى تخزاين قيمة العداد بصيغة ‪CV_BCD :‬‬

‫‪ Counter Down‬شرح‬
‫يستخدم فى العد التنازالى فقط‬
‫شرح كيفية عامل العداد التنازالى‬
‫حيثا قبل بدء العد التنازالى ‪ ,‬يجب ‪ ( preset value ( PV‬يجب استخدام قيمة عالى‬
‫‪ preset value‬ضبط قيمة العداد عالى‬
‫تساوى ‪ : 1‬تتحول قيمة العداد الى القيمة المضبوطه ‪ I 0.0‬فى المثال السابق عاندما يكون‬
‫مباشرة ‪ PV‬عالى‬
‫‪ M 0.1 =1‬اى عاندما تكون ‪ CD‬يقوم العداد بالعد تنازاليا بقيمة ‪ 1‬عاند تشغيل‬
‫يتم تصفير العداد ‪ R :‬اى عاند تشغيل ‪ I 2.1 = 1‬عاندما تكون‬
‫عاندما تكون قيمة العداد ل تساوى صفر ‪ Q‬يعمل الخرج‬
‫‪ integer‬تستخدم فى تخزاين قيمة العداد عاند اى لحظة بصيغة ‪CV :‬‬
‫‪ BCD‬تستخدم فى تخزاين قيمة العداد عاند اى لحظة بصيغة ‪CV_BCD :‬‬

‫‪ Counter Up and Down‬شرح‬


‫يستخدم فى العد التصاعادى او التنازالى‬
‫شرح كيفية عامل العداد التصاعادى و التنازالى‬
‫يقوم العداد بزايادة قيمته بقيمة ‪ CU : 1‬عاند اعاطاء اشارة عالى‬
‫يقوم العداد بأنقاص قيمته بقيمة ‪ CD : 1‬عاند اعاطاء اشارة عالى‬
‫مباشرة ‪ PV‬يقوم العداد بتحميل القيمة الموجوده عالى ‪ S :‬عاند اعاطاء اشارة عالى‬
‫يتم تصفير العداد ‪ R :‬عاند تشغيل‬
‫يعمل اذا كانت قيمة العداد اكبر من ‪ Q : 1‬الخرج‬
‫‪ integer‬تستخدم فى تخزاين قيمة العداد عاند اى لحظة بصيغة ‪CV :‬‬
‫‪ BCD‬تستخدم فى تخزاين قيمة العداد عاند اى لحظة بصيغة ‪CV_BCD :‬‬

‫ملحوظات عاامة عالى الثلثا انواع‬


‫‪ PV :‬القيمة الموجودة عالى‬
‫‪ C#20‬الرقم مثل ‪ #C +‬يمكن ان تكون رقم صحيح بالصيغة‬
‫‪ MW0‬مثل ‪ marker‬يمكن ان تكون‬
‫‪ DB1.DBW20‬مثل ‪ Data Block‬او ان تكون قيمة من‬
‫‪ Data Block‬او قيمة من ‪ marker‬تكون ‪ CV_BCD‬او ‪ CV‬القيمة الموجودة عالى‬

‫‪ ladder diagram‬فى ‪ Counters‬كيفية استخدام‬


‫الطريقة الولى ‪ :‬استخدام البلوك الكامل‬
‫‪ network‬الطريقة الثانية ‪ :‬تجزائة عاناصر العداد عالى اكثر من‬

‫‪ statement list‬فى لغة ‪ Counters‬كيفية استخدام‬


‫شرح كل سطر موجود عالى الصورة المرفقة‬
‫‪ : CU‬عان طريق المر ‪ counter up‬تم استدعااء العداد من نوع‬
‫‪ CD‬نكتب ‪ counter down :‬لستخدام‬
‫‪ CUD‬نكتب ‪ counter up down :‬لستخدام‬

‫‪ Timers‬شرح المؤقتات الزامنية‬


‫‪ PLC S7 300 , S7‬يوجد نوعاين اساسيين من التايمرات التى يمكن استخدامها فى‬
‫‪400‬‬
‫و ده التايمر العادى اللى بيتم استخدامه فى معظم البرامج اللى بنشوفها ‪S5 Timer :‬‬
‫‪ :‬مميزااته‬
‫سهل الستخدام ‪-‬‬
‫‪ :‬عايوبه‬
‫يحتوى عالى ‪ CPU‬له عادد معين من التايمرات ل يمكن تجاوزاه فنجد مثل ‪ CPU‬كل ‪-‬‬
‫‪ 250‬تايمر فقط و اخر يحتوى عالى ‪ 300‬و هكذا و اذا احتاج المبرمج لستخدام عادد‬
‫اغلى ‪ CPU‬اكثر يجب شراء ‪Timers‬‬
‫و يساوى ساعاتين و ‪ 46‬دقيقة و ‪ timer‬يوجد حدود للوقت الذى يمكن استخدامه مع ‪-‬‬
‫‪ 30‬ثانية ) سنعرف لماذا هذا الرقم بالتحديد (‬
‫و ده نوع اخر اكثر تقدما ‪IEC Timer :‬‬
‫‪ :‬مميزااته‬
‫نفسها ‪ CPU‬حدوده هى حدود ذاكرة ( ‪ IEC Timer‬يمكن استخدام عادد كبير جدا من ‪-‬‬
‫) و هى كبيره جدا‬
‫ل يوجد حدود للوقت الذى يمكن استخدامه بل يصل ليام اذا اردت ذلك ‪-‬‬
‫‪ :‬عايوبه‬
‫‪ PLC‬اصعب فى الستخدام بالنسبة للمبتدئين فى مجال ‪-‬‬
‫) بالتفصيل فى درس اخر ‪ IEC Timers‬سوف يتم شرح (‬
‫‪ S5 Timer‬شرح‬
‫‪ Simatic Manager‬توجد ‪ 5‬انواع للتيمرات داخل‬
‫‪ ODT‬و اختصاره ‪on delay timer‬‬
‫‪ OFFDT‬و اختصاره ‪off delay timer‬‬
‫‪ ODTS‬و اختصاره ‪Stored on delay timer‬‬
‫‪ Pulse‬و اختصاره ‪pulse timer‬‬
‫‪ PEXT‬و اختصاره ‪Extended pulse timer‬‬
‫سوف يتم شرح كل نوع بالتفصيل‬
‫‪ Timer‬شرح كل عانصر من عاناصر‬
‫نقطة تشغيل التايمر ‪S :‬‬

‫يتم كتابة الوقت المراد ضبط التايمر عاليه ‪TV :‬‬


‫و لكتابة وقت مثل ) ساعاة و ‪ 53‬دقيقة و ‪ 30‬ثانية و ‪ 20‬مللى ثانية ( يتم كتابة‬
‫‪S5T#1H53M30S20MS‬‬
‫‪ S5T#2H46M30S0MS‬و اقصى قيمة لها‬
‫‪ Timers‬و هى الصيغة الوحيدة لكتابة قيمة وقت داخل ‪ S5Time‬و يتم كتابته بالصيغة‬
‫مقسمين كالتالى ‪ bits‬حجم بيانات ‪ S5Time 16‬و تشغل الصيغة‬
‫تساوى ‪ Time base‬بحيثا تكون قيمة ‪ Time Base‬رقم ‪ 12‬و ‪ : 13‬تسمى ‪bit‬‬
‫‪ 0.01‬او ‪ 0.1‬او ‪ 1‬او ‪ 10‬و يتم حسابها داخل البرنامج تلقائيا و بدون تدخل المبرمج ‪,,‬‬
‫بحيثا يكون كل وظيفة المبرمج هى كتابة الوقت فقط‬
‫و اقصى ) ‪ BCD‬بصيغة ( ارقام من ‪ 0‬الى ‪ 11‬يتم تخزاين قيمة من ‪ 0‬الى ‪bits 999‬‬
‫قيمة لها ‪999‬‬
‫تساوى ‪ 9990‬ثانية ‪s‬اذا اقصى قيمة يمكن تخزاينها = ‪10 * 999‬‬
‫ثانية = ساعاتين و ‪ 46‬دقيقة و ‪ 30‬ثانية ‪9990‬‬
‫او متغير مثل ‪ data block‬عان طريق قيمة من ‪ Timer‬كما يمكن كتابة قيمة تشغيل‬
‫‪ S5Time‬مثل و لكن تكون بصيغة ‪MW10‬‬
‫‪ Siemens PLC‬فى ‪ Data Block‬راجع درس شرح‬

‫اذا تم تفعيلها يتم ارجاع قيمة التايمر الى قيمته الصلية و ايضا ايقاف ‪ bit‬هى = ‪R‬‬
‫الخرج‬
‫خرج التايمر ‪Q :‬‬
‫‪ integer‬قيمة التايمر عاند اى لحظة و تكون بصيغة ‪BI :‬‬
‫‪ BCD‬عاند اى لحظة بصيغة ‪ Timer‬قيمة ‪BCD :‬‬

‫‪On Delay Timer‬‬


‫و هو اكثر النواع استخداما‬
‫‪ on delay‬الخاص بالتايمر ‪ time chart‬شرح‬
‫يقوم التايمر ) ‪ S =1‬اى عاندما تكون ( من الصورة المرفقة نجد انه عاند تشغيل التايمر‬
‫( بالعد تنازاليا من القيمة المضبوط عاليها و بعد انتهاء الوقت يقوم بتغيير اوضاع نقاطه‬
‫‪ Q‬و ايضا يتم تشغيل الخرج ) تصبح مفتوحة ‪ NC‬تصبح مغلقة و النقطة ‪ NO‬النقطة‬
‫يقوم التايمر الرجوع ‪ reset ,‬او عاند تشغيل الشارة عالى ‪ S‬عاندما تنقطع الشارة عالى‬
‫لقيمته المضبوط عاليها و ترجع حالة الخرج لحالته الصلية‬

‫‪Off Delay Timer‬‬


‫يقوم التايمر بتحويل نقاطه مباشرة اى ‪ S‬عاند ‪ RLO‬عاند تشغيل التايمر اى عاندما تكون‬
‫و ايضا يتم تشغيل الخرج ) تصبح مفتوحة ‪ NC‬تصبح مغلقة و النقطة ‪ NO‬النقطة ( ان‬
‫يقوم التايمر بالعد التنازالى و بعد انقضاء الوقت ‪ S‬و عاندما يتم قطع الشرة عان ‪Q‬‬
‫‪ Q‬المضبوط عاليه يقوم التايمر بأرجاع نقاطه عالى اصلها و ايقاف الخرج‬
‫يقوم التايمر بأرجاع نقاطه الى اصلها و ايقاف الخرج ‪ R‬اذا تم تشغيل الشارة عالى‬
‫مباشرة فى نفس اللحظة‬

‫‪Stored On Delay Timer‬‬


‫‪ Retentive on delay timer‬و يسمى ايضا‬
‫العادى ‪ On Delay‬يشبه هذا النوع من التايمر من نوع‬
‫يقوم التايمر بعد الوقت المضبوط عاليه و بعدها يغير نقاطه ‪ S‬اى عاند تشغيل الشارة عاند‬
‫ل يتوقف التايمر عان العد او عان تغيير ‪ S‬و اذا تم ايقاف الشارة عالى ‪ Q‬و يعمل الخرج‬
‫نقاطه و ل يعود الى اصله‬
‫‪ R‬و لكى يتم ايقاف التايمر يجب تشغيل الشارة عالى‬
‫‪ Reset‬اذا هذا النوع يشترط فيه استخدام‬

‫‪Pulse Timer‬‬
‫تصبح ‪ NO‬النقطة ( يقوم التايمر بتحويل نقاطه مباشرة اى ان ‪ S‬عاند اعاطاء اشارة عالى‬
‫و يقوم بالعد فى نفس ‪ Q‬و ايضا يتم تشغيل الخرج ) تصبح مفتوحة ‪ NC‬مغلقة و النقطة‬
‫اللحظة و عاند انتهاء الوقت المضبوط عاليه المؤقت الزامنى ‪ ,‬يقوم بأرجاع نقاطه الى‬
‫‪ Q‬وضعها و يقوم بأيقاف الخرج‬
‫يقوم التايمر بارجاع ‪ R :‬فى اى لحظة او اعاطاء اشارة عالى ‪ S‬اذا تم فصل الشارة عان‬
‫مباشرة فى نفس اللحظة ‪ Q‬نقاطه و ايقاف الخرج‬

‫‪Extended Pulse Timer‬‬


‫مع وجود اختلف ‪ Pulse Timer‬و هو يشبه النوع‬
‫النقطة ( يقوم المؤقت الزامنى بتحويل نقاطه مباشرة اى ان ‪ S‬هنا عاند اعاطاء اشارة عالى‬
‫و يقوم ‪ Q‬و ايضا يتم تشغيل الخرج ) تصبح مفتوحة ‪ NC‬تصبح مغلقة و النقطة ‪NO‬‬
‫بالعد فى نفس اللحظة و عاند انتهاء الوقت المضبوط عاليه المؤقت الزامنى ‪ ,‬يقوم بأرجاع‬
‫‪ Q‬نقاطه الى وضعها و يقوم بأيقاف الخرج‬
‫فى اى لحظة ‪ ,‬ل يتوقف التايمر و ل يرجع نقاطه الى ‪ S‬و اذا تم ايقاف الشارة عان‬
‫طبيعتها ‪ ,,‬بل يستمر فى العد و بعد انتهاء الوقت المضبوط عاليه حينئذ يقوم بأرجاع نقاطه‬
‫‪ Q‬الى اصلها و يوقف الخرج‬
‫‪ Q‬فى اى لحظة ‪ :‬يقوم التايمر بارجاع نقاطه و ايقاف الخرج ‪ R‬عاند اعاطاء اشارة عالى‬
‫مباشرة فى نفس اللحظة‬
‫و كيفية استخدام كل نوع ‪ Timers‬كذا انتهينا من انواع‬

‫‪ Ladder Diagram‬فى لغة ‪ Timer‬كيفية استخدام‬


‫بكل بساطه يتم سحب نوع التايمر المراد استخدامه و وضعه فى اى مكان داخل‬
‫‪ Ladder Diagram‬الخاصة بلغة ‪Network‬‬
‫‪ LAD diagram‬طريقة اخرى لستخدام اى نوع تايمر فى‬
‫ كيفية استخدام‬S5 Timers ‫ فى لغة‬Statement List
‫‪ On Delay Timer‬تستخدم فى استدعااء ‪SD‬‬
‫‪ SF‬يتم كتابة ‪ Off Delay Timer‬لستدعااء‬
‫‪ SS‬يتم كتابة ‪ Stored On Delay Timer‬لستدعااء‬
‫‪ SP‬يتم كتابة ‪ Pulse Timer‬لستدعااء‬

‫شرح المقارنات بين العاداد‬


‫‪ RLO‬المقارنات هى عاملية تؤثر فقط عالى حالة‬
‫اى ان الخرج من عامليات المقارنة اما ‪ 1‬او ‪0‬‬
‫توجد ثلثا انواع من المقارنات‬
‫و ‪ bits‬اى تتكون من ‪ integer 16‬اى يتعامل مع ارقام ‪integer comparator :‬‬
‫تكون موجبة او سالبة‬
‫‪ double integer‬اى يتعامل مع ارقام ‪double integer comparator :‬‬
‫و ايضا موجب او سالب ‪ bits‬تتكون من ‪32‬‬
‫و ايضا موجب ‪ bits‬تتكون من ‪ real 32‬اى يتعامل مع ارقام ‪real comparator :‬‬
‫او سالب‬

‫طرق المقارنة بين عاددين‬


‫‪ integer ,‬بالنظر الى الصورة المرفقة نجد ‪ 6‬طرق من المقارنات تتكرر للثلثا انواع‬
‫‪double integer , real‬‬
‫‪ :‬الطرق ‪ 6‬هى‬
‫و رمزاها ) == ( ‪ :‬و هنا اذا كان العدد الول يساوى العدد الثانى ‪ ,‬يكون ‪ equal‬اى ‪EQ‬‬
‫خرج المقارنة = ‪1‬‬
‫و رمزاها ) >< ( ‪ :‬و هنا اذا كان العدد الول ل يساوى العدد الثانى ‪ not equal‬اى ‪NE‬‬
‫‪ ,‬يكون خرج المقارنة = ‪1‬‬
‫و رمزاها ) > ( ‪ :‬و هنا اذا كان العدد الول اكبر من العدد ‪ greater than‬اى ‪GT‬‬
‫الثانى ‪ ,‬يكون خرج المقارنة = ‪1‬‬
‫و رمزاها ) < ( ‪ :‬و هنا اذا كان العدد الول اصغر من العدد الثانى ‪ less than ,‬اى ‪LT‬‬
‫يكون خرج المقارنة = ‪1‬‬
‫و رمزاها ) => ( ‪ :‬و هنا اذا كان العدد الول اكبر ‪greater than or equal‬اى ‪GE‬‬
‫من او يساوى العدد الثانى ‪ ,‬يكون خرج المقارنة = ‪1‬‬
‫و رمزاها ) =< ( ‪ :‬و هنا اذا كان العدد الول اصغر ‪ less than or equal‬اى ‪LE‬‬
‫من او يساوى العدد الثانى ‪ ,‬يكون خرج المقارنة = ‪1‬‬

‫‪ Ladder Diagram‬كيفية كتابة اوامر المقارنة فى لغة‬


‫‪ integer‬لمقارنة العاداد‬

‫و العلمة ‪ integer‬يدل عالى ان المقارنة من النوع ‪ I‬حرف ‪ I< :‬نلحظ ان عانوان البلوك‬
‫‪ > greater than‬تعنى‬
‫يتكون من ‪compare block :‬‬
‫يعنى لزام تكون ‪ compare‬و ده المسئول عان تشغيل عاملية ‪compare enable :‬‬
‫) ‪ M 0.0 =0‬و ‪ I0.1 = 1‬فى هذا المثال لزام يكون ( قبله = ‪RLO 1‬‬
‫بسبب انى ‪ WORD‬و ده مكان كتابة الرقم الول و هنا لزام يكون حجمه ‪IN 1 :‬‬
‫‪ integer‬مسىتخدم مقارنة من نوع‬
‫ايضا ‪ WORD‬و ده مكان كتابة الرقم الثانى و هنا لزام يكون حجمه ‪IN 2 :‬‬
‫خرج المقارنة و يكون اما ‪ 1‬او ‪0‬‬
‫‪ MW 16‬اكبر من ‪ MW 20‬يجب ان يكون ‪ Q 10.6‬اذا لكى يعمل الخرج‬

‫‪ MW‬بدل من ‪ MD 20‬ماذا يحدثا لو استخدمت حجم بيانات خطا يعنى مثل استخدمت‬
‫‪20‬‬
‫‪ downlaod‬او ‪ save‬و ل يمكن عامل ‪ ERROR‬البرنامج ها يعطى‬

‫‪ WORD‬يجب ان تحتوى عالى قيمة ‪ IN1‬معناها ان ‪ error‬نلحظ ظهور رسالة‬


‫‪ double integer‬لمقارنة العاداد‬

‫‪ Double‬يدل عالى ان المقارنة من النوع ‪ D‬حرف ‪ D== :‬نلحظ ان عانوان البلوك‬


‫‪ equal‬و العلمة == تعنى ‪Integer‬‬
‫‪ IN 1‬المسموح بكتابته فى ‪ data‬و الختلف هو نوع ‪ compare block‬نفس تكوين‬
‫‪ IN 2‬و‬
‫‪ double integer‬من النوع ‪ IN 2‬و ‪ IN 1‬اى يجب ان يكون‬
‫‪ Real‬لمقارنة العاداد‬
‫‪ :‬ملحوظة‬
‫• )‪ ((Sign) • (1.f‬يتم تحويله بشكل اوتوماتيك الى الصيغة ‪ real‬عاند كتابة اى رقم‬
‫‪ Siemens‬و ده تم شرحه بالتفصيل فى درس شرح طرق تمثيل العاداد داخل)‪(2^(e-127‬‬
‫‪PLC‬‬
‫‪e+001‬اذا عاند كتابة الرقم ‪ 10.6‬يتم تحويلها مباشرة الى ‪1.060000‬‬
‫للتحويل العكسى ‪ :‬نضرب ‪ 1.06‬فى ‪1.6 = 1 ^ 10‬‬
‫بعد كتابة المتغيرات ‪ compare block‬شكل‬

‫و ‪ Real‬يدل عالى ان المقارنة من النوع ‪ R‬حرف ‪ R=> :‬نلحظ ان عانوان البلوك‬


‫‪ less than or equal‬العلمة =< تعنى‬
‫‪ statement list‬كيفية كتابة اوامر المقارنة فى لغة‬
‫‪ STL‬فى لغة ‪ integer‬لمقارنة العاداد‬
‫قبله و كتابة ) بعده اى ان ما بين القوسين هو امر ‪ )A‬يجب كتابة ‪ compare‬لكتابة امر‬
‫المقارنة (‬
‫‪ ACCUMULATOR 1‬عالى ‪ MW 20‬يقوم بتحميل العدد ‪ L MW 20‬المر‬
‫و ترحيل ‪ ACCUMULATOR 1‬عالى ‪ MW 16‬قام بتحميل العدد ‪ L MW 16‬المر‬
‫‪ ACCUMULATOR 2‬عالى ‪ MW 20‬العدد‬
‫هى اماكن تخزاين العاداد لكى يتم عامل اى عامليات حسابية ‪( accumulator 1 , 2 :‬‬
‫) فقط ‪ accumulator‬عادد ‪ S7 300 2‬و يوجد فى ‪ PLC‬او منطقية عاليها داخل‬
‫‪ greater than‬و المقارنة ‪ integer‬يعنى ان المقارنة من النوع ‪I< :‬الرمزا‬
‫‪ I 0.1 = 1‬و ‪ M 0.0 = 0‬بفرض ان‬
‫‪ MW‬اكبر من ‪ MW 20‬عاندما يكون ‪ Q 10.6‬تقوم بتشغيل الخرج ‪ compare‬هنا‬
‫‪ accumulator 1‬اكبر من ‪ accumulator 2‬اى عاندما يكون ‪16‬‬
‫‪ STL‬فى لغة ‪ double integer‬لمقارنة العاداد‬
‫‪ double word‬اى ان المقارنة من النوع ==‪ D‬نفس الطريقة و لكن هنا تم كتابة‬
‫‪ STL‬فى لغة ‪ Real‬لمقارنة العاداد‬

‫‪ REAL‬فى امر المقارنة اى ان المقارنه من النوع ‪ R‬تم كتابة‬


‫ملحوظة ‪ :‬طبعا معروف ان الرمزا ‪ //‬يعنى ان ما بعده مجرد تعليق عالى الكود و ل يؤثر اى‬
‫تأثير عالى الكود نفسه‬
‫‪ Complex‬و ‪ Elementary‬و ايه هى عاناصرها بالكامل ‪ data block‬كيفية ادراج‬
‫‪ instance data block‬و ‪ Shared‬و ها نشرح الفرق بين‬
‫؟ ‪ Data block‬يعنى ايه‬
‫بطريقة معينة انا بحددها ‪ CPU‬هى مكان لتخزاين البيانات داخل ‪data block‬‬
‫‪ function block‬و ‪ function‬حتى يتم استخدامها داخل عاناصر البرنامج مثل‬
‫‪ :‬هى ‪ Data Blocks‬يوجد نوعاين اساسيين من‬
‫اى تمكن استخدامها فى اى مكان داخل البرنامج زاى مثل اى ‪Shared data block :‬‬
‫و ديه انا اللى بكتب عاناصرها بنفسى ‪ OB‬او ‪ function block‬او اى ‪function‬‬
‫بالكامل‬
‫او ‪ Function block‬و ديه يتم استخدامها فقط مع ‪Instance data block :‬‬
‫‪system function block‬‬
‫لى ‪ call‬و ديه ل يتم كتابة عاناصرها عان طريق المبرمج بل يتم ادراجها تلقائيا عاند عامل‬
‫‪ SFB‬او ‪FB‬‬
‫خاص بيه ‪ instance data block‬يتم عامل ‪ function block‬بحيثا يكون لكل‬
‫‪ system function block‬فقط و نفس الوضع مع‬
‫فى درس خاص ‪ function block‬ها يتم شرحها مع ‪Instance Data Block‬‬
‫و ‪ blocks‬فى اى مكان فارغ داخل صفحة ‪ right click‬اضغط ‪ data block‬لدراج‬
‫‪ Data Block‬و اختار ‪ insert new object‬اختار‬
‫‪ Shared‬و طبعا ها يكون نوعاها‬

‫او ‪ symbolic name‬حسب المطلوب و لو عاايزا اكتب ‪ data block‬ها اختار رقم‬
‫ديه ‪ data block‬عان وظيفة ‪ comment‬اكتب‬
‫‪ data block‬و غيرها من المتغيرات زاى مثل اسم مبرمج‬

‫‪ OK‬بعد كدا اختار‬


‫نجدها بهذا الشكل ‪ data block‬بعد فتح‬
‫‪ Data block‬انواع عاناصر‬
‫تنقسم الى نوعاين اساسيين‬
‫و ده يحتوى عالى العناصر المبسطة ‪Elementary Data Block :‬‬
‫و ده يحتوى عالى العناصر المعقدة ‪Complex Data Block :‬‬
‫‪ Elementary Data Block‬شرح‬
‫ها نشرح كل عانصر‬
‫واحدة اى تكون اما ‪ 1‬او ‪ bit 0‬و هى قيمة تتكون من ‪bool :‬‬
‫‪ True‬و ‪ 1‬تسمى ‪ False‬تسمى ‪0‬‬

‫‪ bits‬اى قيمة تحتوى عالى ‪Byte : 8‬‬


‫‪ data block‬فقط اى لكتابة قيمة مثل ‪ 12‬داخل ‪ hexadecimal‬و تكتب هنا بصيغة‬
‫‪B#16#C‬تكتب ‪ byte‬بحجم‬
‫‪ Siemens PLC‬فى درس شرح تمثيل العاداد داخل ‪ hexadecimal‬راجع صيغة‬

‫‪ bits‬اى تحتوى عالى ‪Word : 16‬‬


‫مثل لكتابة القيمة ‪ 14‬داخل ذاكرة بحجم ‪ hexadecimal‬و يتم كتابة قيمتها بصيغة‬
‫‪ W#16#E‬تكون كالتالى ‪word‬‬

‫‪ bits‬و تحتوى عالى ‪ double word 32‬اى ‪DWord :‬‬


‫مثل لكتابة القيمة ‪ 14‬داخل ذاكرة بحجم ‪ hexadecimal‬و يتم كتابة قيمتها بصيغة‬
‫‪ D#16#E‬تكون كالتالى ‪word‬‬

‫و تتراوح قيمتها من ‪ 32768-‬الى ‪ bits +‬و تحتوى عالى ‪ integer 16‬اى ‪int :‬‬
‫‪32767‬‬
‫العادى مثل اكتب ‪ 98‬او ‪ decimal‬بالشكل ‪ data block‬و يتم كتابة قيمتها داخل‬
‫اكتب ‪ 166-‬و هكذا‬

‫و تتراوح قيمتها من ‪ bits -‬و تحتوى عالى ‪ double integer 32‬اى ‪Dint :‬‬
‫‪ 2147483648‬الى ‪2147483647+‬‬
‫العادى و كلن بالشكل ‪ decimal‬بالشكل ‪ data block‬و يتم كتابة قيمتها داخل‬
‫‪ L#899‬مثل لكتابة الرقم ‪ 899‬تكتب ‪L#Value‬‬

‫التى يمكن ان تحتوى ‪ PLC‬و هى الداتا الوحيدة فى ‪ bits‬و تحتوى عالى ‪Real : 32‬‬
‫عالى قيمة عاشرية‬
‫بتحويلها تلقائيا ‪ Simatic manager‬مثل لكتابة القيمة ‪ 99.6‬يقوم برنامج‬
‫‪e+001‬الى ‪9.960000‬‬
‫‪ Siemens PLC‬راجع درس شرح تمثيل العاداد داخل‬

‫‪ Timers‬و هى الصيغة الوحيدة لكتابة قيمة وقت داخل ‪S5Time :‬‬


‫‪ bits‬و تشغل مساحة ‪16‬‬
‫و لكتابة وقت مثل ) ساعاة و ‪ 53‬دقيقة و ‪ 30‬ثانية و ‪ 20‬مللى ثانية ( يتم كتابة‬
‫‪S5T#1H53M30S20MS‬‬
‫‪ S5T#2H46M30S0MS‬و اقصى قيمة لها‬
‫لحقا ‪ timers‬بالتفصيل الممل فى درس شرح ‪ S5Time‬و سيتم شرح‬

‫‪ IEC timers‬و هى صيغة كتابة الوقت ايضا و يتم استخدامها فى الساس مع ‪Time :‬‬
‫‪ bits‬و تشغل مساحة ‪32‬‬
‫‪ T#3d10h40m‬و نفس وقت مثل ) ‪ 3‬ايام و ‪ 10‬ساعاات و ‪ 40‬دقيقة ( يتم كتابة‬

‫تستخدم فى كتابة التاريخ ‪Date :‬‬


‫‪ bits‬و تشغل مساحة ‪16‬‬
‫‪ D#2013-3-15‬لكتابة تاريخ مثل ‪ 15/3/2013‬نكتب‬
‫‪ D#2168-12-31‬الى ‪ D#1990-1-1‬و تتراوح قيمة التاريخ من‬

‫و تستخدم لكتابة وقت ما ‪time of day :‬‬


‫‪ bits‬و تشغل مساحة ‪32‬‬
‫مثل لكتابة الوقت الساعاة ‪ 2‬ظهرا و ‪ 30‬دقيقة و ‪ 20‬ثانية يتم‬
‫‪ TOD#14:30:20.000‬كتابة‬
‫‪ TOD#23:59:59.999‬الى ‪ TOD#0:0:0.000‬و تتراوح قيمة الوقت من‬

‫و تستخدم لكتابة حرف ‪ character‬و هى اختصار ‪CHAR :‬‬


‫‪ bits‬و تشغل مساحة ‪8‬‬
‫'‪ 'F‬يتم كتابتها كالتالى ‪ F‬مثل لكتابة حرف‬

‫كدا احنا شرحنا كل نوع عالى حدى و الحجم الذى يشغله و فيما يستخدم‬
‫اللى انشأناها ‪ Data Block‬دلوقتى ها نقوم بأدراج كل العناصر السابقة عالى‬
‫‪ :‬نجد ان هناك الخانات التية‬
‫‪ test‬و فيه يتم ادراج اسم القيمة حسب اختيارى مثل انا كتبت ‪name :‬‬
‫اللى تم شرحه بالتفصيل ‪ data‬و ده نوع ‪type‬‬
‫‪ download‬ها يدرجها عاند عامل ‪ PLC‬و ديه القيمة البتدائية اللى ‪initial value :‬‬
‫للداتا بلوك‬
‫و القيمة ديه البرنامج يضعها تلقائيا بصفر و لكن ممكن اغير فيها حسب المطلوب‬
‫تتغير قيمة الداتا حسب البرنامج اللى ‪ download‬و بمجرد ان يعمل البرنامج بعد عامل‬
‫انا كاتبه‬
‫و ده لو انا عاايزا اكتب كومنت يذكرنى بأستخدام الداتا ديه مثل ‪Comment :‬‬

‫بحجزا ذاكرة لكل عانصر انا بدرجه ‪ Simatic manager‬نلحظ التى ‪ :‬يقوم برنامج‬
‫كامله ‪ byte‬يقوم البرنامج بحجزا ذاكرة ‪ bool 1‬مع ملحظة ان عاند استخدام داتا بذاكرة‬
‫لها‬
‫كامله لها ‪ word‬يقوم البرنامج بحجزا ذاكرة ‪ byte 1‬و عاند استخدام داتا بذاكرة‬

‫‪ Data Block‬تم ادراجها داخل ‪ data‬كيفية استدعااء اى‬


‫‪ data block‬هنا رقم ( مثل ‪ DB1.DBX4.0‬يتم استدعاائه عالى هذه الصيغة ‪bool :‬‬
‫) رقم ‪ byte 4‬رقم ‪ 0‬داخل ‪ bit‬يساوى ‪ 1‬و نقصد‬
‫بهذا ‪ DB1.DBB3‬يتم كتابة المر بهذه الطريقة ‪ byte‬و لستدعااء القيمة المخزانه عالى‬
‫رقم ‪ data block 1‬رقم ‪ 3‬فى ‪ BYTE‬الشكل تم استدعااء‬
‫( ‪ DB4.DBW6‬يتم كتابة المر بهذه الصيغة ‪ word‬و لستدعااء القيمة المخزانه عالى‬
‫) رقم ‪ data block 4‬رقم ‪ 6‬فى ‪ WORD‬بهذا الشكل تم استدعااء‬
‫يتم كتابة المر بهذه الصيغة ‪ double word‬و لستدعااء القيمة المخزانه عالى‬
‫‪ data block‬رقم ‪ 8‬فى ‪ double word‬بهذا الشكل تم استدعااء ( ‪DB5.DBD8‬‬
‫) رقم ‪5‬‬
‫و ذلك بعض النظر عان نوع الذاكرة‬

‫‪ data block 1‬دلوقتى ها نستدعاى كل العناصر اللى كتبناها فى‬

‫‪ BIT‬و ذلك لنها مخزانه عالى ذاكرة ‪ DB1.DBX0.0‬نكتب ‪ test1 :‬لستدعااء‬


‫‪ byte‬و ذلك لنها مخزانه عالى ذاكرة ‪ DB1.DBB1‬نكتب ‪ test2 :‬لستدعااء‬
‫‪ word‬و ذلك لنها مخزانه عالى ذاكرة ‪ DB1.DBW2‬نكتب ‪ test3 :‬لستدعااء‬
‫‪ double word‬و ذلك لنها مخزانه عالى ذاكرة ‪ DB1.DBD4‬نكتب ‪test4 :‬‬
‫‪ word‬و ذلك لنها مخزانه عالى ذاكرة ‪ DB1.DBW8‬نكتب ‪test5 :‬‬
‫‪ double word‬و ذلك لنها مخزانه عالى ذاكرة ‪ DB1.DBD10‬نكتب ‪test6 :‬‬
‫‪ double word‬و ذلك لنها مخزانه عالى ذاكرة ‪ DB1.DBD14‬نكتب ‪test7 :‬‬
‫‪ word‬و ذلك لنها مخزانه عالى ذاكرة ‪ DB1.DBW18‬نكتب ‪test8 :‬‬
‫‪ double word‬و ذلك لنها مخزانه عالى ذاكرة ‪ DB1.DBD20‬نكتب ‪test9 :‬‬
‫‪ word‬و ذلك لنها مخزانه عالى ذاكرة ‪ DB1.DBW24‬نكتب ‪test10 :‬‬
‫‪ double word‬و ذلك لنها مخزانه عالى ذاكرة ‪ DB1.DBD26‬نكتب ‪test11 :‬‬
‫‪ double word‬و ذلك لنها مخزانه عالى ذاكرة ‪ DB1.DBD30‬نكتب ‪test12 :‬‬

‫‪ Data Block‬مثال عاملى عالى استخدام‬


‫ها نعمل برنامج يقوم بمقارنة رقمين و تشغيل خرج حسب المقارنة ‪ FC3‬داخل‬
‫‪ Siemens PLC‬داخل ‪ Comparator‬عاشان تفهم المثال راجع درس شرح اوامر‬

‫فى تشغيل ‪ I 10.0‬كنقطة مفتوحة تستخدم مع ‪ DB1.DBX0.0‬هنا استخدمت‬


‫‪compare block‬‬
‫فى عاملية المقارنة نفسها ‪ DB1.DBW8‬و استخدمت‬
‫و اظهر اسم المتغير ‪ learn data block‬و هو ‪ DB1‬لحظ ان البرنامج اظهر اسم‬
‫‪ test 5‬و ‪ test 1‬اللى ادرجته‬
‫‪ STL‬البرنامج السابق بلغة‬
‫‪ Complex Data Block‬كدا باقى عاناصر‬
‫‪ : Date and Time - String - Array - Struct - UDT‬و هى‬
‫و هيتم شرحهم بالتفصيل الدرس القادم من الكورس‬
‫‪ integer‬شرح العمليات الحسابية‬

‫‪ real‬او ‪ floating point‬شرح العمليات الحسابية من النوع‬


‫‪ Real‬فى هذه العمليات الحسابية يكون الدخل و الخرج من النوع‬
‫اى انها تحتوى عالى قيم عاشرية‬

‫‪ function‬شرح كل‬
‫الجمع و الطرح و الضرب و القسمة جميعها نفس الطريقة‬
‫‪ Subtract real‬شرح عاملية الطرح‬
‫‪ MD 20 - 50.78‬هنا سيتم طرح‬
‫‪ DB10.DBD30‬و حفظ الناتج عالى‬
‫‪ statement list‬المثال السابق بلغة‬

‫‪ Real‬يدل عالى ان العملية الحسابية من النوع ‪ R‬لحظ ان الحرف‬

‫‪Absolute Value Function‬‬


‫‪ real‬تستخدم فى ايجاد القيمة الموجبة دائما من اى رقم‬

‫يحتوى عالى ‪ , 70-‬يكون الخرج هو القيمة الموجبة ‪ DB7.DBD0‬بمعنى ان لو الدخل‬


‫فقط اى ‪70‬‬

‫‪ STL‬فى لغة ‪Real absolute value‬‬

‫‪Square root function‬‬


‫و تقوم بحساب الجزار التربيعى‬
‫‪ Statement List‬كيفية كتابة المر فى لغة‬

‫‪Square Function floating point‬‬


‫‪ out‬تقوم بتربيع الرقم و حفظ الناتج عالى‬
‫‪ Statement List‬العملية الحسابية السابقة بلغة‬

‫‪ EXP‬و ‪ LN‬شرح العملية الحسابية‬


‫كما هو معروف فى الرياضيات‬
‫‪ natural Logarithm‬تقوم بحساب ‪LN‬‬
‫‪ Exponential Value‬تقوم بحساب ‪EXP‬‬

‫‪ STL‬الكود السابق بلغة‬

‫و ‪ Arc cosine‬و ‪ Arc sine‬و ‪ Tangent‬و ‪ Cosine‬و ‪ Sine‬كما نجد عامليات‬


‫‪Arc tangent‬‬
‫‪ radian‬و تكون جميع الزاوايا المستخدمة فى هذه العمليات بقيم‬
‫‪ Cosine function‬مثال عالى‬
‫‪ statement list‬الكود بلغة‬

‫يتم ‪ STL‬لستخدام اى من الدوال التالية فى لغة ‪ statement list :‬ملحوظة عالى‬


‫كتابة حروفها داخل الكود كما سبق فى المثلة السابقة‬

‫‪ Mathematical Operations‬شرح العمليات الحسابية‬


‫الى نوعاين اساسيين ‪ Simatic Manager‬تنقسم العمليات الحسابية داخل‬
‫اى تتعامل مع الرقام الصحيحة فقط و ل يجوزا استخدام ارقام ‪Integer Functions :‬‬
‫عاشرية معها‬
‫و هى التى تتعامل مع الرقام العشرية ‪Floating Point Functions :‬‬
‫‪ Integer Functions‬شرح‬
‫و جميعها تقبل الرقام الموجبة او السالبة‬
‫تنقسم الى نوعاين حسب حجم البيانات المدخلة و المخرجة‬
‫و يتم استخدامها عاند التاكد من ان البيانات المدخلة و ‪ integer :‬عامليات حسابية بحجم‬
‫‪-‬اى ل تتعدى ‪ 32767‬او ‪ word 32768‬الخارجة من العملية الحسابية ل تتعدى الذاكرة‬
‫و تستخدم عاندما نحتاج عامليات حسابية ‪ double integer :‬عامليات حسابية بحجم‬
‫‪ double word‬لرقام اكثر من ‪ 32767‬او ‪ -32768‬حتى حجم ذاكرة‬
‫‪ double integer‬و ‪ integer‬العمليات الحسابية‬

‫‪ double‬و ‪ integer‬نلحظ وجود عامليات جمع و طرح و ضرب و قسمة لكل النوعاين‬
‫‪integer‬‬

‫‪ integer‬مثال عالى عاملية جمع من النوع‬


‫يتم تشغيل عاملية الجمع ‪ EN‬عاند اعاطاء اشارة عالى ‪EN :‬‬
‫عاندما تتم العملية الحسابية بدون مشكلة ‪ ENO‬يتم تفعيل ‪ENO :‬‬
‫الرقام المراد جمعها ‪ IN 2‬و هى ‪IN 1‬‬

‫‪ statement list‬المثال السابق بلغة‬

‫‪ Accu 1‬عالى ‪ MW 20‬تم استدعااء‬


‫‪ Accu 2‬عالى ‪ MW 20‬و ترحيل ‪ Accu 1‬عالى ‪ MW 22‬ثم استدعااء‬
‫‪ +I‬ثم عامل عاملية الجمع عان طريق الكود‬
‫هنا ‪ +‬تعنى ان العملية جمع ) طرح تعنى ‪ -‬و قسمة تعنى ‪ /‬و ضرب يعنى * (‬
‫‪ integer‬اى ان العملية الحسابية من النوع ‪ integer‬تعنى ‪ I‬عالمة‬
‫عالى ‪ I 0.0‬اى ل تؤثر حالة ‪ EN‬نلحظ هنا ان عاملية الجمع تتم بدون وجود الشرط‬
‫العملية‬
‫اول و سوف يتم شرحه فى درس اخر و اعاادة ‪ Jump‬و لضافة شرط يجب فهم امر‬
‫‪ EN‬كتابة امر العملية الحسابية بعد اضافة الشرط‬

‫‪ double integer‬مثال عالى عاملية قسمة من النوع‬

‫‪ IN 1‬فى ‪ double word‬بحجم ‪ Data Block 4‬هنا تم استخدام قيمة متغير من‬
‫( ‪ L#20‬و يجب كتابته عالى الصيغة ‪ IN 2‬تم استخدام عادد صحيح يساوى ‪ 20‬داخل‬
‫) ‪ double word‬ليضاح ان الرقم بذاكرة‬
‫‪ MD 40‬عالى ‪ 20‬و حفظ الناتج عالى ‪ DB4.DBD20‬و تم قسمة الرقم المخزان عالى‬
‫فى حالة القسمة يجب التأكد ان الخرج سيكون رقم صحيح ايضا مثله مثل الدخل‬
‫‪ error‬رسالة خطا ‪ CPU‬لنه اذا كان الخرج عادد غير صحيح سيعطى‬
‫لذلك انا كان هناك اى شك ان الخرج سيصبح رقم غير صحيح او ان الدخل سيتم تخزاين‬
‫‪ floating point‬رقم غير صحيح عاليه ‪ ,,‬يجب استخدام عامليات حسابية من النوع‬
‫كما سنرى ‪functions‬‬

‫‪ statement list‬المثال السابق بلغة‬


‫‪ ACCU 2‬عالى ‪ DB4.DBD20‬لحظ انه تم تحميل‬
‫‪ ACCU 1‬و تحميل ‪ 20‬عالى‬
‫‪ ACCU 1‬عالى ‪ ACCU 2‬ثم قسمة‬
‫‪ MD 40‬و ارسال الناتج الى‬
‫الرمزا ‪ /‬يعنى ان العملية عاملية قسمة‬
‫‪ double integer‬تعنى ان العملية الحسابية من النوع ‪ D‬الرمزا‬

‫‪ return fraction double integer‬العملية الحسابية‬


‫‪ double integer‬و هذه العملية الحسابية توجد فقط فى‬

‫‪ DB6.DBD8‬عالى ‪ 6‬و يتم حفظ المتبقى من القسمة عالى ‪ MD 4‬هنا يتم قسمة‬
‫مثل ‪ :‬اذا تم قسمة ‪ 10‬عالى ‪ 3‬تكون الناتج ‪ ) 1‬و هو المتبقى من ‪ 10‬بعد قسمة ‪ 9‬عالى ‪3‬‬
‫(‬
‫ شرح‬Complex Data Block ‫ و ده تكملة للدرس السابق شرح‬Data Block ‫فى‬
Siemens PLC
‫ معنى‬Complex data block :
‫‪ double word‬عاناصر مركبه من اكثر من عانصر و تشمل اكثر من ذاكرة‬
‫‪ :‬تحتوى عالى التى‬
‫‪Date and Time - String - Array - Struct - UDT‬‬

‫ها نشرح كل عانصر عالى حدى‬


‫‪ Date and Time :‬شرح‬
‫من اسمه نستنتج انه يقرا قيمة الوقت و التاريخ معا‬
‫) ‪ double word‬اى فى ‪ bytes ( 2‬يخزان قيمته فى ‪8‬‬
‫‪ :‬كالتالى ‪ bytes‬تنقسم ‪8‬‬
‫يحتوى عالى قيمة السنة و يتراوح من ‪ 1990‬الى ‪byte 0 : 2089‬‬
‫يحتوى عالى الشهر و يتراوح من ‪ 01‬الى ‪byte 1 : 12‬‬
‫قيمة اليوم و يتراوح من ‪ 1‬الى ‪byte 2 : 30‬‬
‫يحتوى عالى قيمة الساعاة ) من ‪ 0‬الى ‪byte 3 : ( 23‬‬
‫يحتوى عالى الدقائق من ‪ 0‬الى ‪byte 4 : 59‬‬
‫يحتوى عالى الثوانى من ‪ 0‬الى ‪byte 5 : 59‬‬
‫يحتوى عالى جزاء من قيم مللى ثانية و تتراوح من ‪ 0‬الى ‪byte 6 : 99‬‬
‫ينقسم الى جزائين الجزاء الول يحتوى عالى المتبقى من قيمة مللى ثانية و ‪byte 8 :‬‬
‫تتراوح من ‪ 0‬الى ‪9‬‬
‫اى يحدد اى يوم من السبوع و يتراوح من ‪ day of week 1‬الجزاء الثانى يحتوى عالى‬
‫الى ‪ ) 7‬عادد ايام السبوع ( بحيثا ان رقم ‪ 1‬يوازاى يوم الحد‬
‫لحظ كدا ان مللى ثانية بالكامل يتراوح من ‪ 0‬اللى ‪999‬‬
‫‪ BCD‬لحظ ايضا ان اى قيمة سابقة تخزان بصيغة‬

‫يكتب بالصيغة التالية ‪ Date and Time :‬صيغة كتابة‬


‫‪DT#year - month - day - hour : minute : second :‬‬
‫‪millisecond‬‬
‫‪ :‬مثال‬
‫اى التاريخ ‪ 18/10/2017‬و الساعاة ‪ 2‬ظهرا ‪DT#2017-10-18-14:30:40:800‬‬
‫و ‪ 30‬دقيقة و ‪ 40‬ثانية و ‪ 800‬مللى ثانية‬

‫‪ Date and Time‬حدود قيم‬


‫‪ DT#2089-12-31-‬الى ‪ DT#1990-01-01-0:0:0.0‬يتراوح من‬
‫‪23:59:59.999‬‬

‫‪ Data Block‬فى ‪ date and time‬مثال عالى ادراج داتا من نوع‬

‫‪ :‬نلحظ التى‬
‫تساوى اقل قيمة ممكنة ‪ initial value‬اعاطى قيمة ‪ Simatic Manager‬ان برنامج‬
‫‪ date and time‬للداتا‬
‫و اصبح ‪ bytes‬يساوى ‪ bytes 8‬عادد من ‪ date and time‬ان البرنامج اعاطى‬
‫‪ DBD8‬المتاح بعدها من اول‬
‫‪ Data Block:‬فى ‪ String‬شرح‬
‫‪ plc‬يستخدم فى كتابة اى كلمات داخل‬
‫لكتابة الحروف و ‪ bytes 2‬مقسمين الى ‪ bytes 254‬و هو يحتوى عالى عادد ‪256‬‬
‫يستخدمهم البرنامج فى ترتيب الحروف ‪Bytes‬‬
‫‪ byte‬و من المعروف ان كل حرف يكتب فى ‪1‬‬
‫واحد ‪ String‬اذا يمكن كتابة عادد ‪ 254‬حرف فى‬
‫‪ Simatic‬يقوم ‪ Data Block‬داخل ‪ string‬اذا عاند ادراج داتا من النوع‬
‫له ‪ bytes‬بحجزا ‪Manager 254‬‬
‫مثل ‪ ,‬من غير ‪ Siemens‬و لكن لو انا محتاج كتابة كلمة تتكون من ‪ 7‬حروف مثل كلمة‬
‫لكتابة ‪ 7‬حروف فقط ‪ bytes‬المفضل حجزا ‪254‬‬
‫كما سنرى ‪ string‬لذلك يتم تحديد عادد الحروف المطلوبة بجانب امر‬
‫‪ single quotation marks‬بين اثنين ‪ string‬ايضا يجب كتابة اى كلمة داخل‬
‫‪ Data Block‬داخل ‪ String‬مثال لدراج‬

‫لكتابة عادد ‪ 254‬حرف ‪ bytes‬يقوم البرنامج بحجزا ‪ string 254‬عاند ادراج‬


‫فى خانة ‪ single quotation marks‬و ايضا وضع مسافة فارغة بين اثنين‬
‫‪initial value‬‬
‫ليستوعاب فقط ‪ 10‬حروف كحد اقصى ‪ string‬تعديل‬
‫‪ initial value‬داخل ‪ PLC‬و كتابة كلمة‬
‫‪ Data Block‬فى ‪ Array‬شرح استخدام‬
‫تخيل معى تطبيق يستخدم ‪ 24‬عاداد مثل و يتم استخدامهم فى حساب عادد انتاجية الماكينة‬
‫فى كل ساعاة بحيثا ان كل عاداد يقوم بحساب انتاجية ساعاة معينة من اليوم و يقوم‬
‫مثل ‪ HMI‬البرنامج بعرض انتاجية كل ساعاة عالى شاشة‬
‫ليتم تخزاين قيم العدادات عاليها ‪ integer‬اذا انا بحاجة هنا الى ‪ 24‬متغير من النوع‬
‫‪ integer‬لعمل ذلك بالطريقة العادية يجب ادراج ‪ 24‬داتا من النوع‬
‫كما بالصورة‬
‫و ده حاجة مملة و غير احترافية نهائيا‬
‫يحتوى عالى ‪ 24‬عانصر ‪ integer‬من النوع ‪ Array‬و الفضل هنا استخدام‬
‫و ده يتم بسرعاة جدا و فى سطرين فقط مش ‪ 24‬سطر‬

‫نقوم بكتابة اسم لها و ده اى اسم انا عاايزا اكتبه مثل زاى ‪ Array‬بعد عامل ادراج‬
‫‪product_counters‬‬
‫و بداية و نهاية ترقيم العناصر ‪ Array‬و اختار عادد عاناصر‬
‫اى العنصر الول رقمه ‪ 1‬و الخير رقمه ‪ 24‬اذا هنا ‪ [ARRAY[1..24‬فهنا انا اخترت‬
‫لدى عادد ‪ 24‬عانصر‬
‫‪ integer‬و هنا اخترت ‪ Array‬كمان لزام اختار نوع عاناصر‬
‫اللى عاملتها ‪ Array‬لصالح ‪ bytes‬نلحظ هنا ان البرنامج حجزا ‪48‬‬
‫اذا ) ‪ bytes‬اى ‪ integer ( 2‬لنى ادرجت عادد ‪ 24‬عانصر و كل عانصر نوعاه‬
‫‪ bytes‬المجموع ‪48‬‬
‫اى مصفوفة فى اتجاه واحد ‪ one dimension array‬المصفوفة السابقة تعتبر‬
‫او اكثر ‪ dimensions‬او ‪ dimensions 3‬تحتوى عالى ‪ Array 2‬و ممكن اعامل‬
‫حسب اللى محتاجه‬
‫‪ dimensions‬تتكون من ‪ array 3‬مثال لعمل‬

‫نلحظ التالى‬
‫يتكون من العناصر ‪ 2‬الى ‪ ) 5‬اى ‪ 4‬عاناصر ( ‪dimension 1 :‬‬
‫يتكون من العناصر ‪ 1‬الى ‪ ) 8‬اى ‪ 8‬عاناصر ( ‪dimension 1 :‬‬
‫يتكون من العناصر ‪ 3‬الى ‪ ) 7‬اى ‪ 5‬عاناصر ( ‪dimension 1 :‬‬
‫السابقة = ‪ 160 = 5*8*4‬عانصر ‪ array‬اذا حجم‬
‫تخيل الصعوبة و الوقت ( ‪ real‬اى بكتابة السطر السابق تم ادراج ‪ 160‬عانصر من النوع‬
‫) و ادراج ‪ 160‬عانصر كل عانصر فى سطر وحده ‪ array‬الضائع فى عادم استخدام‬
‫و عادد عاناصرها ‪ real 160‬بما ان المصفوفة من النوع‬
‫‪ bytes‬اذا البرنامج قد حجزا للمصفوفة عادد ‪640 = 160 * 4‬‬
‫‪ byte‬رقم ‪ 48‬و ينتهى ب ‪ byte‬يبدا من ‪ array‬لحظ من الصورة ان اول عانصر من‬
‫رقم ‪688‬‬
‫) حجم المصفوفة ( ‪688-48=640‬‬

‫او ‪ FC‬مثل ( داخل اى مكان فى البرنامج ‪ array‬كيفية استدعااء عانصر من عاناصر‬


‫) ‪FB‬‬
‫‪ one dimension array‬اول استدعااء عانصر من‬
‫‪ compare integer‬مثل كتابة عانصر من المصفوفة فى بلوك‬

‫ثم نقوم بكتابة رقم العنصر داخل القوسين‬


‫ نجد ان‬Simatic Manager ‫ قام بكتابة‬data block address ‫الخاص بهذا‬
‫العنصر‬

‫ استدعااء عانصر من‬: ‫ ثانيا‬three dimension array


‫‪ three dimensions‬ثم نكتب ارقام العناصر حسب ترتيبها فى‬

‫المرافق للعنصر الذى تم ادراجه ‪ data block address‬نجد ان البرنامج قام بكتابة‬
‫او ‪ elementary‬ان كان ‪ array‬ملحوظة ‪ :‬يمكن استخدام اى نوع عانصر داخل‬
‫‪complex data type‬‬
‫داخلها ) و لكن هذا ‪ array‬عالى ‪ array‬او ان تحتوى ‪ string‬فمثل يمكن استخدام‬
‫يمكن ان يكون معقدا و ل يفضل استخدامه (‬

‫‪ data block‬فى ‪ struct‬شرح‬


‫هو مجموعاة من الداتا المختلفة ‪struct‬‬
‫كنوع من ‪ struct‬و ده مهمته يجمع مجموعاة من الداتا مع بعض بحيثا استخدمهم باسم‬
‫التنظيم ليس اكثر‬
‫يقوم البرنامج بفتح قائمة اسفل منه ‪ struct‬بعد ادراج‬
‫و حتى ‪ array‬و ‪ s5time‬و ‪ int‬و ‪ Bool‬مثل ‪ data‬و يمكن وضع اى مجموعاة من‬
‫فرعاى ‪struct‬‬
‫‪ data block‬معين فى ‪ struct‬موجودة داخل ‪ data‬كيفية استدعااء اى‬
‫و فى المثال تكون ( المطلوبة ‪ data‬تفتح القائمة الفرعاية و نختار منها ‪ D‬بكتابة حرف‬
‫) ‪test4‬‬
‫"‪ Complex Data Block".x.test4‬بهذا الشكل ‪ test 4‬او يمكن كتابة عانوان‬
‫بحيثا ان‬
‫‪ Data Block‬هو اسم ‪Complex Data Block :‬‬
‫الذى تم انشاءه ‪ struct‬هو اسم ‪x :‬‬
‫المراد استدعااءه ‪ integer data‬هو اسم ‪test4 :‬‬
‫و ل يعتبر نوع داتا ‪ data‬هو للتنظيم فقط و ل يغير فى ‪ struct‬اذا نستنتج ان استخدام‬
‫بحد ذاته‬

‫‪ data block‬داخل ‪ UDT‬شرح‬


‫‪ User Defined Data‬و هى‬
‫فى درس اخ ‪ UDT Block‬و سيتم شرحها بالتفصيل عاند شرح‬

‫لبلوك داخل ‪ calling‬المختلفة و استخدام كل نوع و عامل ‪ blocks‬ها نشرح انواع‬


‫‪ scan cycle‬بلوك اخر و شرح‬
‫و ده الرابط ‪ :‬شرح ‪ hardware configuration‬كنا وصانا فى الدرس الول لعمل‬
‫نقفل صفحة ‪ save and compile‬بعد عامل ‪Hardware Configuration‬‬
‫كما بالشكل ‪ blocks‬و افتح الخانة ‪hardware configuration‬‬
‫‪ OB1‬ها يظهر عاندى بلوك واحد فقط و هو‬
‫ها ‪ insert new object‬فى اى مكان فاضى و اختار ‪ right click‬لو ضغطت‬
‫التية ‪ blocks‬يضهر‬

‫‪ :‬بالتفصيل ‪ block‬شرح كل‬


‫‪ OB‬اختصارا ‪Organization Block :‬‬
‫‪ user‬و ‪ CPU‬و ديه البلوكات التنظيمية و ديه المسئولة عان تنظيم العمل بين‬
‫المبرمج عان طريقى ‪program‬‬
‫اى ( ‪ power reset‬و ده بيتم تفعيل ذه عاند عامل ‪ OB 100 :‬ديه ‪ blocks‬من امثلة‬
‫) ‪ Warm Restart‬عامل‬
‫‪ cycle‬و ده بيتم تنفيذه كل ‪ cyclic block‬و ده نوعاه ‪OB 1 :‬‬
‫بيدعام ‪ CPU‬و كل ما كان ‪ CPU‬اللى مش كلها موجوده فى اى ‪ OB‬و غيرها كتير من‬
‫اكتر ‪ ,‬بيكون اغلى ‪OB s‬‬

‫‪ FC‬اختصارا ‪Function :‬‬


‫‪ LADDER diagram‬و ده عاباره عان برنامج انا ببرمجه بلغات البرمجة المختلفة مثل‬
‫‪ Function Block Diagram‬او ‪ Statement List‬او‬
‫بس ده عاادة ل يكون البرنامج بالكامل و بيكون جزاء فقط من البرنامج‬
‫لها داخل اى ‪ CALL‬ل يتم تنفيذها ال عاند عامل ‪ FC‬مع العلم ان اى اوامر مكتوبة داخل‬
‫‪ CPU‬و من خللها انا بوجه ‪ OB‬ل يقرا اى حاجة ال ‪ CPU‬بمعنى تانى ‪ OB‬من‬
‫‪ OB‬داخل اى ‪ FC‬لل ‪ Call‬عان طريق عامل ‪ FC‬لقراءة‬

‫‪ DB‬اختصارا ‪Data Block :‬‬


‫او اى ‪ FB‬او ‪ FC‬او ‪ OB‬و ده ببساطه مكان لتخذين القيم و البيانات لستخدامها داخل‬
‫مكان اخر فى البرنامج‬
‫البيانات ديه مثل وقت او سرعاة او قيمة عاددية و غيرها‬
‫‪ :‬و البلوك ده نوعاين رئيسيين‬
‫و ده بيتم استخدامه داخل اى مكان فى البرنامج بدون اى ‪1- shared data block :‬‬
‫قيود‬
‫او ‪ function block‬و ده بيكون مخصص لخدمة ‪2- Instance data block :‬‬
‫) ها يتم شرحه لحقا( ‪System function block‬‬
‫و اخر لكل ‪ function block‬لكل ‪ instance data block‬بحيثا بيتم تخصيص‬
‫‪system function block‬‬

‫‪ FB‬اختصارا ‪Function Block :‬‬


‫لزام يحتاج ‪ function block‬و الفرق ان ‪ function‬و ده مشابه تماما ل‬
‫مثل ‪ FB 2‬ل ‪ insert‬عاشان يشتغل بمعنى لو انا عاملت ‪instance data block‬‬
‫‪ DB‬و ما اقدرش استخدم ‪ DB 5‬ليكن ‪ instance data block ,‬يبقى لزام احددله‬
‫ده فى اى مكان اخر مره ثانيه ‪5‬‬
‫‪ UDT‬اختصارا ‪Data Type :‬‬
‫‪ user data type‬او يطلق عاليها‬
‫و ده بستخدمه لو عاايزا اعامل مجموعاة من البيانات الجاهزاه و اللى بيتم استخدامها بشكل‬
‫‪ FB‬او ‪ FC‬او ‪ OB‬مجمع داخل اى مكان فى البرنامج مثل‬

‫‪ VAT‬اختصارا ‪Variable Table :‬‬


‫بغرض الصيانة مثل ‪ monitor‬و ده مجرد جدول بضع فيه المتغيرهات بتاعاتى اعاملها‬
‫انى اعارف قيمة المتغير ده كام دلوقتى و كمان اقدر اغير فى قيمته يدويا‬

‫من البلوكات ديه ‪ block‬لى ‪ insert‬طيب ازااى اعامل‬


‫‪ function‬ل ‪ insert‬مثل انى اعامل‬
‫تظهر القائمة التالية ‪ function‬بضغط عالى‬

‫تظهر الصفحة التالية ‪ OK‬بعد الضغط عالى‬


‫او ) ‪ Statement List‬اختصار ( ‪ STL‬و ديه صفحة كتابة الكود فى اى لغة مثل‬
‫) ‪ Ladder Diagram‬اختصار ( ‪LAD‬‬
‫) ‪ Function Block Diagram‬اختصار ( ‪ FBD‬او‬

‫‪ :‬و بتتكون من ثلثا اجزااء اساسية‬


‫( ‪ Temps‬و ده يستخدم فى تحديد متغيرات الدخل و الخرج و ‪declaration table :‬‬
‫) ها يتم شرحها لحقا بالتفصيل‬
‫و ده مكان كتابة كود البرمجة ‪code section :‬‬
‫و ده فيه معلومات مفصلة عان اى متغير ) اللى ممكن يكون دخا او ‪Detail Window :‬‬
‫فى البرمجة ‪ error‬خرج او قيمة ( و كمان بيوضح لو فيه‬

‫‪ OB1‬لى بلوك داخل ‪ call‬كيفية عامل‬


‫مع وجود نقطة من ‪ STOP‬و ‪ START‬ها اكتب اى برنامج مثل تشغيل موتور ‪ FC 1‬داخل‬
‫‪overload‬‬
‫هى الخرج اللى هايشغل الموتور ‪ Q 0.0‬بفرض ان‬
‫‪ normally open push button‬مفتاح تشغيل الموتور و نوعه ‪I 0.0‬‬
‫‪ normally close push button‬مفتاح ايقاف الموتور و نوعه ‪I 0.1‬‬
‫نقطه مغلقة من الوفرلود ‪I 0.2‬‬
‫‪ network title‬هنا كتبت‬
‫عاشان ادخل كومنت ‪ insert network comment‬و ها اضغط كليك يمين و اختار‬
‫ديه ‪ network‬خاص‬
‫‪ save‬و ده بعد ما كتبت كومنت و عاملت‬

‫‪ motor start stop‬ملحوظات عالى كتابة برنامج‬


‫تم اختيارهم داخل البرنامج ‪ overload‬الخاصين بمفتاح اليقاف و نقطة ‪ I 0.2‬و ‪I 0.1‬‬
‫نقاط مفتوحة‬
‫ل يفهم ان النقطه ديه تمثل ايه فى الحقيقة ‪ PLC‬لن‬
‫نقطة مفتوحة تعنى نقطة مشابهة للدخل عالى موديول الدخل ‪ inputs :‬اى ان فى حالة‬
‫‪digital input module‬‬
‫‪ digital input module‬نقطة مغلقة تعنى نقطة مخالفة للدخل عالى موديول الدخل‬

‫الموتور مش ها ‪ CPU‬عالى ‪ download‬حتى لو عاملت ‪ FC‬طيب بعد ما برمجت‬


‫اللى انا برمجتها ديه اساسا ‪ FC 1‬مش ها يقرا ‪ CPU‬يشتغل و‬
‫و يلقى امر ‪ OB 1‬عاشان البرنامج لما يقرا ‪ OB 1‬داخل ‪ FC 1‬للبلوك ‪ call‬لزام اعامل‬
‫تانى و هكذا ‪ OB1‬و بعد كدا يرجع يكمل ‪ FC 1‬ها يروح يقرا ‪CALL FC1‬‬
‫‪ call‬ازااى بقى اعامل‬
‫‪ OB 1‬اروح افتح‬
‫بتظهر القائمة ديه ‪ OB 1‬اول مره افتح‬
‫‪ OB 1‬و افتح ‪ ok‬اختار‬
‫تابع الصورة‬

‫‪ call‬كدا انا عاملت‬


‫ها تشتغل ‪ FC 1‬و كدا‬
‫لبلوك ‪ call‬و ارجع اعامل ‪ FC 1‬مثل داخل ‪ FC 2‬لبلوك ‪ call‬ملحوظة ‪ :‬انا ممكن اعامل‬
‫و هكذا ‪ FC 2‬داخل ‪FB 5‬‬
‫لو انا عاملت كدا‬
‫‪ call FC 1‬و يجد امر ‪ OB 1‬ها يقرا ‪CPU‬‬
‫‪ call FC 2‬و يجد امر ‪ FC1‬يقوم يروح يقرا‬
‫‪ call FB 5‬و يجد امر ‪ FC 2‬يقرا ‪ CPU‬يروح‬
‫‪ call‬و بعد ما يخلصه و ل يجد داخله امر ‪ FB 5‬يروح ينفذ البلوك‬
‫و يخلصه ‪ OB 1‬كدا يرجع البرنامج يكمل تنفيذ‬
‫تانى فيروح ينفذه و هكذا ‪ call FC 1‬من تانى و يلقى امر ‪ OB 1‬و بعد كدا يبدا‬

‫فقط ؟ ‪ OB 1‬طيب هل ممكن اكتب كل البرنامج بتاعاى فى‬


‫‪ Linear ptogram‬الجابة ‪ :‬نعم و هنا ها يكون اسمه‬
‫بينهم ده ‪ call‬و عامل اكثر من عاملية ‪ FB‬و ‪ FC‬و فى حالة استخدام اكثر من‬
‫‪structured program‬اسمه‬
‫ثالثا و ‪ block‬اخر الى ‪ block‬الى ‪ block‬اكثر من مره من ‪ call‬لحظ ان عاملية‬
‫‪ Nesting‬هكذا ‪ ,‬ديه تسمى عاملية‬
‫يعنى البرنامج ها يبقى اتقل و ابطأ ‪ scan cycle‬زااد ‪ nesting‬و كلما زاادت عامليات‬
‫مسموح بيه ‪ 8‬عاملية ‪ Nesting‬اقصى عادد ‪ S7-300 :‬من نوع ‪ PLC‬فى حالة‬
‫‪Nesting‬‬
‫‪ Nesting‬مسموح بيه ‪ 16‬عاملية ‪ Nesting‬اقصى عادد ‪ CPU 318 :‬ماعادا‬

‫‪ :‬الدرس القادم‬
‫بالتفصل ‪ Scan Cycle‬شرح‬

Vous aimerez peut-être aussi