PDA

Просмотр полной версии : ПЛК63 + COM1 разночтения в документации и примерах



ongleb
28.04.2014, 10:36
Господа,
не хочется беспокоить но видимо придется
пытаюсь работать напрямую с RS232-портом 63-го
с тем что RJ12 на верхней стороне, не через DBGU (в инструкции написано что то типа "Не трогат. Использовать ТОЛЬКО для перепрошивки")
1. порт открыл и он открылся (Handle не равен INVALID_HANDLE)
2. структуру COMSETTINGS создал и заполнил
3. пытаюсь установить параметры из COMSETTINGS для этого порта
вот в этом моменте начинаются фокусы
Судя по документации, первый параметр функции SysComSetSettings
dwHandle DWORD Дескриптор порта, возвращаемый SysComOpen.

в нескольких примерах встречал что в качестве первого параметра используется переменная типа PORTS (не понятненько где правда)

Судя по документации SysComSetSettings возвращает истину если ей удалось установить параметры
а в примерах нахожу обратный код
---------------------------
res:=SysComSetSettings(com_num,ADR(com_set));
(*Успешно открыт*)
IF NOT res THEN
port_opened:=TRUE;
END_IF;
--------------------------------
типа если не TRUE то прекращаем попытки открыть и сконфигурировать порт и начинаем с ним работать

Где правда?
Каким должен быть 1-й параметр?
и что должна вернуть функция в случае успеха?

ongleb
28.04.2014, 13:49
Еще непоняточка
в перечисление портов начинается с COM1
а судя по файлику с номерами овеновских портов, везде присутствует СОМ0

кстати
com_set:COMSETTINGS;
...
...
com_set.Port:= COM1;

в окне отладки дает com_set.Port: = *** INVALID: 0 ***

amn
28.04.2014, 15:44
наберите в поиске форума строку invalid и получите кучу тем, где найдете ответы на свои вопросы.

ongleb
28.04.2014, 16:54
запрос конечно гениален
действительно выдает много
я пробовал и несколько десятков более конкретных запросов
набрал хорошую подборку разночтений

в конце концов вроде удалось настроить порт (хэндлы помогли)
попробовал туда чего ни будь записать (в смысле из ПЛК в ПК)
пока тишина
либо порт не тот (COM1)
либо что то не так делаю
сегодня спать
завтра продолжать

ongleb
28.04.2014, 19:49
С "Инвалидом" разобрался вроде
Похоже вся неприятность была втом что я сам через этот порт с плк работал
Заливаешь, отключаешь, перезагружаешь и все конфигурится
Одна засада
Не ясно какой при этом порт конфигурится
В списке портов 63го присутствует COM0 -rs485
Его ни открыть ни сконфигурить не удается
Поддается COM1 и COM4
2 и 3 в 63м не используется ( так в мануале пишут )
4й вроде должен быть DBGU (в мануале говорят ни чего туда не пихать а то хуже будет)

ongleb
29.04.2014, 10:26
пипец какой то

одни пишут
byte_read:=SysComRead(Settings.Port, ADR(buf_otvet), 64, 0);

другие
tmp1:=SysComRead(Handle, ADR(buf_otvet), otvet_len, 0);

у одних PORTS у других HANDE
и типа оба примера рабочих
и ни один не работает

с портами разобрался
COM0 -самая загадочная конструкция но это rs485 (слава богу он мне не нужен)
мне нужен либо COM1 либо СОМ4
но молчат оба
SysComWrite возвращает 0 там где должен вернуть 10
буфер предварительно почищен (если конечно SysComRead, вернувший 0, это признак чистого буфера)

63-й в принципе позволяет работать с портами на прямую?

ongleb
29.04.2014, 10:59
в примерах на диске нашел еще более загадочную строку
ComHandle:= Settings.Port, (*номер COM-порта*)
:confused: это как :confused:

ongleb
29.04.2014, 16:46
что то становится понятно
COM1 это действительно RJ12 штатно установленный в корпусе

если взять пример "Modbus запись Int и Real (ST)"
заменить в нем номер порта с 0 на 1
в порт начинает валиться какая то Modbus'ятина

отрезаешь из него Modbus'овскую библиотеку
вместо Modbus'овских вызовов пишешь SysComWrite(Settings.Port, ADR(snd_str),LEN(snd_str),0)
получаешь из порта фигу с маслом

все больше склоняюсь к идее что без ОВЕН'а или Modbus'а в этот порт ни чего не запихать
буду пытаться рыться в этих библиотеках если удастся
как то же они отправляют


PS: что то я в каком то монологе тут извергаю

kolyan
29.04.2014, 17:20
Ну, монолог-то интересный.
Уверен, что многие следят за Вашими исследованиями.
Успехов!

ongleb
29.04.2014, 17:42
Ну, монолог-то интересный.
Уверен, что многие следят за Вашими исследованиями.
Успехов!
блин, ну хоть сказали бы "Пилите шура. Пилите... на 63-м это возможно"

com_port_test.pro с диска
компилируется для 63-го удачно
даже пробовал MinCycleLength ms поставить не 1 а 5 или 10 (не помогло)
В порт вожделенного словечка 'TEST1$N' не льет
я бы в этом контексте и более короткому слову был бы рад

невъезжаю
библиотеку Modbus изнутри посмотреть неудалось
не пускает говорит правов нет на редактирование (я кстати редактировать ни чего и не хотел. мне бы посмотреть просто как они цыферьку в порт пихают)

народ.
Где грабли?
в какую сторону копать?

amn
29.04.2014, 19:18
невъезжаю
библиотеку Modbus изнутри посмотреть неудалось
не пускает говорит правов нет на редактирование (я кстати редактировать ни чего и не хотел. мне бы посмотреть просто как они цыферьку в порт пихают)http://www.owen.ru/forum/showthread.php?t=15454&p=114821&viewfull=1#post114821

ongleb
29.04.2014, 19:37
Спасибо
Завтра утром попробую (все на работе осталось)
Правда мне казалось что я в своих изысканиях истыкал правой кнопкой все что только мог
Но не исключаю что завтра мне ваша ссылка очень поможет
Еще раз СПАСИБО

ongleb
30.04.2014, 10:46
Посмотреть удалось еще раз спасибо
обнаружил что длину буфера для SysComWrite определяют с помощью SIZEOF(Buff) а не LEN(Buff)
во всем остальном все то же самое
не вижу разницы за исключением результата
пример "Modbus запись Int и Real (ST)" шлет в порт
а мой пример нет

видимо пришел срок спросить уважаемую общественность более предметно
в чем грабли? (явно я где то накосячил)

ПЛК63
прошивка 2.12 12 10
версия таргета 2.01
если кому лень открывать проект в CoDeSys
прикладываю картинку чтобы прямо тут посмотреть можно было

если в SysComSetSettings(PortHandle,ADR(com_set)) вместо PortHandle использовать переменную типа PORTS, начинает зычно пищать.
MinCycleLength ms установлено 5

В результате в rs232 ни чего не льется
на экран выводится _0__11_22__0

переменные конечно названы ... (последствия колупания по куче примеров)

ongleb
30.04.2014, 12:15
удалось вырезать из примера "Modbus запись Int и Real (ST)" использование библиотек Modbus и заслать в порт свою строчку
знаю почему раньше это не удавалось а сейчас удалось
буфер надо было объявлять примерно так
tmpb:ARRAY[0..255] OF BYTE;

в своем примере с нуля это не помогло
возможно надо было применять ComService.lib

файлик прилагаю
шлет в порт буквы ABC

за помощь всем СПАСИБО