Страница 1 из 4 123 ... ПоследняяПоследняя
Показано с 1 по 10 из 38

Тема: SysLibCom

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

Предыдущее сообщение Предыдущее сообщение   Следующее сообщение Следующее сообщение
  1. #1

    По умолчанию SysLibCom

    возникла проблемма, вот кусок программы. Контроллер ПЛК 150 U-M. таргет 2.0-4, Прошивка 2.01.8.
    при подключении к контроллеру temp1 получается значение ***INVALID: 16#FF***.
    Не могу понять почему и в чем ошибка...
    помогите советом добрым. люди добрые )))

    set: COMSETTINGS;
    temp: DWORD;
    temp1:BOOL;
    ________________________________________
    temp:=SysComOpen(1);
    set.Port:=1;
    set.dwBaudRate:=38400;
    set.byParity:=0;
    set.dwTimeout:=0;
    set.byStopBits:=1;
    set.dwBufferSize:=0;
    set.dwScan:=0;
    temp1:=SysComSetSettings(temp,ADR(set));
    Последний раз редактировалось mettled; 20.09.2007 в 16:46.

  2. #2

    По умолчанию

    Вместо temp подставьте номер порта. И не пользуйтесь числами, используйте константы из библиотеки

  3. #3

    По умолчанию

    ну тогда очередная неточность в описании библиотеки и ее работе.
    там везде написано что надо использоваться дескриптор порта, который возвращает функция открытия порта.
    и не могли бы вы, очень вас прошу, написать примерчик работоспособный, где использовались бы функциии работы с ком-портом.
    Уж очень надо.

  4. #4

    По умолчанию

    Цитата Сообщение от Филоненко Владислав Посмотреть сообщение
    Вместо temp подставьте номер порта. И не пользуйтесь числами, используйте константы из библиотеки
    добрый день.
    подниму тему, вопросов накопилось.

    пример, который в первом собщении подойдет. овен 150 И-М, таргет самый свежий.
    1. функция SysComOpen у меня всегда возвращает все ff... независимо, указываю ли я порт как константу, или как численную переменную.
    2.в переведеннном файле по библиотеке написано -
    -Режим (для PLC-100): ..0 порт – RS-485
    ..1 порт – RS-232
    ..2 порт – не используется
    ..3 порт – не используется
    ..4 порт – отладочный RS-232
    однако, в разделе типов библиотеки СОМ1 = 1. там нет константы со значением 0!. а Вы пишете использовать константы из библиотеки..
    3. по хэндлу порта непонятно.. в оригинале описания библиотеки написано что в функциях библиотеки надо использовать хэндл, позвращаемы ф-ей открытия.. у вас совсем по другому, номер порта.
    4. работает ли на овенах функция установки ..Ex ? Важно для числа бит !
    5. работает ли библиотека на PLCWinNT ?

    вот то что я делаю в пустом проекте:

    PROGRAM PLC_PRG
    VAR
    init:BOOL;
    ptrWORD;
    set: COMSETTINGS;
    END_VAR

    IF (init <> TRUE) THEN

    set.Port := COM1; - неважно что присваивать, результат один
    set.byParity := 0;
    set.byStopBits := 0;
    set.dwBaudRate := 9600;

    ptr := SysComOpen (set.Port);
    init := SysComSetSettings (set.Port ,ADR(set));

    END_IF
    результат - ptr - 0xffffffff, init - INVALID 16#ff

  5. #5

    По умолчанию

    SettingsEx работает, под Nt библиотека тоже должна работать, но не проверял, т.к. NT не использую.
    Пример выложу в ближайшее время.

  6. #6

    По умолчанию

    вот еще проектик, гляньте, скажите что не так?
    вроде все примитивно, а не работает, опять какая нибудь мелочь поди.
    Вложения Вложения

  7. #7

    По умолчанию

    up.
    жду ответа.

  8. #8

    По умолчанию

    Пример работы:
    Вложения Вложения

  9. #9

    По умолчанию

    Цитата Сообщение от Филоненко Владислав Посмотреть сообщение
    Пример работы:
    пример для plc 100. у меня 150. сменил таргет. еще при загрузке проекта было замечание про разные версии библиотек...

    поясните, ваша функция OPEN_FUN возвращает 1 в случае успеха или неуспеха открытия порта???

    напишите пожайлуста четко, цифрами, а не константами из библиотеки номера портов 485 со стороны клеммников и 232 на лицевой панели для PLC-150.

  10. #10

    Post

    Цитата Сообщение от Филоненко Владислав Посмотреть сообщение
    Пример работы:
    У меня приведенный пример не работает. Подменил таргет под свой 150 IL, запускаю, получаю settings.Port = *** INVALID: 0 ***
    А чего можно ожидать, выполняя сначала:

    setings.Port:=COM1;

    затем

    setings.Port:=setings.Port-1;

    потом

    opn:=TRUE;
    IF SysComOpen(setings.Port)=0 THEN
    OPEN_FUN:=FALSE;
    ELSE
    OPEN_FUN:=TRUE;
    END_IF

    а после -

    setings.Port:=setings.Port+1;

    В режиме отладки видно все что происходит.
    Функциональный блок:
    FUNCTION SysComOpen : DWORD
    VAR_INPUT
    Port:PORTS;
    END_VAR
    VAR
    END_VAR
    То есть, SysComOpen должна возвращать WORD, а в примере
    IF SysComOpen(setings.Port)=0 THEN
    разве, это значит, что порт открыт?

    -----------------------------------------------

    Вот мой пример, проще не придумать, всё работает "на автомате", но НЕ применяются настройки(res = *** INVALID: 16#FF ***), и порт НЕ закрывается (close = *** INVALID: 16#FF ***):

    PROGRAM PLC_PRG
    VAR
    StartOpenAdrSetClose: BOOL;
    TimerToOpen:TON;
    ReadyToOpen: BOOL;
    WasOpen: BOOL;
    TimerToAdr:TON;
    ReadyToAdr: BOOL;
    WasAdr: BOOL;
    TimerToSet:TON;
    ReadyToSet: BOOL;
    WasSet: BOOL;
    TimerToClose:TON;
    ReadyToClose: BOOL;
    WasClosed: BOOL;

    com_handle: DWORD;
    com_set: COMSETTINGS:=(
    Port:=1,
    dwBaudRate:=115200,
    byParity:=0,
    dwTimeout:=0,
    byStopBits:=0,
    dwBufferSize:=0,
    dwScan:=0);
    ptCs: POINTER TO COMSETTINGS;
    res: BOOL;
    close: BOOL;
    END_VAR


    TimerToOpen(IN:=StartOpenAdrSetClose, PT:=t#1s);
    ReadyToOpen:=TimerToOpen.Q;
    IF ReadyToOpen THEN
    StartOpenAdrSetClose:=FALSE;
    com_handle:=SysComOpen(com_set.Port);
    WasOpen:=TRUE;
    END_IF
    TimerToAdr(IN:=WasOpen, PT:=t#1s);
    ReadyToAdr:=TimerToAdr.Q;
    IF ReadyToAdr THEN
    WasOpen:=FALSE;
    ptCs:=ADR(com_set);
    WasAdr:=TRUE;
    END_IF
    TimerToSet(IN:=WasAdr, PT:=t#1s);
    ReadyToSet:=TimerToSet.Q;
    IF ReadyToSet THEN
    WasAdr:=FALSE;
    res:=SysComSetSettings(com_set.Port,ptCs);
    WasSet:=TRUE;
    END_IF
    TimerToClose(IN:=WasSet, PT:=t#1s);
    ReadyToClose:=TimerToClose.Q;
    IF ReadyToClose THEN
    WasSet:=FALSE;
    close:=SysComClose(com_set.Port);
    WasClosed:=TRUE;
    END_IF
    IF (WasClosed) THEN
    WasClosed:=FALSE;
    StartOpenAdrSetClose:=TRUE;
    END_IF


    Архив с программой Здесь

Страница 1 из 4 123 ... ПоследняяПоследняя

Ваши права

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