PDA

Просмотр полной версии : Соединить программу на ПК с программой для ПЛК выполняющейся в режиме эмуляции



kost2
18.03.2013, 14:30
Допустим я пишу прогу для ПЛК, которая должна работать с уже имеющейся программой для ПК через преобразователь АС4.
То что в CodeSys 2.3 есть режим эмуляции это здорово, но возможно ли соединить этот режим эмуляции с прогой на том же компе через виртуальные com-порты?

Yegor
18.03.2013, 14:54
Нельзя.

Вместе с кодесисом устанавливается виндовый контроллер PLCWinNT. С его помощью можно поиграться ком-портом внутри винды, но там не будет встроенных фич типа модбаса, протокола овна и т.п. — то есть не будет ничего, что вы видите в окне конфигурации когда выбран овеновский ПЛК. OPC, впрочем, останется.

kost2
18.03.2013, 15:10
Печально.
Как же тогда отлаживать что-то работающее по сети? только на железе получается

capzap
18.03.2013, 15:19
Печально.
Как же тогда отлаживать что-то работающее по сети? только на железе получается

А это сильно зависит от опыта. Через библиотеки модбас и либсокет любую задачу можно решить и на ВинНТ

kost2
18.03.2013, 16:02
А это сильно зависит от опыта. Через библиотеки модбас и либсокет любую задачу можно решить и на ВинНТ

Немного не понял...
Т.е. мне нужно написать свою прогу для ПЛК ВинНТ, а затем просто поменять целевую платформу на нужный мне ПЛК? или посложнее дело обстоит?

capzap
18.03.2013, 17:11
Немного не понял...
Т.е. мне нужно написать свою прогу для ПЛК ВинНТ, а затем просто поменять целевую платформу на нужный мне ПЛК? или посложнее дело обстоит?

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

kost2
19.03.2013, 07:51
В теории все вроде понятно, на практике PLC WinNT 2.4.7.38 (DEMO) отказывается открывать com-порт в примере по записи через Modbus с сайта owen.ru

PROGRAM PLC_PRG
VAR
get1_modbus: MB_RD_HOLD_REGS;
get2_modbus: MB_RD_INP_REGS;
get3_modbus: MB_RD_HOLD_REGS;
Buffer: ARRAY[0..255] OF BYTE;
cmpl: BOOL;
port_opened: BYTE := 0;
Init: BOOL;
Settings:COMSETTINGS;
com_num: PORTS:=2;
enabl: BOOL;
err: INT;
TimeOut: TIME:=T#50ms;
Exception: BYTE;
DataSize: WORD;
master1: BYTE:= 1;

t: DWORD;
A: WORD := 0;
x:WORD;
x1: WORD;
x2: WORD;
x3: WORD;
d: REAL;
ptr_D:POINTER TO BYTE;

COM_SERVICE1: COM_SERVICE;
END_VAR



t:=t+1;
IF (t MOD 1000)=0 THEN
A := A + 1;
IF A > 9999 THEN
A := 0;
END_IF
END_IF

IF port_opened=0 THEN
Settings.Port:=com_num;
Settings.dwBaudRate:=115200;
Settings.byParity:=0;
Settings.dwTimeout:=0;
Settings.byStopBits:=1;
Settings.dwBufferSize:=0;
Settings.dwScan:=0;
END_IF

COM_SERVICE1(Enable:=(port_opened=0) , Settings:=Settings , Task:=OPEN_TSK );
IF COM_SERVICE1.ready THEN (*здесь всегда false получается*)
port_opened:=2;
END_IF

виртуальные com-порты создавал с помощью com0com и virtual serial port driver 6.9 - проверял их через HyperTerminal все работает правильно

kgsh82
19.03.2013, 09:51
Внимательнее прочтите документацию к биб-ке для Modbus
ЗЫ: стр 3 внизу

kost2
19.03.2013, 10:57
Внимательнее прочтите документацию к биб-ке для Modbus
ЗЫ: стр 3 внизу

Извините, не совсем понял о чем Вы...
может об этом:
Примечание. В функциональных блоках, разработанных для контроллеров фирмы ОВЕН, режим симуляции (Simulation Mode) не предусмотрен. Отладка программы в режиме визуализации должна производиться при подключенном контроллере, функциональные блоки при этом работают только в самом контроллере.?

т.е. все-таки отлаживать работу по сети без железа невозможно?

kgsh82
19.03.2013, 14:21
Вы применяете ФБ для контроллеров ОВЕН на контроллерах не ОВЕН
(PLC WinNT). Поэтому не работает, а именно не открывается порт. Изучите биб-ку SysLibCom.
Вот только зачем? Вы берёте заведомо работающие ФБ и пытаетесь отладить их работу.

capzap
19.03.2013, 14:41
Вы применяете ФБ для контроллеров ОВЕН на контроллерах не ОВЕН
(PLC WinNT). Поэтому не работает, а именно не открывается порт. Изучите биб-ку SysLibCom.
Вот только зачем? Вы берёте заведомо работающие ФБ и пытаетесь отладить их работу.

не совсем верно, ФБ должны работать везде, а вот бибка SysLibCom и др. должны браться не с диска к плк, а из папки специально предназначенной для ВинНТ

kost2
19.03.2013, 15:17
не совсем верно, ФБ должны работать везде, а вот бибка SysLibCom и др. должны браться не с диска к плк, а из папки специально предназначенной для ВинНТ

сейчас глянул в менеджере библиотек - библиотеки SysLibCom и SysLibCallback берутся с папки C:\Program Files\Common Files\CAA-Targets\3S\Lib_PLCWinNT, видимо пути сами изменились когда я менял целевую платформу, хотя я не знал об этом нюансе. Остальные овенвские, но как я понимаю до них дело-то даже не доходит, а библиотека ComService просто обертка вызовов библиотеки SysLibCom, впрочем если попробовать обходиться без нее - а напрямую вызывать функции из SysLibCom все равно не пашет

capzap
19.03.2013, 15:23
а почему порт именно второй, скрин покажите в диспетчере оборудования, какие СОМ-порты у Вас имеются на ПК

kost2
19.03.2013, 16:28
создал сейчас новый проект сразу под winnt с его syslibcom
с простейшим содержимым:

IF port_opened=0 THEN
Settings.Port:=3;
Settings.dwBaudRate:=115200;
Settings.byParity:=0;
Settings.dwTimeout:=0;
Settings.byStopBits:=0;
Settings.dwBufferSize:=0;
Settings.dwScan:=0;

handle:=SysComOpen(Settings.Port);
IF handle<>INVALID_HANDLE THEN
res:=SysComSetSettings(handle,ADR(Settings));
END_IF
ELSE
res:=SysComClose(handle);
END_IF

вроде заработало.....
два дня на это убил...

означает ли это что я не могу юзать овеновскую modbus.lib с ВинНТ?

capzap
19.03.2013, 16:31
означает ли это что я не могу юзать овеновскую modbus.lib с ВинНТ?

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

Yegor
20.03.2013, 12:15
означает ли это что я не могу юзать овеновскую modbus.lib с ВинНТ?Напротив, можете.

Ну, вот я заставил PLCWinNT читать служебные данные с мегафоновского USB-свистка. Виртуальный COM16:
PROGRAM PLC_PRG
VAR
hPort: DWORD := 0;
settings: COMSETTINGS;
buf: STRING;
END_VAR

IF hPort = 0 THEN
settings.byParity := 0;
settings.byStopBits := 1;
settings.dwBaudRate := 115200;
settings.dwBufferSize := 0;
settings.dwScan := 0;
settings.dwTimeout := 0;
settings.Port := 16;
hPort := SysComOpen(16);
IF hPort <> 0 THEN
SysComSetSettings(hPort, ADR(settings));
END_IF
ELSE
SysComRead(hPort, ADR(buf), SIZEOF(buf) - 1, 0);
END_IF

kgsh82
26.03.2013, 10:06
не совсем верно, ФБ должны работать везде, а вот бибка SysLibCom и др. должны браться не с диска к плк, а из папки специально предназначенной для ВинНТ

Поддержка некоторых библиотек происходит на уровне прошивки ПЛК. Например UNM (Где-то на форуме тема есть про это). Вот я и предположил, что биб-ка Modbus из этой серии....тем более не работает на ПК