161 lines
5.8 KiB
Matlab
Executable File
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 |