Programmbaustein anlegen, diesen Code reinkopieren:
#define BUFF_SIZE 1500
#define RD_BLOCK_SIZE 4
char szTmpBuffer;
int nCnt;
int nBytesReceived = 0;
int i = 0;
unsigned char szBuffer[1500];
int nLen;
int wert1;
int wert2;
int wert3;
int wert4;
float vorlauf;
float ruecklauf;
float ruecklauf_soll;
float ruecklauf_ext;
float heizgas;
float aussentemperatur;
float soletemperaturEIN;
float soletemperaturAUS;
float MischkreisFBH;
float MischkreisFBHsoll;
float Wassertasche;
float Solarspeicher;
float brauchwasser;
float Status;
float WMZHeiz;
float WMZWW;
float WMZPV;
while(TRUE)
{
STREAM* stream = stream_create("/dev/tcp/192.168.178.50/8888",0,0);
if (stream != NULL)
{
i=0;
printf("Novelan READ");
szBuffer[0] = 0x00;
szBuffer[1] = 0x00;
szBuffer[2] = 0x0b;
szBuffer[3] = 0xbc;
stream_write(stream,szBuffer,4);
stream_flush(stream);
printf("Stream 3004");
szBuffer[0] = 0x00;
szBuffer[1] = 0x00;
szBuffer[2] = 0x00;
szBuffer[3] = 0x00;
stream_write(stream,szBuffer,4);
stream_flush(stream);
printf("Stream 0");
nLen = stream_read(stream,szBuffer,4,1000);
printf("Read Feedback");
printf("Novelan Len=%d",nLen);
nLen = stream_read(stream,szBuffer,4,1000);
printf("Read Status");
printf("Novelan Len=%d",nLen);
nLen = stream_read(stream,szBuffer,4,1000);
printf("Read Länge");
printf("Novelan Len=%d",nLen);
nLen = stream_read(stream,szBuffer,sizeof(szBuffer),1000) ;
printf("Novelan Len=%d",nLen);
stream_close(stream);
printf("Novelan 40= %d",szBuffer[40]);
szTmpBuffer=(szBuffer[40]);
wert1=(szTmpBuffer);
printf("Novelan 41= %d",szBuffer[41]);
szTmpBuffer=(szBuffer[41]);
wert2=(szTmpBuffer);
printf("Novelan 42= %d",szBuffer[42]);
szTmpBuffer=(szBuffer[42]);
wert3=(szTmpBuffer);
printf("Novelan 43= %d",szBuffer[43]);
szTmpBuffer=(szBuffer[43]);
wert4=(szTmpBuffer);
vorlauf=(wert1*256*256*256+wert2*256*256+wert3*256 +wert4)*0.1;
printf("Novelan Vorlauf= %f",vorlauf);
printf("Novelan 44= %d",szBuffer[44]);
szTmpBuffer=(szBuffer[44]);
wert1=(szTmpBuffer);
printf("Novelan 45= %d",szBuffer[45]);
szTmpBuffer=(szBuffer[45]);
wert2=(szTmpBuffer);
printf("Novelan 46= %d",szBuffer[46]);
szTmpBuffer=(szBuffer[46]);
wert3=(szTmpBuffer);
printf("Novelan 47= %d",szBuffer[47]);
szTmpBuffer=(szBuffer[47]);
wert4=(szTmpBuffer);
ruecklauf=(wert1*256*256*256+wert2*256*256+wert3*2 56+wert4)*0.1;
printf("Novelan Rücklauf= %f",ruecklauf);
printf("Novelan 48= %d",szBuffer[48]);
szTmpBuffer=(szBuffer[48]);
wert1=(szTmpBuffer);
printf("Novelan 49= %d",szBuffer[49]);
szTmpBuffer=(szBuffer[49]);
wert2=(szTmpBuffer);
printf("Novelan 50= %d",szBuffer[50]);
szTmpBuffer=(szBuffer[50]);
wert3=(szTmpBuffer);
printf("Novelan 51= %d",szBuffer[51]);
szTmpBuffer=(szBuffer[51]);
wert4=(szTmpBuffer);
ruecklauf_soll=(wert1*256*256*256+wert2*256*256+we rt3*256+wert4)*0.1;
printf("Novelan Rcklauf= %f",ruecklauf_soll);
printf("Novelan 52= %d",szBuffer[52]);
szTmpBuffer=(szBuffer[52]);
wert1=(szTmpBuffer);
printf("Novelan 53= %d",szBuffer[53]);
szTmpBuffer=(szBuffer[53]);
wert2=(szTmpBuffer);
printf("Novelan 54= %d",szBuffer[54]);
szTmpBuffer=(szBuffer[54]);
wert3=(szTmpBuffer);
printf("Novelan 55= %d",szBuffer[55]);
szTmpBuffer=(szBuffer[55]);
wert4=(szTmpBuffer);
ruecklauf_ext=(wert1*256*256*256+wert2*256*256+wer t3*256+wert4)*0.1;
printf("Novelan ruecklauf_ext= %f",ruecklauf_ext);
printf("Novelan 56= %d",szBuffer[56]);
szTmpBuffer=(szBuffer[56]);
wert1=(szTmpBuffer);
printf("Novelan 57= %d",szBuffer[57]);
szTmpBuffer=(szBuffer[57]);
wert2=(szTmpBuffer);
printf("Novelan 58= %d",szBuffer[58]);
szTmpBuffer=(szBuffer[58]);
wert3=(szTmpBuffer);
printf("Novelan 59= %d",szBuffer[59]);
szTmpBuffer=(szBuffer[59]);
wert4=(szTmpBuffer);
heizgas=(wert1*256*256*256+wert2*256*256+wert3*256 +wert4)*0.1;
printf("Novelan heizgas= %f",heizgas);
printf("Novelan 60= %d",szBuffer[60]);
szTmpBuffer=(szBuffer[60]);
wert1=(szTmpBuffer);
printf("Novelan 61= %d",szBuffer[61]);
szTmpBuffer=(szBuffer[61]);
wert2=(szTmpBuffer);
printf("Novelan 62= %d",szBuffer[62]);
szTmpBuffer=(szBuffer[62]);
wert3=(szTmpBuffer);
printf("Novelan 63= %d",szBuffer[63]);
szTmpBuffer=(szBuffer[63]);
wert4=(szTmpBuffer);
aussentemperatur=(wert1*256*256*256+wert2*256*256+ wert3*256+wert4)*0.1;
printf("Novelan aussentemperatur= %f",aussentemperatur);
printf("Novelan 68= %d",szBuffer[68]);
szTmpBuffer=(szBuffer[68]);
wert1=(szTmpBuffer);
printf("Novelan 69= %d",szBuffer[69]);
szTmpBuffer=(szBuffer[69]);
wert2=(szTmpBuffer);
printf("Novelan 70= %d",szBuffer[70]);
szTmpBuffer=(szBuffer[70]);
wert3=(szTmpBuffer);
printf("Novelan 71= %d",szBuffer[71]);
szTmpBuffer=(szBuffer[71]);
wert4=(szTmpBuffer);
brauchwasser=(wert1*256*256*256+wert2*256*256+wert 3*256+wert4)*0.1;
printf("Novelan Brauchwassertemp.= %f",brauchwasser);
printf("Novelan 76= %d",szBuffer[76]);
szTmpBuffer=(szBuffer[76]);
wert1=(szTmpBuffer);
printf("Novelan 77= %d",szBuffer[77]);
szTmpBuffer=(szBuffer[77]);
wert2=(szTmpBuffer);
printf("Novelan 78= %d",szBuffer[78]);
szTmpBuffer=(szBuffer[78]);
wert3=(szTmpBuffer);
printf("Novelan 79= %d",szBuffer[79]);
szTmpBuffer=(szBuffer[79]);
wert4=(szTmpBuffer);
soletemperaturEIN=(wert1*256*256*256+wert2*256*256 +wert3*256+wert4)*0.1;
printf("Novelan soletemperaturEIN= %f",soletemperaturEIN);
printf("Novelan 80= %d",szBuffer[80]);
szTmpBuffer=(szBuffer[80]);
wert1=(szTmpBuffer);
printf("Novelan 81= %d",szBuffer[81]);
szTmpBuffer=(szBuffer[81]);
wert2=(szTmpBuffer);
printf("Novelan 82= %d",szBuffer[82]);
szTmpBuffer=(szBuffer[82]);
wert3=(szTmpBuffer);
printf("Novelan 83= %d",szBuffer[83]);
szTmpBuffer=(szBuffer[83]);
wert4=(szTmpBuffer);
soletemperaturAUS=(wert1*256*256*256+wert2*256*256 +wert3*256+wert4)*0.1;
printf("Novelan soletemperaturAUS= %f",soletemperaturAUS);
printf("Novelan 84= %d",szBuffer[84]);
szTmpBuffer=(szBuffer[84]);
wert1=(szTmpBuffer);
printf("Novelan 85= %d",szBuffer[85]);
szTmpBuffer=(szBuffer[85]);
wert2=(szTmpBuffer);
printf("Novelan 86= %d",szBuffer[86]);
szTmpBuffer=(szBuffer[86]);
wert3=(szTmpBuffer);
printf("Novelan 87= %d",szBuffer[87]);
szTmpBuffer=(szBuffer[87]);
wert4=(szTmpBuffer);
MischkreisFBH=(wert1*256*256*256+wert2*256*256+wer t3*256+wert4)*0.1;
printf("Novelan MischkreisFBH= %f",MischkreisFBH);
printf("Novelan 88= %d",szBuffer[88]);
szTmpBuffer=(szBuffer[88]);
wert1=(szTmpBuffer);
printf("Novelan 89= %d",szBuffer[89]);
szTmpBuffer=(szBuffer[89]);
wert2=(szTmpBuffer);
printf("Novelan 90= %d",szBuffer[90]);
szTmpBuffer=(szBuffer[90]);
wert3=(szTmpBuffer);
printf("Novelan 91= %d",szBuffer[91]);
szTmpBuffer=(szBuffer[91]);
wert4=(szTmpBuffer);
MischkreisFBHsoll=(wert1*256*256*256+wert2*256*256 +wert3*256+wert4)*0.1;
printf("Novelan MischkreisFBHsoll= %f",MischkreisFBHsoll);
printf("Novelan 104= %d",szBuffer[104]);
szTmpBuffer=(szBuffer[104]);
wert1=(szTmpBuffer);
printf("Novelan 105= %d",szBuffer[105]);
szTmpBuffer=(szBuffer[105]);
wert2=(szTmpBuffer);
printf("Novelan 106= %d",szBuffer[106]);
szTmpBuffer=(szBuffer[106]);
wert3=(szTmpBuffer);
printf("Novelan 107= %d",szBuffer[107]);
szTmpBuffer=(szBuffer[107]);
wert4=(szTmpBuffer);
Wassertasche=(wert1*256*256*256+wert2*256*256+wert 3*256+wert4)*0.1;
printf("Novelan Wassertasche= %f",Wassertasche);
printf("Novelan 108= %d",szBuffer[108]);
szTmpBuffer=(szBuffer[108]);
wert1=(szTmpBuffer);
printf("Novelan 109= %d",szBuffer[109]);
szTmpBuffer=(szBuffer[109]);
wert2=(szTmpBuffer);
printf("Novelan 110= %d",szBuffer[110]);
szTmpBuffer=(szBuffer[110]);
wert3=(szTmpBuffer);
printf("Novelan 111= %d",szBuffer[111]);
szTmpBuffer=(szBuffer[111]);
wert4=(szTmpBuffer);
Solarspeicher=(wert1*256*256*256+wert2*256*256+wer t3*256+wert4)*0.1;
printf("Novelan Solarspeicher= %f",Solarspeicher);
printf("Novelan 476= %d",szBuffer[476]);
szTmpBuffer=(szBuffer[476]);
wert1=(szTmpBuffer);
printf("Novelan 477= %d",szBuffer[477]);
szTmpBuffer=(szBuffer[477]);
wert2=(szTmpBuffer);
printf("Novelan 478= %d",szBuffer[478]);
szTmpBuffer=(szBuffer[478]);
wert3=(szTmpBuffer);
printf("Novelan 479= %d",szBuffer[479]);
szTmpBuffer=(szBuffer[479]);
wert4=(szTmpBuffer);
Status=(wert1*256*256*256+wert2*256*256+wert3*256+ wert4);
printf("Novelan Status= %f",Status);
printf("Novelan 604= %d",szBuffer[604]);
szTmpBuffer=(szBuffer[604]);
wert1=(szTmpBuffer);
printf("Novelan 605= %d",szBuffer[605]);
szTmpBuffer=(szBuffer[605]);
wert2=(szTmpBuffer);
printf("Novelan 606= %d",szBuffer[606]);
szTmpBuffer=(szBuffer[606]);
wert3=(szTmpBuffer);
printf("Novelan 607= %d",szBuffer[607]);
szTmpBuffer=(szBuffer[607]);
wert4=(szTmpBuffer);
WMZHeiz=(wert1*256*256*256+wert2*256*256+wert3*256 +wert4)*0.1;
printf("Novelan WMZHeiz= %f",WMZHeiz);
printf("Novelan 608= %d",szBuffer[608]);
szTmpBuffer=(szBuffer[608]);
wert1=(szTmpBuffer);
printf("Novelan 609= %d",szBuffer[609]);
szTmpBuffer=(szBuffer[609]);
wert2=(szTmpBuffer);
printf("Novelan 610= %d",szBuffer[610]);
szTmpBuffer=(szBuffer[610]);
wert3=(szTmpBuffer);
printf("Novelan 611= %d",szBuffer[611]);
szTmpBuffer=(szBuffer[611]);
wert4=(szTmpBuffer);
WMZWW=(wert1*256*256*256+wert2*256*256+wert3*256+w ert4)*0.1;
printf("Novelan WMZWW= %f",WMZWW);
printf("Novelan 612= %d",szBuffer[612]);
szTmpBuffer=(szBuffer[612]);
wert1=(szTmpBuffer);
printf("Novelan 613= %d",szBuffer[613]);
szTmpBuffer=(szBuffer[613]);
wert2=(szTmpBuffer);
printf("Novelan 614= %d",szBuffer[614]);
szTmpBuffer=(szBuffer[614]);
wert3=(szTmpBuffer);
printf("Novelan 615= %d",szBuffer[615]);
szTmpBuffer=(szBuffer[615]);
wert4=(szTmpBuffer);
WMZPV=(wert1*256*256*256+wert2*256*256+wert3*256+w ert4)*0.1;
printf("Novelan WMZPV= %f",WMZPV);
setio("VI12",vorlauf);
setio("VI9",ruecklauf);
setio("VI25",ruecklauf_soll);
setio("VI26",ruecklauf_ext);
setio("VI28",heizgas);
setio("VI24",aussentemperatur);
setio("VI15",soletemperaturEIN);
setio("VI27",soletemperaturAUS);
setio("VI14",Status);
setio("VI13",brauchwasser);
setio("VI17",MischkreisFBH);
setio("VI18",MischkreisFBHsoll);
setio("VI19",Wassertasche);
setio("VI20",Solarspeicher);
setio("VI21",WMZHeiz);
setio("VI22",WMZWW);
setio("VI23",WMZPV);
setio("VI32",1);
}
else
{
printf("Novelan no connection");
setio("VI32",0);
}
sleeps(60); // wait 60 second
}
- IP Adresse anpassen!!
-Virtuelle Eingänge anlegen, Anschluss über dessen Eigenschaftsfenster kontrollieren und ebenfalls im Programmcode anpassen (VIxx, ganz unten im Code)
-Virtuellen Eingang dann direkt in die Visualisierung packen oder so wie ich über einen analogen Statuswert
Sicherlich hat das alles noch Potential, allerdings hab ich mich als absoluter Noob erstmal in das Programmiergedöns einarbeiten/reindenken müssen. Mit etwas Hirnschmalz bin ich vom schon ziemlich fehlerbefallenen "Urcode" hier gelandet. Wenn ich etwas mehr Zeit habe (evtl. kommenden Herbst :-)) pack ich eventuell noch ein paar Werte mit rein. Ich denke darauf kann der in oder andere jetzt mal aufbauen und hier evlt. seine Erfahrung kund tun...
In der angehängten TXT sind alle auslesbaren Parameter aufgeführt, im Screenshot seht ihr meine aktuelle "AIT Testseite" und wie das ganze dann in der Visu rüber kommt...
...es gibt noch weitere Werte aus der Steuerung, welche für mich aktuell allerdings nicht interessant sind! Bisher lese ich nur Temperaturen und den Betriebszustand aus und steuere über eine Diff.-Temperatur-Steuerung meine Umwälzpumpe vom Holzkamin mit Wassertasche (Temperaturen hole ich ebenfalls über die Luxtronik Sensoren).
Kommentar