Стартовая страница › Форумы › Взаимодействие с устройствами › Запись значения в ргеистр Segnetics
- В этой теме 13 ответов, 4 участника, последнее обновление 6 лет, 4 месяца назад сделано Mikhail.
-
АвторСообщения
-
19.09.2017 в 06:30 #7315p001pУчастник
День добрый.
1. Сконфигурированы каналы управления.
http://savepic.net/9933322.png
2. Сконфигурирован шаблон.
http://savepic.net/9923082.png
В устройство Segnetics записываем уставку Т или влажности по адресам (в Сегнетиксе)
— A400
— A402
Формат данных: Real
Формат данный который определяет OPC Lectus — single float — 4 byte.3. Настройки коммуникатора:
http://savepic.net/9925130.png
4. При отправке Комунад ТУ через коммуникатор — ничего не происходит. Записи нет.
http://savepic.net/9926154.png
5. Лог после отправки команды:
http://savepic.net/9914890.png
Делаю вывод что неправильно обращаюсь к контроллеру для записи в него уставки.
Через Лектус по адресам А400 и А402(hex) все записывается.
Вопрос, в чем может быть проблема?
Может надо при выполнении команды, в соответствующий канал управления поставить какую формулу для переращета/перестановки битов? Ведь все-таки Holding Register это 2 байта, а не 4.
Подскажите пожалуйста, что и куда.- Эта тема была изменена 6 лет, 7 месяцев назад от p001p.
19.09.2017 в 06:33 #7316p001pУчастник1. Сконфигурированные каналы управления
2. Сконфигурированный шаблон опроса устройства по Modbus
3. Настройки коммуникатора.
4. Лог после отправки Команды ТУ
Продублировал фотографии в надежде что они отобразятся.19.09.2017 в 16:49 #7325MikhailМодераторДобрый день!
В логе момент отправки команды, скорее всего, уже прокрутился вверх.
Ведь все-таки Holding Register это 2 байта, а не 4.
Именно. Попробуйте поставить галочку Множественная команда и задать ей 2 элемента.
И присылайте часть лога, в которой виден момент отправки.Чтобы фото отобразились нужен тег img:
19.09.2017 в 17:35 #7326p001pУчастникИменно. Попробуйте поставить галочку Множественная команда и задать ей 2 элемента.
И присылайте часть лога, в которой виден момент отправки.Так и делал.
Скажите пожалуйста, если у меня адрес HEX А400, то +1 адрес это А401? А402? А404?20.09.2017 в 07:28 #7327p001pУчастникИтак.
Немного изменили условия, чтобы можно было более детальней установить проблему.Имеется Holding Register, имя: Set, адрес в контроллере 00002, занимает 4 байта (00002-00004).
Текущее значение: 0.
Скриншот как её видит Lectus OPC.
[img]http://savepic.net/9933439.png[/img]
Задача — записать в неё значение. Любое.
Соответственно, ещё раз почитав форум, понял что существуют достаточно серьёзная проблема с записью float, ибо коммуникатор обрезает double и т.п. и т.д. Поэтому я предлагаю не вдаваться в детальные подробности организации сети и передачи переменных, ибо нужен результат.Настройки линии связи. Модбас ТСП через ЕТ-485 Новатек.
[img]http://savepic.net/9951871.png[/img]
Шаблон КП.
Так как в ПЛК адрес — 2, значит я опрашиваю на 1 больше -> 3 адрес, галочка на множ. перем. и в соответствующем окне — 2
[img]http://savepic.net/9939583.png[/img]
Значение переменной Set — 0. Задача — записать в нее что-либо.
Отправляем команду через коммуникатор:
[img]http://savepic.net/9943679.png[/img]
Значение переменной не изменилось, (осталось 0), лог ответа представлен ниже.
[img]http://savepic.net/9932415.png[/img]
Вопрос, как записывать переменные float? Вечно сидеть на int (2 byte) я не могу.
20.09.2017 в 07:36 #7330p001pУчастникНиже представлен файл конфигурации Lectus OPC.
Может он вам что-нибудь подскажет?
<Lectus_OPC_server_config_file Protect="34101"> <_COM_PORTS_> <COM1 Speed="115200" DataBits="8" Parity="NONE" StopBits="1" XONXOFF="NONE" DTR="ENABLE" RTS="ENABLE" CTS="false" DSR="false" RaiseRTS="0" DropRTS="0" ReadInterval="5"/> <COM2 Speed="115200" DataBits="8" Parity="NONE" StopBits="1" XONXOFF="NONE" DTR="ENABLE" RTS="ENABLE" CTS="false" DSR="false" RaiseRTS="0" DropRTS="0" ReadInterval="5"/> <COM3 Speed="115200"/> <COM4 Speed="115200"/> <COM11 Speed="115200" DataBits="8" Parity="NONE" StopBits="1" XONXOFF="NONE" DTR="ENABLE" RTS="ENABLE" CTS="false" DSR="false" RaiseRTS="0" DropRTS="0" ReadInterval="5"/> </_COM_PORTS_> <_ITEMS_> <Item Name="Request1" Plugin="0" Flag="1" AccessPath="" AccessRights="3" CanonicalDataType="0" AccessChange="31" EUType="0" EUInfo="0" Props_0_PropertyID="101" Props_0_DataType="8" Props_0_ItemID="" Props_0_Description="Описание узла" Props_0_Value="" Props_1_PropertyID="6" Props_1_DataType="4" Props_1_ItemID="" Props_1_Description="Частота опроса" Props_1_Value="100" Props_2_PropertyID="5000" Props_2_DataType="17" Props_2_ItemID="" Props_2_Description="COM порт" Props_2_Value="10" Props_3_PropertyID="5001" Props_3_DataType="2" Props_3_ItemID="" Props_3_Description="Адрес устройства" Props_3_Value="9" Props_4_PropertyID="5004" Props_4_DataType="2" Props_4_ItemID="" Props_4_Description="Функция чтения" Props_4_Value="1" Props_5_PropertyID="5005" Props_5_DataType="2" Props_5_ItemID="" Props_5_Description="Функция записи" Props_5_Value="15" Props_6_PropertyID="5002" Props_6_DataType="11" Props_6_ItemID="" Props_6_Description="Групповой запрос" Props_6_Value="True" Props_7_PropertyID="5999" Props_7_DataType="4" Props_7_ItemID="" Props_7_Description="Начальная фаза опроса" Props_7_Value="0" Props_8_PropertyID="5015" Props_8_DataType="8" Props_8_ItemID="" Props_8_Description="Тип подключения" Props_8_Value="Прямое подключение" Props_9_PropertyID="5027" Props_9_DataType="8" Props_9_ItemID="" Props_9_Description="Тип Slave подключения" Props_9_Value="Нет" Props_10_PropertyID="5029" Props_10_DataType="11" Props_10_ItemID="" Props_10_Description="Порядок байт - старшим байтом вперед" Props_10_Value="True" Props_11_PropertyID="5030" Props_11_DataType="11" Props_11_ItemID="" Props_11_Description="Порядок байт - старшим регистром вперед" Props_11_Value="False" Props_12_PropertyID="5052" Props_12_DataType="8" Props_12_ItemID="" Props_12_Description="Преамбула команды" Props_12_Value="" Props_13_PropertyID="5060" Props_13_DataType="11" Props_13_ItemID="" Props_13_Description="Широковещательная команда" Props_13_Value="False" Props_14_PropertyID="5073" Props_14_DataType="11" Props_14_ItemID="" Props_14_Description="Возможен ответ больше ожидаемого" Props_14_Value="False" Props_15_PropertyID="5061" Props_15_DataType="8" Props_15_ItemID="" Props_15_Description="Контрольная сумма" Props_15_Value="CRC (Modbus)" Props_16_PropertyID="5025" Props_16_DataType="11" Props_16_ItemID="" Props_16_Description="Тип устройства - Master" Props_16_Value="True" Props_17_PropertyID="5026" Props_17_DataType="11" Props_17_ItemID="" Props_17_Description="Тип устройства - Slave" Props_17_Value="False" Props_18_PropertyID="5031" Props_18_DataType="8" Props_18_ItemID="" Props_18_Description="Тип данных" Props_18_Value="Текущие данные"> <Item Name="Ask" Plugin="0" Flag="2" AccessPath="" AccessRights="3" CanonicalDataType="11" AccessChange="31" EUType="0" EUInfo="0" Props_0_PropertyID="1" Props_0_DataType="2" Props_0_ItemID="" Props_0_Description="Тип переменной" Props_0_Value="11" Props_1_PropertyID="2" Props_1_DataType="12" Props_1_ItemID="" Props_1_Description="Значение переменной" Props_1_Value="" Props_2_PropertyID="3" Props_2_DataType="2" Props_2_ItemID="" Props_2_Description="Качество переменной" Props_2_Value="" Props_3_PropertyID="4" Props_3_DataType="7" Props_3_ItemID="" Props_3_Description="Метка времени" Props_3_Value="" Props_4_PropertyID="5" Props_4_DataType="3" Props_4_ItemID="" Props_4_Description="Права доступа" Props_4_Value="3" Props_5_PropertyID="7" Props_5_DataType="3" Props_5_ItemID="" Props_5_Description="Тип(значение/перечисление)" Props_5_Value="0" Props_6_PropertyID="5003" Props_6_DataType="18" Props_6_ItemID="" Props_6_Description="Адрес переменной" Props_6_Value="1"/> </Item> <Item Name="Request2" Plugin="0" Flag="1" AccessPath="" AccessRights="3" CanonicalDataType="0" AccessChange="31" EUType="0" EUInfo="0" Props_0_PropertyID="101" Props_0_Value="" Props_1_PropertyID="6" Props_1_Value="100" Props_2_PropertyID="5000" Props_2_Value="10" Props_3_PropertyID="5001" Props_3_Value="9" Props_4_PropertyID="5004" Props_4_Value="4" Props_5_PropertyID="5002" Props_5_Value="True" Props_6_PropertyID="5999" Props_6_Value="0" Props_7_PropertyID="5015" Props_7_Value="Прямое подключение" Props_8_PropertyID="5027" Props_8_Value="Нет" Props_9_PropertyID="5029" Props_9_Value="True" Props_10_PropertyID="5030" Props_10_Value="False" Props_11_PropertyID="5052" Props_11_Value="" Props_12_PropertyID="5060" Props_12_Value="False" Props_13_PropertyID="5073" Props_13_Value="False" Props_14_PropertyID="5061" Props_14_Value="CRC (Modbus)" Props_15_PropertyID="5025" Props_15_Value="True" Props_16_PropertyID="5026" Props_16_Value="False" Props_17_PropertyID="5031" Props_17_Value="Текущие данные"> <Item Name="PV" Plugin="0" Flag="2" AccessPath="" AccessRights="1" CanonicalDataType="4" AccessChange="31" EUType="0" EUInfo="0" Props_0_PropertyID="1" Props_0_Value="4" Props_1_PropertyID="2" Props_1_Value="" Props_2_PropertyID="3" Props_2_Value="" Props_3_PropertyID="4" Props_3_Value="" Props_4_PropertyID="5" Props_4_Value="1" Props_5_PropertyID="7" Props_5_Value="0" Props_6_PropertyID="5003" Props_6_Value="2"/> </Item> <Item Name="Request3" Plugin="0" Flag="1" AccessPath="" AccessRights="3" CanonicalDataType="0" AccessChange="31" EUType="0" EUInfo="0" Props_0_PropertyID="101" Props_0_Value="" Props_1_PropertyID="6" Props_1_Value="100" Props_2_PropertyID="5000" Props_2_Value="10" Props_3_PropertyID="5001" Props_3_Value="9" Props_4_PropertyID="5004" Props_4_Value="3" Props_5_PropertyID="5005" Props_5_Value="16" Props_6_PropertyID="5002" Props_6_Value="True" Props_7_PropertyID="5999" Props_7_Value="0" Props_8_PropertyID="5015" Props_8_Value="Прямое подключение" Props_9_PropertyID="5027" Props_9_Value="Нет" Props_10_PropertyID="5029" Props_10_Value="True" Props_11_PropertyID="5030" Props_11_Value="False" Props_12_PropertyID="5052" Props_12_Value="" Props_13_PropertyID="5060" Props_13_Value="False" Props_14_PropertyID="5073" Props_14_Value="False" Props_15_PropertyID="5061" Props_15_Value="CRC (Modbus)" Props_16_PropertyID="5025" Props_16_Value="True" Props_17_PropertyID="5026" Props_17_Value="False" Props_18_PropertyID="5031" Props_18_Value="Текущие данные"> <Item Name="Set" Plugin="0" Flag="2" AccessPath="" AccessRights="3" CanonicalDataType="4" AccessChange="31" EUType="0" EUInfo="0" Props_0_PropertyID="1" Props_0_Value="4" Props_1_PropertyID="2" Props_1_Value="" Props_2_PropertyID="3" Props_2_Value="" Props_3_PropertyID="4" Props_3_Value="" Props_4_PropertyID="5" Props_4_Value="3" Props_5_PropertyID="7" Props_5_Value="0" Props_6_PropertyID="5003" Props_6_Value="2"/> </Item> </_ITEMS_> <_HDA_ITEMS_/> </Lectus_OPC_server_config_file>
20.09.2017 в 23:44 #7351MikhailМодераторесли у меня адрес HEX А400, то +1 адрес это А401? А402? А404?
0xА401 = 41985
Используйте калькулятор Windows.20.09.2017 в 23:48 #7352MikhailМодераторВ процессе отладки гораздо проще отправлять бинарную команду, в которой явно прописываете отправляемые байты. Чтобы перевести float в 16-ричную форму используйте, например, http://www.binaryconvert.com/result_float.html
Когда заработает, расскажу, как преобразовать double для отправки. Это не так сложно.21.09.2017 в 09:41 #7358p001pУчастникВ процессе отладки гораздо проще отправлять бинарную команду, в которой явно прописываете отправляемые байты. Чтобы перевести float в 16-ричную форму используйте, например, http://www.binaryconvert.com/result_float.html
Когда заработает, расскажу, как преобразовать double для отправки. Это не так сложно.Можно рассказать сразу? Работы ведутся на объекте где нету связи и очень трудно лишний раз организовывать доступ в интернет и ехать обратно на объект. С переводом из одной СС в другую проблем не возникнет. А вот с преобразованием в другой тип данных хотелось бы знать чуть заранее.
22.09.2017 в 08:31 #7364MikhailМодераторСамый быстрый способ — договориться за доп. плату о решении вопросов через удалённое подключение.
Добавьте в таблицу формул формулу MySwap и используйте её для канала управления: MySwap(Cmd).
public double MySwap(double x) { byte[] bytes1 = BitConverter.GetBytes((float)x); byte[] bytes2 = new byte[8] { bytes1[3], bytes1[2], bytes1[1], bytes1[0], 0, 0, 0, 0 }; return BitConverter.ToDouble(bytes2, 0); }
Команды нужно будет отправлять не из Коммуникатора, а из Сервера или из Вебстанции, чтобы команда была обработана с использованием формулы.
Если отправляемый в запросе порядок байт будет не такой как нужно, можно в формуле поменять индексы.В списке доработок по драйверу Модбас есть запрос на перестановку байт с помощью шаблона. Но пока эта функция не реализована.
22.09.2017 в 08:32 #7365MikhailМодераторТип бинарной команды — массив байт byte[]
Тип стандартной команды — double
Их нельзя поменять в формуле. Формула должна возвращать тип значения в зависимости от команды.05.12.2017 в 09:12 #8063DenisSSУчастникСам в шоке, но для записи float в ПЛК150 Овен, пришлось сделать вот такую загогулину. По другому не работает.
public double MySwap(double x)
{
byte[] bytes1 = BitConverter.GetBytes((float)x);
byte[] bytes2 = new byte[8]
{
0,
0,
bytes1[3],
bytes1[2],
bytes1[1],
bytes1[0],
0,
0
};
return BitConverter.ToDouble(bytes2, 0);
}05.12.2017 в 15:44 #8064manjey73УчастникОчень странно что 2 нуля, потом 4 байта данных и опять 2 нуля…
- Этот ответ был изменен 6 лет, 4 месяца назад от manjey73.
05.12.2017 в 19:52 #8069MikhailМодераторСпасибо за информацию.
В новом драйвере Модбас Вы можете сделать задать такую загогулину в шаблоне, без использования формул. -
АвторСообщения
- Вы должны авторизироваться для ответа в этой теме.