Показано с 1 по 10 из 10

Тема: плк110 SysComOpen

  1. #1

    По умолчанию плк110 SysComOpen

    Задача - связать контроллер с датчиком, у которого свой свой протокол (тупо шлет без остановки свое значение в ascii).

    Контроллер: плк110-220.60Р-М
    PLCInfo
    PLC model MODEL PLC 110-60
    Binary VERSION 2.10.7
    Need Target version 2.10

    Таргет: Version 2.10

    Не могу открыть ни один из com портов.
    Код такой:

    PROGRAM PLC_PRG
    VAR
    hndl0WORD;
    hndl1WORD;
    hndl2WORD;
    hndl3WORD;
    hndl4WORD;
    hndl5WORD;
    hndl6WORD;
    hndl7WORD;
    hndl8WORD;
    END_VAR

    hndl0:=SysComOpen(0);
    hndl1:=SysComOpen(COM1);
    hndl2:=SysComOpen(COM2);
    hndl3:=SysComOpen(COM3);
    hndl4:=SysComOpen(COM4);
    hndl5:=SysComOpen(COM5);
    hndl6:=SysComOpen(COM6);
    hndl7:=SysComOpen(COM7);
    hndl8:=SysComOpen(COM8);

    При запуске всем присваивается 4294967295 (по документации ет, наскока я понял, ошибка).

    Добавил либу SysLibCom.lib

    Из конфигурации делал только в PLC Configuration Universal network module, в котором RS-232, настройки вродь все выставил как положено в нем (с компа вижу данные нормально), кабелек от контроллера к датчику уже несколько раз в разных комбинациях перепаивал, результат один.

    Что я еще могу делать не так?

  2. #2

    По умолчанию

    нашел на форуме описание "фишки", что перед тем, как открыть порт, его нужно на всяк случай закрыть, теперь делаю так:

    SysComClose(COM1);
    hndl1:=SysComOpen(COM1);

    далее делаю

    cs.Port:=COM1;
    cs.dwBaudRate:=9600;
    cs.byStopBits:=0;
    cs.byParity:=0;
    cs.dwTimeout:=0;
    cs.dwBufferSize:=0;
    cs.dwScan:=0;
    pRet:=SysComSetSettings(COM1, ADR(cs));

    гдето тоже тут было написано, что SysComSetSettings принимает первым параметром не хендл, а номер порта, типо так в русской документации (но у меня почемуто и в ней написано что хендл нужен), там же написано, что должно возвращать TRUE. У меня если использовать номер порта, то получаю FALSE, а если хендл (который ноль), то получаю опять все FFFF... (кстати, тоже любопытно, как оно оказывается в булевой переменной). Но в результате ни так ни так я дальше данных с помощью SysComRead прочитать немогу, возвращает всегда 0, код:
    klv:=SysComRead(COM1, ADR(str), 22, 0);

  3. #3
    Часто задаваемые вопросы по кодесис
    1) Почему программа не работает - Следует выполнить "Онлайн ->Старт"
    2) Где скачать CoDeSys, таргеты, прошивки, библиотеки - http://www.owen.ru/catalog/codesys_v3/opisanie

  4. #4

    По умолчанию

    да не, вроде подключился, я так понимаю при установке false - ет нормально, данные получаю, но кривые (мусор, разной длинны), обычно такое ведь получается,когда параметры неправильно выставлены, все перепроверил, вроде норм, а мож какраз и не выставляются они, поетому и false...

  5. #5

    По умолчанию

    неа, если вообще не вызывать функцию настройки, то даже мусор не идет...

  6. #6

    По умолчанию

    взяль tx и rx на контроллере перемкнул, делаю:

    buf:='12345678901234567890zx';
    SysComWrite(port, ADR(buf), 22, 0);
    klv:=SysComRead(port, ADR(str), 22, 0);

    получаю 1-2 первых символа и мусора следом пару символов, klv показывает 1-2...

  7. #7

    По умолчанию

    хм, притом, если размер буфера ставлю в 2 символа, то получаю серавно 4, те опять 1-2 нормальных, остальное мусор

  8. #8

    По умолчанию

    чета совсем все плохо, подцепил com порт контроллера к компу, из контроллера пишу строку в него, на компе принимаю первые 2-3 символа из нее только, с чем это связанно?

  9. #9

    По умолчанию

    нашел часть проблемы, сам тупил, нечаянно инициализировал порт при каждом проходе заново, наивно думал что блок init выполняется только один раз, судя по названию, но всеравно, мусор еще идет, но уже периодически в нем проскакивают нужные данные! прогресс!

  10. #10

    По умолчанию

    Усе, допинал я его, потратил на все больше двух дней, на всяк случай, если кто столкнется с такой же проблемой (а мож и я когда подзабуду), опишу все здесь.
    Весовой индикатор CI-1560A.
    Код следующий:

    PROGRAM PLC_PRG
    VAR
    port:PORTS;
    hndlWORD;
    cs:COMSETTINGS;
    isSet:BOOL;
    idWORD;
    iWORD:=0;
    posWORD;
    klvWORD;
    klvAllWORD;
    bufIn:STRING;
    buf:STRING;
    str:STRING;
    tmpCounterWORD;
    mass:REAL;
    END_VAR

    IF isSet=FALSE THEN
    isSet:=TRUE;
    port:=COM1;
    SysComClose(port);
    hndl:=SysComOpen(port);
    cs.Port:=port;
    cs.dwBaudRate:=9600;
    cs.byStopBits:=0;
    cs.byParity:=0;
    cs.dwTimeout:=0;
    cs.dwBufferSize:=0;
    cs.dwScan:=0;
    SysComSetSettings(port, ADR(cs));
    id:=1;
    ELSE
    IF i=0 THEN
    SysComWrite(port, ADR(id), 1, 0);
    i:=1;
    klvAll:=0;
    buf:='';
    ELSE
    (*если за 100 проходов неполучит данных, то потерял, просим еще раз,
    если число сильно маленькое, то небудет успевать прочитать все уеликом,
    если большое, то будет тупить, если потеряет кусок данных*)
    IF i<100 THEN
    klv:=SysComRead(port, ADR(bufIn), 22, 0);
    klvAll:=klvAll+klv;
    buf:=CONCAT(buf, LEFT(bufIn, DWORD_TO_INT(klv)));
    IF(klvAll=22) THEN (*если собрали все символы*)
    (*если конец и начало строки попали в середину, нормализуем ее,
    (датчик часто грешит етим)*)
    IF RIGHT(buf, 2)<>'$R$N' THEN
    pos:=FIND(buf, '$R$N');
    str:=CONCAT(RIGHT(buf, (22-DWORD_TO_INT(pos)-1)), LEFT(buf, DWORD_TO_INT(pos)+1));
    ELSE
    str:=buf;
    END_IF
    tmpCounter:=tmpCounter+1;
    mass:=STRING_TO_REAL(MID(str, 8, 10)); (*необходимые данные*)
    i:=0;
    ELSE
    i:=i+1;
    END_IF
    ELSE
    i:=0;
    END_IF
    END_IF
    END_IF

    Скорость - примерно 10 раз за секунду получает данные.
    На самом весовом индикаторе нужно выставить:
    F03 - 2
    F10 - 01
    F12 - 3
    (кто не понял че ет, открывает мануал и чиатет его...)
    Кабелек распаян так (который овеновский для прошивки КС1, оставлю тоже, тк с первого раза из трех проводов ни один правильно не припаял):
    RJ12 - RS-232
    TxD(1 - синий) - 3
    RxD(2 - желтый) - 2
    GND(6 - белый) - 7

Ваши права

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