Страница 3 из 3 ПерваяПервая 123
Показано с 21 по 29 из 29

Тема: SysLibCom 16#FF

  1. #21

    Post

    Получилось. Я отправил данные в порт RS-485. SysComWrite возвращает число отправленых байт, устройство их получает.
    В порт 232 пока не получается:
    SysComSetSettings = *** INVALID: 16#FF ***
    SysComWrite = 0
    SysComClose = *** INVALID: 16#FF ***
    ----------------------------------------------------------
    COM1, он же 1, он же RS-232, мне нужен обязательно, т.к. интерфейс у меня 422ой, из 232го преобразуется запросто, а из 485 не уверен, разве двойным преобразованием.. напрямик не видел конертеров.
    Последний раз редактировалось powerind; 08.10.2008 в 20:50. Причина: Дополнение.

  2. #22

    По умолчанию

    Вы, наверное, номер порта не везде выставили правильный.
    P.S. А пример с диска не работает?

  3. #23

    Question

    А о каком примере с диска идет речь? Мой контроллер был упакован в коробочку 09.10.2006. Только вот сначала мучался со мной с недельку-месяц, постоянно зависал, я его перепрошивал раз 10, потом он пылился в шкафу немного, а потом сломался, потом лежал отремонтарованый на складе больше года, и вдруг необычайно понадобился. Так вот, возможно на комплектном диске небыло примера о котором идет речь. Порт я выставляю так:
    com_set: COMSETTINGS:=(
    Port:=1,
    ..........
    затем,
    com_handle:=SysComOpen(com_set.Port);
    .........................
    res:=SysComSetSettings(com_set.Port,ptCs);
    .......................
    BytesWritten:=SysComWrite(com_set.Port, BufferToWriteADR, BytesToWrite, WriteTimeout);
    .........................
    close:=SysComClose(com_set.Port);

    То есть, врядли он выставлен неправильно. Но может настройки??

    com_set: COMSETTINGS:=(
    Port:=1,
    dwBaudRate:=9600,
    byParity:=0,
    dwTimeout:=0,
    byStopBits:=0,
    dwBufferSize:=0,
    dwScan:=0);

  4. #24

    По умолчанию

    Вот посмотрите.
    А последнюю прошивку и таргет прошили?

  5. #25

    Post

    Мммм.. ну вот я привел настройки,

    com_set: COMSETTINGS:=(
    Port:=1,
    dwBaudRate:=9600,
    byParity:=0,
    dwTimeout:=0,
    byStopBits:=0,
    dwBufferSize:=0,
    dwScan:=0);

    не может же быть, что они, вот такие настройки просто не ставятся, а другие поставятся? Кстати, 115200 тоже пробовал, остальное думаю отношения не имеет. Ну и, от того какие настройки я вношу, может возникать 16#FF?

    Таргет и прошивка, последние и соответствуют друг другу. Версия 2.03

  6. #26

    Smile

    Дорогая Техподдержка, в лице ответственных и высококвалифицированых Сотрудников, я всё никак до вас не дозвонюсь, ибо борюсь с проблемой в основном в нерабочее время, но может быть попробуете помочь мне найти решение здесь, в форуме? Буду вам примногоблагодарен, а может быть и не только я, таки обсуждение открытое..

  7. #27
    Пользователь
    Регистрация
    12.07.2007
    Адрес
    Воронеж
    Сообщений
    884

    По умолчанию

    Цитата Сообщение от powerind Посмотреть сообщение
    Получилось. Я отправил данные в порт RS-485. SysComWrite возвращает число отправленых байт, устройство их получает.
    В порт 232 пока не получается:
    SysComSetSettings = *** INVALID: 16#FF ***
    SysComWrite = 0
    SysComClose = *** INVALID: 16#FF ***
    ----------------------------------------------------------
    COM1, он же 1, он же RS-232, мне нужен обязательно, т.к. интерфейс у меня 422ой, из 232го преобразуется запросто, а из 485 не уверен, разве двойным преобразованием.. напрямик не видел конертеров.

    А можно примерчик работающей отправки данных в RS-485?

  8. #28

    По умолчанию

    Цитата Сообщение от приборист Посмотреть сообщение
    А можно примерчик работающей отправки данных в RS-485?

    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:=0,
    dwBaudRate:=9600,
    byParity:=0,
    dwTimeout:=0,
    byStopBits:=0,
    dwBufferSize:=0,
    dwScan:=0);
    ptCs: POINTER TO COMSETTINGS;
    res: BOOL;
    close: BOOL;

    Buffer1ToWrite: DWORD;
    Buffer2ToWrite: DWORD;
    BufferToWriteADR: POINTER TO DWORD;
    BytesToWrite: DWORD;
    WriteTimeout: DWORD;
    ReadyToWriteRun: BOOL;
    ReadyToWriteStop: BOOL;
    WasWriteRun: BOOL;
    WasWriteStop: BOOL;
    BytesWritten: DWORD;
    END_VAR

    IF ReadyToOpen THEN
    StartOpenAdrSetClose:=FALSE;
    ReadyToOpen:=FALSE;
    com_handle:=SysComOpen(com_set.Port);
    WasOpen:=TRUE;
    END_IF

    IF ReadyToAdr THEN
    WasOpen:=FALSE;
    ReadyToAdr:=FALSE;
    ptCs:=ADR(com_set);
    WasAdr:=TRUE;
    END_IF

    IF ReadyToSet THEN
    WasAdr:=FALSE;
    ReadyToSet:=FALSE;
    res:=SysComSetSettings(com_set.Port,ptCs);
    WasSet:=TRUE;
    END_IF

    IF ReadyToWriteRun THEN
    WasSet:=FALSE;
    ReadyToWriteRun:=FALSE;
    Buffer1ToWrite:=16#040000A0;
    Buffer2ToWrite:=16#2BAF0020;
    BufferToWriteADR:= ADR(Buffer1ToWrite);
    BytesToWrite:=SIZEOF(Buffer1ToWrite);
    BytesWritten:=SysComWrite(com_set.Port, BufferToWriteADR, BytesToWrite, 0);
    BufferToWriteADR:= ADR(Buffer2ToWrite);
    BytesToWrite:=SIZEOF(Buffer2ToWrite);
    BytesWritten:=SysComWrite(com_set.Port, BufferToWriteADR, BytesToWrite, 0);
    WasWriteRun:=TRUE;
    WasWriteStop:=FALSE;
    END_IF

    IF ReadyToWriteStop THEN
    WasSet:=FALSE;
    ReadyToWriteStop:=FALSE;
    Buffer1ToWrite:=16#000000A0;
    Buffer2ToWrite:=16#0FAF0000;
    BufferToWriteADR:= ADR(Buffer1ToWrite);
    BytesToWrite:=SIZEOF(Buffer1ToWrite);
    BytesWritten:=SysComWrite(com_set.Port, BufferToWriteADR, BytesToWrite, 0);
    BufferToWriteADR:= ADR(Buffer2ToWrite);
    BytesToWrite:=SIZEOF(Buffer2ToWrite);
    BytesWritten:=SysComWrite(com_set.Port, BufferToWriteADR, BytesToWrite, 0);
    WasWriteRun:=FALSE;
    WasWriteStop:=TRUE;
    END_IF

    IF ReadyToClose THEN
    WasWriteRun:=FALSE;
    WasWriteStop:=FALSE;
    ReadyToClose:=FALSE;
    close:=SysComClose(com_set.Port);
    WasClosed:=TRUE;
    END_IF

    IF (WasClosed) THEN
    WasClosed:=FALSE;
    StartOpenAdrSetClose:=TRUE;
    END_IF

    Запускайте, ставьте контрольные точки-брейкпоинты в каждом IF...END_IF и записывайте (Ctrl+F7) в ReadyToOpen, Adr, Write и так далее, значение True - примерчик необычайно кривенький, зато наглядно.
    Так же, можно записать в структуру com_set новые настройки, например выставить .Port равным 4, это Debug. Удачи!

  9. #29

    По умолчанию

    Цитата Сообщение от powerind Посмотреть сообщение
    Дорогая Техподдержка, в лице ответственных и высококвалифицированых Сотрудников, я всё никак до вас не дозвонюсь, ибо борюсь с проблемой в основном в нерабочее время, но может быть попробуете помочь мне найти решение здесь, в форуме? Буду вам примногоблагодарен, а может быть и не только я, таки обсуждение открытое..
    Если я правильно понял, у вас не выходит использовать библиотеку для com1.

    Посмотрите пример. Мне удалось связаться через RS232 с компьютером.

    пример syslibcom.zip

Страница 3 из 3 ПерваяПервая 123

Ваши права

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