Страница 5 из 6 ПерваяПервая ... 3456 ПоследняяПоследняя
Показано с 41 по 50 из 51

Тема: PLC 110-30 v2 & сокеты

  1. #41
    Пользователь Аватар для Serhioromano
    Регистрация
    15.09.2015
    Адрес
    Бишкек
    Сообщений
    265

    По умолчанию

    Блин, счастье длилось не долго. Это функция работает в проекте с тестовой программой. Если сохраняю ее как библиотеку .lib тоже работает если залить на ПЛК, а если подключаю ее к другому проекту, то там ни фига не работает. Хотя код вызова ФБ одинаковый. Что может быть?

  2. #42

    По умолчанию

    Цитата Сообщение от Serhioromano Посмотреть сообщение
    Блин, счастье длилось не долго. Это функция работает в проекте с тестовой программой. Если сохраняю ее как библиотеку .lib тоже работает если залить на ПЛК, а если подключаю ее к другому проекту, то там ни фига не работает. Хотя код вызова ФБ одинаковый. Что может быть?
    Сокеты у Овена своеобразные, но вроде работают
    1. создать сокет ( SysSockCreate )
    2. настроить неблокирующий режим ( SysSockSetOption )
    3. попытка соединения с сервером ( SysSockConnect )
    4. немного подождать
    5. отправка сообщения серверу ( SysSockSend ), если отправка удалась, то переходим (6) иначе (3)
    6. можно совсем немного подождать
    7. прием ответа ( SysSockRecv )

    Замечания:
    1. ( bStep = 10 ), чтобы нечаянно не потерять сокет, я бы сделать так
    Код:
    IF ( handle = SOCKET_INVALID ) THEN
    	answer := SysSockCreate( SOCKET_AF_INET, SOCKET_STREAM, SOCKET_IPPROTO_TCP );
    	if ( answer = SOCKET_INVALID ) then
    		....
    	else
    		handle := answer;
    		....
    	end_if
    else
    	SysSockShutdown( handle, 2 );
    	SysSockClose( handle );
    	handle := SOCKET_INVALID;
    end_if
    2. ( bStep = 20 ) – не нужно анализировать возврат SysSockConnect, можно сразу переходить к отправке, можно немного подождать, и потом переходить к отправке
    3. ( bStep = 20 ) – вызов SysSockSetOption, наверно, лучше перенести в ( bStep = 10 )
    4. ( bStep = 30 ) – я не уверен, что нужно использовать флаги в SysSockSend, попробуйте 0
    5. ( bStep = 30 ) – я не уверен, что SysSockSend может вернуть отрицательное значение
    6. ( bStep = 30 ) – в Modbus Tcp «маленькие» пакеты, не нужно пытаться отправлять запрос по частям, т.е
    Код:
    answer := SysSockSend( handle, adr( data ), sizesof( data ), 0 );
    if ( answer = sizeof( data ) ) then
    	переход на прием
    else
    	...
    end_if
    7. ( bStep = 40 ) – я не уверен, что нужно использовать флаги в SysSockRecv, попробуйте 0
    8. ( bStep = 40 ) – я не уверен, что SysSockRecv может вернуть отрицательное значение
    9. ( bStep = 40 ) – нужно проверять ответ, а не просто
    Код:
    IF diResult > 0 THEN
    10. ( bStep = 40 ) - размер буфера для чтения, наверно, должен быть больше 25 байт
    Код:
    arbBuffer: ARRAY[0..24] OF BYTE;
    наверно для FC = 3 или FC = 4 размер должен быть не меньше 259 ( 9 + REG_NUM * 2, если читать до 125 регистров ), или 263 ( 9 + REG_NUM * 2, если читать до 127 регистров )

    11. ( bStep = 40 ) - вашему FB очень не хватает таймера (watchdog)
    Последний раз редактировалось monteg; 05.11.2018 в 23:13.

  3. #43
    Пользователь Аватар для Serhioromano
    Регистрация
    15.09.2015
    Адрес
    Бишкек
    Сообщений
    265

    По умолчанию

    Я учел некоторые замечания. Но проблема ведь не в том. Код то рабочий. Если он не как библиотека подключен то он работает, а если подключить как библиотека, то перестает.

    Цитата Сообщение от monteg Посмотреть сообщение
    Сокеты у Овена своеобразные, но вроде работают
    5. ( bStep = 30 ) – я не уверен, что SysSockSend может вернуть отрицательное значение
    Возвращает,проверено и send и recv

    Цитата Сообщение от monteg Посмотреть сообщение
    11. ( bStep = 40 ) - вашему FB очень не хватает таймера (watchdog)
    Зачем этот таймер? Мне не нужна задержка между опросами. Весь смысл перехода на сокеты был скорость работы. Даже 200мс задержки может отразиться на конечном результате.

  4. #44

    По умолчанию

    Цитата Сообщение от Serhioromano Посмотреть сообщение
    Зачем этот таймер? Мне не нужна задержка между опросами. Весь смысл перехода на сокеты был скорость работы. Даже 200мс задержки может отразиться на конечном результате.
    Таймер нужен не для задержки, а для контроля.
    Почему Вы уверены, что получите ответ? Все может повиснуть в ( bStep = 40 )

  5. #45

    По умолчанию

    Цитата Сообщение от Serhioromano Посмотреть сообщение
    Код то рабочий. Если он не как библиотека подключен то он работает, а если подключить как библиотека, то перестает.
    Чудес не бывает, дело не в lib-е, а в вашем коде и коде Овена.

  6. #46

    По умолчанию

    Цитата Сообщение от Филоненко Владислав Посмотреть сообщение
    После программного сброса, если нет обработчика события Reset, в котором ресурсы освобождаются, порты, сокеты и пр. ресурсы, выделяемые в программе и не должны работать.
    А как освободить ресурсы не по программному сбросу, а при заливке в контроллер другой программы, тоже использующей эти же ресурсы? Иначе новая программа не сможет ими воспользоваться.
    У Wago, например, есть событие before_download.
    А как быть здесь?

  7. #47

    По умолчанию

    Цитата Сообщение от Slev Посмотреть сообщение
    А как освободить ресурсы не по программному сбросу, а при заливке в контроллер другой программы, тоже использующей эти же ресурсы? Иначе новая программа не сможет ими воспользоваться.
    У Wago, например, есть событие before_download.
    А как быть здесь?
    Наверно, никак. Только перезагрузка ПЛК.
    Если работаете удаленно и ПЛК М02, то в ПЛК-Броузер есть команда rebooT
    Последний раз редактировалось monteg; 21.11.2018 в 09:46.

  8. #48

    По умолчанию

    Цитата Сообщение от monteg Посмотреть сообщение
    Наверно, никак. Только перезагрузка ПЛК.
    Если работаете удаленно и ПЛК М02, то в ПЛК-Броузер есть команда rebooT
    Похоже, очистку надо вешать на событие СТОП. При заливке новой программы. старую система сначала останавливает, что вполне разумно.
    Так, по крайней мере, у меня всё заработало.

  9. #49

    По умолчанию

    Цитата Сообщение от Slev Посмотреть сообщение
    А как освободить ресурсы не по программному сбросу, а при заливке в контроллер другой программы, тоже использующей эти же ресурсы? Иначе новая программа не сможет ими воспользоваться.
    У Wago, например, есть событие before_download.
    А как быть здесь?
    И у нас есть события, используйте их
    Тролль-наседка, добрый, нежный и ласковый

  10. #50

    По умолчанию

    Цитата Сообщение от Slev Посмотреть сообщение
    Похоже, очистку надо вешать на событие СТОП. При заливке новой программы. старую система сначала останавливает, что вполне разумно.
    Так, по крайней мере, у меня всё заработало.
    Хорошо, что заработало. Я пробовал это через SysLibCallback сделать, ничего не вышло. Поэтому остановился на варианте с перезапуском.

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

Похожие темы

  1. ПЛК100 2.17 не работают сокеты
    от murdemon в разделе ПЛК1хх
    Ответов: 6
    Последнее сообщение: 02.07.2018, 21:15
  2. ПЛК100 + Сокеты
    от ribamuka в разделе ПЛК1хх
    Ответов: 4
    Последнее сообщение: 30.08.2017, 11:55
  3. Возможно ли в режиме эмуляции Codesys тестировать работу через сокеты TCP
    от Денис Бердяев в разделе Сетевые технологии
    Ответов: 2
    Последнее сообщение: 09.10.2014, 08:23

Ваши права

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