แนวทางการสร้างวิซาร์ดเพื่อกำหนดข้อมูล วิเคราะห์โครงสร้าง สำหรับวิเคราะห์โครงข้อหมุน |
ปัญหาอย่างหนึ่งในการใช้โปรแกรมคอมพิวเตอร์เพื่อวิเคราะห์โครงสร้างแบบโครงข้อหมุน (truss) ที่ใช้วิธีสติฟเนส (stiffness method) คือ การป้อนข้อมูลซึ่งต้องใช้เวลาพอสมควร เพราะประกอบด้วยหลายข้อมูลด้วยกันคือ จุดต่อ (node) ชิ้นส่วน (member) รูปแบบของที่รองรับ (type of support) น้ำหนักบรรทุกที่จุดต่อ (nodal load) และคุณสมบัติของวัสดุ (material property) ซึ่งแทบทุกครั้งที่การทำงานของโปรแกรมส่วนวิเคราะห์โครงสร้าง จะใช้เวลาเร็วกว่าการป้อนข้อมูลเป็นอย่างมาก
วิธีแก้ปัญหาที่พบในปัจจุบันสำหรับเรื่องดังกล่าวแบ่งได้เป็น 2 แนวทาง คือ แนวทางแรกใช้การป้อนข้อมูลเชิงภาพ (graphic) โดยให้ผู้ใช้โปรแกรมสร้างรูปทรงของโครงข้อหมุนพร้อมทั้งข้อมูลอื่นๆ ด้วยการคลิกเมาส์ที่หน้าจอโดยตรง แล้วโปรแกรมจะแปลงภาพให้เป็นตัวเลขภายหลัง ซึ่งทำให้ใช้เวลาในการป้อนข้อมูลน้อยลง ส่วนอีกแนวทางหนึ่งคือ เนื่องจากโครงข้อหมุนมีรูปทรงที่เป็นมาตรฐานอยู่หลายรูปทรง ตัวอย่างดังรูปที่ 1 เราก็ใช้วิธีกำหนดรูปทรงเหล่านั้นไว้ให้ผู้ใช้เลือก แล้วป้อนข้อมูลเบื้องต้นเพียงบางส่วนที่จำเป็น เช่น จำนวนช่วงแผ่น (panel) ความสูงของโครง เป็นต้น จากนั้นให้โปรแกรมแปลงค่าต่างๆ เป็นตัวเลขในภายหลัง ซึ่งวิธีนี้จะใช้เวลาน้อยมากในการป้อนข้อมูล มักจะเรียกกันว่าใช้วิซาร์ด (wizard) หรือตัวช่วยสร้างข้อมูล
บทความนี้ จะอธิบายถึงแนวทางการพัฒนาอัลกอริทึม (algorithm) เพื่อนำไปสร้างวิซาร์ดดังกล่าว พร้อมทั้งยกตัวอย่างโปรแกรมคอมพิวเตอร์ที่ใช้แนวทางนี้ โดยจะนำโครงข้อหมุนทรงเฮาว์ (howe) มาเป็นตัวอย่าง
ข้อมูลเบื้องต้นของโครงข้อหมุน
จากการวิจัยและพัฒนาพบว่า ข้อมูลเบื้องต้นที่จำเป็นต้องให้ผู้ใช้ป้อน ประกอบด้วย
1. จำนวนและความยาวของช่วงแผ่น (a) โดยจำนวนช่วงต้องเป็นเลขคู่ ตามลักษณะสมมาตรของโครง
2. ความสูง (b)
3. ขนาดและทิศทางของน้ำหนักบรรทุก (P) ซึ่งกระทำที่จุดต่อของคอร์ดบน (top cord)
4. รูปแบบของที่รองรับ แบ่งเป็น 2 รูปแบบคือ บานพับ (hinge) และล้อเลื่อน (roller)
5. ค่าโมดูลัสยืดหยุ่น (modulas of elasticity : E) และเนื้อที่หน้าตัด (area : A) ของชิ้นส่วน ซึ่งในเริ่มต้นจะกำหนดให้เท่ากันทุกชิ้น
ตัวอย่างข้อมูลเบื้องต้นของโครงข้อหมุนทรงเฮาว์ ดังรูปที่ 2
มีข้อพิจารณาต่อมาว่า หลังจากที่วิซาร์ดสร้างข้อมูลส่วนอื่นๆ ตามข้อมูลเบื้องต้นนี้เรียบร้อยแล้ว จะต้องเผื่อทางเลือกให้ผู้ใช้แก้ไขข้อมูลในภายหลังด้วย เช่น การเปลี่ยนแปลงเนื้อที่หน้าตัดให้หลากหลายขึ้น เป็นต้น แนวคิดคือ ข้อมูลส่วนใหญ่จะกระทำขึ้นอย่างรวดเร็ว หากมีการเปลี่ยนแปลง ก็จัดเป็นการกระทำเฉพาะจุด ซึ่งไม่เสียเวลามากนัก
ลำดับขั้นตอนวิซาร์ดกำหนดข้อมูล
หลังจากที่ได้ข้อมูลเบื้องต้นแล้ว จะให้วิซาร์ดกำหนดข้อมูลตามลำดับดังนี้
1. หาจำนวนจุดต่อ และจำนวนชิ้นส่วน โดยใช้หลักการทางคณิตศาสตร์
2. กำหนดรูปแบบการเรียงลำดับจุดต่อ และหมายเลขของจุดต่อ
3. กำหนดรูปแบบการเรียงลำดับชิ้นส่วน และหมายเลขของชิ้นส่วน
4. คำนวณหาพิกัดของแต่ละจุดต่อ
5. คำนวณหาหมายเลขจุดต่อหัวและท้ายของแต่ละชิ้นส่วน
6. กำหนดสภาพขอบเขต (boundary condition) ของจุดต่อที่เป็นที่รองรับ
7. กำหนดค่าของขนาดและทิศทางของน้ำหนักบรรทุกตามหมายเลขต่างๆของจุดต่อของคอร์ดบน
8. กำหนดทุกชิ้นส่วนมีค่าโมดูลัสยืดหยุ่นและเนื้อที่หน้าตัดเท่ากัน
อัลกอริทึมตามลำดับขั้นตอนสำหรับโครงข้อหมุนแบบเฮาว์
จากการวิจัยและพัฒนาพบว่า จำนวนจุดต่อและจำนวนชิ้นส่วน จะแปรตามจำนวนช่วงแผ่นของโครงข้อหมุนรูปทรงต่างๆ ซึ่งโครงข้อหมุนแบบเฮาว์จะได้ว่า
จำนวนจุดต่อ = 2S และจำนวนชิ้นส่วน = 4S-3
โดยที่ S = จำนวนช่วงแผ่น
สำหรับการเรียงลำดับหมายเลขจุดต่อ ใช้วิธีเรียงตามคอร์ดล่าง (bottom cord) ให้ครบ แล้วจึงเรียงตามคอร์ดบนจนครบทุกจุดต่อ และการเรียงลำดับหมายเลขชิ้นส่วน จะเรียงตามลำดับคือ คอร์ดล่าง คอร์ดบน ชิ้นส่วนตั้ง (vertical member) และชิ้นส่วนทแยง (diagonal member) ซึ่งสามารถเขียนอยู่ในรูปแบบทางคณิตศาสตร์ได้ดังรูปที่ 3
สำหรับอัลกอริทึม (algorithm) ในการกำหนดข้อมูลอื่น เขียนอยู่ในรูปรหัสเทียม (pseudo code) ได้ดังนี้
¢ คอร์ดล่าง 1 ถึง S+1
FOR I = 1 TO S+1
จุดต่อที่ I : พิกัด X = X, พิกัด Y = Y
X = X+a
NEXT I
¢ คอร์ดบน S+2 ถึง 3S/2
L = (S/2) *a
x = a
FOR I = S+2 TO 3S/2
จุดต่อที่ I : พิกัด X = X, พิกัด Y = X*b/L
X = X + a
NEXT I
¢ คอร์ดบน (3S/2)+1 ถึง 2S
L = (S/2) * a
X = L+a
d = L-a
FOR I = (3S/2)+1 TO 2S
Y = d * b/L
จุดต่อที่ I : พิกัด X = X, พิกัด Y = Y
X = X + a
d = d-a
NEXT I
ให้ H = หมายเลขจุดต่อหัว, T = หมายเลขจุดต่อท้าย
ถ้า S = 2
¢ คอร์ดล่าง
ชิ้นส่วนที่ 1 : H = 1, T = 2
ชิ้นส่วนที่ 2 : H = 2, T = 3
¢ คอร์ดบน
ชิ้นส่วนที่ 3 : H = 1, T = 4
ชิ้นส่วนที่ 4 : H = 4, T = 3
¢ ชิ้นส่วนตั้ง
ชิ้นส่วนที่ 5 : H = 2, T = 4
ถ้า S > 2 (ซึ่งต้องเป็นเลขคู่)
¢ คอร์ดล่าง
FOR I = 1 TO S
ชิ้นส่วนที่ I : H = I, T = I+1
NEXT I
¢ คอร์ดบน
NH = 1, NT = S+2
FOR I = S+1 TO 2S
ชิ้นส่วนที่ I : H = NH, T = NT
(ยกเว้นถ้า I = 2S : T = S+1)
NH = NT, NT = NT+1
NEXT I
¢ ชิ้นส่วนตั้ง
NH = 2, NT = S+2
FOR I = 2S + 1 TO 3S-1
ชิ้นส่วนที่ I : H = NH, T = NT
NH = NH+1, NT = NT+1
NEXT I
¢ ชิ้นส่วนทแยง ด้านซ้าย
FOR I = 3S TO (7S/2)-2
ชิ้นส่วนที่ I : H = NH, T = NT
NH = NH+1, NT = NT+1
NEXT I
¢ ชิ้นส่วนทแยง ด้านขวา
NH = (S/2)+1, NT = (3S/2)+1
FOR I = (7S/2)-1 TO 4S-3
ชิ้นส่วนที่ I : H = NH, T = NT
NH = NH+1, NT = NT+1
NEXT I
ให้ 0 = เคลื่อนที่ได้, 1 = เคลื่อนที่ไม่ได้
¢ ด้านซ้าย จุดต่อหมายเลข 1
IF ที่รองรับเป็นล้อเลื่อน THEN
แกน X = 0, แกนY = 1
ELSEIF ที่รองรับเป็นบานพับ THEN
แกน X = 1, แกน Y = 1
END IF
¢ ด้านขวา จุดต่อหมายเลข S+1
IF ที่รองรับเป็นล้อเลื่อน THEN
แกน X = 0, แกนY = 1
ELSEIF ที่รองรับเป็นบานพับ THEN
แกน X = 1, แกน Y = 1
END IF
ให้ค่า + คือ ทิศทางชี้ขึ้น, ค่า - คือ ทิศทางชี้ลง
FOR I = S+2 TO 2S
IF P <> 0 THEN
จุดต่อที่ I : น้ำหนักบรรทุก = -1*P
END IF
NEXT I
- กำหนดชุดของสมบัติวัสดุ = 1
- กำหนดทุกชิ้นส่วนมีค่าโมดูลัสยืดหยุ่นและเนื้อที่หน้าตัดเท่ากัน
¢ คอร์ดล่าง
ชิ้นส่วนที่ 1 : H = 1, T = 2
ชิ้นส่วนที่ 2 : H = 2, T = 3
¢ คอร์ดบน
ชิ้นส่วนที่ 3 : H = 1, T = 4
ชิ้นส่วนที่ 4 : H = 4, T = 3
¢ ชิ้นส่วนตั้ง
ชิ้นส่วนที่ 5 : H = 2, T = 4
ถ้า S > 2 (ซึ่งต้องเป็นเลขคู่)
¢ คอร์ดล่าง
FOR I = 1 TO S
ชิ้นส่วนที่ I : H = I, T = I+1
NEXT I
¢ คอร์ดบน
NH = 1, NT = S+2
FOR I = S+1 TO 2S
ชิ้นส่วนที่ I : H = NH, T = NT
(ยกเว้นถ้า I = 2S : T = S+1)
NH = NT, NT = NT+1
NEXT I
¢ ชิ้นส่วนตั้ง
NH = 2, NT = S+2
FOR I = 2S + 1 TO 3S-1
ชิ้นส่วนที่ I : H =