Monthly Archives: March 2026

National Instruments GPIB-USB adapteris

Kadangi mano HP loginis analizatorius neturi “pastovios” atminties, kiek užknisa kiekvieną kartą perkonfiguruoti visus nustatymus. Vienintelis būdas automatizuoti konfiguravimą- naudoti GPIB jungtį ir viską pumpuoti per ją. Pradžiai galvojau pasidaryti tą adapterį savo rankelėmis, bet ten reikia dviejų specialių mikroschemų, kurios kažkaip nepopuliarios. Konstruoti kažką diskretiško patingėjau. Nors ir pradėjau teorinį projektą ir susiradau visą softą jam (STM32F mikrokontroleriui). Ir dar softą perrašiau iš “arduino” į generic C. Tačiau galu gale nusprendžiau nusipirkti pramoninį variantą- National Instruments adapterį.

Atvykęs iš kinijos adapteris pareikalavo registracijos NI puslapiuose. Tačiau, kaip ne keista, NI pripažino jį originaliu ir visas softas pasileido. Tačiau softas visiškai netinkamas HP 1630A analizatoriui. Seniau, kai dar nebuvo visokių windows, ir net nebuvo DOS operacinės sistemos, tokie prietaisai valdydavosi iš BASIC programos. Todėl nutariau kiek pažaisti programuotojais. NI duoda draiverius ir biblioteką prietaiso valdymui (jis nepasimato kaip koks nors “generic” USB prietaisas). Todėl čia bus trumpa instrukcija man, kol neužmiršau kaip pradėti dirbti su National Instruments GPIB-USB-HS adapteriu.

Pirmiausia reikia prijungti bibliotekas prie projekto- references:

Ar reikia abiejų “reference” aš nežinau. Bet sudėjus abi, tikrai veikia.

Toliau reikia kogero “importuoti”:

Imports NationalInstruments.NI4882

Įrenginį “atidaryti”:

Private Sub OpenGPIB()
        Dim board As Integer
        Dim primary As Byte
        Dim secondary As Byte
        board = My.Settings.Board
        primary = My.Settings.pAdr
        secondary = My.Settings.sAdr
        Try
            dev = New Device(board, primary, secondary, My.Settings.TimeOut)
            dev.DefaultBufferSize = 14000
            dev.Reset()
            status("GPIB Open")
        Catch ex As Exception
            status(ex.Message)
        End Try
End Sub

Čia iš komentarų – buferis pagal nutylėjimą yra vienas kilobaitas. Jei prietaisas išspjauna daugiau informacijos nei telpą į buferį gali kilti problemos ir vargai. Dabar kai turim daug atminties, rekomenduoju buferį padaryti didesnį nei maksimalus galimas atsakymas iš prietaiso ir nereikės sukti kiaušų. Todėl buferį darom gal 10K ar daugiau. O štai timeout rašomas ne mikrosekundėmis, o kvailu kodavimu:

disabled
10 µs
30 µs
100 µs
300 µs
1 ms
3 ms
10 ms
30 ms
100 ms
300 ms
1 s
3 s
10 s
30 s
100 s
300 s
1000 s

čia tipo enum ar panašiai- 0 tai disabled, o 13 tai dešimt sekundžių.

Skaitymas ir rašymas:

    Public Function QueryHP1630A(command As String) As String
        Dim response As String
        If dev Is Nothing Then
            OpenGPIB()
        End If
        Try
            dev.Write(command)
            ' Read response (this will block until termination or driver-defined timeout)
            response = dev.ReadString()
            status("OK")
        Catch ex As Exception
            response = ""
            status(ex.Message)
        End Try
        Return response
    End Function
    Private Sub nuskaityti()
        Dim a(3000) As Byte
        If dev Is Nothing Then
            OpenGPIB()
        End If
        Try
            gpibstatus = dev.LastStatus
            dev.Write(txtResource.Text + vbCr) 'komanda
            a = dev.ReadByteArray 'baitų masyvo nuskaitymas
            status("OK")
        Catch ex As Exception
            gpibstatus = dev.LastStatus
        End Try
    End Sub

Seniau kompiuteriai neskirdavo baitų nuo teksto. O dabar tai jau kiek kita kalba. Todėl, paprastas tekstines eilutes nuskaitom su “readstring”, o jei tame tekste paklius koks nors “netekstinis” baitas, tai skaitymas nutraukiamas. Todėl gal geriau skaityti kaip “readbytearray”. Ir tik vėliau konvertuoti baitus į raides.

Per porą vakarų gavosi tokie griaučiai:

O toliau bėda- HP1630A nepasako, kurioje vietoje stovi kursorius. Todėl valdymas per nuotolį netenka prasmės. Dar blogiau- kai žiūrim į nuskaitytus duomenis, kur gražūs grafikėliai- niekas nepersikelia į tekstinį buferį- waveform paišomos grafiniu režimu. Todėl reikia parašyti pačių duomenų perkėlimą ir analizę. O čia jau prasideda nesąmonės- kažkaip instrukcijos pradeda kiek nesutapti su realia geležimi. Gal galima paeksperimentuoti su “grafinio printerio” emuliacija? Tokia opcija numatyta. Kaip ir kasetinio magnetofono ir diskasukio pajungimas. Pasirodo galima įkelti disasemblerį į šitą loginį analizatorių.

Todėl pasilikau dvi užduotis- konfiguracijos saugojimas ir duomenų eksportas. Gal gausis, o gal ir ne. Viskas priklauso nuo pavasario greičio. Šiandien mačiau kaip špokai (varnėnai) vaikščiojo po kiemą. Iš kitos pusės aš turiu HP ploterį su šiuo interfeisu, kurio galimybės didesnės nei Rotringo. Žymiau įdomiau paišyti kringelius su ploteriu nei gilintis į loginio analizatoriaus vidurius.

Rusiškos PDP detalės

Nors esu nusistatęs prieš tarybines detales, teko kiek nuleisti savo kartelę, nes netikėtai radau gerybių. Kažkas prie n metų pasislėpė Электроника-60 kompiuterio vidurius, buvo suvyniota į chemiškai suirusį poroloną . Gal buvo kokie atsarginiai ar brokuoti ar šiaip jau buvo sukeistas ir sudėto blogi. Buvo 4 plokštės- dvi didelės: procesorius su kažkiek RAM ir kogero koks nors I/O (ar flopikų kontroleris). Aš jas atidaviau sunaikinti, nes pirmiausia rusiškos ir pilnos aukso ir žaliukų, o antriausia- plačios konfiguracijos (4 slotai). Tokio backplane aš neturiu. (visos plokštės buvo ne mano).

Užtat liko absoliuti egzotika. Kogero dvi video plokštės. Grafinės!

Kaip matosi iš nuotraukų, visi žaliukai, geltoniukai ir auksiukai vietoje. Žalia PCB netrumpina buso, bet mėlynam lizde jokios dinamikos. Plokštė neasiliepia skanuojant bussą. O štai geltona (MS4702) generavo video vaizdą lizde, bet kol aš susiradau monitorių (televizorių) jį kažką užtrumpino ir maitblokis nukeliavo į apsaugą. Gal ji dar ir sveikia, gal sriobia labai daug elektros. Ar matosi busse nespėjau praskanuoti. Reikės pradžiai patikrinti maitblokį, nes jis toks senas ir iš šiukšlyno. Dar gali būti, kad tikrai nėra galios, nes ta veikianti PDP dalis kaista kaip koks pečiukas.

Žalia plokštė tikriausiai tai 400×268 juodai baltų pixelių grafika ir dokumentacijoje kažkodėl vadinama ПБА4.135.998 nors instrukcijos gale kodas perbrauktas ir paršyta ПБА7.102.624. Ji kaip ir neveikia (ir dar kryžiukas viniuku nubrėžtas). Bet kažkur išskaičiau, kad reikia paduoti sinchro impulsus paduoti iš kitos plokštės.

Ruda plokštė: Электроника МС4702, grafinė spalvota korta 256×256 ir 8 spalvos.

Dabar nežinau, ar jas kapstyti. Artėja pavasaris ir aš visas šitas nesąmones su PDP padėsiu į archyvą.