Страница 1 из 2 12 ПоследняяПоследняя
Показано с 1 по 10 из 17

Тема: Использование OwenNet и библиотеки SysCom

  1. #1

    Post Использование OwenNet и библиотеки SysCom

    Привет всем, создал эту тему потому, что пока не удаётся разобраться как пользоваться библиотекой SysCom, конечно тот, кто использовал раньше SysLibCom уже, наверно, разобрался, но я новичок, и мне с места в карьер не прыгнуть. Нужен пример, как c помощью библиотеки SysCom её функций: SysComOpen, SysComRead, SysComWrite, SysComClose считать переменную на Slave устройстве, и записать значение через интерфейс rs-485 потокол Owen ModBus. В частности, у меня Мастер - СПК107, а слейв ПЛК110-60. На форуме ничего не нашёл. Внятных примеров ни встречал. Мне нужна просто функция считал, или считал-записал. Код, передранный из Codesys 2.3, не выкладывать. Нужен рабочий пример чтения-записи именно в среде CodeSys 3.5, через выше перечисленные функции.
    Последний раз редактировалось MasterDarius; 05.05.2016 в 16:55.

  2. #2
    Пользователь Аватар для capzap
    Регистрация
    25.02.2011
    Адрес
    Киров
    Сообщений
    10,641
    Bad programmers worry about the code. Good programmers worry about data structures and their relationships

  3. #3

    По умолчанию

    А где в этом проекте настроить, открыть и закрыть порт? Я скопировал, выкинул лишнее и ничего не осталось. Естественно, ничего не работает. Ковыряюсь. Мне нужна функция на входе номер устройства и индекс(сдвиг), на выходе WORD или Read переменная. Это как раз то, про что я и говорил, примеры есть, а не выходит.

    У меня через конфигуратор (устройства) всё работает, мне через библиотеки функций надо получить то же самое.
    Последний раз редактировалось MasterDarius; 05.05.2016 в 18:36.

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

    По умолчанию

    и что Вы понимаете под лишним? Первую строчку выкинули?
    Bad programmers worry about the code. Good programmers worry about data structures and their relationships

  5. #5

    По умолчанию

    То что красным, это ведь к чтению-записи в порт не относится:

    ors(enable:=flag);

    IF tik.Q THEN
    state:=0;
    otvet.ref:=ROR(512,8);
    otvet.offset:=ROR(2,8);
    otvet.crc:=_CRC(IN:=ADR(otvet), N:=6);
    END_IF;
    tik(IN:=ors.Done AND NOT tik.Q, PT:=T#2S);
    CASE state OF
    0:

    bWrite:=SysComWrite(ors.Handle,ADR(otvet),SIZEOF(o tvet),TimeOut,ADR(Err));
    IF bWrite = SIZEOF(otvet) THEN
    state:=1;
    END_IF;
    1:

    bRead := SysComRead(hCom:=ors.Handle,pbyBuffer:=ADR(BufBR[1]),ulSize:=8,ulTimeout:=TimeOut,pResult:=ADR(Err));

    IF bRead>0 THEN
    ;
    END_IF;
    ELSE ;
    END_CASE;



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

    По умолчанию

    очень даже нужные строки кода, первое выделение это период запроса

    второе выделение, это проверка что все данные отправлены и только тогда переходим к чтению ответа

    ну и третье выделение, это ожидание хоть какого нибудь поступления байт из соединения, вопрос был в организации связи в этом примере всё это есть, а так вот
    немного расширенный код:
    VAR
    flag : BOOL;
    bRead : UDINT;
    bWrite : UDINT;
    state : UINT;
    ors : ComConn;
    Err : SysCom.RTS_IEC_RESULT;
    TimeOut : COM_Timeout :=100;
    BufBR : ARRAY [1..1024] OF BYTE;
    otvet : REQUEST_RHR := (adr_slave:=16,cod_fun:=3);
    tik : TON;
    uno : REAL;
    duo : ARRAY[0..3] OF BYTE;
    ptr : POINTER TO REAL;
    tak : TON;
    texts : STRING;
    END_VAR


    ors(enable:=flag);
    IF tik.Q THEN
    state:=0; (*в каждом запросе устанавливаем переменную на кейс отправки запроса*)
    otvet.ref:=ROR(4,8); (*начальный адрес*)
    otvet.offset:=ROR(2,8); (*количчество запрашиваемых регистров*)
    otvet.crc:=_CRC(IN:=ADR(otvet), N:=6); (* формирование контрольной суммы для протокола модбас*)
    END_IF;
    tik(IN:=ors.Done AND NOT tik.Q, PT:=T#2S); (* запуск периодического запроса если соединение установлено*)
    CASE state OF
    0:
    bWrite:=SysComWrite(ors.Handle,ADR(otvet),SIZEOF(o tvet),TimeOut,ADR(Err));
    IF bWrite = SIZEOF(otvet) THEN (*здесь можно обойтись и без условия, обычно отправляется за один цикл плк*)
    state:=1;
    END_IF;
    1:
    bRead := SysComRead(hCom:=ors.Handle,pbyBuffer:=ADR(BufBR[1]),ulSize:=8,ulTimeout:=TimeOut,pResult:=ADR(Err));
    IF bRead>0 THEN (* если пришли байты, собираем для получения флоата*)
    duo[0]:=BufBR[7];
    duo[1]:=BufBR[6];
    duo[2]:=BufBR[5];
    duo[3]:=BufBR[4];
    ptr:=ADR(duo);
    uno:=ptr^;
    END_IF;
    ELSE ;
    END_CASE;
    tak(IN:=NOT tak.Q, PT:=T#30S);
    IF tak.Q THEN (*пишем в файл на флешку*)
    texts:=CONCAT('echo "',REAL_TO_STRING(uno));
    texts:=CONCAT(texts,';`date`" >>/mnt/ufs/media/sda1/archiv.log');
    SysExecute(sys_command:=texts);
    END_IF;
    Bad programmers worry about the code. Good programmers worry about data structures and their relationships

  7. #7

    По умолчанию

    Всё понятно. У вас уровень программирования просто недосягаемый. Начинающему программисту разобраться до конца просто не реально. Я, не то что пытаюсь что-то изменить, но хотя бы откомпилировать что есть. Я даже не могу разобраться где здесь адрес устройства, а где смещение. Жуть какая, я вообще подумал, что первая часть кода, это обрывок к какому-то таймеру относится. Может подскажете, какие библиотеки подключить чтобы хоть откомпилировать. Долго я буду вкуривать.
    У меня вот что выдаёт:
    Pic1.png

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

    По умолчанию

    в моем проекте перейдите на вкладку POU, вместо вкладки Устройства и увидите не доостающие ФБ и структура. Адрес устройства у меня фиксированный и он находится в объявлениях, ищите ключевое слово adr_slave
    Bad programmers worry about the code. Good programmers worry about data structures and their relationships

  9. #9

    По умолчанию

    Всё понятно, я лузер. Теперь стало понятнее что к чему, однако всё же для получения хоть какого-то результата, хотелось бы просто откомпилировать ваш проект, я подключил все библиотеки, после этого он мне выдал только одну ошибку, что нет устройства, я установил таргет файл для плк30х со страницы и он мне выдал 102 ошибки
    Pic2.png
    все ошибки однотипные, похоже не тот таргет вы можете выложить тот старый, который вы использовали?

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

    По умолчанию

    по моему примеру, лучше создайте свой проект с панелью и скопируйте из моего все ПОУ, структуру и библиотеки которые попросит компилятор

    а по уму лучше прочитать эту тему http://www.owen.ru/forum/showthread.php?t=23897 в спойлере Скачать документ СПК. Modbus описана работа как через конфигуратор так и через разные библиотеки, Вам же модбас нужен насколько я понял
    Bad programmers worry about the code. Good programmers worry about data structures and their relationships

Страница 1 из 2 12 ПоследняяПоследняя

Похожие темы

  1. Ответов: 8
    Последнее сообщение: 05.05.2017, 14:37
  2. OwenNet.Lib обработка ошибок
    от Логачев Николай в разделе Помощь Разработчикам
    Ответов: 0
    Последнее сообщение: 02.03.2014, 11:44
  3. Библиотеки MODBUS.LIB и OWENNET.LIB
    от desperadoes в разделе ПЛК1хх
    Ответов: 7
    Последнее сообщение: 30.01.2014, 20:15
  4. Библиотека OwenNet.lib
    от !nferno в разделе ПЛК1хх
    Ответов: 22
    Последнее сообщение: 23.09.2010, 13:52
  5. помогите: использование библиотеки SysLibSockets.lib
    от незарегистрированный в разделе ПЛК1хх
    Ответов: 16
    Последнее сообщение: 26.11.2007, 22:19

Метки этой темы

Ваши права

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