Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: VB6: IO syssi ongelma

Arto [13.12.2011 13:53:43]

#

Heips!

tein ohjelman pätkän vb6:llä joka alustaa ohjelmointilaitteen windowssin käynnistyessä. kun ajan ohjelman "manuaalisesti" se toimii ja nollaa ohjelmointilaitteen, mutta kun lisään ohjelman tuonne käynnistä valikon käynnistä hakemistoon, mistä sen pitäisi lähteä käyntiin kun windows nousee jaloilleen, ja käynnistyykin ohjelma mutta heittää seuraavanlaisen herjan.

"the IO.SYS service is present, but the driver cannot be connected to".

oikos jollain tietoo mistä tämmönen johtuu ja ennen kaikkea kuinka se korjataan.

käyttiksenä xp

neau33 [13.12.2011 16:42:52]

#

Morjens Arto!

Et viittis millään pistää koodia esille...jos vaikka joku osais avittaa...

Arto [13.12.2011 20:03:57]

#

juu tottakai. tää koko roska on yhdessä modulissa, eli ei oo näkyvää ikkunaa ollenkaan...

Private Declare Sub PortOut Lib "IO.DLL" (ByVal Port As Integer, ByVal Data As Byte)
Private Declare Function PortIn Lib "IO.DLL" (ByVal Port As Integer) As Byte
Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)

Sub main()
SetProg 0, 0
PortOut 889, 0
PortOut 888, 0
End
End Sub
Public Sub SetProg(Memad As Integer, Conf As Byte)
Dim Bit1 As Byte
Dim Bit2 As Byte


Bit1 = Memad And 255
Bit2 = Memad And 768 / 256


Conf = Conf * 4

Bit2 = Bit2 Or Conf

PortOut 888, Bit1
PortOut 890, 13
Sleep 50
PortOut 890, 15
Sleep 50

PortOut 888, Bit2
PortOut 890, 7
Sleep 50
PortOut 890, 15
Sleep 50





End Sub

Public Sub CEon()
PortOut 890, 11

End Sub
Public Sub CEoff()
PortOut 890, 15

End Sub

Grez [13.12.2011 20:34:26]

#

Veikkaan että ongelmana on että ajuri ei ehdi latautua, alustua tms, ennenkuin käytät sitä tuossa ohjelmassa.

Laita looppi jossa on odottelet että ajuri latautuu.

Tyyliin

'Olemassa olevien declareiden lisäksi
Private Declare Function IsDriverInstalled Lib "IO.DLL" As Boolean

Sub Main()
	Dim i As Integer
	For i = 1 to 60
		If IsDriverInstalled() Exit for
		Sleep 1000
	Next
	If i = 61 Then
		MsgBox("Portin käyttö ei onnistunut minuutissa")
		End
	End If

	SetProg 0, 0
	PortOut 889, 0
	PortOut 888, 0
	End
End Sub
' Jne

Arto [14.12.2011 19:50:26]

#

sama ongelma jatkuu... ensin tulee tämä ilmoitus
""the IO.SYS service is present, but the driver cannot be connected to".

ja sitte noin minuutinn päästä tuo ohjelma tekemä msgbox.

ErroR++ [14.12.2011 19:54:40]

#

No odottele kauemmin. Tai kokeile rebootata ja sitten heti kun vain voit niin aja se manuaalisesti.

neau33 [15.12.2011 08:10:40]

#

Morjens Arto!

Lataa inpout32.dll ja testaa oheista viritelmää...

VB6-Projekti (StartUpTest)

'Module1 (Startup Object: Sub Main)
'Declare Function Inp Lib "inpout32.dll" Alias "Inp32" _
'(ByVal PortAddress As Integer) As Integer

Declare Sub Out Lib "inpout32.dll" Alias "Out32" _
(ByVal PortAddress As Integer, ByVal Value As Integer)

Sub Main()

   Static cnt As Integer

   Do: DoEvents

      If SetProg(0, 0)(0) = 0 Then
         Out 889, 0
         Out 888, 0
         Exit Do
      Else
         If cnt = 60 Then
            ResultDialog.Label1.Caption = _
            "The device has not been initialised" _
            & vbCrLf & vbCrLf & SetProg(0, 0)(1)
            ResultDialog.Show (1)
         End If
         cnt = cnt + 1
      End If

   Sleep 1: Loop

   ResultDialog.Label1.Caption = _
   "The device has been initialised"
   ResultDialog.Show (1)

End Sub

Function SetProg(Memad As Integer, Conf As Byte) As Variant

   Dim RetArray(1) As Variant

   Dim Bit1 As Byte
   Dim Bit2 As Byte

   Bit1 = Memad And 255
   Bit2 = Memad And 768 / 256

   Conf = Conf * 4

   Bit2 = Bit2 Or Conf

   On Error GoTo ErrorHandler

   Out 888, Bit1
   Out 890, 13
   Sleep 0.1
   Out 890, 15
   Sleep 0.1

   Out 888, Bit2
   Out 890, 7
   Sleep 0.1
   Out 890, 15
   Sleep 0.1

   RetArray(0) = 0
   RetArray(1) = ""
   SetProg = RetArray
   Erase RetArray
   Exit Function

ErrorHandler:

   RetArray(0) = Err
   RetArray(1) = Error$
   Err.Clear
   On Error GoTo 0
   SetProg = RetArray
   Erase RetArray

End Function

Sub Sleep(delay As Single)

    delay = delay + Timer
    Do While delay > Timer: DoEvents: Loop

End Sub
'ResultDialog (Form):
'Caption:  "Device Initialization"
'BorderStyle: 3 - FixedDialog
'ClipControls: False
'ControlBox: False
'StartupPosition: 2 - CenterScreen

'Label1:
'AutoSize: True

Option Explicit

Private Sub Form_Activate()

    Sleep 3: End

End Sub

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta