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

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

  1. #31

    По умолчанию

    Цитата Сообщение от ВладОвен Посмотреть сообщение
    А как в отладке увидеть реальное (фактическое) время открытия?
    Убрать таймаут и запустить таймер от 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

    По умолчанию

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

  5. #35

    По умолчанию

    Если вы делаете 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

    По умолчанию

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

  8. #38

    По умолчанию

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

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

  9. #39

    По умолчанию

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

  10. #40

    По умолчанию

    Цитата Сообщение от ВладОвен Посмотреть сообщение
    Значит надо перед отправкой посчитать количество реальных байт (искать до первого символа с кодом 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

Ваши права

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