<html>
<head>
<meta content="text/html; charset=windows-1252"
http-equiv="Content-Type">
</head>
<body smarttemplateinserted="true" text="#000000" bgcolor="#FFFFFF">
<div id="smartTemplate4-template">Hallo,<br>
<br>
aufbauend auf Reinhards Version gibt es folgende Änderungen in
MeterD0.cpp:<br>
1. Starterkennungssequenz "/" angepasst, da "/" auch im
value-String vorkommen kann. (Siemens TD-3511)<br>
2. "case END_LINE:" Neben "1" u. "2" soll auch "C" ausgewertet
werden um Spannungsfehler ermitteln zu können. (wird von Wolfgang
genutzt)<br>
3. Endeerkennungssequenz "!" angepasst, da manche Zähler die
Pullsequenz noch einmal ausgeben. (L&G ZMD120)<br>
<br>
Ich hoffe, dass damit auch andere D0-Zähler, die laut Wiki mit
eigenen Skripts arbeiten, wieder mit dem vzlogger funktionieren.
Danke an Wolfgang für die Unterstützung und Tests.<br>
<br>
Kann jemand die src/protocols/MeterD0.cpp und
include/protocols/MeterD0.hpp (s. Anhang) ins git mit neuer
vzlogger Version übernehmen?<br>
<br>
Danke und Gruß<br>
Karlheinz<br>
<br>
<br>
------- Original Nachricht --------<br>
Betreff: *** GMX Spamverdacht *** Re: [vz-dev] vzlogger
MeterD0.cpp Master branch parity<br>
Von: Reinhard Wilzeck <a class="moz-txt-link-rfc2396E"
href="mailto:reinhard@wilzeck.de"><reinhard@wilzeck.de></a><br>
An: volkszaehler.org<br>
Datum: Sonntag, 22. Dezember 2013 16:56:09<font size="-1"> </font></div>
<br>
<blockquote cite="mid:52B70B99.2060905@wilzeck.de" type="cite">Hallo,
<br>
seit einigen Wochen läuft meine Version mit dem Zähler Landis+Gyr
E350 EDL21 mit 300baud nun stabil. <br>
<br>
Was ich ergänzt habe: <br>
1) Fehler beim Setzen des parity korrigiert. (RTS/CTS) <br>
2) Der Landis+Gyr E350 braucht einen Acknowledge. Der kann über
die vzlogger.conf nun konfiguriert werden. <br>
"ackseq": "063030300d0a", <br>
Aufbau: $06 ist ein Startzeichen, die nachfolgenden '000' sind 300
baud.' 040' wäre 4800baud. 0d0a sind die üblichen CR LF <br>
3) Schnittstelle so konfiguriert, dass nach 5s ein timeout kommt
und diesen ausgewertet. (der read kommt dann mit 0 zurück) <br>
tio.c_cc[VTIME] = 50; /* inter-character timer
50*0.1s*/ <br>
tio.c_cc[VMIN] = 0; /* VTIME is timeout counter */
<br>
<br>
4) Baudrate umschalten. Kann nun konfiguriert werden. (Im Prinzip
müßte es gehen, praktisch bekomme ich von meinem Zähler dann keine
Antwort. Vielleicht kann es mal jemand testen oder mir sagen warum
es nicht geht. ) <br>
"baudrate_read":300 setzt die Schnittstelle über <br>
cfsetispeed(&tio, baudrate_read);
<br>
tcsetattr(_fd, TCSANOW, &tio); <br>
auf die neue baudrate (nur die Empfangsrichtung) <br>
<br>
Die Einträge in der vzlogger.conf für einen Acknowledge ohne
baudraten umschalten sehen dann so aus: <br>
"protocol" : "d0", /* see 'vzlogger -h' for list of
available protocols */ <br>
"device" : "/dev/ttyUSB0", <br>
"enabled": true, <br>
"parity": "7e1", <br>
"baudrate":300, <br>
"baudrate_read":300, <br>
"pullseq":"2f3f210d0a", <br>
"ackseq": "063030300d0a", <br>
"interval": 60, <br>
"channels": [{ <br>
... <br>
}] <br>
Fehlen die zusätzlichen Einträge, ist die entsprechende Funktion
inaktiv. (kompatible Erweiterung) <br>
<br>
5) Filter auf die empfangenen OBIS Codes, da sonst Absturz. <br>
<br>
case OBIS_CODE: <br>
if ((byte != '\n') && (byte !=
'\r')&& (byte != 0x02))// STX ausklammern <br>
case END_LINE: <br>
... <br>
if
((obis_code[0]=='1')||(obis_code[0]=='2')) { <br>
Obis obis(obis_code); <br>
Letzteres ist eigentlich eine Notlösung, da ich obis.cpp nicht
wirklich durchschaut habe, aber feststellen musste, das es sehr
empfindlich auf nicht Obis codes reagiert. <br>
<br>
Anbei die geänderten sourcen. <br>
Ich hoffe, sie sind verständlich und es hilft bei der Entwicklung
der nächsten Version. <br>
<br>
Reinhard <br>
<br>
<br>
Am 21.11.2013 00:57, schrieb Thorben Thuermer: <br>
<blockquote type="cite">On Wed, 20 Nov 2013 23:36:13 +0100 <br>
Reinhard Wilzeck <a class="moz-txt-link-rfc2396E"
href="mailto:reinhard@wilzeck.de"><reinhard@wilzeck.de></a>
wrote: <br>
<blockquote type="cite">erfreulicherweise kann man nun für das
Protokoll D0 parity und baud rate <br>
über die vzlogger.conf konfigurieren. <br>
(Nötig z.B. für Landis+Gyr E350 EDL21 .) <br>
"protocol" : "d0", <br>
"parity": "7e1", <br>
"baudrate":300, <br>
Leider hat sich ein Fehler beim Setzen der einzelnen bits
eingeschlichen. <br>
(Ich weiss nicht, ob es schon jemand gesehen hat) <br>
Dadurch wird unbeabsichtigt u.a. CRTSCTS gesetzt. <br>
Damit sendet Udos USB IR Schreiblesekopf nicht. (macht er
richtig, denn <br>
ohne den vzlogger arbeitet er einwandfrei.) <br>
<br>
falsch ist z.B. <br>
case parity_7e1: <br>
tio.c_cflag |= ~ PARENB; <br>
Damit werden alle bits gesetzt (außer PARENB) <br>
Richtig ist: <br>
switch(_parity) { <br>
case parity_8n1: <br>
tio.c_cflag &= ~ PARENB; <br>
</blockquote>
das koennte die probleme erklaeren die andere user schon mit
porteinstellungen <br>
bei vzlogger hatten... <br>
(finde den thread gerade nicht) <br>
<br>
<blockquote type="cite">An dem Acknowledge, das der Zähler
braucht arbeite ich noch. Außerdem <br>
kann man die Schnittstelle auch mit einem Timeout versehen, so
das der <br>
read nicht für immer hängen bleibt. <br>
/* Set return rules for read to prevent endless waiting*/ <br>
tio.c_cc[VTIME] = 50; /* inter-character timer
50*0.1s*/ <br>
tio.c_cc[VMIN] = 0; /* VTIME is timeout counter
*/ <br>
<br>
Der praktische Beweis der Funktion steht aber noch aus. <br>
</blockquote>
ich kann das leider mangels zaehlern wenig testen. <br>
schickst du uns einen patch, sobald du eine version hast die
laeuft? <br>
danke! <br>
<br>
<blockquote type="cite">Gruß <br>
Reinhard <br>
</blockquote>
- Thorben <br>
<br>
</blockquote>
<br>
</blockquote>
<br>
</body>
</html>