-> Hier kostenlos registrieren
Hallo,
ich bin gerade dabei ein bereits bestehenden und funktionierenden Baustein, der ursprünglich für 1200/1500er CPU's mit optimierten Busteinzugriff erstellt wurde, auch für 300/400er CPU's lauffähig zu machen.
An sich ist es, außer dem Entfernen des optimierten Zugriffes für den FB und dessen verwendeten DI bzw. einen globalen DB, kein größerer Aufwand...dachte ich :sad:
Intern verwendet der FB den SFC14/15 und SFC20. Zur Ausgabe der gelesenen bzw. geschriebenen Daten besitzt der FB eine Struktur "Data" als In/Output Variable. InData, OutData und Memory sind jeweils Byte Arrays von 64. "Hardware_IO" der hexadezimale Wert der E/A Adresse des 64 Byte Moduls aus der Hardware-Config.
Das seltsame ist jetzt, dass er mir beim SFC14 und SFC20 immer an der RECORD Variable meckert "Ungültige Parameterzuweisung". Allerdings verstehe ich nicht wieso!?
So verwende ich die SFC's:
SFC15 funktioniert dabei ohne irgendeine Fehlermeldung, wohingegen er mir bei SFC14 und SFC20 RECORD bzw. DSTBLK nicht zuweisen lässt.
Er akzeptiert es nur (und es funktioniert auch), wenn ich den globalen DB direkt verwende, der am In/Output "Data" steht.
Also:
Dies ist allerdings keine Lösung für mich, da ich den Baustein gerne in eine Bibliothek packen möchte und das mit globalen Datenzugriff nicht funktioniert.
Was mache ich falsch?
Viele Grüße
ich bin gerade dabei ein bereits bestehenden und funktionierenden Baustein, der ursprünglich für 1200/1500er CPU's mit optimierten Busteinzugriff erstellt wurde, auch für 300/400er CPU's lauffähig zu machen.
An sich ist es, außer dem Entfernen des optimierten Zugriffes für den FB und dessen verwendeten DI bzw. einen globalen DB, kein größerer Aufwand...dachte ich :sad:
Intern verwendet der FB den SFC14/15 und SFC20. Zur Ausgabe der gelesenen bzw. geschriebenen Daten besitzt der FB eine Struktur "Data" als In/Output Variable. InData, OutData und Memory sind jeweils Byte Arrays von 64. "Hardware_IO" der hexadezimale Wert der E/A Adresse des 64 Byte Moduls aus der Hardware-Config.
Das seltsame ist jetzt, dass er mir beim SFC14 und SFC20 immer an der RECORD Variable meckert "Ungültige Parameterzuweisung". Allerdings verstehe ich nicht wieso!?
So verwende ich die SFC's:
Code:
#Ret_Val_SFC15 := DPWR_DAT(LADDR:=#Hardware_IO, RECORD := #Data.OutData);
#Ret_Val_SFC14 := DPRD_DAT(LADDR:= #Hardware_IO, RECORD =>#Data.Memory);
#Ret_Val_SFC20 :=BLKMOV(SRCBLK:=#Data.#Memory, DSTBLK=>#Data.InData);
SFC15 funktioniert dabei ohne irgendeine Fehlermeldung, wohingegen er mir bei SFC14 und SFC20 RECORD bzw. DSTBLK nicht zuweisen lässt.
Er akzeptiert es nur (und es funktioniert auch), wenn ich den globalen DB direkt verwende, der am In/Output "Data" steht.
Also:
Code:
#Ret_Val_SFC14 := DPRD_DAT(LADDR:= #Hardware_IO, RECORD =>"CommunicationDB".Data.Memory);
#Ret_Val_SFC20 :=BLKMOV(SRCBLK:=#Data.#Memory, DSTBLK=>"CommunicationDB".Data.InData);
Dies ist allerdings keine Lösung für mich, da ich den Baustein gerne in eine Bibliothek packen möchte und das mit globalen Datenzugriff nicht funktioniert.
Was mache ich falsch?
Viele Grüße