من فضلك ادعم الموقع على جوجل بالضغط على علامة g+1
الكاتب
elec engineer
بتاريخ
9:26 م
STL
نكمل كورس شرح Siemens S7 300
و موعدنا مع الدرس السابع
شرح المقارنات بين الاعداد
المقارنات هى عملية تؤثر فقط على حالة RLO
اى ان الخرج من عمليات المقارنة اما 1 او 0
توجد ثلاث انواع من المقارنات
integer comparator : اى يتعامل مع ارقام integer اى تتكون من 16 bits و تكون موجبة او سالبة
double integer comparator : اى يتعامل مع ارقام double integer تتكون من 32 bits و ايضا موجب او سالب
real comparator : اى يتعامل مع ارقام real تتكون من 32 bits و ايضا موجب او سالب
طرق المقارنة بين عددين
بالنظر الى الصورة المرفقة نجد 6 طرق من المقارنات تتكرر للثلاث انواع integer , double integer , real
الطرق 6 هى :
EQ اى equal و رمزها ( == ) : و هنا اذا كان العدد الاول يساوى العدد الثانى , يكون خرج المقارنة = 1
NE اى not equal و رمزها ( <> ) : و هنا اذا كان العدد الاول لا يساوى العدد الثانى , يكون خرج المقارنة = 1
GT اى greater than و رمزها ( < ) : و هنا اذا كان العدد الاول اكبر من العدد الثانى , يكون خرج المقارنة = 1
LT اى less than و رمزها ( > ) : و هنا اذا كان العدد الاول اصغر من العدد الثانى , يكون خرج المقارنة = 1
GE اىgreater than or equal و رمزها ( =< ) : و هنا اذا كان العدد الاول اكبر من او يساوى العدد الثانى , يكون خرج المقارنة = 1
LE اى less than or equal و رمزها ( => ) : و هنا اذا كان العدد الاول اصغر من او يساوى العدد الثانى , يكون خرج المقارنة = 1
كيفية كتابة اوامر المقارنة فى لغة Ladder Diagram
لمقارنة الاعداد integer
نلاحظ ان عنوان البلوك I< : حرف I يدل على ان المقارنة من النوع integer و العلامة < تعنى greater than
compare block : يتكون من
compare enable : و ده المسئول عن تشغيل عملية compare يعنى لازم تكون RLO قبله = 1 ( فى هذا المثال لازم يكون I0.1 = 1 و M 0.0 =0 )
IN 1 : و ده مكان كتابة الرقم الاول و هنا لازم يكون حجمه WORD بسبب انى مسىتخدم مقارنة من نوع integer
IN 2 : و ده مكان كتابة الرقم الثانى و هنا لازم يكون حجمه WORD ايضا
خرج المقارنة و يكون اما 1 او 0
اذا لكى يعمل الخرج Q 10.6 يجب ان يكون MW 20 اكبر من MW 16
ماذا يحدث لو استخدمت حجم بيانات خطا يعنى مثلا استخدمت MD 20 بدلا من MW 20
البرنامج ها يعطى ERROR و لا يمكن عمل save او downlaod
نلاحظ ظهور رسالة error معناها ان IN1 يجب ان تحتوى على قيمة WORD
لمقارنة الاعداد double integer
نلاحظ ان عنوان البلوك D== : حرف D يدل على ان المقارنة من النوع Double Integer و العلامة == تعنى equal
نفس تكوين compare block و الاختلاف هو نوع data المسموح بكتابته فى IN 1 و IN 2
اى يجب ان يكون IN 1 و IN 2 من النوع double integer
لمقارنة الاعداد Real
ملحوظة :
عند كتابة اى رقم real يتم تحويله بشكل اوتوماتيك الى الصيغة ((Sign) • (1.f) • (2^(e-127)و ده تم شرحه بالتفصيل فى درس شرح طرق تمثيل الاعداد داخل Siemens PLC
اذا عند كتابة الرقم 10.6 يتم تحويلها مباشرة الى 1.060000e+001
للتحويل العكسى : نضرب 1.06 فى 10 ^ 1 = 1.6
شكل compare block بعد كتابة المتغيرات
نلاحظ ان عنوان البلوك R=> : حرف R يدل على ان المقارنة من النوع Real و العلامة => تعنى less than or equal
كيفية كتابة اوامر المقارنة فى لغة statement list
لمقارنة الاعداد integer فى لغة STL
لكتابة امر compare يجب كتابة )A قبله و كتابة ( بعده اى ان ما بين القوسين هو امر المقارنة )
الامر L MW 20 يقوم بتحميل العدد MW 20 على ACCUMULATOR 1
الامر L MW 16 قام بتحميل العدد MW 16 على ACCUMULATOR 1 و ترحيل العدد MW 20 على ACCUMULATOR 2
( accumulator 1 , 2 : هى اماكن تخزين الاعداد لكى يتم عمل اى عمليات حسابية او منطقية عليها داخل PLC و يوجد فى S7 300 عدد 2 accumulator فقط )
الرمزI< : يعنى ان المقارنة من النوع integer و المقارنة greater than
بفرض ان M 0.0 = 0 و I 0.1 = 1
هنا compare تقوم بتشغيل الخرج Q 10.6 عندما يكون MW 20 اكبر من MW 16 اى عندما يكون accumulator 2 اكبر من accumulator 1
لمقارنة الاعداد double integer فى لغة STL
نفس الطريقة و لكن هنا تم كتابة D== اى ان المقارنة من النوع double word
لمقارنة الاعداد Real فى لغة STL
تم كتابة R فى امر المقارنة اى ان المقارنه من النوع REAL
ملحوظة : طبعا معروف ان الرمز // يعنى ان ما بعده مجرد تعليق على الكود و لا يؤثر اى تأثير على الكود نفسه
انتهى الشرح شكرا للمتابعة
الكاتب
elec engineer
بتاريخ
2:29 ص
PLC
النهارده ها نشرح الدرس السادس من كورس شرح Siemens PLC S7 300 , S7 400
ها نشرح انواع طرق تمثيل الاعداد Data Formats داخل PLC
الدرس ده من اهم الدروس لانه تمهيد و اساس لكل العمليات الحسابية و المقارنات و التحويلات
ها نشرح الانواع الاتية : integer - double integer - Real (floating points numbers) -BCD numbers
integer numbers و اختصارها INT :
و ده نوع من الاعداد يتكون من 16 bits كل bit تحتوى على قيمة 1 او 0
و حسب ترتيب bits و قيمها يتم حساب قيمة الرقم
النوع integer يمكن ان يمثل ارقام موجبة و ايضا ارقام سالبة و لكن يجب ان تكون الارقام ارقام صحيحة فقط اى انه لا يقبل العلامة العشرية
مبدئيا كدا integer data type يمكن ان يستوعب ارقام من - 32768 الى +32767
لازم نكون عارفين ان لو حملت رقم اكبر من 32767 او اقل من -32768 نجد ان CPU اعطى fault
اولا : تمثيل العدد الموجب بذاكرة نوعها integer
يمكن تمثيل الارقام integer بثلاث طرق :
طريقة decimal و هى التمثيل العادى للرقم مثل +662
طريقة binary او ( bin ) اى نجد 16 خانة كل خانة تحتوى فقط على 0 او 1
طريقة Hexa-decimal و تحتوى هنا على 4 خانات فقط
التمثيل من النوع BIN
عشان اوضح لل PLC ان طريقة قراءة الرقم هى binary لازم اكتبها بالصيغة الاتية : #2 ثم نكتب الرقم
نجد ان الخانة رقم 15 ( اخر خانه ) هى خانة تحديد الاشاره بحيث عندما تكون 0 هذا يعنى ان الرقم موجب و عندما تكون 1 يعنى ان الرقم سالب
كيفية قراءة قيمة الرقم اى التحويل من الصيغة binary الى الصيغة العددية decimal :
نقوم بضرب قيمة كل خانة فى 2 ^رقم الخانة اى ان
الخانة الاولى قيمتها 0*2^0
الخانة الثانية قيمتها 1*2^1
و هكذا فنجد ان قيمة الرقم = 0*2^0 + 1*2^1 + 1*2^2 + 0*2^3 + 1*2^4 + 0*2^5 + 0*2^6 + 1*2^7 + 0*2^8 + 1*2^9 + 0*2^10 + 0*2^11 + 0*2^12 + 0*2^13 + 0*2^14 + 0*2^15 = +662
تمثيل الرقم بطريقة Hexadecimal
عشان اوضح لل PLC ان طريقة قراءة الرقم هى hexadecimal لازم اكتبها بالصيغة الاتية : (W#16#(value
معنى W ان قيمة العدد من النوع word اى تحتوى على 16 bits
معنى 16 اى ان نوع طريقة قراءة الرقم من النوع hexa-decimal
الرقم نفسه يتكون من 4 خانات فقط
ممكن كل خانة تحتوى على ارقام من 0 الى 9 و حروف A-B-C-D-E-F
اى ان A = 10 و B =11 و C = 12 و D = 13 و E = 14 و F = 15
التحويل من binary الى hexadecimal format
بقوم بأخذ كل 4 خانات و احسب قيمة رقمها و ذلك من اليمين لليسار
بمعنى ان :
0110 : عند حسابها بالطريقة العادية نجد انها تساوى : 6
1001 = 9
0110 =2
0000 = 0
اذا الرقم يساوى : W#16#0296
كيفية حساب قيمة الرقم الممثل بطريقة hexadecimal :
W#16#0296
لو انا عايز احسب قيمة الرقم العددى :
نفس طريقة حساب binary و لكن الاساس 16 بدلا من 2
اذا الرقم بالصيغة العددية = 6*16^0 + 9*16^1 + 2*16^2 + 0*16^3 = 662
ثانيا : تمثيل العدد السالب بذاكرة نوعها integer
نجد ان اخر خانة ( رقم 15 ) تحتوى على 1 اى ان العدد سالب
كيفية التحويل من binary الى decimal
قيمة الرقم = 0*2^0 + 1*2^1 + 0*2^2 + 1*2^3 + 0*2^4 + 1*2^5 + 1*2^6 + 0*2^7 + 1*2^8 + 0*2^9 + 1*2^10 + 1*2^11 + 1*2^12 + 1*2^13 + 1*2^14 - 1*2^15 = - 662
الصيغة hexa decimal :
هنا من الخطا استخدام الصيغة hexa decimal فى تمثيل الرقم integer السالب لان hexa decimal format لا تعرف الاشارة السالبة
بمعنى لو انا حولت من binary الى hexa decimal بالطريقة المعتادة ( كل 4 خانات برقم )
0101 = 10 = A
0110 = 6
1101 =13 = D
1111 = 15 = F
اذا الرقم يساوى : W#16#FD6A ( الرقم ده خطا و لا يساوى -662 باى شكل من الاشكال )
لاثبات ذلك , لو حسبنا القيمة السابقة بالتحويل من hexa decimal الى decimal
قيمة الرقم بالصيغة العددية = 10*16^0 + 6*16^1 + 13*16^2 + 15*16^3 = 64874
و ده رقم مختلف تماما عن - 662
نفهم من كدا ان لا يجوز انى استخدم الصيغة hexa decimal مع رقم integer سالب
الاعداد بصيغة Double integer و اختصارها DINT :
نفس طرق integer بالضبط و لكن الفارق هنا ان الرقم يحتوى على 32 bits
و هنا الرقم double integer يمكن ان يستوعب ارقام من - 2147483648 الى +2147483647 و ايضا يجب ان تكون الارقام ارقاما صحيحة فقط
يمكن تمثيل الارقام double integer بثلاث طرق :
طريقة decimal و هى التمثيل العادى للرقم مثل +100787#L و لاحظ انى كتبت #L عشان اعرف PLC ان ده رقم double integer
طريقة binary او ( bin ) اى نجد 32 خانة كل خانة تحتوى فقط على 0 او 1
طريقة Hexa-decimal و تحتوى هنا على 8 خانات
طريقة تمثيل الرقم double integer الموجب
الصيغة decimal : نكتب 540809+#L
الصيغة binary : نجد 32 bit و تكون bit الاخيره تحتوى على 0 اى ان الرقم موجب
و لحساب الرقم فى حالة تمثيله بصيغة binary format
قيمة الرقم العددى = 1*2^0 + 0*2^1 + 0*2^2 + 1*2^3 + 0*2^4 + 0*2^5 + 0*2^6 + 1*2^7 + 0*2^8 + 0*2^9 + 0*2^10 + 0*2^11 + 0*2^12 + 0*2^13 + 1*2^14 + 0*2^15 + 0*2^16 + 0*2^17 + 0*2^18 + 1*2^19 + 0*2^20 + 0*2^21 + 0*2^22 + 0*2^23 + 0*2^24 + 0*2^25 + 0*2^26 + 0*2^27 + 0*2^28 + 0*2^29 + 0*2^30 + 0*2^31 = +540809
االصيغة hexa decimal :
للتحويل من binary الى hexa decimal نأخذ كل 4 ارقام و نحسبها بالطريقة العادية
1001 = 9
1000 = 8
0000 =0
0100 = 4
1000 = 8
0000 = 0
0000 =0
0000 = 0
اذا الرقم بالصيغة DW#16#00084089 = hexa decimal ( لاحظ انى كتبت DW مش W عشان اوضح ان ده double integer )
للتحويل من hexa decimal الى القيمة العددية 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 السالب
الصيغة decimal : نكتب 540809- #L
الصيغة binary : نجد 32 bit و تكون bit الاخيره تحتوى على 1 اى ان الرقم سالب
و يمكن التحويل بنفس الطريقة من binary format الى decimal
الصيغة hexadecimal :
كما الحال فى integar data السالبة يكون لل double integer السالبة
اى انه من الخطا تمثيل القيمة double integer السالبة بالصيغة hexadecimal لان hexadecimal format لا تعرف الاشارة السالبة
الارقام العشرية real و يطلق عليها ارقام floating point :
و هى الطريقة الوحيدة التى يقبلها PLC لتمثيل رقم عشرى
و يمكن ان يستوعب ارقام موجبة او سالبة
يحتوى الرقم floating point على 32 bits
طريقة تمثيل الرقم العشرى :
((Sign) • (1.f) • (2^(e-127)
بمعنى لو ان الاشارة موجبة
و F= 5
و e=126
اذا الرقم = 0.75
لاحظ ان : انا غير مطالب بكتابة الرقم عن طريق format السابق كل اللى بكتبه مثلا 200.76 و PLC يقوم بالتحويل الى الصيغة السابقة اوتوماتيكيا
كيفية توزيع الرقم على 32 bits
انظر الرسم الموضح :
الخانات من 0 الى 22 : تحتوى على قيمة المعامل f
الخانات من 23 الى 30 : تحتوى على قيمة المعامل e
الخانة الاخيرة : خانة الاشارة بحيث ان ( 0 = موجب , 1 = سالب )
الموجود بالرسم هو تمثيل الرقم 0.75
الاعداد بصيغة BCD :
اختصار BCD يعنى Binary Coded Decimal
توجد منه نوعان word و يحتوى على 16 bits و يستوعب ارقاما من -999 الى +999
و double word الذى يحتوى على 32 bits و يستوعب ارقاما من -9999999 الى +9999999
اختصارا للوقت نستطيع ان نقول مجازا ان BCD هو التمثيل بصيغة hexadecimal مع امكانية تحديد الاشارة اى يحدد اذا كان موجب او سالب
بحيث ان اخر Bit تحتوى على الاشارة ( 0 تعنى موجب و 1 تعنى سالب )
انظر كيفية تمثيل العدد 296
نجد انه للتحويل من binary الى BCD
تم اخذ كل 4 bits و حساب قيمتهم بالضبط عند التحويل الى hexadecimal
و ايضا فى حالة BCD double word التى تتكون من 32 bits تم اخذ كل 4 خانات و حساب قيمتهم و تم حساب قيمة 8 ارقام بدلا من 4
من اشهر تطبيقات BCD format هى العدادات Counters و حسابات الوقت و التاريخ ( سيتم شرحهم فى درس اخر )
انتهى الشرح شكرا للمتابعة
هذا الشرح حصرى لموقع electrical engineering-eg نرجو عدم النقل
الكاتب
elec engineer
بتاريخ
1:12 ص
STL
كنا وقفنا عند الدرس الثالث اللى شرحنا فيه ان scan cycle و عرفنا ازاى CPU بيقرا البرنامج و ينفذه
الرابط شرح scan cycle فى PLC Siemens
نكمل الدرس الرابع و ها نشرح اوامر البرمجة الاساسية فى لغة Ladder و لغة Statement list
ها نفتح FC 1 اللى عملناها و نفتح قائمة bit logic اللى على اليسار
نجد مجموعة من الاوامر اساسية فى اى برنامج بكتبه
شرح كل رمز حسب الرقم بجانبه
رقم 1 و 2
النقطة المفتوحة open contact و النقطة المغلقة closed contact و ليهم حالتين
اول حاجة لو جه معاهم input خارجى من اى digital input module زى ما استخدم معاهم I0.0 مثلا
كدا لو استخدمت open contact يعنى بقول ان حالة النقطة ديه مماثل لحالة النقطة خارج PLC
و لو استخدمت closed contact معناها ان حالة النقطة مخالف لحالة النقطة خارج PLC
مثال : لو استخدمت I0.2 مع closed contact كدا لو الدخل حالته on خارج PLC ها يقوم البرنامج بعكس حالتها و جعلها OFF داخل network
و العكس صحيح يعنى لو حالة النقطة off خارج plc يقوم البرنامج بجعلها on داخل network
طب لو استخدمت open contact و closed contact مع marker M او timer T او اى حاجة software
كدا open contact معناها نقطة مفتوحة عادى خالص و closed contact معناها نقطة مقفولة
مثال على كدا مثلا فى الصورة السابقة ده برنامج start stop و تم شرحه بالتفصيل فى درس شرح blocks فى PLC Siemens
عايزين نكتب نفس البرنامج ده بس بلغة statement list
عشان ابدل بين لغات البرمجة الثلاثة بختار view ثم بختار اللغة المطلوبة
لاحظ ان تم التحويل تلقائيا من Ladder Diagram الى statement list
ملحوظة : اى برنامج Ladder diagram يمكن تحويله بالكامل الى statement list و العكس غير صحيح
يعنى بعض اكواد statement list يمكن تحويلها Ladder و البعض لا يمكن
لكتابة نقطة مفتوحة فى statement list بكتب A + عنوان و اسم النقطة مثال
A I0.0
A M10.6
و هكذا
لحتابة نقطة مغلقة بكتب AN + عنوان و اسم النقطة
AN I9.3
AN Q0.0
و هكذا
قبل الانتقال لرقم 3 لازم نفهم يعنى ايه RLO
RLO هو اختصار Result of Logic Operations اى نتيجة العمليات المنطقية
و ديه بتكون bit بيتخزن عليها نتيجة اى عملية منطقية على هيئة 0 او 1
مثال :
لو انا كتبت AN I0.0
و رحت شغلت الدخل I0.0 خليته ON
عند تطبيق السطر ده من البرنامج CPU ها يلاقى I 0.0 بواحد بس AN تقوم بعكس النقطة من open الى close و العكس
عشان كدا RLO فى حالة السطر ده من البرمجة ها يكون 0
لاحظ ان RLO بيتغير كل ما بعمل اى logic operation
شرح رقم 3 : الامر NOT
و ده يقوم بعكس حالة RLO قبله
يعنى لو قبل الامر NOT كانت RLO بصفر ها يحولها 1
و لو كانت RLO بواحد ها يحولها 0
انظر الصور التوضيحية
هام جدا : شرح حالة RLO عند كل خطوة و تأثيره على الخرج
بفرض ان كل الدخل شغال يعنى انا مشغل I0.0 و I0.1 و I0.2
رقم 1 : RLO = 1 و ده سببه ان I0.0 =1
رقم 2 : RLO = 1 و ده سببه عملية AND بين عدد 2 دخل يعملان فتكون النتيجة 1
رقم 3 : RLO = 0 لان امر NOT قام بعكس حالة RLO قبله
رقم 4 : RLO = 0 و السبب عملية AND بين I0.2 التى تعمل و حالة RLO قبلها التى قيمتها 0
رقم 5 : الخرج لا يعمل لان حالة RLO قبله مباشرا تساوى 0
شكل الكلام ده عند التحويل للغة Statement List
لاحظ الاتى :
عشان اعمل coil او خرج يتم كتابة الرمز = و بعده اسم و عنوان الخرج و فى الحالة ديه رمز = يسمى assign
عشان اكتب اى كومنت فى اى سطر داخل statement list بكتب علامة / مرتين و اكتب اى كومنت و كدا CPU شايف الكلام بعد // مجرد كلام ليس له اى علاقة بالبرمجة
رقم 4 : الخرج او coil و ده ممكن يكون Q ( خرج من output module ) او marker M و غيرها
رقم 5 : علامة (#) :
ده معناه خرج وسطى Midline Output
و يتم استخدامه عند الحاجة لعمل خرج داخل سطر البرمجة نفسه
فى حالة الكود فى network رقم 2
بفرض ان I1.0 = 1
I 1.2 = 0
I 1.3 = 0
شرح كل خطوة
(1) RLO = 1 لان I 1.0 =1 اى يعمل
(2) RLO = 1 لان I 1.2 = 0 و عكسها = 1 و عند عمل AND بينها و بين RLO قبلها تكون النتيجة 1
(3) output Q1.0 =1 اى يعمل لان RLO قبله =1
(4) RLO = 0 لان I 1.3 = 0 و تم عمل عملية AND بينها و بين ما قبلها فكانت النتيجة = 0
(5) output Q0.2 = 0 اى لا يعمل لان RLO قبله = 0
البرنامج السابق بلغة steatement list
لاحظ ان فى حالة statement list عشان اعمل midline output بستخدم الامر (=) عادى جدا
لاجظ كمان انى اضطريت استخدم السطر A Q 0.1 بعد midline output لان فى حالة statement list عند استخدام اى خرج يقوم البرنامج بعدها بالبدء من جديد اى لا يتذكر ما سبق
رقم 6 : امر Reset و اختصاره R
رقم 7 : امر Set و اختصاره S
اولا امر set
و هو يعتبر خرج عادى مثله مثل امر =
و لكن الفرق انه يقوم بتشغيل الخرج المكتوب عنده حتى بعد انقطاع التغذية قبله
مثال
لو M5.0 = 1 الى يعمل
نجد ان Q10.0 = 1
طيب لو M5.0 اصبحت بصفر اى لا تعمل
نجد ان Q 10.0 تبقى ما هى تعمل اى = 1
و لكى يتم اطفاء Q 10.0 نحتاج الى امر Reset ( اختصاره R ) و هو عكس امر SET اى يقوم بتحويل الخرج المكتوب عليه الى 0
هنا عندما تكون M6.1 = 1 يتم اطفاء Q10.0 اى يصبح 0
المشكله هنا لو M5.0 =1 و فى نفس الوقت M6.1 = 1 كدا CPU ها يشغل Q10.0 و لا ها يطفيه ؟
الاجابة ان CPU دائما ينفذ اخر امر مر عليه
اذا هنا سوف يتم جعل Q10.0 =0
شكل اوامر set و reset فى حالة STL
رقم 8 و 9 : و هى اوامر RS و SR
و هى اوامر تجمع بين عملية set و عملية reset فى بلوك واحد و هذا فقط لتسهيل الاستخدام
RS اختصار reset and set : اى ان اخر عملية يتم تنفيذها هى set اى ان set لها الاولوية
بكتب اسم و عنوان الخرج المراد تشغيله فوق البلوك
هنا لو I 15.3 =1 نجد ان الخرج Q20.2 لا يعمل
و لو I 15.4 =1 نجد ان الخرج Q20.2 يعمل
و لكن ماذا لو ان I 15.3 =1 و I 15.4 =1 ؟
سوف يقوم البرنامج بتنفيذ الامر الاخير و هو امر set اى Q20.2 =1
العكس عند استخدام SR اى set and reset و هنا امر reset هو الاخير و له الاولوية
فى حالة network 6
لو M2.0 =1 و M2.1 =1
نجد ان Q25.1 =0
لان امر reset هو الاخير
الكود فى حالة استخدام STL
ملحوظة : السطر NOP 0 هو اختصار no operation
و ده سطر احيانا يقوم البرنامج بكتابته عند التحويل من LAD الى STL
و هو هنا ليس له اى اهمية و يمكن حذفه ايضا
رقم 12 : الامر SAVE
و ده امر يستخدم فى نقل القيمة الموجودة فى RLO الى bit تسمى BR و ديه ها يتم شرحها لاحقا عند شرح status bits و ده كمان اكثر من درس لانها حاجة more advanced
رقم 10 و 11 و 13 و 14 خاصين positive and negative edge و ده ها يتم شرحه الدرس القادم مباشرة
عملية OR بين اكثر من bit
امر OR فى حالة LAD يشابه بشكل كبير التوصيل توازى فى الكلاسيك كنترول
مثال
لو M2.7 =1
و M2.6 =1
اذا تكون محصلتهم = 1
و اذا كانت I2.0 =1
اذا يعمل الخرج M8.0
شكل الكود بلغة STL
لاحظ ان قبل بداية عملية OR يجب استخدام )
و بعد انتهاء العملية يجب استخدام (
انتهى الشرح و اى استفسار اتفضل اسأل فى تعليقات facebook
هذا الموضوع حصرى لموقع electrical engineering يرجى عدم النقل
الكاتب
elec engineer
بتاريخ
12:35 ص
SIEMENS
الدرس التانى من كورس شرح Siemens PLC نوع S7-300
ها نشرح انواع blocks المختلفة و استخدام كل نوع و عمل calling لبلوك داخل بلوك اخر و شرح scan cycle
كنا وصانا فى الدرس الاول لعمل hardware configuration و ده الرابط : شرح Hardware Configurationبعد عمل save and compile نقفل صفحة hardware configuration و افتح الخانة blocks كما بالشكل
ها يظهر عندى بلوك واحد فقط و هو OB1
لو ضغطت right click فى اى مكان فاضى و اختار insert new object ها يضهر blocks الاتية
شرح كل block بالتفصيل :
Organization Block : اختصارا OB
و ديه البلوكات التنظيمية و ديه المسئولة عن تنظيم العمل بين CPU و user program المبرمج عن طريقى
من امثلة blocks ديه OB 100 : و ده بيتم تفعيل ذه عند عمل power reset ( اى عمل Warm Restart )
OB 1 : و ده نوعه cyclic block و ده بيتم تنفيذه كل cycle
و غيرها كتير من OB اللى مش كلها موجوده فى اى CPU و كل ما كان CPU بيدعم OB s اكتر , بيكون اغلى
Function : اختصارا FC
و ده عباره عن برنامج انا ببرمجه بلغات البرمجة المختلفة مثل LADDER diagram او Statement List او Function Block Diagram
بس ده عادة لا يكون البرنامج بالكامل و بيكون جزء فقط من البرنامج
مع العلم ان اى اوامر مكتوبة داخل FC لا يتم تنفيذها الا عند عمل CALL لها داخل اى من OB بمعنى تانى CPU لا يقرا اى حاجة الا OB و من خلالها انا بوجه CPU لقراءة FC عن طريق عمل Call لل FC داخل اى OB
Data Block : اختصارا DB
و ده ببساطه مكان لتخذين القيم و البيانات لاستخدامها داخل OB او FC او FB او اى مكان اخر فى البرنامج
البيانات ديه مثلا وقت او سرعة او قيمة عددية و غيرها
و البلوك ده نوعين رئيسيين :
1- shared data block : و ده بيتم استخدامه داخل اى مكان فى البرنامج بدون اى قيود
2- Instance data block : و ده بيكون مخصص لخدمة function block او System function block (ها يتم شرحه لاحقا )
بحيث بيتم تخصيص instance data block لكل function block و اخر لكل system function block
Function Block : اختصارا FB
و ده مشابه تماما ل function و الفرق ان function block لازم يحتاج instance data block عشان يشتغل بمعنى لو انا عملت insert ل FB 2 مثلا يبقى لازم احددله instance data block , ليكن DB 5 و ما اقدرش استخدم DB 5 ده فى اى مكان اخر مره ثانيه
Data Type : اختصارا UDT
او يطلق عليها user data type
و ده بستخدمه لو عايز اعمل مجموعة من البيانات الجاهزه و اللى بيتم استخدامها بشكل مجمع داخل اى مكان فى البرنامج مثل OB او FC او FB
Variable Table : اختصارا VAT
و ده مجرد جدول بضع فيه المتغيرهات بتاعتى اعملها monitor بغرض الصيانة مثلا انى اعرف قيمة المتغير ده كام دلوقتى و كمان اقدر اغير فى قيمته يدويا
طيب ازاى اعمل insert لاى block من البلوكات ديه
مثلا انى اعمل insert ل function
بضغط على function تظهر القائمة التالية
بعد الضغط على OK تظهر الصفحة التالية
و ديه صفحة كتابة الكود فى اى لغة مثلا STL ( اختصار Statement List ) او LAD ( اختصار Ladder Diagram )
او FBD ( اختصار Function Block Diagram )
و بتتكون من ثلاث اجزاء اساسية :
declaration table : و ده يستخدم فى تحديد متغيرات الدخل و الخرج و Temps ( ها يتم شرحها لاحقا بالتفصيل )
code section : و ده مكان كتابة كود البرمجة
Detail Window : و ده فيه معلومات مفصلة عن اى متغير ( اللى ممكن يكون دخا او خرج او قيمة ) و كمان بيوضح لو فيه error فى البرمجة
كيفية عمل call لاى بلوك داخل OB1
داخل FC 1 ها اكتب اى برنامج مثلا تشغيل موتور START و STOP مع وجود نقطة من overload
بفرض ان Q 0.0 هى الخرج اللى هايشغل الموتور
I 0.0 مفتاح تشغيل الموتور و نوعه normally open push button
I 0.1 مفتاح ايقاف الموتور و نوعه normally close push button
I 0.2 نقطه مغلقة من الاوفرلود
هنا كتبت network title
و ها اضغط كليك يمين و اختار insert network comment عشان ادخل كومنت خاص network ديه
و ده بعد ما كتبت كومنت و عملت save
ملحوظات على كتابة برنامج motor start stop
I 0.1 و I 0.2 الخاصين بمفتاح الايقاف و نقطة overload تم اختيارهم داخل البرنامج نقاط مفتوحة
لان PLC لا يفهم ان النقطه ديه تمثل ايه فى الحقيقة
اى ان فى حالة inputs : نقطة مفتوحة تعنى نقطة مشابهة للدخل على موديول الدخل digital input module
نقطة مغلقة تعنى نقطة مخالفة للدخل على موديول الدخل digital input module
طيب بعد ما برمجت FC حتى لو عملت download على CPU الموتور مش ها يشتغل و CPU مش ها يقرا FC 1 اللى انا برمجتها ديه اساسا
لازم اعمل call للبلوك FC 1 داخل OB 1 عشان البرنامج لما يقرا OB 1 و يلاقى امر CALL FC1 ها يروح يقرا FC 1 و بعد كدا يرجع يكمل OB1 تانى و هكذا
ازاى بقى اعمل call
اروح افتح OB 1
اول مره افتح OB 1 بتظهر القائمة ديه
اختار ok و افتح OB 1
تابع الصورة
كدا انا عملت call
و كدا FC 1 ها تشتغل
ملحوظة : انا ممكن اعمل call لبلوك FC 2 مثلا داخل FC 1 و ارجع اعمل call لبلوك FB 5 داخل FC 2 و هكذا
لو انا عملت كدا
CPU ها يقرا OB 1 و يجد امر call FC 1
يقوم يروح يقرا FC1 و يجد امر call FC 2
يروح CPU يقرا FC 2 و يجد امر call FB 5
يروح ينفذ البلوك FB 5 و بعد ما يخلصه و لا يجد داخله امر call
كدا يرجع البرنامج يكمل تنفيذ OB 1 و يخلصه
و بعد كدا يبدا OB 1 من تانى و يلاقى امر call FC 1 تانى فيروح ينفذه و هكذا
طيب هل ممكن اكتب كل البرنامج بتاعى فى OB 1 فقط ؟
الاجابة : نعم و هنا ها يكون اسمه Linear ptogram
و فى حالة استخدام اكثر من FC و FB و عمل اكثر من عملية call بينهم ده اسمه structured program
لاحظ ان عملية call اكثر من مره من block الى block اخر الى block ثالث و هكذا , ديه تسمى عملية Nesting
و كلما زادت عمليات nesting زاد scan cycle يعنى البرنامج ها يبقى اتقل و ابطأ
فى حالة PLC من نوع S7-300 : اقصى عدد Nesting مسموح بيه 8 عملية Nesting
ماعدا CPU 318 : اقصى عدد Nesting مسموح بيه 16 عملية Nesting
الدرس القادم :
شرح Scan Cycle بالتفصل
انتهى الشرح و اى سؤال اتفضل اسأل فى التعليقات اسفل الموضوع
هذا الموضوع حصرى لموقع electrical engineering نرجو عدم النقل
الكاتب
elec engineer
بتاريخ
12:33 ص
SIEMENS
الدرس الثالث من كورس شرح Siemens PLC نوع S7-300
شرح scan cycle
و هو الوقت اللى CPU يستغرقه عشان يقرا البرنامج كله مره واحدة
و ده بيكون صغير كدا حوالى 100 مللى ثانية مثلا
و كلما زاد حجم البرنامج و تعقيده و كثرة عدد FC و FB و DB و بالتالى كثرة عدد call بتكون scan cycle اكبر و ديه حاجة مش مقبولة فى بعض applications اللى السرعة مطلوبة فيها
و لو انا عايز اقلل scan cycle ممكن اختار CPU يكون اسرع و بالتالى ها يكون اغلى سعرا
دلوقتى عايزين نعرف ازاى CPU يقرا البرنامج
من الصورة المرفقة
1 : CPU بينفذ OB 100 و ده بيتم فقط عند عمل restart لل PLC
كمان CPU بيروح يغير وضع outputs على وحدات الخرج outputs modules بناءا على scan cycle السابقة
2- CPU يقرا وضع inputs من على digital input modules و analog input modules و يخذنها على مكان داخل internal memory فى CPU اسمها PII اختصارا لمصطلح process image input
3- قراءة OB 1 و تنفيذها و تنفيذ اى عملية call داخلها كذلك تنفيذ اى OB اخرى ( حسب شرط تنفيذ هذا OB و حسب priority الخاص بيه )
4 - تغيير process image output اى تغيير حالة الخرج من النوع digital او analog و نقل هذا التغيير الى digital output modules و analog output modules
و هكذا يتم البدء من رقم 1 مره ثانية
و زى ما قلنا قبل كدا كل ما كان البرنامج كبير و معقد كانت scan cycle كبيره
و لتقليل scan cycle حسب المطلوب يتم اختيار CPU اسرع
هذا الموضوع حصرى لموقع electrical engineering نرجو عدم النقل
الكاتب
elec engineer
بتاريخ
8:58 م
SIEMENS
نبدا بأذن الله كورس PLC من نوع siemens و ده من اكثر الانواع انتشارا فى العالم و من افضلها ايضا
ها نبدا الشرح على برنامج simatic manager و ده البرنامج الخاص بوجدات PLC S7-300 و PLC S7-400 و ديه طبعا اشهر الانواع و اكثرها انتشارا خصوصا فى مصر
الكورس ده موجه للمهندسين او الفنيين اللى ليهم تعامل مع classic control و يفضل يكون ليهم تعامل سابق مع Siemens s7-200 او اى انواع اخرى من PLC
اول درس معانا هو ازاى نعمل ملف للبرنامج Simatic manager و ازاى نختار العناصر اللى ها نبرمجها و نشغلها و ازاى نعمل Hardware Configuration
اول حاجل لما نفتح Simatic manager ها نلاقى الصورة ديه
نختار file ثم new عشان نعمل ملف جديد
ها تظهر معانا الصورة ديه
بعد اختبار اسم الملف و ليكن learn plc و اختيار مكان التخزين من browse اضفط على ok عشان يفتح لاول مره
و ده ها يكون الشكل
بعد كدا اختار قائمة insert ثم station ثم simatic 300 station
كدا انا عملت ادراج لوحدة PLC من نوع S7-300
ممكن اغير اسم وحدة s7 300 زى ما انا عايز مثلا اخليها TestCPU او اى حاجة زى مثلا اسم الماكينة اللى ببرمجها
بعد كدا ها ادوس على test cpu و اختار hardware عشان اعمل hardware configuration
ها يفتحلى صفحة hardware configuration
دلوقتى انا عايز اعمل ادراج لوحدات PLC زى مثلا CPU و وحدات digital inputs و digital outputs
لازم الاول اعمل ادراج Rail و ده الجزء المعدن اللى بيكون موجود فى اللوحة الكهربية و اللى بيتثبت عليه جميع عناصر PLC
ده شكله الحقيقى فى حالة S7 300
ها نعمل ادراج لوحدة Rail من القائمة ناحية اليمين و اختيار Simatic 300 ثم Rail انظر الصورة
لما بعمل ادراج لاى حاجة البرنامج يعطيها اسم افتراضى و عشان اغير اسم Rail ده بضغط عليه double click و اغير اسمه و اكتب كومنت و كمان بعرف ال part number بتاعه عشان اقدر اشتريه من سيمنز
فى حالة PLC Siemens S7-300 يتكون Rail من 11 خانه مقسمه كالتالى
رقم 1 : دائما محجوز لوحدة power supply و ديه بتكون اختياريه فى حالة s7 300 يعنى ممكن استخدم اى power supply ماركة اخرى و بتكون اجباريه فى حالة S7-400 يعنى ما ينفعش استخدم اى power supply غير سيمنز
الصورة ديه بعد اختيار power supply
الخانه رقم 2 : محجوزه لادراج CPU و عشان اختار CPU
بضغط على CPU 300 ثم بختار اى Family لل CPU زى مثلا 312 او 313 او 314 ثم بختار البروسيسور نفسه بحسب part number الخص بيه و طبعا واضح ان فيه انواع CPU كتيره جدا و عشان كدا لازم اكون عارف انا عايز امكانيات ايه بالضبط و عامل بحث مفصل على CPU 300 المراد استخدامه حسب الامكانيات المطلوبه
طيب ايه الامكانيات المختلفة من CPU لاخر ؟
بيكون فيه اختلاف فى فى سرعته و حجم البرنامج اللى ممكن يشتغل عليه و عدد input / output modules و انواع communications اللى بيشتغل عليه و هل يمكن توصيل incoder عليه و لا لأ و غيرها كتير جدا من الاختلافات
ديه صوره بعد اختيار CPU و الضغط عليه عشان اشوف و اغير فى properties بتاعته
بلاحظ وجود 9 صفحات داخليه بتوضح امكانيات CPU و بقدر اغير حاجات كتير فيها و ديه ها نعرفها بعدين advanced
طيب ايه معنى Networked اللى بجانبها no ؟
ده معناه ان CPU ينفعش اعمل بينه و بين اى حاجة تانية اتصال و عشان اغير ده بضغط properties
كدا انا فعلت MPI port فى CPU و ها نشرح فى درس اخر الاتصال بين CPU و الاجزاء الاخرى مثل HMI
بضغط OK
الخانة رقم 3 فى Rail : و ديه خاصه بموديول اسمه interface module و اختصاره IM
و ده شكل interface module لوحدات step 7 - 300
و الموديول ده متخصص عشان اوصل CPU بوحدة Rail تانية
و ده بحتاجه لما اكون عايز اوصل input / output modules اكتر من الحد اللى بيسمح بيه ال rail الواحد ( 8 موديولات دخل و خرج فقط لكل Rail)
و عشان اوصل بين اكثر من rail بستخدم IM فى ال rail الرئيسى Central Rack و كمان IM فى ال rail الفرعى Expansion Rack
لاحظ ان مصطلح Rack مساوى لمصطلح Rail
و بوصل بينهم عن طريق كابل خاص بيكون ليه maximum length مثلا 1 متر و توع اخر 2 متر و هكذا
و ده شكل الكابل
و كمان ممكن اوصل اكثر من 2 rail بشرط ان كل rail يكون فيه Interface module خاص بيه
صوره توضح توصيل اكثر من Rail بأكثر من Interface Module
لاحظ ان Rack 0 ده central Rack اى الراك الاساسى و متوصل بيه عدد 3 Racks كل Rack متصل بيه power supply و عدد معين من I/O Modules اقصاها 8 موديولات
ملحوظة : I/O Modules اختصار Input Outputs modules
لاجظ ان اسم interface module المستخدم فى Central Rack بيكون IM 360
و اسم interface module المستخدم فى Expansion Rack بيكون IM 361
ديه صوره توضح ادراج عدد 2 Rack و كل Rack فيه interface module خاص بيه ( بحيث ان فى Central Rack بستخدم IM360 و فى Expansion Rack بستخدم IM 361 )

انا فى البرنامج ده مش محتاج اكثر من 8 I/O Modules عشان كدا مش ها اوصل اى interface modules و ها اسيب slot 3 فارغ
الخانة رقم من 4 الى 11 متخصصة فى ادراج Signal Modules زى
Digital Input Module و اختصارها DI
Digital Output Module و اختصارها DO
Digital Input Output Module و اختصارها DIO اى تحتوى على عدد من الدخل الرقمى و عدد من الخرج الرقمى
Analog Input Module و اختصارها AI
Analog Output Module و اختصارها AO
Analog Input Output Module و اختصارها AIO اى تحتوى على عدد من الدخل التناظرى و عدد من الخرج التناظرى
Sensor modules with IQ interface
Special 300 اى special modules و ديه نجد بها نوعين :
1- Dummy module : و ده بأستخدمه عشان بس احجز خانه فى الراك فى اللوحة بتاعتى بس بيكون فاضى لا يستخدم فى اى حاجة تانية
صورة Dummy Module :
2- position decoder module : يستخدم فى توصيل انواع معينة من Encoders
طيب انا ها ادرج فى البرنامج هنا الموديولات الاتية :
SM 321 DI 16 x DC 24 V : اى يحتوى على عدد 16 مدخل رقمى و يتم تغذيته بجهد 24 فولت مستمر
SM 322 DO 16 x DC 24 V / 0.5 A : اى يحتوى على عدد 16 مخرج رقمى و يتم تغذيته بجهد 24 فولت مستمر و كل مخرج يتحمل حتى 0.5 امبير
SM 331 AL 8 x 12bit : اى يحتوى على عدد 16 مدخل تناظرى analog و دقة القرائة التناظرية 12 bits لكل مدخل ( تتراوح الدقة من 12 bit الى 16 bit و كلما زاد الرقم زادت الدقة و اصبح الموديول اغلى سعرا ) و سيتم شرح الانالوج بالتفصيل فى درس اخر
SM 332 AO 4 x 16bit : اى يحتوى على 4 مخارج تناظرية analog و دقة القراءة 16 bit
لاحظ القائمة السفلية :
تجد جدول فيه كل الموديولات اللى استخدمناها و موضح بجانبها part numbers اللازم للشراء من سيمنز
الاهم من ده ان يوجد به I address و Q address و ده عناوين الدخل و الخرج اللى بيشغلها كل موديول حسب عدد الدخل و الخرج لكل موديول
مثلا الموديول SM 322 DO 16 x DC 24 V / 0.5 A ده موديول خرج رقمى به 16 خرج رقمى اى يحتاج الى عدد 2 bytes ( لاحظ ان كل byte يحتوى على 8 bits تبدا من 0 الى 7 )
لذلك نجد ان البرنامج قد اعطى افتراضيا لهذا الموديول byte رقم 4 و byte رقم 5 ليخذن عليهم بياناته
يعنى لما انا اكتب فى البرنامج مثلا : Q4.2 اذا انا اقصد الخرج رقم 3 فى هذا الموديول
مع العلم ان هذه العناوين address يمكن تغييرها بسهولة
اختر الموديول المراد تغيير addresses الخاصه بيه و اختر addresses tap و ازل العلامة عن system default و اختار رقم اول بايت ليبدا منه addresses الخاصة بهذا الموديول و ليكن byte رقم 2
انظر الصورة :
بعد الضغط على ok تجد العناوين الخاصة الموديول SM 322 DO 16 x DC 24 V / 0.5 A قد تغيرت لتكون byte 2 , byte 3
لاحظ تغير module addresses
ملحوظة : بعض CPU s لا تدعم تغيير addresses للموديولات المتصله معها ( لذلك يجب معرفة هذا قبل شراء CPU من خلال data sheets الخاصه به
كدا خلصنا عمل hardware configuration و اضفنا كل الموديولات المطلوبة
نعمل save and compile و هنا البرنامج بيبحث فى كل التغييرات اللى انت عملتها و لو فيه مشكلة ها يظهرها عشان تعدلها
مثلا لو انا عملت delete لوحدة CPU طبعا كدا Hardware configuration غلط
لو رحت عملت save and compile ها يظهر الرساله ديه
لو ضغطت على details ها يظهر تفاصيل الرسالة There is no CPU in the Rack يعنى لا يوجد CPU
طبعا ها اضغط close و اروح اصلح الغلط اللى عملته حسب الرسالة ( هنا ها ارجع CPU )
و بعد اصلاح الاخطاء كلها و عمل save and compile تانى , البرنامج مش ها يظهر اى رسالة خطا و ده معناه ان HW configuration تم بطريقة صحيحة
كدا اول درس معانا انتهى و انتظروا دروس اخرى قريبا جدا
و اى استفسار اتفضل اسأل فى تعليقات facebook
هذا الموضوع حصرى لموقع electrical engineering نرجو عدم النقل