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

Тема: Немного о SysLibSockets

Комбинированный просмотр

Предыдущее сообщение Предыдущее сообщение   Следующее сообщение Следующее сообщение
  1. #1
    Пользователь Аватар для capzap
    Регистрация
    25.02.2011
    Адрес
    Киров
    Сообщений
    10,571

    По умолчанию

    Цитата Сообщение от monteg Посмотреть сообщение
    ПЛК - это важный компонент промышленной автоматики.
    Понимаете, одно дело когда используешь библиотеки скачанные с официального сайта, например отсюда
    https://www.owen.ru/product/programm...er_oven_plk110
    и другое когда используешь код, который кто-то выложил на форуме. Вы же в Овене не работаете.
    смешно, а не прочли ли Вы на что я ссылался, если Вы зарегестрированы на сайте КДС, то тоже можете получить из официальных рук эту библиотеку, я тут плюшки запретные выкладываю, а они еще ерепеняться
    Изображения Изображения
    • Тип файла: png owen.png (59.6 Кб, Просмотров: 115)
    Bad programmers worry about the code. Good programmers worry about data structures and their relationships

    среди успешных людей я не встречала нытиков
    Барбара Коркоран

  2. #2
    Пользователь
    Регистрация
    28.11.2013
    Адрес
    Уфа
    Сообщений
    29

    По умолчанию

    Чтобы несколько разбавить эту скучную тему, выложу код NTP-клиента. Товарищ capzap выкладывал давным-давно свою версию. Моя, пожалуй, чуть получше. Скачать проект можно здесь.

    PROGRAM PLC_PRG
    VAR
    GetTime: CurTimeEx;
    TimeAndDate: SystemTimeDate;
    Sys_Time: SysTime64;

    ntp_socket : DINT:= SOCKET_INVALID;
    ntp_sockaddr : SOCKADDRESS;

    state: DWORD;
    R_BUF: ARRAY[0..47] OF BYTE;
    i: WORD;
    received: DINT;
    NTP_TIME: SDT;
    tx, last: DWORD;
    OK, ERRORS: DWORD; (* Счётчики удачных и неудачных запросов - для справки *)
    END_VAR

    VAR CONSTANT
    S_BUF: ARRAY[0..47] OF BYTE := 27,47(0);
    TIMEOUT: TIME := t#500ms; (* Тайм-аут ожидания ответа ntp-сервера *)
    HOME: TIME := t#5h; (* UTC+5 мой часовой пояс *)
    PERIOD: TIME := t#30s; (* Время между ntp-запросами. Не менее 30 секунд! *)
    ntp_port: UINT := 123;
    ntp_addr: UDINT := 16#34B2A129; (* 52.178.161.41 time.windows.com *)
    END_VAR

    ================================================== ===============

    (* Для компиляции требуются библиотеки SYSLIBTIME, SysLibSockets и oscat_basic_333 *)

    (*Читаем текущее время - здесь только для контроля правильности работы программы *)
    TimeAndDate.Year :=0; TimeAndDate.Month :=0; TimeAndDate.Day :=0; TimeAndDate.DayOfWeek :=0;
    TimeAndDate.HOUR :=0; TimeAndDate.MINUTE :=0; TimeAndDate.SECOND :=0; TimeAndDate.Milliseconds :=0;
    TimeAndDate.dwHighMsec :=0; TimeAndDate.dwLowMSecs :=0;
    Sys_time.ulHigh :=0; Sys_time.ulLow :=0;
    GetTime (SystemTime:=Sys_Time , TimeDate:= TimeAndDate);

    (* tx := T_PLC_MS(); *) (* Этот вариант годится, если часть программы выше отсутствует, т.е. когда нам неизвестно значение переменных структуры TimeAndDate *)
    tx := TimeAndDate.dwLowMSecs;

    CASE state OF
    0: (* Cоздание сокета *)
    ntp_socket := SysSockCreate(SOCKET_AF_INET, SOCKET_DGRAM, SOCKET_IPPROTO_UDP);
    ntp_sockaddr.sin_family := SOCKET_AF_INET;
    ntp_sockaddr.sin_port := ntp_port;
    ntp_sockaddr.sin_addr := ntp_addr;
    FOR i:=0 TO 47 DO R_BUF[i] := 0; END_FOR (* Очистка приёмного буфера *)
    state := 1;
    1: (* Посылаем запрос на ntp-сервер *)
    SysSockSendTo(ntp_socket, ADR(S_BUF), SIZEOF(S_BUF), SOCKET_MSG_OOB, ADR(ntp_sockaddr), SIZEOF(ntp_sockaddr));
    last := tx;
    state := 2;
    2: (* Ждём ответ ntp-сервера в течение времени TIMEOUT *)
    received := SysSockRecvFrom(ntp_socket, ADR(R_BUF), SIZEOF(R_BUF), SOCKET_MSG_OOB, ADR(ntp_sockaddr), SIZEOF(ntp_sockaddr));
    IF received=48 AND R_BUF[40]<>0 THEN
    state := 3;
    ELSE
    IF tx-last>TIME_TO_DWORD(TIMEOUT) THEN
    ERRORS := ERRORS+1; (* Ошибки появляются только при обрыве связи *)
    state := 4;
    END_IF
    END_IF
    3: (* Запись полученного времени в системный таймер*)
    NTP_TIME:= DT_TO_SDT( DWORD_TO_DT(DWORD_OF_BYTE(R_BUF[40],R_BUF[41],R_BUF[42],R_BUF[43]) - DWORD#2208988800 + TIME_TO_DWORD(HOME)/1000));
    TimeAndDate.Year := NTP_TIME.YEAR; TimeAndDate.Month := NTP_TIME.MONTH; TimeAndDate.Day :=NTP_TIME.DAY;
    TimeAndDate.HOUR := NTP_TIME.HOUR; TimeAndDate.MINUTE := NTP_TIME.MINUTE; TimeAndDate.SECOND := NTP_TIME.SECOND;
    GetTime (SystemTime:=Sys_Time , TimeDate:= TimeAndDate);
    OK := OK + 1;
    state := 4;
    4: (* Закрываем сокет *)
    SysSockClose(ntp_socket);
    state := 5;
    5: (* Ждём окончания времени между запросами *)
    IF tx-last>TIME_TO_DWORD(PERIOD) THEN
    state := 0;
    END_IF
    END_CASE
    Последний раз редактировалось ufaman; 11.11.2018 в 00:26.

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

    По умолчанию

    ну и зачем было выкладывать то непотребство из шестого поста, если можете нормально писать?
    А по этому коду, используется
    SysSockCreate
    SysSockSendTo
    SysSockRecvFrom
    зачем остальные функции?
    Bad programmers worry about the code. Good programmers worry about data structures and their relationships

    среди успешных людей я не встречала нытиков
    Барбара Коркоран

  4. #4
    Пользователь
    Регистрация
    28.11.2013
    Адрес
    Уфа
    Сообщений
    29

    По умолчанию

    Цитата Сообщение от capzap Посмотреть сообщение
    ну и зачем было выкладывать то непотребство из шестого поста, если можете нормально писать?
    А по этому коду, используется
    SysSockCreate
    SysSockSendTo
    SysSockRecvFrom
    зачем остальные функции?
    "Непотребство" из 6 поста доказывало неработоспособность блокирующего режима. Со своей задачей вполне справлялось.
    Мой ntp-клиент работает именно потому, что не использует косячных функций. С udp-сокетами дела обстоят более-менее прилично.

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

    По умолчанию

    я как раз про программный, то что выкладывал здесь на форуме, правда это было по UDP с вейнтековской панелью, зато используется на производстве уже несколько лет, а не чисто потестить
    Bad programmers worry about the code. Good programmers worry about data structures and their relationships

    среди успешных людей я не встречала нытиков
    Барбара Коркоран

  6. #6
    Пользователь
    Регистрация
    28.11.2013
    Адрес
    Уфа
    Сообщений
    29

    По умолчанию

    Цитата Сообщение от Валенок Посмотреть сообщение
    Вот щас повозился с tcp. Программный tcp-сервер на плк (30-МО2) ответил делфийскому стандартному tcp-клиенту на пк..
    У М02 прошивка другая.

  7. #7
    Пользователь
    Регистрация
    28.11.2013
    Адрес
    Уфа
    Сообщений
    29

    По умолчанию

    Я и задаю вопрос: "Доколе?!" А в ответ тишина.. Пардон, ответ был "никто ничего "исправлять" не будет". Потом его, правда, стыдливо потерли.
    Я с косяками "Овена" разобрался и по мере возможности могу их обходить, но это вот все нифига не нормально. Разговоры про то, что у всех косяки мне тоже абсолютно непонятны.

    А более всего непонятно, почему бы эти косяки не исправить. При наличии исходников прошивки эту работу можно выполнить максимум за день. Во всяком случае, я за день точно исправил бы большую их часть. Даже впервые увидев эти исходники.. Что уж и говорить о разработчиках? Для них это исправление вряд ли заняло бы более 15 минут. И?
    Последний раз редактировалось ufaman; 11.11.2018 в 13:37.

  8. #8
    Пользователь
    Регистрация
    28.11.2013
    Адрес
    Уфа
    Сообщений
    29

    По умолчанию

    Может, там и нет такого безобразия. Кто его знает?

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

    По умолчанию

    Цитата Сообщение от ufaman Посмотреть сообщение
    Может, там и нет такого безобразия. Кто его знает?
    Овен же......
    Последний раз редактировалось Валенок; 25.02.2019 в 18:48.

  10. #10
    Пользователь
    Регистрация
    28.11.2013
    Адрес
    Уфа
    Сообщений
    29

    По умолчанию

    Долго тестировали? У меня тоже сервер будто бы работал. Но обычно не более суток. И да - про М02 ничего сказать не могу. Другой процессор, другая прошивка.

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

Похожие темы

  1. Продам ПЛК OWEN + немного обвязки
    от bodjaka в разделе Трёп (Курилка)
    Ответов: 15
    Последнее сообщение: 06.11.2015, 11:14
  2. Макросы -- объясните немного....
    от tigdin в разделе Программируемые реле
    Ответов: 20
    Последнее сообщение: 28.08.2014, 14:18
  3. SysLibSockets
    от mettled в разделе ПЛК1хх
    Ответов: 36
    Последнее сообщение: 20.01.2014, 14:23
  4. Немного про библиотеку SyslibTime
    от Ильнур в разделе ПЛК1хх
    Ответов: 10
    Последнее сообщение: 04.11.2012, 23:19
  5. немного теории
    от Safron в разделе ПЛК1хх
    Ответов: 2
    Последнее сообщение: 28.01.2010, 21:45

Ваши права

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