Это скрин MASTERSCADA 4D
Вложение 79965
Это скрин MASTERSCADA 4D
Вложение 79965
ну там идут регистры временного хранения и входные регистры. Что где куда?. И адреса на стороне CODESYS мне не надо назначать, ток в MASTERSCADA 4D буду назначать типа 000001 или 00017 в зависимости от типа регистра
Проверил ещё раз, запись мастером 0 бит 0 регистра, попадает в 0 бит 0 регистра слейва (рег. временного хранения) Вложение 79967
Чтение в мастере надо делать функцией 0х04. Это если с одного виртуального ПЛК на другой передавать массивом.
А вот с ОРС сервера (чтение запись бит) 8 бит попадает в 0, а 0 бит в 8 бит Вложение 79968
Чтение бит функция 0х02 и запись бит функция 0х0f.
Спасибо, пока разбираюсь. У меня вертуальный ПЛК выступает в роли slave, а MASTERSCADA 4D как MASTER. Ток при настройках ничего такого я не видел. Просто Modbus TCP Device на стороне MASTERSCADA 4D и все. Как я понял к этим регистрам протокола Modbuss TCP надо правельно уметь обращаться. Пока читаю докумнтацию между строк Вложение 79974
И с этими регистрами большая вложеность при открытии клике мыши. Надо привыкать к этой среде
Для ПЛК-200 в итоге заработало даже с четностью NONE
И даже когда я по ошибке указал параметр usiMedium:=0, то есть rs232 вместо реального rs485, то все равно работает.
Я так понял, что в данном конкретном случае этот параметр не влияет на работу метода.
Код:
Modbus_Master_COM_Port.xStop := TRUE;
Modbus_Master_COM_Port.UpdateComParameters(9600, 0, 0, 8, 1, FALSE, 4)
Modbus_Master_COM_Port.xStop := FALSE;
НО, уже второй день пытаюсь тоже самое сделать для ПЛК-210, но никак не выходит (
Уже все комбинации параметров перебрал. Хотя казалось бы, отличие от вызова только в номере ком порта должно быть
https://disk.yandex.ru/i/CwQtK3UukD906g - вот запись с экрана (первая строчка - подача питания на HMI)
В связи с этим несколько вопросов.
1) Как вообще можно что-то вернуть из этого метода, в частности ERR_PARAMETER?
В описании ничего не вижу
https://content.helpme-codesys.com/e...arameters.html
2) Есть ли возможность у кого-нибудь протестировать этот метод именно на ПЛК-210? (чтобы сравнить с моим результатом)
Ибо эта функция очень нужна
Или может быть кто-то увидит на демонстрации, что я где-то косячу.
Добрый день.
Проверил с ПЛК210-01 - функционал работает корректно. Использовал такой код:
Код:IF xChangeBaudrate THEN
Modbus_Master_COM_Port.xStop := TRUE;
Modbus_Master_COM_Port.Enable := FALSE;
Modbus_Master_COM_Port.UpdateComParameters
(
COMPORT := 5,
udiBaudrate := udiBaudrate,
usiDataBits := 8,
usiStopBits := 1,
usiParity := 0,
usiMedium := 1,
xPolarization := FALSE
);
Modbus_Master_COM_Port.Enable := TRUE;
Modbus_Master_COM_Port.xStop := FALSE;
xChangeBaudrate := FALSE;
END_IF
Цитата:
Для ПЛК-200 в итоге заработало даже с четностью NONE
Про NONE - я ошибся, баг с NONE проявляется только когда сам ПЛК работает в режиме Slave.Цитата:
1) Как вообще можно что-то вернуть из этого метода, в частности ERR_PARAMETER?
Это касается и метода - для мастера метод ничего не возвращает.
На вашем скриншоте Parity устанавливается в ODD - так и задумано?
Это тоже интересно, пытаюсь также наладить работу для ПЛК как слэйва
UpdateComPortSettings и UpdateUnitID.
Вроде как не срабатывают, запросы от мастера продолжают успешно приниматься
Оба метода при этом возвращают 1. Это показатель успешного выполнения или что единичка означает в данном случае?
Или ошибка видимо все же
https://content.helpme-codesys.com/e...nt/Errors.html
Всем здравия. Работаю с ОВЕН ПЛК 110 30м v2, среда разработки БЫЛА codesys 2.3, поставил 3.5.
Вопрос: Где взять таргет файл для v3.5 или как их подружить? Подскажите пожалуйста.
Есть спк110, выступает слейвом под modbus tcp, опрашивается по 502 порту. Можно ли передавать данные в owencloud с этой же спк110 через этот же ethernet порт? Чисто логически вроде как можно, но с ходу не заработало(( Если да, то какой порт указывать в настройках owencloud в codesys? Пробовал по разному, чёт не передаются данные в ОК. Может кто-то сможет помочь скринами настроек.
Вы порт физический же имеете в виду. Да может, возможно пароль забыли в cloud указать
зачем поставил-то? как работал, так и работай.Цитата:
Работаю с ОВЕН ПЛК 110 30м v2, среда разработки БЫЛА codesys 2.3, поставил 3.5.
3.5и 2.3 это разные программы для разного железа, несовместимые между собой. типа как Адоб Акробат и Адоб Фотошоп. Общее только Адоб
Здравствуйте, не подскажете как использовать структуру при опросе с использованием библиотек mx210 assistant МВ210. То есть без соотнесения какой нибудь переменной в соответствующей вкладке? Нужно обратиться, например к устройству MV210_101 Вход 1 и считать rValue. Как мне в ST этот код прописать? Не пойму, весь гугл обгуглил. Есть структура ANALOG_SENSOR_VALUE, а в ней rValue. Как мне в ST к конкретному каналу обратиться и прочитать его rValue?
ANALOG_SENSOR_VALUE.rValue это же обезличенно. А как, допустим, первый канал или третий прочитать? ANALOG_SENSOR_VALUE.rValue это уже какое то неполное выражение без конкретики
Так будет понятнее?
Вложение 80245
Объявляете переменные с типом данных ANALOG_SENSOR_VALUE, привязываете эти переменные в шаблоне устройства, в коде используете имя_переменной.rValue
Без пункта 2 ПЛК не знает что у MV210_101 есть какая-либо связь с ANALOG_SENSOR_VALUE
То есть без объявления переменной невозможно считать будет вход? Никаким способом?
Можете выбросить шаблон, создать чтение массива из 24 регистров,Вложение 80252 начиная с адреса 4000. Вложение 80248 регистрыВложение 80250 модуль МВ210-101
Создать свою структуру Ai из переменной Float и циклического времени.
Создать массив Ai_Oll AT%IW22 : ARRAY [1..8] OF Ai;
И обращайтесь к любому каналу как Ai_Oll[1].rValue; Ai_Oll[8].rValue;
При чём, в соотнесении ничего нет вообще.
Дальше сами адаптируете по свою непонятную задачу.Код:CASE iState OF
0: //Открытие соединения
fbTCPClient(
xEnable:=TRUE ,
tTimeout:=T#5S ,
sIpAddr:='192.168.0.1',
uiPort:=502);
IF fbTCPClient.xActive THEN
iState := 1;
END_IF
IF fbTCPClient.xError THEN
fbTCPClient(xEnable:=FALSE);
END_IF
1:
fbModbus(
xExecute:=TRUE ,
tTimeout:=T#50MS ,
usiRetry:=3 ,
hConnection:=fbTCPClient.hConnection ,
xIsRtuOverTcpMode:=FALSE ,
usiUnitId:=1 ,
eFuncCode:=OCL.MB_FC.READ_HOLDING_REGISTERS,
uiDataAddr:=4000 ,
uiDataCount:=2 ,
pData:=ADR(arWORD) ,
szSize:=SIZEOF(arWORD) ,
xDone=> ,
xBusy=> ,
xError=> ,
eError=> );
IF fbModbus.xDone OR fbModbus.xError THEN
fbModbus(xExecute:=FALSE);
iState := 0;
ReadValue1 := OCL.WORD2_TO_REAL(wInput1:=arWORD[1] , wInput2:=arWORD[0] , xSwapBytes:=FALSE );
END_IF
END_CASE
То что надо, благодарю,а что за библиотека? У меня не может найти этот fbModbus? Задача для общего развития, так как слышал что некоторые производители российских плк каким то макаром так параметрируются. Есть только адрес и регистр, к сожалению никаких прямых адресов нет,никаких вкладок с соотнесением нет. Мануал пустой))
Добрый день. ПМ210 подключен к СПК110. Как в Modbus_Serial_Device посмотреть вкладку "Cостояние"? Необходимо определять Modbus Serial Device: Работает или Не запущено. Использовал ФБ Modbus_Serial_Device.GetDeviceState (GetDeviceState_0: IoDrvModbusSerialSlaveLibrary.ModbusSerialDeviceDi ag) но получаю ошибку:
Код:'GetDeviceState_0' не является экземпляром 'Modbus_Serial_Device'.
Мне необходимо со стороны СПК110 понимать опрашивает ли его ПМ210. При отключении ПМ210 переменная Modbus_Serial_Device.xBusy не меняет своего значения. А если открыть вкладку "Cостояние", то поле "Modbus Serial Device: Работает или Не запущено" меняется как мне нужно в зависимости от активности ПМ210.
По-моему, в современных версиях CODESYS (например, 3.5.17.30) поведение следующее:
- при старте в дереве проекта рядом со слэйвом отображается желтый треугольник, состояние = не запущено
- при получении первого корректного запроса от мастера индикатор меняется на зеленый круг, состояние = запущено
И после этого индикатор сохраняет зеленый цвет даже при отсутствии запросов от мастера (потому что с точки зрения слэйва, отсутствие запросов от мастера - это нормальная ситуация).
В вашем случае, на мой взгляд, проще всего отказаться от слэйва в дереве проекта и поднять его через библиотеку OwenCommunication - в этом случае вы получите нужную вам диагностику.