• 1
  • 9
  • 10
  • 11
  • 12
  • 13
  • 37
Най - вълнуващия въпрос зимно време.
den70 - напреднал
Всъщност сега ми направи впечетление че математически формулата работи. Например умножение х 2 го прави но умножава температута която мери без формула. А ние всъщност изкаме да умножим напрежението което е на пина и тогава да сметнем температурата. Не знам дали се изразих точно, но дано да си ме разбрал.

По скоро май проблема е че сега не дава грешка с дробните числа, но не прилага формулата и не променя резултата.. С цели числа работи.
Jacket - специалист
Да, прав си, не знам къде съм мислил като съм го правил това. Преправих формулите, в момента допълнителната формула се изпълнява преди стандартната. В случая с LM35DZ е без значение, защото получаваме температурата директно в целзии, но при LM335 е проблем, защото има допълнително конвертиране на келвини към целзии и има значение кога се прилага допълнителната калкулация.
Най-странно ми е обаче, защо при теб работи само с цели числа... опитвах се какво ли не тук да симулирам и не откривам проблем с дробните, в момента при мен калкулира всякакви числа.
Можеш ли да погледнеш каква ти е локализацията на Windows-а? В Control panel -> regional and language options, виж в Customize какъв е Decimal symbol-а. По принцип трябва да е запетая.
Обърни внимание дали само текущите стойности не се калкулират, или и графиката, защото текущите стойности ги калкулирам с мой алгоритъм, докато графиката използва алгоритъма на rrdtool, който би трябвало да е доста по-изпипан. Мисля си по-натам да използвам данните от rrdtool за да показвам и текущото състояние, но тогава при пускане на програмата ще трябва да се чака 20 секунди докато се видят данни, което не ми харесва особено, но пък ще отпаднат и допълнителните калкулации при мен.

Между другото открих малък проблем с rrd файла, максималната стойност за всеки пин е 1000, а не 1023, което не знам защо съм го допуснал, т.е. при над 3.22V от пикото данните не се записват и графиките спират да се рисуват. Може да се оправи най-лесно като се изтрие файла и последната версия на програмата (0.61) ще го създаде коректно, или ако искате да не губите старите данни, като свалите този файл и го стартирате в директорията на програмата.


Edit: дааа видях проблема... при теб определено Decimal symbol на windows-а ти е точка, вижда се на скрийншотовете ти. Много тъпа работа, защото този символ се взима в предвид при обработване на данните и за това си виждал онази грешка "Input string was not in the correct format"... как не се сетих. Сега ще видя как да го детектвам този символ и да го конвертирам, че утре някой ще си пусне програмата на Windows, на който е настроен примерно на тире и пак ще гръмне... абе micro$oft-ска работа...
ArturDent - Почти Безобиден
Jacket,
накой ConvertTo.Decimal(String s) ти се дъни. Като гледам screenshot-вете, без да съм инсталирал програмката, много е възможно това да е във формулите.
Големи лай....а са тия сепаратори, лист сепаратор, децимал сепаратор, разделител на хилядите .... пфу... А по принцип ConvertTo., взима сепароторите от настройките на Windows.
Аз лично при стартиране на програма която работи със разните сепаратоти си ги сет-вам на каквито ми трябват. Това само за моята програмка (за сесията), не пипам тези на Windows. След това нямам проблем.
Например лист сепаратора за български настройки е ';' . И Excel, например не успява да отваря правилно CSV, файл в който сепаратора е ',' Нали се сещаш какво става и при децимал сепаратор ',' и при лист сепаратор ','...
П.П. Не го приемай като критика, а като споделяне на опит...
Jacket - специалист
Всяко мнение е добре дошло :) Точно такъв беше проблема, то е ясно, аз го хванах още вчера че се дъни там, защото при мен decimal-а е "," а пък във формулата трябва да е с ".", съответно направих един .Replace(".",","). обаче при den70 символа пък е "." и пак се дъни...
Просто докато се сетя че може да се взима впредвид и locale-то на ОС-а....
Накрая го реших така:

Код: Избери всички

string sep = CultureInfo.CurrentCulture.NumberFormat.NumberDecimalSeparator;
if (sep != ".")
{
    cdef_arr[i] = cdef_arr[i].Replace(".", sep);
}
Има нова версия 0.62 в която вече е фикснато...
Иначе твоето решение да си ги забиеш твърдо при старите на програмата ми звучи още по-добро но ще го тествам по-натам.
den70 - напреднал
Поздравления. Формулите работят. Да при мен Decimal symbol е бил точка. Ако можеш да направиш в таблицата с датчиците ред за контрол на акумулатор /мрежово напрежение/. Нямам идея как ще изглежда на графиката с температурите напрежение 12V. Може би като температура 12 градуса. Видях че си пуснал нова версия. Сега ще я инсталирам и ще ти пиша.

Прикачен файл

2010-03-14_ok.jpg
2010-03-14_ok.jpg (117.04 KиБ) Видяна 4651 пъти
den70 - напреднал
Версия 0.62 работи и с Decimal symbol точка за формулите обаче забива когато и дам генериране на репорт. С Decimal symbol запетая работи и генерирането на репорт.
Jacket - специалист
Оправих и репортите, но преди да пусна новата версия ми кажи на колко преобразуваш 12-те волта, т.е. формулата, за да сложа и нов тип датчик. Ще си изглежда като 12 градуса на графиката, няма иначе как.
ArturDent - Почти Безобиден
Доколкогто си спомням,че нямам кода пред мен, аз си правех собствено CultureInfo, и на всяко четене и записване, го подавах. Ако не се лъжа String.Format(), Decimal.Parse и други подобни "ядяха", като параметър и CultureInfo...
ако ти трябва повече информация, пиши на лични и във вторник мога да изровя кода..
den70 - напреднал
На 12-те волта делителя е 1:5. Входното напрежение на пина на pico-то трябва да се умножи х5 за да показва 12V.
Направих един тест с нагряване на LM335 до 100 градуса. Изпращам ти графиката да видиш колко добре се получи работата на делителя на LM335 и формулата. От графиката много добре се вижда как канала на директния изход на LM335 спира да работи на 57.9 градуса поради достигане на максималната стойност на входа на pico-to 3.3 волта, а канала с делителя продължава да работи без проблеми. Смело може да се използуват евтините LM335 вместо по-скъпите LM35, като бонус от това ще бъде, че ще могат да мерят и отрицателни температури.

Прикачен файл

2010-03-14_100.jpg
2010-03-14_100.jpg (67.98 KиБ) Видяна 5629 пъти
Jacket - специалист
Браво, супер експеримент си направил :)
Аз ще гледам утре да добавя и 12В датчик, но първо искам да направя малко промени по алгоритмите за да може да се дефинират нови датчици лесно.
  • 1
  • 9
  • 10
  • 11
  • 12
  • 13
  • 37

Тема "Температурен мониторинг" | Включи се в дискусията:


Сподели форума:

Бъди информиран. Следвай "Направи сам" във Facebook:

Намери изпълнител и вдъхновения за дома. Следвай MaistorPlus във Facebook: