Programming Example: Controlling an SPD power supply via Sockets over LAN
January 4, 2021
Here is a Python 3.6 example of using sockets to control an SPD power supply connected to a computer using LAN.
Here is a zip file of the working program: PythonSocket_SPD_10232019.zip
NOTE: The SPD uses VXI-11 protocol for LAN. On some systems, it is helpful to use the VXI-11 format for the IP address:
“TCPIP::ip.add.re.ss::INSTR”
Here is the program in full:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 | #!/usr/bin/env python #-*- coding:utf-8 –*- #----------------------------------------------------------------------------- # The short script is a example that open a socket, sends a query, # print the return message and closes the socket. # #No warranties expressed or implied # #SIGLENT/JAC 05.2018 # #----------------------------------------------------------------------------- import socket # for sockets import sys # for exit import time # for sleep #----------------------------------------------------------------------------- remote_ip = "192.168.55.109" # should match the instrument’s IP address port = 5025 # the port number of the instrument service #Port 5024 is valid for the following: #SIGLENT SDS1202X-E, SDG1/2X Series, SDG6X Series #SDM3055, SDM3045X, and SDM3065X # #Port 5025 is valid for the following: #SIGLENT SVA1000X series, SSA3000X Series, and SPD3303X/XE count = 0 def SocketConnect(): try : #create an AF_INET, STREAM socket (TCP) s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) except socket.error: print ( 'Failed to create socket.' ) sys.exit(); try : #Connect to remote server s.connect((remote_ip , port)) except socket.error: print ( 'failed to connect to ip ' + remote_ip) return s def SocketClose(Sock): #close the socket Sock.close() time.sleep( 1 ) def main(): global remote_ip global port global count # Body: send the SCPI commands *IDN? 10 times and print the return message s = SocketConnect() for i in range ( 1 ): s.sendall(b 'OUTPUT CH1,ON' ) #s.sendall(b'\n') time.sleep( 5 ) s.sendall(b 'OUTPUT CH1,OFF' ) #s.sendall(b'\n') time.sleep( 5 ) print ( str (count)) count = count + 1 SocketClose(s) print ( 'Test complete. Exiting program' ) sys.exit if __name__ = = '__main__' : proc = main() |