home *** CD-ROM | disk | FTP | other *** search
- '***********************************************************************
- ' Circuit.rlz
- '
- ' RC Circuit Analysis Demo
- '
- ' Copyright ⌐ 1991-1992 Computer Associates International, Inc.
- ' All rights reserved.
- '
- '***********************************************************************
-
- PROC SetupCurves
- TT = 0.001
- V0 = 1
- n = 150
- s = 0.002
- ds = s / n
- dT = TT / ds
- t = Index(n) / (n/s)
- p[1:n/2] = 1
- p[n/2+1:n] = 0
- FormSetObject(70, _Chart, "", 370 pxl, 10 pxl, 230 pxl, 200 pxl)
- ChartSetColor(_Red)
- ChartXYLine(t, p)
- ChartSetKey("Vin(t)")
- ChartSetXAxis(0, 0.002)
- ChartSetYAxis(-0.1, 1.1)
- ChartSetProc(ChartProc)
- ChartControlKey(_Show)
- color = _Blue
- KeyFlag = 1
- END PROC
-
- PROC PlotCurves(R, C)
- LOCAL RC
-
- RC = R * C
- V = V0 * (1 - exp(-t/RC)) + (1-p) * -V0 * (1 - exp(-(t - TT)/RC))
- ChartSetColor(color)
- ChartXYLine(t, V)
- ChartSetKey(sprint("Vout(R=P(0), C=P(0))", R, C * 1e9))
- color = color + 1
- END PROC
-
- PROC ColorResistor(r)
- LOCAL s, band1, band2, band3
- LOCAL bandcolor
-
- bandcolor = {_Black, _Brown, _Red, _Orange, _Yellow, _Green, _Blue, _Violet, _Gray, _White}
-
- IF r < 10 OR r >99000000000 THEN
- EXIT PROC
- END IF
- s = sprint("P(0)", r)
- band1 = Asc(Left$(s, 1)) - 48
- band2 = Asc(Mid$(s, 2, 1)) - 48
- band3 = Len(s) - 2
- FormSetColor(bandcolor[band1+1]; _Field)
- FormSetColor(bandcolor[band1+1]; _Text)
- FormSetObject(20, _GroupBox,"", x+221-dx pxl, y+44-dy pxl, 10 pxl,16 pxl)
- FormSetColor(bandcolor[band2+1]; _Field)
- FormSetColor(bandcolor[band2+1]; _Text)
- FormSetObject(30, _GroupBox, "", x+236-dx pxl, y+44-dy pxl, 10 pxl, 16 pxl)
- FormSetColor(bandcolor[band3+1]; _Field)
- FormSetColor(bandcolor[band3+1]; _Text)
- FormSetObject(40, _GroupBox, "", x+251-dx pxl, y+44-dy pxl, 10 pxl, 16 pxl)
- FormSetColor(_White; _Field)
- FormSetColor(_Black; _Text)
- END PROC
-
- PROC ChartProc(params)
- IF KeyFlag THEN
- ChartControlKey(_Hide)
- KeyFlag = 0
- ELSE
- ChartControlKey(_Show)
- KeyFlag = 1
- END IF
- END PROC
-
- PROC FormProc(params)
- LOCAL R, C, tval
-
- FormSelect(params[_FormNum])
- ChartSelect(70, params[_FormNum])
- SELECT CASE params[_ItemNum]
- CASE 1 'Analyze
- R = StrToNum(FormQStr(50))
- C = StrToNum(FormQStr(60)) * 1e-9
- ColorResistor(R)
- PlotCurves(R, C)
-
- CASE 2 'Quit
- FormControl(_Close)
- EXIT PROGRAM
-
- CASE 3 'Clear
- ChartControl(_Close)
- SetupCurves
-
- CASE 50 'R
- tval = StrToNum(FormQStr(50), "")
- IF QVar(tval, _Alpha) THEN
- BEEP
- FormModifyObject(50, _SetFocus, "0")
- END IF
-
- CASE 60 'C
- tval = StrToNum(FormQStr(60), "")
- IF QVar(tval, _Alpha) THEN
- BEEP
- FormModifyObject(60, _SetFocus, "0" )
- END IF
-
- END SELECT
- END PROC
-
- x = 0
- y = 45
- dx = 81
- dy = 40
-
- SetSys(_LoadDir, QSys(_LoadDir) + ";" + QSys(_ProgDir) + "bitmaps")
- FormNew(FormQUnique; "Transient RC Circuit Analysis", _Title + _Close + _Minimize)
- FormControl(_Size; _Center, 2 pct, 614 pxl, 250 pxl)
- FormSetObject(10, _Bitmap, "circuit", x pxl, y pxl)
- FormModifyObject(10, _Gray)
- ColorResistor(1000)
- FormSetObject(50, _TextBox, "1000", x+205-dx pxl, y+10-dy pxl, 80 pxl, _Default; _Notify)
- FormSetObject(60, _TextBox, "1000", x+290-dx pxl, y+105-dy pxl, 60 pxl, _Default; _Notify )
- FormSetObject(1, _DefButton, "Analyze", 8 pct, 180 pxl)
- FormSetObject(3, _Button, "Clear", 25 pct, 180 pxl)
- FormSetObject(2, _Button, "Quit", 42 pct, 180 pxl)
- SetupCurves
- FormControl(_Show)
- FormSetProc(FormProc)
-