Помогите переделать код на С++. Надо, чтобы программа отправляла ступенчатый или синусоидальный сигнал на матлаб по UDP и получала с него данные.
Программа написана на языке программирования Python:
#Подключение необходимых библиотек
from socket import *
from struct import *
import threading
import time
import math
#Открытие файлов для записи
f1=open ('X.csv','w')
f2=open ('E.csv','w')
# Класс буфера
class Buffer():
buffer =
update = True
def __init__(self, buffer_size):
self.buffer = self.buffer*buffer_size
# Внедрение значения
def put(self, data):
self.buffer = self.buffer
self.buffer = data
self.update = True
# Извлечение значения
def pop(self):
self.update = False
return self.buffer
# Класс получения данных
class receive_data(threading.Thread):
# Создание сокета
UDP_rsv = socket(AF_INET, SOCK_DGRAM)
# Задание IP адреса и порта
addr = (“127.0.0.1”, 25001)
buf = 1024
data = “”
# Привязка IP адреса и порта к сокету
UDP_rsv.bind(addr)
CanRun = True
def __init__(self, addr):
threading.Thread.__init__(self)
self.addr = addr
def run(self):
while self.CanRun:
# Получения данных с сокета
self.data,self.addr = self.UDP_rsv.recvfrom(1024)
# Распаковка данных
a = unpack('dd', self.data)
# Запись в файл данных
f1.write('%s, %s\n' %(a, a))
# Запись данных в буфер
object1.put(a)
object2.put(a)
f1.close()
def Stop(self):
self.CanRun = False
# Класс отправки данных
class send_data(threading.Thread):
UDP_send = socket(AF_INET,SOCK_DGRAM)
addr = (“localhost”, 25000)
data = “”
i=0
I1 =
I2 =
E1 =
E2 =
CanRun = True
def __init__(self, addr, buf, sign):
threading.Thread.__init__(self)
self.addr = addr
self.buf = buf
self.sign = sign
def Stop(self):
self.CanRun = False
def run(self):
while self.CanRun:
if Buffer1.update:
g = -1
# Извлечение данных из буфера
x1 = object1.pop()
x2 = object2.pop()
# Задание времени
t = time.clock()
# Задание синусоиды
if sign == ‘1’:
g = math.sin(t)
# Задание ступеньки
if sign == ‘2’:
if t < 1.0:
g=0
if t > 1.0:
g=2.0
# Неправильный ввод
if g == -1:
print ('Error')
break
# Вычисление ошибок
Eps1 = g - x1
Eps2 = g - x2
# Вывод входящего значения в консоли
print (g)
self.E1.append(Eps1)
self.E2.append(Eps2)
f2.write('%s, %s:: %s\n' %(Eps1, Eps2, g))
# Выполнение интегрирования
Int1 = self.I1 + self.E1*0.0001
Int2 = self.I2 + self.E2*0.0001
self.I1.append(Int1)
self.I2.append(Int2)
# Вычисление корректирующих сигналов (регуляторы)
u1 = 30*self.E1 + 0.001*self.I1
u2 = 3*self.E2 + 0.1*self.I2 + 1.7*(self.E2 - self.E2)/0.1
# Упаковка данных для отправки
self.data = pack('dd', u1, u2)
# Отправка данных
self.UDP_send.sendto(self.data, self.addr)
self.i=self.i+1
f1.close()
host = “localhost”
addr = (host,25000)
addr2 = (host, 25001)
# Выбор подаваемого сигнала
print('Choose signal: Sinusoida - 1, Step - 2')
sign = input()
object1 = Buffer (1024)
object2 = Buffer (1024)
# Создание потоков
thread1 = send_data(addr, 1024, sign)
thread2 = receive_data(addr2)
thread1.start()
thread2.start()