Solar Log Forum
21.05.2012 02:04 *
Willkommen Gast. Bitte einloggen oder registrieren.

Einloggen mit Benutzername, Passwort und Sitzungslänge
News: Forum auf Grund des Spamaufkommens auf manuelle Aktivierung neuer Benutzeraccounts umgestellt.
 
   Übersicht   Hilfe Suche Einloggen Registrieren  
Seiten: [1] 2   Nach unten
  Drucken  
Autor Thema: Probleme bei der kommunikation  (Gelesen 1218 mal)
khauer
Mitglieder
Neuling
*
Offline Offline

Beiträge: 8


Profil anzeigen
« am: 21.08.2008 19:36 »

Hallo zusammen,

ich möchte langfristig Solar Log nutzen, habe aber erst einmal ein anderes grundlegendes Problem.

Ich habe meinen Sunny Data Control Plus an seiner RS232 Schnittstelle mit einem Rechner verbunden auf dem Suse läuft. Auf dem Suse-Rechner habe ich yasdi installiert und wollte mit yasdishell die Verbindung testen, aber er findet keinen Device. Die Ini-File scheint ok zu sein. An dem Kabel liegt es nicht, denn unter Windows klappt die Verbindung.
 Weiß jemand rat???
Gespeichert
Klaus D.
Globaler Moderator
Sr. Mitglied
*****
Offline Offline

Beiträge: 305

229942439
Profil anzeigen WWW
« Antworten #1 am: 21.08.2008 19:52 »

Hallo khauer,

Erstmal willkommen im Forum.

Poste uns doch mal deine yasdi.ini


mfg


Klaus D.
Gespeichert

khauer
Mitglieder
Neuling
*
Offline Offline

Beiträge: 8


Profil anzeigen
« Antworten #2 am: 21.08.2008 20:02 »

gerne!

*******************************************
[DriverModules]
Driver0=./libyasdi_drv_ip
Driver1=./libyasdi_drv_serial

[#COM1]
Device=/dev/ttyS0
Media=RS232
Baudrate=19200
Protocol=SMANet, SunnyNet

[#COM2]
Device=/dev/ttyS1
Media=Powerline
Baudrate=1200
Protocol=SunnyNet

[#COM3]
Device=/dev/ttyUSB0
Media=RS232
Baudrate=19200
Protocol=SMANet,SunnyNet

[#COM4]
Device=/tmp/serfifo
Media=RS232
Baudrate=19200
Protocol=SMANet

[#COM22]
Device=/dev/ttyS22
Media=RS232
Baudrate=1200
Protocol=SMANet

[IP1]
# For Master activities on local machine...
Protocol=SMANet
#Device0=192.168.20.120
Device0=127.0.0.1
Device1=192.168.18.150
#MasterMode=1

[Misc]
#DebugOutput=/dev/stderr

[Master]
ReadTestChannels=1
AutoReadOnlineChannels=0
*********************************************************

wenn ich yasdishell starte findet er immer nur IP1, ist klar wegen localhost. wenn ich IP1 still lege, kommt als Fehlermeldung ERROR: Ini File was not found or is unreadable. Dabei soll er auf COM1 gehen, was er aber nicht tut.
Gespeichert
Klaus D.
Globaler Moderator
Sr. Mitglied
*****
Offline Offline

Beiträge: 305

229942439
Profil anzeigen WWW
« Antworten #3 am: 21.08.2008 21:53 »

Mach mal nur folgendes rein:

[DriverModules]
Driver0=libyasdi_drv_serial;

[COM1]
Device=/dev/ttyS0;
Media=RS232;
Baudrate=1200;
Protocol=SMANet;


es darf nicht [#COM1] heisen!!!!


mfg


Klaus D.
Gespeichert

khauer
Mitglieder
Neuling
*
Offline Offline

Beiträge: 8


Profil anzeigen
« Antworten #4 am: 23.08.2008 07:18 »

Hallo,

es hat geklappt mit der Init-Datei und yasdishell. Ich komme leider nur vom Regen in die Traufe.
Wollte jetzt selber ein kleines geschriebenes Programm starten und testen. Kompilieren konnte ich ohne Probleme, aber leider wird beim Aufruf die Ini-Datei nicht gefunden, obwohl sie im gleichen Verzeichnis liegt.
Woran kann das denn nun liegen? Nochmal die Bitte um Hilfe. Danke. Unten ist auch der Quelltext zu finden.

#include "libyasdimaster.h"
#include
#define MAXDRIVERS 10
int main(void)
{
   int i;
   int res=0;             /* Rückgabewert Geräteerfassung                */
     int res1=0;             /* Rückgabewert Handleerfassung                */
      int res2=0;             /* Rückgabewert Seriennummer erstes Gerät               */
      int res3=0;             /* Leistung aus Gerät1 */
   int res4=0;             /* Energie aus Gerät2 */
      int res5=0;             /* Rückgabewert Kanal auslesen zweitens              */
   int res6=0;             /* Leistung aus Gerät2 */
   int res7=0;             /* Energie aus Gerät2              */
   DWORD channelHandle1=0;  /* Kanalhandle für das erste Gerät           */
   DWORD channelHandle2=0;  /* Kanalhandle für das zweite Gerät           */
   DWORD channelHandle3=0;  /*   */
   DWORD channelHandle4=0;  /*   */
   DWORD TimeStamp1=0;      /* Zeitstempel der ersten Leistung */
   DWORD TimeStamp2=0;      /* Zeitstempel der zweiten Leistung */
   DWORD TimeStamp3=0;      /* Zeitstempel der ersten Energie */
   DWORD TimeStamp4=0;      /* Zeitstempel der zweiten Energie */
      DWORD SerNr1=0;          /* Seriennummer des ersten Gerätes*/
      DWORD SerNr2=0;          /* Seriennummer des zweiten Gerätes*/
      DWORD DeviceHandle[10]; /* place for 10 device ID's   */
      DWORD dwBDC=0;          /* BusDriverCount             */
   DWORD dDriverNum;       /* Anzahl der Driver, die es gibt */
   DWORD Driver[MAXDRIVERS]; /* Schnittstellen ID`s in einem Array */
      double value1;           /* Kanalwert für erste Leistung              */
      double value2;           /* Kanalwert für erste Energie              */
      double value3;           /* Kanalwert für zweite Leistung              */
      double value4;           /* Kanalwert für zweite Energie              */
      char valuetext[17];     /* channel text value         */
   char DriverName[10];
   char IniFile[]="./yasdi.ini"; /* Initialisierungsdatei */
      FILE *Datei_1;          /* Zeiger auf erste Messdatei */
   FILE *Datei_2;          /* Zeiger auf zweite Messdatei */


   /* Initialisierung der Yadi-Master Bibliothek (kein Rückgabewert) */
   if (0 > yasdiMasterInitialize(IniFile, &dwBDC));
      printf("ERROR: YASDI ini file konnte nicht gefunden werden!\n");

   /* welche Schnittstellen werden unterstützt?? */
      dDriverNum = yasdiMasterGetDriver( Driver, MAXDRIVERS );

   /* Alle Schnittstellentreiber werden online gesetzt (min. einer sollte das tun!) */
      for(i=0;i      {
            /* Name des Treiber (z.B. Com1 unter Windows bzw. ttyS1 unter Linux) */
           yasdiGetDriverName(Driver, DriverName, sizeof(DriverName));

         printf("Schalte Driver'%s' on...", DriverName);

            if (yasdiSetDriverOnline( Driver ))
            {
               printf("success\n");
              /* bOnDriverOnline = TRUE;*/ /* Überprüfung, ob alle driver online sind */
            }
            else
               printf("false\n");
         }



   /* Gerätererfassung läuft mit einem Gerät (Rückgabewert)*/
   res = yasdiDoMasterCmdEx("detection", 1, 0, 0);

   if (res != NULL)

      printf("Error: Die geforderte Anzahl konnte ich nicht gefunden werden.");

      
   /* Händle zu den gefundenen Geräten werden in das Array gegeben */
   res1 = GetDeviceHandles(DeviceHandle, 10 );         

   switch(res1)
   {
      case 1:
      {
         /* Seriennummer des ersten Gerätes wird ermittelt und ausgegeben */
         res2 = GetDeviceSN( DeviceHandle[0], &SerNr1 );
            printf("Seriennummer Gerät1: %ld\n", SerNr1 );

         channelHandle1 = FindChannelName(DeviceHandle[0], "Pac");
         channelHandle2 = FindChannelName(DeviceHandle[0], "Eac");

         /* TimeStamp1 = GetChannelValueTimeStamp(channelHandle1); */
         /* TimeStamp2 = GetChannelValueTimeStamp(channelHandle2); */

         res3 = GetChannelValue(channelHandle1,         /* chan. handle */
                                          DeviceHandle[0],       /* dev. handle  */
                                         &value1,                 /* value        */
                                           valuetext,             /* text value    */          
                                        16,                    /* text value size */  
                                         5 );                    /* value age    */
         res4 = GetChannelValue(channelHandle2,         /* chan. handle */
                                          DeviceHandle[0],       /* dev. handle  */
                                         &value2,                 /* value        */
                                           valuetext,             /* text value    */          
                                        16,                    /* text value size */  
                                         5 );                    /* value age    */
         
         /* Abspeichern der Messwerte */
   
         Datei_1 = fopen("Messdaten_Uni_Solar", "Wt");

         if (Datei_1 == NULL)
   
            printf("File Error \n");

         else

            fprintf( Datei_1, "%d", SerNr1); /* Abspeichern erste Seriennummer */
            fprintf( Datei_1, "%d", value1); /* Abspeichern erste Leistung */
            fprintf( Datei_1, "%d", TimeStamp1); /* Abspeichern Zeitstempel zur ersten Leistung */
            fprintf( Datei_1, "%d", value2); /* Abspeichern erste Energie */
            fprintf( Datei_1, "%d", TimeStamp2); /* Abspeichern Zeitstempel zur ersten Energie */
                  
         fclose(Datei_1);
         break;         
      }

      case 2:
      {
         /* Seriennummer des zweiten Gerätes wird ermittelt und ausgegeben */
         res5 = GetDeviceSN( DeviceHandle[1], &SerNr2 );
            printf("Seriennummer Gerät2: %ld\n", SerNr2 );

         channelHandle3 = FindChannelName(DeviceHandle[1], "Pac");
         channelHandle4 = FindChannelName(DeviceHandle[1], "Eac");

         /* TimeStamp3 = GetChannelValueTimeStamp(channelHandle3); */
         /* TimeStamp4 = GetChannelValueTimeStamp(channelHandle4); */

         res6 = GetChannelValue(channelHandle3,         /* chan. handle */
                                         DeviceHandle[1],       /* dev. handle  */
                                         &value3,                 /* value        */
                                           valuetext,             /* txt value    */          
                                        16,                    /* text value size */  
                                         5 );                    /* value age    */
         res7 = GetChannelValue(channelHandle4,         /* chan. handle */
                                         DeviceHandle[1],       /* dev. handle  */
                                         &value4,                 /* value        */
                                           valuetext,             /* txt value    */          
                                        16,                    /* text value size */  
                                         5 );                    /* value age    */
         /* Abspeichern der Messwerte */
   
         Datei_2 = fopen("Messdaten_Uni_Solar_2", "Wt");

         if (Datei_2 == NULL)
   
            printf("File Error \n");

         else

            fprintf( Datei_2, "%d", SerNr2); /* Abspeichern zweite Seriennummer */
            fprintf( Datei_2, "%d", value3); /* Abspeichern erste Leistung */
            fprintf( Datei_2, "%d", TimeStamp3); /* Abspeichern Zeitstempel zur ersten Leistung */
            fprintf( Datei_2, "%d", value4); /* Abspeichern erste Energie */
            fprintf( Datei_2, "%d", TimeStamp4); /* Abspeichern Zeitstempel zur ersten Energie */
                  
         fclose(Datei_2);


         break;
      }

      default:
      {
         printf(" Keine Handles bzw. Geräte vorhanden");
         break;
      }
   }

   
      
/* ********************* Schnittstellentreiber offline setzen ********************************* */

   /* Deinitialisierung der Schnittstelle */
   yasdiMasterShutdown();
   
      return (0);

} /* main */
                             

Grüße khauer
Gespeichert
Klaus D.
Globaler Moderator
Sr. Mitglied
*****
Offline Offline

Beiträge: 305

229942439
Profil anzeigen WWW
« Antworten #5 am: 23.08.2008 21:49 »

Ein ";"in dieser Zeile zu viel!!!

 if (0 > yasdiMasterInitialize(IniFile, &dwBDC));


mfg
Gespeichert

khauer
Mitglieder
Neuling
*
Offline Offline

Beiträge: 8


Profil anzeigen
« Antworten #6 am: 24.08.2008 08:29 »

Richtig, aber das wars trotzdem nicht. Die Datei wird immer noch nicht gefunden.

Noch jemand eine Idee??
Gespeichert
Klaus D.
Globaler Moderator
Sr. Mitglied
*****
Offline Offline

Beiträge: 305

229942439
Profil anzeigen WWW
« Antworten #7 am: 24.08.2008 10:54 »

Hast du auch ein "devices" Verzeichniss angelegt im gleichem verzeichniss?

Funktioniert das "sample1" aus den yasdi sorces?

Poste doch mal die Ausgabe deines Programmes.
Gespeichert

khauer
Mitglieder
Neuling
*
Offline Offline

Beiträge: 8


Profil anzeigen
« Antworten #8 am: 24.08.2008 13:06 »

Also devices existiert. Habe sample wie in der Datei beschrieben compiliert und gestartet, es läuft.

Nur mein Programm nicht. ich kapier das nich. Mittlerweile glaube ich das liegt am Verzeichnis

Ich kompiliere mein Programm mit gcc -o Test Test.c -lyasdimaster
es kommen keine Fehlermeldungen, ich rufe es auf mit ./Test yasdi.ini mit folgender Ausgabe:

ERROR: YASDI ini file konnte nicht gefunden werden!

Error: Die geforderte Anzahl konnte ich nicht gefunden werden. Keine Handles bzw. Geräte vorhanden (Diese meldungen stammen aus dem obigen Quellcode, so wie ich ihn geschrieben habe)

wenn ich meine Datei dagegen mit   gcc sample1.c -I../../include/ -I../../smalib -I../../libs -o sample1 -lyasdimaster  übersetze kommt folgendes


gcc: ../../smalib: Datei oder Verzeichnis nicht gefunden
gcc: ../../libs: Datei oder Verzeichnis nicht gefunden
Test.c: In Funktion »main«:
Test.c:69: Warnung: Vergleich zwischen Zeiger und Ganzzahl
Gespeichert
Klaus D.
Globaler Moderator
Sr. Mitglied
*****
Offline Offline

Beiträge: 305

229942439
Profil anzeigen WWW
« Antworten #9 am: 25.08.2008 21:00 »

Warum startest du mit "./Test yasdi.ini" und nicht "./Test"?

Wenn das Sample1 funktioniert musst du doch nur das Sample 1 Schritt für Schritt umbauen für deine Bedürfnisse.
Gespeichert

khauer
Mitglieder
Neuling
*
Offline Offline

Beiträge: 8


Profil anzeigen
« Antworten #10 am: 25.08.2008 21:08 »

Hab ich mir auch schon überlegt. Werde das morgen mal mit meinen Änderungen ausprobieren und testen und das Ergebnis hier posten. Kann dann evtl. diesen Thread dann schließen.
Gespeichert
Heiko Prüssing
Mitglieder
Neuling
*
Offline Offline

Beiträge: 32


Profil anzeigen WWW
« Antworten #11 am: 25.08.2008 22:12 »

also, falls es irgendwie hilft, das Programm läuft soweit bei mir (Mac). Mit der Änderung
der if Zeile in "yasdiMasterInitialize" und der Änderung im fopen auf "wt", wird die Datei geschrieben.
Gelinkt hab ich hier mit

    gcc datei.c -o datei -I../../include/ -I../../smalib -I../../libs -lyasdimaster -lyasdi

aus dem Verzeichnis

   projects/generic-cmake


Gestartet mit

   ./datei


Gruß,
Heiko
Gespeichert

Programming is like sex: One mistake and you have to support it for the rest of your life! :-)
http://www.heiko-pruessing.de
khauer
Mitglieder
Neuling
*
Offline Offline

Beiträge: 8


Profil anzeigen
« Antworten #12 am: 26.08.2008 17:06 »

Hallo,

habe letztes mal bei der samples nicht richtig hingeschaut. Sie funktionierte nicht richtig. Sie konnte keine devices erkennen, so dass die funktion yasdiMasterCmdEx immer -1 zurückgegeben hat. Nach langem hin her, habe ich den Inhalt der yasdi ini aus dem Verzeichnis /projects/linuxlib in die ini aus samples kopiert, und siehe da ich konnte eine energie auslesen. Hat sowas jemand schon mal gehabt.

Außerdem habe ich jede Menge komische Zahlen in eckigen Klammern bekommen, wie z.B.

....
suche device, bitte warten...
Empfange Zeichen:
[7e][7f][ff][3][40][66][0][22][33]
.....


und wie gesagt davon jede Menge und zum schluss wieder meine programmierten Ausgaben.

Was beudeuten diese zeichen??

Grüße klaus
Gespeichert
Heiko Prüssing
Mitglieder
Neuling
*
Offline Offline

Beiträge: 32


Profil anzeigen WWW
« Antworten #13 am: 26.08.2008 20:14 »

Hallo khauer,

>Außerdem habe ich jede Menge komische Zahlen in eckigen Klammern bekommen, wie z.B.

das sind Debug-Ausgaben, in diesem Fall der rohe Byte-Datenstrom von der seriellen Schnittstelle.
Mit dem Patch unter:

   www.heiko-pruessing.de/new/downloads/yasdi172-serdriverloggings.patch

bekommst Du diese weg, falls sie stören...

Gruß,
Heiko
Gespeichert

Programming is like sex: One mistake and you have to support it for the rest of your life! :-)
http://www.heiko-pruessing.de
khauer
Mitglieder
Neuling
*
Offline Offline

Beiträge: 8


Profil anzeigen
« Antworten #14 am: 26.08.2008 20:43 »

Gut dann sind diese meldungen nicht weiter tragisch.

wie und wo muss ich das patch denn integrieren??

Vielleicht dumme frage, bin aber eigentlich noch newbie
Gespeichert
Seiten: [1] 2   Nach oben
  Drucken  
 
Gehe zu:  

Powered by MySQL Powered by PHP Powered by SMF 1.1.11 | SMF © 2006-2009, Simple Machines LLC Prüfe XHTML 1.0 Prüfe CSS