Стартовая страница › Форумы › Взаимодействие с устройствами › управление из скады выходами мдвв
- В этой теме 38 ответов, 4 участника, последнее обновление 9 лет, 6 месяцев назад сделано
manjey73.
-
АвторЗаписи
-
15.02.2017 в 10:50 #4586
manjey73УчастникК сожалению под руками нет МДВВ. адресация с 0 или с 1 у разных производителей по разному. Овен адресует с 0, SCADA с 1, поэтому и приращение. Только у вас как-то наоборот, ведь 50-й для МДВВ у Овен это должен быть 51 в SCADA, а вы 49-й вписали и попали куда надо…. даже странно.
15.02.2017 в 11:19 #4587
MikhailМодераторпишет не в тот адрес это первое, вместо 50 почему то пишет в 51
Существует некоторая путаница, т.к. в некоторых случаях адресация начинается с 1, а в некоторых с 0. Поэтому полезно проверять отправляемые данные.
Рапида использует 0х006, а в документации на мдвв написано, что запись в регистры осуществляется функцией 0х10.
Функция 10 отправляется Коммуникатором, если для команды стоит признак Множественная.
15.02.2017 в 11:26 #4588
manjey73УчастникТеперь стало понятнее почему регистр 1 а признак Множественная, проверил на ПР. так и есть. функция 10.
15.02.2017 в 11:26 #4589
MikhailМодераторОтправляю команду со значением 1
В документации на странице 37 сказано, что надо отправлять значение от 0 до 1000 по адресам регистров от 0 до 7 (от 1 до 8 в настройках Коммуникатора).
-
Ответ изменён 9 лет, 8 месяцев назад пользователем
Mikhail.
15.02.2017 в 11:28 #4591
MikhailМодераторТеперь стало понятнее почему регистр 1 а признак Множественная
Вообще, у производителя странная логика включать один выход командой Write Multiple Registers
15.02.2017 в 11:37 #4593
manjey73УчастникОна не странная, возможно проблема а наличии места в прошивке, поэтому использовали одну команду Modbus. А там в приборе еще и Овен протокол прошит и DCON (может быть) плюс всякие настроечные параметры.
Отсюда и урезания видимо…15.02.2017 в 15:30 #4596alsergeevich
УчастникОт 0 до 1000 надо значение отправлять если управлять одним входом, а я в шаблоне пока записал только маску выходов, если в неё отправить 1 то это соответствует выходу 1. Значит сейчас в шаблоне поменяю на множественную команду и по идее должно всё заработать. Ушёл проверять.
15.02.2017 в 15:38 #4597alsergeevich
УчастникШаблон:
<?xml version=»1.0″ encoding=»utf-8″?>
<DevTemplate>
<ElemGroups>
<ElemGroup active=»true» tableType=»HoldingRegisters» address=»50″ name=»выходы»>
<Elem name=»out» type=»ushort» byteOrder=»01234567″ />
</ElemGroup>
<ElemGroup active=»true» tableType=»HoldingRegisters» address=»51″ name=»входы»>
<Elem name=»in» type=»ushort» byteOrder=»01234567″ />
</ElemGroup>
</ElemGroups>
<Cmds>
<Cmd tableType=»HoldingRegisters» multiple=»true» address=»49″ elemCnt=»1″ cmdNum=»1″ name=»on_out» />
</Cmds>
</DevTemplate>
Вот что отправляет :
10 10 00 31 00 01 02 00 00 62 21
Расшифровка:
10 Slave address 0x10 (16)
10 Function code 0x10 (16) — Write Multiple Registers
00 31 Starting address 0x0032 (50)
00 01 Quantity 0x0001 (1)
02 Byte count 0x02 (2)
00 00 Registers value 0x0000 (0)
62 21 CRC 0x6221 (25121)
Всё ведь верно теперь, но всё равно не работает. Может я где-то ошибку делаю ?15.02.2017 в 15:41 #4598alsergeevich
Участник2017-02-15 17:41:43 Команда КП 61 «mymodbustest», тип: KpModbus, адрес: 16
Команда «on_out»
Отправка (11): 10 10 00 31 00 01 02 00 00 62 21
Приём (5/5): 10 90 02 9D C4
Ошибка устройства: [02] ILLEGAL DATA ADDRESS!
Теперь с адресом, что-то не так ?15.02.2017 в 16:46 #4599
manjey73Участнику вас вместо 1 отправляется 0 почему-то
00 00 Registers value 0x0000 (0)Как именно вы отправляете 1 ?
Попробуйте использовать формулу.
fRevers — название формулытело формулы
public double fRevers (int rev)
{
float q = Convert.ToSingle(CmdVal);
byte[] f = new byte[4];
byte[] o = new byte[4];
f = BitConverter.GetBytes(q);
Array.Copy(f,0,o,0,4);
if (rev == 1)
{
Array.Copy(f, 0, o, 1, 1);
Array.Copy(f, 1, o, 0, 1);
Array.Copy(f, 2, o, 3, 1);
Array.Copy(f, 3, o, 2, 1);
}
//else o = f;
Array.Resize(ref o, 8);
Double ou = BitConverter.ToDouble(o,0);
return ou;
}В Канале управления поставьте Использовать формулу и напишите fRevers(1)
Это для float в общем, но целые числа тоже должен отправить.
Попытки использовать Стандартную команду непосредственно в Коммуникаторе у вас ни к чему не приведут, там только бинарную команду надо отправлять или 00 01 или наоборот 01 00 (не помню)Хотя перестановка байт для float может не прокатить…
15.02.2017 в 17:06 #4603
manjey73УчастникДа, проверил на ПР200. В общем надо переставлять байты формулой, так как используется команда 0x10 и из коммуникатора отсылается double, в результате посылка идет не тех значений.
Бинарная в шестнадцатиричном значении 0001 слитно отправит 1
Формула для float не подойдет15.02.2017 в 17:30 #4606
manjey73Участникpublic double iRevers (int rev)
{
int q = Convert.ToInt32(CmdVal);
byte[] f = new byte[2];
byte[] o = new byte[2];
f = BitConverter.GetBytes(q);
Array.Copy(f,0,o,0,2);
if (rev == 1)
{
Array.Copy(f, 0, o, 1, 1);
Array.Copy(f, 1, o, 0, 1);
}
Array.Resize(ref o, 8);
Double ou = BitConverter.ToDouble(o,0);
return ou;
}Использовать формулу, записать iRevers(1)
15.02.2017 в 18:54 #4611
MikhailМодераторТеперь с адресом, что-то не так ?
Уточните, пожалуйста, какую из описанных в документации команд Вы пробуете отправить?
15.02.2017 в 18:55 #4612
MikhailМодераторПри отправке Множественной команды в Коммуникаторе можно использовать как стандартную, так и бинарную команду. В бинарной можно явно указать отправляемые байты.
16.02.2017 в 06:56 #4618alsergeevich
УчастникОтправляю бинарную команду со значением 0011
Отправляются такие данные:
10 10 00 31 00 01 02 00 11 A2 2D10 Slave address 0x10 (16)
10 Function code 0x10 (16) — Write Multiple Registers
00 31 Starting address 0x0032 (50)
00 01 Quantity 0x0001 (1)
02 Byte count 0x02 (2)
00 11 Registers value 0x0011 (17)
A2 2D CRC 0xA22D (41517)Но опять пишет:
Отправка (11): 10 10 00 31 00 01 02 00 11 A2 2D
Приём (5/5): 10 90 02 9D C4
Ошибка устройства: [02] ILLEGAL DATA ADDRESS!Отправляю номер команды 1 как в шаблоне, значение 0х0011.
Команда на запись 0х10 как в доках, запись в регистры, всё верно.
Адрес регистра 50, маска выходов, как в доках.
Почему выскакивает эта Ошибка устройства: [02] ILLEGAL DATA ADDRESS!, какой адрес не верный или данные по адресу ? -
Ответ изменён 9 лет, 8 месяцев назад пользователем
-
АвторЗаписи
- Для ответа в этой теме необходимо авторизоваться.