Страница 2 из 6 ПерваяПервая 1234 ... ПоследняяПоследняя
Показано с 11 по 20 из 54

Тема: СПК1хх & Сокеты

  1. #11

    По умолчанию

    В общем сокеты нормально работают только при переводе их в неблокирующий режим и при чтении и записи с флагом SOCKET_MSG_DONTWAIT, иначе цикл исполнения программы увеличивается т.к SysSockRecv ждет пакетов. Но вопрос про то, как узнать что кабель оторван остается открытым.
    Можно, конечно закрывать сокеты по таймауту, мол не обращаются к нам какое то время - закрываем клиентский сокет. попробую отпишусь.

  2. #12

    По умолчанию

    С таймаутами работает. Отключаем кабель, включаем через любое время - связь восстанавливается.
    Но все же хотелось бы знать точно, это что-то со связью (кабель итд) или просто клиент молчит.
    Последний раз редактировалось lazy; 29.11.2019 в 15:36.

  3. #13
    Пользователь
    Регистрация
    24.12.2014
    Адрес
    Санкт-Петербург
    Сообщений
    26

    По умолчанию

    А вот еще вопрос по теме. Используя библиотеку NBS CAA ведь можно с ПЛК в ПЛК передавать любые данные, используя ФБ send и recieve, а не только строковые, как приведено в примере. Но вот у меня есть необходимость реализовать связь ПК - ПЛК, и ПК нужно знать структуру передаваемого UDP пакета, а в документации "Реализация обмена через сокеты" об этом нигде не сказано. Есть только сноска, что "В рамках примера рассматривается обмен данными между сервером и клиентом с помощью обычных текстовых строк. Для реализации конкретного протокола потребуется его спецификация, описывающая форматы и последовательности запросов и ответов."

    Если по другому и глупо, то ПЛК используя библиотеку легко примет переменную типа WORD, а как ее сформировать на ПК?

  4. #14

    По умолчанию

    Цитата Сообщение от Евгений Кислов Посмотреть сообщение
    Я бы рекомендовал все же посмотреть CAA NBS - там сервер строится из 4 ФБ, которые имеют минимум входов и выходов.
    Привет.
    А в этой библиотеке CAA NBS есть ФБ, который закрывает соединение?
    Мне нужно 1 раз в полчаса отправлять сообщение на сервер и не хотелось бы держать соединение постоянно открытым.

  5. #15
    Супер Модератор Аватар для Евгений Кислов
    Регистрация
    27.01.2015
    Адрес
    Москва
    Сообщений
    12,147

    По умолчанию

    Цитата Сообщение от ВладОвен Посмотреть сообщение
    Привет.
    А в этой библиотеке CAA NBS есть ФБ, который закрывает соединение?
    Мне нужно 1 раз в полчаса отправлять сообщение на сервер и не хотелось бы держать соединение постоянно открытым.
    Добрый день.
    Вы планируете реализовать клиент или сервер?

  6. #16

    По умолчанию

    Я планирую сделать клиент.

  7. #17

  8. #18

    По умолчанию

    Подскажите, а как сформировать очень длинную строку для отправки? Например нужно 10кБ, т.е. 10 тыс. символов.
    Можно ли использовать функцию StrConcatA из библиотеки StringUtils для этого?

  9. #19
    Супер Модератор Аватар для Евгений Кислов
    Регистрация
    27.01.2015
    Адрес
    Москва
    Сообщений
    12,147

    По умолчанию

    Цитата Сообщение от ВладОвен Посмотреть сообщение
    Подскажите, а как сформировать очень длинную строку для отправки? Например нужно 10кБ, т.е. 10 тыс. символов.
    Можно ли использовать функцию StrConcatA из библиотеки StringUtils для этого?
    Да, можно использовать эту функцию.

  10. #20

    По умолчанию

    Супер! Теперь осталось понять, почему она хреново работает.

    Я складываю свою строку из многих компонентов.
    Вот код:
    Код:
    sDataSend := '{"calibr_unit":10,"data":{"cmd":"add_launch","algoritm":"';          // уникальный номер стенда
    sDataTEMP := 'Test';                                                                                        // уникальное имя алгоритма
    STU.StrConcatA(ADR(sDataTEMP), ADR(sDataSend), 10000);                             // сначала кусок для прибавления, потом то, к чему нужно прибавить.
    Получаю нормальную склейку:
    Безымянный121212.png

    А далее:
    Код:
    sDataTEMP := '2022-12-05 12:00:00';                                                              // дата/время
    STU.StrConcatA(ADR(sDataTEMP), ADR(sDataSend), 10000);
    Что тут:
    Безымянный44444.png

    Почему так?

Страница 2 из 6 ПерваяПервая 1234 ... ПоследняяПоследняя

Похожие темы

  1. UDP + Python + сокеты
    от БугиВуги в разделе Сетевые технологии
    Ответов: 0
    Последнее сообщение: 08.05.2020, 12:17
  2. PLC 110-30 v2 & сокеты
    от lazy в разделе ПЛК1хх [М02]
    Ответов: 50
    Последнее сообщение: 23.11.2018, 15:26
  3. ПЛК100 2.17 не работают сокеты
    от murdemon в разделе ПЛК1хх
    Ответов: 6
    Последнее сообщение: 02.07.2018, 21:15
  4. ПЛК100 + Сокеты
    от ribamuka в разделе ПЛК1хх
    Ответов: 4
    Последнее сообщение: 30.08.2017, 11:55
  5. Возможно ли в режиме эмуляции Codesys тестировать работу через сокеты TCP
    от Денис Бердяев в разделе Сетевые технологии
    Ответов: 2
    Последнее сообщение: 09.10.2014, 08:23

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •