-Menü

Beiträge anzeigen

Dieser Abschnitt erlaubt es Ihnen, alle Beiträge anzusehen, die von diesem Mitglied geschrieben wurden. Beachten Sie, dass Sie nur Beiträge sehen können, die in Teilen des Forums geschrieben wurden, auf die Sie aktuell Zugriff haben.

Beiträge anzeigen-Menü

Themen - cali

#1
Hallo,

in der Doku zu DIMM_I steht:
ZitatOUT ist der Wert des Dimmers und wird als I/O Variable extern definiert. dies hat den Vorteil das der Wert des Dimmers jederzeit extern beeinflusst werden kann und auch nach einem Stromausfall wieder rekonstruiert werden kann

Wie programmiere ich das? In meinem Programm wandel ich den OUT-Wert von Byte in Word (Range_to_Wird) um und lege ihn auf einen analogen Ausgang. Das funktioniert ohne Probleme. Wenn ich jedoch davor dem Out-Wert einen Wert zuweise überschreibe ich damit die Funktionalität des DIMM_I. Ein ausschalten/regeln mittels Taster ist nicht mehr möglich.

Grüße
Cali

#2
oscat.lib fuer TwinCAT/CoDeSys / ACTUATOR_2P
05. April 2009, 22:44:31
Hallo,
ich nutze derzeit noch Version 2.76 und wollte auf Version 3.04 updaten. In Version 2.79 hatte der ACTUATOR_2P einen Real-Eingang (0-1) nun einen vom Typ Byte (0-255). Ich nutze den CTRL_IN den ich mit einem PID_Regler verbunden habe. Den Ausgang des PID konnte ich direkt auf den Eingang des ACTUATOR_2P legen. Wie ist das nun gedacht? Muß ich einen PWM-Baustein verwenden oder Real nach Byte konvertieren? Vorher war das so einfach...

Grüße
Cali
#3
Hallo,

Folgendes Problem. Mein Sensor möchte initialisiert werden, dabei sendet er mir alle Informationen wobei jedoch mein RingBuffer überläuft. Ich suche daher nach einer Möglichkeit mehr als 255 Zeichen zu empfangen, oder nach dem Initialisieren die Informationen abzufragen. Wie muß ich die Struktur ändern um den "SendString" zu überschreiben, wie kann ich neu senden (xStartSend) und die Antwort auswerten. Wahrscheinlich mit einem Zustandsautomaten... nur wie starte ich mehrfach COM1 und empfange dannn?


Hier ist was ich habe und was auch für eine Abfrage funktioniert:

(*---- Solange eine Anforderung gesendet wird -> den Empfangsbuffer löschen *)
IF xSendActive3 THEN  (* neue Anforderung wird gesendet *)
FOR i:= 0 TO 255 DO
ReceiveBuffer.Data[i] := 0; (* Empfangsbuffer löschen*)
END_FOR
ReceiveBuffer.Index := 0; (* Empfangsbuffer löschen*)
END_IF

(*--- Auffuf der Schnittstelle -----------------------------------------------------*)
(* Send and Receive for COM1 *)
COM1( bCOM_PORT_NR := 1,
cbBAUDRATE := BAUD_9600,
cbsBYTESIZE := BS_8,
cpPARITY := PARITY_NO,
csSTOPBITS := STOPBITS_1,
cfFLOW_CONTROL := NO_FLOW_CONTROL,
utRECEIVE_BUFFER := ReceiveBuffer,
ptSEND_BUFFER := ADR(SendString),
xINIT := xInitPort,
      xOPEN_COM_PORT := xOpenPort,
iBYTES_TO_SEND := LEN(SendString) +1,
xSTART_SEND := xSendActive3 );

(*---- Empfangsdaten in String kopieren ---------------------------------------------------------------------------------------*)
ptString := ADR(ReceiveBuffer.Data); (* Stringzeiger auf den Anfang des Empfangsbuffers *)
ReceiveBuffer.Data[ ReceiveBuffer.Index ] := 0; (* String terminieren *)
ReceiveString := ptString^;    (* String kopieren *)
(*-------------------------------------------------------------------------------------------------------------------------------------------*)
temp2:=STRING_TO_REAL(LIST_GET(44,1,ReceiveString));*)

temp:=LIST_GET(44,0,ReceiveString); (*Sensor*)
TEMPIST:=STRING_TO_REAL(LIST_GET(44,1,ReceiveString)); (*Temperatur in Real*)


Bin für jeden Tipp dankbar.
Cali