Εμφάνιση 1-14 από 14
  1. #1
    Εγγραφή
    12-03-2004
    Μηνύματα
    84
    Downloads
    14
    Uploads
    0
    Τύπος
    ADSL2+ Forthnet Shared
    Ταχύτητα
    19009/1021
    ISP
    Forthnet
    DSLAM
    ΟΤΕ - ΚΕΡΑΜΕΙΚΟΣ
    Router
    linksys WAG200G
    SNR / Attn
    6(dB) / 21(dB)
    Προσπαθώ να γράψω ένα προγραμματάκι σε VB ώστε να χειρίζομαι κάτι tranceivers. Oi tranceivers συνδέονται σειριακά με το PC. Ενώ στέλνω κανονικά τις εντολές και είναι σίγουρο πως οι tranceivers τις παίρνουν αφού τις κάνουν echo (το λέει και το manual) μετά πρέπει να στείλω ένα "ACK" για να γίνει επιβεβαίωση. Βάση του manual the ACK command is sent as 3 ASCII charactes, ACK in sequence 'A"C"K', έχω γράψει το παρακάτω για μια τυχαία command
    MSComm1.Output = "ER_CMD#U1"
    Sleep (20)
    input3 = MSComm1.Input
    If input3 = "ER_CMD#U1" Then
    MSComm1.Output = "ACK"
    END If
    αλλά το MSComm1.Output = "ACK" δεν δουλεύει. Μήπως πρέπει να μετατρέψω το ACK σε ASCII; και πως γίνεται αυτό;
    ευχαριστώ προκαταβολικά για όποια βοήθεια

  2. #2
    Εγγραφή
    03-06-2006
    Περιοχή
    Ηλιούπολη
    Ηλικία
    48
    Μηνύματα
    911
    Downloads
    29
    Uploads
    1
    Τύπος
    VDSL2
    Ταχύτητα
    4997/49998
    ISP
    ΟΤΕ Conn-x
    DSLAM
    ΟΤΕ - ΗΛΙΟΥΠΟΛΗ
    Router
    ZTE ZXDSL 931VII
    SNR / Attn
    28.1(dB) / 0(dB)
    Path Level
    Interleaved
    Έχω την εντύπωση οτι πρέπει να στείλεις τον χαρακτήρα ACK (Ordinal = 6) που είναι το ACK και όχι το ACK ώς string ...

    Edit: Κάποια links που με είχαν βοηθήσει :
    http://www.htservices.com/Tools/VBan...unications.htm
    http://www.control.com/1026220936/index_html
    http://support.microsoft.com/default...b;en-us;140880
    Τελευταία επεξεργασία από το μέλος ghostnik : 22-09-06 στις 04:35. Αιτία: Links
    Program your application to be idiot-proof and you'll only be proven an idiot

  3. #3
    Εγγραφή
    12-03-2004
    Μηνύματα
    84
    Downloads
    14
    Uploads
    0
    Τύπος
    ADSL2+ Forthnet Shared
    Ταχύτητα
    19009/1021
    ISP
    Forthnet
    DSLAM
    ΟΤΕ - ΚΕΡΑΜΕΙΚΟΣ
    Router
    linksys WAG200G
    SNR / Attn
    6(dB) / 21(dB)
    Έχω δοκιμάσει να στείλω και chr(6) ή chr(06) αλλά και πάλι τίποτα. Δεν νομίζω πως είναι αυτό αφού στο manual λέει πως το ACK είναι 3 ξεωριστοί χαρακτήρες. Αυτό , πάντως, που είχα γράψει τότε είναι
    MSComm1.Output = chr(6)
    αλλά και πάλι δεν δούλεψε, μήπως το είχα γράψει λάθος;

  4. #4
    Εγγραφή
    14-09-2006
    Περιοχή
    Ισπανία
    Ηλικία
    42
    Μηνύματα
    252
    Downloads
    36
    Uploads
    0
    Τύπος
    Other / Άλλο
    Ταχύτητα
    30800/1024
    ISP
    ΟΝΟ
    Ελα φίλε,

    απο ότι καταλαβαίνω εγώ απο αυτό που έστειλες μάλλον θέλει να στείλεις με τη σειρά πρώτα ένα 'Α'
    μετά ένα 'C' και μέτα ενα 'K' .

    Ελπίζω να σε βοηθίσει...
    "..The Force Shall Set Me Free!!!"

  5. #5
    Εγγραφή
    12-03-2004
    Μηνύματα
    84
    Downloads
    14
    Uploads
    0
    Τύπος
    ADSL2+ Forthnet Shared
    Ταχύτητα
    19009/1021
    ISP
    Forthnet
    DSLAM
    ΟΤΕ - ΚΕΡΑΜΕΙΚΟΣ
    Router
    linksys WAG200G
    SNR / Attn
    6(dB) / 21(dB)
    Ευχαριστώ για την βοήθεια. Τελικά κάτι περίεργο παίζει, αν σπάσω τον κώδικα σε δύο command buttons που το ένα απλά έχει MSComm1.Output = "ER_CMD#U1" και το άλλο MSComm1.Output = "ACK" και τα πατήσω διαδοχικά δουλεύει. Πάντως δεν μπορώ να τα καταφέρω να δουλέψουν μαζί σε ένα με τίποτα.

  6. #6
    Εγγραφή
    13-01-2003
    Περιοχή
    Greece
    Ηλικία
    52
    Μηνύματα
    50
    Downloads
    0
    Uploads
    0
    Τύπος
    ADSL Vivodi Full
    Ταχύτητα
    20480/1024
    ISP
    Vivodi
    DSLAM
    Vivodi - ΚΟΛΩΝΟΣ
    Router
    Vood 452W_A
    SNR / Attn
    9(dB) / 28(dB)
    Έχεις δοκιμάσει να παρακολουθήσεις την ροή δεδομένων με τα events που δίνει το MSCOMM Control της VB6?


    George J.
    George J. Capnias
    Athens, Hellas
    dotNETZone Administrator
    http://www.dotnetzone.gr/

  7. #7
    Εγγραφή
    20-03-2003
    Περιοχή
    Στη μόνη πόλη που γράφεται με 2 'σ' και προφέρεται με 2 'λ'
    Ηλικία
    53
    Μηνύματα
    21.422
    Downloads
    25
    Uploads
    2
    Τύπος
    ADSL2+
    Ταχύτητα
    11000/1023
    ISP
    ΟΤΕ Conn-x
    DSLAM
    ΟΤΕ - ΡΟΣΤΑΝ
    Router
    Netgear DGN2000
    SNR / Attn
    4(dB) / 30.5(dB)
    Path Level
    Fastpath
    Snott... δοκίμασε να αυξήσεις το Sleep
    Ή να κάνεις κάτι σαν
    Κώδικας:
    input3=""
    do while input3 <> "ER_CMD#U1"
    sleep(10)
    DoEvents:DoEvents:DoEvents:DoEvents 'Ένα δεν είναι ποτέ αρκετό :p
    input3=Comm1.Input
    Loop
    (ίσως και με ένα πρόσθετο έλεγχο με timer για να μην πιαστείς σε endless loop αν κάτι δεν πάει καλά)

  8. #8
    Εγγραφή
    13-01-2003
    Περιοχή
    Greece
    Ηλικία
    52
    Μηνύματα
    50
    Downloads
    0
    Uploads
    0
    Τύπος
    ADSL Vivodi Full
    Ταχύτητα
    20480/1024
    ISP
    Vivodi
    DSLAM
    Vivodi - ΚΟΛΩΝΟΣ
    Router
    Vood 452W_A
    SNR / Attn
    9(dB) / 28(dB)
    Παράθεση Αρχικό μήνυμα από yiapap Εμφάνιση μηνυμάτων
    Snott... δοκίμασε να αυξήσεις το Sleep
    Ή να κάνεις κάτι σαν
    Κώδικας:
    input3=""
    do while input3 <> "ER_CMD#U1"
    sleep(10)
    DoEvents:DoEvents:DoEvents:DoEvents 'Ένα δεν είναι ποτέ αρκετό :p
    input3=Comm1.Input
    Loop
    (ίσως και με ένα πρόσθετο έλεγχο με timer για να μην πιαστείς σε endless loop αν κάτι δεν πάει καλά)


    Κάνεις το κλασσικό λάθος που κάνουν όλοι, με την σειριακή. Οι σειριακή επικοινωνία, δεν είναι κάτι που περιμένεις να συμβεί, σταματώντας την ροή του προγραμματός σου. Την ώρα που εσύ βάζεις sleep το παράθυρο "κλειδώνει" και είναι σαν να έχει κολήσει το πρόγραμμα. Φαντάζεσαι να το κάνεις συνέχεια;

    Αν υποθέσουμε ότι στο project references βάλουμε το mscomm32.ocx σαν library και επάνω σε μία φόρμα 2 command boxes btn_Start, btn_Stop ο κώδικας χειρισμού της σειριακής θα ήταν κάπως έτσι:

    Κώδικας:
    Option Explicit
    Private WithEvents mSerialPort As MSCommLib.MSComm
    Private mInputBuffer As String
    Private Const EOLMark As String = vbCrLf
    Private Sub btnStart_Click()
        mSerialPort.CommPort = 1
        mSerialPort.Settings = "9600,N,8,1"
        mSerialPort.PortOpen = True
     
    End Sub
    Private Sub btnStop_Click()
        mSerialPort.PortOpen = False
     
    End Sub
    Private Sub Form_Load()
        Set mSerialPort = New MSCommLib.MSComm
        mSerialPort.InputMode = comInputModeText
        mSerialPort.InputLen = 0
        mSerialPort.RThreshold = 1
        mSerialPort.InBufferSize = 8192
        mSerialPort.OutBufferSize = 4096
    End Sub
    Private Sub Form_Unload(Cancel As Integer)
        Set mSerialPort = Nothing
     
    End Sub
    Private Sub mSerialPort_OnComm()
    Dim lLines() As String
    Dim lCounter As Integer
        Select Case mSerialPort.CommEvent
            Case comEvReceive
                mInputBuffer = mInputBuffer & mSerialPort.Input
                lLines = Split(mInputBuffer, EOLMark)
                For lCounter = LBound(lLines) To UBound(lLines) - 1
                    Call DataArrival(lLines(lCounter))
                    DoEvents
                Next
                mInputBuffer = lLines(UBound(lLines))
     
            Case Else
                RaiseEvent CommEvent(mSerialPort.CommEvent)
     
        End Select
     
    End Sub
    Private Sub DataArrival(TextLine As String)
        Debug.Print TextLine
    End Sub
    Βέβαια ο παραπάνω κώδικας δεν κάνει τίποτα παραπάνω από το γράφει στο debug window ότι έρχεται στην σειριακή, αλλά δεν "κλειδώνει" την εφαρμογή...


    George J.
    George J. Capnias
    Athens, Hellas
    dotNETZone Administrator
    http://www.dotnetzone.gr/

  9. #9
    Εγγραφή
    20-03-2003
    Περιοχή
    Στη μόνη πόλη που γράφεται με 2 'σ' και προφέρεται με 2 'λ'
    Ηλικία
    53
    Μηνύματα
    21.422
    Downloads
    25
    Uploads
    2
    Τύπος
    ADSL2+
    Ταχύτητα
    11000/1023
    ISP
    ΟΤΕ Conn-x
    DSLAM
    ΟΤΕ - ΡΟΣΤΑΝ
    Router
    Netgear DGN2000
    SNR / Attn
    4(dB) / 30.5(dB)
    Path Level
    Fastpath
    Παράθεση Αρχικό μήνυμα από gcapnias Εμφάνιση μηνυμάτων

    Κάνεις το κλασσικό λάθος που κάνουν όλοι, με την σειριακή. Οι σειριακή επικοινωνία, δεν είναι κάτι που περιμένεις να συμβεί, σταματώντας την ροή του προγραμματός σου. Την ώρα που εσύ βάζεις sleep το παράθυρο "κλειδώνει" και είναι σαν να έχει κολήσει το πρόγραμμα. Φαντάζεσαι να το κάνεις συνέχεια;
    λολ Συμφωνώ. Απλά θεώρησα ότι η όλη "συνομιλία" με τη σειριακή είναι αυτή που αναφέρεται στο πρώτο post. 1 Input + 1 Output. Οπότε αυτά τα 1-2-3 κλειδώματα των 20millisecond δε θα κάνουν τη διαφορά.
    Ευχαριστούμε πάντως για τον κώδικα... Ποτέ δεν ξέρεις πότε θα φανεί χρήσιμος

  10. #10
    Εγγραφή
    12-03-2004
    Μηνύματα
    84
    Downloads
    14
    Uploads
    0
    Τύπος
    ADSL2+ Forthnet Shared
    Ταχύτητα
    19009/1021
    ISP
    Forthnet
    DSLAM
    ΟΤΕ - ΚΕΡΑΜΕΙΚΟΣ
    Router
    linksys WAG200G
    SNR / Attn
    6(dB) / 21(dB)
    Ωραία, το επόμενο βήμα είναι να φτιάξω ένα κώδικα χωρίς sleep. Ας πούμε πως θα αποθηκεύω τα εισερχόμενα σε ένα string ή σε ένα textbox αλλά πως θα αναγνωρίζω κάποια απάντηση σε εντολή απο τον tranceiver; Στην C θα έβαζα ένα pointer που θα σκάναρε το string και αν έβλεπε π.χ. τον χαρακτήρα E, ο επόμενος ήταν R κτλ. στο τέλος θα έβλεπε ER_CMD#U1 και θα έστελνε ένα ACK. Από VB δεν ξέρω και πολλά, μπορώ να κάνω κάτι παρόμοιο;

  11. #11
    Εγγραφή
    20-03-2003
    Περιοχή
    Στη μόνη πόλη που γράφεται με 2 'σ' και προφέρεται με 2 'λ'
    Ηλικία
    53
    Μηνύματα
    21.422
    Downloads
    25
    Uploads
    2
    Τύπος
    ADSL2+
    Ταχύτητα
    11000/1023
    ISP
    ΟΤΕ Conn-x
    DSLAM
    ΟΤΕ - ΡΟΣΤΑΝ
    Router
    Netgear DGN2000
    SNR / Attn
    4(dB) / 30.5(dB)
    Path Level
    Fastpath
    Δες τον κώδικα του George.
    Το output του tranceiver δεν είναι delimited με κάποιον χαρακτήρα;
    Π.χ. στον κώδικα του Γιώργου αυτός ο χαρακτήρας είναι ο EOLMark και ισούται με CHR(13)+CHR(10) (Carriage return+Linefeed). Σε σένα μπορεί να είναι ο chr(0) ή οποιοσδήποτε.

    Αν δεν υπάρχει delimiter και το tranceiver πετάει συνέχεια στοιχεία (γίνεται αυτό τότε καλύτερα να ορίσεις την mInputBuffer ως Variant και να ψάχνεις για το string που θέλεις μέσω της INSTR(mInputBuffer, "STRINGTOLOOKFOR")
    Μόνο μην ξεχνάς να μηδενίζεις/ελευθερώνεις την mInputBuffer.

  12. #12
    Εγγραφή
    12-03-2004
    Μηνύματα
    84
    Downloads
    14
    Uploads
    0
    Τύπος
    ADSL2+ Forthnet Shared
    Ταχύτητα
    19009/1021
    ISP
    Forthnet
    DSLAM
    ΟΤΕ - ΚΕΡΑΜΕΙΚΟΣ
    Router
    linksys WAG200G
    SNR / Attn
    6(dB) / 21(dB)
    Κατ' αρχήν ευχαριστώ για την βοήθεια. Τελικά το κατάφερα να δουλέψει έστω και με sleep βάζοντας το παρακάτω
    Κώδικας:
    MSComm1.Output = "ER_CMD#U1"
    Sleep (20)
    If MSComm1.Input = "ER_CMD#U1" Then
    MSComm1.Output = "ACK"
    Sleep (20)  
    MSComm1.Settings = "2400,N,8,1" 
    (η εντολή ER_CMD#U1 αλλάζει το baud rate του tranceiver σε 2400)
    MsgBox "success"
    End If
    Τελικά μάλλον όταν έστελνα ACK άλλαζα κατευθείαν το baud rate της serial, ο tranceiver δεν προλάβαινε να το πάρει, το έπαιρνε σε άλλο baud rate δηλαδή, και γινότανε ένας χαμός γενικά. Έτσι και αλλιώς θα κάτσω να φτιάξω τον κώδικα χωρίς sleep, απλά ηρέμησα αφού δουλεύει. Δυστυχώς ο tranceiver δεν έχει delimited output που είναι ένα πρόβλημα αλλά λογικά αφού εγώ θα του στέλνω δεδομένα θα βάλω κάτι εγώ εκεί.
    ευχαριστώ και πάλι για την βοήθεια
    Τελευταία επεξεργασία από το μέλος nnn : 30-09-06 στις 01:01. Αιτία: χρήση code tag

  13. #13
    Εγγραφή
    12-03-2004
    Μηνύματα
    84
    Downloads
    14
    Uploads
    0
    Τύπος
    ADSL2+ Forthnet Shared
    Ταχύτητα
    19009/1021
    ISP
    Forthnet
    DSLAM
    ΟΤΕ - ΚΕΡΑΜΕΙΚΟΣ
    Router
    linksys WAG200G
    SNR / Attn
    6(dB) / 21(dB)
    Υπάρχει τρόπος να φτιάξω ένα event που θα ενεργοποιείται όταν θα αδειάζει το output buffer; Θέλω να αλλάζω το baud rate της serial όταν αλλάζει και του tranceiver, αλλά αν αλλάξω το baud rate της serial αμέσως αφού αλλάξω και του tranceiver παίρνω framing error (αφού αλλάζει πριν προλάβει να πάρει την εντολή ο tranceiver) και θέλω να αποφύγω το sleep

  14. #14
    Εγγραφή
    12-03-2004
    Μηνύματα
    84
    Downloads
    14
    Uploads
    0
    Τύπος
    ADSL2+ Forthnet Shared
    Ταχύτητα
    19009/1021
    ISP
    Forthnet
    DSLAM
    ΟΤΕ - ΚΕΡΑΜΕΙΚΟΣ
    Router
    linksys WAG200G
    SNR / Attn
    6(dB) / 21(dB)
    ok το βρήκα μόνος μου, βάζεις Sthreshold = 1 και έτσι ενεργοποιείται το comevsend όταν αδειάσει ο buffer

Παρόμοια Θέματα

  1. Visual Basic
    Από Uberalles στο φόρουμ Προγραμματισμός και γλώσσες προγραμματισμού
    Μηνύματα: 9
    Τελευταίο Μήνυμα: 25-01-08, 19:27
  2. visual basic
    Από errorr στο φόρουμ Προγραμματισμός και γλώσσες προγραμματισμού
    Μηνύματα: 1
    Τελευταίο Μήνυμα: 15-11-07, 21:43
  3. Εικονες JPEG και visual basic
    Από moutousidis στο φόρουμ Προγραμματισμός και γλώσσες προγραμματισμού
    Μηνύματα: 10
    Τελευταίο Μήνυμα: 18-03-07, 14:01
  4. Visual Basic και έτοιμος κώδικας???
    Από Miltos_01 στο φόρουμ Προγραμματισμός και γλώσσες προγραμματισμού
    Μηνύματα: 15
    Τελευταίο Μήνυμα: 29-03-06, 22:13
  5. Μηνύματα: 4
    Τελευταίο Μήνυμα: 10-03-05, 20:25

Tags για αυτό το Θέμα

Bookmarks

Bookmarks

Δικαιώματα - Επιλογές

  • Δεν μπορείτε να δημοσιεύσετε νέα θέματα
  • Δεν μπορείτε να δημοσιεύσετε νέα μηνύματα
  • Δεν μπορείτε να αναρτήσετε συνημμένα
  • Δεν μπορείτε να επεξεργαστείτε τα μηνύματα σας
  •  
  • Τα BB code είναι σε λειτουργία
  • Τα Smilies είναι σε λειτουργία
  • Το [IMG] είναι σε λειτουργία
  • Το [VIDEO] είναι σε λειτουργία
  • Το HTML είναι εκτός λειτουργίας