Автор |
Повідомлення |
Повідомлення створено: 12. 11. 2009 [17:21]
|
roman
Roman Savochenko
Moderator Contributor Developer
Зареєстрован(а) с: 12.12.2007
Повідомлення: 3750
|
shults wrote:
вроде вижу значение параметра, иногда выскакивает ошибка СRC
Такое бывает при малом времени символа, у Вас 0.57. Поставьте порядка 5 мс, и если будет нормально пробуйте уменьшать.
Learn, learn and learn better than work, work and work.
|
Повідомлення створено: 07. 06. 2010 [13:38]
|
gsxr
Андрей Ехлаков
Зареєстрован(а) с: 03.03.2010
Повідомлення: 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?
В чем я ошибаюсь?
|
Повідомлення створено: 07. 06. 2010 [14:24]
|
almaz
Almaz Karimov
Contributor
Зареєстрован(а) с: 25.09.2008
Повідомлення: 516
|
Это как раз и означает, что ModBus slave устройство можно сделать на OpenSCADA. Ведь любое slave-устройство - это сервер, master-устройство - клиент.
Образцы вроде в демо-проекте есть. Даже если нет - пробуйте делать - всё получится.
[Повідомлення редагувалось 2 раз(ів), останній раз 07.06.2010 в 14:26.]
21 век - век повсеместной автоматизации. Главное - во благо всем людям.
|
Повідомлення створено: 07. 06. 2010 [14:27]
|
gsxr
Андрей Ехлаков
Зареєстрован(а) с: 03.03.2010
Повідомлення: 58
|
"almaz" wrote:
Это как раз и означает, что ModBus slave устройство можно сделать на OpenSCADA. Ведь любое slave-устройство - это сервер, master-устройство - клиент.
Образцы вроде в демо-проекте есть. Даже если нет - пробуйте делать - всё получится.
Вы правы, я почему то считал что сервер это мастер...
Что я сделал:
Создал входной транспорт
Создал узел в Транспортные протоколы -> Modbus
по умолчанию в "узле" были такие "данные":
Я их удалил, создал свою переменную:
Теперь я могу ее менять из другого modbus master устройства через TCP?
Как к ней обращаться?
|
Повідомлення створено: 07. 06. 2010 [14:45]
|
almaz
Almaz Karimov
Contributor
Зареєстрован(а) с: 25.09.2008
Повідомлення: 516
|
На 188 контроллере пишете на С? Тогда по стандарту ModBus TCP посылаете запрос на соответствующий IP адрес и порт. Получаете ответ и расшифровываете.
Кстати, оригинально делать мастер на устаревшем x86 компе. Сечас же есть намного мощнее x86 системы на которых OpenSCADA будет работать и тогда не нужно будет возиться с байтами в транспорте.
[Повідомлення редагувалось 1 раз(ів), останній раз 07.06.2010 в 14:50.]
21 век - век повсеместной автоматизации. Главное - во благо всем людям.
|
Повідомлення створено: 07. 06. 2010 [14:56]
|
gsxr
Андрей Ехлаков
Зареєстрован(а) с: 03.03.2010
Повідомлення: 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)?
[Повідомлення редагувалось 1 раз(ів), останній раз 07.06.2010 в 15:07.]
|
Повідомлення створено: 07. 06. 2010 [15:23]
|
almaz
Almaz Karimov
Contributor
Зареєстрован(а) с: 25.09.2008
Повідомлення: 516
|
Чтобы сохранялись изменения в проекте откройте доступ к БД проекта на запись (/root/.openscada, /home/user/.openscada, /var/spool/openscada).
Адреса регистров начинаются с 0. NetID - адрес в сети ModBus, по скриншотам 1.
[Повідомлення редагувалось 4 раз(ів), останній раз 07.06.2010 в 15:39.]
21 век - век повсеместной автоматизации. Главное - во благо всем людям.
|
Повідомлення створено: 07. 06. 2010 [15:49]
|
roman
Roman Savochenko
Moderator Contributor Developer
Зареєстрован(а) с: 12.12.2007
Повідомлення: 3750
|
"gsxr" wrote:
Такие как f_frq, f_start, f_stop?
Такие как эти имеют специальное назначение.
"gsxr" wrote:
про 7188E2:
В модбасовском хейдере их сдк нашел следующее описание фукции:
SDK на что?
Вы что вообще хотите?
Learn, learn and learn better than work, work and work.
|
Повідомлення створено: 07. 06. 2010 [16:29]
|
gsxr
Андрей Ехлаков
Зареєстрован(а) с: 03.03.2010
Повідомлення: 58
|
"roman" wrote:
SDK на что?
Вы что вообще хотите?
SDK корпорации icpdas для создания приложений на контроллере icpcon7188E2.
Их функция хочет знать некий iRemoteMemoryBaseAddress: register base address of device that you want to deal.
Вот я и не могу понять что это и как обратиться с помощью этой фукнции к OpenScada для изменения созданной мной переменной cnt (см. на скриншотах выше).
|
Повідомлення створено: 07. 06. 2010 [17:20]
|
roman
Roman Savochenko
Moderator Contributor Developer
Зареєстрован(а) с: 12.12.2007
Повідомлення: 3750
|
Вам зачем такая каракатица, где контроллер пишет на верхний уровень?
И вопрос о том, что имело в виду API, не имеющее никакого отношения к OpenSCADA, в контексте стандартного ModBus тут не уместен. Изучайте документацию того SDK.
Learn, learn and learn better than work, work and work.
|