จะใช้ SCPI กับ HP33120A ผ่าน RS232 ได้อย่างไร?


9

ฉันมีตัวกำเนิดฟังก์ชัน Hewlet Packard 33120A (ควรเป็นชนิดเดียวกับAgilent 33120A ) และฉันต้องการควบคุมด้วย MCU (ATMega) เครื่องกำเนิดไฟฟ้ามี RS232 และใช้คำสั่ง SCPI

ฉันทำตัวแปลง RS232 เป็น TTL อย่างง่าย ๆ ด้วย MAX232 เพียงกับสาย RX และ TX ตามคู่มือผู้ใช้ (บทที่ 4 ส่วน DTR / DSR Handshake Protocol) ฉันเชื่อมโยง DSR กับตรรกะ TRUE (แรงดันลบ) และ DTR ไม่ได้เชื่อมต่อ การกำหนดค่านี้ควรปิดใช้งานการจับมือกันของฮาร์ดแวร์

ตอนนี้ฉันสามารถเชื่อมต่อตัวแปลงกับ MCU หรือคอมพิวเตอร์ สำหรับการทดลองครั้งแรกของฉันฉันใช้คอมพิวเตอร์และสคริปต์ Python นี้:

import serial, sys, time

if __name__ == '__main__':
        if len(sys.argv) < 2:
                print 'Usage: %s <serial_port>' % sys.argv[0]
                sys.exit(1)

        s = serial.Serial(port=sys.argv[1], baudrate=2400, bytesize=8, parity='N', stopbits=2, timeout=None, xonxoff=0, rtscts=0)

        time.sleep(0.5)
        s.write('\n*CLS\n')
        time.sleep(0.5)
        s.write('SYST:REM\n')
        time.sleep(0.5)
        s.write('APPL:SIN 30E+3, 0.1\n')


        s.close()

มันทำงานได้โดยไม่มีปัญหาใด ๆ เครื่องกำเนิดไฟฟ้าตั้งเอาท์พุทเป็น 30kHz ตามที่คาดไว้ ปัญหาคือเมื่อฉันพยายามอ่านการตอบสนองจาก generator ตัวอย่างเช่นสิ่งนี้ควรส่งคืนชื่ออุปกรณ์:

        s.write('*IDN?\n')
        print s.realine()

ฉันค่อนข้างมั่นใจว่าการตอบสนองถูกเก็บไว้ในบัฟเฟอร์เอาต์พุตของตัวสร้าง แต่ไม่มีการส่งข้อมูล

มีคำสั่งใดที่จะทริกเกอร์การส่งข้อมูลจากบัฟเฟอร์หรือไม่? หรือฉันต้องเปิดใช้งานการจับมือฮาร์ดแวร์หรือไม่

มีใครบ้างที่มีเครื่องกำเนิดไฟฟ้านี้หรือไม่? คุณใช้กับ RS232 และ SCPI หรือไม่


ฉันไม่สามารถตอบคำถามนี้ แต่ฉันสนใจคำตอบดังนั้นคุณจะได้รับการโหวตของฉัน
Andy aka

คุณจะรู้ได้อย่างไรว่ามันไม่ได้ส่งสัญญาณ? คุณไม่มีรหัสเพื่ออ่าน คุณลองใช้โปรแกรมเทอร์มินัลหรือมอนิเตอร์พอร์ตอนุกรมหรือไม่? หรือออสซิลโลสโคป
Jeanne Pindar

ฉันมีตัววิเคราะห์ลอจิก Saleae ที่ยึดหมุด RX / TX และในสคริปต์ Python มีs.readline()ฟังก์ชั่น (ฉันแก้ไขคำถามของฉันขอบคุณ)
vasco

อาจเป็นคำถามที่เกี่ยวข้อง: stackoverflow.com/questions/1093598/…
Szymon Bęczkowski

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

คำตอบ:


3

วิธีที่ง่ายที่สุดในการดีบัก SCPI ผ่าน RS-232 คือการใช้โปรแกรมเทอร์มินัลกับอินเตอร์เฟสอนุกรมที่คุณมีอยู่ เพียงพิมพ์คำสั่งแล้วดูว่าอะไรจะกลับมา เทอร์มินัลช่วยให้คุณสามารถเล่นซอร์ดด้วยอัตรา baud, handshaking, echo และอักขระการเลิกอย่างง่ายดายโดยไม่ต้องพึ่งพาไลบรารีการสื่อสารแบบอนุกรมที่ไม่รู้จักในระหว่าง (สิ่งที่คุณพิมพ์คือสิ่งที่คุณส่งสิ่งที่ได้รับคือสิ่งที่แสดง)

* IDN? ไม่ต้องการทริกเกอร์หรือพรอมต์พิเศษสำหรับการตอบกลับ หากคำสั่งได้รับการสนับสนุน (ตามคู่มือมันคือ) หากอักขระการเลิกจ้างถูกต้อง (ซึ่งดูเหมือนจะเป็นเพราะงาน Python ก่อนหน้าของคุณประสบความสำเร็จ) และหากการจับมือถูกต้องเครื่องมือควรตอบสนองทันทีด้วย สตริงการระบุ

เมื่อคุณทราบถึงสิ่งที่เครื่องมือคาดหวังและส่งคืนแล้วคุณสามารถสร้างสคริปต์ Python ของคุณได้อย่างง่ายดาย


1
ข้อมูลที่เป็นประโยชน์สำหรับฉันมิสเตอร์ guruman +1 เกิดอะไรขึ้นกับ OP?
Andy aka

1

ในภายหลัง แต่ ...

ลองผูก DSR กับแรงดันไฟฟ้าบวก 33120A ของฉันตอบสนองเฉพาะเมื่อฉันทำเช่นนั้นแทนที่กับแรงดันไฟฟ้าลบ

ฉันใช้ RealTerm กับตัวแปลง FTDI USB-RS232 และเชื่อมต่อ CTS (PC) กับ DSR (33120a) แต่จัดการ (และถือ) แรงดันไฟฟ้าของ CTS ผ่าน RealTerm ระหว่างการสื่อสาร (มีตัวเลือกให้ทำในโปรแกรม)

ความนับถือ.

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.