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 ?

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.

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.

Dat zou heel fijn zijn,

Ik kijk uit naar je berichtje.

bvd


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 ]

Ik ga dat straks even proberen, alvast bedankt , ga nu eerst even eten.

tot straks.

Zo zal het misschien wel werken maar het is wel enorm omslachtig.

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 ??

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.

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.

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.

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.

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

Perfect !!!!.

Je (Jullie) zijn echt goed, BEDANKT.

Het is gelukt.

Nou wil ik eigenlijk wel je code zien van dat stuk. Ben ik wel benieuwd naar.

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

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.

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 ]

Foei free!

Geen variants gebruiken!

Volgens mij wil free bewijzen dat C een vieze taal is >:)