คณิตศาสตร์ Floating-Point บน Micro PLC: PID, การปรับขนาดอนาล็อก และเมื่อคุณต้องการมันจริงๆ

ให้ฉันเริ่มด้วยตัวเลข: 214-219 นั่นคือช่วงหน้าที่อยู่ในคู่มือ V6.2.2 ซึ่งบล็อก floating-point อาศัยอยู่ คุณอาจคิดว่าผู้ขายฝังมันไว้ที่นั่นเพราะไม่มีใครใช้มัน ผิดแล้ว พวกเขาฝังมันไว้ที่นั่นเพราะคณิตศาสตร์จำนวนเต็มใช้ได้ดีสำหรับงานเก้าสิบเปอร์เซ็นต์ — และสิบเปอร์เซ็นต์สุดท้ายคือที่ที่เครื่องจริงๆ อาศัยอยู่

Micro-PLC ที่ทำ SIN, COS, TAN, LN, EXP, SQRT, การเปรียบเทียบหมายเลขจริงและการเคลื่อนที่ของหมายเลขจริง เมื่อสิบปีที่แล้วประโยคนี้คงจะเป็นเรื่องตลก วันนี้มันถูกส่งในโมดูล DIN-rail ขนาด 35 มม. ที่มีราคาต่ำกว่าหัว probe ออสซิลโลสโคปที่ดี

เมื่อคณิตศาสตร์จำนวนเต็มโกหกคุณ

นี่คือกับดัก การปรับขนาดสัญญาณอนาล็อก 0-10V ด้วยคณิตศาสตร์จำนวนเต็มใช้ได้ — จนกว่าคุณจะทำการหาร 6V ในช่วง 0-1000: การหารจำนวนเต็มจะทำให้เศษตกหล่น และทันใดนั้นการอ่านระดับของคุณจะเบี่ยงเบนไปหนึ่งหน่วยในทุกการสแกน ในช่วงการทำงาน การเบี่ยงเบนจะสะสม ในช่วงหนึ่งสัปดาห์ ถังของคุณล้นเพราะ PLC คิดว่าระดับนั้นใช้ได้

Floating point แก้ไขปัญหานั้นได้ บล็อกการปรับขนาดหนึ่งบล็อก หมายเลขจริงตั้งแต่ต้นจนจบ และเสียงรบกวนจากการปัดเศษหายไป นั่นไม่ใช่ความหรูหรา นั่นคือสิ่งที่ทำให้ปั๊มของคุณแห้งและลูกค้าของคุณสงบ

กรณีที่เป็นรูปธรรม: การควบคุมอุณหภูมิ PID ด้วยคณิตศาสตร์จริง

ตั้งค่า PID loop บน PR-18: การอ่านสัญญาณอนาล็อก PT100 ผ่านตัวส่งสัญญาณ 0-10V บล็อก PID คำนวณด้วยการเพิ่มหมายเลขจริง ผลลัพธ์ขับเคลื่อนช่อง PWM สำหรับเครื่องทำความร้อน เครื่องยนต์ floating-point รักษาเทอมเชิงบูรณาการให้มีเสถียรภาพ บนฮาร์ดแวร์ที่ใช้เฉพาะจำนวนเต็ม วงจรเดียวกันนั้นต้องการการกำหนดค่าแรงด้วยตนเองและยังคงเกิดการสั่นที่ข้อผิดพลาดต่ำ

ฉันเห็นวิศวกรตรวจสอบไล่ตามการสั่น 0.4 องศาเป็นเวลาสองวันบน PID จำนวนเต็ม เปลี่ยน CPU เป็นรุ่น floating-point ปรับแต่งในหนึ่งชั่วโมง ความแตกต่างของต้นทุนฮาร์ดแวร์นั้นน่าหัวเราะ แต่ความแตกต่างของเวลาวิศวกรไม่ใช่

บล็อกที่คุณจะใช้จริงๆ

พูดตรงๆ: คุณจะใช้ ADD-R, SUB-R, MUL-R, DIV-R, และ SQRT อาจจะใช้ ROUND และ TRUNC เมื่อส่งค่าถึง HMI ฟังก์ชันตรีโกณมิติอยู่ที่นั่นสำหรับโครงการที่แปลกจริงๆ — การคำนวณการไหล ปริมาตรถังจากระดับ การชดเชยมุมสายพาน เมื่อคำขอที่แปลกประหลาดนั้นมาถึง คุณไม่ต้องการอธิบายว่า PLC ของคุณไม่สามารถทำโคไซน์ได้

และการแปลงสตริงมีความสำคัญมากกว่าที่คิด การแปลงจากจริงเป็นสตริง การแปลงจากจำนวนเต็มเป็น ASCII — นั่นคือวิธีที่คุณสร้างข้อความเตือนภัยที่อ่านได้และบันทึกข้อมูลโดยไม่ต้องใช้ภาษาสคริปต์ HMI

มันมีค่าใช้จ่ายเท่าไหร่

ไม่มีอะไรเพิ่มเติม เมื่อคุณเลือก CPU ที่ถูกต้อง บล็อก floating-point เป็นส่วนหนึ่งของไลบรารีมาตรฐานในรุ่นคู่มือปัจจุบัน และซอฟต์แวร์ฟรี ต้นทุนที่แท้จริงเพียงอย่างเดียวคือการเปลี่ยนพฤติกรรม: หยุดคิดในจำนวนเต็ม เริ่มคิดในหน่วยวิศวกรรม

การปรับขนาดที่ถูกต้อง

การปรับขนาดคือที่ที่ floating point สร้างรายได้ และมันยังเป็นที่ที่บั๊กการปรับขนาดส่วนใหญ่เกิดขึ้น ข้อผิดพลาดคลาสสิก: การปรับขนาดค่าดิบด้วยคณิตศาสตร์จำนวนเต็มและสูญเสียเศษในทุกการหาร การแก้ไขคลาสสิก: ทำคณิตศาสตร์ในหมายเลขจริงและแปลงครั้งเดียว ที่ขอบเขต ที่ซึ่ง HMI หรือ SCADA คาดหวังจำนวนเต็ม บล็อกการปรับขนาดหนึ่งบล็อก หมายเลขจริงตั้งแต่ต้นจนจบ และเสียงรบกวนจากการปัดเศษหายไป

เขียนค่าคงที่การปรับขนาดลงในที่ที่วิศวกรคนถัดไปสามารถหามันได้ ตัวส่งสัญญาณ 4-20mA ที่อ่าน 0-10 bar: สูตร ช่วงดิบ ช่วงวิศวกรรม — ทั้งหมดนี้ควรอยู่ในความคิดเห็นบนบล็อกการปรับขนาด ค่า "ดูถูกต้อง" เป็นเวลาหลายเดือนจนกระทั่งมันไม่ใช่ และคนที่ทำการดีบักจะต้องการค่าคงที่ ไม่ใช่ความทรงจำของคนที่เลือกมัน

ทดสอบขอบเขตที่การตรวจสอบ: ขั้นต่ำ สูงสุด และจุดกลาง บล็อกการปรับขนาดที่ถูกต้องที่ 50% แต่ผิดที่ 0% จะผ่านการมองอย่างไม่ตั้งใจและล้มเหลวในกระบวนการจริง จุดทดสอบสามจุด ห้านาที และการปรับขนาดเสร็จสิ้น

อุบายเฉพาะจำนวนเต็ม

มีแนวคิดที่บอกว่าMicro PLCควรอยู่เฉพาะจำนวนเต็มเพราะนั่นคือสิ่งที่ตัวควบคุมขนาดเล็กทำ มันเป็นตำแหน่งที่สามารถป้องกันได้จากมุมมองด้านต้นทุนและไม่สามารถป้องกันได้จากมุมมองด้านวิศวกรรมในทันทีที่กระบวนการของคุณเกี่ยวข้องกับการหาร อัตราส่วน หรือสิ่งใดก็ตามที่คล้ายกับหน่วยจริง ฮาร์ดแวร์ floating-point ไม่มีค่าใช้จ่ายเพิ่มเติมในแพลตฟอร์มนี้ ความสามารถอยู่ในไลบรารีบล็อก ไม่ใช่ระดับพรีเมียม

ต้นทุนที่แท้จริงของการคิดเฉพาะจำนวนเต็มปรากฏในด้านการบำรุงรักษา: วิธีการแก้ไข — จำนวนเต็มที่ปรับขนาดแล้ว ทศนิยมที่เลื่อนแล้ว คณิตศาสตร์จุดคงที่ที่ทำด้วยมือ — คือโค้ดที่ไม่มีใครเข้าใจหกเดือนต่อมา Floating point อ่านเหมือนกระบวนการ: อุณหภูมิในองศา ระดับในเมตร การไหลในลิตรต่อนาที โค้ดที่อ่านได้คือโค้ดที่บำรุงรักษาได้ และโค้ดที่บำรุงรักษาได้คือสิ่งที่ทำให้สัญญาบริการมีกำไร

ใช้จำนวนเต็มเมื่อมันเป็นเครื่องมือที่ถูกต้อง — ตัวนับ ธง ค่าดัชนี ใช้ฟลอตเมื่อกระบวนการอาศัยอยู่ แพลตฟอร์มให้คุณทั้งสองอย่าง วินัยคือการเลือกตามสัญญาณ ไม่ใช่ตามศาสนา

หมายเลขจริงใน HMI

หน้าจอ HMI และ SCADA ควรแสดงหน่วยวิศวกรรม ไม่ใช่จำนวนเต็มดิบ — และการปรับขนาดอยู่ที่ด้าน PLC ทำการแปลงครั้งเดียว ในบล็อกการปรับขนาดหนึ่งบล็อก และการแสดงผลอ่านองศา บาร์ และลิตรต่อนาทีทุกที่ ทางเลือกอื่น — การปรับขนาดในทุกหน้าจอ ทุกแท็ก ทุกรายงาน — เป็นการพิมพ์สูตรที่รอให้เกิดขึ้น จุดการแปลงหนึ่งจุดต่อสัญญาณ บันทึกในความคิดเห็นของบล็อก และทั้งระบบพูดภาษาของผู้ปฏิบัติงาน

นั่นคือการเปลี่ยนแปลง ฮาร์ดแวร์ทำให้มันเกิดขึ้นแล้ว สไตล์การเขียนโปรแกรมของคุณคือชิ้นสุดท้ายของการอัปเกรด