Разобрался. Спасибо.
Разобрался. Спасибо.
Пользуюсь СПК 107 необходима вывести на регулятор мощности(TRM-1M) заданное значение ,через дерево проекта все выходит , но когда пытаюсь сделать тоже самое через библиотеку Modbus регулятор мощности не опрашивается , хотя все сетевые параметры указаны верно. [CODE][/// [1]
Settings_COM2.sPort:=2;
Settings_COM2.byStopBits:=1;
Settings_COM2.byParity:=1;
Settings_COM2.ulBaudrate:=9600;
Settings_COM2.ulTimeout:=0;
Settings_COM2.ulBufferSize:=0;
SettingsEX_COM2.byByteSize:=8;
// [2] открываем COM-порт
COM_Service_COM2
(
Enable:=TRUE,
Settings:=Settings_COM2,
Sets_Ex:=SettingsEX_COM2,
Task:=OPEN_TSK,
);
CASE iModule OF
0:
// [3] запускаем ФБ опроса модуля МВ110-8А
MV110_8A
(
Enable:=COM_Service_COM2.Ready,
Mode:=MB_RTU,
DevAddr:=1,
FirstAddr:=2,
Quantity:=4,
ComHandle:=COM_Service_COM2.handle,
TimeOut:=T#150MS,
Buffer:=abyBuffer,
);
// [4] если ФБ опроса модуля завершил работу...
IF MV110_8A.Complete THEN
// ...и ошибки отсутствуют, то забираем буфер модуля
IF MV110_8A.Exception=0 THEN
abyMV110_8A_data:=abyBuffer;
// байты 0 и 1 содержат статус измерения входа 1
// склеиваем их в WORD и декодируем в текстовое сообщение
wMV110_8A_input1_status:=BYTE_TO_WORD(abyMV110_8A_ data[1]) OR SHL(BYTE_TO_WORD(abyMV110_8A_data[0]),8);
wsMV110_8A_input1_status:=Mx110Assistant.MvStatusT oWstring(wMV110_8A_input1_status);
//
// переставляем байты местами и преобразуем в REAL
_2WORD_TO_REAL.abyBytes[3]:=abyMV110_8A_data[4];
_2WORD_TO_REAL.abyBytes[2]:=abyMV110_8A_data[5];
_2WORD_TO_REAL.abyBytes[1]:=abyMV110_8A_data[6];
_2WORD_TO_REAL.abyBytes[0]:=abyMV110_8A_data[7];
rMV110_8A_input1:=_2WORD_TO_REAL.rReal;
END_IF
iModule:=1;
// завершаем опрос модуля МВ110-8А
MV110_8A(Enable:=FALSE, Buffer:=abyBuffer);
END_IF
1:
// [3.0.1] запускаем ФБ опроса модуля МВ110-16Д
MV110_16D
(
Enable:=COM_Service_COM2.Ready,
Mode:=MB_RTU,
DevAddr:=26,
FirstAddr:=6,
Quantity:=5,
ComHandle:=COM_Service_COM2.handle,
TimeOut:=T#150MS,
Buffer:=abyMV110_16D_buffer,
);
// [3.0.2] если ФБ опроса модуля завершил работу...
IF MV110_16D.Complete THEN
// ...и ошибки отсутствуют, то забираем значения модуля
IF MV110_16D.Exception=0 THEN
abyMV110_16D_data:=abyMV110_16D_buffer;
xMV110_16D_input1:=abyMV110_16D_data[1].0;
xMV110_16D_input2:=abyMV110_16D_data[2].0;
xMV110_16D_input6:=abyMV110_16D_data[6].0;
xMV110_16D_input7:=abyMV110_16D_data[7].0;
xMV110_16D_input16:=abyMV110_16D_data[16].0;
END_IF
// завершаем опрос модуля МВ110-16Д
MV110_16D(Enable:=FALSE, Buffer:=abyMV110_16D_buffer);
// переходим к опросу модуля МУ110-8Р
iModule:=2;
// очищаем буфер модуля МУ110-8Р
abyMY110_8R_buffer:=abyEmptyBuffer;
END_IF
2:
// [3.1.1] копируем записываемое значение в буфер ФБ
abyMY110_8R_buffer[1].0:=xMY110_8R_output1;
abyMY110_8R_buffer[2].0:=xMY110_8R_output2;
abyMY110_8R_buffer[3].0:=xMY110_8R_output3;
abyMY110_8R_buffer[4].0:=xMY110_8R_output4;
abyMY110_8R_buffer[5].0:=xMY110_8R_output5;
abyMY110_8R_buffer[7].0:=xMY110_8R_output7;
// [3.1.2] запускаем ФБ опроса модуля МУ110-8Р
MY110_8R
(
Enable:=COM_SERVICE_COM2.Ready,
Mode:=MB_RTU,
DevAddr:=9,
FirstAddr:=50,
Quantity:=6,
ComHandle:=COM_SERVICE_COM2.handle,
TimeOut:=T#150MS,
Buffer:=abyMY110_8R_buffer,
);
// [3.1.3] если ФБ опроса модуля завершил работу...
IF MY110_8R.Complete THEN
// ...то завершаем опрос модуля МУ110-8Р...
MY110_8R(Enable:=FALSE, Buffer:=abyMY110_8R_buffer);
iModule:=3;
END_IF
3:
TRM
(
Enable:=COM_Service_COM2.Ready,
Mode:=MB_RTU,
DevAddr:=43,
RegAddr:=60,
Value:=50,
ComHandle:=COM_Service_COM2.handle,
TimeOut:=T#300MS,
);
IF TRM.Complete THEN
// ...то завершаем опрос
TRM(Enable:=FALSE );
// ...и начинаем новый цикл опроса
iModule:=0;
END_IF
xTRM:=100; //////GVL.AnalogTRM2;
;
END_CASE
]
Напишите настройки сети, которые забиты в модулях. Для 8N1 должны быть такие настройки, 2.3 1 Настройки сети 2.jpg Для 3.5 1 Параметры сети.jpg
Лучше выложите свой проект, в расширенных настройках, Добавить файл.
У вас похоже 2.3, тогда вы пишите не в тот раздел, тут раздел Codesys 3.5
Последний раз редактировалось kondor3000; 19.09.2024 в 15:19.
версия 3.5
У меня ваш пример сильно тормозит, скачайте пример с сайта и используйте его.
Не надо пытаться одновременно работать через биб-ку и СОМ порт одновременно, делайте разные проекты.
Не надо мутить с настройками сети, делайте всё стандартным 8N1, только скорость лучше увеличить.
Настройки сети и в шаблоне и в биб-ке не соответствуют стандартным для Овена 9600, 8N1. Скорость лучше поставить 115200.
Если работаете с биб-кой лучше полностью удалить СОМ1 в дереве.
Последний раз редактировалось kondor3000; 26.09.2024 в 22:12.
Добрый день!
Столкнулся с непонятной для меня проблемой.
У меня на СПК107 на одном порту RS-485 поочередно опрашиваются два прибора газоанализатор СТМ-30м(опрос по Modbus) и электросчетчик Меркурий 230(опрос по библиотеке Овен).
Опрос запускается, но через некоторое время отваливается газоанализатор и востановить его возможно только сбросом питания, а если я отключаю отпрос электросчетчика, то он не виснит.
Пробовал увеличивать паузу между опросами не помогает.
Подскажите, как опрос другого прибора может влиять на состояние газоанализатора
На одном порту, один протокол с одинаковыми настройками сети. У вас разные протоколы поэтому и отваливается.
Если очень надо, то с одинаковыми настройками сети можно работать с разными протоколами, но по очереди. Например 300-500 мс один протокол, потом другой.
У меня работало, Модбас и Овен через 300 мс, по очереди.
Последний раз редактировалось kondor3000; 16.10.2024 в 12:50.
настройки сети одинаковые 9600,8,N,1
опрос последовательный, сначала ГА, пауза, ЭС, пауза и так далее...
вопрос в том, что сначала все идет, а через минут 5, алес.., а если один ГА, ТО РАБОТАЕТ
хотелось бы причину понять, почему опрос ЭС приводит к зависанию ГА, ему должно быть все равно, что по сети чужие сигналы бегают, он их должен просто отбросить