Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

No data exists for extended channels. #1

Open
maple100 opened this issue Jun 13, 2024 · 0 comments
Open

No data exists for extended channels. #1

maple100 opened this issue Jun 13, 2024 · 0 comments

Comments

@maple100
Copy link

I changed the source to support the expansion channel and tested it, and it is working.
Share the webpage and changed source for the expansion channel.
image

#Edit def append_graphtec_readings(self)

from bs4 import BeautifulSoup
from requests import get
from pandas import DataFrame

class Graphtec:

    #-----------------------------------
    def __init__(self, address, resource_manager):
        self.address = address
        self.tcpip_gl = f"TCPIP::{self.address}::8023::SOCKET"                          # TCPIP adress to contact
        self.instrument = resource_manager.open_resource(self.tcpip_gl,
                                                            write_termination='\n',
                                                            read_termination='\r\n')
        self.query_id = self.get_graphtec_idn()
        self.data = []                                                                  # Holds measurement data

    #-----------------------------------
    def append_graphtec_readings(self):
        """Find all the measurements of the channels and append to self.data list"""
        # Format URL
        address_channel_data = f"http://{self.address}/digital.cgi?chgrp=13"

        # Get http response
        response = get(address_channel_data)                        # Get response from the channel data page

        # Create response table
        soup_object = BeautifulSoup(response.text, 'html.parser')   # Create a soup object from this, which is used to create a table
        temps = soup_object.select('b')
        # Loop over table to yield formatted data
        channels_data = []
        # Holds all the found data > in format: [('CH 1', '+  10', 'degC'), (CH2 ....]
        temps = [read_tag.get_text(strip=True) for read_tag in temps]
        count = 2
        for idx, temp in enumerate(temps):
            if idx == count:
                channels_data.append(temps[idx-2:idx+1])
                count = count + 3

        # Append the data to the list
        self.data.append(channels_data)

    #-----------------------------------
    def get_graphtec_idn(self):
        """SCPI command to get IDN"""
        idn = self.instrument.query("*IDN?")
        return idn

    #-----------------------------------
    def add_channel_data_to_df(self):
        """Post processing method to format self.data list into a Pandas DataFrame"""

        name_index = 0      # Format is ['CH 1', '23.56', 'degC']
        reading_index = 1   # so index 0, 1 and 2 are, respectively channel name, value reading and unit.
        unit_index = 2

        channel_count = len(self.data[0])    # Amount of channels to loop over, might depend on Graphtec device (I have 20)
        df = DataFrame()

        # Loop over each channel
        for channel_ind in range(channel_count):

            channel_name = self.data[0][channel_ind][name_index]    # get the channel name
            channel_unit = self.data[0][channel_ind][unit_index]    # and unit
            column_name = f"GRPH {channel_name} [{channel_unit}]"   # Format column name "GRPH CH1 [degC]"

            channel_readings = []                                   # Stores the channel data > [0.0, 0.1, 0.0 ....]

            # Loop over each row and retrieve channel data
            for row in self.data:
                channel_reading = row[channel_ind][reading_index]   # Read the data of channel for this row

                # Value formatting
                if channel_reading == '-------' or channel_reading == '+++++++' or channel_reading =='BURNOUT':
                    channel_reading = None #"NaN"                                 # NaN for false values
                else:
                    channel_reading = float(channel_reading.replace(' ',''))# Float for other values, remove spaces in order to have +/-


                channel_readings.append(channel_reading)

            df[column_name] = channel_readings          # Add a new column with data

        return df
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant