Страница 69 из 699 ПерваяПервая ... 1959676869707179119169569 ... ПоследняяПоследняя
Показано с 681 по 690 из 6985

Тема: CODESYS V3.5. Вопросы и ответы

  1. #681
    Супер Модератор Аватар для Евгений Кислов
    Регистрация
    27.01.2015
    Адрес
    Москва
    Сообщений
    12,066

    По умолчанию

    Цитата Сообщение от ntro123 Посмотреть сообщение
    buf:STRING(100000); // переменная buf

    ...

    FOR j:=0 TO sz DO
    IF buf[j]=16#31 THEN // попытка обращения к массиву переменных buf
    n:=n+1;
    END_IF
    END_FOR



    Я не хочу писать ASCII коды, я хочу чето типо:
    IF buf[j]='1' THEN
    ...

    Но он жалуется что разные типы, тогда делаю STRING_TO_BYTE('1') но тогда равенство не выполняется. Т.е. он прото преобразует '1' в 01d
    при этом если взять BYTE_TO_STRING(buf[j]) тоже не помогает.

    Как быть? Не нашел ничего в документации как сделать так, чтобы работа по человечески?
    Предлагаю быть так:

    Код:
    buf:ARRAY [0..100000] OF STRING;
    
    ...
    
    IF buf[j]='1' THEN
    ...

  2. #682

    По умолчанию

    Не подходит, у меня 524288 байт (0.5 МБ) так как целый файл считываю в буфер (по мои подсчетам это его максимальный размер с запасом).

    Если сделать как вы предложили:
    buf:ARRAY [0..524288] OF STRING;
    то ПЛК выдает что памяти не достаточно.

    Ладно, не проблема, буду ASCII коды юзать, все равно не так часто приходиться так сравнивать.

    Все равно спасибо!

  3. #683

    По умолчанию

    buf:STRING(100000);
    CS не подднрживает строки более 255 символов, или что-то изменилось?

  4. #684

    По умолчанию

    Поддерживает, просто стандартные ф-ции работают со строками до 255 символов, но нужные мне я написал заново:
    пример (вычисляем длину, для строк до 1024 символа, очень легко расширить до других значений):


    FUNCTION LEN_BIG : UINT
    VAR_INPUT
    str:STRING(1024);
    END_VAR
    VAR
    p:POINTER TO BYTE;
    END_VAR
    -----------------------------------------------
    p:=ADR(str);

    LEN_BIG:=0;

    WHILE p^<>0 AND LEN_BIG<=1024 DO
    LEN_BIG:=LEN_BIG+1;
    p:=p+1;
    END_WHILE
    Последний раз редактировалось ntro123; 05.03.2016 в 19:45.

  5. #685

    По умолчанию

    А касательно вашего вопроса, мне кажется уместно использовать указатель. Например так:
    buf:STRING(100000);
    sChr:STRING(1):='1';
    bNum:BYTE;
    pNum:POINTER_TO_BYTE;
    pChr: POINTER_TO_STRING;

    ...

    pChr:=ADR(sChr);
    pNum:=pChr
    bNum:=pNum^;
    FOR j:=0 TO sz DO
    IF buf[j]=bNum THEN
    n:=n+1;
    END_IF
    END_FOR
    Можно наверно даже сократить код, но так понятнее.

  6. #686

    По умолчанию

    Спасибо, действительно вариант, но накладный, лучше уж ASCII коды и в комментариях рядом писать что за символ.

  7. #687

    По умолчанию

    Товарищи программисты, пытаюсь разобраться с модемом на ПЛК 323, получилось его активировать (по FAQ на сайте овена) мигает красным лампочка GSM.
    Пытаюсь на 3 ком порт отправить команду AT, ответа не получаю. Выкладываю проект (CDS3.5).

    Настройки подключения к ком порту:
    com_settings:ARRAY [1..7] OF COM.PARAMETER:=[
    (udiParameterId := COM.CAA_Parameter_Constants.udiPort, udiValue:=3),
    (udiParameterId := COM.CAA_Parameter_Constants.udiBaudrate, udiValue:=9600),
    (udiParameterId := COM.CAA_Parameter_Constants.udiParity, udiValue:=COM.PARITY.NONE),
    (udiParameterId := COM.CAA_Parameter_Constants.udiStopBits, udiValue:=COM.STOPBIT.ONESTOPBIT),
    (udiParameterId := COM.CAA_Parameter_Constants.udiTimeout, udiValue:=0),
    (udiParameterId := COM.CAA_Parameter_Constants.udiByteSize, udiValue:=8),
    (udiParameterId := COM.CAA_Parameter_Constants.udiBinary, udiValue:=0)
    ];
    для тех кто не хочет качать проект PLC_PRG:
    CASE step OF
    0:
    Power:=TRUE; // включаем GSM модем
    IF Status=TRUE THEN
    ;
    END_IF

    port_open(port:=3);

    IF port_open.status=1 THEN
    step:=1;
    ELSIF port_open.status<0 THEN
    step:=99;
    END_IF

    buf:='AT';
    1:
    write(xExecute:=TRUE, hCom:=gbHD, pBuffer:=ADR(buf), szSize:=LEN(buf));

    IF write.xDone THEN
    step:=2;
    ELSIF write.xError THEN
    step:=200;
    END_IF
    2:
    read(xExecute:=TRUE, hCom:=gbHD, pBuffer:=ADR(buf2),
    szSize=>len_res);

    IF read.xDone AND len_res>0 THEN
    step:=3;
    ELSIF read.xError THEN
    step:=200;
    END_IF
    3:
    port_close();

    IF port_close.status=1 THEN
    step:=100;
    ELSIF port_close.status<0 THEN
    step:=200;
    END_IF
    END_CASE
    Что я делаю не так?

    PS через putty я получаю ответ ОК.
    Вложения Вложения
    • Тип файла: project sm.project (109.3 Кб, Просмотров: 3)
    Последний раз редактировалось ntro123; 10.03.2016 в 19:24.

  8. #688

    По умолчанию

    Не могу найти, что означает в режиме мониторинга в Конфигурации задач статус "Valid, Активный"?
    05.PNG

  9. #689
    Супер Модератор Аватар для Евгений Кислов
    Регистрация
    27.01.2015
    Адрес
    Москва
    Сообщений
    12,066

    По умолчанию

    Цитата Сообщение от energvk Посмотреть сообщение
    Не могу найти, что означает в режиме мониторинга в Конфигурации задач статус "Valid, Активный"?
    05.PNG
    Valid - то, что задача нормально выполняется (иначе здесь может быть, например, Exception)
    Active - то, что эта задача выполняется конкретно в данный момент.

  10. #690

    По умолчанию

    Понятно, спасибо. А почему при этом статус висит постоянно и циклы останавливаются? Я так понимаю, что происходит остановка на каком-то моменте внутри программы и она дальше не выполняется? Тогда непонятно почему не происходит исключение по сторожевому таймеру...

Страница 69 из 699 ПерваяПервая ... 1959676869707179119169569 ... ПоследняяПоследняя

Похожие темы

  1. Панели оператора СП3xx. Вопросы и ответы
    от Мурат Ахриев в разделе Панели оператора (HMI)
    Ответов: 3177
    Последнее сообщение: 27.03.2024, 12:47
  2. Панели оператора ИП320. Вопросы и ответы
    от automat в разделе Панели оператора (HMI)
    Ответов: 822
    Последнее сообщение: 20.11.2023, 17:48
  3. ИПП120. Вопросы и ответы
    от Р.Александр в разделе Программируемые реле
    Ответов: 245
    Последнее сообщение: 02.10.2022, 11:34
  4. Индикатор ИП120 , вопросы- ответы
    от rovki в разделе Программируемые реле
    Ответов: 56
    Последнее сообщение: 03.11.2017, 15:58
  5. Панели оператора СП270. Вопросы и ответы
    от Давидюк в разделе Панели оператора (HMI)
    Ответов: 930
    Последнее сообщение: 15.05.2017, 17:12

Ваши права

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