ShIoTiny: โหนด การเชื่อมต่อ และเหตุการณ์ หรือคุณสมบัติของโปรแกรมวาดภาพ

ShIoTiny: โหนด การเชื่อมต่อ และเหตุการณ์ หรือคุณสมบัติของโปรแกรมวาดภาพ

ประเด็นหลักหรือบทความนี้เกี่ยวกับอะไร

หัวข้อของบทความคือการเขียนโปรแกรม Visual PLC ชิโอไทนี่ สำหรับบ้านอัจฉริยะที่อธิบายไว้ที่นี่: ShioTiny: ระบบอัตโนมัติขนาดเล็ก, Internet of Things หรือ “หกเดือนก่อนวันหยุด”.

สั้นๆ แนวคิดเช่น นอต, การสื่อสาร, การพัฒนารวมถึงคุณสมบัติของการโหลดและการรันโปรแกรมภาพ ESP8266ซึ่งเป็นพื้นฐานของ PLC ชิโอไทนี่.

บทนำหรือคำถามสองสามข้อเกี่ยวกับองค์กร

ในบทความก่อนหน้านี้เกี่ยวกับการพัฒนาของฉัน ฉันได้ให้ภาพรวมคร่าวๆ เกี่ยวกับความสามารถของคอนโทรลเลอร์ ชิโอไทนี่.

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

ดังนั้นฉันจึงโพสต์ไบนารีของเฟิร์มแวร์และไดอะแกรมอุปกรณ์บน GitHub: เฟิร์มแวร์ + คำแนะนำที่สั้นที่สุด + ไดอะแกรม + ตัวอย่าง.

ตอนนี้ทุกคนสามารถแฟลช ESP-07 และเล่นกับเฟิร์มแวร์ได้ด้วยตัวเอง หากใครต้องการบอร์ดแบบเดียวกับในรูปจริงๆ ผมก็มีอยู่หลายอัน เขียนทางอีเมล [ป้องกันอีเมล]. แต่อย่างที่ Ogurtsov ที่น่าจดจำเคยกล่าวไว้ว่า: "ฉันไม่รับผิดชอบอะไรเลย!"

เอาล่ะเรามาถึงประเด็น: คืออะไร "ปม" (โหนด) และ "เหตุการณ์"? โปรแกรมดำเนินการอย่างไร?

ตามปกติเรามาเริ่มกันตามลำดับ: โดยการดาวน์โหลดโปรแกรม

โหลดโปรแกรมยังไงครับ

เริ่มจากสิ่งที่เกิดขึ้นเมื่อเรากดปุ่ม อัพโหลด ในเครื่องมือแก้ไข เอลวาด และโปรแกรมวงจรของเราซึ่งประกอบด้วยสี่เหลี่ยมที่สวยงามก็บินเข้าไปในอุปกรณ์

ประการแรก ตามแผนภาพที่เราวาด คำอธิบายในรูปแบบข้อความจะถูกสร้างขึ้น
ประการที่สอง จะตรวจสอบว่าอินพุตโหนดทั้งหมดเชื่อมต่อกับเอาต์พุตหรือไม่ ไม่ควรมีทางเข้าที่ "ห้อย" หากตรวจพบอินพุตดังกล่าว วงจรจะไม่ถูกโหลดเข้าสู่ ShioTiny และโปรแกรมแก้ไขจะแสดงคำเตือนที่เกี่ยวข้อง

หากทุกอย่างเป็นไปด้วยดี ตัวแก้ไขจะส่งคำอธิบายข้อความของวงจรทีละโหนดไปที่ ShIoTiny แน่นอนว่าวงจรที่มีอยู่จาก ShioTiny จะถูกลบออกก่อน คำอธิบายข้อความที่ได้จะถูกจัดเก็บไว้ในหน่วยความจำ FLASH

อย่างไรก็ตาม หากคุณต้องการถอดวงจรออกจากอุปกรณ์ ก็เพียงแค่โหลดวงจรว่างเข้าไป (ไม่มีองค์ประกอบโหนดเดียว)

เมื่อโหลดโปรแกรมวงจรทั้งหมดลงใน ShioTiny PLC แล้ว โปรแกรมจะเริ่ม "ดำเนินการ" มันหมายความว่าอะไร?

โปรดทราบว่ากระบวนการโหลดวงจรจากหน่วยความจำ FLASH เมื่อเปิดเครื่องและเมื่อรับวงจรจากตัวแก้ไขจะเหมือนกัน

ขั้นแรก ออบเจ็กต์โหนดจะถูกสร้างขึ้นตามคำอธิบาย
จากนั้นทำการเชื่อมต่อระหว่างโหนด นั่นคือการเชื่อมโยงของเอาต์พุตไปยังอินพุตและอินพุตไปยังเอาต์พุตจะถูกสร้างขึ้น

และหลังจากทั้งหมดนี้ วงจรการทำงานของโปรแกรมหลักก็เริ่มต้นขึ้นเท่านั้น

ฉันเขียนมาเป็นเวลานาน แต่กระบวนการทั้งหมดตั้งแต่ "การโหลด" วงจรจากหน่วยความจำ FLASH ไปจนถึงการเริ่มวงจรหลัก - ใช้เวลาเสี้ยววินาทีสำหรับวงจร 60-80 โหนด

ลูปหลักทำงานอย่างไร ง่ายมาก. ก่อนอื่นเขารอการปรากฏตัว การพัฒนา ที่โหนดใดโหนดหนึ่ง จากนั้นจึงประมวลผลเหตุการณ์นั้น และต่อๆ ไปอย่างไม่สิ้นสุด หรือจนกว่าพวกเขาจะอัปโหลดรูปแบบใหม่ไปที่ ShioTiny

หลายครั้งแล้วที่ฉันได้กล่าวถึงสิ่งต่าง ๆ เช่น การพัฒนา, นอต и การสื่อสาร. แต่นี่คืออะไรจากมุมมองของซอฟต์แวร์? เราจะพูดถึงเรื่องนี้ในวันนี้

โหนด การเชื่อมต่อ และเหตุการณ์

เพียงดูตัวอย่างโปรแกรมวงจรสำหรับ ชิโอไทนี่เพื่อทำความเข้าใจว่าแผนภาพประกอบด้วยสองเอนทิตีเท่านั้น - โหนด (หรือองค์ประกอบ) และการเชื่อมต่อระหว่างกัน

ปม, แต่ใช่ หรือ องค์ประกอบวงจร เป็นการเป็นตัวแทนเสมือนจริงของบางคน กิจกรรม เหนือข้อมูล นี่อาจเป็นการดำเนินการทางคณิตศาสตร์ การดำเนินการเชิงตรรกะ หรือการดำเนินการอื่นๆ ที่อยู่ในใจของเรา สิ่งสำคัญคือโหนดมีทางเข้าและทางออก

ทางเข้า - นี่คือสถานที่ที่โหนดรับข้อมูล รูปภาพอินพุตคือจุดที่ด้านซ้ายของโหนดเสมอ

เอาท์พุต - นี่คือสถานที่ที่ดึงผลลัพธ์ของการทำงานของโหนด ภาพที่ส่งออกคือจุดที่อยู่ทางด้านขวาของโหนดเสมอ

บางโหนดไม่มีอินพุต โหนดดังกล่าวสร้างผลลัพธ์ภายใน ตัวอย่างเช่น โหนดคงที่หรือโหนดเซ็นเซอร์: ไม่ต้องการข้อมูลจากโหนดอื่นเพื่อรายงานผลลัพธ์

ในทางกลับกัน โหนดอื่นไม่มีเอาต์พุต เหล่านี้เป็นโหนดที่แสดง เช่น แอคชูเอเตอร์ (รีเลย์หรือสิ่งที่คล้ายกัน) พวกเขายอมรับข้อมูลแต่ไม่สร้างผลลัพธ์การคำนวณที่โหนดอื่นสามารถใช้ได้

นอกจากนี้ยังมีโหนดความคิดเห็นที่ไม่ซ้ำใครอีกด้วย มันไม่ทำอะไรเลย ไม่มีอินพุตหรือเอาท์พุต มีวัตถุประสงค์เพื่อใช้เป็นคำอธิบายในแผนภาพ

เกิดอะไรขึ้น "เหตุการณ์"? เหตุการณ์ คือการเกิดขึ้นของข้อมูลใหม่ในโหนดใดๆ ตัวอย่างเช่น เหตุการณ์ต่างๆ ได้แก่: การเปลี่ยนแปลงสถานะอินพุต (node อินพุต) รับข้อมูลจากอุปกรณ์อื่น (nodes MQTT и UDP) การหมดอายุของระยะเวลาที่กำหนด (nodes เครื่องจับเวลา и ความล่าช้า) และอื่นๆ

กิจกรรมมีไว้เพื่ออะไร? ใช่ เพื่อพิจารณาว่าโหนดใดมีข้อมูลใหม่เกิดขึ้น และต้องเปลี่ยนสถานะของโหนดใดที่เกี่ยวข้องกับการรับข้อมูลใหม่ เหตุการณ์ดังกล่าวจะ "ผ่าน" ไปตามห่วงโซ่ของโหนดจนกว่าจะข้ามโหนดทั้งหมดที่ต้องตรวจสอบและเปลี่ยนแปลงสถานะ

โหนดทั้งหมดสามารถแบ่งออกเป็นสองประเภท
มาเรียกโหนดที่สามารถสร้างเหตุการณ์กันเถอะ "โหนดที่ใช้งานอยู่'
เราจะเรียกโหนดที่ไม่สามารถสร้างเหตุการณ์ได้”โหนดแบบพาสซีฟ'

เมื่อโหนดสร้างเหตุการณ์ (นั่นคือ ข้อมูลใหม่ปรากฏขึ้นที่เอาต์พุต) ในกรณีทั่วไป สถานะของสายโซ่ทั้งหมดของโหนดที่เชื่อมต่อกับเอาต์พุตของโหนดตัวสร้างเหตุการณ์จะเปลี่ยนไป

เพื่อให้ชัดเจนลองพิจารณาตัวอย่างในรูป

ShIoTiny: โหนด การเชื่อมต่อ และเหตุการณ์ หรือคุณสมบัติของโปรแกรมวาดภาพ

โหนดที่ใช้งานอยู่ที่นี่คือ Input1, Input2 และ Input3 โหนดที่เหลือเป็นแบบพาสซีฟ ลองพิจารณาว่าจะเกิดอะไรขึ้นเมื่อมีการปิดอินพุตหนึ่งหรืออีกอินพุตหนึ่ง เพื่อความสะดวกจะมีการสรุปผลลัพธ์เป็นตาราง

ShIoTiny: โหนด การเชื่อมต่อ และเหตุการณ์ หรือคุณสมบัติของโปรแกรมวาดภาพ

อย่างที่คุณเห็น เมื่อมีเหตุการณ์เกิดขึ้น ห่วงโซ่จะถูกสร้างขึ้นจากโหนดต้นทางของเหตุการณ์ไปยังโหนดปลาย สถานะของโหนดที่ไม่อยู่ในสายโซ่จะไม่เปลี่ยนแปลง

คำถามที่ถูกต้องเกิดขึ้น: จะเกิดอะไรขึ้นหากเหตุการณ์สองเหตุการณ์หรือหลายเหตุการณ์เกิดขึ้นพร้อมกัน?

ในฐานะผู้ชื่นชอบผลงานของ Gleb Anfilov ฉันจึงอยากส่งผู้ถามที่อยากรู้อยากเห็นไปที่หนังสือของเขาเรื่อง Escape from Surprise นี่คือ “ทฤษฎีสัมพัทธภาพสำหรับเด็กเล็ก” ซึ่งอธิบายได้ดีว่า “พร้อมกัน” หมายถึงอะไร และจะใช้ชีวิตร่วมกับทฤษฎีนั้นได้อย่างไร

แต่ในทางปฏิบัติแล้ว ทุกอย่างง่ายกว่ามาก: เมื่อมีเหตุการณ์สองเหตุการณ์หรือหลายเหตุการณ์เกิดขึ้น ห่วงโซ่ทั้งหมดจากแหล่งที่มาของเหตุการณ์แต่ละแห่งจะถูกสร้างขึ้นและประมวลผลตามลำดับตามลำดับ และไม่มีปาฏิหาริย์เกิดขึ้น

คำถามที่ถูกต้องตามกฎหมายถัดไปจากผู้อ่านที่อยากรู้อยากเห็นคือจะเกิดอะไรขึ้นหากโหนดเชื่อมต่อกับวงแหวน? หรืออย่างที่พวกเขาพูดในหมู่คนฉลาดเหล่านี้ว่าให้แนะนำข้อเสนอแนะ นั่นคือเชื่อมต่อเอาต์พุตของโหนดใดโหนดหนึ่งเข้ากับอินพุตของโหนดก่อนหน้าเพื่อให้สถานะเอาต์พุตของโหนดนี้ส่งผลต่อสถานะของอินพุต ตัวแก้ไขจะไม่อนุญาตให้คุณเชื่อมต่อเอาต์พุตของโหนดกับอินพุตโดยตรง เอลวาด. แต่ทางอ้อมดังรูปด้านล่างก็สามารถทำได้

แล้วจะเกิดอะไรขึ้นในกรณีนี้? คำตอบจะ "ชัดเจน" มาก ขึ้นอยู่กับว่าโหนดใด ลองดูตัวอย่างในรูป

ShIoTiny: โหนด การเชื่อมต่อ และเหตุการณ์ หรือคุณสมบัติของโปรแกรมวาดภาพ

เมื่อหน้าสัมผัสอินพุตของ Input1 เปิดอยู่ อินพุตด้านบนของโหนด A จะเป็น 0 เอาต์พุตของโหนด A ก็เป็น 0 เช่นกัน เอาต์พุตของโหนด B คือ 1 และสุดท้าย อินพุตด้านล่างของโหนด A คือ 1 ทุกอย่างเป็น ชัดเจน. และสำหรับผู้ที่ไม่ชัดเจน โปรดดูคำอธิบายด้านล่างว่าโหนด "AND" และ "NOT" ทำงานอย่างไร

ตอนนี้เราปิดหน้าสัมผัสของอินพุต Input1 นั่นคือเราใช้อันหนึ่งกับอินพุตด้านบนของโหนด A ผู้ที่คุ้นเคยกับอุปกรณ์อิเล็กทรอนิกส์รู้ดีว่าอันที่จริงเราจะได้วงจรเครื่องกำเนิดไฟฟ้าแบบคลาสสิกโดยใช้องค์ประกอบลอจิก และตามทฤษฎีแล้ว วงจรดังกล่าวควรสร้างลำดับ 1-0-1-0-1-0 อย่างไม่มีที่สิ้นสุด... ที่เอาท์พุตขององค์ประกอบ A และ B และ 0-1-0-1-0-1-…. ท้ายที่สุดกิจกรรมจะต้องเปลี่ยนสถานะของโหนด A และ B อย่างต่อเนื่องโดยวิ่งเป็นวงกลม 2-3-2-3-...!

แต่ในความเป็นจริงสิ่งนี้ไม่ได้เกิดขึ้น วงจรจะตกอยู่ในสถานะสุ่ม - หรือรีเลย์จะยังคงเปิดหรือปิดอยู่ หรืออาจจะเปิดและปิดเล็กน้อยติดต่อกันหลายครั้ง ทุกอย่างขึ้นอยู่กับสภาพอากาศที่ขั้วโลกใต้ของดาวอังคาร และนั่นคือสาเหตุว่าทำไมสิ่งนี้ถึงเกิดขึ้น

เหตุการณ์จากโหนด Input1 จะเปลี่ยนสถานะของโหนด A จากนั้นโหนด B และอื่นๆ ในลักษณะวงกลมหลายครั้ง โปรแกรมตรวจจับ "การวนซ้ำ" ของงานและบังคับให้หยุดงานรื่นเริงนี้ หลังจากนี้ การเปลี่ยนแปลงในสถานะของโหนด A และ B จะถูกบล็อกจนกว่าจะมีเหตุการณ์ใหม่เกิดขึ้น ช่วงเวลาที่โปรแกรมตัดสินใจว่า "หยุดหมุนเป็นวงกลม!" - โดยทั่วไปจะขึ้นอยู่กับหลายปัจจัยและถือว่าสุ่มได้

ระวังเมื่อเชื่อมต่อปมเข้ากับวงแหวน - เอฟเฟกต์จะไม่ชัดเจนเสมอไป! มีความคิดที่ดีว่าคุณกำลังทำอะไรและทำไม!

เป็นไปได้ไหมที่จะสร้างเครื่องกำเนิดไฟฟ้าบนโหนดที่เรามีอยู่? ใช่คุณสามารถ! แต่สิ่งนี้ต้องการโหนดที่สามารถสร้างเหตุการณ์ได้เอง และมีโหนดดังกล่าว - นี่คือ "เส้นหน่วงเวลา" เรามาดูกันว่าเครื่องกำเนิดไฟฟ้าที่มีระยะเวลา 6 วินาทีทำงานอย่างไรในรูปด้านล่าง

ShIoTiny: โหนด การเชื่อมต่อ และเหตุการณ์ หรือคุณสมบัติของโปรแกรมวาดภาพ

องค์ประกอบสำคัญของตัวสร้างคือโหนด A - เส้นหน่วงเวลา หากคุณเปลี่ยนสถานะอินพุตของเส้นหน่วงเวลาจาก 0 เป็น 1 ดังนั้น 1 จะไม่ปรากฏที่เอาต์พุตทันที แต่หลังจากเวลาที่กำหนดเท่านั้น ในกรณีของเราคือ 3 วินาที ในทำนองเดียวกัน หากคุณเปลี่ยนสถานะอินพุตของเส้นหน่วงเวลาจาก 1 เป็น 0 0 ที่เอาต์พุตจะปรากฏขึ้นหลังจาก 3 วินาทีเดียวกัน เวลาหน่วงกำหนดไว้ที่หนึ่งในสิบของวินาที นั่นคือค่า 30 หมายถึง 3 วินาที

คุณสมบัติพิเศษของเส้นล่าช้าคือสร้างเหตุการณ์หลังจากหมดเวลาล่าช้าแล้ว

สมมติว่าในตอนแรกเอาต์พุตของเส้นหน่วงเวลาคือ 0 หลังจากผ่านโหนด B - อินเวอร์เตอร์ - 0 นี่จะกลายเป็น 1 และไปที่อินพุตของเส้นหน่วงเวลา ไม่มีอะไรเกิดขึ้นทันที ที่เอาต์พุตของเส้นหน่วงเวลา จะยังคงเป็น 0 แต่การนับถอยหลังของเวลาหน่วงจะเริ่มขึ้น ผ่านไป 3 วินาที จากนั้นเส้นหน่วงเวลาจะสร้างเหตุการณ์ ที่เอาต์พุตจะปรากฏ 1 หน่วยนี้หลังจากผ่านโหนด B - อินเวอร์เตอร์ - เปลี่ยนเป็น 0 และไปที่อินพุตของเส้นหน่วงเวลา ผ่านไปอีก 3 วินาที... และกระบวนการก็เกิดขึ้นซ้ำ นั่นคือทุกๆ 3 วินาทีสถานะของเอาต์พุตบรรทัดล่าช้าจะเปลี่ยนจาก 0 เป็น 1 และจาก 1 เป็น 0 รีเลย์จะคลิก เครื่องกำเนิดไฟฟ้ากำลังทำงาน ระยะเวลาพัลส์คือ 6 วินาที (3 วินาทีที่เอาต์พุตเป็นศูนย์และ 3 วินาทีที่เอาต์พุตหนึ่ง)

แต่ในวงจรจริง มักจะไม่จำเป็นต้องใช้ตัวอย่างนี้ มีโหนดตัวจับเวลาพิเศษที่สมบูรณ์แบบและไม่มีภายนอกช่วยสร้างลำดับของพัลส์ในช่วงเวลาที่กำหนด ระยะเวลาของ "ศูนย์" และ "หนึ่ง" ในพัลส์เหล่านี้จะเท่ากับครึ่งหนึ่งของระยะเวลา

หากต้องการตั้งค่าการดำเนินการเป็นระยะ ให้ใช้โหนดตัวจับเวลา

ฉันสังเกตว่าสัญญาณดิจิทัลดังกล่าวซึ่งมีระยะเวลา "ศูนย์" และ "หนึ่ง" เท่ากันเรียกว่า "คดเคี้ยว"

ฉันหวังว่าฉันจะอธิบายคำถามให้กระจ่างขึ้นเล็กน้อยเกี่ยวกับวิธีการแพร่กระจายเหตุการณ์ระหว่างโหนดและสิ่งที่ไม่ควรทำ

บทสรุปและการอ้างอิง

บทความนี้กลายเป็นบทความสั้น ๆ แต่บทความนี้เป็นคำตอบสำหรับคำถามที่เกิดขึ้นเกี่ยวกับโหนดและเหตุการณ์ต่างๆ

เมื่อเฟิร์มแวร์พัฒนาขึ้นและมีตัวอย่างใหม่ปรากฏขึ้น ฉันจะเขียนเกี่ยวกับวิธีการตั้งโปรแกรม ชิโอไทนี่ บทความเล็กๆ ตราบเท่าที่มันจะน่าสนใจสำหรับผู้คน

เช่นเดิม ไดอะแกรม เฟิร์มแวร์ ตัวอย่าง คำอธิบายส่วนประกอบและทุกอย่าง ที่เหลืออยู่ที่นี่.

คำถาม ข้อเสนอแนะ คำวิจารณ์ - ไปที่นี่: [ป้องกันอีเมล]

ที่มา: will.com

เพิ่มความคิดเห็น