Выплескивание эмоций

Тема в разделе "Флудилка", создана пользователем alp69, 15 окт 2016.

  1. b707

    b707 Гуру

    очень простой исходник для парсинга - ни тебе скобок, ни вложенных условий...
     
  2. ИгорьК

    ИгорьК Гуру

    Да распарсится, конечно, но, блин, почему нельзя было применить что-то стандартное
     
  3. ИгорьК

    ИгорьК Гуру

    Ну вот:

    upload_2019-11-13_17-50-40.png
     
  4. SergeiL

    SergeiL Оракул Модератор

    Блин, хотел перешить старый термостат, сделанный еще в 2007г.
    Но с этими драйверами для AVRISP под AVR Studio и Arduino IDE полная засада на Win10.
    На Win7 было проще. Два разных USB порта - два разных устройства.
    На Win10 надо менять драйвера...
    Достал старый ноут на Win7...
     
  5. issaom

    issaom Гуру

    Гы - задержали сегодня на проходной с Ампрковскими тройка-модулЯми :D:D:D , потом правда отпустили.... как бы вы ответили на вопрос "а чеэто у Вас такое?"
     
  6. NikitOS

    NikitOS Король шутов Администратор

    Послал бы в гугл :D
     
    issaom нравится это.
  7. issaom

    issaom Гуру

    А как бы ты объяснил где находится этот самый гугл? (молодой еще - суровых Рассейских охранниц не видел....)
     
  8. SergeiL

    SergeiL Оракул Модератор

    Да у меня каждый раз просят показать коробочку с платами в аэропорту на спец. контроле. :)
    Коробочка небольшая, часы на ESP, переходник USB-UART, и пару маленьких плат, чтобы было чем вечером заняться ;)
    Уже привык :)
     
    ИгорьК и issaom нравится это.
  9. alp69

    alp69 Форумчанин

    50...
     
    DetSimen нравится это.
  10. NikitOS

    NikitOS Король шутов Администратор

    С днем рождения!
    [​IMG]
     
    SergeiL, Airbus, DetSimen и ещё 1-му нравится это.
  11. DetSimen

    DetSimen Guest

    пожалуй, тяпну за тебя. хоть и 5:45 на часах :)
     
    SergeiL и Airbus нравится это.
  12. alp69

    alp69 Форумчанин

    :)
     
  13. ИгорьК

    ИгорьК Гуру

    И я рюмочку
     
    alp69 нравится это.
  14. akl

    akl Гуру

    делаю виндос-программу для ком-порта. Возник затуп.
    Например в сокетах есть функция WSAAsyncSelect(), при помощи которой можно задать сообщение со своим нестандартным номером, которое будет приходить в оконную или диалоговую процедуру при всяких разных событиях, происходящих с сокетом.
    Для ком-порта якобы есть сообщение WM_COMMNOTIFY, но судя по всему это уже не работает, т.к. устарело и это не годится короче.

    Есть ли какой-то способ сделать чтобы например когда в ком-порт приходят данные, в виндос-процедуру тут же приходило сообщение об этом? Могу конечно сделать чтоб по таймеру постоянно проверяло есть ли данные, но это слишком тупо.

    В примерах из интернета обычно создают событие CreateEvent(), а потом мутят с потоками и т.п., но мне не нужна многопоточность, мне охота чтобы именно в программу приходило сообщение о том что в ком-порте что-то случилось. В какую сторону гуглить может кто шарит в виндосе подскажите :rolleyes:
     
  15. Ariadna-on-Line

    Ariadna-on-Line Гуру

    В Визуал Бейсике 6 -
    Код (Text):

    Private Sub MSComm1_OnComm()

    '******************************************************************************
    ' Synopsis:     Handle incoming characters, 'On Comm' Event
    '
    ' Description:  By setting MSComm1.RThreshold = 1, this event will fire for
    '               each character that arrives in the comm controls input buffer.
    '               Set MSComm1.RThreshold = 0 if you want to poll the control
    '               yourself, either via a TImer or within program execution loop.
    '
    '               In most cases, OnComm Event processing shown here is the prefered
    '               method of processing incoming characters.
    '
    '******************************************************************************

        Static sBuff    As String           ' buffer for holding incoming characters
        Const MTC       As String = vbCrLf  ' message terminator characters (ususally vbCrLf)
        Const LenMTC    As Long = 2         ' number of terminator characters, must match MTC
        Dim iPtr        As Long             ' pointer to terminatior character

        ' OnComm fires for multiple Events
        ' so get the Event ID & process
        Select Case MSComm1.CommEvent
       
            ' Received RThreshold # of chars, in our case 1.
            Case comEvReceive
       
                ' read all of the characters from the input buffer
                ' StrConv() is required when using MSComm in binary mode,
                ' if you set MSComm1.InputMode = comInputModeText, it's not required
           
                sBuff = sBuff & StrConv(MSComm1.Input, vbUnicode)
                       
                ' a typical application would buffer characters here waiting for
                ' an end of message sequence like vbCrLf, that's why sBuff is declared
                ' as Static and the statement above sets sBuff = sBuff & MSComm1.Input
                ' When an end of message string is received the messages are passed
                ' through a parser routine. Here, we show processing a character at
                ' time and 'message parsing' options. MEssage parsing varies depending
                ' on what you're doing but would look something like this:
           
              '  If bMessageMode Then
                    ' in message mode we wait for the message terminator
                    ' before processing. This is typcal of a command & control
                    ' program that interfaces with an external device and
                    ' must decode data coming from the device. Most devices will
                    ' use a start / end sequennce to ID each message.  You
                    ' would process the messages by calling your message parser and
                    ' passing the message just like the message is passed to the
                    ' PosTerminal routine below. Some device's use character count
                    ' to ID messages instead of start/end characters, this method is
                    ' too machine specific to be shown here.
               
                    ' look for message terminator
                    iPtr = InStr(sBuff, MTC)
                    ' process all queued messages
                    Do While iPtr
                        ' pass each message to the message parser
                        ' in our case, it just gets displayed. To decode
                        ' specific messages, you would pass the string
                        ' Mid$(sBuff, 1, iPtr + LenMTC - 1)
                        ' to a message decoder routime
                        PostTerminal Mid$(sBuff, 1, iPtr + LenMTC - 1)
                        ' remove from the message queue
                        sBuff = Mid$(sBuff, iPtr + LenMTC)
                        ' look for another message
                        iPtr = InStr(sBuff, MTC)
                    Loop
           
              '  Else
                    ' in character mode we just pass each character to
                    ' the parser as it comes in. The parser is responsibe
                    ' for collecting the characters and assembling any messages.
                    ' For our simple terminal example, character mode works fine.
                '    PostTerminal sBuff
                '    sBuff = vbNullString
              '  End If
           
           
                ' flash the Rx LED
            txtTerminal.BackColor = &H40&
                tmrRxLED.Enabled = True
     

            ' A Break was received.
            Case comEventBreak
                lblError = "Break"
                '   tmrClearError.Enabled = True
       
            ' Framing Error
            Case comEventFrame
                lblError = "Framing"
            '    tmrClearError.Enabled = True
       
            ' Data Lost.
            Case comEventOverrun
                lblError = "Overrun"
            '    tmrClearError.Enabled = True
       
            ' Receive buffer overflow.
            Case comEventRxOver
                lblError = "Overflow"
                tmrClearError.Enabled = True
       
            ' Parity Error.
            Case comEventRxParity
                lblError = "Parity"
                tmrClearError.Enabled = True
       
       
            ' Unexpected error retrieving DCB]
            Case comEventDCB
                lblError = "DCB Error"
                tmrClearError.Enabled = True

        End Select

    End Sub
     
    Вставляете следом за "Case com..." нужные строчки и готово. По-сути - это обработчик прерывания. В него не надо заходить, он отрабатывает в фоне. Но Бейсик использует уже установленные библиотеки. Есть ли они у вас - не факт.
     
    Последнее редактирование: 19 ноя 2019
    akl нравится это.
  16. akl

    akl Гуру

    не, это мне не поможет. Вот если бы знать как оно там внутри этой библиотеки работает (все равно же через винапи наверно) :(
     
  17. DetSimen

    DetSimen Guest

    ты на чём пишешь то?
     
  18. akl

    akl Гуру

    на чистом вульгарном си (возможно++, но это не точно)
     
  19. Ariadna-on-Line

    Ariadna-on-Line Гуру

    Последнее редактирование: 20 ноя 2019
    akl нравится это.
  20. SergeiL

    SergeiL Оракул Модератор

    А среда компиляции какая?