Страница 5 из 7 ПерваяПервая ... 34567 ПоследняяПоследняя
Показано с 41 по 50 из 73

Тема: ПЛК 154 + ModBus проблема

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

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

    По умолчанию

    Может устройство не отдает группой. Если в MS есть вариант настроить Discret Input скажем те же 8 бит, чтобы повторить запрос как с ПЛК то попробуйте настроить. Если получите ошибку, ну значит отключайте Конфигурацию и пробуйте библиотеки.

  2. #2
    Пользователь Аватар для Пьер
    Регистрация
    26.01.2011
    Адрес
    Земля
    Сообщений
    519

    По умолчанию

    Цитата Сообщение от melky Посмотреть сообщение
    Может устройство не отдает группой. Если в MS есть вариант настроить Discret Input скажем те же 8 бит, чтобы повторить запрос как с ПЛК то попробуйте настроить. Если получите ошибку, ну значит отключайте Конфигурацию и пробуйте библиотеки.
    Пример для функции 02 не могу найти, чтобы переставил байты и биты, чтобы результат получить правильный.
    Не зная броду, не суйся в воду. (Пословица.)
    Век живи, век учись(а умрешь дураком).
    Опыт растет прямо пропорционально выведенному из строя оборудованию.

  3. #3
    Пользователь Аватар для Пьер
    Регистрация
    26.01.2011
    Адрес
    Земля
    Сообщений
    519

    По умолчанию

    Цитата Сообщение от Пьер Посмотреть сообщение
    Пример для функции 02 не могу найти, чтобы переставил байты и биты, чтобы результат получить правильный.
    ТУТ дискретные инпутсы только по битно считываются.
    Изображения Изображения
    Не зная броду, не суйся в воду. (Пословица.)
    Век живи, век учись(а умрешь дураком).
    Опыт растет прямо пропорционально выведенному из строя оборудованию.

  4. #4

    По умолчанию

    Лучший способ выяснить правду, как и что надо считывать, программа Owen OPC Server, ставиться за 2 мин. на комп. Любой бит и регистр можно настроить и проверить. Чтение и запись, любая функция, RS485 через переходник типа АС-4, есть и TCP https://owen.ru/product/new_opc_server 1 ОПС сервер.jpg
    Последний раз редактировалось kondor3000; 08.10.2022 в 21:29.

  5. #5
    Пользователь Аватар для Пьер
    Регистрация
    26.01.2011
    Адрес
    Земля
    Сообщений
    519

    По умолчанию

    Цитата Сообщение от kondor3000 Посмотреть сообщение
    Лучший способ выяснить правду, как и что надо считывать, программа Owen OPC Server, ставиться за 2 мин. на комп. Любой бит и регистр можно настроить и проверить. Чтение и запись, любая функция, RS485 через переходник типа АС-4, есть и TCP https://owen.ru/product/new_opc_server 1 ОПС сервер.jpg
    Считывает по порядку. Но это не байтом целиком. 29 бит отдельно отлично считал.
    Изображения Изображения
    Не зная броду, не суйся в воду. (Пословица.)
    Век живи, век учись(а умрешь дураком).
    Опыт растет прямо пропорционально выведенному из строя оборудованию.

  6. #6
    Пользователь Аватар для Пьер
    Регистрация
    26.01.2011
    Адрес
    Земля
    Сообщений
    519

    По умолчанию

    Цитата Сообщение от kondor3000 Посмотреть сообщение
    Лучший способ выяснить правду, как и что надо считывать, программа Owen OPC Server, ставиться за 2 мин. на комп. Любой бит и регистр можно настроить и проверить. Чтение и запись, любая функция, RS485 через переходник типа АС-4, есть и TCP https://owen.ru/product/new_opc_server 1 ОПС сервер.jpg
    Можете проверить программу? Копирую сразу как есть.
    Переменные:
    Скрытый текст:

    PROGRAM PLC_PRG
    VAR
    RHR: MB_RD_HOLD_REGS; (*ôóíêöèÿ 03 - ÷òåíèå ïàðàìåòð&# 224; òèïà INT*)
    RIR:MB_RD_INPUTS; (*ôóíêöèÿ 02 - ÷òåíèå ñòàòóñà äèñêð âõ.*)
    RCoils:MB_RD_COILS;
    WrR: MB_WR_SNG_REG; (*ôóíêöèÿ 6 - çàïèñü åäåíè÷íî&# 227;î ðåãèñòð&#224 ;*)
    WrCoil: MB_WR_SNG_COIL; (*ôóíêöèÿ 5 - çàïèñü åäåíè÷íî&# 227;î äèñêð âõ. áèòà*)
    RIRs:MB_RD_INP_REGS;

    Buffer1: ARRAY[0..255] OF BYTE; (* áàéòîâû&#233 ; áóôåð äàííûõ *)
    Buffer2: ARRAY[0..255] OF BYTE; (* áàéòîâû&#233 ; áóôåð äàííûõ *)
    Buffer3: ARRAY[0..255] OF BYTE; (* áàéòîâû&#233 ; áóôåð äàííûõ *)
    Buffer4: ARRAY[0..255] OF BYTE; (* áàéòîâû&#233 ; áóôåð äàííûõ *)
    Buffer10: ARRAY[0..255] OF BYTE; (* áàéòîâû&#233 ; áóôåð äàííûõ *)


    cmpl: BOOL; (*ïðèçíàê çàâåðøåí&# 237;îñòè ðàáîòû ôóíêöèè*)
    port_opened: BYTE := 0; (*ðåçóëüòà ò îòêðûòè&#255 ; ïîðòà*)
    Settings:COMSETTINGS; (* íàñòðîéê&# 232; ïîñëåäîâ&# 224;òåëüíîã&#23 8; ïîðòà *)
    com_num: PORTS:=0; (*0 - 485-1
    1 - 232 - COM1
    2 - 485-2 - COM2
    4 - DBGU - COM4 *)


    enable: BOOL; (*ñîñòîÿíè å ðàáîòû áëîêà*)
    err: INT; (*íîìåð îøèáêè*)
    TimeOut: TIME:=T#500ms; (*òàéìàóò*)
    DataSize: WORD; (*êîë-âî ñ÷èòàííû&# 245; áàéòîâ *)
    ptr_byte:POINTER TO BYTE; (*óêàçàòåë ü íà òèï byte*)
    COM_SERVICE1: COM_SERVICE;
    state: WORD := 0; (*ñîñòîÿíè å*)


    (*ñ÷èòàííî å çíà÷åíè&#229 ;*)
    status2:WORD;
    real2: REAL;
    real3: REAL;
    status3: WORD;
    real4: REAL;
    status4: WORD;
    real5: REAL;
    status5: WORD;
    real6: REAL;
    status6: WORD;
    real7: REAL;
    status7: WORD;
    real8: REAL;
    status8: WORD;
    wrd1: WORD:=1;
    wrd_rele_0:WORD:=0;
    t21: WORD := 0; (* *)
    t12: WORD; (* *)
    t14: WORD; (* *)
    t15: WORD; (* *)
    t17: WORD; (* *)
    t16: WORD; (* *)
    t18: WORD; (* *)
    t19: WORD; (* *)
    t20: WORD; (* *)
    t25: WORD; (* *)
    t13: WORD := 0;(* *)
    t22: WORD; (* *)
    t22_2: WORD := 0; (* *)
    t24: WORD := 0; (* *)
    t24_2: WORD := 0; (* *)
    wrd_out_tok: WORD := 0;
    t30: WORD;
    count_err_30: WORD;
    RT_t1:R_TRIG;
    In_1: DWORD;
    Sh_1:BOOL;
    Sh_2:BOOL;
    Sh_3:BOOL;
    Sh_4:BOOL;
    V1:WORD;
    V2:WORD;
    V3:WORD;

    enable2: BOOL;
    enable3: BOOL;
    enable4: BOOL;
    enable5: BOOL;
    ch1: WORD;
    reg1: WORD;
    rc1: WORD;
    rc2: WORD;
    rr1: WORD;
    rr2: BYTE;
    rir1: WORD;
    rir2: WORD;
    enable6: BOOL;
    cmpl1: BOOL;
    err1: BYTE;
    ss:BOOL;
    x1: WORD;
    x2: WORD;
    x3: WORD;
    END_VAR


    Программа:
    Скрытый текст:


    IF port_opened=0 THEN
    Settings.Port:=com_num; (*????? COM-????? RS485*)
    Settings.dwBaudRate:=9600; (*????????*)
    Settings.byParity:=0;
    Settings.dwTimeout:=0;
    Settings.byStopBits:=2;
    Settings.dwBufferSize:=0;
    Settings.dwScan:=0;
    END_IF

    COM_SERVICE1(Enable:=(port_opened=0) , Settings:=Settings , Task:=OPEN_TSK );
    (*???? COM-???? ??????, ?? ????????? ? ?????? ? ???????? ?????? *)
    IF COM_SERVICE1.ready THEN
    port_opened:=2;
    END_IF

    (*

    (*RCoils(
    Enable:=enable , (* ?????????? ?????? ????? *)
    Mode:=MB_RTU , (*????? ????????*)
    DevAddr:=1 , (*????? ?1 *)
    FirstAddr:=rc1 , (*????? ????????*)
    Quantity:=rc2 , (*?????????? ?????????*)
    ComHandle:=Settings.Port , (*????? COM-?????*)
    TimeOut:=TimeOut , (*??????? *)
    Buffer:=Buffer1 , (* ????? ?????? *)
    Complete=>cmpl , (* ??????? ?????????? ???????? *)
    Exception=>err , (* ??????? ?????? ?????????? ????????? MODBUS ??? ??????:0x00 – ?????? ??? ?????????? ?? ??????????, 0xFE – ?????????? ?????? ???,0xFF – ?????? ???????? *)
    ByteCnt=>DataSize ); *) (*???-?? ????????? ?????? *)
    RIRs(
    Enable:=enable3 , (* ?????????? ?????? ????? *)
    Mode:=MB_RTU , (*????? ????????*)
    DevAddr:=1 , (*????? ?1 *)
    FirstAddr:=rr1 , (*????? ????????*)
    Quantity:=rr2 , (*?????????? ?????????*)
    ComHandle:=Settings.Port , (*????? COM-?????*)
    TimeOut:=TimeOut , (*??????? *)
    Buffer:=Buffer1 , (* ????? ?????? *)
    Complete=>cmpl , (* ??????? ?????????? ???????? *)
    Exception=>err , (* ??????? ?????? ?????????? ????????? MODBUS ??? ??????:0x00 – ?????? ??? ?????????? ?? ??????????, 0xFE – ?????????? ?????? ???,0xFF – ?????? ???????? *)
    ByteCnt=>DataSize ); ;
    RT_t1(CLK:=RIRs.Complete , Q=> );
    IF RT_t1.Q THEN
    t24:=Buffer1[4]+Buffer1[5];
    END_IF

    IF RCoils.Complete THEN
    v1:=1;
    END_IF

    WrCoil(
    Enable:=enable2 ,
    Mode:=MB_RTU ,
    DevAddr:=1 ,
    CoilAddr:=V2 ,
    Value:=Sh_1 ,
    ComHandle:=Settings.Port ,
    TimeOut:=TimeOut ,
    Complete=>cmpl ,
    Exception=>err );
    WrR(
    Enable:=enable4 ,
    Mode:=MB_RTU ,
    DevAddr:=1 ,
    RegAddr:=reg1 ,
    Value:=ch1 ,
    ComHandle:=Settings.Port ,
    TimeOut:=TimeOut ,
    Complete=>cmpl ,
    Exception=>err );

    (*RhR(
    Enable:=enable5 , (* ?????????? ?????? ????? *)
    Mode:=MB_RTU , (*????? ????????*)
    DevAddr:=1 , (*?????*)
    FirstAddr:=3 , (*????? ????????*)
    Quantity:=1 , (*?????????? ?????????*)
    ComHandle:=Settings.Port , (*????? COM-?????*)
    TimeOut:=TimeOut , (*??????? *)
    Buffer:=Buffer2 , (* ????? ?????? *)
    Complete=>cmpl , (*??????? ?????????? ???????? *)
    Exception=>err , (* ??????? ?????? ?????????? ????????? MODBUS ??? ??????:0x00 – ?????? ??? ?????????? ?? ??????????, 0xFE – ?????????? ?????? ???,0xFF – ?????? ???????? *)
    ByteCnt=>DataSize );*)
    *)
    IF port_opened=2 THEN
    RiR(
    Enable:=enable6 , (* ?????????? ?????? ????? *)
    Mode:=MB_RTU , (*????? ????????*)
    DevAddr:=1 , (*????? ?1 *)
    FirstAddr:=rc1 , (*????? ????????*)
    Quantity:=rc2 , (*?????????? ?????????*)
    ComHandle:=Settings.Port , (*????? COM-?????*)
    TimeOut:=TimeOut , (*??????? *)
    Buffer:=Buffer10 , (* ????? ?????? *)
    Complete=>cmpl1 , (* ??????? ?????????? ???????? *)
    Exception=>err , (* ??????? ?????? ?????????? ????????? MODBUS ??? ??????:0x00 – ?????? ??? ?????????? ?? ??????????, 0xFE – ?????????? ?????? ???,0xFF – ?????? ???????? *)
    ByteCnt=>DataSize );
    (*RhR(
    Enable:=enable6 , (* ?????????? ?????? ????? *)
    Mode:=MB_RTU , (*????? ????????*)
    DevAddr:=1 , (*????? ?1 *)
    FirstAddr:=rir1 , (*????? ????????*)
    Quantity:=rir2 , (*?????????? ?????????*)
    ComHandle:=Settings.Port , (*????? COM-?????*)
    TimeOut:=TimeOut , (*??????? *)
    Buffer:=Buffer10 , (* ????? ?????? *)
    Complete=>cmpl , (* ??????? ?????????? ???????? *)
    Exception=>err , (* ??????? ?????? ?????????? ????????? MODBUS ??? ??????:0x00 – ?????? ??? ?????????? ?? ??????????, 0xFE – ?????????? ?????? ???,0xFF – ?????? ???????? *)
    ByteCnt=>DataSize );*)
    IF cmpl1 THEN
    (*t30:=RiR.Exception;*)
    IF RiR.Exception=0 THEN (*???? ??? ??????, ?? ???????? ?????? ?? ?????? *)


    (*????1*)
    ptr_byte:=ADR(In_1);(**)
    ptr_byte^:=buffer10[4];
    ptr_byte:=ptr_byte+1;
    ptr_byte^:=buffer10[5];
    (*ptr_byte:=ptr_byte+1;
    ptr_byte^:=buffer10[3];
    ptr_byte:=ptr_byte+1;
    ptr_byte^:=buffer10[2];*)
    (*
    x1:=BYTE_TO_WORD(BUFFER10[3]) OR SHL(BYTE_TO_WORD(BUFFER10[2]),8);
    x2:=BYTE_TO_WORD(BUFFER10[5]) OR SHL(BYTE_TO_WORD(BUFFER10[4]),8);
    x3:=BYTE_TO_WORD(BUFFER10[8]) OR SHL(BYTE_TO_WORD(BUFFER10[9]),8);*)
    enable6 := FALSE;

    ss:=FALSE;

    ELSE t14:=t14+1;
    ;
    END_IF
    END_IF

    END_IF
    (*
    CASE state OF
    0: (* ?1 *)
    enable:=1;
    IF port_opened=2 THEN (*?????? ???????????????????*)
    (* ??????? 02 - ?? ????????? ???????? ????????? ???? bool ?? ??????? ?? ????????? Modbus-RTU*)
    RIR(
    Enable:=enable , (* ?????????? ?????? ????? *)
    Mode:=MB_RTU , (*????? ????????*)
    DevAddr:=1 , (*????? ?1 *)
    FirstAddr:=16 , (*????? ????????*)
    Quantity:=31 , (*?????????? ?????????*)
    ComHandle:=Settings.Port , (*????? COM-?????*)
    TimeOut:=TimeOut , (*??????? *)
    Buffer:=Buffer1 , (* ????? ?????? *)
    Complete=>cmpl , (* ??????? ?????????? ???????? *)
    Exception=>err , (* ??????? ?????? ?????????? ????????? MODBUS ??? ??????:0x00 – ?????? ??? ?????????? ?? ??????????, 0xFE – ?????????? ?????? ???,0xFF – ?????? ???????? *)
    ByteCnt=>DataSize ); (*???-?? ????????? ?????? *)


    (*???? ?????????? ??????? ?????????? ????????, ?? *)
    IF cmpl THEN
    IF err=0 THEN (*???? ??? ??????, ?? ???????? ?????? ?? ??????, ????????? ??????????*)
    (*?????? ???????? ???????? ??????? ?????? ?????? ??? Float32 ? ??????? ?????? ?????? ??? Int16*)
    (*??????? ?????????? ???????? "??????-??????" *)
    state:=1;
    enable:=0;
    ELSE t12:=t12+1;
    state:=1;
    END_IF
    END_IF
    END_IF

    1*?????????? ????????? ?? ????? ?? ?????????? ? ??????? ?1*)
    enable:=1;
    IF port_opened=2 THEN (*?????? ???????????????????*)
    (* ??????? 03 ????? - ?? ????????? ???????? ????????? ???? int16 ?? ??????? ? ??????? 1 *)
    RHR(
    Enable:=enable , (* ?????????? ?????? ????? *)
    Mode:=MB_RTU , (*????? ????????*)
    DevAddr:=1 , (*?????*)
    FirstAddr:=25 , (*????? ????????*)
    Quantity:=1 , (*?????????? ?????????*)
    ComHandle:=Settings.Port , (*????? COM-?????*)
    TimeOut:=TimeOut , (*??????? *)
    Buffer:=Buffer2 , (* ????? ?????? *)
    Complete=>cmpl , (*??????? ?????????? ???????? *)
    Exception=>err , (* ??????? ?????? ?????????? ????????? MODBUS ??? ??????:0x00 – ?????? ??? ?????????? ?? ??????????, 0xFE – ?????????? ?????? ???,0xFF – ?????? ???????? *)
    ByteCnt=>DataSize ); (*???-?? ????????? ?????? *)
    (*???? ?????????? ??????? ?????????? ????????, ?? *)

    IF cmpl THEN
    IF err=0 THEN (*???? ??? ??????, ?? ???????? ?????? ?? ?????? *)


    (*????1*)
    ptr_byte:=ADR(In_1);(**)
    ptr_byte^:=buffer1[5];
    ptr_byte:=ptr_byte+1;
    ptr_byte^:=buffer1[4];


    state:=2;
    enable:=0;
    ELSE t14:=t14+1;
    state:=2;
    END_IF
    END_IF
    END_IF

    2*COIL*)
    enable:=1;
    IF port_opened=2 THEN (*?????? ???????????????????*)
    (* ??????? 05 *)
    WrCoil(
    Enable:=enable ,
    Mode:=MB_RTU ,
    DevAddr:=1 ,
    CoilAddr:=V1 ,
    Value:=Sh_1 ,
    ComHandle:=Settings.Port ,
    TimeOut:=TimeOut ,
    Complete=>cmpl ,
    Exception=>err );

    (*???? ?????????? ??????? ?????????? ????????, ?? *)

    IF cmpl THEN
    IF err=0 THEN

    state:=3;
    enable:=0;
    ELSE t15:=t15+1;
    state:=3;
    END_IF
    END_IF
    END_IF

    3*COIL*)
    (*enable:=1;
    IF port_opened=2 THEN (*?????? ???????????????????*)
    (* ??????? 05 *)
    WrCoil(
    Enable:=enable ,
    Mode:=MB_RTU ,
    DevAddr:=1 ,
    CoilAddr:=0 ,
    Value:=Sh_2 ,
    ComHandle:=Settings.Port ,
    TimeOut:=TimeOut ,
    Complete=>cmpl ,
    Exception=>err );

    (*???? ?????????? ??????? ?????????? ????????, ?? *)

    IF cmpl THEN
    IF err=0 THEN

    state:=3;
    enable:=0;
    ELSE t16:=t16+1;
    state:=4;
    END_IF
    END_IF
    END_IF*)

    state:=4;
    4:
    enable:=1;
    IF port_opened=2 THEN (*?????? ???????????????????*)
    (* ??????? 06*)
    WrR(
    Enable:=enable ,
    Mode:=MB_RTU ,
    DevAddr:=1 ,
    RegAddr:=V2 ,
    Value:=v3 ,
    ComHandle:=Settings.Port ,
    TimeOut:=TimeOut ,
    Complete=>cmpl ,
    Exception=>err );
    (*???? ?????????? ??????? ?????????? ????????, ?? *)


    IF cmpl THEN
    IF err=0 THEN (*???? ??? ??????, ?? ???????? ?????? ?? ??????, ????????? ??????????*)
    state:=5;
    enable:=0;
    ELSE t17:=t17+1;
    state:=0;
    END_IF
    END_IF
    END_IF


    END_CASE*)

    В программе работает только блок RiR со строки 87
    Начальный адрес задаю 29, количество 1.
    Тайм аут менял с 5мс до 2000 мс. Но выдает ошибку тайм аута RiR.Exception= 255
    Не зная броду, не суйся в воду. (Пословица.)
    Век живи, век учись(а умрешь дураком).
    Опыт растет прямо пропорционально выведенному из строя оборудованию.

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

    По умолчанию

    Под словом проект подразумевают проект а не выжимки.
    Для битов ставьте стартовый адрес кратный 8-ми. Спасибо - овену. Но всегда есть syslibcom

    Цитата Сообщение от Пьер Посмотреть сообщение
    Я так делал. 24 адрес у восьми битного запроса.
    Делал с 0адр 8бит 8 адр 8бит 16 адр 8бит 24 адр. То есть запрос на 4 байта. Так тоже не работает.
    Но это у Овена работает.
    вот.png

    Работает ли у того девайса ?

  8. #8
    Пользователь Аватар для Пьер
    Регистрация
    26.01.2011
    Адрес
    Земля
    Сообщений
    519

    По умолчанию

    Цитата Сообщение от Валенок Посмотреть сообщение
    Под словом проект подразумевают проект а не выжимки.
    Для битов ставьте стартовый адрес кратный 8-ми. Спасибо - овену. Но всегда есть syslibcom


    Но это у Овена работает.
    вот.png

    Работает ли у того девайса ?
    У этого девайса это не работает.
    Не зная броду, не суйся в воду. (Пословица.)
    Век живи, век учись(а умрешь дураком).
    Опыт растет прямо пропорционально выведенному из строя оборудованию.

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

    По умолчанию

    Цитата Сообщение от kondor3000 Посмотреть сообщение
    Откуда там могут быть три включенных бита, если с 3 бита по 10, задействован только 9 бит? .
    Для Вас - только 9й бит

    Цитата Сообщение от kondor3000 Посмотреть сообщение
    С 0 по 7 задействовано только 2 бита..
    Свободно это необязательно 0. Обратите внимание - там нет R или W. Т.е. если и читается - не обращайте внимание на содержимое.

    Цитата Сообщение от kondor3000 Посмотреть сообщение
    .. просто хочу понять как работает это китайское изделие..
    Я тоже не знаю как работает это изделие.

  10. #10

    По умолчанию

    Пьер, неужели трудно запомнить, выкладывайте проект, а не куски.
    Блок есть только у вас и разбираться вам надо, мы только подсказывать можем. Программой Owen OPC Server подключитесь к блоку и проверьте как считываются биты.
    Когда вы точно узнаете как правильно читать (записывать), по одному биту или байтом по 8 бит или регистром по 16 бит, выкладывайте сюда и только после этого можно программу писать. Частота опроса и тайм аут должны быть 500 ms.
    Добавляйте по одному параметру (тегу), сначала бит чтение, потом бит запись и т.д., если GOOD, значит читаете правильно.
    Вот пример опроса ПЛК по ТСР 1 Опрос ПЛК по ТСР.jpg
    Последний раз редактировалось kondor3000; 09.10.2022 в 12:40.

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

Ваши права

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