Страница 4 из 5 ПерваяПервая ... 2345 ПоследняяПоследняя
Показано с 31 по 40 из 41

Тема: ПЛК для обмена 700 словами по Ethernet UDP

  1. #31

    По умолчанию

    UdpOpenSend(Receive)Socket наверное?
    Тролль-наседка, добрый, нежный и ласковый

  2. #32

    По умолчанию

    UDPopenReceiveSocket.png
    Я нажимаю на нее, и показывает его только блоком. Может быть возможно как-то включить детализацию кода этой функции?
    Но на англоязычном форуме КДС, я находил примеры. И там эта функция была расписана так:

    diSocket:=SysSockCreate(SOCKET_AF_INET, SOCKET_DGRAM, 0); (* открыли сокет типа Datagram для UDP по умолчанию 0*)
    sa.sin_family:=SOCKET_AF_INET;
    sa.sin_addr:=SOCKET_INADDR_ANY; (* с любого адреса получать данные *)
    sa.sin_port:=SysSockHtons(iPort);
    bResult:=SysSockBind(diSocket, ADR(sa), SIZEOF(sa)); (*завязались *)
    IF bResult = FALSE THEN (*если неудачно то diSocket:= -1 ну или SOCKET_INVALID*)
    diSocket:=SOCKET_INVALID;
    END_IF
    UdpOpenReceiveSocket:=diSocket;

    Я так и создаю сокет для UDP

  3. #33

    По умолчанию

    Так саму библиотеку загрузите как проект
    Тролль-наседка, добрый, нежный и ласковый

  4. #34

    По умолчанию

    Цитата Сообщение от Филоненко Владислав Посмотреть сообщение
    Ещё есть нюанс с разворотом адресов и номера порта.
    пример правильной работы с UDP смотрим в NetVarUDP.lib
    Хорошо, будем последовательными. Отправка из библиотеки NetVarUdp. Выглядит следующим кодом (без всяких подфункций, все вытащим в один код монолитный)
    Положительно то, что на ПК (терминал) пришло сообщение, наконец-то. Но это если отключить GetIPAddress и вещать BROADCAST на всех кто слышит. Если stIPAddress я объявлял STRING:='10.0.6.11' так было в примере одной библиотеки иностранной, ну и в NetVar написано мол - stIPAddress:STRING;(* IP-address or name *) . Но Тогда он не передает сообщение.
    Так как Вы писали "нюанс с разворотом IP адресов" , прошу пояснить чуть чуть подробнее. Как задать здесь правильно IP?
    И почему в этой библиотеке SysOption был отключен (* *)? В прочем работает как с ней так и без нее.
    IF start THEN
    IF HandleSocket<0 THEN
    HandleSocket:=SysSockCreate(SOCKET_AF_INET, SOCKET_DGRAM, 0);
    bOption:=TRUE;
    (*SysSockSetOption(diSocket, SOCKET_SOL, SOCKET_SO_BROADCAST, ADR(bOption), SIZEOF(bOption));*)
    sa.sin_family:=SOCKET_AF_INET;
    sa.sin_addr:=SOCKET_INADDR_ANY;
    sa.sin_port:=SysSockHtons(iPort);
    bResult:=SysSockBind(HandleSocket, ADR(sa), SIZEOF(sa));
    IF bResult = FALSE THEN
    diSocket:=SOCKET_INVALID;
    END_IF

    ELSE
    sa.sin_family:=SOCKET_AF_INET;
    (*IF stIPAddress <> '' THEN sa.sin_addr:=GetIPAddress(stIPAddress);
    ELSE*)
    sa.sin_addr:=SOCKET_INADDR_BROADCAST;
    (*END_IF*)
    sa.sin_port:=SysSockHtons(iPort);
    numberofbyte:=SysSockSendTo(HandleSocket, ADR(MessageToPC), SIZEOF(MessageToPC), 0, ADR(sa), SIZEOF(sa));

    IF numberOfByte>0 AND marker=0 THEN
    marker := numberofByte;
    SysSockClose(HandleSocket);
    END_IF
    IF numberOfByte>0 THEN
    marker := numberofByte;
    SysSockClose(HandleSocket);
    END_IF
    END_IF

    ELSE
    IF HandleSocket<>SOCKET_INVALID THEN
    SysSockClose(HandleSocket);
    HandleSocket:=SOCKET_INVALID;
    MessageFromPC:=Zero;
    END_IF
    END_IF

  5. #35

    По умолчанию

    1, IP задаём как DWORD
    2. SOCKET_SO_BROADCAST - он и так включён по умолчанию вот и работает
    3. GetIPAddress - это что за функция?
    Мы пользуемся SysSockGetHostByName(), куда можно подавать как IP в символьном виде "10.2.1.1", так и имя "my_own_pupkin.server.net", если оно доступно через DNS

    Возвращает 1-й IP из ответа DNS сервера или 0 если не получен ответ.
    P.S. IP DNS серверов должны быть прописаны в local_adress.dat (ну или включён режим DHCP), иначе не работает
    Последний раз редактировалось Филоненко Владислав; 01.02.2017 в 15:20.
    Тролль-наседка, добрый, нежный и ласковый

  6. #36

    По умолчанию

    Правильно ли я понял ?
    1. IPadr: DWORD:=16#A0006B; (*10.0.6.11*)
    2. Как Вы научили открыл NetVarUDP_lib_V23 и там в FUN UdpSendData был этот GetIPaddress.
    diIPAddress := SysSockInetAddr(stIPAddress);
    IF (stIPAddress = '255.255.255.255') THEN
    (*Avoid name-resolution on our default broadcast address.*)
    GetIPAddress:=diIPAddress;
    RETURN ;
    END_IF
    IF diIPAddress = SOCKET_INADDR_NONE THEN
    diIPAddress := SysSockGetHostByName(ADR(stIPAddress));
    END_IF
    GetIPAddress:=diIPAddress; Такой код
    3. sa.sin_addr:=SysSockGetHostByName(IPadr);
    символьный вид это так? sa.sin_addr:=SysSockGetHostByName(10.0.6.11); но это не компилируется.

  7. #37

    По умолчанию

    GetIPaddress - это внутренняя функция библиотеки. Ишак не мой
    Символьное - это "10.0.6.11"
    Тролль-наседка, добрый, нежный и ласковый

  8. #38

    По умолчанию

    Я, прошу прощенья, за глупые вопросы, но так не компилируется
    sa.sin_addr:=SysSockGetHostByName("10.0.6.11");

    Ошибка 4268: PLC_PRG (16): Необходимо выражение

    Я так понял, IP DNS серверов должны быть прописаны в local_adress.dat только в случае указания в стиле имени "my_own_pupkin.server.net"

    p.s. из любопытства фраза "Ишак не мой" из какого фильма, что-то знакомое а вспомнить не могу. :-)

  9. #39

    По умолчанию

    ошибся, должно быть 'string'

    P.S. Ходжа Нассредин бессмертен, однако.
    Тролль-наседка, добрый, нежный и ласковый

  10. #40

    По умолчанию

    удалось прописать string'ом через указатель
    sa.sin_addr:=SysSockGetHostByName(ADR(stIPAddress) ); но на терминал ничего не приходит.
    меняю на
    sa.sin_addr:=SOCKET_INADDR_BROADCAST; посылка приходит на терминал (при прочих равных условиях).

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

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

Похожие темы

  1. Преобразователи 232-Ethernet, 485-Ethernet
    от and909 в разделе Разработки
    Ответов: 23
    Последнее сообщение: 13.04.2023, 00:21
  2. Настройка обмена с МСД 200
    от Евгений Гераськин в разделе Сетевые технологии
    Ответов: 6
    Последнее сообщение: 22.12.2016, 17:01
  3. Скорость обмена ИП-320
    от desperadoes в разделе Панели оператора (HMI)
    Ответов: 21
    Последнее сообщение: 15.04.2013, 10:52
  4. Возможность обмена ПКП
    от o_nik в разделе Подбор Оборудования
    Ответов: 1
    Последнее сообщение: 20.08.2009, 09:45
  5. Время обмена
    от Трефилов в разделе ПЛК1хх
    Ответов: 9
    Последнее сообщение: 20.07.2009, 07:43

Ваши права

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