Страница 4 из 6 ПерваяПервая ... 23456 ПоследняяПоследняя
Показано с 31 по 40 из 54

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

  1. #31
    Супер Модератор Аватар для Евгений Кислов
    Регистрация
    27.01.2015
    Адрес
    Москва
    Сообщений
    13,627

    По умолчанию

    Цитата Сообщение от ВладОвен Посмотреть сообщение
    А как в отладке увидеть реальное (фактическое) время открытия?
    Убрать таймаут и запустить таймер от xEnable до xActive.

  2. #32

    По умолчанию

    А вот еще вопрос.
    Тот, кто писал эту библиотеку (NBS), почему он сделал ФБ TCP_Client с параметром udiTimeOut,
    а ФБ TCP_Read без этого параметра?
    Ну было бы удобно задавать тайм-аут параметром, а не доп.таймером при чтении данных от сервера!
    Разве нет?
    Последний раз редактировалось ВладОвен; 06.12.2022 в 17:44.

  3. #33

    По умолчанию

    Ладно. Вот такой вопрос.
    Сервер не отвечает, потому что нету в моей строке завершающего символа с кодом 0.
    Как его туда поставить? Думаю так:
    1. Раз за разом перед началом чистить мою 10к-строку, чтобы в ней все символы были равны 0.
    2. Формировать мою строку на сервер.
    3. Непосредственно при отправке в ФБ fbTcpWrite вписывать так:

    fbTcpWrite(xExecute:=TRUE, hConnection:=fbTcpClient.hConnection, pData:=ADR(sDataSend), szSize:=SIZEOF(sDataSend) +1 );

    Так получится?
    Буфер будет на один символ длиннее, а там 0 (см. п1.).

  4. #34
    Супер Модератор Аватар для Евгений Кислов
    Регистрация
    27.01.2015
    Адрес
    Москва
    Сообщений
    13,627

    По умолчанию

    Ну было бы удобно задавать тайм-аут параметром, а не доп.таймером при чтении данных от сервера!
    Разве нет?
    Мы в OwenCommunication в ФБ UNM_TcpRequest так и сделали.
    Так что наши клиенты могут обойтись и без доп. таймера.

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

    По умолчанию

    Если вы делаете SIZEOF от строки - то отправляется и "завершающий символ с кодом 0".
    Потому что в CODESYS строки нуль-терминированные.
    https://ru.wikipedia.org/wiki/%D0%9D...BE%D0%BA%D0%B0

    Более того - отправляется ровно столько байт, сколько выделено под строку (потому что вы используете SIZEOF).
    Т.е. если в вашей STRING(10000) реально всего 100 символов - то будут отправлены эти 100 символов и еще 9901 нулевых байт следом.

    Буфер будет на один символ длиннее, а там 0 (см. п1.).
    Буфер не будет "на один символ длиннее".
    Вы просто пытаетесь убедить блок в том, что размер вашей переменной на один байт больше, чем на самом деле.
    Результат вы уже видели.

  6. #36

    По умолчанию

    Т.е. строка в таком случае всегда вылетает с этим символом 0? Даже, если я напишу "МАМА", то вылетят не 4, а 5 символов?
    Т.е. я понял смысл нуль-терминальной строки, но как происходит выход такой строки в порт?
    Последний раз редактировалось ВладОвен; 06.12.2022 в 18:13.

  7. #37
    Супер Модератор Аватар для Евгений Кислов
    Регистрация
    27.01.2015
    Адрес
    Москва
    Сообщений
    13,627

    По умолчанию

    Цитата Сообщение от ВладОвен Посмотреть сообщение
    Т.е. строка в таком случае всегда вылетает с этим символом 0? Даже, если я напишу "МАМА", то вылетят не 4, а 5 символов?
    Т.е. я понял смысл нуль-терминальной строки, но как происходит выход такой строки в порт?
    Если szSize := SIZEOF(sMama), где sMama имеет тип STRING(4) - то да.
    С точки зрения порта - вы передаете указатель на начальный байт буфера и число байт в нем.
    Про строки буфер вообще не в курсе - представление данных его не касается.

  8. #38
    Супер Модератор Аватар для Евгений Кислов
    Регистрация
    27.01.2015
    Адрес
    Москва
    Сообщений
    13,627

    По умолчанию

    Цитата Сообщение от capzap Посмотреть сообщение
    Линукс линуксом, но мне кажется как и во второй версии в кдс нет фрагментации и по сети передается только не больше полутора килобайт
    Ваши предположения неверны.

    06-12-2022 18-56-17.png

  9. #39

    По умолчанию

    Цитата Сообщение от Евгений Кислов Посмотреть сообщение
    Т.е. если в вашей STRING(10000) реально всего 100 символов - то будут отправлены эти 100 символов и еще 9901 нулевых байт следом.
    Значит надо перед отправкой посчитать количество реальных байт (искать до первого символа с кодом 0 и его тоже захватить с собой) и вставить в sizeof это значение.
    Так?

  10. #40
    Супер Модератор Аватар для Евгений Кислов
    Регистрация
    27.01.2015
    Адрес
    Москва
    Сообщений
    13,627

    По умолчанию

    Цитата Сообщение от ВладОвен Посмотреть сообщение
    Значит надо перед отправкой посчитать количество реальных байт (искать до первого символа с кодом 0 и его тоже захватить с собой) и вставить в sizeof это значение.
    Так?
    Да, именно.
    Можно сделать так: szSize:=TO_DWORD(LEN(sDataSend) + 1)

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

Похожие темы

  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, 07:23

Ваши права

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