Programming Example: SDG waveform creation with Python and Sockets (no VISA)
December 13, 2022
Here is a programming example using Python and Sockets over LAN to create a two-point waveform.
Sockets via LAN can be helpful if you wish or are unable to use the VISA library.
Here is a picture of the data once it has been loaded into the SDG:
Here is a picture of the generator output on the controlling computer:
Here is the generator output on an oscilloscope:
You can download the Python .py script here:
SDG Python Socket Demo
import socket import sys import time import binascii remote_ip = "192.168.1.84" port = 5025 count = 0 wave_points = [0x8000, 0x3f06] for i in range (1000): wave_points = wave_points + [0x8000, 0x3f06] def SocketConnect(): try: s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) except socket.error: print('Fail to creat socket.') sys.exet(); try: s.connect((remote_ip, port)) except socket.error: print('failed to connect to ip' + remote_ip) return s def SocketQuery(Sock, cmd): try: Sock.sendall(cmd) time.sleep(1) except socket.error: print('Send failed') sys.exit() reply = Sock.recv(4096) return reply def SocketSend(Sock, cmd): try: cmd = cmd + '\n' Sock.sendall(cmd.encode('latin1')) time.sleep(1) except socket.error: print('Send failed.') sys.exit() def SocketClose(Sock): Sock.close() time.sleep(.300) def create_wave_file(): f = open('wave1.bin','wb') for a in wave_points: b = hex(a) b = b[2:] len_b = len(b) if(0 == len_b): b = '0000' elif(1 == len_b): b = '000' + b elif(2 == len_b): b = '00' + b elif(3 == len_b): b = '0' + b c = binascii.a2b_hex(b) f.write(c) f.close() def main(): global remote_ip global port global count create_wave_file() s = SocketConnect() f = open('wave1.bin', 'rb') data = f.read().decode('latin1') data1 = data.encode('latin1') with open('wave2.bin', 'wb') as f1: f1.write(data1) print('write bytes:', len(data)) data = str(data) SocketSend(s,"C1:WVDT WVNM,wave1,FREQ,2000.0,AMPL,3.0,OFST,0.0,PHASE,0.0,WAVEDATA,%s"%(data)) SocketSend(s,'C1:ARWV NAME,wave1') f.close() SocketClose(s) print('Exit.') if __name__ == '__main__': proc = main()