Страница 1 из 1

Настройки для стыковки InTouch c Modbus устройством

СообщениеДобавлено: Пт авг 17, 2007 7:06 pm
arkonst
Подскажите пожалуйста,как в общем случае настраивается сервер ввода вывода Modbus для InTouch. Я установил этот сервер,начал настраивать конфигурацию.Короче русской документации на него не нашел,каким образом его настроить ваще не пойму.там настройки порта еще понятно..а как дальше???Может у кого есть русская документация на этот сервер ввода вывода DASMBSerial&

СообщениеДобавлено: Пн авг 20, 2007 1:00 pm
Admin
Уважаемый arkonst,

После установки сервера его конфигурирование осуществляется с помощью System Management Console (Start-Programs-Wonderware)
Сервер называется ArchestrA.DASMBSerial.2
Кликаете на нем правой кнопкой и добавляете сначала объект
ComPort, а затем - вложенный в него объект PLC.
По настройкам порта - они там стандартные, скорость, режим передачи
(если что то непонятно - спрашивайте конкретно)
В настройках ПЛК задаются 8 параметров:
•Slave Address - адрес устройста, по умолчанию 1 макс 247. Используется если на последовательной шине располагаются несколько устройств.
•Use Concept Data Structures Real(Long) - 0 или 1. Используется если данные хранятся в регистрах устройства в формате real(long).
•Bit Order - порядок бит, передаваемых устройству. 1 - старший, 16- младший.
•String variable Style - указывает формат данных, хранимых в регистрах устройства. Full length - "через пробел" C style - строки оканчиваются символом null Pascal Style - строка включает свою длину.
•Register Type - тип регистров.
•Maximum Address Range - указывает адресное пространство устройства - максимальный доступный адрес.
→Input coil read - макс. число каналов в/в, доступных по чтению.
→Coil write - макс. число каналов в/в, доступных по записи.
→Holding registers read - макс. число регистров, доступных по чтению.
→Holding registers write - макс. число регистров, доступных по записи.
•Block I/O Size - определяет максимальное число параметров(регистров или канало вв) для одного запроса Modbus.

СообщениеДобавлено: Пн авг 20, 2007 8:05 pm
arkonst
А какой объект PLC мне выбрать там их вроде 4 всего...какой конкретно имеет общие характеристики? Как я понял,может я что-то не так понял,но первые три мне не подходят..так как они для вполне конкретных PLC,а последняя под названием ModbusPLC это то что я должен добавить и настроить??правильно я думаю?...И еще...я вообще впервые в своей практике сталкиваюсь с Modbus устройствами.Каким образом я должен завести сигналы modbus в среду исполнения IN Touch от эмулятора modbus slave??Как при этом должен конфигурироваться Modbus Slave и как In Toch для приема сигналов от него.

СообщениеДобавлено: Вт авг 21, 2007 11:30 am
Admin
Уважаемый arkonst,

Все правильно, ModbusPLC Вам подходит. Для этого типа объектов
необходимо дополнительно указать
•Register Size (digits) - размер регистров устройства.
4-digit если макс. значение регистра 999.
5-digit если 9999.
6-digit если 65536.
Остальное - как написано выше.

После того как Вы настроите параметры, обратите внимание
у устройства имеются еще две вкладки:
Device Groups и Device Items, по умолчанию они пустые, а их
необходимо заполнить.
Добавьте хотя бы одну группу устройств - Topic_0 в Device Groups.
Укажите в Device Items соответсвия (aliases) регистров устройства именам, которые будут видны внешним приложениям (например Item_0, AA666). Это все по настройке сервера.

Видите плагины наверху? Вот с их помощью и происходят все коммуникации c внешними приложениями.

Если Вы категорически не хотите использовать OPC, используйте DDE.
В Интаче создаете имя доступа ( Access Name-Add-Test(Node Name:пусто,Application Name:DASMBSerial,Topic Name:Topic_0))
создаете тэг типа I/O, назначаете ему имя доступа Test, указываете
Item Name:Item_0 и читаете туда значения, например с помощью функции WWRequest().

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

P.S.
Вот Вы спрашиваете "как конфигурировать Modbus_PLC" - это Вам виднее, конфигурируйте в соответствии с используемым устройством,
а если чего то не понимаете - лучше оставьте по умолчанию )

PP.S. У меня к Вам вопрос. Как у Вас с программированием?
понимаете ли вы синтаксис C, хотя бы на базовом уровне?

СообщениеДобавлено: Вт авг 21, 2007 12:18 pm
arkonst
Спасибо большое за ответ.Более менее становиться ясно.Конечно этот Modbus, с ним не все так просто.Ранее я с ним не работал, поэтому столько трудностей.По поводу Вашего вопроса,по С у меня есть базовые понятия, но так как на практике использовать не доводилось,я не знаю на сколько эти базовые понятия полны у меня.

СообщениеДобавлено: Вт авг 21, 2007 1:12 pm
Admin
Уважаемый arkonst,

Несколько слов о Modbus..

Протокол Modbus это весьма простой протокол, использующий метод «Запрос»/«Ответ». Запросы посылает только устройство-мастер, а устройство-слэйв формирует ответ, при условии что запрос сформирован верно.
Запрос (packet) Modbus состоит из последовательности битов, включающей значимые биты и контрольную сумму. Последовательность значимых битов, зависит в свою очередь от используемой Modbus-функции. Структура запроса и последовательностей значимых битов для основных функций, используемая в Modbus описана в файле defs.h
Основные функции протокола ModBbus:
F=3 (0x03) (Read Holding Registers)
F=6 (0x06) (Write Single Register)
F=16 (0x10) (Write Multiple Registers)
F= 43 (0x2B) (Read Device Identification)

Ниже приведены фрагменты кода на С из программы запрашивающей соединение c устройством по протоколу Modbus над TCP (полностью код не привожу т.к. TCP Вам не подходит)

файл определений: defs.h
Код: Выделить всё
#define uint8 unsigned char
#define uint16 unsigned short
/*ModBus Header*/
typedef struct {
  uint16 TransactionID;
  uint16 ProtocolID;
  uint16 Len;
} typeMBAP;

/*F3: Read Holding Registers*/
typedef struct {
  uint16 Addr;
  uint16 Count;
} typeF3Request;

typedef struct {
  uint8 Len;
  uint16 Data[];
} typeF3Response;

/*F6: Write Single Register*/
typedef struct {
  uint16 Addr;
  uint16 Data;
} typeF6Request;

typedef struct {
  uint16 Addr;
  uint16 Data;
} typeF6Response;

/*F16: Write Multiple registers*/
typedef struct {
  uint16 Addr;
  uint16 Count;
  uint8 Len;
  uint16 Data[];
} typeF16Request;

typedef struct {
  uint16 Addr;
  uint16 Count;
} typeF16Response;

/*F43: Read Device Identification*/
typedef struct {
  uint8 MEIType;
  uint8 IDCode;
  uint8 ObjectID;
} typeF43Request;

/*ModBus packet structure*/
typedef struct {
  typeMBAP MBAP;
  uint8 Slave;
  uint8 FCode;
  union {
    typeF3Request   F3Req;
    typeF3Response  F3Rsp;
    typeF6Request   F6Req;
    typeF6Response  F6Rsp;
    typeF16Request  F16Req;
    typeF16Response F16Rsp;
    typeF43Request  F43Req;
    uint8           ExeptionCode;
    };
} typeMB;


Внутри основной программы процедура "Запрос/Ответ" описывается так:
Код: Выделить всё
/************************ЗАПРОС*********************/
  /*подготовка ModBus структуры для чтения регистров функцией F=3*/
  send_leng = sizeof(typeMBAP)+2+sizeof(typeF3Request);  /*длина пакета*/
  packReq = (typeMB*)malloc(send_leng);
  packReq->FCode = 3;  /*номер функции*/
  packReq->F3Req.Addr = swap_byte(0);  /*начальный адрес регистров, в обратном порядке*/
  packReq->F3Req.Count = swap_byte(8);  /*количество запрашиваемых регистров, в обратном порядке*/
  packReq->Slave = 1;
  packReq->MBAP.TransactionID = 0;
  packReq->MBAP.ProtocolID = 0;
  packReq->MBAP.Len = swap_byte(sizeof(typeF3Request)+2);
  err = send(sock, (char*)packReq, send_leng, 0);  /*передача пакета*/
/********************ОТВЕТ*************************/
  recv_leng = sizeof(typeMBAP)+2+sizeof(typeF3Response)+
              swap_byte(packReq->F3Req.Count) * 2;  /*вычисление предполагаемой длины ответа*/
  packRsp = (typeMB*)malloc(recv_leng);
  err = recv(sock, (char*)packRsp, recv_leng, 0);  /*прием ответа*/
 


Вот и весь Modbus, запрос это PacketReq, ответ приходит в PacketRsp.
Должен Вас предупредить, если разберетесь с этим, разучитесь пользоваться мышью.

СообщениеДобавлено: Ср авг 22, 2007 12:24 pm
arkonst
Подскажите пожалуйста, устанавливаю DASever все вроде ок, конфигурирую его и т.п. А на следующий день при изменении конфигурации он пишет "Отказано в доступе",а значек сервера становиться вместо желтого серым. с чем это связано и как можно разрешить этот вопрос? связано ли это с лицензиями?

СообщениеДобавлено: Ср авг 22, 2007 1:29 pm
Admin
Уважаемый arkonst,

почитайте логи, они доступны через ту же Archestra System Management Console - Log Viewer. Должна же быть причина отказа
Понимаете, если бы он не нашел лицензию - то сначала сообщил об этом, а потом все равно запустился бы в демо режиме.

СообщениеДобавлено: Ср авг 22, 2007 1:41 pm
arkonst
Вот в точности то что выдает Log. Но только я мало что могу в этом понять. Тут приведены 4 последних отказа.Просто дело еще вот в чем, я то нашел как с этим бороться,но получаеться уж больно накладно.Приходиться удалять полностью InTouch и дас сервер, а потом заново устанавливать...тогда все опять работает.Причем при удалении только дас сервера без удаления интача..ничего не выходит,приходиться удолять все.Это конечно неудобно очень...и явно не здоровое что-то..не могу понять что.


2402 22.08.2007 8:18:54 3312 3328 Error DASConfigAccess From msxml3.dll. Отказано в доступе.
. Отказано в доступе. caught at line 1746 in IOSrvCfgPersist.cpp (in U:\DasToolkitDev\src\DASToolkit\DASConfigAccess\).
2403 22.08.2007 8:18:54 3312 3328 Error DASConfigAccess From Отказано в доступе.
. Отказано в доступе.
. Отказано в доступе. raised at line 660 in IOSrvCfgPersist.cpp (in U:\DasToolkitDev\src\DASToolkit\DASConfigAccess\).
2404 22.08.2007 8:18:54 3312 3328 Error DASConfigAccess From Отказано в доступе.
. Отказано в доступе.
. Отказано в доступе. caught at line 662 in IOSrvCfgPersist.cpp (in U:\DasToolkitDev\src\DASToolkit\DASConfigAccess\).
2405 22.08.2007 8:18:54 3200 3204 Error DefaultPackageHost From Отказано в доступе.
. Отказано в доступе.
. Отказано в доступе. raised at line 2382 in DASPackage.cpp (in U:\DasToolkitDev\src\DASToolkit\DASConfigAccess\DefaultPackageHost\).
2406 22.08.2007 8:18:54 3200 3204 Error DefaultPackageHost From Отказано в доступе.
. Отказано в доступе.
. Отказано в доступе. caught at line 2208 in DASPackage.cpp (in U:\DasToolkitDev\src\DASToolkit\DASConfigAccess\DefaultPackageHost\).

СообщениеДобавлено: Чт авг 23, 2007 12:55 pm
Admin
Уважаемый arkonst,
Действительно накладно получается, мягко говоря )
А вообще я Вам не советую переустанавливать лишний раз программы,
тогда уж лучше сразу целиком Винду..

Содержимое логов наводит на мысль что Вы не имеете полных прав доступа на ПК, или авторизация выполняется по сети. Возможно,
после перезагрузки сессии доступа не возобновляются автоматически.

Как Вы сохраняли конфигурацию сервера. Куда Вы ее сохранили?
Это важно, поскольку в сообщении
Error DASConfigAccess From Отказано в доступе."Отказано в доступе" это путь до конфигурационного файла, к которому у Вас нет доступа.

Диск U: сетевой чтоли - зачем он Вам потребовался ?
Как я понял на нем исходники DAS, откуда Вы их взяли - например DASPackage.cpp и как собираетесь использовать ?
Скачайте сервер для InTouch здесь http://www.InTouch.ru/support/pub/MBSerialDAServer.rar

СообщениеДобавлено: Чт авг 23, 2007 7:21 pm
arkonst
Исходники DAS у меня храняться на диске С, таким образом
C:\Program Files\Wonderware\DAServer\DASMBSerial\, по поводу диска U, его у меня нет да и в сети тоже нет,каким образом Log Viewer
его видит я тоже не понимаю. А файл DASPackage.cpp и другие с тем же расширением простым поиском по компу и так же в сети не находяться...сам не понимаю откуда они вообще ??? и для чего они нужны??? И не понятно почему тогда работать нормально начинает при полном удалении In Touch,просто переустановка сервера не помогает...да и как одно с другим связано???И почему на следующий день обрубаеться доступ, а в течении дня все нормально и после перезагрузки компа тож все работает.а на след.день все опять тоже самое.

СообщениеДобавлено: Чт авг 23, 2007 7:49 pm
arkonst
Все.Проблема решаеться как я понял , просто входом в систему под профилем созданным при установки In Touch. Под этим профилем как ни странно все начинает работать, и при входе уже с рабочим профилем работать начинает и там. Но единственное что скажу, может не это все таки решило проблему...просто я до этого удалил InTouch и не стал устанавливать,сразу попытался войти под тем профилем....Может удаление интач-а помогло...хотя вряд ли...Короче если это фигня завтра опять проявиться,то уже точно будет понятно что помогло. Объязательно напишу о результатах.может у кого-то такая проблема тоже актуальна))