 |
www.elektronik.si Forum o elektrotehniki in računalništvu
|
Poglej prejšnjo temo :: Poglej naslednjo temo |
Avtor |
Sporočilo |
nargile Neznanec

Pridružen-a: Tor 04 Nov 2008 22:06 Prispevkov: 7 Aktiv.: 0.03 Kraj: Grosuplje
|
Objavljeno: Čet Nov 06, 2008 10:57 am Naslov sporočila: Visual basic in ciklični register |
|
|
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 |
|
 |
red_mamba Član


Pridružen-a: Ned 20 Feb 2005 17:56 Prispevkov: 1486 Aktiv.: 6.26 Kraj: Yogyakarta
|
Objavljeno: Pet Nov 07, 2008 9:11 am Naslov sporočila: |
|
|
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 |
|
 |
nargile Neznanec

Pridružen-a: Tor 04 Nov 2008 22:06 Prispevkov: 7 Aktiv.: 0.03 Kraj: Grosuplje
|
Objavljeno: Pet Nov 07, 2008 11:50 am Naslov sporočila: |
|
|
thx, bom videl kaj mi bo uspelo...lp |
|
Nazaj na vrh |
|
 |
nargile Neznanec

Pridružen-a: Tor 04 Nov 2008 22:06 Prispevkov: 7 Aktiv.: 0.03 Kraj: Grosuplje
|
Objavljeno: Pet Nov 07, 2008 1:51 pm Naslov sporočila: |
|
|
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 |
|
 |
red_mamba Član


Pridružen-a: Ned 20 Feb 2005 17:56 Prispevkov: 1486 Aktiv.: 6.26 Kraj: Yogyakarta
|
Objavljeno: Sob Nov 08, 2008 4:44 pm Naslov sporočila: |
|
|
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 |
|
 |
|
|
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
|