diff --git a/serialdraw/serialdraw.py b/serialdraw/serialdraw.py index aef0e21a568da58ac6d94dc6b950b6aab5f1b43e..c2ac7e5e0ddd9df68bfaaf0a54598af07e40b22f 100644 --- a/serialdraw/serialdraw.py +++ b/serialdraw/serialdraw.py @@ -17,6 +17,8 @@ import serial,signal,multiprocessing,os # forward = b'f' reverse = b'r' +ports = [] +workers = [] # # shared memory variables # @@ -24,16 +26,58 @@ count0 = multiprocessing.Value('i',0,lock=False) # # event routines # +# quit +# def Quit(): root.destroy() - pAlarm.terminate() + for w in workers: + w.terminate() sys.exit() # +# open ports and start workers +# def OpenPorts(): print('open '+Port0Var.get()+' at '+BaudRateVar.get()) - port = serial.Serial(Port0.get(),baudrate=int(BaudRate.get()),timeout=0) + Port0 = serial.Serial(Port0Var.get(),baudrate=int(BaudRateVar.get()),timeout=0) + ports.append(Port0) + # + AlarmProcess = multiprocessing.Process(target=AlarmWorker,args=(0,count0)) + AlarmProcess.start() + workers.append(AlarmProcess) + # OpenButton.config(background='green') # +# alarm worker +# +def AlarmWorker(id,count): + signal.signal(signal.SIGALRM,Alarm) + signal.setitimer(signal.ITIMER_REAL,float(StepTimeVar.get()),float(StepTimeVar.get())) + while (1): + 0 +# +def Alarm(signum,stack): + if (count0.value > 0): + count0.value -= 1 + print(count0.value) +# +# motor 0 worker +# +def Worker0(id,count): + 0 +# +# start workers +# +''' +p0 = multiprocessing.Process(target=Worker0,args=(0,count0)) +p0.start() +p1 = multiprocessing.Process(target=worker1,args=(1,count)) +p1.start() +p2 = multiprocessing.Process(target=worker2,args=(2,count)) +p2.start() +p3 = multiprocessing.Process(target=worker3,args=(3,count)) +p3.start() +''' +# def Open1(): print('open 1') # @@ -76,22 +120,22 @@ Button(root,text='quit',command=Quit,bg='white').grid(column=1,row=row,padx=pad, row += 1 Label(root,text='Steps/mm:',bg='white').grid(column=0,row=row,padx=pad) StepsPerMMVar = StringVar(root,'10') -Entry(root,textvariable=StepsPerMM,width=15).grid(column=1,row=row,padx=pad,pady=pad) +Entry(root,textvariable=StepsPerMMVar,width=15).grid(column=1,row=row,padx=pad,pady=pad) # row += 1 Label(root,text='Jog steps:',bg='white').grid(column=0,row=row,padx=pad,pady=pad) JogStepsVar = StringVar(root,'100') -Entry(root,textvariable=JogSteps,width=15).grid(column=1,row=row,padx=pad,pady=pad) +Entry(root,textvariable=JogStepsVar,width=15).grid(column=1,row=row,padx=pad,pady=pad) # row += 1 Label(root,text='Step time (s): ',bg='white').grid(column=0,row=row,padx=pad,pady=pad) StepTimeVar = StringVar(root,'0.001') -Entry(root,textvariable=StepTime,width=15).grid(column=1,row=row,padx=pad,pady=pad) +Entry(root,textvariable=StepTimeVar,width=15).grid(column=1,row=row,padx=pad,pady=pad) # row += 1 Label(root,text='Baud Rate: ',bg='white').grid(column=0,row=row,padx=pad,pady=pad) BaudRateVar = StringVar(root,'0') -Entry(root,textvariable=BaudRate,width=15).grid(column=1,row=row,padx=pad,pady=pad) +Entry(root,textvariable=BaudRateVar,width=15).grid(column=1,row=row,padx=pad,pady=pad) # row += 1 OpenButton = Button(root,text='Open Ports',command=OpenPorts,bg='white') @@ -105,48 +149,17 @@ Label(root,text='Jog',bg='white').grid(column=2,row=row,columnspan=2,padx=pad,pa row += 1 Label(root,text='0',bg='white').grid(column=0,row=row,padx=pad,pady=pad) Port0Var = StringVar(root,'/dev/ttyACM0') -Entry(root,textvariable=Port0,width=15).grid(column=1,row=row,padx=pad,pady=pad) +Entry(root,textvariable=Port0Var,width=15).grid(column=1,row=row,padx=pad,pady=pad) Button(root,text='CW',command=Jog0CW,bg='white').grid(column=2,row=row,padx=pad,pady=pad) Button(root,text='CCW',command=Jog0CCW,bg='white').grid(column=3,row=row,padx=pad,pady=pad) # row += 1 Label(root,text='1',bg='white').grid(column=0,row=row,padx=pad,pady=pad) Port1Var = StringVar(root,'/dev/ttyACM1') -Entry(root,textvariable=Port1,width=15).grid(column=1,row=row,padx=pad,pady=pad) +Entry(root,textvariable=Port1Var,width=15).grid(column=1,row=row,padx=pad,pady=pad) Button(root,text='CW',command=Jog1CW,bg='white').grid(column=2,row=row,padx=pad,pady=pad) Button(root,text='CCW',command=Jog1CCW,bg='white').grid(column=3,row=row,padx=pad,pady=pad) # -# worker event handlers -# -def AlarmWorker(id,count): - signal.signal(signal.SIGALRM,Alarm) - signal.setitimer(signal.ITIMER_REAL,float(StepTime.get()),float(StepTime.get())) - while (1): - 0 -# -def Alarm(signum,stack): - if (count0.value > 0): - count0.value -= 1 - print(count0.value) -# -def Worker0(id,count): - 0 -# -# start workers -# -pAlarm = multiprocessing.Process(target=AlarmWorker,args=(0,count0)) -pAlarm.start() -p0 = multiprocessing.Process(target=Worker0,args=(0,count0)) -p0.start() -''' -p1 = multiprocessing.Process(target=worker1,args=(1,count)) -p1.start() -p2 = multiprocessing.Process(target=worker2,args=(2,count)) -p2.start() -p3 = multiprocessing.Process(target=worker3,args=(3,count)) -p3.start() -''' -# # start mainloop and wait for alarms # root.mainloop() diff --git a/serialstep/serialstep.1.py b/serialstep/serialstep.1.py index eb4de2dfd34ebe2bb0b6b741a17d1bc1f46eed5a..ecd157df773ccfdb5f8327f2edb322cc9be160fe 100644 --- a/serialstep/serialstep.1.py +++ b/serialstep/serialstep.1.py @@ -20,10 +20,10 @@ print('open '+device+' at '+str(baud)+' delay '+str(delay)) port = serial.Serial(device,baudrate=baud,timeout=0) count = 0; maxcount = 5000; -forward = b'r' -reverse = b'r' forward = b'f' reverse = b'f' +forward = b'r' +reverse = b'r' # # alarm handler #