Ejemplo n.º 1
0
def SAM7X_mdio(ip_addr='192.168.0.1', nreg='1', data=''):
    '''
    Записать/прочитать регистр mdio
    @param ip_addr - ip-адрес устройства
    @param nreg - номер регистра
    @param data - значение в виде 0xABCD
    @return значение регистра
    '''
    if True:
        cmd = ' '.join(['mdio', nreg, data])
        cmd = cmd.strip()
        return SAM7X_telnet(ip_addr, cmd)
    else:
        if v == '': v = None
        #print(r,v)
        l = query_serial('/dev/ttyUSB0', 115200, 8, 'N', 1, '$', '>')
        if len(l) == 0:
            return
        r = nreg.replace('R', '')
        q = 'r ' + r
        if v != None:
            q += ' ' + v
        q += '\n'
        l = query_serial('/dev/ttyUSB0', 115200, 8, 'N', 1, q, '>')
        l = l.replace('>', '')
        l = l.strip()
        ll = l.split('\n')
        print(ll, len(ll))
        if len(ll) == 1:
            l = ll[0]
            l = l.split()[1]
            l = l.replace('0x', '')
            return l
        return '0'
Ejemplo n.º 2
0
def SDM300A_cmd(port='ttyUSB0', addr='1', param='REM', val=''):
    """
    Функция для доступа к параметрам модема SDM300A
    @param port - для windows: COM1, COM2..., для *nix: ttyS*, ttyUSB*...
    @param addr - 0, 1, 2...
    @param param - REM, MF, RF... см. мануал
    @param val - новое значение при записи, пустая строка при чтении
    @return - текущее значение
    """
    if val:
        query_serial(port, 9600, 7, 'E', 2, '<%s/REM_\r' % addr, ']')
    if addr == '':
        return
    bp = ((param == 'MF' or param == 'AMRV') and (val != None))
    rf = ''
    if bp:
        rf = SDM300A_cmd(port, addr, 'RF')
    if not val:
        val = ''
    q = '<%s/%s_%s\r' % (addr, param, val)
    out = query_serial(port, 9600, 7, 'E', 2, q, ']')
    if not out:
        return ''
    if bp and rf:
        SDM300A_cmd(port, addr, 'RF', rf)
    if param == 'REM':
        return 'REM'
    return StripData(out)
Ejemplo n.º 3
0
def SDM300A_cmd(port='ttyUSB0', addr='1', param='REM', val=''):
    """
    Функция для доступа к параметрам модема SDM300A
    @param port - для windows: COM1, COM2..., для *nix: ttyS*, ttyUSB*...
    @param addr - 0, 1, 2...
    @param param - REM, MF, RF... см. мануал
    @param val - новое значение при записи, пустая строка при чтении
    @return - текущее значение
    """
    if val:
        query_serial(port, 9600, 7, 'E', 2, '<%s/REM_\r' % addr, ']')
    if addr == '':
        return
    bp = ((param == 'MF' or param == 'AMRV') and (val != None))
    rf = ''
    if bp:
        rf = SDM300A_cmd(port, addr, 'RF')
    if not val:
        val = ''
    q = '<%s/%s_%s\r' % (addr, param, val)
    out = query_serial(port, 9600, 7, 'E', 2, q, ']')
    if not out:
        return ''
    if bp and rf:
        SDM300A_cmd(port, addr, 'RF', rf)
    if param == 'REM':
        return 'REM'
    return StripData(out)
Ejemplo n.º 4
0
def CDM570_cmd(port, addr='0', param='EID', val=''):
    """
    Функция для доступа к параметрам модема CDM570
    @param port - для windows: COM1, COM2..., для *nix: ttyS*, ttyUSB*...
    @param addr - 0, 1, 2...
    @param param - EID, RSL, EBN... см. мануал
    @val - новое значение
    @return - текущее значение
    """
    q = ''
    if val:
        q = '<%s/%s=%s\r' % (addr, param, val)
    else:
        q = '<%s/%s?\r' % (addr, param)
    endstr = '\n'
    if param.upper() == 'FRW':
        endstr = ''
    out = query_serial(port, 9600, 8, 'N', 1, q, endstr, True)
    #print(out)
    if not out:
        return
    if val:
        return val
    i = out.find('=')
    if i > 0:
        out = out[i+1:]
    out = out.strip()
    return out
Ejemplo n.º 5
0
def ANASAT_cmd(port='COM1', cmd='INFO', *args):
    """
    Функция для доступа к параметрам приёмопередатчика ANASAT
    @param port - для windows: COM1, COM2..., для *nix: ttyS*, ttyUSB*...
    @param cmd - ALARMS, ADC TXIN, ACT P12V... см. мануал
    @return - текущее значение
    """
    cmd = ' '.join([cmd] + list(args))
    cmd = cmd.strip()
    cc = cmd.split()
    param = cc[0]
    a = ANASAT_addr(port)
    if not a and param not in ['R', 'BAUDRATE', 'CONNECT', 'DISCONNECT']:
        a = ANASAT_find(port)
        if not a:
            return ''
    bps = ANASAT_bps(port)
    read = param not in ['BAUDRATE', 'CONNECT', 'DISCONNECT']
    q = get_query_string(port, cmd)
    out = query_serial(port, bps, 8, 'N', 1, q, '\x03', True)
    #print('q:', q, 'cmd:', cmd, 'param:', param, 'bps:', bps, 'read:', read, 'len(out)', len(out), 'out:', out)
    if not out: return ''
    if param in [
            'TX', 'TXR', 'TXREQ', 'TXREQUEST', 'TXCHAN', 'RXCHAN', 'TXGAIN',
            'RXGAIN', 'TXFREQ', 'RXFREQ'
    ] and len(cc) > 1:
        return cc[1]
    return strip_data(out, cmd)
Ejemplo n.º 6
0
def POLUS_cmd(port='ttyUSB0', cmd=polus_statuscmd, param1='0', param2='0'):
    """
    Функция для работы с блоками ПОЛЮС
    @param port - для windows: COM1, COM2..., для *nix: ttyS*, ttyUSB*...
    @param cmd - 0, 1, 2... 15 - номер команды
    @param param1 - параметр1: 0, 1, 2... 65535
    @param param2 - параметр1: 0, 1, 2... 65535
    @return - набор байт (0xAA 0xBB 0xCC 0xDD 0xEE)
    """
    cmd = int(cmd)
    param1 = int(param1)
    param2 = int(param2)
    p = bytes([
        cmd,
        int(param1 / 256), param1 % 256,
        int(param2 / 256), param2 % 256
    ])
    cksum = 0
    for i in p:
        cksum += i
    cksum %= 256
    q = bytes([170]) + p + bytes([cksum]) + bytes([85])
    #for i in range(0, len(q)): print(q[i])
    r = query_serial(port, 9600, 8, 'N', 1, q, 85, dtr=True, rts=False)
    if len(r) < 8:
        return ''
    if r[0] != 170:
        return ''
    r = r[1:]
    ret = ['0x%.2X' % r[i] for i in range(0, 5)]
    return ' '.join(ret)
Ejemplo n.º 7
0
def QD2048_cmd(port, addr, param, val = None):
    """
    Функция для доступа к параметрам QD2048
    @param port - для windows: COM1, COM2..., для *nix: ttyS*, ttyUSB*...
    @param addr - 0, 1, 2...
    @param param - EBNO, BER... см. мануал
    @val - новое значение
    @return - текущее значение
    """
    q = param
    if addr != "" and addr != "/":
        n = addr.find("/");
        if n == 0:
            q = "R%s %s" % (addr[1:], q)
        elif n == len(addr) - 1:
            q = "%s %s" % (addr[0:n-1], q)
        elif n != -1:
            q = "%s R%s %s" % (addr[0:n-2], addr[n:], q)
    if val != None:	q += " " + val
    q += "\r"
    out = query_serial(port, 9600, 8, 'N', 1, q, "QD2048>");
    if out == None: return
    x = out.find("=")
    if x != -1:
        n = out.find("\r", x, len(out))
        out = out[x+1:n]
    else:
        m = out.find("\r")
        out = out[m+1:]
        out = out.lstrip()
        n = out.find("\r", m + 2, len(out))
        out = out[:n]
    out = out.lstrip()
    return out;
Ejemplo n.º 8
0
def CDM570_cmd(port, addr='0', param='EID', val=''):
    """
    Функция для доступа к параметрам модема CDM570
    @param port - для windows: COM1, COM2..., для *nix: ttyS*, ttyUSB*...
    @param addr - 0, 1, 2...
    @param param - EID, RSL, EBN... см. мануал
    @val - новое значение
    @return - текущее значение
    """
    q = ''
    if val:
        q = '<%s/%s=%s\r' % (addr, param, val)
    else:
        q = '<%s/%s?\r' % (addr, param)
    endstr = '\n'
    if param.upper() == 'FRW':
        endstr = ''
    out = query_serial(port, 9600, 8, 'N', 1, q, endstr, True)
    #print(out)
    if not out:
        return
    if val:
        return val
    i = out.find('=')
    if i > 0:
        out = out[i + 1:]
    out = out.strip()
    return out
Ejemplo n.º 9
0
def SSPBM_cmd(port='COM3', byte2='08', byte3='AA', byte4='AA', byte5='AA', byte6='AA'):
    """
    Функция для доступа к параметрам передатчика SSPBM-KS10-DSE
    @param port - для windows: COM1, COM2..., для *nix: ttyr*...
    @param byte* - байты 2-6 (запрос)
    @return byte* - байты 2-6 (ответ)
    """
    q = bytes([0x55])
    q += bytes([int(SSPBM_addr(port), 16)])
    q += bytes([int(byte2, 16)])
    q += bytes([int(byte3, 16)])
    q += bytes([int(byte4, 16)])
    q += bytes([int(byte5, 16)])
    q += bytes([int(byte6, 16)])
    n = 0
    for i in range (1, len(q)):
        n = n + q[i]
    n %= 256
    q += bytes([n])
    #print('q: ', ' '.join(['%.2X' % i for i in q]))
    out = query_serial(port, 9600, 8, 'N', 1, q, read=True, readlen=8)
    if len(out) == 8:
        #print('out: ', ' '.join(['%.2X' % i for i in out]))
        return ' '.join(['%.2X' % out[i] for i in range(2, 7)])
    else:
        print(out, len(out), type(out))
    return ''
Ejemplo n.º 10
0
def QD2048_cmd(port, addr, param, val=None):
    """
    Функция для доступа к параметрам QD2048
    @param port - для windows: COM1, COM2..., для *nix: ttyS*, ttyUSB*...
    @param addr - 0, 1, 2...
    @param param - EBNO, BER... см. мануал
    @val - новое значение
    @return - текущее значение
    """
    q = param
    if addr != "" and addr != "/":
        n = addr.find("/")
        if n == 0:
            q = "R%s %s" % (addr[1:], q)
        elif n == len(addr) - 1:
            q = "%s %s" % (addr[0:n - 1], q)
        elif n != -1:
            q = "%s R%s %s" % (addr[0:n - 2], addr[n:], q)
    if val != None: q += " " + val
    q += "\r"
    out = query_serial(port, 9600, 8, 'N', 1, q, "QD2048>")
    if out == None: return
    x = out.find("=")
    if x != -1:
        n = out.find("\r", x, len(out))
        out = out[x + 1:n]
    else:
        m = out.find("\r")
        out = out[m + 1:]
        out = out.lstrip()
        n = out.find("\r", m + 2, len(out))
        out = out[:n]
    out = out.lstrip()
    return out
Ejemplo n.º 11
0
Archivo: POLUS.py Proyecto: ivanovev/hm
def POLUS_cmd(port='ttyUSB0', cmd=polus_statuscmd, param1='0', param2='0'):
    """
    Функция для работы с блоками ПОЛЮС
    @param port - для windows: COM1, COM2..., для *nix: ttyS*, ttyUSB*...
    @param cmd - 0, 1, 2... 15 - номер команды
    @param param1 - параметр1: 0, 1, 2... 65535
    @param param2 - параметр1: 0, 1, 2... 65535
    @return - набор байт (0xAA 0xBB 0xCC 0xDD 0xEE)
    """
    cmd = int(cmd)
    param1 = int(param1)
    param2 = int(param2)
    p = bytes([cmd, int(param1/256), param1%256, int(param2/256), param2%256])
    cksum = 0
    for i in p:
        cksum += i
    cksum %= 256
    q = bytes([170]) + p + bytes([cksum]) + bytes([85])
    #for i in range(0, len(q)): print(q[i])
    r = query_serial(port, 9600, 8, 'N', 1, q, 85, dtr=True, rts=False)
    if len(r) < 8:
        return ''
    if r[0] != 170:
        return ''
    r = r[1:]
    ret = ['0x%.2X' % r[i] for i in range(0, 5)]
    return ' '.join(ret)
Ejemplo n.º 12
0
def ANASAT_cmd(port='COM1', cmd='INFO', *args):
    """
    Функция для доступа к параметрам приёмопередатчика ANASAT
    @param port - для windows: COM1, COM2..., для *nix: ttyS*, ttyUSB*...
    @param cmd - ALARMS, ADC TXIN, ACT P12V... см. мануал
    @return - текущее значение
    """
    cmd = ' '.join([cmd] + list(args))
    cmd = cmd.strip()
    cc = cmd.split()
    param = cc[0]
    a = ANASAT_addr(port)
    if not a and param not in ['R', 'BAUDRATE', 'CONNECT', 'DISCONNECT']:
        a = ANASAT_find(port)
        if not a:
            return ''
    bps = ANASAT_bps(port)
    read = param not in ['BAUDRATE', 'CONNECT', 'DISCONNECT']
    q = get_query_string(port, cmd)
    out = query_serial(port, bps, 8, 'N', 1, q, '\x03', True)
    #print('q:', q, 'cmd:', cmd, 'param:', param, 'bps:', bps, 'read:', read, 'len(out)', len(out), 'out:', out)
    if not out: return ''
    if param in ['TX', 'TXR', 'TXREQ', 'TXREQUEST', 'TXCHAN', 'RXCHAN', 'TXGAIN', 'RXGAIN', 'TXFREQ', 'RXFREQ'] and len(cc) > 1:
        return cc[1]
    return strip_data(out, cmd)
Ejemplo n.º 13
0
def TH1951_fetch2(port='ttyUSB0'):
    """
    Fetch latest reading
    @param port - serial port
    @return value
    """
    ret = query_serial(port, 9600, 8, 'N', 1, 'FETC?\r', '\n')
    ret = ret.strip()
    return ret
Ejemplo n.º 14
0
def TH1951_fetch2(port='ttyUSB0'):
    """
    Fetch latest reading
    @param port - serial port
    @return value
    """
    ret = query_serial(port, 9600, 8, 'N', 1, 'FETC?\r', '\n')
    ret = ret.strip()
    return ret
Ejemplo n.º 15
0
def MA24118A_cmd(port='ttyACM0', cmd='IDN?'):
    """
    Send cmd, return reply
    @param port - serial port
    @param cmd - command
    @return reply
    """
    cmd += '\n'
    ret = query_serial(port, 9600, 8, 'N', 1, cmd, endstr='\n', timeout=1)
    if ret:
        ret = ret.strip()
    return ret
Ejemplo n.º 16
0
def MA24118A_cmd(port='ttyACM0', cmd='IDN?'):
    """
    Send cmd, return reply
    @param port - serial port
    @param cmd - command
    @return reply
    """
    cmd += '\n'
    ret = query_serial(port, 9600, 8, 'N', 1, cmd, endstr='\n', timeout=1)
    if ret:
        ret = ret.strip()
    return ret
Ejemplo n.º 17
0
def AT4508_cmd(port='ttyUSB0', cmd='IDN?'):
    """
    Send cmd, return reply
    @param port - serial port
    @param cmd - command
    @return reply
    """
    cmd += '\n'
    ret = query_serial(port, 9600, 8, 'N', 1, cmd, '\n')
    ret = ret.strip()
    ret = ret.strip(',')
    return ret
Ejemplo n.º 18
0
def vcp_io(q):
    l = query_serial('/dev/ttyACM0', 115200, 8, 'N', 1, q, '#> ')
    if len(l) == 0:
        return ''
    l = l.replace('#> ', '')
    l = l.strip()
    ll = l.split('\n')
    if len(ll) == 1:
        l = ll[0]
        l = l.split()[1]
        l = l.replace('0x', '')
        return l
    return '0'
Ejemplo n.º 19
0
Archivo: AMT30.py Proyecto: ivanovev/hm
def AMT30_RS485(port, addr, param, val=''):
    """
    Функция для доступа к параметрам модема AMT30 через порт RS485
    @param port - для windows: COM1, COM2..., для *nix: ttyS*, ttyUSB*...
    @param addr - X/Y, где X,Y = 0, 1, 2... если RS485
    @param param - FAULT, EBNO1, EBNO2... см. мануал
    @param val - новое значение при записи, пустая строка при чтении
    @return - текущее значение
    """
    n = addr.find('/')
    if n == None: return
    num = addr[n+1:]
    addr = addr[:n]
    # opening flag
    q = '\x7E'
    # destination address
    q += chr(int(addr, 16))
    # protocol id
    q += chr(0x00)
    # command type
    if val == None: q += chr(0x01)
    else: q += chr(0x00)
    # register address 1
    if num == '': q += chr(0x00)
    else:
        if num[0].isalpha():
            q += chr(int('0' + num[1:], 16))
        else:
            q += chr(int(num, 16))
    # register address 2
    a = get_register_addr1(num, param)
    if a == None: return
    q += a
    # number of bytes
    q += get_byte_count(num, param, val)
    # error code
    q += chr(0x00)
    # data field
    q += get_data_bytes(val)
    # checksum
    q += get_checksum(q)
    # closing flag
    q += '\x7E'
    out = query_serial(port, 9600, 8, 'N', 1, q, '\x7E')
    if out == None: return
    out = out.replace(q, '')
    if len(out) < 11: return
    out1 = ''
    for i in range(8, len(out) - 2):
        out1 += '0x%.2X' % ord(out[i]) + ' '
    return out1.rstrip()
Ejemplo n.º 20
0
def SL2048_cmd(port='ttyUSB0', addr='', param='TCARRIER', val=None):
    """
    Функция для доступа к параметрам модема SL2048
    @param port - для windows: COM1, COM2..., для *nix: ttyS*, ttyUSB*...
    @param addr - 0, 1, 2...
    @param param - TMOD, TBPS, TRATE... см. мануал
    @val - новое значение
    @return - текущее значение
    """
    q = param
    if addr != None and addr != '' and addr != '/' and addr != '/0':
        n = addr.find('/')
        num = ''
        if n == None: num = addr
        else: num = addr[n+1:]
        if num != None and num != '':
            if int(num) >= 2:
                q = '%s #%s' % (q, num)
        if n != None:
            if n >= 2:
                q = '%s %s' % (addr[n - 2:], q)
    if val != None: q = '%s %s' % (q, val)
    q += '\r'
    print(q)
    out = query_serial(port, 9600, 8, 'N', 1, q, 'SL2048>', timeout=4)
    print(out)
    if out == None: return
    n = out.find('=')
    if n != -1: out = out[n+2:]
    else:
        n = out.find('\r')
        if n != None: out = out[n+2:]
    out = out.lstrip()
    out = out.lstrip('\0')
    n = out.find('\r')
    if n != None: out = out[:n]
    if val != None and val != '' and val != out:
        t1 = datetime.now()
        while True:
            s = query(port, addr, param)
            if s == val:
                break
            t2 = datetime.now()
            if (t2 - t1).seconds > 1:
                break
    return out
Ejemplo n.º 21
0
Archivo: AMT30.py Proyecto: ivanovev/hm
def AMT30_RS232(port, addr, param, val=''):
    """
    Функция для доступа к параметрам модема AMT30 через порт RS232
    @param port - для windows: COM1, COM2..., для *nix: ttyS*, ttyUSB*...
    @param addr - номер устройства
    @n '' (пустая строка) - команда интерфейса
    @n 0 - команда модулятора
    @n 1, 2... команда демодулятора
    @param param - FAULT, EBNO1, EBNO2... см. мануал
    @param val - новое значение при записи, пустая строка при чтении
    @return - текущее значение
    """
    q = param
    addr = addr.split('/')[-1]
    if addr:
        addr = int(addr)
        if addr == 0:
            'Modulator RS232'
            q = 'T ' + q
        elif addr > 0:
            'Demodulator RS232'
            q = 'R%d %s' % (addr, q)
    if val:	q += ' ' + val
    q += '\r'
    read = not val or True
    out = query_serial(port, 9600, 8, 'N', 1, q, '> ', read=read);
    if not read:
        return val
    if not out: return
    if out.count('=') == 1:
        x = out.find('=')
        r = out.find('\r', x, len(out))
        out = out[x+1:r]
    out = out.strip('> \n\r')
    if not out:
        return val
    return out