Witam
Program ma wyodrebnic 3 zmienne wysyłane z PC.
Przy pierwszym nadaniu danych jest ok (prog poprawnie je rozdziela i wykonuje obliczenia) ale juz przy drugim prog sie sypie.
Wygląda to tak jakby gubił pierwszy bajt danych
Dane po PD moga przyjac wartosc od -30000 do 30000 po spacji od
-45000 do 45000.
Dane w formacie "PD12345 6789;"
'-------------------------------------------------
Dim Y As String * 1
Dim X As String * 30
Dim Px As String * 2
Dim Temp As Integer
Dim Szer_str As String * 10
Dim Dlug_str As String * 10
Dim Szer_in As Long
Dim Dlug_in As Long
Poczatek:
Px = ""
Temp = 0
Szer_str = ""
Dlug_str = ""
Szer_in = 0
Dlug_in = 0
X = ""
Y = ""
'odbierz wszystkie dane do znaku ";" i wsadz do X
While Y <> ";"
Inputbin Y
X = X + Y
Wend
'jezeli 2 pierwsze bajty <> od "PD" to skok do poczatku
Px = Left(x , 2)
If Px <> "PD" Then Goto Poczatek
' wszystkie znaki po "PD" do spacji wsadz do Szer_str
Temp = 3
Szer_str = " "
While Y <> " "
Y = Mid(x , Temp , 1)
If Y = " " Then Exit While
Szer_str = Szer_str + Y
Incr Temp
Wend
' wszystkie znaki po spacji do ";" wsadz do Dlug_str
While Y <> ";"
Y = Mid(x , Temp , 1)
If Y = ";" Then Exit While
Dlug_str = Dlug_str + Y
Incr Temp
Wend
Print Szer_str
Print Dlug_str
Szer_in = Val(szer_str)
Dlug_in = Val(dlug_str)
Print Szer_in
Print Dlug_in
Szer_in = Szer_in + 30000
Dlug_in = Dlug_in + 45000
Print Px
Print Szer_in
Print Dlug_in
Goto Poczatek
End
W symulatorze wszystko jest ok dopiero po zaprogramowaniu wychodza błędy w terminalu.
Gdzie ew. szukac przyczyny ?
Aktyw Forum
Zarejestruj się na forum.ep.com.pl i zgłoś swój akces do Aktywu Forum. Jeśli jesteś już zarejestrowany wystarczy, że się zalogujesz.
Sprawdź punkty Zarejestruj sięjeszcze raz rs232 i avr
Moderatorzy:Jacek Bogusz, robertw, k.pawliczak, Moderatorzy
witam,
mam pytanie, czy ty sam napisałeś też na PCta?
bo jeżeli tak to powinieneś zrezygnować z takiego formatu danych i przejść na HEX
to ci ułatwi życie, nie będziesz się martwił czy wartość jest dodatnia czy ujemna i że zmienna jest jej długość. twój soft jest także zbyt skomplikowany i zawodny. Opisz mi co chcesz osiągnąc a ja ci napiszę procedurkę odbioru. podaj też na jaki procek
pozdrawiam
euromatic@go2.pl
bo jeżeli tak to powinieneś zrezygnować z takiego formatu danych i przejść na HEX
to ci ułatwi życie, nie będziesz się martwił czy wartość jest dodatnia czy ujemna i że zmienna jest jej długość. twój soft jest także zbyt skomplikowany i zawodny. Opisz mi co chcesz osiągnąc a ja ci napiszę procedurkę odbioru. podaj też na jaki procek
pozdrawiam
euromatic@go2.pl
Już mówie o co mi chodzi.
Chciałem zrobić sterownik plotera.
2 silniki krokowe (x,y)
PC ma wysłać plik *.plt (to plik wyeksportowany z Corela jest w załączniku).
W pliku sa różne dane , jednak mnie interesuja tylko te z początkiem "PU" i "PD".
Są to współrzędne linii (od - do) .
avr ma wyliczyć ile kroków i w któą strone ma wykonać silnik x i y żeby narysować daną linię.
Wykożystałem 90S8515 taktowany 11Mhz i komunikację 115000 bps.
W tej chwili do testowania wykorzystuje hyperteminal.
Do rozdzielania danych uzylem znaku ";" poniewaz rozny jest format pliku.
Czasami jest to jeden ciąg.
Program dla pc będzie miał za zadanie tylko wysylanie kolejnych danych z pliku a avr po kazdej wykonanej instr odpowie "OK".
Jeżeli ktoś ma lepszy pomysł to prosze o rade
Adam
Chciałem zrobić sterownik plotera.
2 silniki krokowe (x,y)
PC ma wysłać plik *.plt (to plik wyeksportowany z Corela jest w załączniku).
W pliku sa różne dane , jednak mnie interesuja tylko te z początkiem "PU" i "PD".
Są to współrzędne linii (od - do) .
avr ma wyliczyć ile kroków i w któą strone ma wykonać silnik x i y żeby narysować daną linię.
Wykożystałem 90S8515 taktowany 11Mhz i komunikację 115000 bps.
W tej chwili do testowania wykorzystuje hyperteminal.
Do rozdzielania danych uzylem znaku ";" poniewaz rozny jest format pliku.
Czasami jest to jeden ciąg.
Program dla pc będzie miał za zadanie tylko wysylanie kolejnych danych z pliku a avr po kazdej wykonanej instr odpowie "OK".
Jeżeli ktoś ma lepszy pomysł to prosze o rade
Adam
witam,
opisz więcej swój problem, wtedy zobaczymy co da się zrobić.
szczególnie opisz czym będziesz wysyłał dane do procka (docelowy program) z avr nie powinno być problemu.
pozdrawiam
euromatic@tlen.pl
szczególnie opisz czym będziesz wysyłał dane do procka (docelowy program) z avr nie powinno być problemu.
pozdrawiam
euromatic@tlen.pl
Witam
Program dla PC napisze w VisualBasic.
To bedzie prosciutki prog ktory bedzie tylko pobieral kolejne linie z pliku i wysylal do portu.
Po wyslaniu 1 lini prog czeka na "OK" i wysyla nastepna.
Co do avr to rozwiazalem problem z odbiorem.
Avr odbiera dane , a nastepnie wylicza kolejne wspolrzedne punktow linii.
Musze jeszcze tylko dopisac cos co przeksztalci te wspolrzedne na rozkazy dla silnikow(prawo, lewo, gora, dol).
Podaje zrodlo programu:
Dim Initialx As Long
Dim Initialy As Long
Dim Finalx As Long
Dim Finaly As Long
Dim Steep As Byte
Dim Deltax As Long , Deltay As Long , Delta As Long
Dim Stepx As Long , Stepy As Long
Dim Coord As Long
Dim Temp As Long
Dim Y As String * 1
Dim X As String * 20
Dim Px As String * 2
Dim Szer_str As String * 7
Dim Dlug_str As String * 7
Dim Szer_in As Long
Dim Dlug_in As Long
Dim Start_szer As Long
Dim Start_dlug As Long
Dim Timeout As Byte
Start_szer = 0
Start_dlug = 0
Poczatek:
Px = ""
Temp = 0
Szer_str = ""
Dlug_str = ""
Szer_in = 0
Dlug_in = 0
X = ""
Y = ""
'odbierz wszystkie dane do znaku ";" i wsadz do X
'Jezeli "P" to dalej
While Y <> "P"
Inputbin Y
X = Y
Wend
'Jezeli ";" to koniec odbierania
While Y <> ";"
Inputbin Y
X = X + Y
Wend
'jezeli 2 pierwsze bajty <> od "PD" to skok do poczatku
Px = Left(x , 2)
If Px <> "PD" And Px <> "PU" Then Goto Poczatek
' wszystkie znaki po "PD" do spacji wsadz do Szer_str
Temp = 3
Timeout = 0
Szer_str = " "
While Y <> " "
Y = Mid(x , Temp , 1)
If Y = " " Then Exit While
Szer_str = Szer_str + Y
Incr Temp
Incr Timeout
If Timeout > 30 Then Goto Poczatek
Wend
' wszystkie znaki po spacji do ";" wsadz do Dlug_str
Timeout = 0
While Y <> ";"
Y = Mid(x , Temp , 1)
If Y = ";" Then Exit While
Dlug_str = Dlug_str + Y
Incr Temp
Incr Timeout
If Timeout > 30 Then Goto Poczatek
Wend
Szer_in = Val(szer_str)
Dlug_in = Val(dlug_str)
'Szer_in = Szer_in + 30000
'Dlug_in = Dlug_in + 45000
Print "Instrukcja =" ; Px
'******************************************
'****************************************************************
'RYSOWANIE LINII
'*****************************************************************
Initialx = Start_szer
Initialy = Start_dlug
Finalx = Szer_in
Finaly = Dlug_in
Steep = 0
Temp = Finalx - Initialx
Deltax = Abs(temp)
If Temp > 0 Then
Stepx = 1
Else
Stepx = -1
End If
Temp = Finaly - Initialy
Deltay = Abs(temp)
If Temp > 0 Then
Stepy = 1
Else
Stepy = -1
End If
If Deltay > Deltax Then
Steep = 1
Initialx = Initialx Xor Initialy
Initialy = Initialy Xor Initialx
Initialx = Initialx Xor Initialy
Deltax = Deltax Xor Deltay
Deltay = Deltay Xor Deltax
Deltax = Deltax Xor Deltay
Stepx = Stepx Xor Stepy
Stepy = Stepy Xor Stepx
Stepx = Stepx Xor Stepy
End If
Temp = Deltay * 2
Delta = Temp - Deltax
For Coord = 0 To Deltax
Delay
If Steep = 1 Then
Print Initialy ; " " ; Initialx
Else
Print Initialx ; " " ; Initialy
End If
While Delta >= 0
Initialy = Initialy + Stepy
Temp = Deltax * 2
Delta = Delta - Temp
Wend
Initialx = Initialx + Stepx
Temp = Deltay * 2
Delta = Delta + Temp
Next Coord
Print Finalx ; " " ; Finaly
Start_szer = Szer_in
Start_dlug = Dlug_in
Print "OK"
Goto Poczatek
End
Jezeli ktos ma jakies doswiadczenie w sterowaniu silnikami krokowymi to prosze o pomoc.
Program dla PC napisze w VisualBasic.
To bedzie prosciutki prog ktory bedzie tylko pobieral kolejne linie z pliku i wysylal do portu.
Po wyslaniu 1 lini prog czeka na "OK" i wysyla nastepna.
Co do avr to rozwiazalem problem z odbiorem.
Avr odbiera dane , a nastepnie wylicza kolejne wspolrzedne punktow linii.
Musze jeszcze tylko dopisac cos co przeksztalci te wspolrzedne na rozkazy dla silnikow(prawo, lewo, gora, dol).
Podaje zrodlo programu:
Dim Initialx As Long
Dim Initialy As Long
Dim Finalx As Long
Dim Finaly As Long
Dim Steep As Byte
Dim Deltax As Long , Deltay As Long , Delta As Long
Dim Stepx As Long , Stepy As Long
Dim Coord As Long
Dim Temp As Long
Dim Y As String * 1
Dim X As String * 20
Dim Px As String * 2
Dim Szer_str As String * 7
Dim Dlug_str As String * 7
Dim Szer_in As Long
Dim Dlug_in As Long
Dim Start_szer As Long
Dim Start_dlug As Long
Dim Timeout As Byte
Start_szer = 0
Start_dlug = 0
Poczatek:
Px = ""
Temp = 0
Szer_str = ""
Dlug_str = ""
Szer_in = 0
Dlug_in = 0
X = ""
Y = ""
'odbierz wszystkie dane do znaku ";" i wsadz do X
'Jezeli "P" to dalej
While Y <> "P"
Inputbin Y
X = Y
Wend
'Jezeli ";" to koniec odbierania
While Y <> ";"
Inputbin Y
X = X + Y
Wend
'jezeli 2 pierwsze bajty <> od "PD" to skok do poczatku
Px = Left(x , 2)
If Px <> "PD" And Px <> "PU" Then Goto Poczatek
' wszystkie znaki po "PD" do spacji wsadz do Szer_str
Temp = 3
Timeout = 0
Szer_str = " "
While Y <> " "
Y = Mid(x , Temp , 1)
If Y = " " Then Exit While
Szer_str = Szer_str + Y
Incr Temp
Incr Timeout
If Timeout > 30 Then Goto Poczatek
Wend
' wszystkie znaki po spacji do ";" wsadz do Dlug_str
Timeout = 0
While Y <> ";"
Y = Mid(x , Temp , 1)
If Y = ";" Then Exit While
Dlug_str = Dlug_str + Y
Incr Temp
Incr Timeout
If Timeout > 30 Then Goto Poczatek
Wend
Szer_in = Val(szer_str)
Dlug_in = Val(dlug_str)
'Szer_in = Szer_in + 30000
'Dlug_in = Dlug_in + 45000
Print "Instrukcja =" ; Px
'******************************************
'****************************************************************
'RYSOWANIE LINII
'*****************************************************************
Initialx = Start_szer
Initialy = Start_dlug
Finalx = Szer_in
Finaly = Dlug_in
Steep = 0
Temp = Finalx - Initialx
Deltax = Abs(temp)
If Temp > 0 Then
Stepx = 1
Else
Stepx = -1
End If
Temp = Finaly - Initialy
Deltay = Abs(temp)
If Temp > 0 Then
Stepy = 1
Else
Stepy = -1
End If
If Deltay > Deltax Then
Steep = 1
Initialx = Initialx Xor Initialy
Initialy = Initialy Xor Initialx
Initialx = Initialx Xor Initialy
Deltax = Deltax Xor Deltay
Deltay = Deltay Xor Deltax
Deltax = Deltax Xor Deltay
Stepx = Stepx Xor Stepy
Stepy = Stepy Xor Stepx
Stepx = Stepx Xor Stepy
End If
Temp = Deltay * 2
Delta = Temp - Deltax
For Coord = 0 To Deltax
Delay
If Steep = 1 Then
Print Initialy ; " " ; Initialx
Else
Print Initialx ; " " ; Initialy
End If
While Delta >= 0
Initialy = Initialy + Stepy
Temp = Deltax * 2
Delta = Delta - Temp
Wend
Initialx = Initialx + Stepx
Temp = Deltay * 2
Delta = Delta + Temp
Next Coord
Print Finalx ; " " ; Finaly
Start_szer = Szer_in
Start_dlug = Dlug_in
Print "OK"
Goto Poczatek
End
Jezeli ktos ma jakies doswiadczenie w sterowaniu silnikami krokowymi to prosze o pomoc.
Kto jest online
Użytkownicy przeglądający to forum: Obecnie na forum nie ma żadnego zarejestrowanego użytkownika i 48 gości