Skip to content
Snippets Groups Projects
Commit e82ee662 authored by Guy Rosin's avatar Guy Rosin
Browse files

Added Instek PS which is used for slow dose irrad at BNL

parent 30c78831
No related tags found
No related merge requests found
......@@ -15,7 +15,8 @@ set(SrcFiles AgilentPs.cpp
Keithley24XX.cpp
TTIMX180TPPs.cpp
TTITSX1820PPs.cpp
Bk16XXPs.cpp)
Bk16XXPs.cpp
InstekPST3202.cpp)
add_library(PS SHARED ${SrcFiles})
add_dependencies(PS COM)
......
#include "InstekPST3202.h"
#include <algorithm>
#include "Logger.h"
//loglevel_e loglevel;
InstekPST3202::InstekPST3202(std::string dev, unsigned addr) {
m_com = new SerialCom(dev, B115200);
m_addr = addr;
m_com->write("++auto 0\n\r");
}
InstekPST3202::~InstekPST3202() {
delete m_com;
}
void InstekPST3202::send(std::string cmd) {
m_com->write("++addr " + std::to_string(m_addr) + "\n\r");
logger(logDEBUG2) << __PRETTY_FUNCTION__ << " -> Sending: " << cmd;
cmd += "\r\n";
m_com->write(cmd);
std::this_thread::sleep_for(std::chrono::milliseconds(m_wait));
}
std::string InstekPST3202::receive(std::string cmd)
{
m_com->write("++addr " + std::to_string(m_addr) + "\n\r");
logger(logDEBUG2) << __PRETTY_FUNCTION__ << " -> Sending: " << cmd;
cmd += "\r\n";
m_com->write(cmd);
m_com->write("++read eoi\n\r");
std::this_thread::sleep_for(std::chrono::milliseconds(m_wait));
std::string buf;
m_com->read(buf);
logger(logDEBUG2) << __PRETTY_FUNCTION__ << " -> Received: " << buf;
return buf;
}
void InstekPST3202::init() {
// Check if the PS is connected
std::string idn=this->receive("*idn?");
idn.erase(std::find_if(idn.rbegin(), idn.rend(), [](int ch) {
return !std::isspace(ch);
}).base(), idn.end());
if(idn!="GW.Inc,PST-3202,EQ823264,FW1.06" && idn.find("PST-3202") == std::string::npos ){
throw "Unknown power supply: "+idn;
}
// Prepare everything else
this->send("OUTP:STAT 0");
this->send("*RST");
//Check on this xyz
this->send("CHAN1:PROT:VOLT 20");
}
void InstekPST3202::setCh(unsigned ch) {
//this->send("INST:SEL OUT" + std::to_string(ch));
}
void InstekPST3202::setRange(unsigned range) {
//this->send("VOLTAGE:RANGE P" + std::to_string(range) + "V");
}
void InstekPST3202::setVoltage(double volt) {
this->send("CHAN1:VOLT " + std::to_string(volt));
}
std::string InstekPST3202::getVoltage() {
return this->receive("CHAN1:MEAS:VOLT?").substr(0,15);
}
void InstekPST3202::setCurrent(double cur) {
this->send("CHAN1:CURR " + std::to_string(cur));
}
std::string InstekPST3202::getCurrent() {
return this->receive("CHAN1:MEAS:CURR?").substr(0, 15);
}
void InstekPST3202::setVoltageProtect(double volt) {
this->send("CHAN1:VOLT:PROT " + std::to_string(volt));
//this->send("VOLT:PROT:STAT ON");
}
void InstekPST3202::setCurrentProtect(double cur) {
//this->send("CURRENT:LIMIT " + std::to_string(cur));
this->send("CHAN1:CURR:PROT " + std::to_string(cur));
this->send("CHAN1:PROT:CURR 1");
}
void InstekPST3202::turnOn() {
this->send("OUTP:STAT 1");
}
void InstekPST3202::turnOff() {
this->send("OUTP:STAT 0");
}
void InstekPST3202::beepOff() {
//this->send("SYST:BEEP:STAT OFF");//disable beep
}
#ifndef INSTEKPST3202_H
#define INSTEKPST3202_H
// ####################
// Instek PST 3202 PS (BNL Irradiations)
// Author: Greg Ottino (Modeled after T. Heim)
// Date: July 2019
// Notes: Assuming Prologix GPIB to USB
// ###################
#include <iostream>
#include <string>
#include <thread>
#include <chrono>
#include "SerialCom.h"
#include "GenericPs.h"
class InstekPST3202 : public GenericPs {
public:
InstekPST3202(std::string dev, unsigned addr);
~InstekPST3202();
void init();
void setCh(unsigned ch);
void setRange(unsigned range);
void setVoltage(double volt);
std::string getVoltage();
void setCurrent(double cur);
std::string getCurrent();
void setVoltageProtect(double volt);
void setCurrentProtect(double cur);
void turnOn();
void turnOff();
void beepOff();
private:
SerialCom *m_com;
unsigned m_addr;
void send(std::string cmd);
std::string receive(std::string cmd);
std::chrono::milliseconds m_wait{200};
};
#endif
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment