Hallo mensen,
Ik heb even een vraagje.
Ik probeer een CNC machine te maken en daar heb ik een bestand voor nodig van een PCB progje (Eagle). Tot zover niets aan de hand, Het bestand wat ik moet gebruiken ziet er zo uit:
IN; IP 0,0,100,100; SC 0,100,0,100;
SP 8;
PA 329,165;
PD;
PA 329,206;
PA 370,206;
PA 370,124;
PA 288,124;
PA 288,206;
PA 329,206;
PU;
PA 431,206;
PD;
PA 431,165;
PU;
PA 431,206;
PD;
PA 471,206;
PA 471,124;
PA 390,124;
PA 390,206;
PA 431,206;
PU;
PA 532,206;
PD;
PA 532,165;
PU;
PA 532,206;
nu heb ik het wel zover dat alles onder elkaar staat waardoor alles een voor een uitgevoerd kan worden.
PA
329
165
PD
PA
329
206
PA
370
206
PA
370
124
PA
288
124
PA
wat nu het probleem is, ik heb het in een Richtextbox staan en daar kan ik niet een lijn van aanroepen.
wie weet hoe ik dit wel kan doen?? Of een andere manier waarop ik ook deze kluis kan klaren ?
Erik
In order to succeed you must fail, so that you know what not to do the next time.
Ik kan je vast helpen maar eerst heb ik de vraag waarom wil je het onder elkaar hebben als je het eerste bestand rechtstreeks zo de cnc machine in kan duwen zonder aanpassingen?
Daarnaast, ik weet niet hoe je kennis is van visual basic is maar als je toch echt per lijn wil selecteren kun je het dan niet beter in een listbox verwerken of nog sneller een array?
Als ik het onder elkaar heb staan kan ik het makkelijker verwerken. Het is de bedoeling dat het via RS232 verstuurd wordt naar een PIC. Maar als het makkelijker kan doe ik dat natuurlijk liever.
Erik
In order to succeed you must fail, so that you know what not to do the next time.
Nou, ik had het idee dat je het rechtstreeks de cnc in ging sturen via je computer, maar als je het eerst naar een pic wil sturen dan kan ik het wel enigsinds begrijpen. Ik zal kijken of ik vanavond eens wat kan uitwerken.
Martijn v
KIS!!: Keep It Simple
File = "C:\bestand\dfjfj.txt"
richtextbox.SaveAs file
Open File for input as #1
Do until EOF = true
sRegel = input #1
'sRegel naar CNC
Loop
close #1
je ken ook gewoon Hyperterminal vragen oftie dat en dat bestand wil verzenden..
[Bericht gewijzigd door Martijn v op ]
Erik
In order to succeed you must fail, so that you know what not to do the next time.
Ik heb de bovenstaande code geprobeerd maar dat werkt niet zoals ik hem heb ingetypt.
Zou dat ook in vb6 kunnen onder een 'private sub'
bv een command button ??
Martijn v
KIS!!: Keep It Simple
omslachtig? zou kunnen, maar voor de beginner zekerweten het "bedrijfszekerst". 8 regels zijn ook te overzien.
Je kunt natuurlijk ook gewoon de text uit het boxje nemen, en eventjes zelf parsen.
zon parser zit vaak bomvol string bewerkingen, meters code, voor de beginner niet het makkelijkst.
bovenstaande code moetje natuurlijk zwaar aanpassen.
- makkelijkst: code onder een button subroutine
- bestandpad aanpassen, name van controls aanpassen,
-daadwerkelijke regel nog parsen per charachter ( IS je buffer van de PIC 1byte?)
- Op de buffer van de MScomm zetten.
- variabels declareren (als option explicit aanstaat, wel een aanrader)
ik ga ook eten
-daadwerkelijke regel nog parsen per charachter ???
wat bedoel je met parsen ?? die term ken ik nog niet.
Erik
In order to succeed you must fail, so that you know what not to do the next time.
Van wikipedia
In computer science and linguistics, parsing (more formally syntax analysis) is the process of analyzing a sequence of tokens to determine its grammatical structure with respect to a given formal grammar
Kortgezegd, een parser analyseert je tekst. Een parser kun je gebruiken om je tekst te analyseren om zo uit te kunnen vinden waar je tekst bijvoorbeeld gesplitst moet worden om er aparte commando's van te maken zoals jij wilt hebben.
Martijn v
KIS!!: Keep It Simple
parsen, dat is wat we nu aan het doen zijn.
als het RX buffer van je pic maar 1 byte groot is, dan kun je niet "758" sturen. dat zijn namelijk 3 byte's.
Erik
In order to succeed you must fail, so that you know what not to do the next time.
Hij heeft gezegd dat hij het per stukje moet sturen dus ik neem aan dat hij dat zelf al goed geregeld heeft.
Edit: Je hebt zelf de tekst al zover gekregen dat je ze per commando hebt gesplitst. het makkelijkst is om direct nadat je je commando splitst deze naar je cnc te sturen.
Wat je kan doen als je dit niet wilt is dit NA je code te plaatsen die alles onder elkaar zet:
Dim cncarray() As String, i As Integer
cncarray = Split(RichTextBox1.Text, vbCrLf)
For i = 0 To UBound(cncarray) - 1
serout.output = cncarray(i) 'stuurt de code direct naar je pic
Next i
richtextbox1 moet de textbox zijn waar je onder elkaar gezette code staat en serout je seriele poort control.
[Bericht gewijzigd door Erik op ]
Het communiceren met de PIC is geen probleem. Maar wat wel mijn probleem is dat ik de text die ik nu in een Richtextbox heb staan niet in mijn Listbox krijg.
Als ik dat namelijk heb dan ben ik bijna klaar.
Erik
In order to succeed you must fail, so that you know what not to do the next time.
het nogmaals in een listbox zetten is vrij onnodig maargoed als je dat wilt hoef je alleen serout.output te vervangen door list1.additem en de = daarachter te verwijderen dus :
Dim cncarray() As String, i As Integer
cncarray = Split(RichTextBox1.Text, vbCrLf)
For i = 0 To UBound(cncarray) - 1
list1.additem cncarray(i)
Next i
Erik
In order to succeed you must fail, so that you know what not to do the next time.
Dat kan, het is nog wel wat rommelig maar ik heb nou alle ingredienten.
Option Explicit
Private Sub Command1_Click()
Dim DrillS
On Error Resume Next
DrillS = Combo1.Text * 50
Picture1.PSet (Label1.Caption, Label2.Caption)
Picture1.Circle (Label1.Caption, Label2.Caption), (DrillS)
Label5.Caption = Label1.Caption
Label6.Caption = Label2.Caption
List1.AddItem "PA"
List1.AddItem Label1.Caption
List1.AddItem Label2.Caption
List1.AddItem "PD"
List1.AddItem "PU"
End Sub
Private Sub Command2_Click()
Picture1.Cls
List1.Clear
End Sub
Private Sub Command3_Click()
Dim i
For i = 0 To List1.ListCount - 1
If List1.List(i) = "PA" Then MsgBox "Move to": GoTo Ver
If List1.List(i) = "PD" Then MsgBox "Drill down": GoTo Ver
If List1.List(i) = "PU" Then MsgBox "Drill Up": GoTo Ver
MsgBox List1.List(i)
Ver:
'i = i + 1
Next i
MsgBox "Ready Drilling", vbExclamation
End Sub
Private Sub Command5_Click()
Open App.Path & "\Nieuw.ini" For Output As #1
Write #1, Text1.Text
Close
End Sub
Private Sub Command6_Click()
Dim Nieuw
Open App.Path & "\Nieuw.ini" For Input As #1
Input #1, Nieuw
Close #1
Text2.Text = Nieuw
End Sub
Public Function RemoveAllSpaces(ByVal InputString As String) _
As String
'NOTE: Intended for VB5 and below; if you have VB6, use built-in
'Replace Function. (e.g., MyString = Replace(MyString, " ", "")
Dim sAns As String
Dim lLen As String
Dim lCtr As Long, lCtr2 As Long
Dim sChar As String
lLen = Len(InputString)
sAns = InputString
lCtr2 = 1
For lCtr = 1 To lLen
sChar = Mid(InputString, lCtr, 1)
If sChar <> " " Then
Mid(sAns, lCtr2, 1) = sChar
lCtr2 = lCtr2 + 1
End If
Next
If lCtr2 > 1 Then
sAns = Left(sAns, lCtr2 - 1)
Else
sAns = ""
End If
RemoveAllSpaces = sAns
End Function
Private Sub Command7_Click()
Timer1.Enabled = True
End Sub
Private Sub Command8_Click()
Dim cncarray() As String, i As Integer
cncarray = Split(Text1.Text, vbCrLf)
For i = 0 To UBound(cncarray) - 1
List1.AddItem cncarray(i)
Next i
End Sub
Private Sub Form_Activate()
Dim Files
'CM1.ShowOpen
Open CM1.FileName For Binary As #1
Text1.Text = Input(LOF(1), 1)
Close #1
End Sub
Private Sub Form_Load()
Combo1.AddItem "0,5"
Combo1.AddItem "0,6"
Combo1.AddItem "0,7"
Combo1.AddItem "0,8"
Combo1.AddItem "0,9"
Combo1.AddItem "1,0"
Combo1.AddItem "1,5"
Combo1.AddItem "2,0"
Combo1.AddItem "2,5"
End Sub
Private Sub Picture1_Click()
Label5.Caption = Label1.Caption
Label6.Caption = Label2.Caption
End Sub
Private Sub Picture1_KeyPress(KeyAscii As Integer)
If KeyAscii = vbKeySpace Then Command1_Click
End Sub
Private Sub Picture1_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
Label1.Caption = X
Label2.Caption = Y
End Sub
Private Sub Timer1_Timer()
Dim Result As Long
Text1.Find ";"
Text1.SetFocus
Text1.SelText = ""
Result = Text1.Find(";")
If Result = -1 Then Timer1.Enabled = False: Timer2.Enabled = True
End Sub
Private Sub Timer2_Timer()
Dim Result As Long
Text1.Find ","
Text1.SetFocus
Text1.SelText = vbCrLf
Result = Text1.Find(",")
If Result = -1 Then Timer2.Enabled = False: Timer3.Enabled = True
End Sub
Private Sub Timer3_Timer()
Dim Result As Long
Text1.Find " "
Text1.SetFocus
Text1.SelText = vbCrLf
Result = Text1.Find(" ")
If Result = -1 Then Timer3.Enabled = False: MsgBox "Compiling readdy", vbInformation
End Sub
Private Sub Timer4_Timer()
Dim Result As Long
Text1.Find ","
Text1.SetFocus
Text1.SelText = vbCrLf
Result = Text1.Find(",")
If Result = -1 Then Timer4.Enabled = False: Timer5.Enabled = True
End Sub
Private Sub Timer5_Timer()
Dim Result As Long
Text1.Find ";"
Text1.SetFocus
Text1.SelText = vbCrLf
Result = Text1.Find(";")
If Result = -1 Then MsgBox "End": Timer5.Enabled = False
End Sub
Ik roep eerst het bestand van eagle.
Dan haal ik de ,`s en de ;`s weg en zet ik alle commando`s onder elkaar zodat ik die vanuit de listbox naar de Pic kan sturen. (dat laatse gedeelte ontbreekt nog, maar dat heb ik vaker gedaan. PC >> PIC
Erik
In order to succeed you must fail, so that you know what not to do the next time.
Zal het straks eens bekijken, maar wat me nu al wel opviel is dat je zoals de beste man van die de functie heeft gemaakt al aangeeft je geen replace functie gebruikt om spaties te verwijderen
een voorbeeldje hoe je dit doen kan is
text1.text = replace(text1.text, " ", "")
Ja je hebt gelijk. Ik zal het aanpassen.
Er zullen nog wel meer dingen in staan die een beetje raar zijn, maar door al dat prutsen blijft er wel eens wat staan.
Als er nog meer dingen omslachtig staan hoor ik dat graag.
free_electron
Silicon Member
Professioneel ElectronenTemmer - siliconvalleygarage.com - De voltooid verleden tijd van 'halfgeleider' is 'zand' ... US 8,032,693 / US 7,714,746 / US 7,355,303 / US 7,098,557 / US 6,762,632 / EP 1804159 - Real programmers write Hex into ROM
je maakt het veeeeeeeeeeeeeel te moeilijk gans die hap ...
dim x,y as integer
dim a$
dim b,c as variant ' gebruikt om arrays in te proppen
file$="c:\eagle.txt"
open file$ for input as #1
while not eof(1)
line input #1,a$
b = split(a$,";")
for x = 1 to ubound(b)
c=split(b(x),","))
for y = 1 to ubound(c)
if y=1 then
debug.print left(c(y),2) ' dit is commando
debug.print val(right(c(y),len(c(y))-2)) ' eerste argument
else
debug.print val(c(y)) ' rest van argumenten
end if
next y
next x
wend
close
end
[Bericht gewijzigd door free_electron op ]
Erik
In order to succeed you must fail, so that you know what not to do the next time.
