Sync from remote server: 2025-10-12 18:56:41
This commit is contained in:
161
Tilt/conv_grezziPL.m
Executable file
161
Tilt/conv_grezziPL.m
Executable file
@@ -0,0 +1,161 @@
|
||||
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
|
||||
Reference in New Issue
Block a user