Frage zu FC5 - AG_SEND

phoo82

Level-1
Beiträge
26
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Hi, ich habe da mal eine kleine Frage ;)

Also ich möchte nur über TCP von einer CP343-1 LEAN
einen STRING fester länge zu einem JAVA ServerSocket schicken.

Ich hab scho die Verbindung projektiert (aktiv, da SPS client sein soll).
klappt auch alles wunderbar.

Im Webinterface wird solange als status 'SYN SEND' angegeben,
bis ich auf meinem Rechner den JavaServer starte,
dann wechselt der status zu 'ESTABLISHED'.

Code des Servers
Code:
try {
            ss = new ServerSocket(10001);
            s = ss.accept();
            ...setText("ACCEPT");
            is = s.getInputStream();
            isr = new InputStreamReader(is);
            in = new BufferedReader(isr);
            jStatusLabel.setText("accept bis while!");
            while ((line = in.readLine()) != null) {
                    jChatInput.setText(" <<< " + line + "\n");
            }
                    jStatusLabel.setText("msg received...");
 
                    in.close();
                    s.close();
                    ss.close()
    } catch................
er kommt genau bis zur zeile while((line=in.readLine().....)


mein Problem ist eigtl. das starten des FC5 ;)
alleine schon die steigende Fanke für aktivierung
(habe keine eingänge etc, die CP soll einfach zyklisch den string schicken)

AWL Code OB1
Code:
 FP    M      1.0
      =     L     20.0
      CLR   
      =     M      1.0
      SET   
      =     M      1.0
      BLD   103
      CALL  "AG_SEND"
       ACT   :=L20.0
       ID    :=2
       LADDR :=W#16#100
       SEND  :=P#DB111.DBX2.0 BYTE 10
       LEN   :=10
       DONE  :=M11.0
       ERROR :=M11.1
       STATUS:=MW10
      NOP   0

hab versucht ne flanke zu simulieren ^^
es kann auch sein dass ich irgendetwas grundlegendes übersehen habe,
ich beschäftige mich erst seit rund 2 wochen mit
der Siemens SPS Technik ^^

Wäre nett, wenn jemand meinen AWL code korrigieren könnte,
so dass der CP halt immer mit AG_SEND einen STRING sendet

p.s. P#DB111.DBX2.0 BYTE 10
dort steht STRING[128] 'hieristmeinstringdenichschickenwilletc..."

vielen Dank für eure Mühen :D
 
für zyklisch eignet sich ein taktmerker
auch solltest du darauf achten, dass nur aufgerufen wird, wenn der letzte auftrag fertig ist.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
p.s. P#DB111.DBX2.0 BYTE 10
dort steht STRING[128] 'hieristmeinstringdenichschickenwilletc..."

So versendest Du nur 10Bytes. An der Adresse mag zwar der String deklariert sein, gesendet wird aber nur das, was du bei Deinem Pointer angibst.

Wenn Du möglichst schnell senden möchtest, kann man das auch so lösen:
Code:
UN Send_Done
=   Send_Data

Das Send_Data kannst Du auch noch mit Fehlermeldungen o.ä. verküpfen, so das nur gesendet werden soll, wenn auch keine Fehler anstehen.
 
erstmal vielen dank für eure antworten ;)

allerdings ist mein problem ja z.B. der Taktmerker

wenn ich

Code:
FP M 1.0
= L20.0

versuche passiert nichts.

ich verstehe das ganze funktionsprinzip nicht, die CPU muss ja
einen internen clock haben , wieso soll das falling und rising edge
iwo gespeichert werden?

kann mir bitte jemand erklären wie ich rising_edge abfrage und dann
auf L20.0 lege?
bzw muss bei einer steigenden Flanke auf L20.0 dann nur eine konstante
logische '1' liegen um FC5 zu aktivieren?

Die Tutorials in KOP und FUP die ich finden konnte arbeiten
alle mit den Digitalen eingängen und nutzen die Praktisch als Schalter,
das will ich ja nicht.

@Grubba

kann ich das Send_Data mit dem ACT-Eingang (L20.0) des FC5
verbinden?

hier nun der code:
Code:
FP    M      0.3
      =     L     20.0
      BLD   103
      CALL  FC     5
       IN0 :=L20.0
       IN1 :=2
       IN2 :=W#16#100
       IN3 :=P#DB111.DBX 2.0 BYTE 10
       IN4 :=10
       OUT5:=M11.0
       OUT6:=M11.1
       OUT7:=MW10
      NOP   0
      UN    M     11.0
      =     L     20.0

taktmerker M0.3

noch eine frage:
ich kann ja in eineme OB1 mehrer Netzwerke einfügen,
werden diese (zyklisch) nacheinander oder parallel ausgeführt?

vielen dank für eure hilfe .p
ich brauche nur ein lauffähiges beispiel, da ich an diesen am meisten
über funktionsweise etc lerne und mir aneignen kann.

bis gfeich ;)


p.s.: achso, dass ich nur 10bytes schicke ist mir bewusst, auch ab position2 beginnend .p
 
Code:
*
//mit takt...

      U     M      2.5                  //sekundenTakt
      FP    M     11.2                  //Flankenauswertung (mit Hilfsmerker für nächsten Zyklus)
      UN    M     11.0
      =     M     11.3                  //start

      CALL  "AG_SEND"
       ACT   :=M11.3
       ID    :=2
       LADDR :=W#16#100
       SEND  :=P#DB111.DBX 2.0 BYTE 10
       LEN   :=10
       DONE  :=M11.0
       ERROR :=M11.1
       STATUS:=MW10

//immer, wenn der letzte auftrag raus ist...
      UN    M     11.0
      =     M     11.3

      CALL  "AG_SEND"
       ACT   :=M11.3
       ID    :=2
       LADDR :=W#16#100
       SEND  :=P#DB111.DBX 2.0 BYTE 10
       LEN   :=10
       DONE  :=M11.0
       ERROR :=M11.1
       STATUS:=MW10

probier es mal so.
der merker, der hinter FP steht ist die Hilfsvariable und sollte nach möglichkeit nicht anders verwendet werden ;)
die netzwerke werden zyklisch, nacheinander abgearbeitet.
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
Mahlzeit

die Taktmerker werden in der HW-Konfiguration eingestellt;
sind eigentlich Impulsmerker.
Aus diesen kannst Du dann Flanken bilden:
U taktm
FP Hilfsm
= Flankenm

für den FC5:
U Flankenm
UN done
= activ

mfg
jb
 
Hi, erstmal vielen dank.

Ich wollte den AWL Code testen, da ist mir etwas ganz anderes aufgefallen.

Also ich habe mein project und mein OB1 in dem FC5 aufgerufen wird.
FC5 ist aus der SYMANTEC NET BIBLIO,

habe mein project mit Objecte übersetzen und laden auf die Station gesendet, habe ram -> rom kopiert, habe anwendungsprogramm auf die
memory card gesendet und vorher url gelöscht.

Wenn ich nun aber ein neues leeres projekt erstelle und mit
'Station in PG laden' lade, dann sieht mein OB1 anders aus, nämlich.

Code:
      U     M      2.5
      FP    M     11.2
      UN    M     11.0
      =     M     11.3
      CALL  FC     5
       IN0 :=M11.3
       IN1 :=2
       IN2 :=W#16#100
       IN3 :=P#DB111.DBX 2.0 BYTE 10
       IN4 :=10
       OUT5:=M11.0
       OUT6:=M11.1
       OUT7:=MW10

auf einmal wird ein anderer FC5 baustein ausgeführt, der nicht aus
der SIMANTEC NET Biblio, denke daran wird des liegen.

Wie kann ich denn die SPS komplett löschen, so dass sie ist wie im
auslieferungszustand? iwie kommt mir das komisch dass er den OB1 "ändert" einfach.


bei interesse kann ich auch mein Step7-Project uploaden, damit sich das jemand anguckt kurz, würde mir sehr helfen und ich könnte hier mal weitermachen.

Ich finde die Programmierung an sich garnciht so schwer, allerdings
diese effekte mit nicht ordnungsgemäßem übertragen des projectes
machen alles so zeitintensiv .p

achso, ich habe immernur die HW config auf die MMC geladen, nciht das komplette project, da ich nur eine 64kByte MMC habe in der SPS.

Vielen Dank für die viele Zeit die ihr für mich Opfert.

"Wissen ist das einzige Gut, welches sich vermehrt wenn man es teilt" ;)

noch eine frage: wenn die instruktionen in OB1 alle sequentiell abgearbeitet werden, wie reagiert dann ACT von FC5 auf eine steigende Flanke, so wie ich den Code verstehe wird durch
Code:
= M 11.3 //start
eine logische '1' dort angelegt und dann erst FC5 aufgerufen.

Aber pro takt kann man doch maximal einen befehl ausführen mit CPU oder? (ist ja kein FPGA etc)
 
...............
Wenn ich nun aber ein neues leeres projekt erstelle und mit
'Station in PG laden' lade, dann sieht mein OB1 anders aus, nämlich.
.............

auf einmal wird ein anderer FC5 baustein ausgeführt, der nicht aus
der SIMANTEC NET Biblio, denke daran wird des liegen.
Das ist kein anderer FC5!
Wenn Du ein Programm aus der CPU in das PG lädst fehlt die Symbolik und die Beschreibungen der Bausteinparameter werden durch Defaults ersetzt.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
hehe danke ;) *rotwerd*

habe auch zum ersten mal die OptionFrames gesehen, in denen man
Taktmerker etc einstellen kann.

Ich werd das alles nochmal in Ruhe testen und mich morgen nochmal melden.

sorry nochmal für all die dummen fragen, aber speziell zu AWL...
...ich glaube manchmal denke ich einfach zu komplliziert...

z.B. bei
Code:
//mit takt...

      U     M      2.5                  //sekundenTakt
      FP    M     11.2                  //Flankenauswertung (mit Hilfsmerker für nächsten Zyklus)
      UN    M     11.0
      =     M     11.3                  //start

      CALL  "AG_SEND"
       ACT   :=M11.3
       ID    :=2
       LADDR :=W#16#100
       SEND  :=P#DB111.DBX 2.0 BYTE 10
       LEN   :=10
       DONE  :=M11.0
       ERROR :=M11.1
       STATUS:=MW10

und dem wissen das ACT auf steigende Flanke wartet zum ACTIVATEN..

ich dachte nach
Code:
      U     M      2.5                  //sekundenTakt
      FP    M     11.2                  //Flankenauswertung (mit Hilfsmerker für nächsten Zyklus)
      UN    M     11.0
      =     M     11.3
ist M11.3 auf logisch '1' (VCC) gesetzt, bis man es z.B. negiert etc.

und der CALL befehlt ist erst ein zyklus später, deswegen kommt an M11.3 keine steigende Flanke, weil es ja schon auf '1' ist und sich nciht mehr ändert.

vielen dank euch allen nochmal :D

Bin heute auch ziemlich durch den wind und gestresst (wie man an meienn formulierungen bestimmt merkt ;)

Ich werde das nochmal alles in ruhe testen und mich gegebenfalls nochmals morgen/übermorgen melden.

Gruss, Marc
 
Zurück
Oben