Děkuji za pomoc. Ano jedná se o výpis z kusu programu. Uvědomil jsem si, že jsem výše nakopíroval jednu z verzí co jsem zkoušel. Konkrétně právě tento řádek "if (rozdil_napeti>=95557&&rozdil_napeti<98982){sys[146]=100}; " Vidím rozdíl v tom, že jsem téměř na konci neudělal středník. Nicméně pokud jsem Vámi upravený if nakopíroval do programu tak mi to hází chybu "507: coding error : error in IF code: > invalid definition for true-IF-result"
Dám sem celý program včetně všech if záznamů který bych potřeboval. V tomto stavu mi to hodí chybu v řádku "361: coding error : invalid declaration found !" Pokud odeberu if až k proud_3400(); tak to hodí chybu u "if (rozdil_napeti>=95557&&rozdil_napeti<98982){sys[146]=100}; " Jinak pokud tento if vymažu tak program funguje tak jak má, ale pouze s omezeným počten if. Berte to, že jsem začátečník. Věřím, že tam najdete zbytečně složitě napsané příkazy.
#define YER sys[7]
#define MON sys[6]
#define DAY sys[5]
#define HRS sys[8]
#define MIN sys[9]
#define SEC sys[10]
#define GMT sys[26]
var napetiAD1, napetiAD1_1, napetiAD1_vypocet, napetiAD1_vypocet1, AD1_konstanta;
var napetiAD3, napetiAD3_1, napetiAD3_vypocet, napetiAD3_vypocet1, AD3_konstanta;
var napeti1, napeti_solar,stred_vypocet, stred_vypocet1, napeti_solar_vypocet, napeti_solar_vypocet1;
var horni, horni_vypocet, horni_vypocet1;
var dolni, dolni_vypocet, dolni_vypocet1;
var stred;
var uz_jsem_poslal_email_pro_rele_1, uz_jsem_poslal_email_pro_rele_1vyp;
var uz_jsem_poslal_email_pro_rele_2, uz_jsem_poslal_email_pro_rele_2vyp;
var cas_sepnuti_rele_1;
var rozdil_napeti, rozdil_napeti1;
var lc,zc,dow,con,coff,CAS,PON1,POF1,PON2,POF2,PON3,POF3,PON4,POF4;
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//Nastavení datumu letní zimní čas.
summer
{
if (( MON > 3 ) && ( MON < 10 )) { GMT = 2; return; }
if (( MON < 3 ) || ( MON > 10 )) { GMT = 1; return; }
if ( MON == 3 )
{
lc = 31 - (( 5 * YER / 4 + 4 ) % 7 );
if ( DAY > lc ) { GMT = 2; return; }
if (( DAY == lc ) && ( HRS >= 2 )) { GMT = 2; }
}
if ( MON == 10 )
{
zc = 31 - (( 5 * YER / 4 + 1 ) % 7 );
if ( DAY > zc ) { GMT = 1; return; }
if (( DAY == zc ) && ( HRS >= 3 )) { GMT = 1; }
}
}
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//pošli email pro relé 1 zap.
posli_email_pro_rele_1
{
smtp_send('lada@trachemyska.cz', 'Zaplo se rele 1',
'Zapnula se nabijecka, protoze napeti na baterii je ',napetiAD1_vypocet,',',napetiAD1_vypocet1,' V a to je min nez nastavena mez ',dolni_vypocet,',',dolni_vypocet1,' V.\n\n',
'Napeti na solarnim panelu je ',napetiAD3_vypocet,',',napetiAD3_vypocet1,' V.\n\n',
'Aktualni cas udalosti je ',DAY,'.',MON,'.',YER,' ',HRS,':',MIN,'.\n\n',
'Odkaz pro kontrolu nastaveni SDS - http://sdszahrada.trachemyska.cz:8091.\n\n');
//zapamatuji si ze uz jsem to poslal, at to neposila milion emailu za sebou
uz_jsem_poslal_email_pro_rele_1 = 1;
}
//pošli email pro relé 1 vyp.
posli_email_pro_rele_1vyp
{
smtp_send('lada@trachemyska.cz', 'Vyplo se rele 1',
'Vypnula se nabijecka, protoze napeti na baterii je ',napetiAD1_vypocet,',',napetiAD1_vypocet1,' V a to je vic nez nastavena horni mez ',horni_vypocet,',',horni_vypocet1,' V.\n\n',
'A nebo napeti na baterii je vetsi nez ',stred_vypocet,',',stred_vypocet1,' V a zaroven na vystupu solarniho panelu je vetsi nez ',napeti_solar_vypocet,',',napeti_solar_vypocet1,' V.\n\n',
'Napeti na solarnim panelu je ',napetiAD3_vypocet,',',napetiAD3_vypocet1,' V.\n\n',
'Aktualni cas udalosti je ',DAY,'.',MON,'.',YER,' ',HRS,':',MIN,'.\n\n',
'Odkaz pro kontrolu nastaveni SDS - http://sdszahrada.trachemyska.cz:8091.\n\n');
//zapamatuji si ze uz jsem to poslal, at to neposila milion emailu za sebou
uz_jsem_poslal_email_pro_rele_1vyp = 1;
}
sepni_rele_1
{
//provede
sys[231] = 1;
//posilal jsem uz ?
if (uz_jsem_poslal_email_pro_rele_1 == 0) posli_email_pro_rele_1();
//povolim poslani emailu pro pristi vypnutí rele 1
uz_jsem_poslal_email_pro_rele_1vyp = 0;
// Nastavím zpoždění aby se mi relé nerozpojilo i když stoupne napětí.
sys[64] = cas_sepnuti_rele_1 * 60; //nastav odpočítávač na X minut (od tohoto okamžiku, kdy do sys[64] zapíšeme hodnotu X)
label cekam1:
if (sys[64] != 0) goto cekam1; //dokud je sys[64] nenulové (neuplynuly nastavené X minut), skoč na label "cekam"
}
vypni_rele_1
{
//provede
sys[231] = 0;
//posilal jsem uz ?
if (uz_jsem_poslal_email_pro_rele_1vyp == 0) posli_email_pro_rele_1vyp();
//povolim poslani emailu pro pristi sepnuti rele 1
uz_jsem_poslal_email_pro_rele_1 = 0;
}
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//pošli email pro relé 2 zap.
posli_email_pro_rele_2
{
smtp_send('lada@trachemyska.cz', 'Zaplo se rele 2',
'Prepla se spotreba na nizky tarif.\n\n',
'Aktualni cas udalosti je ',DAY,'.',MON,'.',YER,' ',HRS,':',MIN,'.\n\n',
'Odkaz pro kontrolu nastaveni SDS - http://sdszahrada.trachemyska.cz:8091.\n\n');
//zapamatuji si ze uz jsem to poslal, at to neposila milion emailu za sebou
uz_jsem_poslal_email_pro_rele_2 = 1;
}
//pošli email pro relé 1 vyp.
posli_email_pro_rele_2vyp
{
smtp_send('lada@trachemyska.cz', 'Vyplo se rele 2',
'Prepla se spotreba na vysoky tarif.\n\n',
'Aktualni cas udalosti je ',DAY,'.',MON,'.',YER,' ',HRS,':',MIN,'.\n\n',
'Odkaz pro kontrolu nastaveni SDS - http://sdszahrada.trachemyska.cz:8091.\n\n');
//zapamatuji si ze uz jsem to poslal, at to neposila milion emailu za sebou
uz_jsem_poslal_email_pro_rele_2vyp = 1;
}
sepni_rele_2
{
//provede
sys[232] = 1;
//posilal jsem uz ?
if (uz_jsem_poslal_email_pro_rele_2 == 0) posli_email_pro_rele_2();
//povolim poslani emailu pro pristi vypnutí rele 1
uz_jsem_poslal_email_pro_rele_2vyp = 0;
}
vypni_rele_2
{
//provede
sys[232] = 0;
//posilal jsem uz ?
if (uz_jsem_poslal_email_pro_rele_2vyp == 0) posli_email_pro_rele_2vyp();
//povolim poslani emailu pro pristi sepnuti rele 1
uz_jsem_poslal_email_pro_rele_2 = 0;
}
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
proud_0
{
sys[146] = 8888;
}
proud_250
{
sys[146]=250;
}
proud_400
{
sys[146]=400;
}
proud_550
{
sys[146]=550;
}
proud_700
{
sys[146]=700;
}
proud_850
{
sys[146]=850;
}
proud_1000
{
sys[146]=1000;
}
proud_1150
{
sys[146]=1150;
}
proud_1300
{
sys[146]=1300;
}
proud_1450
{
sys[146]=1450;
}
proud_1600
{
sys[146]=1600;
}
proud_1750
{
sys[146]=1750;
}
proud_1900
{
sys[146]=1900;
}
proud_2050
{
sys[146]=2050;
}
proud_2200
{
sys[146]=2200;
}
proud_2350
{
sys[146]=2350;
}
proud_2500
{
sys[146]=2500;
}
proud_2650
{
sys[146]=2650;
}
proud_2800
{
sys[146]=2800;
}
proud_2950
{
sys[146]=2950;
}
proud_3100
{
sys[146]=3100;
}
proud_3250
{
sys[146]=3250;
}
proud_3400
{
sys[146]=3400;
}
proud_3550
{
sys[146]=3550;
}
proud_3700
{
sys[146]=3700;
}
proud_3850
{
sys[146]=3850;
}
proud_4000
{
sys[146]=4000;
}
proud_4150
{
sys[146]=4150;
}
proud_4300
{
sys[146]=4300;
}
proud_4450
{
sys[146]=4450;
}
proud_4600
{
sys[146]=4600;
}
proud_4750
{
sys[146]=4750;
}
proud_4900
{
sys[146]=4900;
}
proud_5050
{
sys[146]=5050;
}
proud_5200
{
sys[146]=5200;
}
proud_5350
{
sys[146]=5350;
}
proud_5500
{
sys[146]=5500;
}
proud_5650
{
sys[146]=5650;
}
proud_5800
{
sys[146]=5800;
}
proud_5950
{
sys[146]=5950;
}
proud_6100
{
sys[146]=6100;
}
proud_6250
{
sys[146]=6250;
}
proud_6400
{
sys[146]=6400;
}
proud_6550
{
sys[146]=6550;
}
proud_6700
{
sys[146]=6700;
}
proud_6850
{
sys[146]=6850;
}
proud_7000
{
sys[146]=7000;
}
proud_7150
{
sys[146]=7150;
}
proud_7300
{
sys[146]=7300;
}
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
main
{
//vychozi stav
vypni_rele_1();
vypni_rele_2();
summer(); //korekce casu podle aktualniho datumu
echoclear(0); //smazeme konzolu ovladani();
// Nastavení při startu proměnných
sys[140] = 390;
sys[141] = 462;
sys[142] = 446;
sys[143] = 460;
sys[144] = 1;
//pockame 20 sekund, az nabehne cely system
wait(20000);
//------------------------------------------------------------
//hlavni smycka, ve ktere se vykonava proces
label smycka_rizeni:
dow = ((sys[4] / 86400) + 4) % 7;
//udelame z casu cislo HHMM
CAS=HRS*100+MIN;
//prevezmeme pozadavky na napětí V
dolni = sys[140]; //mez kdy má zapnout relé pro nabíjení
horni = sys[141]; //mez kdy má vypnout relé nabirá baterie
stred = sys[142]; // mez kdy se má vypnout relé pro nabíjení pokud je překročena hodnota na napeti_solar
napeti_solar = sys[143]; // napětí soláru kdy se má vypnout relé pro nabíjení baterie
cas_sepnuti_rele_1 = sys[144]; // zadat čas v minutách pro zpoždění relé 1
dolni_vypocet = ((dolni * 100) / (AD1_konstanta)); // vynásobit 100 aby bylo možno dělit celou nedělenou konstantou
dolni_vypocet1 = ((dolni * 10000) / (AD1_konstanta)) % 100; // zobrazení cifry za desetinou čárkou
horni_vypocet = ((horni * 100) / (AD1_konstanta)); // vynásobit 100 aby bylo možno dělit celou nedělenou konstantou
horni_vypocet1 = ((horni * 10000) / (AD1_konstanta)) % 100; // zobrazení cifry za desetinou čárkou
stred_vypocet = ((stred * 100) / (AD1_konstanta)); // vynásobit 100 aby bylo možno dělit celou nedělenou konstantou
stred_vypocet1 = ((stred * 10000) / (AD1_konstanta)) % 100; // zobrazení cifry za desetinou čárkou
napeti_solar_vypocet = ((napeti_solar * 100) / (AD3_konstanta)); // vynásobit 100 aby bylo možno dělit celou nedělenou konstantou
napeti_solar_vypocet1 = ((napeti_solar * 10000) / (AD3_konstanta)) % 100; // zobrazení cifry za desetinou čárkou
//napětí je bráno z cidla AD1 = sys[431]
napetiAD1 = sys[431];
napetiAD1_1 = napetiAD1 * 100;
AD1_konstanta = sys[436];
napetiAD1_vypocet = napetiAD1 / (AD1_konstanta / 100);
napetiAD1_vypocet1 = ((napetiAD1 * 10000 / (AD1_konstanta)) % 100; // zobrazení cifry za desetinou čárkou
//napětí je bráno z cidla AD3 = sys[433]
napetiAD3 = sys[433];
napetiAD3_1 = napetiAD3 * 100;
AD3_konstanta = sys[444];
napetiAD3_vypocet = napetiAD3 / (AD3_konstanta / 100);
napetiAD3_vypocet1 = ((napetiAD3 * 10000 / (AD3_konstanta)) % 100; // zobrazení cifry za desetinou čárkou
//podle aktualniho napětí se rozhodnu
if (napetiAD1 < dolni) sepni_rele_1();
if ((napetiAD1 > stred) && (napetiAD3 > napeti_solar)) vypni_rele_1();
if (napetiAD1 > horni) vypni_rele_1();
//Nastavení časového úseku pro nízký tarif relé 2
PON1=1159; POF1=2359; //Páte zap
PON2=0; POF2=2359; //Sobota zap
PON3=0; POF3=2159; //Neděle zap
//Přepínání mezi vysokým a nízkým tarifem.
if ((CAS>=PON1 && CAS<=POF1) && (dow==5)) sepni_rele_2();
if ((CAS>=PON2 && CAS<=POF2) && (dow==6)) sepni_rele_2();
if ((CAS>=PON3 && CAS<=POF3) && (dow==0)) sepni_rele_2();
if ((CAS<PON1) && (dow==5)) vypni_rele_2();
if ((CAS>POF3) && (dow==0)) vypni_rele_2();
if (dow==1) vypni_rele_2();
if (dow==2) vypni_rele_2();
if (dow==3) vypni_rele_2();
if (dow==4) vypni_rele_2();
//Výpočet pro zobrazení proudu ze solárního panelu////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//Vypočítám rozdíl mezi napětím AD1 (napětí baterie) a AD3 (napětí na solárním panelu)
rozdil_napeti = (napetiAD3 - napetiAD1)*10000;
rozdil_napeti1 = (rozdil_napeti * 10) / AD1_konstanta;
sys[145] = rozdil_napeti1;
if (rozdil_napeti<955575)proud_0();
if (rozdil_napeti>=95557&&rozdil_napeti<98982){sys[146]=100;};
if (rozdil_napeti>=989825&&rozdil_napeti<1024075)proud_250();
if (rozdil_napeti>=1024075&&rozdil_napeti<1058325)proud_400();
if (rozdil_napeti>=1058325&&rozdil_napeti<1092575)proud_550();
if (rozdil_napeti>=1092575&&rozdil_napeti<1126825)proud_700();
if (rozdil_napeti>=1126825&&rozdil_napeti<1161075)proud_850();
if (rozdil_napeti>=1161075&&rozdil_napeti<1195325)proud_1000();
if (rozdil_napeti>=1195325&&rozdil_napeti<1229575)proud_1150();
if (rozdil_napeti>=1229575&&rozdil_napeti<1263825)proud_1300();
if (rozdil_napeti>=1263825&&rozdil_napeti<1298075)proud_1450();
if (rozdil_napeti>=1298075&&rozdil_napeti<1332325)proud_1600();
if (rozdil_napeti>=1332325&&rozdil_napeti<1366575)proud_1750();
if (rozdil_napeti>=1366575&&rozdil_napeti<1400825)proud_1900();
if (rozdil_napeti>=1400825&&rozdil_napeti<1435075)proud_2050();
if (rozdil_napeti>=1435075&&rozdil_napeti<1469325)proud_2200();
if (rozdil_napeti>=1469325&&rozdil_napeti<1503575)proud_2350();
if (rozdil_napeti>=1503575&&rozdil_napeti<1537825)proud_2500();
if (rozdil_napeti>=1537825&&rozdil_napeti<1572075)proud_2650();
if (rozdil_napeti>=1572075&&rozdil_napeti<1606325)proud_2800();
if (rozdil_napeti>=1606325&&rozdil_napeti<1640575)proud_2950();
if (rozdil_napeti>=1640575&&rozdil_napeti<1674825)proud_3100();
if (rozdil_napeti>=1674825&&rozdil_napeti<1709075)proud_3250();
if (rozdil_napeti>=1709075&&rozdil_napeti<1743325)proud_3400();
if (rozdil_napeti>=1743325&&rozdil_napeti<1777575)proud_3550();
if (rozdil_napeti>=1777575&&rozdil_napeti<1811825)proud_3700();
if (rozdil_napeti>=1811825&&rozdil_napeti<1846075)proud_3850();
if (rozdil_napeti>=1846075&&rozdil_napeti<1880325)proud_4000();
if (rozdil_napeti>=1880325&&rozdil_napeti<1914575)proud_4150();
if (rozdil_napeti>=1914575&&rozdil_napeti<1948825)proud_4300();
if (rozdil_napeti>=1948825&&rozdil_napeti<1983075)proud_4450();
if (rozdil_napeti>=1983075&&rozdil_napeti<2017325)proud_4600();
if (rozdil_napeti>=2017325&&rozdil_napeti<2051575)proud_4750();
if (rozdil_napeti>=2051575&&rozdil_napeti<2085825)proud_4900();
if (rozdil_napeti>=2085825&&rozdil_napeti<2120075)proud_5050();
if (rozdil_napeti>=2120075&&rozdil_napeti<2154325)proud_5200();
if (rozdil_napeti>=2154325&&rozdil_napeti<2188575)proud_5350();
if (rozdil_napeti>=2188575&&rozdil_napeti<2222825)proud_5500();
if (rozdil_napeti>=2222825&&rozdil_napeti<2257075)proud_5650();
if (rozdil_napeti>=2257075&&rozdil_napeti<2291325)proud_5800();
if (rozdil_napeti>=2291325&&rozdil_napeti<2325575)proud_5950();
if (rozdil_napeti>=2325575&&rozdil_napeti<2359825)proud_6100();
if (rozdil_napeti>=2359825&&rozdil_napeti<2394075)proud_6250();
if (rozdil_napeti>=2394075&&rozdil_napeti<2428325)proud_6400();
if (rozdil_napeti>=2428325&&rozdil_napeti<2462575)proud_6550();
if (rozdil_napeti>=2462575&&rozdil_napeti<2496825)proud_6700();
if (rozdil_napeti>=2496825&&rozdil_napeti<2531075)proud_6850();
if (rozdil_napeti>=2531075&&rozdil_napeti<2565325)proud_7000();
if (rozdil_napeti>=2565325&&rozdil_napeti<2599575)proud_7150();
if (rozdil_napeti>2633825)proud_7300();
//a porad dokola
goto smycka_rizeni;
}
init
{
echo('Start programu.');
}