Отговори на тема  [ 30 мнения ]  Отиди на страница Предишна  1, 2
Стабилно работеща програма за MCU ??? 
Автор Съобщение
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Нед Сеп 26, 2004 4:11 pm
Мнения: 3750
Местоположение: София
Мнение 
Малък hint: не променяй _state където ти падне, а направи за това отделна процедура. От това програмата ще стане по-тежка и по-обемна ( с малко), ще ползва малко повече код, но при дебъгване ще е по-лесно.
Написаното горе не важи за случаите, когато:
-не ползваш дебъгер;
- ползваш дебъгер, който позволява breakpoint при промяна на променлива;
- силно си ограничен откъм ресурси, най-вече стек;


Пет Ное 06, 2009 11:37 am
Профил ICQ
Ранг: Почетен член
Ранг: Почетен член
Аватар

Регистриран на: Нед Окт 19, 2008 7:26 pm
Мнения: 673
Мнение 
Този код разбирам как работи, но за другото казано ще трябва да се поразровя за какво става дума :oops:
Код:
#include <stdio.h>

main()
{
    int c;

    START:
        switch(c = getchar()){
            case 'f' : goto F;
            case 'b' : goto B;
            case EOF : goto FAIL;
            default: goto START; }

    F:
        switch(c = getchar()){
            case 'o' : goto FO;
            case EOF : goto FAIL;
            default  : goto START;}
   
    FO:
        switch(c = getchar()){
            case 'o' : goto SUCCESS;
            case EOF : goto FAIL;
            default  : goto START;}

    B:
        switch(c = getchar()){
            case 'a' : goto BA;
            case EOF : goto FAIL;
            default  : goto START;}

    BA:
        switch(c = getchar()){
            case 'r' : goto SUCCESS;
            case EOF : goto FAIL;
            default  : goto START;}

    FAIL:
        printf("Does not match.\n");
        return;
    SUCCESS:
        printf("Matches.\n");
        return;
}


_________________
Вниманиене съмвишист....ИЙ.


Пет Ное 06, 2009 7:38 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Нед Юли 24, 2005 10:28 am
Мнения: 2658
Мнение 
еми ето ти същия код написан в 10 пъти по-малко памет:
Код:
void ReceiveString(char *buf)
{

   while(1){
       char c=getchar();
       if(c==EOF){*buf=0;return;}
       *buf=c;
       buf++;
   }
}
.................
  char str[32];
  ReceiveString(str);
  if(!strcmp(str,"FOO")||!strcmp(str,"BAR"))
       { printf("Matches.\n"); }
  else
       { printf("Does not match.\n"); }


}


а твоя код ще изглежда много яко при няколко стотин валидни думички :)


Съб Ное 07, 2009 9:30 am
Профил
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Нед Сеп 26, 2004 9:21 pm
Мнения: 30686
Местоположение: София
Мнение 
Зейфод, къде го вкара па в таквоз цикъл у функция ... така пак мое да увисне ...


Нед Ное 08, 2009 10:12 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Нед Юли 24, 2005 10:28 am
Мнения: 2658
Мнение 
е може да увисне, ама кой говори за увисване. просто му показвам как да получи същата функционалност без умопомрачителни дървета.


Пон Ное 09, 2009 9:44 am
Профил
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Сря Яну 26, 2005 2:01 pm
Мнения: 1952
Местоположение: Варна
Мнение 
RM написа:
Има ли някакъв универсален подход за писане на програма, която при неочакван външен фактор, да не отива на кучето в г--а.

Не универсален подход, а по-скоро има добри практики. Например залитането към прекалено много проверки и защити маскира бъгове и ситуации, които е добре да се хванат още при развоя. Излишната параноя - "какво ще стане ако..." е също лош съветник особено ако нямаш опит и се опитваш да се застраховаш срещу всевъзможните страхове, които ти идват в главата. В такъв случай(когато не знаеш какво правиш) и втори и трети процесор да сложиш - все тая. По-скоро ще усложниш нещата с което ще свалиш автоматично надеждноста.

_________________
Най-опасният враг на истината и свободата е мнозинството.


Пет Ное 13, 2009 10:12 am
Профил
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Нед Юли 24, 2005 10:28 am
Мнения: 2658
Мнение 
Zdrav написа:
RM написа:
Има ли някакъв универсален подход за писане на програма, която при неочакван външен фактор, да не отива на кучето в г--а.

Не универсален подход, а по-скоро има добри практики. Например залитането към прекалено много проверки и защити маскира бъгове и ситуации, които е добре да се хванат още при развоя. Излишната параноя - "какво ще стане ако..." е също лош съветник особено ако нямаш опит и се опитваш да се застраховаш срещу всевъзможните страхове, които ти идват в главата. В такъв случай(когато не знаеш какво правиш) и втори и трети процесор да сложиш - все тая. По-скоро ще усложниш нещата с което ще свалиш автоматично надеждноста.

+1
това което си казал е много вярно и далеч не всички опитни разработчици са го осъзнали.


Съб Ное 21, 2009 8:40 am
Профил
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Нед Сеп 26, 2004 9:21 pm
Мнения: 30686
Местоположение: София
Мнение 
zaphod написа:
Zdrav написа:
RM написа:
Има ли някакъв универсален подход за писане на програма, която при неочакван външен фактор, да не отива на кучето в г--а.

Не универсален подход, а по-скоро има добри практики. Например залитането към прекалено много проверки и защити маскира бъгове и ситуации, които е добре да се хванат още при развоя. Излишната параноя - "какво ще стане ако..." е също лош съветник особено ако нямаш опит и се опитваш да се застраховаш срещу всевъзможните страхове, които ти идват в главата. В такъв случай(когато не знаеш какво правиш) и втори и трети процесор да сложиш - все тая. По-скоро ще усложниш нещата с което ще свалиш автоматично надеждноста.

+1
това което си казал е много вярно и далеч не всички опитни разработчици са го осъзнали.


Абе може и така да е, зависи какво правиш, и имаш ли пари и дупе да покриеш щетите, но то е редно ако не знаеш какво правиш да не се хваща човек. В момента имам един елемнтарен контролер за 100 реда код, и този контролер е способен да разкаже играта на 50 хил тона гориво, просто защото управлява една задвижка, тя пък пуска пяна в същия този резервоар ако случайно се запали, друга защита няма защото това е система под налягане и голямата помпа само следи да падне налягането за да почне дабълва пяна и вода в нечовешки количества. Та в тоя случай е много важно да се знае какво става ако стане нещо непредвидено, щото иначе някой трябва да плаща.
Ама това е просто примерче, има контролери за машини с десетки входове и изходи, следящи много параметри, и е недопустимо да не знаеш какво става ако се случи нещо, примерно на фрезата изключи двигателя на шпиндела .....


Съб Ное 21, 2009 10:56 am
Профил
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Съб Юни 24, 2006 8:25 pm
Мнения: 2292
Мнение 
Понякога казвам на мои клиенти (пациенти са де - щом са мръднали толкова много, та се обръщат към мене :D ), че на нещо дето се клати няколко милиона пъти в секундата не вярвам. Чак ги стряскам и рискувам да ги изпъдя. За отговорни неща, колкото в управлението има повече желязо (механика), толкова по-добре. Колкото е по-просто - по-добре. Стига да е възможно.
Не случайно има изискване (стандарт) за новите машини в частта защитата на хората да се осъществява от защитно реле. Това не е едно реле , а релеен модул със схема, която анализира различните опасности. И се прави анализ на схемата какво ще стане, ако едно, две, или три релета релета откажат. Излишно е да споменавам, че продукта е лицензиран и релетата също не са случайни. Та контролерчета не са лошо нещо (евтини, мобилни и удобни за работа, даже и модерни) , но опасните неща трябва да бъдат защитени с нещо желязно.

_________________
Две плюс две е приблизително равно на четири. Факт!


Съб Ное 21, 2009 11:38 am
Профил
Ранг: Почетен член
Ранг: Почетен член
Аватар

Регистриран на: Нед Окт 19, 2008 7:26 pm
Мнения: 673
Мнение 
Решил съм да направя така. В една процедура "State Machine" 8O това дето ще ми приема командите с разделянета на аргументите, ще ми променя само FLAGS структура, без да прави каквито и да било действия.
А друга процедура ще ми следи състоянието на флаговете и ще прави каквото трябва.

_________________
Вниманиене съмвишист....ИЙ.


Съб Ное 21, 2009 2:26 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Нед Сеп 26, 2004 9:21 pm
Мнения: 30686
Местоположение: София
Мнение 
sthx написа:
Понякога казвам на мои клиенти (пациенти са де - щом са мръднали толкова много, та се обръщат към мене :D ), че на нещо дето се клати няколко милиона пъти в секундата не вярвам. Чак ги стряскам и рискувам да ги изпъдя. За отговорни неща, колкото в управлението има повече желязо (механика), толкова по-добре. Колкото е по-просто - по-добре. Стига да е възможно.
Не случайно има изискване (стандарт) за новите машини в частта защитата на хората да се осъществява от защитно реле. Това не е едно реле , а релеен модул със схема, която анализира различните опасности. И се прави анализ на схемата какво ще стане, ако едно, две, или три релета релета откажат. Излишно е да споменавам, че продукта е лицензиран и релетата също не са случайни. Та контролерчета не са лошо нещо (евтини, мобилни и удобни за работа, даже и модерни) , но опасните неща трябва да бъдат защитени с нещо желязно.


Прав си, абсолютгно съгласен, и тия контролерчета за които говоря не бих ги изпозлвал ако не се налага, зад всяко едно стои I/O модул с 10 пъти по висока цена, и цената му е такава просто зашщото е минал всички възможно сертификации и лаборатории че може да се изпозлва в животоспасяващи инсталации, уви тъпите задвижки не могат да работят с постоянен сигнал, т.е. пуска трябва да е импулс, освен това излезе едно изискване за междинно състояние. Та това наложи слагането на това контролерче с две реленца към него. Това което мен най-много ме тревожи не е това че реленцето може да не сработи, защото след като онова I/O каже че задвижката трябва да отвори започва да следи дали е отворила, и ако не е алармира, по ме притеснява да не би това контролерче да реши да я отвори от самосебе си, смущение, някакво непредвидено състояние и др. подобни.

Иначе чисто статистически контролера е доста по надежден от релето, т.е. ако реализираш подобна схема с две релета, надеждноста ще е много по-ниска от тази с контролер, ститистически пресметнато. Изпозлвнето на логика с реле, в зависимост от схемата също може да се получи с по-ниска надеждност.

Практиката показва че много от релетта, дори на реномирани производители дават проблеми, та за съжаление винаги има опасност, без значение има или няма контролерче, тук вече идва и цялостният замисъл, защото ограничавайки се само до съответното контролерче и съответния I/O модул, стигаме до точката в която имаме провал на контролера или на И/О модула, и каквото и да стане няма да се изпълни това което трябва, но планирайки цялостната система се предвиждатг начини това да бъде открито и вероятноста за липса на реакция минимизирана. Като пример се следят задвижките, ако не отворят се известявят значително повече лица, верно стига се до човешки фактор, но пак е по добре от колкот да мислиш че нещо е станало а то да не е. Отделно едн задвижка може да се командва от един, а да се следи от съвсем друг контролер, с цел ако пусковия има провал, следящия да не е същия, но така или иначе при тези системи всяко състояние извън нормата се сигнализира, така че няма как нещо да остане повредено, т.е. релето може да не е сработило, но пък входовете би следвлао да работят.

Както и да е, нещата не са само до писането на софтуера, а до цялостното решение на системата. Има случаи в които както и да се напише, системата винаги да има възможности за провал, които не са под контрола на този който прави конкретен модул, а и винаги има вероятност т провал, въпросът само е каква е тази вероятност.


Съб Ное 21, 2009 3:10 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Съб Юни 24, 2006 8:25 pm
Мнения: 2292
Мнение 
ToHu написа:
Иначе чисто статистически контролера е доста по надежден от релето, т.е. ако реализираш подобна схема с две релета, надеждноста ще е много по-ниска от тази с контролер, ститистически пресметнато. Изпозлвнето на логика с реле, в зависимост от схемата също може да се получи с по-ниска надеждност.


Зависи за каква надеждност иде реч. Ако надеждността е за брой комутационни цикли, транзисторът, или контролерът печелят. Даже и да няма електрическо натоварване релето, пружинките му не издържат след няколко милиона цикъла.
За защита обаче, надеждността се гледа от друга страна - възможност за погрешна комутация и то обикновено - за грешно включване, както е и в твоя случай. Сигурно е възможно, но в моята практика не ми се е случвало скапан силов транзистор да не дава накъсо. При релето обикновено това не е така. Ако нагорят контактите , то не включва. Случвало се е пъпките на контакторите да се завярят при външно късо, но това е съвсем друга ситуация.
Енергията способна да смути процесора, или включи транзистор, осоено МОS е много по-малка от тази за включване на едно реле. Съответно това е отношението на вероятностите за погрешно включване на едната и другата система. Виждал съм светещи светодиоди с две педя жици покрай инветори за асинхронии двигатели.

Твоето устройство е особено. Като се изключат тестовете, то трябва да сработи около един път през живота си. Ако аз го проектирах, за да не се стряскам на сън и да не ме стиска сърцето при всяка гръмотевична буря, бих постъпил поне по следния начин. Изходите за включване на пяната да са поне два, инверсни един спрямо друг. Сумират се с външна логика, може и схемна, може и релейна. Една rc закъснителна верика от порядъка на няколко десети от секундата няма да навреди на работоспособността . Ако системата позволява, едно външно куче не би било излишно да съобщава на който трябва , че устройството е живо. Резервирането на контролера с още един последоватателно или парарелно вързан изход не би подобрило надеждността чувствително - при светкавица и двата вероятно ще се прецакат.
И помисли пак - импулси могат да се цъкат и с релета.

_________________
Две плюс две е приблизително равно на четири. Факт!


Съб Ное 21, 2009 7:06 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Нед Сеп 26, 2004 9:21 pm
Мнения: 30686
Местоположение: София
Мнение 
Импулси могат, ама като сложиш всички подробности става сложно, не са само импулсите, трябва да генерира и средно положение, т.е. функция стоп по сигнал. И това става с релета но ... цялата история там по проект е обречена на много мъки, някои сигнали, и то контролни минават по 1 км кабели, като удари гръмотевица тия задвижки най вероятно ще се задействат дори и нищо да не дойде от релетата. Самите релета дори и да щракнат няма да стане нищо, за да стане трябва да щракне още едно релекоето е локално и е свързано директно с централата.
Тия релета да се цъкнат от смущение през процесора няма как, в смисъл там си има филтри, цифрови, няма как процесора да се ошашави и да сработи релето, в смисъл ако процесора забие някъде няма как да стане, освен ако не скочи там където се цъка, но както казах това само по себе си не може да задейства клапана. Аз лично се притеснявах повече от това че входа на задвижката е оптрон, мойто реле няма да щракне, ама всяка гръмотевица а там раьона хич не е лесен, ще го светка сигурно, а акакво има вътре в тая задвижка еидн господ знае. Аз съм виждал малки релета да се задействат от смущения, верно беше в ретранслатор ама по сериозна гръмотевижа е същото.
За външно куче нямаше как, имаше вариант всеки контролер да се следи, но и това, както и резервираното захранване останаха в историята, както се казва с трици маймуни не се ловят, орязаха ги. В момента ако контролер се преебе по някаква причина никой няма да разбере, единственото успокояващо е че всеки месец всичко се проверява напълно, и освен всичко по важно е да се отчете сигнала от детектора, дори да не сработи автоматично, системата може да се запусне и ръчно, което все пак увелиава надеждността .. ако дежурния не е пиян под масата ...
Вероятноста от фалшиво сработване е по голяма от това да не сработи, старал съм се основно от това да се защитя. Като цяло тия контролери не им е изобщо там мястото, не са сертифицирани за тия цели, и няма нищо сертифицирано, освен това което е в системата, да ама със задвижките ни разказаха играта .... хубавото е че в момента има голяма вероятност да сменят управлението им, т.е. мога и да ги разкарам тия контролери .... лошото е че това което ще сложат също няма да е сертифицирано, и по лошо че за това дето ние сме сложили имам идея какво мога да очаквам, а това което юще го сложи някой друг .......


Съб Ное 21, 2009 8:04 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Вто Яну 20, 2009 11:54 pm
Мнения: 11338
Местоположение: "Занзибар"
Мнение 
Релета в 21-и век 8O

Вие проектирате ама аз оправям и затова ще ви кажа: никакви релета! Контактори в краен случай, без тях все още е трудно, ама те са друга свирка. Най-малко защото съвременните разработчици и хабер си нямат как работи релето.

Пак да напомня най-често срещаните от мен повреди по платките (оправям професинални машини за ресторант/хотел):
1. Близки пътечки за 220В: от мръсотия/влага прави едно "бум" и няколко сантиметра от пистата просто се изпаряват. Пада голямо търкане но обикновено нищо друго не е изгоряло.
2. Контактите на релетата: заради цената им никога не ги презапасяват, пък дори да държат мнооо повече и да имат RC група в паралел при управление на индуктивен товар са бита карта.
3. Необезопасени входове на MCU-то които мерят нещо си.
4. Варисторите поставени за защита и всички останали недообмисляния при проектирането.
5. Дефектни елементи 8O - това при новите машини взе да се появява достатъчно често.

За управление от MCU на изход-реле за 220В БЕЗОТКАЗНО е: преоразмерен симистор (евтин е), паралелно му се слага варистор (да не изгори и той!) и RC група от сорта на 220 Ома/0.5Вт и кондензатор 100нФ/630В. Симисторът се управлява през фотосимисторен оптрон с детекция на нулата.
Горната схема я бях споменал някъде из форума, ще я начертая ако има интерес.

А блокирало MCU в машина все още не сьм видял. Напоследък и пикльовци се срещат и все тая...



Едит да не цапам (напр. sthx отдолу): знам, че е леко офтопик и още по-знам за оставените ръчички в програмирането. Ама аз казах!


Последна промяна bongo_x2 на Съб Ное 21, 2009 11:10 pm, променена общо 2 пъти



Съб Ное 21, 2009 10:20 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Съб Юни 24, 2006 8:25 pm
Мнения: 2292
Мнение 
bongo_x2 написа:
А блокирало MCU в машина все още не сьм видял.


Не си гледал достатъчно. :)

Пък и съвсем друг проблем чепкаме.

_________________
Две плюс две е приблизително равно на четири. Факт!


Съб Ное 21, 2009 10:49 pm
Профил
Покажи мненията от миналия:  Сортирай по  
Отговори на тема   [ 30 мнения ]  Отиди на страница Предишна  1, 2

Кой е на линия

Потребители разглеждащи този форум: 0 регистрирани и 2 госта


Вие не можете да пускате нови теми
Вие не можете да отговаряте на теми
Вие не можете да променяте собственото си мнение
Вие не можете да изтривате собствените си мнения
Вие не можете да прикачвате файл

Търсене:
Иди на:  
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group.
Designed by ST Software for PTF.
Хостинг и Домейни