Страница 5 из 8 ПерваяПервая ... 34567 ... ПоследняяПоследняя
Показано с 41 по 50 из 75

Тема: SysSockCreate

  1. #41

    По умолчанию

    Вроде все почистил, вроде все ненужное убрал и как-то полегши стало.
    Осталось одно маленькое НО.
    Все 30ms. Как не кручу если скорость меняю с 5ms до 25ms время от времени пакеты склеиваются
    Когда в два, когда в четыре, а иногда и в восемь. Вижу по счетчику в пакете и длине пакета.
    четко, без потерь просто склеились в один. Хотя при 5ms иногда сыплются но не сильно.
    30ms – у меня выходит 10пакетов в одну сторону, я шлю строки и шибко разницы что я посылаю
    пакет из 3х байт , что из 1000 не вижу – как было 10 пакетов, так и осталось.
    При уменьшении скорости связь уже не рвется, поправил – ура.

    Но вот скорость, хотя бы до 20ти пакетиков в секунду очень уж хотса. Так для спокойствия.
    В принципе я могу со стороны клиента эти пакеты распилить и ни чего не потеряю, но
    хочется разобраться почему так происходит.

    Делаю так, каждый цикл

    IF Buff_Send <> '' THEN
    Size_Send:=SysSockSend(hSocket, ADR(Buff_Send), LEN(Buff_Send)+1, 0 );
    Buff_Send:='';

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

    Вот мой пакет:
    RFN ================================================== ========
    00000000 52 3B 4D 4B 3B 31 39 32 3A 31 36 38 3A 30 3A 31 R;MK;192:168:0:1
    00000010 31 2D 36 41 3A 37 37 3A 30 30 3A 30 30 3A 39 30 1-6A:77:00:00:90
    00000020 3A 44 31 2D 30 3A 30 3A 30 3A 30 2D 32 35 35 3A 1-0:0:0:0-255:
    00000030 32 35 35 3A 32 35 35 3A 30 3B 36 34 3B 45 4F 50 255:255:0;64;EOP
    00000040 00 .
    RFN ================================================== ========
    RFN: port=444

    Так приходит склеенный:

    RFN ================================================== ========
    00000000 52 3B 4D 4B 3B 31 39 32 3A 31 36 38 3A 30 3A 31 R;MK;192:168:0:1
    00000010 31 2D 36 41 3A 37 37 3A 30 30 3A 30 30 3A 39 30 1-6A:77:00:00:90
    00000020 3A 44 31 2D 30 3A 30 3A 30 3A 30 2D 32 35 35 3A 1-0:0:0:0-255:
    00000030 32 35 35 3A 32 35 35 3A 30 3B 36 34 3B 45 4F 50 255:255:0;64;EOP
    00000040 00 52 3B 4D 4B 3B 31 39 32 3A 31 36 38 3A 30 3A .R;MK;192:168:0:
    00000050 31 31 2D 36 41 3A 37 37 3A 30 30 3A 30 30 3A 39 11-6A:77:00:00:9
    00000060 30 3A 44 31 2D 30 3A 30 3A 30 3A 30 2D 32 35 35 01-0:0:0:0-255
    00000070 3A 32 35 35 3A 32 35 35 3A 30 3B 36 34 3B 45 4F :255:255:0;64;EO
    00000080 50 00 P.
    RFN ================================================== ========

    Иногда такая склейка может повторится чере 3 пакета, а иногда через 100.

    Ни кто не встречал такуб ерунду? Как такое побороть?

    Спасибо

  2. #42
    Пользователь Аватар для capzap
    Регистрация
    25.02.2011
    Адрес
    Киров
    Сообщений
    10,635

    По умолчанию

    ну как бы такой ерундой ни кто не занимается. Вы бы для начала объяснили для чего Вам это нужно, так то по ТСР до 1500 байт можно за раз передать

  3. #43

    По умолчанию

    Да уж, действительно ерундой.

    Это я так проверяю чтоб у меня пакетики ни куда не пропали, ну соединение было постоянно.
    А тут у меня вроде все на месте тока в виде непонятном.
    Меня немного пугает если я повешу к этому плк 100 дискретных входов и они будут
    очень часто счелкать, да и статусов дискретных выходов если много будет могу не уложиться.
    А мне это надо все клиенту отдавать и от него принимать. Я понимаю что наверное надо
    Все дискреты допустим входы укладывать в один пакет и или по изменению какого-либо отсылать
    клиенту или в цикле работы сервера, ну или через 2,4,6 циклов работы сервера. И скорость может мне такая не понадобиться.
    Обмен еще не мыслил.

    Просто хочу добить, чтоб было красиво.

    Да и пакетики хочется получать целые, той длинны что нужно, а не сдвойки какий-то.

  4. #44
    Пользователь
    Регистрация
    23.09.2008
    Адрес
    Центророссийск
    Сообщений
    3,104

    По умолчанию

    Сделайте первичную логику в ПЛК, а на ПК отсылайте результаты.
    Например для дискретов - счетчики. А если дискреты - контроль, но не Di надо слать, его можно переподключить, а результат контроля

  5. #45
    Пользователь Аватар для capzap
    Регистрация
    25.02.2011
    Адрес
    Киров
    Сообщений
    10,635

    По умолчанию

    100 дискретных входов и 220 дискретных выходов это всего 40 байт, а не 1500

  6. #46

    По умолчанию

    100 дискретных входов и 220 дискретных выходов это всего 40 байт, а не 1500
    Это понятно

    Я ж сказал, хочу понять в чем дело и все.
    Не получиться так поставлю свои 30ms и усе.

  7. #47
    Пользователь
    Регистрация
    23.09.2008
    Адрес
    Центророссийск
    Сообщений
    3,104

    По умолчанию

    Ручной сервер на ПЛК не делал, а штатный слейв (с модбасTCP) мастеру на ПК нормально принимает+отвечает с периодом от 16мс. Если меньше - тоже какой-то мусор прилетает. Наверно не до конца докопал. Может после НГ руки дойдут.
    100 дискретных входов и 220 дискретных выходов это всего 40 байт, а не 1500
    А мб - это целых 250 байт ))))

  8. #48
    Пользователь Аватар для capzap
    Регистрация
    25.02.2011
    Адрес
    Киров
    Сообщений
    10,635

    По умолчанию

    вроде 320 на восемь будет 40, разве не так

  9. #49
    Пользователь
    Регистрация
    23.09.2008
    Адрес
    Центророссийск
    Сообщений
    3,104

    По умолчанию

    Ну я ж просто упростить код со стороны ПЛК предложил, если съём < 251 байт за раз. И раз уж все равно TCP, думаю что то же самое со временем и через syslibsocket
    Последний раз редактировалось Валенок; 10.12.2013 в 20:28.

  10. #50

    По умолчанию

    У меня уж мусора нет и с развалом пакетов разобрался, и не развал был.
    Эта мая первая такая работа с плк, невнимательно делаю видимо.

    Но этот клей как-то зараза достал. Всего-то осталось е-мое.

    Вот еще какая мысля есть может посоветуете че.

    Работа со строками, тут понял что искать клеить и.т.д операции со строками полное фуфло если она больше 255.
    Увидел это тока когда веб сервер собирал, хотя потом в хелпе нашел.
    А как правильно та с длинными работать, в ОЗУ?

    Далее
    Вот этот кусок

    IF Buff_Send <> '' THEN
    Size_Send:=SysSockSend(hSocket, ADR(Buff_Send), LEN(Buff_Send)+1, 0 );
    Buff_Send:=''; !!!! Вот это я затираю строку, и длину хочу 0 – это я правильно делаю?

    Может тут какая зараза сидит.

    Может задержка нужна Buff_Send:=''; ? Может там что-то друг на дружку лезет?

    Дело в том что я собирал веб сервер, первый ответ длинны№1 далее идет POST для запроса пароля, он чуть меньше
    Чем №1 я там то же выполняю Buff_Send:=''; он его затирает, но когда приходит POST с паролем и логином а он заведомо
    Меньше в весь прием = длинны №1 и мне сам пасворд в конце не отловить, т.к в следующим за ним мусоре может быть тег password.

    Может я через жоу со строками? Не подскажите как массив из char сотворить, тут вроде char нет но как-то же вы с этим боретесь?
    Вот в оскатовских бибка видел, там можно типа че - не нужное порезать, но не пробовал. Т.к не пойму почему они у меня
    Ругались-ругались, а потом перестали и все три штуки прикрутились, пока че-то не совсем доверяю.

    Ну и еще вопросик : плк, если не че не шлет клиенту раз в 7 секунд то рвет связь – это нормально или косяк искать?

Страница 5 из 8 ПерваяПервая ... 34567 ... ПоследняяПоследняя

Ваши права

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