also das mit dem AR1 hat super geklappt
allerdings hätte ich jetzt die Frage wie man das mit den Bits hinbekommt
also als Beispiel man gibt als word oder int vor (Dez) 96 und der soll daraus z.b A 9.6 machen
geht das oder ist das nicht möglich?
Nehme immer SLD, sonst ist man bei Adressen von > 8192 im Arsch. Kommt zwar sogut wie nie vor, aber...
Gruß
Ralf
also das mit dem AR1 hat super geklappt
allerdings hätte ich jetzt die Frage wie man das mit den Bits hinbekommt
also als Beispiel man gibt als word oder int vor (Dez) 96 und der soll daraus z.b A 9.6 machen
geht das oder ist das nicht möglich?
habs doch noch hingekriegt ist zwar ein wenig "gefuscht" aber es geht
habs in bcd gewandelt und dann 2geteilt und beide etwas geschoben und dann verodert
Nabend
das mit den Bits ist genau so nur das du eine Ziffer die du Vorgibst nicht dierekt in bit und Byte aufschlüsseln kannst
also 96 = 9.6 geht net sondern
96 ist das 96 Bit ab 0.0 also 12.0
aufbau des Adressregisters ist dann wie folgt:
0000 0000 0000 0 000
-----------------------^^^^sind die Bitstelle also 0-7
^^^^^^^^^^^ Sind die Bytestellen also das was vor dem
komma steht
So hoffe das man mich Versteht
MfG Balou
Wenn einer nett Fragt mach ich nen FC dafür![]()
So wie das Eisen außer gebrauch rostet und das stillstehende Wasser verdirbt oder bei Kälte gefriert, so verkommt der Geist ohne Übung.
ja das wusste ich ja schon wurde oben ja schon gesagt das die rechten 3 bits für die bit schlüssel sind
dann hatte ich halt die 96 einfach in eine bcd zahl gewandelt dann hatte ich schonmal 18.6
war halt so das durch das 4 bit was nicht direkt mitgenutzt wird alles doppelt so hoch war also bei 65 hatte ich dann 12.5 usw...
das ist jetzt meine Lösung:
und das funktioniert auch so weitCode:L #Ausgang1 //Einlesen der Ersten Byte.Bit Adresse im INT Format ohne Trennzeichen ITB //Umwandeln in eine BCD Zahl T #Aus_A_Teil1 L #Aus_A_Teil1 //Speichern des Wertes um Byte und Bit zu ermitteln T #Aus_A_Teil2 L #Aus_A_Teil1 //Ermitteln des Bytes SRW 4 //Löschen der Bit Informationen SLW 3 //Korrigieren der Stellen T #Aus_A_Teil1 L #Aus_A_Teil2 //Ermitteln des Bits SLW 13 //Löschen der Byte Information SRW 13 T #Aus_A_Teil2 L #Aus_A_Teil2 //Bit Adresse L #Aus_A_Teil1 //Byte Adresse OW //Wort Oder T #Aus_A_Teil1 //Adresse für Byte.Bit LAR1 //Ablegen im Adressregister 1
@MatMer
Kannst Anweisungen sparen, nach einem Transfer steht der Wert immernoch im Akku und braucht nicht nochmal geladen zu werten.Code:L #Ausgang1 //Einlesen der Ersten Byte.Bit Adresse im INT Format ohne Trennzeichen ITB //Umwandeln in eine BCD Zahl // T #Aus_A_Teil1 // L #Aus_A_Teil1 //Speichern des Wertes um Byte und Bit zu ermitteln T #Aus_A_Teil2 // L #Aus_A_Teil1 //Ermitteln des Bytes SRW 4 //Löschen der Bit Informationen SLW 3 //Korrigieren der Stellen T #Aus_A_Teil1 L #Aus_A_Teil2 //Ermitteln des Bits SLW 13 //Löschen der Byte Information SRW 13 T #Aus_A_Teil2 // L #Aus_A_Teil2 //Bit Adresse L #Aus_A_Teil1 //Byte Adresse OW //Wort Oder T #Aus_A_Teil1 //Adresse für Byte.Bit LAR1![]()
ja ich hab das jetzt auch schon öfters bei euch gesehen das ich viel zu viel lade aber ist halt gewöhnung und in der schule haben wir nur fup gelernt
(ich befürchte unser lehrer hatte keine ahnung von awl) und im praktikum musst ich dann awl machen und deshalb ist das alles noch nicht sooo sauber
ich versuche mich aber zu verbessern![]()
![]()
Moin
musst du denn das Bit so afrufen oder kannst du auch 2 getrennte Werte für Bit und Byte vorgeben Also einmal als INT der Bytewert also 9 und einmal als INT Wert die Bitnummer also 6
So würde ich das schreibenCode:FUNCTION FC 2 : VOID TITLE = Bit Aufrufer VERSION : 0.1 VAR_INPUT Adresse : INT ; //Adresse des aufzurufenden BITs END_VAR VAR_OUTPUT BITOUT : BOOL ; //Ausgang des Bits END_VAR VAR_TEMP BCDZahl : WORD ; //BCD Zahl BITWert : INT ; //Nummer des BITs BYTEWert : INT ; //Nummer des Bytes END_VAR BEGIN NETWORK TITLE = L #Adresse; // Laden der Adresse ITB ; //INT to BCD T #BCDZahl; //IN BCD Speicher Abegen L W#16#F; //Maskieren auf die ersten 4 BIt UW ; BTI ; //Wandeln nach INT T #BITWert; //Abspeichern L 7; //Laden einer 7 >I ; //Vergleich auf Größer BEB ; //Wenn größer dann baustein bedingt Benden L #BCDZahl; //Laden der BCD Zahl L W#16#FFF0; //Maskieren auf die letzten 3 Stellen UW ; SRW 4; //Um 4 Stellen nach rechts BTI ; //BCD to INT SLW 3; //Um 3 stellen nach Links L #BITWert; //Den BITwert Laden OW ; //Verschmelzen LAR1 ; //Ins Adreessregister 1 U E [AR1,P#0.0]; //Aufruf des BITs = #BITOUT; //Ausgeben des Bits END_FUNCTION
Ach ja weiß jemand wie man das mit dem Bitaufruf auch noch so hinbekommt das man einen geschlossenen FC Programmieren kann und trotzedem auf M oder A oder E zugreifen kann bei mir steht ja U E ....
MfG Balou
So wie das Eisen außer gebrauch rostet und das stillstehende Wasser verdirbt oder bei Kälte gefriert, so verkommt der Geist ohne Übung.
du meinst das mit dem aufruf also hier der eingang E [ar1,p#...]
oder was
hmmmmmm das geht doch bestimmt nicht ganz so einfach
oder verstehe ich dich jetzt falsch
Ja genau das hab ich gemeint
Es muss doch irgendwie gehen das man am FC von außen sagt A oder E oder so.
Kalr das das evtl net ganz einfach ist ader wir sind hier über 500 Leuts das muss doch zu schaffen sein.
Ich werd ma nen neuen Thread aufmachen
MfG Balou
So wie das Eisen außer gebrauch rostet und das stillstehende Wasser verdirbt oder bei Kälte gefriert, so verkommt der Geist ohne Übung.
Bookmarks