14.09.2015, 14:29 | #1 (permalink) |
Новичок
Регистрация: 14.09.2015
Сообщений: 4
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
|
Помогите найти ошибку в коде Python
from struct import * import threading import time import math f1=open ('1.csv','w') f2=open ('2.csv','w') f3=open ('3.csv','w') f4=open ('4.csv','w') global w1 global w2 global E3 global w3 w1 = 0 w2 = 0 w3 = 0 E3 = 0 E2 = 0 i = 1 class Buffer(): buffer = [0,] update = True def __init__(self, buffer_size, ): self.buffer = self.buffer*buffer_size def put(self, data): self.buffer[0:len(self.buffer)-2] = self.buffer[1:len(self.buffer)-1] self.buffer[len(self.buffer)-1] = data self.update = True def pop(self): self.update = False return self.buffer[len(self.buffer)-1] class receive_data(threading.Thread): UDP_rsv = socket(AF_INET, SOCK_DGRAM) addr = ("127.0.0.1", 25001) buf = 1024 data = "" 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) ob1.put(a[0]) ob2.put(a[1]) f4.write('%s\n' %(a[1])) def Stop(self): self.CanRun = False f4.close() class Controller(): def SetCoefficient(self): self.Kp = 0 self.Kd = 0 self.Ki = 0 def SetEpsilon(E1,E2,E3): g = -1 x1 = ob1.pop() x2 = ob2.pop() E3= E2 E1 = g - x1 E2 = g - x2 f1.write('%s\n' %(E1)) f2.write('%s\n' %(E2)) def SetIntegrator(w1,w2,w3): w1 = w1+0.01*E1 w2 = w2+0.01*E2 w3 = (E2-E3)/0.01 class PI(Controller): def SetK(Kp,Kd): Kp = 0.1 Kd = 0.35 def _init_(self): threading.Thread.__init__(self) def run(self): while self.CanRun: PI = Kp*E1[i]+Kd*w1[i] def Stop(self): self.CanRun = True class PID(Controller): def SetK(Kp,Kd,Ki): Kp = 0.1 Kd = 0.137 Ki = 0.0001 def _init_(self): threading.Thread.__init__(self) def run(self): while self.CanRun: PID = Kp*E2[i]+Kd*w2[i]+Ki*w3 def Stop(self): self.CanRun = True class send_data(threading.Thread): UDP_send = socket(AF_INET,SOCK_DGRAM) addr = ("localhost", 25000) data = "" i = 0 times = [0] 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 Buffer.update: g=-1 self.times[0] = 0.001 t = time.clock() self.times.append(t) if sign == '1': g = math.sin(1.5*t) if sign == '2': g=1.0 f3.write('%s\n' %(g)) u1 = PI u2 = PID print (u1) print (u2) self.data = pack('dd', u1, u2) self.UDP_send.sendto(self.data, self.addr) self.i=self.i+1 f1.close() f2.close() f3.close() seconds = [0.0001] host = "localhost" addr = (host,25000) addr2 = (host, 25001) print('Choose signal: Sinusoida - 1, Step - 2') sign = input() ob1 = Buffer(1024) ob2 = Buffer(1024) ob3 = Buffer(1024) thread1 = send_data(addr, 1024, sign) thread2 = receive_data(addr2) thread1.start() thread2.start() выдает: Choose signal: Sinusoida - 1, Step - 2 1 <class '__main__.PI'> >>> <class '__main__.PID'> Exception in thread Thread-1: Traceback (most recent call last): File "C:\Python34\lib\threading.py", line 920, in _bootstrap_inner self.run() File "C:\Python34\an.py", line 146, in run self.data = pack('dd', u1, u2) struct.error: required argument is not a float |
14.09.2015, 14:29 | |
Helpmaster
Member
Регистрация: 08.03.2016
Сообщений: 0
|
К вашему вниманию темы, которые уже встречались на нашем форуме и схожи с вашей Помогите найти ошибку Помогите найти ошибку |
Ads | |
Member
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
|
|
|