كتابة هذا التابع، ولكن قبل متابعة القراءة أرجو مراجعة ذلك الدرس.
المهارات المطلوبة:
معرفة بسيطة بلغة Visual Basic أي (VB).
معرفة باستخدام أوامر إكسل الأساسية.
يفضل أن تكون مهندساً مدنياً أو طالباً في الهندسة المدنية لفهم العلاقات المستخدمة.
قراءة الدرس الرابع وما سبقه.
النقاط الرئيسية:
سأقوم بتقسيم هذا الموضوع إلى أربعة أقسام رئيسية وهي:
1- مراجعة علاقات تصميم مقطع مستطيل خاضع لعزم بالطريقة الحدية حسب الكود السوري (تسليح أحادي وتسليح ثنائي أي مع تسليح ضغط).
2- إضافة تابع إلى إكسل يقوم بحساب التسليح الأحادي فقط.
3- شرح كيفية الحصول على أكثر من قيمة من تابع واحد.
4- تعديل التابع السابق ليقوم بحساب التسليح الثنائي عند الحاجة، وفي هذه الحالة سنحصل على قيمتين هما تسليح الشد وتسليح الضغط إن وجد.
ملاحظة: النقطة الثالثة ستكون موضوع الدرس الخامس، أما الرابعة فستكون موضوع التطبيق الثاني إن شاء الله.
مراجعة علاقات تصميم مقطع مستطيل بالطريقة الحدية حسب الكود السوري (تسليح أحادي وتسليح ثنائي أي مع تسليح ضغط):
ليس المطلوب هنا استنتاج العلاقات إنما مراجعة الطريقة نفسها، ويمكن الرجوع إلى المراجع المختصة لمعرفة من أين أتت هذه الطريقة.
لنفرض أنه لدينا مقطع مستطيل عرضه b وارتفاعه h وارتفاعه الفعال d وبعد مركز ثقل حديد الضغط عن أبعد ليف مضغوط هو 'd.
ولنفرض أن إجهاد خضوع الفولاذ fy والمقاومة المميزة للخرسانة f'c.
الواحدات المستخدمة هي الواحدات الدولية أي أن واحدة العزم هي N.mm والأبعاد mm والإجهادات Mpa أي N/mm2.
المقطع معرض لعزم حدي مصعد Mu، والمطلوب حساب تسليح المقطع حسب الطريقة الحدية للكود السوري.
- نقوم أولاً بحساب نسب ومساحات التسليح الأصغري والأعظمي:
- نقوم بحساب التسليح على فرض أنه أحادي من العلاقات التالية:
ثم نقارن هذه القيمة As مع التسليح الأصغري، فإن كانت أصغر نعتمد الأصغري وإلا نقارنها مع الأعظمي فإن كانت أصغر منها أو تساويها نعتمدها ونتوقف عند هذه النقطة، وإلا ننتقل إلى مرحلة التسليح الثنائي وهي المرحلة التالية.
- مرحلة التسليح الثنائي:
نفرض أن المقطع هو عبارة عن مجموع مقطعين أحدهما خرساني مع تسليح شد أعظمي، والثاني عبارة عن تسليح شد وتسليح ضغط فقط.
المقطع الأول تسليحه هو As1 = Asmax الذي تم حسابه أعلاه وهو يتحمل عزماً Mu1 يحسب كما يلي:
أما المقطع الثاني فهو يتحمل عزماً يساوي فرق العزمين أي Mu2 = Mu – Mu1 ويكون تسليح الضغط والشد المقابل له:
ملاحظة: فرضنا هنا أن تسليح الضغط يصل إلى إجهاد الخضوع، وهذا فرض يجب التحقق منه وإلا فإنه يجب حساب الإجهاد في تسليح الضغط بدقة، ولكن سنتجاوز هذه النقطة الآن فليس لها تأثير كبير عملياً.
بعد حساب التسليحين يكون تسليح الشد النهائي للمقطع هو As=As1+As2 أما تسليح الضغط فهو 'As.
قبل قبول النتيجة نتحقق إن كان As النهائي أكبر من مرة ونصف Asmax فإن كان كذلك نرفض النتيجة ويجب تغيير أبعاد المقطع.
في الرابط التالي ملف فيه أمثلة محلولة توضح هذه الطريقة بشكل أكبر لمن أراد مزيداً من الإيضاح.
[ندعوك للتسجيل في المنتدى أو التعريف بنفسك لمعاينة هذا الرابط]هذه الخطوات باختصار وسننتقل إلى البرنامج.
إضافة تابع إلى إكسل يقوم بحساب التسليح الأحادي
سنقوم الآن بإضافة تابع اسمه RectMomentLimit1 إلى وحدة برمجية جديدة (راجع الدرس الرابع).
الاسم السابق اختياري ويفضل أن يكون معبراً وهو هنا يعبر عن تصميم مقطع مستطيل خاضع لعزم انعطاف بالطريقة الحدية، أما الرقم 1 فقد أضفته لأن هذا التابع سيحسب التسليح الأحادي فقط، ثم سنقوم بتعديله ليحسب الثنائي وسنعطيه اسماً آخر يحمل الرقم 2 (في التطبيق القادم إن شاء الله).
نقوم بتعريف التابع مع مدخلاته كما يلي:
Public Function RectMomentLimit1(Mu As Single, B As Single, d As Single, _
d1 As Single, fy As Single, fc As Single) As Single
End Function
ملاحظة: الرمز ( _ ) في نهاية السطر الأول يستخدم لتجزيء سطر (طويل) إلى سطرين، أي يمكن إلغاء ذلك الرمز بشرط جعل السطرين الأولين في سطر واحد.
أما المدخلات فهي:
Mu: العزم الحدي المصعد المعرض له المقطع.
B: عرض المقطع.
d: الارتفاع الفعال للمقطع.
d1: بعد مركز ثقل حديد الضغط عن أبعد ليف مضغوط.
fy: إجهاد الخضوع للفولاذ.
fc: المقاومة المميزة للخرسانة.
جميع هذه المدخلات من النوع Single، أي رقم حقيقي. كما أن هذا التابع يعيد قيمة واحدة من النوع Single أيضاً.
سنعتبر أن الواحدات المستخدمة هي الواحدات الدولية (N,mm).
بين السطرين السابقين نكتب الأسطر التالية، وفي هذه الأسطر نقوم بتعريف متحولات نسب التسليح الأصغرية والأعظمية ومساحات التسليح الأصغرية والأعظمية.
Dim OMEGA As Single: OMEGA = 0.9
Dim mu_min As Single, mu_max As Single
Dim As_min As Single, As_max As Single
mu_min = 0.9 / fy
mu_max = 0.5 * 455 / (630 + fy) * fc / fy
As_min = mu_min * B * d: As_max = mu_max * B * d
ملاحظة: أسماء المتحولات تعبر عن استخدامها.
بعد الأسطر السابقة نكتب أسطر حساب التسليح الأحادي وهي:
Dim A0 As Single, alpha As Single, gamma As Single
Dim tAs As Single
A0 = Mu / (OMEGA * B * d ^ 2 * 0.85 * fc)
alpha = 1 - Sqr(1 - 2 * A0)
gamma = 1 - alpha / 2
tAs = Mu / (OMEGA * gamma * d * fy)
ملاحظة: إن المتحول tAs يعبر عن قيمة تسليح الشد.
بعد حساب تسليح الشد يجب أن نتحقق إن كان أصغر من التسليح الأصغري أو أكبر من الأعظمي.
في هذا التابع إن كان تسليح الشد أكبر من الأعظمي سيعيد التابع القيمة -1 وهي ستدلنا على أن أبعاد المقطع غير كافية أو أنه بحاجة إلى تسليح ضغط.
If tAs < As_min Then
tAs = As_min
ElseIf tAs > As_max Then
tAs = -1
End If
بعدها نقوم بإسناد قيمة tAs إلى التابع كما يلي:
RectMomentLimit1 = tAs
أصبح التابع كاملاً كما يلي:
Public Function RectMomentLimit1(Mu As Single, B As Single, d As Single, _
d1 As Single, fy As Single, fc As Single) As Single
Dim OMEGA As Single: OMEGA = 0.9
Dim mu_min As Single, mu_max As Single
Dim As_min As Single, As_max As Single
mu_min = 0.9 / fy
mu_max = 0.5 * 455 / (630 + fy) * fc / fy
As_min = mu_min * B * d: As_max = mu_max * B * d
Dim A0 As Single, alpha As Single, gamma As Single
Dim tAs As Single
A0 = Mu / (OMEGA * B * d ^ 2 * 0.85 * fc)
alpha = 1 - Sqr(1 - 2 * A0)
gamma = 1 - alpha / 2
tAs = Mu / (OMEGA * gamma * d * fy)
If tAs < As_min Then
tAs = As_min
ElseIf tAs > As_max Then
tAs = -1
End If
RectMomentLimit1 = tAs
End Function
لاستخدام هذا التابع نقوم بتصميم صفحة إكسل كما في الشكل:
الشكل (1): تصميم صفحة الإكسل التي سنقوم باختبار التابع عليها
ملاحظة: يتم إدخال العزم في هذه الصفحة في العمود A بواحدة KN.m ونضع معادلة في العمود B لتحويلها إلى N.mm، لأن الواحدة الأولى هي الأكثر استخداماً والعلاقات تستخدم الواحدة الثانية.
أما الأبعاد فواحدتها mm والإجهادات Mpa.
ثم نقوم بوضع المعادلة التالية في الخلية C7:
=RectMomentLimit1(B7;$B$2;$D$2;$B$3;$B$1;$D$1)
ملاحظة: إن علامات $ تساعدنا في تثبيت رقم العمود أو السطر الذي يأتي بعدها عند نسخ هذه المعادلة من خلية إلى أخرى، وبما أن خلايا أبعاد المقطع والمقاومات ثابتة فإننا استخدمنا الرمز $ مع عناوينها.
بينما عنوان الخلية B7 لم نقم بوضع إشارة $ معه لأننا نريد عند نسخ هذه المعادلة إلى خلية أخرى أن يقوم بتعديل عنوان الخلية B7 (خلية العزم) إلى عنوان آخر يقوم إكسل بمعرفته تلقائياً (عنوان نسبي).
هذا الأمر (أي العناوين المطلقة والنسبية) من أساسيات إكسل ولا علاقة له بالبرمجة.
بعدها نقوم بنسخ الخلية C7 إلى الخلايا C8 و C9 و C10 كما في الشكل:
الشكل (2): الصفحة بعد إدراج التابع في عدة خلايا
إن تسليح العزم 13 كن.م هو تسليح أصغري، أما العزم 60 كن.م فتسليحه حسابي.
نلاحظ أن هذا المقطع لا يمكنه تحمل العزم 128 كن.م أو العزم 200 كن.م باستخدام تسليح أحادي، لأن التابع أعاد القيمة (-1) كما صممناه.
إن أي تعديل على قيم العزوم الآن سيؤدي إلى إعادة حساب التسليح. جرب تعديل العزم في الخلية A7 من 13 كن.م إلى 50 كن.م.
مرفق مع هذه المشاركة ملف الإكسل حتى هذه النقطة، بعد فتحه يجب تفعيل خيار استخدام أكواد VBA كما تعلمنا في الدرس الأول.
لاستعراض الكود البرمجي بعد فتح الملف وتفعيل خيار استخدام أكواد VBA يمكنك الضغط على Alt+F11 أو كما تعلمت في الدروس السابقة.
خاتمة
قمنا في هذا التطبيق بشرح طريقة الكود العربي السوري في تصميم (حساب تسليح) مقطع خرساني مستطيل خاضع لعزم انعطاف فقط، وفق الطريقة الحدية.
ثم قمنا بكتابة تابع في إكسل يقوم بحساب تسليح هذا المقطع في حال كان التسليح أحادياً.
وسنؤجل تعديل التابع ليحسب حالة التسليح الثنائي (تسليح شد مع ضغط) إلى التطبيق القادم إن شاء الله.
تحميل
ملف الإكسل حتى هذه النقطة