วิธีการรับจากพอร์ตอนุกรม โดยใช้ MScomm32.ocx ใน Visual FoxPro

ตั้งค่าคุณสมบัติต่อไปนี้โดยไม่คำนึงถึงเทคนิคที่คุณใช้:

  • คุณสมบัติ CommPort: การตั้งค่าคุณสมบัตินี้เป็นตัวเลขไปยังพอร์ตสื่อสารที่ต้องการ ค่าที่ถูกต้องคือ 1, 2, 3 หรือ 4 ขึ้นอยู่กับพอร์ตอนุกรมที่พร้อมใช้งาน และการกำหนดค่าของคอมพิวเตอร์แต่ละตัว ค่าเหล่านี้ตรงกับ Com1, Com2, Com3 และ Com4 ตามลำดับ
  • ตั้งค่าคุณสมบัติ: ชุดคุณสมบัติอักขระนี้อัตรารับส่งข้อมูล พาริตี้ บิตข้อมูล และ บิตหยุดกำหนดอุปกรณ์เชื่อมต่อกับพอร์ตอนุกรม คุณสมบัตินี้เป็นตัวอักขระ รายการที่คั่นด้วยจุลภาค ตัวอย่างเช่น เพื่อตั้งค่าพอร์ตอนุกรม 14,400 บอด แม้กระทั่งพาริตี้ บิตข้อมูล 7 และ 1 บิตหยุด ตั้งไว้สตริ:
       14400,E,7,1
  • คุณสมบัติ PortOpen: การตั้งค่าคุณสมบัตินี้ทางตรรกะเพื่อ true to เปิดการสื่อสารกับพอร์ตอนุกรมพอร์ต นอกจากนี้คุณยังสามารถตรวจสอบคุณสมบัตินี้เมื่อต้องการตรวจสอบพอร์ตที่เปิดได้อย่างถูกต้อง

เทคนิคหนึ่ง: driven เหตุการณ์ได้รับ

เหตุการณ์เทคนิค Driven สร้างเหตุการณ์ OnComm เมื่อมีอักขระที่รออยู่ในบัฟเฟอร์สำหรับการป้อนค่า นอกจากนี้ คุณสมบัติ CommEvent จะประกอบด้วย 2 เป็นตัวเลข สำหรับเหตุการณ์ OnComm จะถูกทริกเกอร์ คุณต้องตั้งค่าคุณสมบัติ Rthreshold กับค่าอื่นที่ไม่ใช่ศูนย์ (ค่าเริ่มต้น) การตั้งค่าทั่วไปสำหรับคุณสมบัติ Rthreshold คือ 1 ซึ่งหมายถึง ที่ OnComm เหตุการณ์จะถูกทริกเกอร์ถ้ารออย่างน้อยหนึ่งอักขระในบัฟเฟอร์สำหรับการป้อนค่า

ตัวอย่างเช่น คุณสามารถวางรหัสต่อไปนี้ในเหตุการณ์ OnComm เพื่อผนวกข้อมูลที่ได้รับไปยังคุณสมบัติของฟอร์มเรียกว่า mybuffer:

   Procedure MyCom.OnComm
     IF This.CommEvent = 2
       ThisForm.mybuffer = ThisForm.mybuffer + This.Input
     ENDIF
   ENDPROC

เทคนิคที่สอง: บัฟเฟอร์การรับข้อมูลการหยั่งเสียง

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

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

สมมติว่า ตัวควบคุม Mscomm บนแบบฟอร์ม และมีชื่อ MyCom และมี คุณสมบัติเป็นแบบฟอร์มที่มีชื่อว่า mybuffer รหัสต่อไปนี้แสดงให้เห็นวิธีการสำรวจสำหรับอักขระรอ:

   Procedure myform.myproc
     IF Thisform.MyCom.InBufferCount > 0
       Thisform.mybuffer = Thisform.mybuffer + Thisform.MyCom.Input
     ENDIF
   ENDPROC

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