F_IOPortWrite

Mit der Funktion F_IOPortWrite kann eine eSize-breite I/O-Position beschrieben werden. Siehe auch die Beschreibung der F_IOPortRead Funktion.
Hinweis | |
Beschädigung der Hardware Ein direkter Hardwarezugriff stellt kein Problem dar, solange Daten nur gelesen werden. Ein schreibender Zugriff kann zu Abstürzen führen und/oder die Hardware/Daten auf den Speichermedien zerstören. Mit dieser Funktion kann die Hardware so beschädigt werden, dass sie nicht mehr bootfähig ist. |
FUNCTION F_IOPortWrite : BOOL
Eingänge
VAR_INPUT
nAddr : UDINT;
eSize : E_IOAccessSize;
nValue : DWORD;
END_VAR
Name | Typ | Beschreibung |
---|---|---|
nAddr | UDINT | I/O-Portadresse |
eSize | E_IOAccessSize | Anzahl der Datenbytes die geschrieben werden sollen (Typ: E_IOAccessSize). |
nValue | DWORD | Wert, der geschrieben werden soll. |
Rückgabeparameter | Beschreibung |
---|---|
TRUE | Kein Fehler |
FALSE | Fehler |
Beispiel in ST:
Im folgenden Beispiel wurde mit Hilfe der I/O-Port Funktionen ein SPS-Baustein zur direkten Ansteuerung des PC-Lautsprechers implementiert.
Interface:
FUNCTION_BLOCK FB_Speaker
(* Sample code from: "PC INTERN 2.0", ISBN 3-89011-331-1, Data Becker *)
VAR_INPUT
freq : DWORD := 10000; (* Frequency [Hz] *)
tDuration : TIME := T#1s; (* Tone duration *)
bExecute : BOOL; (* Rising edge starts function block execution *)
END_VAR
VAR_OUTPUT
bBusy : BOOL;
bError : BOOL;
nErrID : UDINT;
END_VAR
VAR
fbTrig : R_TRIG;
nState : BYTE;
sts61H : DWORD;
cnt42H : DWORD;
cntLo : DWORD;
cntHi : DWORD;
timer : TON;
END_VAR
Implementation:
fbTrig( CLK := bExecute );
CASE nState OF
0:
IF fbTrig.Q THEN
bBusy := TRUE;
bError := FALSE;
nErrID := 0;
timer( IN := FALSE );
IF F_IOPortWrite( 16#43, NoOfByte_Byte, 182 ) THEN
cnt42H := 1193180 / freq;
cntLo := cnt42H AND 16#FF;
cntHi := SHR( cnt42H, 8 ) AND 16#FF;
F_IOPortWrite( 16#42, NoOfByte_Byte, cntLo ); (* LoByte *)
F_IOPortWrite( 16#42, NoOfByte_Byte, cntHi ); (* HiByte *)
timer( IN := TRUE, PT := tDuration );
sts61H := F_IOPortRead( 16#61, NoOfByte_Byte );
sts61H := sts61H OR 2#11;
F_IOPortWrite( 16#61, NoOfByte_Byte, sts61H ); (* speaker ON *)
nState := 1;
ELSE
nState := 100;
END_IF
END_IF
1:
timer( );
IF timer.Q THEN
sts61H := F_IOPortRead( 16#61, NoOfByte_Byte );
sts61H := sts61H AND 2#11111100;
F_IOPortWrite( 16#61, NoOfByte_Byte, sts61H ); (* speaker off *)
bBusy := FALSE;
nState := 0;
END_IF
100:
bBusy := FALSE;
bError := TRUE;
nErrID := 16#8000;
nState := 0;
END_CASE
Test application:
PROGRAM MAIN
VAR
fbSpeaker : FB_Speaker;
bStart : BOOL;
END_VAR
fbSpeaker( freq:= 5000,
tDuration:= t#1s,
bExecute:= bStart );
Voraussetzungen
Entwicklungsumgebung | Zielplattform | Einzubindende SPS-Bibliotheken (Kategoriegruppe) |
---|---|---|
TwinCAT v3.1.0 | PC oder CX (x86, x64, ARM) | Tc2_System (System) |