Нужен тогда преобразователь протокола Modbus TCP - Modbus RTU, что будет несколько дороже простого преобразователя USB-RS485. Ну есть у USR-IOT по цене дешевле АС3(4)...
сомневаюсь, что тот компонент умеет Modbus RTU - over TCP.
По косвенным признакам (скриншотам по ссылке) похоже, что именно Modbus TCP. Вот только я ни фига не понял - а как там тип регистра задаётся? В формате адреса регистра?
Офигительно. Прямо планету Шелезяка напомнило. Яп очканул такое купить.Гарантии работоспособности нет. Возврата нет. Технической поддержки нет.
А Вам точно всё это добро нужно для диплома? НЯП, в дипломе нужно показать принципиальную возможность такого решения. Что мешает в 1С организовать опрос симулятора OPC-сервера? Концептуально ведь замена реального OPC с реальным датчиком(ами) на симулятор ничего не меняет. Вам ведь принцип нужно показать? Или нет? А так, то, что я предлагаю, вообще ни копейки не стоит. Только Ваше время и труд.
Меня очень смущает один интересный момент:
В РЭ на 2ТРМ0 (стоимостью 5280), сказано что:
Однако, если открыть OwenConfigurator:
то мы увидим, что для него, прибор подключенный через USB, как бы уже подключен через преобразователь USB-RS485.
И настройка (в т.ч. и оперативные параметры) доступны конфигуратору по ходу по протоколу ModbusRTU или ModbusASC.
Не думаю, что ОВЕН станет создавать отдельный протокол для работы с прибором по USB.
Если это так, то нам не нужен отдельно преобразователь USB-RS485.
В данном архиве находится исходный проект для VB6, который создает dll в виде внешней компоненты для 1С.
Эта компонента открывает COM-порт, который в свою очередь работал с IR-приемо-передатчиком для связи с ТСД (терминал сбора данных).
Если Вы с этим разберетесь и добавите туда процедуры обмена по протоколу ModbusRTU, считайте что диплом Вы защитили!!!
Надеюсь VB6 Вы найдете сами.
Примерно так выглядит процедура подсчета контрольной суммы для Modbus-пакета:
а так выглядит функция формирования, отправки и приема:Код:Public Function Modbus_CRC(ByVal Data As String) As Long Dim iByte, iBit As Integer Modbus_CRC = &HFFFF& For iByte = 1 To Len(Data) Modbus_CRC = Modbus_CRC Xor Asc(Mid(Data, iByte, 1)) For iBit = 0 To 7 If Modbus_CRC Mod 2 > 0 Then Modbus_CRC = Modbus_CRC \ 2 Modbus_CRC = Modbus_CRC Xor &HA001& Else Modbus_CRC = Modbus_CRC \ 2 End If Next Next End Function
И главное помните: "Дорогу осилит идущий."Код:Public Function Modbus_Query(ByVal Device As Integer, ByVal cmd As Integer, ByVal Addr As Long, ByVal Count As Long, Optional Value As String) As Boolean Dim mCRC As Long Dim mQuery As String mQuery = Chr(Device) mQuery = mQuery + Chr(cmd) mQuery = mQuery + Chr(Int(Addr / 8)) + Chr(Addr Mod 256) mQuery = mQuery + Chr(Int(Count / 8)) + Chr(Count Mod 256) mQuery = mQuery + Value mCRC = Modbus_CRC(mQuery) mQuery = mQuery + Chr(Int(mCRC / 256)) + Chr(mCRC Mod 256) Modbus_Query = Query(mQuery) If Modbus_Query And ErrCode = 0 Then If Len(Packet) < 2 Then ErrCode = -1: Exit Function End If If Modbus_CRC(Mid(Packet, 1, Len(Packet) - 2)) <> Modbus_readWord(Len(Packet) - 1) Then ErrCode = -2: Exit Function End If If readByte(2) > 127 Then ErrCode = readByte(3): Exit Function End If End If End Function
Последний раз редактировалось EFrol; 06.11.2024 в 17:08.
Ну мы же все когда-то были такими же студентами?! Или кто-то сразу родился профессором?!
Поверьте. Еще год - полтора и они отправят нас на пенсию.![]()
Эти не отправят.
А те кто что то могут не идут в АСУТП.
Последний раз редактировалось AlexandrGr; 06.11.2024 в 21:31.