Автоматика, телемеханика ва телекоммуникация технологиялари


Программный код фиксации уровня сигнала


Download 487.18 Kb.
bet4/4
Sana06.04.2020
Hajmi487.18 Kb.
1   2   3   4
Программный код фиксации уровня сигнала
import math
from datetime import datetime
import sys
sys.path.append(r"c:\Python27\Lib\sitepackages")
sys.path.append(r"c:\Python27\Lib")
import os, threading
import time
import paramiko
import serial
import re
host = '192.168.1.24'
user = 'ubnt'
secret = 'ubnt'
port = 22
i1=0
i=0
data4=0
client = paramiko.SSHClient()
client.set_missing_host_key_policy(paramiko.
AutoAddPolicy())
client.connect(hostname=host, username=user,
password=secret, port=port)
now = datetime.strftime(datetime.now(),
"%Y.%m.%d %H.%M.%S")
f1 = open('C:\Dinitex\withoutGPS\log\\' + now
+ '.txt', 'a')
f1.write(datetime.strftime(datetime.now(),
"%Y.%m.%d %H.%M.%S")+'\n'+ 'time'+'\t'+
'signal '+'\t'+'\n'+'\n')
f = open('C:\Dinitex\withoutGPS\com.txt', 'r')
com = int (f.read())

f.close()
print ('ok ')
#Function to Initialize the Serial Port
print (now)
while 1:
stdin, stdout, stderr =
client.exec_command('wstalist')
data = stdout.read() + stderr.read()
data1=data.find('signal')
data2=data.find('ccq')
data3=data[data1+9:data2-5]
#print ('OK')
#print (data3)
#time.sleep(1)
if (data3
data4=data3
i=i+1;
if (i>30):
print(data4)
i1=i1+1
i=0
f1.write(datetime.strftime(datetime.now(),
"%H:%M:%S")+'\t'+str(data4).replace('.',',')+'\t
'+'\n')
data4=data3
f1.close
conn.close()
client.close()



  1. УУА билан ер бошқарув пультини бир - бири билан боғлаб берувчи модули учун дастур яратиш.


На языке программирования Python версии 2.7 был написан скрип
предназначенный для передачи информационной строки с БПЛА на НС.
Информационная строка формируется следующим образом: «широта БПЛА»”
“«долгота БПЛА»” “«H.Dop». Единообразие передаваемых данных позволяет
упростить программное наземные программные модули.

Параметр H. DOP (англ. Horizontal Dilution of Precision), GDOP, Снижение
точности или Геометрическое снижение точности (англ. Dilution of precision, DOP,
англ. Geometric Dilution of Precision, GDOP) — термин, использующийся в области
систем глобального позиционирования для параметрического описания геометрического взаиморасположения спутников относительно антенны приёмника. Когда спутники в области видимости находятся слишком близко друг к другу, говорят о «слабой» геометрии расположения (высоком значении DOP), и,
наоборот, при достаточной удалённости геометрию считают «сильной» (низкое
значение DOP). Термин может применяться не только в спутниковом позиционировании, но и в других системах локации, включающих другие,
географически разнесённые станции. Таким образом данный параметр помогает
оператору определить погрешность наведения автоматической системы и
принимать решение по переходу в ручное наведение.
Сформированные данные пересылаются на НС с помощью UDP (англ. User
Datagram Protocol) протоколов. UDP протокол позволяет передавать данные без
предварительного и последующего подтверждения. Такой режим передачи
быстро передает данные после восстановления канала связи. Кратковременные
обрывы связи могут происходить на больших расстояниях за счет не корректного
наведения наземной параболической антенны. В результате требуется не большая
ручная корректировка с помощью органов управления на блоке контроля.
Автоматическое наведение ОПУ происходит с помощью дополнительно
разработанного ПО. По формулам, приведенным в (Глава 2) и полученным
данным о местонахождении БПЛА (широты и долготы) производится расчет
азимутального угла, угла элевации и расстояния от НС. Формируется выходная
строка типа: Q «азимутальный угол»” “«угол элевации». Так как ОПУ в
автоматическом режиме позволяет устанавливать углы с точностью до десятой
градуса программное обеспечение выводит данные с той же точность. При
получении команды на установку нового положения ОПУ выводит в COM порт
сообщение: OK” “«азимутальный угол»” “«угол элевации». Данное сообщение
позволяет проконтролировать правильность переданных данных. Согласно
установленным и откалиброванным данным ОПУ перемешается на заданный
угол. Для управления ОПУ необходимо предварительно инициализировать Com
порт, к которому подключена ОПУ. Для установки этого значения используется
командный файл, располагающийся в папке с программой. Как правило после
установки нового оборудования COM преобразователя устройству назначается
определенный номер, который сохраняется в последующем. Оператору не
придется каждый раз менять этот параметр, так как он будет постоянный после
установки всего комплекса. Дополнительно используются еще два командных
файла: широты и долготы места установки антенны. На стадии НИОКР
предполагалось, что комплекс будет работать в стационарном режиме, поэтому
данные широты и долготы оператор вводит вручную, во время установки
оборудования. Программный скрипт обладает возможностью вести запись
полученных, обработанных и прочих данных. Запись осуществляется в папку
«log», расположенную в директории программы.
Для проведения полевых испытаний написано дополнительное
программное обеспечение, позволяющее фиксировать уровень сигнала на ППМ.
Программный код приведен в приложении Д. Программный скрипт использует
сетевой протокол прикладного уровня SSH, что позволяет получать данные с
большей скоростью, в отличие от веб интерфейса. ПО ведет запись полученных
данных для последующей обработки с помощью стороннего программного
обеспечения. Данное ПО позволяет оценить величину изменения сигнала в
результате качания борта, при этом создается автоматический протокол
испытаний.
Программный код управления
import serial
import math
import socket
import re
#Глобальные переменные
ser = 0
el = 360
az122=0
sost=0
#picount - число picount,
#rad - радиус сферы («емли)
radius = 6372795
#Функция инициализации ком порта
def init_serial():
COMNUM = input("Vvedite nomer com
porta ")
print (COMNUM)
global ser
ser1 = serial.Serial()
ser1.baudrate = 115200
ser1.port = COMNUM - 1 #Номер ком
порта
#Время ожидания ком порта в секундах
Ser1.timeout = 1
Se1r.open() #Открытие ком порта
#Оповещает о открытиии ком порта
if ser1.isOpen():
print 'Open: ' + ser1.portstr
#Ввод требуемых переменных
elinit = input("Vvedite elevation ")
print (elinit)
sever = input("Vvedite sever ")

print (sever)
llat11 = input("Vvedite latitude home ")
#Домашняя широта
print (llat11)
llong11 = input("Vvedite longitude home
")#Домашняя долгота
print (llong11)
#Инициализация ком порта
init_serial()
#Передача данных по сети, настройка
сервера
sock1 = socket.socket()
sock1.bind(('192.168.1.110', 9191))
sock1.listen(1)
conn, addr = sock1.accept()
print ' success',
while 1:
#Получение данных от клиента в сети
X = conn.recv(1024)
X1 = conn.recv(1024)
t = re.findall(r'\d+',X1)
llat22 = float(t[0]+"."+t[1])
llong22 = float(t[2]+"."+t[3])
alt = float (t[4]+"."+t[5])
#Отображение полученных данных
print ('lat' + str(llat22))
print ('long' + str(llong22))
print ('alt' + str(alt))
llong22 = float (llong22)
llat22 = float (llat22)
# измерения получены в радианах
lat11 = llat11*math.picount/180.

lat22 = llat22*math.picount/180.
long11 = llong11*math.picount/180.
long22 = llong22*math.picount/180.
#косинусы и синусы широт и разницы
долгот
cl1 = math.cos(lat11)
cl2 = math.cos(lat22)
sl1 = math.sin(lat11)
sl2 = math.sin(lat22)
delta = long22 - long11
cсdelta = math.cos(delta)
ssdelta = math.sin(delta)
#вычислени длины круга
y =
math.sqrt(math.pow(cl2*ssdelta,2)+math.pow(cl1*sl2-
sl1*cl2*cсdelta,2))
x = sl1*sl2+cl1*cl2*cсdelta
ad = math.atan2(y,x)
dist = ad*radius
#вычисление угла места
X1 = (cl1*sl2) - (sl1*cl2*cсdelta)
y1 = ssdelta*cl2
z1 = math.degrees(math.atan(-y/x))
if (x < 0):
z = z+180.
z2 = (z+180.) % 360. - 180.
z2 = - math.radiusians(z2)
angleradius2 = z2 -
((2*math.picount)*math.floor((z2/(2*math.picount))) )
angledeg =
(angleradius2*180.)/math.picount
#вычесление угла элевации
g =(math.atan(alt/dist))*180/math.picount
g=str(round(g,1))
print ('elevsciya' + g)
if (elinit < 0):
el = g
else:
el=elinit

elsh=str(el)
az1=str( round (angledeg,1))
'[degrees]'
if (sost == 1):
ser.write('Y' + '\r\n')
s= bytes = ser.readline() #Чтение
текущего положение
print 'sent: '+ s + bytes
sent = re.findall(r'\d+',s)
s1=[]
#возможность корректировки угла с
контроллера АПУ
if (sent != s1):
az11=float (sent[0] + "." + sent[1])
print (az11)
az12=float(az14) - az11
az1=float(az1)-az12
if (az1 > 359.9):
az1=az1-360
if (az1 < 0):
az1=az1+360
az14=az1
az122=az122+az12
sent=0
az1=float(az1)-float(sever)
if (az1 < 0):
az1 = az1-360
az1sh=str(az1)
degr = "Q"+az1sh+" "+elsh
print (degr)
ser1.write(degr + '\r\n')
print ('Otklonenie '+ str(az122)+'\n')
az14=az1
sost=1
conn.close()
#Для выхода нажмите CTRL+C
Download 487.18 Kb.

Do'stlaringiz bilan baham:
1   2   3   4




Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©fayllar.org 2020
ma'muriyatiga murojaat qiling