Files
matlab-python/Tilt/conv_grezziPL.m

161 lines
5.8 KiB
Matlab
Executable File

function [DatiPiez,DatiPiezT,RIF_PL] = conv_grezziPL(rPL,ADCPiez,tempPiez,DCalPLTot,...
NodoPiezoLink,NuovoZeroPL,IDcentralina,DTcatena,FileName)
text = 'conv_grezziPL function started';
fileID = fopen(FileName,'a');
fmt = '%s \r';
fprintf(fileID,fmt,text);
Lineare = 1;
if isempty(NodoPiezoLink) == 1
caPiez = DCalPLTot(:,1);
intPiez = DCalPLTot(:,2);
caT = DCalPLTot(:,3);
intT = DCalPLTot(:,4);
RIF_PL = [];
else
if strcmp(NodoPiezoLink(1,4),'VW kg/cm2') == 1
A = DCalPLTot(:,1);
B = DCalPLTot(:,2);
C = DCalPLTot(:,3);
RIF_PL = [];
elseif strcmp(NodoPiezoLink(1,4),'Hz') == 1 % Convertitore per DSAS o ModBus
caPiez = DCalPLTot(:,1);
intPiez = DCalPLTot(:,2);
D = DCalPLTot(:,4);
RIF_PL = [];
elseif strcmp(NodoPiezoLink(1,4),'VW kPa') == 1
A = DCalPLTot(:,1);
B = DCalPLTot(:,2);
C = DCalPLTot(:,3);
if C == 0 % Identifica i piezometri di Geosense
D = DCalPLTot(:,4);
if D ~= 0
NomeFile = ['' IDcentralina '-' DTcatena '-RifPL.csv'];
NomeFileT = ['' IDcentralina '-' DTcatena '-RifPL_T.csv'];
if NuovoZeroPL == 0 % prima elaborazione
P = (ADCPiez(1,:).^2)/1000;
csvwrite(NomeFile,P);
a = 1.4051*10^(-3);
b = 2.369*10^(-4);
c = 9.9*10^(-8);
T = 1./(a+b*reallog(tempPiez(1,:))...
+c*(reallog(tempPiez(1,:))).^3)-273.15; % conversione in gradi
csvwrite(NomeFileT,T);
else
P = csvread(NomeFile);
T = csvread(NomeFileT);
end
C = -A.*(P'.^2)-B.*P';
RIF_PL = 1000*C;
else
RIF_PL = 0;
end
else
D = 0;
RIF_PL = 0;
end
else
if isnan(DCalPLTot(end)) == 1 % Conversione Lineare
Lineare = 1;
caPiez = DCalPLTot(:,1);
intPiez = DCalPLTot(:,2);
elseif isnan(DCalPLTot(end)) == 0 % Conversione Parabolica
Lineare = 0;
aPiez = DCalPLTot(:,5);
bPiez = DCalPLTot(:,1);
cPiez = DCalPLTot(:,2);
intPiez = [];
end
caT = DCalPLTot(:,3);
intT = DCalPLTot(:,4);
RIF_PL = 0;
end
end
[rP,~] = size(ADCPiez); % Numero di dati
% Conversione dei punti ADC in dati di pressione
DatiPiez = zeros(rP,rPL);
DatiPiezT = zeros(rP,rPL);
if strcmp(NodoPiezoLink(1,4),'VW kPa') == 1 || strcmp(NodoPiezoLink(1,4),'VW kg/cm2') == 1 % Conversione da digit a kPa e poi in Pa
kPa = zeros(rP,rPL);
kg_cm2 = zeros(rP,rPL);
a = 1.4051*10^(-3);
b = 2.369*10^(-4);
c = 9.9*10^(-8);
% Piezometro
for i=1:rPL
digit = (ADCPiez(:,i).^2)/1000;
Therm = cell2mat(NodoPiezoLink(i,5));
if strcmp(NodoPiezoLink(i,4),'VW kPa') == 1
if Therm == 1 && D(1) ~= 0
DatiPiezT(:,i) = 1./(a+b*reallog(tempPiez(:,i))...
+c*(reallog(tempPiez(:,i))).^3)-273.15; % conversione in gradi
kPa(:,i) = A(i,1)*digit.^2+B(i,1)*digit+C(i,1)+D(i,1)*(DatiPiezT(:,i)-T(1,i)); % conversione in kPa
else
kPa(:,i) = A(i,1)*digit.^2+B(i,1)*digit+C(i,1); % conversione in kPa
end
DatiPiez(:,i) = kPa(:,i)*1000;
elseif strcmp(NodoPiezoLink(i,4),'VW kg/cm2') == 1
kg_cm2(:,i) = A(i,1)*digit.^2+B(i,1)*digit+C(i,1); % conversione in kg/cm2
DatiPiez(:,i) = kg_cm2(:,i)*98066.5;
end
if Therm == 1
DatiPiezT(:,i) = 1./(a+b*reallog(tempPiez(:,i))...
+c*(reallog(tempPiez(:,i))).^3)-273.15; % conversione in gradi
end
end
elseif strcmp(NodoPiezoLink(1,4),'Hz') == 1 % Convertitore per DSAS o ModBus
NomeFileT = ['' IDcentralina '-' DTcatena '-RifPL_T.csv'];
kPa = zeros(rP,rPL);
a = 1.4051*10^(-3);
b = 2.369*10^(-4);
c = 9.9*10^(-8);
if D ~= 0
if NuovoZeroPL == 0 % prima elaborazione
T = 1./(a+b*reallog(tempPiez(1,:))...
+c*(reallog(tempPiez(1,:))).^3)-273.15; % conversione in gradi
csvwrite(NomeFileT,T);
else
T = csvread(NomeFileT);
end
for i=1:rPL
Therm = cell2mat(NodoPiezoLink(i,5));
if Therm == 1
DatiPiezT(:,i) = 1./(a+b*reallog(tempPiez(:,i))...
+c*(reallog(tempPiez(:,i))).^3)-273.15; % conversione in gradi
kPa(:,i) = caPiez(i,1)*ADCPiez(:,i)+intPiez(i,1)+D(i,1)*(DatiPiezT(:,i)-T(1,i)); % conversione in kPa
else
kPa(:,i) = caPiez(i,1)*ADCPiez(:,i)+intPiez(i,1); % conversione in kPa
end
end
else
for i=1:rPL
kPa(:,i) = caPiez(i,1)*ADCPiez(:,i)+intPiez(i,1); % conversione in kPa
end
end
DatiPiez(:,i) = kPa(:,i)*1000; % Pascal
else
mBar = zeros(rP,rPL);
for i=1:rPL
if Lineare == 1 && isnan(intPiez(i,1)) == 1
mBar(:,i) = caPiez(i,1)*ADCPiez(:,i);
else
if Lineare == 1
mBar(:,i) = caPiez(i,1)*ADCPiez(:,i)+intPiez(i,1); % conversione lineare in mBar
elseif Lineare == 0
mBar(:,i) = aPiez(i,1)*ADCPiez(:,i).^2+bPiez(i,1)*ADCPiez(:,i)+cPiez(i,1); % conversione parabolica in mBar
end
end
DatiPiez(:,i) = mBar(:,i)*100;
DatiPiezT(:,i) = caT(i,1)*tempPiez(:,i)+intT(i,1); % conversione in gradi
end
end
text = 'Raw Data of Piezo Link converted into physical units correctly. conv_grezziPL function ended';
fprintf(fileID,fmt,text);
fclose(fileID);
end