EnglishУкраїнськаmRussian
Login/New
Topic with many replies

Снова ModBus


Author Message
Written on: 12. 11. 2009 [17:21]
roman
Roman Savochenko
Moderator
Contributor
Developer
registered since: 12.12.2007
Posts: 3750
shults wrote:

вроде вижу значение параметра, иногда выскакивает ошибка СRC

Такое бывает при малом времени символа, у Вас 0.57. Поставьте порядка 5 мс, и если будет нормально пробуйте уменьшать.

Learn, learn and learn better than work, work and work.
Written on: 07. 06. 2010 [13:38]
gsxr
Андрей Ехлаков
registered since: 03.03.2010
Posts: 58
Кусок из вики:
2.2. Обслуживание запросов по протоколу ModBus
Входная часть обслуживания запросов к модулю протокола осуществляет проверку и обработку запросов посредством объектов узлов, предусмотренных модулем (рис.1). Фактически реализуется механизм, позволяющий выполнять системой OpenSCADA роль сервера ModBus/TCP или подчинённого устройства ModBus/RTU и ModBus/ASCII. Таким образом система OpenSCADA получает возможность использоваться в роли любого участника сетей ModBus.

Означает ли это что нельзя сделать из опенскады slave modbus устройство работающее по TCP? Или это означает что сервер modbus tcp аналогичен роли slave в modbus rtu?

Т.е мне необходимо сделать связь: (icpcon7188 в режиме master <-> TCP modbus <-> OpenScada в режиме slave).
В руководстве по быстрому старту описан процесс опроса slave modbus tcp устройства скадой, работающей в режиме master tcp modbus. Ни у кого нет примера работы со скадой в режиме slave?

В чем я ошибаюсь?
Written on: 07. 06. 2010 [14:24]
almaz
Almaz Karimov
Contributor
registered since: 25.09.2008
Posts: 516
Это как раз и означает, что ModBus slave устройство можно сделать на OpenSCADA. Ведь любое slave-устройство - это сервер, master-устройство - клиент.
Образцы вроде в демо-проекте есть. Даже если нет - пробуйте делать - всё получится.

[This article was edited 2 times, at last 07.06.2010 at 14:26.]

21 век - век повсеместной автоматизации. Главное - во благо всем людям.
Written on: 07. 06. 2010 [14:27]
gsxr
Андрей Ехлаков
registered since: 03.03.2010
Posts: 58
"almaz" wrote:

Это как раз и означает, что ModBus slave устройство можно сделать на OpenSCADA. Ведь любое slave-устройство - это сервер, master-устройство - клиент.
Образцы вроде в демо-проекте есть. Даже если нет - пробуйте делать - всё получится.

Вы правы, я почему то считал что сервер это мастер...

Что я сделал:
Создал входной транспорт
http://content.foto.mail.ru/mail/andrejea2/84/s-85.jpg
Создал узел в Транспортные протоколы -> Modbus
http://content.foto.mail.ru/mail/andrejea2/84/s-86.jpg
http://content.foto.mail.ru/mail/andrejea2/84/s-87.jpg
по умолчанию в "узле" были такие "данные":
http://content.foto.mail.ru/mail/andrejea2/84/s-88.jpg
Я их удалил, создал свою переменную:
http://content.foto.mail.ru/mail/andrejea2/84/s-89.jpg

Теперь я могу ее менять из другого modbus master устройства через TCP?
Как к ней обращаться?
Written on: 07. 06. 2010 [14:45]
almaz
Almaz Karimov
Contributor
registered since: 25.09.2008
Posts: 516
На 188 контроллере пишете на С? Тогда по стандарту ModBus TCP посылаете запрос на соответствующий IP адрес и порт. Получаете ответ и расшифровываете.
Кстати, оригинально делать мастер на устаревшем x86 компе. Сечас же есть намного мощнее x86 системы на которых OpenSCADA будет работать и тогда не нужно будет возиться с байтами в транспорте.

[This article was edited 1 times, at last 07.06.2010 at 14:50.]

21 век - век повсеместной автоматизации. Главное - во благо всем людям.
Written on: 07. 06. 2010 [14:56]
gsxr
Андрей Ехлаков
registered since: 03.03.2010
Posts: 58
Почему после перезапуска скады с сохранением восстанавливаются переменные во вкладке "данные" узла транспортного протокола modbus?
Такие как f_frq, f_start, f_stop?

про 7188E2:
В модбасовском хейдере их сдк нашел следующее описание фукции:

int ModbusTCP_Master2Slave(int iIndex,unsigned char cNetID, unsigned char cFunction,
int iLocalMemoryBaseAddress, int iRemoteMemoryBaseAddress,
int iIOCount, unsigned long lTimeout);
/*
This functions can send Modbus/TCP request to Modbus/Slave devices.
1. You just only change internal registers (iMemory_DI, iMemory_DO,
iMemory_AI, iMemory_AO) then call this function to send out request to turn on coils
or write analog registers.
2. Sends out

iIndex:
0~7. The library can assign totaly 8 connections.
Each connection's configuration is defined by
function ModbusTCP_Init.

cNetID: 0~0xFF, the NetID (Station Number) of destination Modbus/Slave device.
cFunction: 1 ==> Reads several DO from device, then puts to iMemory_DO.
2 ==> Reads several DI from device, then puts to iMemory_DI.
3 ==> Reads several AO from device, then puts to iMemory_AO.
4 ==> Reads several AI from device, then puts to iMemory_AI.
5 ==> Writes one DO from iMemory_DO to device.
6 ==> Writes one AO from iMemory_AO to device.
15 ==> Writes several DO from iMemory_DO to device.
16 ==> Writes several AO from iMemory_AO to device.

102 ==> Reads several DI from device, then puts to iMemory_DO (Use Fun 2).
104 ==> Reads several AI from device, then puts to iMemory_AO (Use Fun 4).
105 ==> Writes one DO from iMemory_DI to device's DO (Use Fun 5).
106 ==> Writes one AO from iMemory_AI to device's AO (Use Fun 6).
115 ==> Writes several DO from iMemory_DI to device's DO (Use Fun 15).
116 ==> Writes several AO from iMemory_AI to device's AO (Use Fun 16).

iLocalMemoryBaseAddress: internal register base address that you want to deal.
iRemoteMemoryBaseAddress: register base address of device that you want to deal.
iIOCount: count of coils or registers that you want to deal.
lTimeout: 1~65535. unit: ms
timeout to receive response from Modbus/Slave device.
return:
0: No Error.
Send the command ok, and receive the response ok.
1: send command ok,
begin to wait response next time.
2: send command ok,
not receive the response yet,
keep to receive the response next time.
-1: connect to slave device error,
try to re-connect next timer interval.
-2: connection is not builded. Cannot send command.
-3: connect to the device ok,
send command error,
try to re-connect the device next time interval.
-4: send command ok,
wait response timeout,
try to re-connect the device next time interval.
-5: send command ok,
receive response error.
-6: the connection is closed or not initialized.
You must call ModbusTCP_Init first then this function.
*/

Как я понял мне необходимо cFunction 6, чтобы записать значение переменной в скаду.
Но какой iRemoteMemoryBaseAddress? Т.е icpcon будет обращаться к скаде с попыткой записи в некий адрес памяти. Как его узнать для созданной переменной(вкладка "данные", узла транспотного протокола modbus)?

[This article was edited 1 times, at last 07.06.2010 at 15:07.]
Written on: 07. 06. 2010 [15:23]
almaz
Almaz Karimov
Contributor
registered since: 25.09.2008
Posts: 516
Чтобы сохранялись изменения в проекте откройте доступ к БД проекта на запись (/root/.openscada, /home/user/.openscada, /var/spool/openscada).
Адреса регистров начинаются с 0. NetID - адрес в сети ModBus, по скриншотам 1.

[This article was edited 4 times, at last 07.06.2010 at 15:39.]

21 век - век повсеместной автоматизации. Главное - во благо всем людям.
Written on: 07. 06. 2010 [15:49]
roman
Roman Savochenko
Moderator
Contributor
Developer
registered since: 12.12.2007
Posts: 3750
"gsxr" wrote:

Такие как f_frq, f_start, f_stop?

Такие как эти имеют специальное назначение.

"gsxr" wrote:

про 7188E2:
В модбасовском хейдере их сдк нашел следующее описание фукции:

SDK на что?
Вы что вообще хотите?

Learn, learn and learn better than work, work and work.
Written on: 07. 06. 2010 [16:29]
gsxr
Андрей Ехлаков
registered since: 03.03.2010
Posts: 58
"roman" wrote:

SDK на что?
Вы что вообще хотите?

SDK корпорации icpdas для создания приложений на контроллере icpcon7188E2.
Их функция хочет знать некий iRemoteMemoryBaseAddress: register base address of device that you want to deal.
Вот я и не могу понять что это и как обратиться с помощью этой фукнции к OpenScada для изменения созданной мной переменной cnt (см. на скриншотах выше).
Written on: 07. 06. 2010 [17:20]
roman
Roman Savochenko
Moderator
Contributor
Developer
registered since: 12.12.2007
Posts: 3750
Вам зачем такая каракатица, где контроллер пишет на верхний уровень?
И вопрос о том, что имело в виду API, не имеющее никакого отношения к OpenSCADA, в контексте стандартного ModBus тут не уместен. Изучайте документацию того SDK.

Learn, learn and learn better than work, work and work.



5746