Verständnisfrage - warum wird die Spannung trotz "String * 0" angezeigt?

    This site uses cookies. By continuing to browse this site, you are agreeing to our Cookie Policy.

    • Verständnisfrage - warum wird die Spannung trotz "String * 0" angezeigt?

      Damit das Komma zwischen 9,9 und 10,0 Volt an der selben Stelle bleibt habe ich den Integer-Wert nach String konvertiert. Dann die String-Variable mit format 00.0 am LCD anzeigen lassen. Alles super - genau wie ich es wollte!!!
      Aus Interesse (wie verändert sich die Spannungsanzeige) habe ich die Stringlänge von "Dim Volt_anz As String * 4" auf String * 3, String * 2, String * 1, String *0 geändert.
      Die Spannungsanzeige blieb immer unverändert und korrekt. a_27_b277ca12 WARUM?
      Kann mir jemand auf die Sprünge helfen?
      Übrigens - die Konvertierung und Anzeige sind in Zeile 95 und 96

      BASCOM Source Code

      1. 'Variable definieren
      2. '***********************************************************************************
      3. Dim Lcd_aktualisieren As Byte 'um alle LCD-Anzeigen in einer Subroutine zusammenzufassen
      4. Dim Zeit As Byte
      5. Dim Zeit_alt As Byte 'Schweissdauer
      6. Dim Stufe As Byte 'Schweissstufe
      7. Dim Stufe_alt As Byte
      8. Dim Flag_s As Bit 'zur Erkennung ob die Elektroden abgehoben wurden
      9. Dim Flag_taster As Bit 'zur Erkennung ob der Taster losgelassen/gedrueckt wurde
      10. Dim Var1 As Byte
      11. Dim Var2 As Byte
      12. Dim Flag_einstellung As Bit 'zur Abschaltung des Bereitschaftsticken im "Einstellmenue"
      13. Dim Initialisiert As String * 4 'zur Pruerfung ob in EEPROM sinnvolles steht
      14. Dim Anzahl As Word 'Anzahl der Schweissungen
      15. 'Ladebalkenanzeige
      16. Dim B As Single
      17. Dim Balken As Byte
      18. Dim Block As Byte
      19. Dim Lastchar As Byte
      20. Dim I As Byte
      21. 'ADC-Messung
      22. Dim W As Integer 'ADC-Messwert
      23. Dim Adkorr1 As Single 'zur Kalibrierung der Spannungsmessung
      24. Dim N As Byte 'Hilfsvariable zur Mittelwertbildung des ADC-Messwertes
      25. Dim Mean As Single 'Hilfsvariable zur Mittelwertbildung des ADC-Messwertes
      26. Dim Volt As Single 'für Ladebalkenanzeige
      27. Dim Volt_i As Integer 'fuer Regelung
      28. Dim Konstante As Single 'Konstante = 5 / 1023
      29. Dim Volt_anz As String * 4 'fuer Spannungsanzeige
      30. 'Energieberechnung
      31. Dim E As Single 'zur Energieberechnung
      32. Dim J As Word 'fuer Energieanzeige
      33. 'Drehencoder
      34. Dim Zustand As Byte
      35. Dim Zustand_alt As Byte
      36. Dim Zustandswechsel As Word At Zustand Overlay
      37. Dim Wechsel As Byte
      38. Dim Wert As Byte 'Drehencoder Variable
      39. Do
      40. .
      41. .
      42. .
      43. Loop
      44. 'ADC-Spannungsmessung mit Mittelwertbildung von 20 Messungen
      45. '***********************************************************************************
      46. Spannung_messen:
      47. W = Getadc(0) 'Single Messung an ADC0 durchführen - liefert 10 Bit Wert von dezimal 0..1023
      48. Mean = 0
      49. For N = 1 To Messzahl 'Mittelwert von 20 Messungen bilden
      50. W = Getadc(0)
      51. Mean = Mean + W
      52. Next N
      53. Mean = Mean / Messzahl 'Ergebnis geteilt durch Messzahl
      54. Volt = Mean * Konstante 'Konstante ist 5/1023
      55. Volt = Volt * Adkorr1 'Single zur Berechnung der Ladebalkenanzeige
      56. Volt_i = Volt * 10 'Integer zum Regeln
      57. Return
      58. 'Alle LCD_Anzeigen
      59. '***********************************************************************************
      60. Anzeige:
      61. If Lcd_aktualisieren = 255 Then 'Begrüßungstext
      62. Ledblau = 1
      63. Locate 1 , 1
      64. Lcd "0.4F KONDENSATOR"
      65. Locate 2 , 1
      66. Lcd "PUNKT-SCHWEISZER"
      67. Wait 3
      68. Locate 1 , 1
      69. Lcd " VERSION 150320 "
      70. Locate 2 , 1
      71. Lcd "ATMEGA 8 / 16MHz"
      72. Wait 3
      73. Ledrot1 = 1
      74. Ledrot2 = 1
      75. Ledrot3 = 1
      76. End If
      77. '*******************************
      78. 'Anzeige Stufe, Spannung, Schweissdauer, Energie und Summe aller Schweissungen
      79. If Lcd_aktualisieren = 254 Then
      80. Locate 1 , 1
      81. Lcd "S" '"S" fuer Stufe
      82. Locate 1 , 2
      83. Lcd Stufe 'Anzeige Stufe x
      84. Locate 1 , 3
      85. Lcd " "
      86. Locate 1 , 4
      87. Volt_anz = Str(volt_i) 'Integer fuer Spannungsanzeige nach String konvertieren
      88. Lcd Format(volt_anz , "00.0") 'Komma setzen und Spannung anzeigen
      89. Locate 1 , 8
      90. Lcd "V / "
      91. Locate 1 , 12
      92. If Zeit < 10 Then Lcd " "
      93. Lcd Zeit 'Anzeige Impulsdauer
      94. Locate 1 , 14
      95. Lcd " ms"
      96. End If
      97. '*******************************
      98. 'Anzeige Energie und Summe aller Schweissungen
      99. If Lcd_aktualisieren = 250 Then
      100. Locate 2 , 1
      101. Lcd "E= "
      102. Locate 2 , 4
      103. If J < 100 Then Lcd " "
      104. If J < 10 Then Lcd " "
      105. Lcd J
      106. Locate 2 , 7
      107. Lcd "J"
      108. Locate 2 , 8
      109. Lcd " S:"
      110. Locate 2 , 12
      111. If Anzahl < 10000 Then Lcd " "
      112. If Anzahl < 1000 Then Lcd " "
      113. If Anzahl < 100 Then Lcd " "
      114. If Anzahl < 10 Then Lcd " "
      115. Lcd Anzahl
      116. End If
      117. '*******************************
      118. 'Anzeige zum Einstellen der Schweissdauer
      119. If Lcd_aktualisieren = 253 Then
      120. Locate 1 , 1
      121. Lcd " SCHWEISSDAUER "
      122. If Stufe = 1 Then 'Stufe 1
      123. Locate 2 , 1
      124. Lcd "4-10 ms "
      125. Locate 2 , 10
      126. Lcd Chr(6)
      127. Locate 2 , 11
      128. If Zeit < 10 Then Lcd "0"
      129. Lcd Zeit
      130. Locate 2 , 13
      131. Lcd Chr(7)
      132. Locate 2 , 14
      133. Lcd " ms"
      134. End If
      135. If Stufe = 2 Then 'Stufe 2
      136. Locate 2 , 1
      137. Lcd "5-10 ms "
      138. Locate 2 , 10
      139. Lcd Chr(6)
      140. Locate 2 , 11
      141. If Zeit < 10 Then Lcd "0"
      142. Lcd Zeit
      143. Locate 2 , 13
      144. Lcd Chr(7)
      145. Locate 2 , 14
      146. Lcd " ms"
      147. End If
      148. If Stufe = 3 Then 'Stufe 3
      149. Locate 2 , 1
      150. Lcd "6-10 ms "
      151. Locate 2 , 10
      152. Lcd Chr(6)
      153. Locate 2 , 11
      154. If Zeit < 10 Then Lcd "0"
      155. Lcd Zeit
      156. Locate 2 , 13
      157. Lcd Chr(7)
      158. Locate 2 , 14
      159. Lcd " ms"
      160. End If
      161. End If
      162. '*******************************
      163. If Lcd_aktualisieren = 252 Then 'Schweißspannung zur gewaehlten Stufe zu hoch
      164. Locate 1 , 1
      165. Lcd "SPANNUNG ZU HOCH"
      166. Locate 2 , 1
      167. Lcd "!AUSSERHALB SOA!" '"Save Operating Area" laut Datenblatt des IXFH170N10P
      168. End If
      169. '*******************************
      170. If Lcd_aktualisieren = 251 Then 'Anzeige zum Einstellen der Schweissstufe
      171. Locate 1 , 1
      172. Lcd " SCHWEISSTUFE "
      173. If Stufe = 1 Then
      174. Locate 2 , 1
      175. Lcd "12,0-20,0 V "
      176. Locate 2 , 13
      177. Lcd Chr(6)
      178. Locate 2 , 14
      179. Lcd "S"
      180. Locate 2 , 15
      181. Lcd Stufe 'Stufe 1
      182. Locate 2 , 16
      183. Lcd Chr(7)
      184. End If
      185. If Stufe = 2 Then
      186. Locate 2 , 1
      187. Lcd "19,0-27,0 V "
      188. Locate 2 , 13
      189. Lcd Chr(6)
      190. Locate 2 , 14
      191. Lcd "S"
      192. Locate 2 , 15
      193. Lcd Stufe 'Stufe 2
      194. Locate 2 , 16
      195. Lcd Chr(7)
      196. End If
      197. If Stufe = 3 Then
      198. Locate 2 , 1
      199. Lcd "26,0-32,0 V "
      200. Locate 2 , 13
      201. Lcd Chr(6)
      202. Locate 2 , 14
      203. Lcd "S"
      204. Locate 2 , 15
      205. Lcd Stufe 'Stufe 3
      206. Locate 2 , 16
      207. Lcd Chr(7)
      208. End If
      209. End If
      210. Return
      Display All
    • Hallo avralfred,
      der Compiler überprüft nur die Zuweisung von konstanten Strings an eine Variable, nicht von variablen.
      Das musst du machen.
      Die Zuweisung wird allerdings trotzdem gemacht, was dazu führt, dass die Speicherzellen hinter der zu kurzen String variablen überschrieben werden. Die funktionieren dann nicht mehr, was teilweise schwer zu findende Probleme verursacht.