Telemetria (si fa per dire) per KFlop

Sezione dedicata ai controlli seriali, usb e Ethernet
Per gli approfondimenti si rimanda ai subforum specifici.
Subforum:
CncDrive
PlanetCNC
RosettaCNC
Twintec
Avatar utente
walgri
God
God
Messaggi: 4735
Iscritto il: giovedì 13 gennaio 2011, 18:37
Località: Cagliari

Re: Telemetria (si fa per dire) per KFlop

Messaggio da walgri » giovedì 23 ottobre 2014, 18:02

(Ho leggermente aggiornato il post sopra)

Anche a me lascia dubbioso, sul momento mi è sembrato sensato per evitare una sparata di fprintf sulla usb. Anche se a ragionarci, comunque sono mitigate dal multitask preemptive. Magari le levo :mrgreen:
...stop chasing shadows, just enjoy the ride.
Aìna pantografoTelemetria per KFlopBlenderCAM STL + DXF

Avatar utente
Pedro
God
God
Messaggi: 7021
Iscritto il: domenica 6 aprile 2008, 18:44
Località: Roma

Re: Telemetria (si fa per dire) per KFlop

Messaggio da Pedro » giovedì 23 ottobre 2014, 18:10

si, in effetti quello che interessa è lo scostamento. Il wait...per ora tralascio

Diciamo questo: per ottimizzare i dati inviati intanto potresti monitorare se gli assi si muovono o stanno fermi, se da errore anche ad assi fermi stiamo messi male, e i dati sarebbero sicuramente meno, tanto "spari" fuori anche i tempi poi il sistema di analisi potrebbe rimettere le cose a posto comunque. Per la trasmissione USB, non preoccuparti perchè quello che si dicono mach3 e kflop viaggia abbastanza veloce e non si affolla, almeno sulla USB. E se i dati sono comunque pochi (meglio dire il tempo di campionamento è breve) puoi implementare un contatore con un incremento nel nome del file, tipo dati0001.txt e così via, poi al solito prima di darli in pasto al software di "lettura" li accodi

a me interesserebbe, facile a farsi, anche il monitor della corrente ai motori (posso monitorare il torque dal driver), ho già previsto le uscite analogiche da collegare, all'uopo, sulla kanalog

diciamo che, poi gli esperti strutturali diranno la loro ovvio, secondo me sarebbe interessante monitorare l'errore, in che condizioni avviene (velocità e accelerazione con un po' di calcoli si ricava dai dati forniti, si sa la posizione e il tempo quindi le due derivate prima e seconda si ricavano) poi dove avviene l'errore rispetto alla macchina, se ha difetti di guide o di allineamenti, e che sforzo sta facendo il motore quando c'è l'errore, quindi se sottodimensionato o parametrizzato male o i dettagli della lavorazione sono errati. In futuro si potrebbe ovviamente aggiungere cosa sta facendo il mandrino, la coppia che sta fornendo. Diciamo che ce ne sta di roba sia in processing che in post processing insomma
"Ho controllato molto approfonditamente," disse il computer, "e questa è sicuramente la risposta. Ad essere sinceri, penso che il problema sia che voi non abbiate mai saputo veramente qual è la domanda."

Avatar utente
walgri
God
God
Messaggi: 4735
Iscritto il: giovedì 13 gennaio 2011, 18:37
Località: Cagliari

Re: Telemetria (si fa per dire) per KFlop

Messaggio da walgri » mercoledì 29 ottobre 2014, 17:11

A spizzichi e smozzichi questo lavoro procede:
Screenshot.png
Ho deciso di scrivere il programma che genera i diagrammi direttamente in linguaggio Lua, visto che prima o poi dovrò impararlo, utilizzando l'interfaccia grafica Iup, molto completa e carina (con widget per diagrammi 2d, 3d, e perfino widget OpenGL). In realtà Mach4 è basato sulla interfaccia grafica wxLua, ma attualmente non ho trovato controlli per grafici in wxLua, e ho comunque ho intensione di utilizzare Iup per progetti futuri.

Chi volesse avventurarsi oltre in questo post, può scaricare Lua For Windows, oppure LuaDist, per avere tutto l'armamentario pronto. Lua For Windows è un po' vecchiotto rispetto a LuaDist, ma ha un decente programma di installazione, l'editor Scite già inscatolato, abbondanza di documentazione. LuaDist è più aggiornato ma non contiene installer e documentazione.

Quello che segue è proprio il codice del programma, che è sperimentale, sia in senso stretto (diciamo versione alpha), che in senso lato (è il primo programma che scrivo in questo linguaggio con questa libreria gui).

Codice: Seleziona tutto

-- KFlop telemetry (sort of)
-- (C) 2014 Walgri of cncitalia.net forum

require( "iuplua" )
require( "iupluacontrols" )
require( "iuplua_pplot"  )

-- Helper functions -------------------------

-- Main function, parses the csv file and populates the plot
function parsePopulate(filename)
	print("parse & populate..." .. filename)
	-- Remove old datasets first
	plot.CLEAR = "YES"
	-- Parse file
	local t = {}
	local ex = {}
	local ey1 = {}
	local ey2 = {}
	local ez = {}
	local index = 1
	for line in io.lines(filename) do
		local fields = parseCSVLine(line, ",")
		t[index] = tonumber(fields[1])
		ex[index] = tonumber(fields[2])
		ey1[index] = tonumber(fields[3])
		ey2[index] = tonumber(fields[4])
		ez[index] = tonumber(fields[5])
		index = index + 1
	end

	-- Populate plot ex
	iup.PPlotBegin(plot,0)
	for i, val in ipairs(t) do
		iup.PPlotAdd(plot,t[i],ex[i])
	end
	iup.PPlotEnd(plot)
	plot.DS_LEGEND="Err X"
	--]]

	-- Populate plot ey1
	iup.PPlotBegin(plot,0)
	for i, val in ipairs(t) do
		iup.PPlotAdd(plot,t[i],ey1[i])
	end
	iup.PPlotEnd(plot)
	plot.DS_LEGEND="Err Y1"

	-- Populate plot ey2
	iup.PPlotBegin(plot,0)
	for i, val in ipairs(t) do
		iup.PPlotAdd(plot,t[i],ey2[i])
	end
	iup.PPlotEnd(plot)
	plot.DS_LEGEND="Err Y2"

	-- Populate plot ez
	iup.PPlotBegin(plot,0)
	for i, val in ipairs(t) do
		iup.PPlotAdd(plot,t[i],ez[i])
	end
	iup.PPlotEnd(plot)
	plot.DS_LEGEND="Err Z"

	plot.REDRAW = "YES" -- Force Redraw
end

-- Parse a line in csv format, keeps the whitespaces, see http://lua-users.org/wiki/LuaCsv
function parseCSVLine (line,sep)
	local res = {}
	local pos = 1
	sep = sep or ','
	while true do
		local c = string.sub(line,pos,pos)
		if (c == "") then break end
		if (c == '"') then
			-- quoted value (ignore separator within)
			local txt = ""
			repeat
				local startp,endp = string.find(line,'^%b""',pos)
				txt = txt..string.sub(line,startp+1,endp-1)
				pos = endp + 1
				c = string.sub(line,pos,pos)
				if (c == '"') then txt = txt..'"' end
				-- check first char AFTER quoted string, if it is another
				-- quoted string without separator, then append it
				-- this is the way to "escape" the quote char in a quote. example:
				--   value1,"blub""blip""boing",value3  will result in blub"blip"boing  for the middle
			until (c ~= '"')
			table.insert(res,txt)
			assert(c == sep or c == "")
			pos = pos + 1
		else
			-- no quotes used, just look for the first separator
			local startp,endp = string.find(line,sep,pos)
			if (startp) then
				table.insert(res,string.sub(line,pos,startp-1))
				pos = endp + 1
			else
				-- no separator found -> use rest of string and terminate
				table.insert(res,string.sub(line,pos))
				break
			end
		end
	end
	return res
end

-- Just one of many possible implementations, see http://lua-users.org/wiki/StringTrim
function trim(s)
  return (s:gsub("^%s*(.-)%s*$", "%1"))
end

-- GUI definition  ----------------------

fileName = nil -- filename of CSV to read from
lastDirectory = nil

plot = iup.pplot{TITLE = "Axes data",
                 MARGINBOTTOM="50",
                 MARGINLEFT="50",
                 AXS_XLABEL="Time (s)",
                 --AXS_YLABEL="Errors",
                 AXS_XCROSSORIGIN="NO",
                 AXS_YCROSSORIGIN="NO",
				 GRID = "YES",
				 USE_IMAGERGB = "YES",
				 FONT = "Arial, 9",
				 LEGENDSHOW = "YES"
                 }

btnLoad = iup.button {title = "Load file...",expand="HORIZONTAL"}
btnReload  = iup.button {title = "Reload file",expand="HORIZONTAL", active = "NO"}
btnSaveBitmap  = iup.button {title = "Save bitmap...",expand="HORIZONTAL", active = "NO"}

-- Commandbar
cmdBar = iup.hbox{btnLoad, btnReload, btnSaveBitmap}
cmdBar.GAP = 1

frm = iup.vbox{plot, cmdBar}
frm.GAP = 2
dlg = iup.dialog{frm; title="KFlop telemetry (sort of)",size="HALFxHALF"}

-- Callbacks ------------------------
function btnLoad:action()
	print("Load file")

	local fd=iup.filedlg{dialogtype="OPEN", title="Load File",
                       nochangedir="NO", directory=lastDirectory,
                       filter="*.*", filterinfo="All Files", allownew="NO"}
	fd:popup(iup.CENTER, iup.CENTER)
	local status = fd.status
	local filename = fd.value
	lastDirectory = fd.directory
	fd:destroy()

	if (status == "0") then
		fileName = filename
		print ("Choosen " .. fileName)
		parsePopulate(fileName)
		btnReload.ACTIVE = "YES"
		--btnSaveBitmap.ACTIVE = "YES"
	end
end

function btnReload:action()
	print("Reload file")
	if (fileName ~= nil) then
		parsePopulate(fileName)
	end
end

-- Dialog Shop and Main Loop --------
dlg:show()
iup.MainLoop()
Quello che segue è invece il programma C da scaricare in un thread libero della KFlop, ugualmente sperimentale:

Codice: Seleziona tutto

#include "KMotionDef.h"

#define N 1000000        // Maximum flattened array (of doubles) size
#define CONTROL_BIT 2000 // Input bit that triggers data gather
#define FIELDSPERROW 5   // Number of fields per row
#define SAMPLEINTERVAL 5 // Gather data every SAMPLEINTERVAL time slices

main(){
	int i, j, k, l;
	double T0,*p=gather_buffer;

	printf("Data gathering thread started\n");

	//Setup an output bit to control data gather
	SetBitDirection(CONTROL_BIT,1);
	ClearBit(CONTROL_BIT);

	while(1){
		while(!ReadBit(CONTROL_BIT)); // wait for control bit to be high
		ClearBit(46);
		Delay_sec(0.2);
		SetBit(46);
		printf("Gathering started\n");

		T0 = Time_sec();

		// Capture Data
		for (i=0; i<N - 1; i++) {
			// Only store interesting data
			//if 	(	(ch0->Dest != 0.0) &&
			//		(ch1->Dest != 0.0) &&
			//		(ch2->Dest != 0.0) &&
			//		(ch3->Dest != 0.0)) {
				*p++ = Time_sec() - T0;
				*p++ = ch0->Dest;
				*p++ = ch1->Dest;
				*p++ = ch2->Dest;
				*p++ = ch3->Dest;
			//}
			if(!ReadBit(CONTROL_BIT)) {
				break;
			}
			for (k=0; k<SAMPLEINTERVAL; k++) WaitNextTimeSlice();
		}
		ClearBit(CONTROL_BIT);
		printf("Gathering stopped, transmitting %d rows of %d doubles\n", i, i*FIELDSPERROW);
		
		ClearBit(46);
		Delay_sec(0.2);
		SetBit(46);
		Delay_sec(0.2);
		ClearBit(46);
		Delay_sec(0.2);
		SetBit(46);
		
		p=gather_buffer; // "rewind" the pointer

		FILE *f=fopen("C:\\temp\\kflopdata.txt","wt");
		for (j=0; j < i; j++) {
			
			for (k=0; k<5; k++)	WaitNextTimeSlice();
			
			// round times to nearest servo tick
			p[0] = ((int)(p[0]/TIMEBASE + 0.5))*TIMEBASE;
			
			fprintf(f,"%12.5f,%12.5f,%12.5f,%12.5f,%12.5f\n",p[0],p[1],p[2],p[3],p[4]);
			/*
			for (l = 0; l < FIELDSPERROW; l++){
				fprintf(f,"%12.5f,",p[l]);
			}
			fprintf(f,"\n");
			//*/
			p += FIELDSPERROW;
		}
		
		
		printf("Transmission of %d doubles in %d rows ended, closing file\n", i*FIELDSPERROW, i);
		fclose(f);
		ClearBit(46);
		Delay_sec(0.5);
		SetBit(46);
	}
}
C'è più di qualcosa che non mi quadra, vedremo quando potrò tornare sulla cosa. Intanto il diagramma parte in ritardo, lo si vede dall'inizio del diagramma di X: dovrebbe essere identico a Y1 e Y2. Devo capire se c'è effettiva coordinazione tra gli M e i G, semmai provare un (BUF,...) nel codice anzichè un M (ma a quel punto si deve necessariamente utilizzare KMotionCNC).

Questo è il Gcode che sto utilizzando per le prove:

Codice: Seleziona tutto

G0 X0 Y0 Z0
F5000
M118
G1 X10
G1 Y10
G1 X0
G1 Y0    
M119
M2
Un'altra cosa è il motivo per il quale la seconda versione delle fprintf (commentata nel codice) "sporca" malamente il file txt, inserendo dei caratteri non validi dopo ogni campo.

Continua...
Non hai i permessi necessari per visualizzare i file e le foto allegati in questo messaggio. Per visualizzare tali file devi registrarti ed effettuare il Login
...stop chasing shadows, just enjoy the ride.
Aìna pantografoTelemetria per KFlopBlenderCAM STL + DXF

Avatar utente
walgri
God
God
Messaggi: 4735
Iscritto il: giovedì 13 gennaio 2011, 18:37
Località: Cagliari

Re: Telemetria (si fa per dire) per KFlop

Messaggio da walgri » mercoledì 29 ottobre 2014, 17:39

Con questa libreria è anche estremamente facile aggiungere diagrammi, magari per rappresentare grandezze con diverse unità di misura e scale (i diagrammi possono anche essere sincronizabili in quanto a fattore di zoom):
Screenshot2x.png
Le modifiche da fare al codice sono minime:

Codice: Seleziona tutto

-- KFlop telemetry (sort of)
-- (C) 2014 Walgri of cncitalia.net forum

require( "iuplua" )
require( "iupluacontrols" )
require( "iuplua_pplot"  )

-- Helper functions -------------------------

-- Main function, parses the csv file and populates the plot
function parsePopulate(filename)
	print("parse & populate..." .. filename)
	-- Remove old datasets first
	plot.CLEAR = "YES"
	-- Parse file
	local t = {}
	local ex = {}
	local ey1 = {}
	local ey2 = {}
	local ez = {}
	local index = 1
	for line in io.lines(filename) do
		local fields = parseCSVLine(line, ",")
		t[index] = tonumber(fields[1])
		ex[index] = tonumber(fields[2])
		ey1[index] = tonumber(fields[3])
		ey2[index] = tonumber(fields[4])
		ez[index] = tonumber(fields[5])
		index = index + 1
	end

	-- Populate plot ex
	currplot = plot2
	iup.PPlotBegin(currplot,0)
	for i, val in ipairs(t) do
		iup.PPlotAdd(currplot,t[i],ex[i])
	end
	iup.PPlotEnd(currplot)
	currplot.DS_LEGEND="Err X"
	--]]

	-- Populate plot ey1
        currplot = plot
	iup.PPlotBegin(currplot,0)
	for i, val in ipairs(t) do
		iup.PPlotAdd(currplot,t[i],ey1[i])
	end
	iup.PPlotEnd(currplot)
	currplot.DS_LEGEND="Err Y1"

	-- Populate plot ey2
        currplot = plot
	iup.PPlotBegin(currplot,0)
	for i, val in ipairs(t) do
		iup.PPlotAdd(currplot,t[i],ey2[i])
	end
	iup.PPlotEnd(currplot)
	currplot.DS_LEGEND="Err Y2"

	-- Populate plot ez
        currplot = plot2
	iup.PPlotBegin(currplot,0)
	for i, val in ipairs(t) do
		iup.PPlotAdd(currplot,t[i],ez[i])
	end
	iup.PPlotEnd(currplot)
	currplot.DS_LEGEND="Err Z"

	plot.REDRAW = "YES" -- Force Redraw
        plot2.REDRAW = "YES" -- Force Redraw
end

-- Parse a line in csv format, keeps the whitespaces, see http://lua-users.org/wiki/LuaCsv
function parseCSVLine (line,sep)
	local res = {}
	local pos = 1
	sep = sep or ','
	while true do
		local c = string.sub(line,pos,pos)
		if (c == "") then break end
		if (c == '"') then
			-- quoted value (ignore separator within)
			local txt = ""
			repeat
				local startp,endp = string.find(line,'^%b""',pos)
				txt = txt..string.sub(line,startp+1,endp-1)
				pos = endp + 1
				c = string.sub(line,pos,pos)
				if (c == '"') then txt = txt..'"' end
				-- check first char AFTER quoted string, if it is another
				-- quoted string without separator, then append it
				-- this is the way to "escape" the quote char in a quote. example:
				--   value1,"blub""blip""boing",value3  will result in blub"blip"boing  for the middle
			until (c ~= '"')
			table.insert(res,txt)
			assert(c == sep or c == "")
			pos = pos + 1
		else
			-- no quotes used, just look for the first separator
			local startp,endp = string.find(line,sep,pos)
			if (startp) then
				table.insert(res,string.sub(line,pos,startp-1))
				pos = endp + 1
			else
				-- no separator found -> use rest of string and terminate
				table.insert(res,string.sub(line,pos))
				break
			end
		end
	end
	return res
end

-- Just one of many possible implementations, see http://lua-users.org/wiki/StringTrim
function trim(s)
  return (s:gsub("^%s*(.-)%s*$", "%1"))
end

-- GUI definition  ----------------------

fileName = nil -- filename of CSV to read from
lastDirectory = nil

plot = iup.pplot{TITLE = "Axes data",
                 MARGINBOTTOM="50",
                 MARGINLEFT="50",
                 AXS_XLABEL="Time (s)",
                 --AXS_YLABEL="Errors",
                 AXS_XCROSSORIGIN="NO",
                 AXS_YCROSSORIGIN="NO",
				 GRID = "YES",
				 USE_IMAGERGB = "YES",
				 FONT = "Arial, 9",
				 LEGENDSHOW = "YES"
                 }
plot2 = iup.pplot{TITLE = "Axes data",
                 MARGINBOTTOM="50",
                 MARGINLEFT="50",
                 AXS_XLABEL="Time (s)",
                 --AXS_YLABEL="Errors",
                 AXS_XCROSSORIGIN="NO",
                 AXS_YCROSSORIGIN="NO",
				 GRID = "YES",
				 USE_IMAGERGB = "YES",
				 FONT = "Arial, 9",
				 LEGENDSHOW = "YES"
                 }

btnLoad = iup.button {title = "Load file...",expand="HORIZONTAL"}
btnReload  = iup.button {title = "Reload file",expand="HORIZONTAL", active = "NO"}
btnSaveBitmap  = iup.button {title = "Save bitmap...",expand="HORIZONTAL", active = "NO"}

-- Commandbar
cmdBar = iup.hbox{btnLoad, btnReload, btnSaveBitmap}
cmdBar.GAP = 1

frm = iup.vbox{plot, plot2, cmdBar}
frm.GAP = 2
dlg = iup.dialog{frm; title="KFlop telemetry (sort of)",size="HALFxHALF"}

-- Callbacks ------------------------
function btnLoad:action()
	print("Load file")

	local fd=iup.filedlg{dialogtype="OPEN", title="Load File",
                       nochangedir="NO", directory=lastDirectory,
                       filter="*.*", filterinfo="All Files", allownew="NO"}
	fd:popup(iup.CENTER, iup.CENTER)
	local status = fd.status
	local filename = fd.value
	lastDirectory = fd.directory
	fd:destroy()

	if (status == "0") then
		fileName = filename
		print ("Choosen " .. fileName)
		parsePopulate(fileName)
		btnReload.ACTIVE = "YES"
		--btnSaveBitmap.ACTIVE = "YES"
	end
end

function btnReload:action()
	print("Reload file")
	if (fileName ~= nil) then
		parsePopulate(fileName)
	end
end

-- Dialog Shop and Main Loop --------
dlg:show()
iup.MainLoop()
Non hai i permessi necessari per visualizzare i file e le foto allegati in questo messaggio. Per visualizzare tali file devi registrarti ed effettuare il Login
...stop chasing shadows, just enjoy the ride.
Aìna pantografoTelemetria per KFlopBlenderCAM STL + DXF

Avatar utente
Pedro
God
God
Messaggi: 7021
Iscritto il: domenica 6 aprile 2008, 18:44
Località: Roma

Re: Telemetria (si fa per dire) per KFlop

Messaggio da Pedro » mercoledì 29 ottobre 2014, 17:51

=D>

gran bel lavoro, devo guardarmelo con calma
"Ho controllato molto approfonditamente," disse il computer, "e questa è sicuramente la risposta. Ad essere sinceri, penso che il problema sia che voi non abbiate mai saputo veramente qual è la domanda."

Avatar utente
walgri
God
God
Messaggi: 4735
Iscritto il: giovedì 13 gennaio 2011, 18:37
Località: Cagliari

Re: Telemetria (si fa per dire) per KFlop

Messaggio da walgri » mercoledì 29 ottobre 2014, 23:37

Grazie Pedro !

Intanto ho trovato un baco: alla fine delle fprintf avevo dimenticato di riportare il puntatore p all'inizio del buffer, di fatto in questo modo stavo accumulando nel buffer i dati di run successivi.

Il problema del ritardo per ora l'ho risolto inserendo un G4 P0.2, ma si tratta evidentemente di un inaccettabile accrocchio nel GCode.
...stop chasing shadows, just enjoy the ride.
Aìna pantografoTelemetria per KFlopBlenderCAM STL + DXF

dmoglianesi
Senior
Senior
Messaggi: 1894
Iscritto il: lunedì 22 dicembre 2008, 1:08
Località: lima peru

Re: Telemetria (si fa per dire) per KFlop

Messaggio da dmoglianesi » giovedì 30 ottobre 2014, 1:16

mi sa e meglio che la kflop non mi arrivi, mi fate sentire male, per me parlate cino :(

Avatar utente
Pedro
God
God
Messaggi: 7021
Iscritto il: domenica 6 aprile 2008, 18:44
Località: Roma

Re: Telemetria (si fa per dire) per KFlop

Messaggio da Pedro » giovedì 30 ottobre 2014, 3:45

i buffer: capita in programmazione di dimenticare di ripulirli, sono subdolamente fatti per ricordare :)

Ritardo con G04: potresti provare a metterlo nella macro direttamente, setti il bit e poi code"G04P0.2" in mach3 quel che l'è, e via

Dalmazio: tutte queste cose non sono certo d'obbligo per usare la kflop, però sono cose che questa interfaccia permette, per chi vuole, di farle. Insomma, si può solo usarla come una qualsiasi altra interfaccia o salire di livello se si desidera. Non è una interfaccia complicata, è complicata quel che si è disposti a farla diventare tale, e walgri sta dimostrando benissimo di riuscirci :lol:
"Ho controllato molto approfonditamente," disse il computer, "e questa è sicuramente la risposta. Ad essere sinceri, penso che il problema sia che voi non abbiate mai saputo veramente qual è la domanda."

dmoglianesi
Senior
Senior
Messaggi: 1894
Iscritto il: lunedì 22 dicembre 2008, 1:08
Località: lima peru

Re: Telemetria (si fa per dire) per KFlop

Messaggio da dmoglianesi » giovedì 30 ottobre 2014, 4:12

ciao pedro mi ritiri su il morale, :mrgreen: ot: vedo che non sono il solo a non dormire di notte :( comunque vi invidio, ciao

Avatar utente
walgri
God
God
Messaggi: 4735
Iscritto il: giovedì 13 gennaio 2011, 18:37
Località: Cagliari

Re: Telemetria (si fa per dire) per KFlop

Messaggio da walgri » giovedì 30 ottobre 2014, 8:37

Ma va Dalmazio, il primo 3d della mia macchina è di circa un anno fa, la kflop era appena arrivata e di elettronica sapevo ancor meno del nulla che so adesso. Ancora in questo momento i segnali di step e dir passano dallo spezzone di cavo LAN che sradicai allora. Per una configurazione ultraminimale basta quello attaccato al jp5.

Questo topic, a parte l'aspetto ludico-didattico, può essere di qualche utilità solo se si chiude il loop sulla kflop e se si vuole monitorare lo stato interno durante una lavorazione, o si voglia tarare il pid in condizioni diverse da quelle previste dalla finestra dello step response. Oltre a questo è anche una scusa per fare qualcosa di diverso , ripassare il linguaggio C, iniziare a vedere Lua (in vista di mach4).

È roba per secchioni control-freak !

Come ho scritto altre volte, vedo la kflop come la mia speciale versione di Arduino, l'Arduino Tera :D
...stop chasing shadows, just enjoy the ride.
Aìna pantografoTelemetria per KFlopBlenderCAM STL + DXF

dmoglianesi
Senior
Senior
Messaggi: 1894
Iscritto il: lunedì 22 dicembre 2008, 1:08
Località: lima peru

Re: Telemetria (si fa per dire) per KFlop

Messaggio da dmoglianesi » giovedì 30 ottobre 2014, 10:07

e che io sono un tecnico alla vecchia maniera, saldatore giravite osciloscopio, non ho difficolta a installarti e cablarti un radar o ripararti un pc o mettere le mani in un cestello con 5000 fili wrire wrap ma davanti a una schermata ..... ho un programmatore di pic microchip fantastico ma oltre ad accenderlo non sono andato, :mrgreen: poi non pàrliamo di cad.... ho fatto dei telai per sostituire i vecchi monitor con degli lcd e per farli ho scritto il codice g per fresa a suon di calibro :lol: mi trovo bene con la colibri per via della possibilita di testare il codice e vedere la lavorazione prima di effettuarla purtroppo non ho il tempo di mettermi a studiare, fra lavoro famiglia ecc giusto la notte perche non dormo :( ciao

Avatar utente
Zebrauno
God
God
Messaggi: 9670
Iscritto il: venerdì 18 settembre 2009, 18:24
Località: Savigliano/Torino
Contatta:

Re: Telemetria (si fa per dire) per KFlop

Messaggio da Zebrauno » giovedì 30 ottobre 2014, 13:22

Tutto questo e' violentemente utile Walgri e Pedro.
Mentre mi strofino le mani, con i capelli che mi crescono in stile licantropo e gli occhi che si iniettano di sangue, annoto tutto e vedo avvicinarsi sempre piu' la mia chimera: controllare in tempo reale il feed globale durante una lavorazione per contenere l'errore causato da un'eccessiva richiesta di corrente agli assi.

In sostanza fare quello che l'Optipath di Vericut esegue prima di rimaneggiare un gcode ottimizzato ma direttamente a bordo macchina.

A presto, valorosi cacciatori di gatte da pelare :D

Avatar utente
walgri
God
God
Messaggi: 4735
Iscritto il: giovedì 13 gennaio 2011, 18:37
Località: Cagliari

Re: Telemetria (si fa per dire) per KFlop

Messaggio da walgri » giovedì 30 ottobre 2014, 14:27

Zebrauno ci manchi, e tanto ! :D

Non ho scordato il tuo piano: abbiamo progetti che in qualche maniera si intersecano in questo punto preciso, e in quello successivo, ovvero dal monitoraggio "post mortem", in differita come sto facendo ora, a quello realtime.

Dentro ci entra di tutto dal controllo delle vibrazioni e finitura, al "PID adattivo", alla verifica di parametri ambientali.

Qui mi sto permettendo di esplorare qualche strada e a provare un armamentario il più possibile riutilizzabile.

Viaggeremo leggeri, andiamo a caccia di orchi. 8)
...stop chasing shadows, just enjoy the ride.
Aìna pantografoTelemetria per KFlopBlenderCAM STL + DXF

Avatar utente
Pedro
God
God
Messaggi: 7021
Iscritto il: domenica 6 aprile 2008, 18:44
Località: Roma

Re: Telemetria (si fa per dire) per KFlop

Messaggio da Pedro » giovedì 30 ottobre 2014, 14:43

seguitando a dire bravo a walgri volevo dire a zebrauno che il controllo in tempo reale, quasi tempo reale (per meglio dire) dei parametri di lavoro o dicasi del PID si potrebbe già fare e sarebbe anche, forse, più facile. Peggio è monitorare in tempo reale, diciamo quasi tempo reale, quello che walgri sta facendo perchè portare fuori i dati non è facile, o almeno non è facile farlo mentre il tutto viaggia, quindi in tempo reale. Ma il monitor che sta facendo walgri è proprio importante in funzione della possibilità di avere sott'occhio quello che sta avvenendo.
"Ho controllato molto approfonditamente," disse il computer, "e questa è sicuramente la risposta. Ad essere sinceri, penso che il problema sia che voi non abbiate mai saputo veramente qual è la domanda."

Avatar utente
walgri
God
God
Messaggi: 4735
Iscritto il: giovedì 13 gennaio 2011, 18:37
Località: Cagliari

Re: Telemetria (si fa per dire) per KFlop

Messaggio da walgri » giovedì 30 ottobre 2014, 14:56

E credo anche di aver capito il perchè del ritardo.
Nel bel mezzo della scrittura di un post fiume verso il forum ufficiale mi son reso conto che il ritardo è solo causa mia (non che ci fossero dubbi, intendiamoci), e sta tutto nel vezzo di aver chiesto alla Kflop di farmi l'occhiolino all'inizio della collezione dei dati, esattamente qui:

Codice: Seleziona tutto

.
.
.
while(1){
        while(!ReadBit(CONTROL_BIT)); // wait for control bit to be high
        ClearBit(46);
        Delay_sec(0.2);
        SetBit(46);
        printf("Gathering started\n");
.
.
.
Ora è chiaro che la Delay_sec si applica al thread corrente, ma il thread principale, che genera il moto, continua a girare, e ci mancherebbe. Ora sono lontano dalla KFlop e non posso provare, ma mi offro una birra Barley se ho ragione :lol:

Edit, grazie Zebrauno e grazie di nuovo Pedro (che cafone che sono :roll: )
...stop chasing shadows, just enjoy the ride.
Aìna pantografoTelemetria per KFlopBlenderCAM STL + DXF

Rispondi

Torna a “Controlli Seriali, Usb e Ethernet”