ฉันมีตัวกำเนิดฟังก์ชัน 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 หรือไม่
s.readline()
ฟังก์ชั่น (ฉันแก้ไขคำถามของฉันขอบคุณ)