Пользовательский блок "измерение переменного тока"
Пользовательский блок "измерение переменного тока"
Только заметил, что вы давно уже это решение используете. В программе один компаратор поставил и увидел в коде. И че я раньше парился с этими условиями. И посмотрите, везде в документации ни слова про такую возможность.
Win10-64 FLProg v7.5.2 Portable ![Стыдно :fie:](./images/smilies/ucoz_fie.gif)
![Стыдно :fie:](./images/smilies/ucoz_fie.gif)
Пользовательский блок "измерение переменного тока"
Вывел на монитор порта значение пин 13 и значение wire. Условие не выполняется, т.е. 600>wire. А значит на пин 13 должен быть ноль, а там 1 при любом значении wire. А ещё я заметил, что, если поставить строки вывода на монитор порта вот так:
, то значение q на экран не выводится. Всё, что стоит после строки return result; я так полагаю не выполняется.
Добавлено (01.02.2017, 11:03)
---------------------------------------------
попробовал изменить код
теперь значение q выводится на экран, но условие digitalWrite(13, (600.00) < (wire)); не выполняется. На пин 13 всегда 1. Можете сами проверить у себя, просто загрузив этот скетч и вывести монитор порта. У вас как ра получится, что wire меньше 600, а на пин 13 всё равно будет 1.
Добавлено (01.02.2017, 11:05)
---------------------------------------------
Самое интересное, что первый вариант кода, когда компилирует сама flprog
Код: Выделить всё
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);
}
Добавлено (01.02.2017, 11:03)
---------------------------------------------
попробовал изменить код
Код: Выделить всё
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;
}
Добавлено (01.02.2017, 11:05)
---------------------------------------------
Самое интересное, что первый вариант кода, когда
Код: Выделить всё
return result;
digitalWrite(13, (600.00) < (wire));
q=13;
Serial.print(" q= ");
Serial.println(q,3)
- support
- Супермодератор
- Сообщения: 1902
- Зарегистрирован: 03 янв 2018, 11:45
- Откуда: Астрахань
- Имя: Сергей
- Контактная информация:
Пользовательский блок "измерение переменного тока"
Не хочу разбираться с Вашим кодом. Вот пример проекта (картинка, поскольку у меня сейчас версия в работе и у Вас проект сделанный в ней не откроется)
![Изображение](http://flprog.ru/images/sravnenie1.png)
Вот код
bool _gtv1 = 0;
int _stou1;
bool _count1I = 0;
int _count1P = 0;
bool _gen1I = 0;
bool _gen1O = 0;
unsigned long _gen1P = 0UL;
void setup()
{
Serial.begin(9600);
pinMode(13, OUTPUT);
}
void loop()
{
if (1) {
if (! _gen1I) {
_gen1I = 1;
_gen1O = 1;
_gen1P = millis();
}
} else {
_gen1I = 0 ;
_gen1O = 0;
}
if (_gen1I) {
if ( _isTimer ( _gen1P , 250 )) {
_gen1P = millis();
_gen1O = ! _gen1O;
}
}
if (_gen1O)
{
if (! _count1I)
{
_count1P = _count1P + 1;
_count1I = 1;
}
}
else
{
_count1I = 0;
}
if (_gtv1) _count1P = 0;
_gtv1 = _count1P >= 50;
digitalWrite(13, (_count1P) > (25));
if (1) {
if (!(( _count1P) == (_stou1))) {
Serial.println(_count1P);
}
} _stou1 = _count1P;
}
bool _isTimer(unsigned long startTime, unsigned long period )
{
unsigned long currentTime;
currentTime = millis();
if (currentTime >= startTime) {
return (currentTime >= (startTime + period));
} else {
return (currentTime >= (4294967295 - startTime + period));
}
}
Обратите внимание на выделенную строку. И всё прекрасно работает. Светодиод загорается и тухнет когда ему положенно
![Изображение](http://flprog.ru/images/sravnenie1.png)
Вот код
bool _gtv1 = 0;
int _stou1;
bool _count1I = 0;
int _count1P = 0;
bool _gen1I = 0;
bool _gen1O = 0;
unsigned long _gen1P = 0UL;
void setup()
{
Serial.begin(9600);
pinMode(13, OUTPUT);
}
void loop()
{
if (1) {
if (! _gen1I) {
_gen1I = 1;
_gen1O = 1;
_gen1P = millis();
}
} else {
_gen1I = 0 ;
_gen1O = 0;
}
if (_gen1I) {
if ( _isTimer ( _gen1P , 250 )) {
_gen1P = millis();
_gen1O = ! _gen1O;
}
}
if (_gen1O)
{
if (! _count1I)
{
_count1P = _count1P + 1;
_count1I = 1;
}
}
else
{
_count1I = 0;
}
if (_gtv1) _count1P = 0;
_gtv1 = _count1P >= 50;
digitalWrite(13, (_count1P) > (25));
if (1) {
if (!(( _count1P) == (_stou1))) {
Serial.println(_count1P);
}
} _stou1 = _count1P;
}
bool _isTimer(unsigned long startTime, unsigned long period )
{
unsigned long currentTime;
currentTime = millis();
if (currentTime >= startTime) {
return (currentTime >= (startTime + period));
} else {
return (currentTime >= (4294967295 - startTime + period));
}
}
Обратите внимание на выделенную строку. И всё прекрасно работает. Светодиод загорается и тухнет когда ему положенно
Автор программы FLProg.
- support
- Супермодератор
- Сообщения: 1902
- Зарегистрирован: 03 янв 2018, 11:45
- Откуда: Астрахань
- Имя: Сергей
- Контактная информация:
Пользовательский блок "измерение переменного тока"
Ну вот это точно не 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);
}
Это наверное какой то пользовательский блок на С, а за их содержание я не отвечаю)))). Все вопросы к автору блока))))).
Автор программы FLProg.
Пользовательский блок "измерение переменного тока"
Что то мне сдается что я много чего пропустил...
далее
Код: Выделить всё
bool q;
Код: Выделить всё
q=13;
Win10-64 FLProg v7.5.2 Portable ![Стыдно :fie:](./images/smilies/ucoz_fie.gif)
![Стыдно :fie:](./images/smilies/ucoz_fie.gif)
Пользовательский блок "измерение переменного тока"
support, так в том то и косяк что в проекте сидит мой блок и один он работает а lcd или компортом глючит.
Пользовательский блок "измерение переменного тока"
support, Правильно, блок пользовательский. Сделан он slavas. Блок этот раз в секунду показывает значение переменного тока, измеряемое трансформатором тока. И к работе блока у меня не никаких вопросов. Он работает идеально. У меня есть вопрос к flprog. Выход блока wire показывает реальное значение переменного тока в float. Этот выход я подключаю ко входу компаратора. На второй его вход я подаю константу, так же в float. На выходе должен получить 0 или 1, в зависимости от результата сравнения. А получаю 1, вне зависимости от результата сравнения. Вот в этом вся проблема. В этой самой еденице.
Добавлено (01.02.2017, 11:52)
---------------------------------------------
И выше я уже указывал в чем причина такой работы, но почему оно так происходит и почему flprog так компилирует, сне непонятно. Так как я не программист.
Добавлено (01.02.2017, 11:58)
---------------------------------------------
Dev1, в 42 посте то, что вы пропустили
Добавлено (01.02.2017, 11:52)
---------------------------------------------
И выше я уже указывал в чем причина такой работы, но почему оно так происходит и почему flprog так компилирует, сне непонятно. Так как я не программист.
Добавлено (01.02.2017, 11:58)
---------------------------------------------
Dev1, в 42 посте то, что вы пропустили
- support
- Супермодератор
- Сообщения: 1902
- Зарегистрирован: 03 янв 2018, 11:45
- Откуда: Астрахань
- Имя: Сергей
- Контактная информация:
Пользовательский блок "измерение переменного тока"
Это конечно не правильно, но язык это позволяет))))))). Происходит автоматическое приведение типов. Всё что больше 0 - становится True, 0 становится False
P.S. - Это касалось
bool q;
q=13;
P.S. - Это касалось
bool q;
q=13;
Автор программы FLProg.
Пользовательский блок "измерение переменного тока"
Если пользовательский блок не дает нормально работать программе, то он не работает идеально, он не должен мешать работе основной пограммы и других приложений.lopezmil писал(а):Правильно, блок пользовательский. Сделан он slavas. Блок этот раз в секунду показывает значение переменного тока, измеряемое трансформатором тока. И к работе блока у меня не никаких вопросов. Он работает идеально.
slavas, же пишет что ни LCD ни com port нормально не работают вместе с ним, может все-таки в блоке ошибки поищете?
- support
- Супермодератор
- Сообщения: 1902
- Зарегистрирован: 03 янв 2018, 11:45
- Откуда: Астрахань
- Имя: Сергей
- Контактная информация:
Пользовательский блок "измерение переменного тока"
Какое сравнение используете. С флоат есть некоторые сложности.lopezmil писал(а):Выход блока wire показывает реальное значение переменного тока в float. Этот выход я подключаю ко входу компаратора. На второй его вход я подаю константу, так же в float. На выходе должен получить 0 или 1, в зависимости от результата сравнения. А получаю 1, вне зависимости от результата сравнения. Вот в этом вся проблема. В этой самой еденице.
Из описания на сайте ардуино
Так что сравнивать по равенству или не равенству флоат не стоит. Как вариант - умножать значение на 10, 100, 100 в зависимости от необходимой точности, превращать его в integer и сравнивать с integer. или сравнивать по условию больше или меньшеХранение в памяти чисел с плавающей точкой в двоичной системе обуславливает потерю точности. Так, например, 6.0 / 3.0 не обязательно равен 2.0. Сравнивая два числа с плавающей точкой следует проверять не точное равенство, а разницу между этими числами, меньше ли она некого выбранной малого порога.
Автор программы FLProg.
Пользовательский блок "измерение переменного тока"
support
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;
}
кусок кода из моего блока может конфликтовать с flprog и как исправить?
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;
}
кусок кода из моего блока может конфликтовать с flprog и как исправить?
Последний раз редактировалось slavas 01 фев 2017, 16:26, всего редактировалось 1 раз.
- support
- Супермодератор
- Сообщения: 1902
- Зарегистрирован: 03 янв 2018, 11:45
- Откуда: Астрахань
- Имя: Сергей
- Контактная информация:
Пользовательский блок "измерение переменного тока"
Не должен конфликтовать, ничего такого в нём нет. Надо внимательнее посмотреть блок, но пока некогдаslavas писал(а):кусок кода из моего блока может конфликтовать с flprog и как исправить?
Автор программы FLProg.
Пользовательский блок "измерение переменного тока"
Здравствуйте! Я тоже сейчас делаю проект на ТА-12. Только мне необходимо измеренные данные выводить на 4 сегментный LED индикатор. Данные измеряются но очень быстро, поэтому индикатор не выводит в статичном виде цифры, а очень быстро их меняет. Создаются эфект мерцания и конкретные цифры уже не разглядеть. Как сделать, что бы изменять период опроса датчика, или что бы изменять период вывода на индикатор без эфекта мерцания?
Пользовательский блок "измерение переменного тока"
Можно данные на индикатор считывать из переменной, а запись новых значений в переменную делать раз в секунду, например. Можно поставить какой-нибудь цифровой фильтр.
Пользовательский блок "измерение переменного тока"
Спасибо за совет! Данные в индикатор записывались из переменной, вот только датчик слишком быстро записывал измеренное значение в переменную, а я не знал как сделать прерывание на опрос датчика или записывать в переменную усреднённое значение нескольких измерений. Теперь буду пробовать, думаю поможет.
Добавлено (08.02.2017, 06:56)
---------------------------------------------
Подскажите, а нет ли у кого блоков цифровых фильтров на FBD, а то эти блоки в CODE а я в нём не силён. Мне бы для понимания, что зачем делается. Фильтры работают, результат получен, правда не совсем так, как хотелось бы, но будем думать дальше главное что сдвинулся с мёртвой точки. Ещё вопрос: в настройках переменной есть возможность добавить вход разрешения записи в переменную, а что происходит с переменной когда на входе разрешения записи висит 0. Переменная сохраняет предыдущее значение или падает в ноль?
Добавлено (08.02.2017, 06:56)
---------------------------------------------
Подскажите, а нет ли у кого блоков цифровых фильтров на FBD, а то эти блоки в CODE а я в нём не силён. Мне бы для понимания, что зачем делается. Фильтры работают, результат получен, правда не совсем так, как хотелось бы, но будем думать дальше главное что сдвинулся с мёртвой точки. Ещё вопрос: в настройках переменной есть возможность добавить вход разрешения записи в переменную, а что происходит с переменной когда на входе разрешения записи висит 0. Переменная сохраняет предыдущее значение или падает в ноль?
Пользовательский блок "измерение переменного тока"
В этом и назначение переменных - хранить информацию. При 0 на входе разрешения записи запись не происходет, на выходе последнее записанное значение. Если на EN подать сигнал с генератора, то можете записывать туда значения через любой промежуток времени.
Я думаю в FBD эти фильтры будут весить гораздо больше. Некоторые вещи в FBD вообще сложно сделать, так что мое мнение если есть блок на CODE, то лучше использовать его. Если есть вопросы по блоку, задать их тому кто его делал и все прояснится.bars писал(а):Подскажите, а нет ли у кого блоков цифровых фильтров на FBD, а то эти блоки в CODE а я в нём не силён.
Пользовательский блок "измерение переменного тока"
Задал данный впрос на форумах по ардуино и вот что мне один товарищ ответил :
1. добавляешь аналоговый вход.
2. добавляешь две переменные, одну float, другую int. Float - для результата, int - для промежуточного максимума.
3. millis() в этой поделке недоступна. Как будем поступать? Нет ничего проще! Делаешь генератор на период (тут важно не зырываться, потому, что эта херня ничего не проверяет на реальность) допустим 1 мс или 500 мкс, не меньше. И счетчик.
4. делаешь 1000 измерений, для генератора 1 мс или 2000 для 500 мкс. Тут есть хитрость. Импульс генератора - он как синхроимпульс для фиксации измерения. Сумеешь такое сам нарисовать?
5. В каждом измерении сравниваешь вход и переменную для максимума и записываешь в нее MAX. Тут понятно?
6. арифметикой вычисляешь из полученного "макса" значение в вольтах и записываешь его в результирующую переменную, или просто на выход отправляешь, смотря, что тебе нужно.
Добавлено (09.02.2017, 22:41)
---------------------------------------------
А вот что я ему ответил :
Что значит генератор на период 1мс? И какой выход должен быть у этого генератора, в каких еденицах? 4 пункт тоже боюсь неправильно понял. Как я понимаю в момент импульса генератора должно фиксироватся текущее значение измерения с аналогового входа? Чем оно должно фиксироватся и куда записыватся? И чем можно сравнить максимальное значение измерения и текущее, чтобы на выходе сравнения получилась int переменная?
Добавлено (09.02.2017, 22:42)
---------------------------------------------
Но ответы на свои вопросы я так и не получил. Может здесь кто подскажет?
1. добавляешь аналоговый вход.
2. добавляешь две переменные, одну float, другую int. Float - для результата, int - для промежуточного максимума.
3. millis() в этой поделке недоступна. Как будем поступать? Нет ничего проще! Делаешь генератор на период (тут важно не зырываться, потому, что эта херня ничего не проверяет на реальность) допустим 1 мс или 500 мкс, не меньше. И счетчик.
4. делаешь 1000 измерений, для генератора 1 мс или 2000 для 500 мкс. Тут есть хитрость. Импульс генератора - он как синхроимпульс для фиксации измерения. Сумеешь такое сам нарисовать?
5. В каждом измерении сравниваешь вход и переменную для максимума и записываешь в нее MAX. Тут понятно?
6. арифметикой вычисляешь из полученного "макса" значение в вольтах и записываешь его в результирующую переменную, или просто на выход отправляешь, смотря, что тебе нужно.
Добавлено (09.02.2017, 22:41)
---------------------------------------------
А вот что я ему ответил :
Что значит генератор на период 1мс? И какой выход должен быть у этого генератора, в каких еденицах? 4 пункт тоже боюсь неправильно понял. Как я понимаю в момент импульса генератора должно фиксироватся текущее значение измерения с аналогового входа? Чем оно должно фиксироватся и куда записыватся? И чем можно сравнить максимальное значение измерения и текущее, чтобы на выходе сравнения получилась int переменная?
Добавлено (09.02.2017, 22:42)
---------------------------------------------
Но ответы на свои вопросы я так и не получил. Может здесь кто подскажет?
-
- Рядовой
- Сообщения: 23
- Зарегистрирован: 30 апр 2016, 09:46
- Откуда: Южно-Сахалинск
- Имя: Александр
- Контактная информация:
Пользовательский блок "измерение переменного тока"
не дождался работающего блока, сделал так: с трансформатора тока выпрямляю диодом напряжение, далее сглаживающий RC фильтр. вход ардуино стабилитроном защитил. Характеристика очень нелинейная получилась, что просто исправляется блоком нелинейного масштабирования. Измеряю до 10а.
Пользовательский блок "измерение переменного тока"
А схему подключения ТТ к ардуино с диодом и стабилитроном можно?
Добавлено (13.02.2017, 05:25)
---------------------------------------------
lopezmil, В принципе теоретически на форуме тебе описали достаточно подробно. Во всяком случае для меня понятно. Генератор работает и выдаёт тебе импульсы типа boolean далее после генератора надо поставить тригер, который по переднему фронту от генератора на своём выходе выдаёт импульс в один такт типа boolean и этот импульс подаётся на вход разрешения записи переменной в которую по этому такту записываются данные с аналогового входа. С какой частостой сделаеш генератор, так часто будут записываться данные в переменную. Если есть желание ждать то, я в скором времени постараюсь сделать блок в FBD, так как он имне самому нужен. Нечто подобное я уже делал но у меня получился не совсем удовлетворяющий меня результат. Задача ставилась такая: ТТ измеряет переменный ток в цепи, а контроллер обрабатывает данные с учётом кооффициентов пересчёта и выдаё на 7 сигментный 4 разрядный LED индикатор. Но получилось вот что. ТТ очень быстро делает замеры и мне приходилось частотой генератора ограничивать количество выборок, что бы на индикаторе можно было нормально видить цифры. А иначе появлялся ифект мерцания из-за слишком частого смены цифирь на индикации. Применил по советам с этого форума различные фильтры и тут открылась новая засада. выборки делаются и фильтры их сглаживают, но вопервых выводится на индикацию среднее значение выборок тока а не максимальные, во вторых нет синхронизации с синусойдой перменного тока и на индикации не стоит статично цифра установленного тока, например 10 А а плавно увеличиваются от 0 до 10 и затем плавно опускаются от 10 до ноля. Надо записывать измеренные значения в массив и выбирать из массива максимальные и только после этого выводить на индикацию.
Добавлено (13.02.2017, 05:25)
---------------------------------------------
lopezmil, В принципе теоретически на форуме тебе описали достаточно подробно. Во всяком случае для меня понятно. Генератор работает и выдаёт тебе импульсы типа boolean далее после генератора надо поставить тригер, который по переднему фронту от генератора на своём выходе выдаёт импульс в один такт типа boolean и этот импульс подаётся на вход разрешения записи переменной в которую по этому такту записываются данные с аналогового входа. С какой частостой сделаеш генератор, так часто будут записываться данные в переменную. Если есть желание ждать то, я в скором времени постараюсь сделать блок в FBD, так как он имне самому нужен. Нечто подобное я уже делал но у меня получился не совсем удовлетворяющий меня результат. Задача ставилась такая: ТТ измеряет переменный ток в цепи, а контроллер обрабатывает данные с учётом кооффициентов пересчёта и выдаё на 7 сигментный 4 разрядный LED индикатор. Но получилось вот что. ТТ очень быстро делает замеры и мне приходилось частотой генератора ограничивать количество выборок, что бы на индикаторе можно было нормально видить цифры. А иначе появлялся ифект мерцания из-за слишком частого смены цифирь на индикации. Применил по советам с этого форума различные фильтры и тут открылась новая засада. выборки делаются и фильтры их сглаживают, но вопервых выводится на индикацию среднее значение выборок тока а не максимальные, во вторых нет синхронизации с синусойдой перменного тока и на индикации не стоит статично цифра установленного тока, например 10 А а плавно увеличиваются от 0 до 10 и затем плавно опускаются от 10 до ноля. Надо записывать измеренные значения в массив и выбирать из массива максимальные и только после этого выводить на индикацию.
Пользовательский блок "измерение переменного тока"
Добавлено (14.02.2017, 00:40)
---------------------------------------------
Что скажете, знатоки?
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Кто сейчас на конференции
Сейчас этот форум просматривают: нет зарегистрированных пользователей и 0 гостей