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'
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)
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
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)
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)
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;
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
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 ''
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
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)
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)
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
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
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
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'
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()
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
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