
|
INFO - FAQ - CC2-Forum - CCPro-Forum |
|
||
|
Hallo, danke für den Tipp - ich hab ihm meinen Beispielcode mal zugeschickt... Übrigens hab ich schon alle verfügbaren Programmiersprachen für CC1 durch - und vom Umfang und der Übersichtlichkeit her ist Basic++ einfach die beste. Hier noch der Beispielcode, der in Basic++ meine CC1 zum Absturz bringt und davor noch totalen Müll ausspuckt: type TCurrent Eg Word 'Eg = Integral von Ig' Ig Word 'I aufsummiert für Integral Iav Word 'durchschnitts-I des letzten Intervalls Is Word 'Strom (neg oder positiv) - signed I1Offset Byte 'Werte beim Start I2Offset Byte IntegralCount Byte 'Zeit bis zum Integrieren lTime Word 'letzte Zeitmessung I1 AD[5] 'pos Strom I2 AD[6] 'neg Strom end type define CU TCurrent define x Byte const cDispTime = 50 CU.Eg = 0 CU.Ig = 0 CU.Iav = 0 CU.lTime = 0 CU.IntegralCount = 0 #MainLoop if Abs(Timer - CU.lTime) >= cDispTime then ReadOut 'Jede Sekunde Strom auslesen und aufsummieren pause 1 goto MainLoop function ReadOut() 'Timer speichern, IntegralCount erhöhen CU.lTime = Timer CU.IntegralCount = CU.IntegralCount + 1 'hier steht normalerweise die Stromabfrage über die AD-Ports - für den Test ist I = const CU.Is = -62 'I Aufsummieren CU.Ig = (CU.Ig + CU.Is) print CU.Ig 'Zeit zum Integrieren ? if CU.IntegralCount >= 60 then Integral end function function Integral() 'Durchschnitts Is berechnen, CU.Iav = CU.Iav + (CU.Ig / CU.IntegralCount) 'Rest in Ig speichern - vorsicht: Mod beachtet keine Vorzeichen if CU.Ig < 0 then CU.Ig = ((-CU.Ig) Mod CU.IntegralCount) CU.Ig = -CU.Ig else CU.Ig = (CU.Ig Mod CU.IntegralCount) end if Print "Iav: " & CU.Iav print "Rest Ig: " & CU.Ig 'Quasi-Integrieren CU.Eg = CU.Eg + (CU.Iav / 60) 'Rest in Iav speichern if CU.Iav < 0 then x = ((-CU.Iav) Mod 60) CU.Iav = -x else CU.Iav = (CU.Iav Mod 60) end if print "Rest Iav: "& CU.Iav print "Eg: " & CU.Eg 'Counter resetten CU.IntegralCount = 0 end function |
| Antwort schreiben |