Тренувальний Міні-контест на УКХРегламент контестаСтатистика контеста
0 Користувачів і 1 Гість дивляться цю тему.
#!/usr/bin/env python3import serialimport mathimport matplotlib.pyplot as pltfrom datetime import datetimeimport sqlite3import requestsBand = {'160':['fq1900000', 'sw200000', 'frx20', '20'], '80': ['fq3750000', 'sw500000', 'frx50', '50'], '60': ['fq5331900', 'sw28000', 'frx20', '20'], '40': ['fq7150000', 'sw1000000', 'frx30', '30'], '30': ['fq10125000', 'sw50000', 'frx10', '10'], '20': ['fq14150000', 'sw300000', 'frx30', '30'], '17': ['fq18118000', 'sw100000', 'frx10', '10'], '15': ['fq21225000', 'sw450000', 'frx45', '45'], '12': ['fq24940000', 'sw100000', 'frx10', '10'], '10': ['fq28985000', 'sw1970000', 'frx50', '50'] }ser = serial.Serial('/dev/ttyUSB3', baudrate=38400, timeout=1)def swr_calculate(R, X): XX = float(X) * float(X) Rm = (float(R) - 50) * (float(R) - 50) Rp = (float(R) + 50) * (float(R) + 50) N = math.sqrt(Rm + XX) D = math.sqrt(Rp + XX) G = N / D vswr = (1 + G) / (1 - G) return round(vswr, 2)freqs = []vswrs = []f = open("SWR-and-Frequency-" + str(datetime.now().strftime("%Y-%m-%d-%H-%M-%S"))+".csv","w+")def insertVaribleIntoTable(freq,vswr, date): try: sqliteConnection = sqlite3.connect('aa-30-zero.db') cursor = sqliteConnection.cursor() sqlite_insert_with_param = """INSERT INTO swr_measurements (freq, vswr, date) VALUES (?, ?, ?);""" data_tuple = (freq, vswr, date) cursor.execute(sqlite_insert_with_param, data_tuple) sqliteConnection.commit() cursor.close() except sqlite3.Error as error: print("Failed to insert Python variable into sqlite table", error) finally: if sqliteConnection: sqliteConnection.close()def GetSWR(band): ser.write(bytes((str(Band[band][0]) + '\r\n'), "ascii")) ser.readline() ser.write(bytes((str(Band[band][1]) + '\r\n'), "ascii")) ser.readline() ser.write(bytes((str(Band[band][2]) + '\r\n'), "ascii")) ser.readline() ser.write(bytes(('\n'), "ascii")) for i in range(int(Band[band][3])): x = ser.readline().decode('ascii').split(',') freq = round(float(x[0]),3) print('{freq},{swr}'.format(freq=freq, swr=swr_calculate(x[1], x[2]))) freqs.append(freq) vswrs.append(swr_calculate(x[1], x[2])) f.write('{freq},{swr}'.format(freq=freq, swr=swr_calculate(x[1], x[2])) + '\n') vswr = swr_calculate(x[1], x[2]) datetttt= str(datetime.now().strftime("%Y-%m-%d-%H-%M-%S")) insertVaribleIntoTable(freq,vswr,datetttt )''' if you need graphs - uncoment this function call below'''# graph(band)def graph(band): dpi = 120 plt.figure(dpi=dpi, figsize=(1324 / dpi, 600 / dpi)) plt.plot(freqs, vswrs) plt.title(band + " SWR vs Frequency " + str(datetime.now().strftime("%Y-%m-%d %H-%M-%S"))) plt.xlabel("Frequency, MHz") plt.ylabel("SWR") start_freq = (freqs[0]) end_freq = (freqs[len(freqs)-1]) plt.axis([start_freq, end_freq, 1.0, 9.0]) plt.grid(True) plt.savefig("band_" + band + "_" + str(datetime.now().strftime("%Y%m%d-%H%M%S")) + ".png") freqs.clear() vswrs.clear()if __name__ == '__main__': for key in ['80', '60', '40', '30', '20', '17', '15', '12', '10']: GetSWR(key)
#sqlite3 aa-30-zero.db
max@max rigexpert (master) $ sqlite3 aa-30-zero.db SQLite version 3.31.1 2020-01-27 19:55:54Enter ".help" for usage hints.sqlite> CREATE TABLE "swr_measurements" ( ...> "freq" VARCHAR(255), ...> "vswr" VARCHAR(255), ...> "date" VARCHAR(255) ...> ;sqlite>
max@max rigexpert (master) $ echo "SELECT * FROM "swr_measurements" WHERE freq > '7.1%' and freq < '7.25%' ORDER BY vswr LIMIT 10;" | sqlite33 -table aa-30-zero.db+-------+------+---------------------+| freq | vswr | date |+-------+------+---------------------+| 7.25 | 1.28 | 2021-06-28-01-26-39 || 7.25 | 1.3 | 2021-06-28-01-26-22 || 7.25 | 1.3 | 2021-06-28-01-30-04 || 7.25 | 1.32 | 2021-06-28-01-22-30 || 7.25 | 1.34 | 2021-06-28-01-26-59 || 7.25 | 1.34 | 2021-06-28-01-31-53 || 7.25 | 1.38 | 2021-06-28-02-14-26 || 7.25 | 1.4 | 2021-06-28-01-25-04 || 7.25 | 1.4 | 2021-06-28-02-10-03 || 7.217 | 1.41 | 2021-06-28-01-26-59 |+-------+------+---------------------+
max@max rigexpert (master) $ echo "SELECT * FROM "swr_measurements" ORDER BY vswr LIMIT 10;" | sqlite33 -table aa-30-zero.db+-------+------+---------------------+| freq | vswr | date |+-------+------+---------------------+| 7.4 | 1.09 | 2021-06-28-00-45-14 || 7.417 | 1.09 | 2021-06-28-01-26-09 || 7.417 | 1.09 | 2021-06-28-01-34-08 || 7.417 | 1.09 | 2021-06-28-01-34-37 || 7.4 | 1.09 | 2021-06-28-06-00-14 || 7.4 | 1.09 | 2021-06-28-07-15-14 || 7.4 | 1.09 | 2021-06-28-08-00-14 || 7.4 | 1.1 | 2021-06-28-00-29-12 || 7.4 | 1.1 | 2021-06-28-00-29-56 || 7.4 | 1.1 | 2021-06-28-00-30-25 |+-------+------+---------------------+
max@max rigexpert (master) $ echo "SELECT * FROM "swr_measurements" ORDER BY vswr DESC LIMIT 10;" | sqlite33 -table aa-30-zero.db+-------+------+---------------------+| freq | vswr | date |+-------+------+---------------------+| 5.107 | 8.55 | 2021-06-28-16-00-29 || 5.107 | 8.51 | 2021-06-28-16-45-08 || 5.107 | 8.43 | 2021-06-28-18-15-08 || 5.132 | 8.39 | 2021-06-28-16-00-30 || 5.107 | 8.38 | 2021-06-28-00-45-08 || 5.107 | 8.35 | 2021-06-28-17-00-08 || 5.107 | 8.33 | 2021-06-28-00-29-50 || 5.107 | 8.33 | 2021-06-28-18-00-08 || 5.132 | 8.32 | 2021-06-28-00-45-08 || 5.132 | 8.32 | 2021-06-28-18-00-08 |+-------+------+---------------------+[/ code]Ну, как-то так.Дальше данные уже можно сопоставить с погодой, ну и что-то решать - провести изоляционные работы или просто оставить как есть :)