<

1C: MSCOMM32.ocx назначить событие onComm

Войти
  1. lEvGl

    17-10-2019 17:39

    Доброго всем

    Подскажите, как программно назначить событие библиотеки onComm к конкретной процедуре в модуле

    ComPort = Новый COMОбъект("MSCOMMLib.MSComm.1");
    ComPort.CommPort = 9;
    ComPort.PortOpen = Истина;
    ComPort.OutPut = Символ(49) + Символ(13);

    После отправки в порт команды устройство возвращает в буфер ответ, где содержатся нужные данные. Если разместить актив Х на форме, то у него есть обработчик события onComm и проблем нет. У меня несколько устройств на разных портах(номера портов на разных машинах разные), поэтому создаю их программно, типа "динамически", возможности "мышкой" назначить обработчик события нет. Если например в шарпе можно
    mySerialPort.DataReceived += new SerialDataReceivedEventHandler(DataReceivedHandler);

    То какие могут быть варианты в нашей платформе?

  2. lEvGl

    17-10-2019 18:52

    ап

  3. lEvGl

    18-10-2019 09:14

    неужели никто не решил

  4. lEvGl

    18-10-2019 10:08

    текучка

  5. lEvGl

    18-10-2019 12:11

    вверх

  6. Garykom

    18-10-2019 12:29

    (0) На нашей платформе можно использовать ВК или веб-сервисы.

  7. lEvGl

    18-10-2019 12:32

    (5) да уже сделал на этой библиотеке, переделывать на вк не хочется
    варианты то есть, но приходится вручную отлавливать данные - по количеству символов или по CommEvent ил еще как, но при этом страдает надежность

  8. lEvGl

    18-10-2019 12:37

    у нее, у библиотеки, должен быть класс событий, но как он называется не ясно, соответственно комобъект создать не получается

    если правильно понимаю
    Новый COMОбъект("MSCOMMLib.MSComm")

    MSComm - это класс, тогда должно быть типа

    Новый COMОбъект("MSCOMMLib.Events")

    но имя неизвестно

  9. lEvGl

    18-10-2019 12:37

    хотя это все догадки, описания не нашел

  10. Garykom

    18-10-2019 12:37

    Блин используй уже обработчик ожидания и не страдай.

  11. lEvGl

    18-10-2019 12:39

    а что он даст? каждую секунду смотреть в буфер или я не так понял?

  12. lEvGl

    18-10-2019 12:49

    гм... я знаю только ПодключитьОбработчикОжидания(Процедура, Время), не об этом речь?

  13. Garykom

    18-10-2019 12:54

    (10) (11) Угу каждую секунду смотри что в ComPort.Input

  14. lEvGl

    18-10-2019 13:06

    в этом и проблема - нет синхронизации между устройством и программой, если посмотреть слишком рано или слишком поздно, то данных не будет. А компьютеры разные, скорость выполнения операций разная, поэтому у одного выполнение получения занимает 0.3 секунды, а у другого 0.5, у третьего может процессор антивирусом загрузиться и он будет обрабатывать 3 секунды. Через событие это решается оптимально и надежно - появились данные в буфере, генерится событие onComm. Генерится именно в тот момент, когда это нужно, а читая буфер по своим таймерам я получаю обрывки строк, то первую часть строки, то вторую, то совсем ничего. Микрософтовский функционал надежнее за счет схемы реализации

  15. Garykom

    18-10-2019 13:23

    (13) см (5)

  16. lEvGl

    18-10-2019 13:31

    и на том спасибо, хотя бы понятно, что так не реализуется

  17. lEvGl

    18-10-2019 14:40

    хотя... может увидит тот, кто все таки сделал это)

  18. lEvGl

    20-10-2019 17:58

    делается через

    НазначитьОбработчик Событие, Обработчик;

    кто то пожадничал

  19. ДенисЧ

    20-10-2019 18:01

    (17) Так делается или не работает?

  20. lEvGl

    20-10-2019 18:05

    (18) там же русским по белому написано

    да и встречал это триста раз на форумах, но не приходилось использовать

  21. acht

    20-10-2019 18:09

    (19) > там же русским по белому написано

    А то, что оно называется "ДобавитьОбработчик", а не "НазначитьОбработчик" там написано?