Код: Выделить всё
float vpp;
float ncurr;
float rms;
float wire;
int sensorTA12=0; // Analog input pin that sensor is attached to
float nVPP; // Voltage measured across resistor
float nCurrThruResistorPP; // Peak Current Measured Through Resistor
float nCurrThruResistorRMS; // RMS current through Resistor
float nCurrentThruWire; // Actual RMS current in Wire
bool q;
void setup()
{
pinMode(13, OUTPUT);
Serial.begin(9600);
pinMode(sensorTA12, INPUT);
}
void loop()
{
nVPP = getVPP();
nCurrThruResistorPP = (nVPP/200.0) * 1000.0;
nCurrThruResistorRMS = nCurrThruResistorPP * 0.707;
nCurrentThruWire = nCurrThruResistorRMS * 1000;
Serial.print("Volts Peak : ");
Serial.println(nVPP,3);
vpp = nVPP ; // выход vpp
Serial.print("Current Through Resistor (Peak) : ");
Serial.print(nCurrThruResistorPP,3);
Serial.println(" mA Peak to Peak");
ncurr = nCurrThruResistorPP ; // выход ncurr
Serial.print("Current Through Resistor (RMS) : ");
Serial.print(nCurrThruResistorRMS,3);
Serial.println(" mA RMS");
rms = nCurrThruResistorRMS ; // выход rms
Serial.print("Current Through Wire : ");
Serial.print(nCurrentThruWire,3);
Serial.println(" mA RMS");
wire= nCurrentThruWire ; // выход wire
Serial.println();
}
float getVPP()
{
float result;
int readValue; //value read from the sensor
int maxValue = 0; // store max value here
uint32_t start_time = millis();
while((millis()-start_time) < 1000) //sample for 1 Sec
{
readValue = analogRead(sensorTA12);
// see if you have a new maxValue
if (readValue > maxValue)
{
/*record the maximum sensor value*/
maxValue = readValue;
}
}
// Convert the digital data to a voltage
result = (maxValue * 5.0)/1024.0;
return result;
digitalWrite(13, (600.00) < (wire));
q=13;
Serial.print(" q= ");
Serial.println(q,3);
}
Код: Выделить всё
float vpp;
float ncurr;
float rms;
float wire;
int sensorTA12=0; // Analog input pin that sensor is attached to
float nVPP; // Voltage measured across resistor
float nCurrThruResistorPP; // Peak Current Measured Through Resistor
float nCurrThruResistorRMS; // RMS current through Resistor
float nCurrentThruWire; // Actual RMS current in Wire
bool q;
void setup()
{
pinMode(13, OUTPUT);
Serial.begin(9600);
pinMode(sensorTA12, INPUT);
}
void loop()
{
nVPP = getVPP();
nCurrThruResistorPP = (nVPP/200.0) * 1000.0;
nCurrThruResistorRMS = nCurrThruResistorPP * 0.707;
nCurrentThruWire = nCurrThruResistorRMS * 1000;
Serial.print("Volts Peak : ");
Serial.println(nVPP,3);
vpp = nVPP ; // выход vpp
Serial.print("Current Through Resistor (Peak) : ");
Serial.print(nCurrThruResistorPP,3);
Serial.println(" mA Peak to Peak");
ncurr = nCurrThruResistorPP ; // выход ncurr
Serial.print("Current Through Resistor (RMS) : ");
Serial.print(nCurrThruResistorRMS,3);
Serial.println(" mA RMS");
rms = nCurrThruResistorRMS ; // выход rms
Serial.print("Current Through Wire : ");
Serial.print(nCurrentThruWire,3);
Serial.println(" mA RMS");
wire= nCurrentThruWire ; // выход wire
Serial.println();
digitalWrite(13, (600.00) < (wire));
q=13;
Serial.print("q : ");
Serial.println(q,3);
}
float getVPP()
{
float result;
int readValue; //value read from the sensor
int maxValue = 0; // store max value here
uint32_t start_time = millis();
while((millis()-start_time) < 1000) //sample for 1 Sec
{
readValue = analogRead(sensorTA12);
// see if you have a new maxValue
if (readValue > maxValue)
{
/*record the maximum sensor value*/
maxValue = readValue;
}
}
// Convert the digital data to a voltage
result = (maxValue * 5.0)/1024.0;
return result;
}
Код: Выделить всё
return result;
digitalWrite(13, (600.00) < (wire));
q=13;
Serial.print(" q= ");
Serial.println(q,3)
Ну вот это точно не FLProg собирало. Я такие переменные не использую, и комменты в коде практически не делаю.lopezmil писал(а):float getVPP()
{
float result;
int readValue; //value read from the sensor
int maxValue = 0; // store max value here
uint32_t start_time = millis();
while((millis()-start_time) maxValue)
{
/*record the maximum sensor value*/
maxValue = readValue;
}
}
// Convert the digital data to a voltage
result = (maxValue * 5.0)/1024.0;
return result;
digitalWrite(13, (600.00) < (wire));
q=13;
Serial.print(" q= ");
Serial.println(q,3);
}
Код: Выделить всё
bool q;
Код: Выделить всё
q=13;
Если пользовательский блок не дает нормально работать программе, то он не работает идеально, он не должен мешать работе основной пограммы и других приложений.lopezmil писал(а):Правильно, блок пользовательский. Сделан он slavas. Блок этот раз в секунду показывает значение переменного тока, измеряемое трансформатором тока. И к работе блока у меня не никаких вопросов. Он работает идеально.
Какое сравнение используете. С флоат есть некоторые сложности.lopezmil писал(а):Выход блока wire показывает реальное значение переменного тока в float. Этот выход я подключаю ко входу компаратора. На второй его вход я подаю константу, так же в float. На выходе должен получить 0 или 1, в зависимости от результата сравнения. А получаю 1, вне зависимости от результата сравнения. Вот в этом вся проблема. В этой самой еденице.
Так что сравнивать по равенству или не равенству флоат не стоит. Как вариант - умножать значение на 10, 100, 100 в зависимости от необходимой точности, превращать его в integer и сравнивать с integer. или сравнивать по условию больше или меньшеХранение в памяти чисел с плавающей точкой в двоичной системе обуславливает потерю точности. Так, например, 6.0 / 3.0 не обязательно равен 2.0. Сравнивая два числа с плавающей точкой следует проверять не точное равенство, а разницу между этими числами, меньше ли она некого выбранной малого порога.
Не должен конфликтовать, ничего такого в нём нет. Надо внимательнее посмотреть блок, но пока некогдаslavas писал(а):кусок кода из моего блока может конфликтовать с flprog и как исправить?
Я думаю в FBD эти фильтры будут весить гораздо больше. Некоторые вещи в FBD вообще сложно сделать, так что мое мнение если есть блок на CODE, то лучше использовать его. Если есть вопросы по блоку, задать их тому кто его делал и все прояснится.bars писал(а):Подскажите, а нет ли у кого блоков цифровых фильтров на FBD, а то эти блоки в CODE а я в нём не силён.