Für eine Semesterarbeit im Programmieren (Nebenfach) habe ich folgende Aufgabe raelisiert.
Messwerte von einem Multimeter Socomec über RS485 auslesen.
Die Messwerte werden in der Visu online angezeigt.
Mittels der Visu kann der Bediener die Messdaten in einer csv Datei speichern. Die Daten werden auf dem Controller Wago 841 gespeichert.
Zur lokalen Auswertung der Daten mit Excel kann das File über FTP an einen FTP Server gesendet werden.
Alle Funktionen funktionieren, aber leider kann ich nur ein Messwert aus dem Messgerät lesen. Ich sollte aber zyklisch zwei Messwerte über RS485 nacheinander auslesen.
Kann sich mal jemand den Programmteil DataExchange anschauen?
Ich finde den richtigen weg nicht.
Dabei ist StartAdresse 782 (Spannung) und StartAdresse 768 (Strom). Wenn ich nur eine Adresse anwähle erhalte ich jeweils den richtigen Messwert Siehe PLC_PRG letzte zwei Netzwerke.
CASEstateOF0:
(*SpannungDatenvomSlavelesenundinArraySlavedataspeichern*)
  IFNOTstartTHEN    (*start=StartFunction: wirdzurückgesetztnacherfolgreichemAblaufdesDienstesMaster-SlaveSeite4*)
    SlaveAddress:=5;
    FunctionCode:=16#3;   (* Manual Bibliothek Seite 3*)
    StartAddress:=782;    (* Spannung U1 -782 Dez oder 30E Hex, Strom I1 768 Dez oder 300 HEX*)
    NumberOfPoints:=2; (* 0=Bitzugriff, > 0 = Registerzugriff (2 Register WORD) *)
    IFrec.Data[1]=FunctionCodeANDrec.Data[0]=SlaveAddressANDNOTBYTE_TO_BOOL(Master.error)THEN(*checkanswer*)
      FORi:=0TOrec.Data[2] DO     (*NutzerdateninNutzArrayschreiben*)
        slavedata1[i]:=rec.Data[3+i];  (* Empfangene Daten vom Diris Multimeter in Array schreiben*)
      END_FOR
      state:=1;
    ELSE
      start:=TRUE;
    END_IF
  END_IF1:
(*StromDatenvomSlavelesenundinArraySlavedataspeichern*)
  IFNOTstartTHEN    (*start=StartFunction: wirdzurückgesetztnacherfolgreichemAblaufdesDienstesMaster-SlaveSeite4*)
    SlaveAddress:=5;
    FunctionCode:=16#3;   (* Manual Bibliothek Seite 3*)
    StartAddress:=768;    (* Spannung U1 -782 Dez oder 30E Hex, Strom I1 768 Dez oder 300 HEX*)
    NumberOfPoints:=2; (* 0=Bitzugriff, > 0 = Registerzugriff (2 Register WORD) *)
    IFrec.Data[1]=FunctionCodeANDrec.Data[0]=SlaveAddressANDNOTBYTE_TO_BOOL(Master.error)THEN(*checkanswer*)
      FORi:=0TOrec.Data[2] DO     (*NutzerdateninNutzArrayschreiben*)
        slavedata2[i]:=rec.Data[3+i];  (* Empfangene Daten vom Diris Multimeter in Array schreiben*)
      END_FOR
      state:=0;
    ELSE
      start:=TRUE;
    END_IF
  END_IFEND_CASE(*RS485Einstellungen*)(*Callfunctionblcoforcommunicationwithslave*)Master(SlaveAddress:=SlaveAddress ,
    FunctionCode:=FunctionCode ,
    StartAddress:=StartAddress ,
    NumberOfPoints:=NumberOfPoints,
     bCOM_PORT:=2 ,
    cbCOM_BAUDRATE:=960 ,
    cpCOM_PARITY:=0 ,
    csCOM_STOPBITS:=1 ,
    cbsCOM_BYTESIZE:=8 ,
    cfCOM_FLOW_CONTROL:=halfduplex,
    TimeOut:=t#250ms ,
     StartFunction:=start ,
    ReceiveBuffer:=rec ,
    SendData:=send);
Hallo
Für eine Semesterarbeit im Programmieren (Nebenfach) habe ich folgende Aufgabe raelisiert.
Messwerte von einem Multimeter Socomec über RS485 auslesen.
Die Messwerte werden in der Visu online angezeigt.
Mittels der Visu kann der Bediener die Messdaten in einer csv Datei speichern. Die Daten werden auf dem Controller Wago 841 gespeichert.
Zur lokalen Auswertung der Daten mit Excel kann das File über FTP an einen FTP Server gesendet werden.
Alle Funktionen funktionieren, aber leider kann ich nur ein Messwert aus dem Messgerät lesen. Ich sollte aber zyklisch zwei Messwerte über RS485 nacheinander auslesen.
Kann sich mal jemand den Programmteil DataExchange anschauen?
Ich finde den richtigen weg nicht.
Dabei ist StartAdresse 782 (Spannung) und StartAdresse 768 (Strom). Wenn ich nur eine Adresse anwähle erhalte ich jeweils den richtigen Messwert Siehe PLC_PRG letzte zwei Netzwerke.
Programm liegt bei
Besten Dank für eure Unterstützung
Patzau
Forum IBZ Case Study 20100108.pro [116.48 KiB]
Hallo Patzau,
ich denke du hast ein wenig viel gestartet
lösch mal in den Zeilen 27 und 50 das
start := true;
und verschieb die Parametrierung hinter das
IF NOT start THEN
also so
Related
Talk.ru: 1
Talk.ru: 2