PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : print mit 6 Stellen



TobiasBlome
15.03.2007, 16:48
Hallo,
ich möchte eine Software über RS232 ansteuern und die gibt ein bestimmtes Format vor:

Und da muss ich 6 Zeichen senden! also wenn ich eine 1 senden möchte muss ich 000001 senden wie geht das?

Genauer gesagt ich möchte einen Analogeingang auslesen und dann übe RS232 senden ABER immer 6 Zeichen.

Tobias

PicNick
15.03.2007, 18:54
EIn Beispiel, hoffentlich verständlich



Dim Inpt As String * 20
Dim Utp As String * 20
Dim Va As Integer

Va = 123
Inpt = Str(va)
Utp = Format(inpt , "000000")
Print Utp

TobiasBlome
15.03.2007, 21:47
hmmm....
kannst du mir das noch ein bisschen erklären?

Warum String*20 - warum nicht *6?

Also ich verstehe das soo:

Va = 123 oder z.B. mein Analogeingang....
Va kommt in ein String (Inpt)
Utp bekommt das Format 000000 und inpt(warum kann ich hier nicht gleich Va eintragen?)
Dann wird Utp ausgegeben.

Tobias

RobbyNB
16.03.2007, 01:30
Hallo,

möcht auch mal was schreiben ;-)


Warum String*20 - warum nicht *6?

Also du kannst natürlich auch string * 6 "schreiben" , dann "passen" halt 6 Zeichen in deinen String, macht dann 7 Byte.




Va kommt in ein String (Inpt)

Richtig. Va wird in durch die STR-Funktion in einen String umgewandelt.


Utp bekommt das Format 000000 und inpt(warum kann ich hier nicht gleich Va eintragen?)

Naja, inpt bekommt das Format und wird in Utp gespeichert. Du kannst der FORMAT-Funktion nur Strings übergeben, wenn Va ein String ist,kannst du auch Va direkt übergeben.


Steht auch alles sehr schön in der Online-Hilfe von der Bascom.....

Gute Nacht...

Mfg

Robby[/i]

TobiasBlome
16.03.2007, 11:41
so und schon fertig - dachte ich...

nun muss nur noch der Analogeingang angehängt werden. Nun habe ich aber ein Problem bei der Umrechnung mit den Kommastellen: die werden ignoriert:


Dim Uuuuu_in0 As Long 'Analogeingang ADC0
Dim Uuuuu_in1 As Long
Dim Uuuuu_in2 As String * 5
Dim Uuuuu As String * 5 '5)Spannung in mV

'Spannung wandeln
'______________________


Uuuuu_in0 = Getadc(0) 'Wert aus Analogeingang laden
Uuuuu_in1 = Uuuuu_in0 * 5.43499511241447
Uuuuu_in2 = Str(uuuuu_in1)
Uuuuu = Format(uuuuu_in2 , "00000")
Print Uuuuu

was muss ich ändern, das die komastelen berücksichtigt werden? Im Ergebniss (Print Uuuuu) soll natürlich KEIN Komma drin sein.

Tobias

RobbyNB
16.03.2007, 12:15
Hallo,

ähmm vielleicht solltes du dich doch ein wenig erstmal mit grundlegenden Sachen beschäftigen. Z.Bsp. DATENTYPEN in Bascom

Long ist ganzzahlig, der Wertebereich ist von -2,1Mrd noch irgendwas bis +2,1Mrd....(hab es nicht im Kopf,aber 2^32 dann hast den Wertebereich)

Also?

Ganz klar das dann keine "Kommastellen" vorhanden sind.
Deklariere sie mal als SINGLE anstatt LONG.....

Und kleiner Tip, schau echt einmal in die Online-Hilfe...Dann lernste sicher mehr...

Gruß

Robby

TobiasBlome
16.03.2007, 12:27
Danke für den Tip,
aber single ist nicht mit dem Analogeingang "kompatibel"

TobiasBlome
16.03.2007, 12:30
so, hab´s mal ausprobiert:

Source variable does match the target variable [36]

bezieht sich auf:
Uuuuu_in0 = Getadc(0)

Tobias

TobiasBlome
16.03.2007, 12:35
da es ja mit single probleme gibt habe ich

Dim Uuuuu_in0 As Long
Dim Uuuuu_in1 As Single
Dim Uuuuu_in11 As Single
Dim Uuuuu_in2 As String * 5
Dim Uuuuu As String * 5

Keine Fehlermeldung - aber es kommt nicht´s vernünftiger über RS232 an:
<\0>ð<\0>ð<\0>ð<\0>ð<\0>ð<\0>ð<\0>ð<\0>ð<\0>ð<\0>ð<\0>ð
<\0>ð<\0>ð<\0>ð<\0>ð<\0>ð<\0>ð<\0>ð<\0>ð<\0>ð<\0>ð<\0>ð<\0
>ð<\0>ð<\0>ð<\0>ð<\0>ð<\0>ð<\0>ð<\0>ð<\0>ð<\0>ð<\0>ð<\0>ð

TobiasBlome
16.03.2007, 12:39
wie wärs damit? 2 mal rechnen, ist aber nicht die feine art...

Dim Uuuuu_in0 As Long 'Analogeingang ADC0
Dim Uuuuu_in1 As Long
Dim Uuuuu_in11 As Long
Dim Uuuuu_in2 As String * 5
Dim Uuuuu As String * 5 '5)Spannung in mV


'_____________________

Uuuuu_in0 = Getadc(0) 'Wert aus Analogeingang laden
Uuuuu_in1 = Uuuuu_in0 * 5474
Uuuuu_in11 = Uuuuu_in1 / 1000
Uuuuu_in2 = Str(uuuuu_in11)
Uuuuu = Format(uuuuu_in2 , "00000")
'Print Uuuuu

aber kein Komma mehr...na ja...

RobbyNB
16.03.2007, 13:50
Hmmm,

und warum packste den Long-Wert nicht einfach in ne Single-Variable???
Also so hier:

dim U_ADC as Long 'ADC0
dim U_Temp as Single 'Hilfsvariabel in der der ADC0-Wert gespeichert wird
dim U as Single 'Zur Berechnung
dim strUtemp as string*6 'Temp-String
dim strU as String *6 'Der String zur Ausgabe

'_____________________

U_ADC = Getadc(0) 'Wert aus Analogeingang laden
U_Temp=U_ADC 'Umwandlung von Long zu Single
U=U_Temp* 5.43499511241447
strUtemp=STR(U)
strU = Format(strUtemp , "00000")
Print strU


Geht das denn etwa nicht????

TobiasBlome
16.03.2007, 14:09
nee das passt auchnicht mit dem Analog wert:

Print U_ADC -> habe mal ein Poti angeklemmt 0-5V / 0-1023bit -> die 1023 sind ein "bisschen" da je weiter ich runter drehe, werden die werte "schwammiger":

<\0>þ1023<\r><\n><\0>þ1023<\r><\n><\0>þ1023<\r><\n><\0>þ1023<\r><\n><\0>þ1023<\r><\n><\0>þ1023<\r><\n><\0>þ1023<\r><\n><\0>þ1023<\r><\n><\0>þ1023<\r><\n><\0>þ1023<\r><\n><\0>þ1023<\r><\n><\0>þ1023<\r><\n><\0>þ1023<\r><\n><\0>þ1023<\r><\n><\0>þ1023<\r><\n><\0>þ1023<\r><\n><\0>þ1023<\r><\n><\0>þ1023<\r><\n><\0>þ1023<\r><\n><\0>þ1023<\r><\n><\0>þ1023<\r><\n><\0>þ1013<\r><\n><\0>þ995<\r><\n><\0>þ978<\r><\n><\0>þ961<\r><\n><\0>933<\r><\n><\0>þ929<\r><\n><\0>þ903<\r><\n><\0><\0><\0>885<\r><\n><\0>p<\0><\0><\0><\0><\0><\0>€8xu<\r><\n><\0>þ867<\r><\n><\0><\0><\0>xvw<\r><\n><\0>þ850<\r><\n><\0><\0><\0>850<\r><\n><\0>þ824<\r><\n><1><\0><\0><\0><\0><\0><\0><\0><\0><\0><\0><\0><\0><\0><\0><\0><\0><\0><\0><\0><\0><\0><\0><\0><\0><\0><\0><\0><\0><\0><\0><\0><\0><\0><\0><\0><\0><\0><\0><\0><\0><\0><\0><\0><\0><\0><\0><\0><\0><\0><\0><\0><\0><\0><\0><\0><\0><\0><\0><\0><\0><\0><\0><\0><\0><\0><\0><\0><\0><\0><\0><\0><\0><\0><\0><\0><\0><\0><\0><\0><\0><\0><\0><\0>ø802<\r><\n><\0><\0><\0>774<\r><\n><\0>wwt<\r><\n><\0>þ755<\r><\n><\0>7uu<\r><\n><\0>þ738<\r><\n><\0><\0><\0>w38<\r><\n><\0>þ722<\r><\n><\0>722<\r><\n><\0>705<\r><\n><\0><\0><\0>705<\r><\n><\0>689<\r><\n><\0><3><\0><\0><\0><\0><\0><\0><\0><\0><\0><\0><\0><\0><\0><\0><\0><\0><\0><\0><\0><\0><\0><\0><\0><\0><\0><\0><\0><\0><\0><\0><\0><\0><\0><\0><\0><\0><\0><\0><\0><\0><\0><\0><\0><\0><\0><\0><\0><\0><\0><\0><\0><\0><\0><\0><\0><\0><\0><\0><\0><\0><\0><\0><\0><\0><\0><\0><\0><\0><\0><\0><\0><\0><\0><\0><\0><\0><\0><\0><\0><\0><\0><\0><\0><\0><\0><\0><\0><\0><\0><\0><\0><\0><\0><\0><\0><\0><\0><\0><\0><\0><\0>

RobbyNB
16.03.2007, 14:21
Ich sehe grad das GETADC sowieso nur nen WORD-Wert zurück liefert, von daher brauch U_ADC nicht Long sein....Spielt ja aber erstmal keine Rolle.

Wie schwammiger??
Was meinst du genau?
Was hast du vor?

TobiasBlome
16.03.2007, 15:12
na guck doch mal wie das oben aussieht...

es sollte eigendlich:
1023\r\n
1023\r\n
1023\r\n
1023\r\n
1023\r\n
1023\r\n
1023\r\n

und wenn ich am Poti drehe muss der Wert kleiner werden

1023\r\n
1022\r\n
1021\r\n
1020\r\n

oiermann
16.03.2007, 17:06
Sicher, dass du das poti als Spannungsteiler angeklemmt hast? Sonst begrenzt du nur den Strom, an der Spannung ändert sich nichts.

+ -> Poti linker Stift
ADC -> Poti Mitte
- -> Poti rechter Stift

TobiasBlome
17.03.2007, 08:31
ja, logo :-)

Ich hab´s jetzt erstmal ohne die Kommastellen programmiert -> also Komma verschoben und dann durch 1000 gerechnet das geht, ist aber ein Rechenschritt mehr ;-(


Dim Uuuuu_in0 As Long 'Analogeingang ADC0
Dim Uuuuu_in1 As Long
Dim Uuuuu_in11 As Long
Dim Uuuuu_in2 As String * 5
Dim Uuuuu As String * 5 '5)Spannung in mV


_____________________

Uuuuu_in0 = Getadc(0) 'Wert aus Analogeingang laden
Uuuuu_in1 = Uuuuu_in0 * 5474
Uuuuu_in11 = Uuuuu_in1 / 1000
Uuuuu_in2 = Str(uuuuu_in11)
Uuuuu = Format(uuuuu_in2 , "00000")
'Print Uuuuu


Tobias

RobbyNB
17.03.2007, 22:39
Hmmm,

verstehe dann nicht wirklich dein Problem. Denn bei mir funktioniert es tadellos, auch mit der Single-Variable....

Und was stört dich an einer Rechenoperation mehr?
Dann mach es so wie ich und dann hast du eine Rechenoperation, aber dafür halt eine Single-Variable anstatt Long....


Gruß

Robby

zerush
18.03.2007, 01:02
diese operartion mehr ist bestimmt immer noch günstiger als mit ner floating point variable rechnen zu müssen (zumindest wenn eh nur was ganzzahliges ausgegeben werden soll)