Страница 2 из 2 ПерваяПервая 12
Показано с 11 по 13 из 13

Тема: ФБ MB_WR_COILS библиотеки ModBus.lib

  1. #11
    Пользователь Аватар для mummy117
    Регистрация
    16.05.2015
    Адрес
    Харьков
    Сообщений
    31

    По умолчанию

    Снова вопросы про общение ПЛК63 с панелью ИП320.
    Биты записывать научился, а вот читать как?
    Задача прочитать с панели битовые уставки (в даном случае 4 бита). С самой функуией вроде вопросов нет.
    Я не понимаю как работать с масивами, как с масива взять один бит если сам масив байтовый?
    Вот код:

    A:=BOOL;
    B:=BOOL;
    C:=BOOL;
    D:=BOOL;

    get_coils(
    Enable:=enabl ,
    Mode:=MB_RTU ,
    DevAddr:=1 ,
    FirstAddr:=20 ,
    Quantity:=4,
    ComHandle:=Settings.Port ,
    TimeOut:=TimeOut ,
    Buffer:=Buffer,
    Complete=>cmpl ,
    Exception=>err ,
    ByteCnt=>DataSize );

    IF cmpl THEN
    IF err=0 THEN
    Что писать тут что бы получить значение бит????
    A:=??????
    B:=??????
    C:=??????
    D:=??????

    END_IF
    master1:=0;
    END_IF

  2. #12
    Пользователь Аватар для petera
    Регистрация
    06.05.2011
    Адрес
    Минск
    Сообщений
    3,851

    По умолчанию

    Цитата Сообщение от mummy117 Посмотреть сообщение
    Снова вопросы про общение ПЛК63 с панелью ИП320.
    Биты записывать научился, а вот читать как?
    Задача прочитать с панели битовые уставки (в даном случае 4 бита). С самой функуией вроде вопросов нет.
    Я не понимаю как работать с масивами, как с масива взять один бит если сам масив байтовый?
    Вот код:

    A:=BOOL;
    B:=BOOL;
    C:=BOOL;
    D:=BOOL;

    get_coils(
    Enable:=enabl ,
    Mode:=MB_RTU ,
    DevAddr:=1 ,
    FirstAddr:=20 ,
    Quantity:=4,
    ComHandle:=Settings.Port ,
    TimeOut:=TimeOut ,
    Buffer:=Buffer,
    Complete=>cmpl ,
    Exception=>err ,
    ByteCnt=>DataSize );

    IF cmpl THEN
    IF err=0 THEN
    Что писать тут что бы получить значение бит????
    A:=??????
    B:=??????
    C:=??????
    D:=??????

    END_IF
    master1:=0;
    END_IF
    Cм. конец поста #9 http://www.owen.ru/forum/showthread....l=1#post185515
    Там показано как упаковать биты по байтам массива
    ЗЫ. Ну или так для наглядности
    Buffer_yat[0]:=PACK(1,0,1,0,1,0,1,0); (*Для первых восьми Coils*)
    и для последующих COILs
    Buffer_yat[1]:=PACK(1,0,1,0,1,0,1,0);
    Buffer_yat[2]:=PACK(1,0,1,0,1,0,1,0);
    и т.д до 2000 шт. Coils по 8 в каждом Buffer_yat[ххх]
    Распаковать байты массива на отдельные биты можно ФБ UNPAC
    Код:
    VAR
        Buffer: ARRAY [0..255] OF BYTE;
        Prishlo: UNPACK;
        MyBit_0: BOOL;
        MyBit_1: BOOL;
        MyBit_2: BOOL;
        MyBit_3: BOOL;
        MyBit_4: BOOL;
        MyBit_5: BOOL;
        MyBit_6: BOOL;
        MyBit_7: BOOL;
        MyBit_8: BOOL;
        MyBit_9: BOOL;
        MyBit_10: BOOL;
        MyBit_11: BOOL;
        MyBit_12: BOOL;
        MyBit_13: BOOL;
        MyBit_14: BOOL;
        MyBit_15: BOOL;
    END_VAR
    
    (*Первй байт буфера*)
    Prishlo(
        B:=Buffer[0] ,
        B0=> MyBit_0,
        B1=> MyBit_1,
        B2=> MyBit_2,
        B3=> MyBit_3,
        B4=> MyBit_4,
        B5=> MyBit_5,
        B6=> MyBit_6,
        B7=> MyBit_7);
    (*Второй байт буфера*)
    Prishlo(
        B:=Buffer[1] ,
        B0=> MyBit_8,
        B1=> MyBit_9,
        B2=> MyBit_10,
        B3=> MyBit_11,
        B4=> MyBit_12,
        B5=> MyBit_13,
        B6=> MyBit_14,
        B7=> MyBit_15);
    (* и так далее*)
    MyBit_nn - полученные биты, имена придумаете/подставите свои
    Если только четыре бита нужно из буфера
    Код:
    VAR
        Buffer: ARRAY [0..255] OF BYTE;
        Prishlo: UNPACK;
        A: BOOL;
        B: BOOL;
        C: BOOL;
        D: BOOL;
    END_VAR
    
    (*Первй байт буфера*)
    Prishlo(
        B:=Buffer[0] ,
        B0=> A,
        B1=> B,
        B2=> C,
        B3=> D);
    ЗЫ. Или как запаковывали через битовую адресацию, так и распаковываем
    Код:
    VAR
        Buffer: ARRAY [0..255] OF BYTE;
        A: BOOL;
        B: BOOL;
        C: BOOL;
        D: BOOL;
    END_VAR
    
    (*Первй байт буфера*)
    A:=Buffer[0].0;
    B:=Buffer[0].1;
    C:=Buffer[0].2;
    D:=Buffer[0].3;
    Последний раз редактировалось petera; 11.11.2015 в 15:40.
    Мой канал на ютубе
    https://www.youtube.com/c/ПетрАртюков
    Библиотека ГМ для СП300
    https://disk.yandex.com/d/gHLMhLi8x1_HBg

  3. #13
    Пользователь Аватар для mummy117
    Регистрация
    16.05.2015
    Адрес
    Харьков
    Сообщений
    31

    По умолчанию

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

Страница 2 из 2 ПерваяПервая 12

Похожие темы

  1. PID_FUNCTION библиотеки PID_Regulators.lib
    от nvtech в разделе ПЛК1хх
    Ответов: 24
    Последнее сообщение: 04.08.2022, 08:43
  2. Библиотеки MODBUS.LIB и OWENNET.LIB
    от desperadoes в разделе ПЛК1хх
    Ответов: 7
    Последнее сообщение: 30.01.2014, 20:15
  3. Эксплуатация библиотеки "ModBus.lib"
    от Gans в разделе ПЛК1хх
    Ответов: 8
    Последнее сообщение: 04.03.2012, 11:55
  4. Свои библиотеки CoDeSys .lib
    от Gus в разделе ПЛК1хх
    Ответов: 4
    Последнее сообщение: 02.03.2009, 18:18
  5. PID_Regulators.lib - какой ФБ использовать?
    от Ден в разделе ПЛК1хх
    Ответов: 0
    Последнее сообщение: 28.05.2008, 07:19

Ваши права

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