www.elektronik.si Seznam forumov www.elektronik.si
Forum o elektrotehniki in računalništvu
 
 PomočPomoč  IščiIšči  Seznam članovSeznam članov  SkupineSkupine  StatisticsStatistika  AlbumAlbum  DatotekeFilemanager DokumentacijaDocDB LinksPovezave   Registriraj seRegistriraj se 
  PravilaPravila  LinksBolha  PriponkePriponke  KoledarKoledar  ZapiskiZapiski Tvoj profilTvoj profil Prijava za pregled zasebnih sporočilPrijava za pregled zasebnih sporočil PrijavaPrijava 

Visual basic in ciklični register

 
Objavi novo temo   Odgovori na to temo   Printer-friendly version    www.elektronik.si Seznam forumov -> Programska oprema
Poglej prejšnjo temo :: Poglej naslednjo temo  
Avtor Sporočilo
nargile
Neznanec
Neznanec



Pridružen-a: Tor 04 Nov 2008 22:06
Prispevkov: 7
Aktiv.: 0.03
Kraj: Grosuplje

PrispevekObjavljeno: Čet Nov 06, 2008 10:57 am    Naslov sporočila:  Visual basic in ciklični register Odgovori s citatom

Hello vsi skupaj.
Pišem zaradi tega, ker imam problem pri programiranju cikličnega bufferja.
Zadeva je sledeča, programiram zajem podatkov iz modbus/tcp protokola.
Problem nastane pri timerju, ko ga nastavim na zelo majhno vrednost se mi program začne sesuvati. Rešitev je v cikličnem bufferju, ki pa ga ne znam napisati v visual basicu. Spodaj podajam kodo,ki zajema string in ga naprej obdeluje, rabil bi pomoč kako sprogramirati fifo buffer, ker na internetu ne najdem nobenega pravega primera.

rivate Sub Winsock1_DataArrival(ByVal datalength As Long)
Dim b As Byte
Dim j As Byte
Dim eks As Long
Dim Man As Long
'outtext



MbusResp = "" ''briše
For i = 1 To datalength
Winsock1.GetData b
MbusResp = MbusResp + Chr(b)
Next
DataParsed = True

CycBuff = Mid(MbusResp, 1, datalength)





If VDecode = 5 Or VDecode = 6 Then
vrednost = 65536# * AscB(Mid(CycBuff, 5, 1)) + 256# * AscB(Mid(CycBuff, 6, 1)) + 1# * AscB(Mid(CycBuff, 7, 1))
If AscB(Mid(CycBuff, 5, 1)) > 127 And VDecode = 6 Then vrednost = vrednost - 16777216
eksponent = Asc(Mid(CycBuff, 4, 1))
If eksponent > 127 Then eksponent = eksponent - 256
[slovenščina je zame španska vas] = vrednost * (10 ^ eksponent)
outtext = Str([slovenščina je zame španska vas])

ElseIf VDecode = 7 Then
vrednost = 256# * AscB(Mid(CycBuff, 6, 1)) + 1# * AscB(Mid(CycBuff, 7, 1))
If AscB(Mid(CycBuff, 4, 1)) > 127 Then vrednost = -vrednost 'predznak
If AscB(Mid(CycBuff, 5, 1)) > 127 Then 'znacaj
outtext = Str(vrednost / 10000) + " (C)"
Else
outtext = Str(vrednost / 10000) + " (L)"
End If
End If

Text3(ReadValue).Text = outtext




Text5.Text = "Registers read"
Text5.BackColor = &HFF00&


End Sub

Function CRCrac(niz) As Integer
Dim i, j, cr, v As Integer
cr = &HFFFF
For i = 1 To Len(niz)
v = Asc(Mid$(niz, i, 1))
cr = cr Xor v
For j = 1 To 8
If cr And 1 Then
cr = (cr And &HFFFE) \ 2 And &H7FFF Xor &HA001
Else
cr = cr \ 2 And &H7FFF
End If
Next j
Next i
CRCrac = cr
End Function



Lp
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
red_mamba
Član
Član



Pridružen-a: Ned 20 Feb 2005 17:56
Prispevkov: 1486
Aktiv.: 6.26
Kraj: Yogyakarta

PrispevekObjavljeno: Pet Nov 07, 2008 9:11 am    Naslov sporočila:   Odgovori s citatom

FIFO buffer:

imaš array fiksne velikosti.
definiraš pozGlava, pozRep.

imaš funkcijo za vpis v FIFO:
array(pozGlava)=vrednost
pozGlava++
če je glava večja od veliksoti array-a -> pozGlava=0

branje
vrednost=array(pozRep)
pozRep++
če je rep večji od veliksoti array-a -> pozRep=0

FIFO je prazen ko je rep=glavi

_________________
Bad things happen to good people all the time for no reason!
Blog
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo Obišči avtorjevo spletno stran
nargile
Neznanec
Neznanec



Pridružen-a: Tor 04 Nov 2008 22:06
Prispevkov: 7
Aktiv.: 0.03
Kraj: Grosuplje

PrispevekObjavljeno: Pet Nov 07, 2008 11:50 am    Naslov sporočila:   Odgovori s citatom

thx, bom videl kaj mi bo uspelo...lp
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
nargile
Neznanec
Neznanec



Pridružen-a: Tor 04 Nov 2008 22:06
Prispevkov: 7
Aktiv.: 0.03
Kraj: Grosuplje

PrispevekObjavljeno: Pet Nov 07, 2008 1:51 pm    Naslov sporočila:   Odgovori s citatom

Problem Z ????

Private Sub Winsock1_DataArrival(ByVal datalength As Long)
Dim b As Byte
Dim j As Byte
Dim eks As Long
Dim Man As Long
'outtext
MbusResp = "" ''briše
'Dim Buffer As String * 128
For i = 1 To datalength
Winsock1.GetData b
MbusResp = MbusResp + chr(b)
CycBuff = Fifo2(Fifo)

__obdelava podatkov


Funkcija fifo, rabil bi da pošlje noter vsaj 4 stringe z MbusResp
Function Fifo2(MbusResp) As String


Dim Fifo(7) As String
Dim pozGlava, pozRep As Integer
' Pisanje v Fifo
Fifo(pozGlava) = MbusResp
pozGlava = pozGlava + 1
If pozGlava > Fifo Then pozGlava = 0
' Branje iz fifo
MbusResp = Fifo(pozRep)
pozRep = pozRep + 1
If pozRep > Fifo Then pozRep = 0
If pozGlava = pozRep Then Fifo = ""
Fifo2 = Fifo
End Function
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
red_mamba
Član
Član



Pridružen-a: Ned 20 Feb 2005 17:56
Prispevkov: 1486
Aktiv.: 6.26
Kraj: Yogyakarta

PrispevekObjavljeno: Sob Nov 08, 2008 4:44 pm    Naslov sporočila:   Odgovori s citatom

FIFO mora biti seveda globalna spremelnljivka dostopna vsem funkcijam, ki operirajo z FIFO bufferjem
_________________
Bad things happen to good people all the time for no reason!
Blog
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo Obišči avtorjevo spletno stran
Pokaži sporočila:   
Objavi novo temo   Odgovori na to temo   Printer-friendly version    www.elektronik.si Seznam forumov -> Programska oprema Časovni pas GMT + 2 uri, srednjeevropski - poletni čas
Stran 1 od 1

 
Pojdi na:  
Ne, ne moreš dodajati novih tem v tem forumu
Ne, ne moreš odgovarjati na teme v tem forumu
Ne, ne moreš urejati svojih prispevkov v tem forumu
Ne, ne moreš brisati svojih prispevkov v tem forumu
Ne ne moreš glasovati v anketi v tem forumu
Ne, ne moreš pripeti datotek v tem forumu
Ne, ne moreš povleči datotek v tem forumu

Uptime: 9 dni


Powered by phpBB © 2001, 2005 phpBB Group