Просмотр полной версии : 05 функция modbus
desperadoes
11.02.2014, 18:47
Здравствуйте помогите пожалуйста. Пытаюсь с помощью 05 фкнкции библиотеки modbus записать значение булиевой переменной в другой контроллер.Но не могу понять как задать адрес ячейки в другом контроллере
Код в первом ПЛК (Мастер) (CDS ругается на неверный адрес)
IF port_opened=2 THEN (*Удачно проинициализировали*)
send3_modbus(
Enable:=enabl ,
Mode:=MB_ASCII ,
DevAddr:=1 ,
CoilAddr:=%QX8.1.0.0 , (Здесь адрес задается в WORD ну как задать не знаю)
Value:=TRUE ,
ComHandle:=Settings.Port ,
TimeOut:=TimeOut ,
Complete=>cmpl ,
Exception=>err );
ПЛК 2(Слейв)
Дык CoilAddr это и есть адрес регистра в другом контроллере. Вы ведь знаете, какой регистр Вам нужно записать? ну и вбейте сюда его номер
desperadoes
11.02.2014, 19:06
Но ведь регистр это 2 байта, а мне надо всего один бит!
Но ведь регистр это 2 байта, а мне надо всего один бит!
лучше присядьте понадёжнее :D
http://ru.wikipedia.org/wiki/MODBUS#.D0.97.D0.B0.D0.BF.D0.B8.D1.81.D1.8C_.D0.BE .D0.B4.D0.BD.D0.BE.D0.B3.D0.BE_.D0.B7.D0.BD.D0.B0. D1.87.D0.B5.D0.BD.D0.B8.D1.8F
desperadoes
11.02.2014, 19:35
Круто!!! Только не совсем понятно если надо передать значение REAL это 32 бита это два регистра. Получается 16 функцией передавать несколько регистров? Вопрос как их принимать как REAL? или как 2 регистра? а потом их склеивать?
Только не совсем понятно если надо передать значение REAL это 32 бита это два регистра.
Это еще что. Вот строку передать. Прям эту. Это ж сколько битов.
desperadoes
11.02.2014, 23:07
Кстати а кто нибудь пользовался примером с диска по работе с библиотекой Modbus? там везде в начале примера есть такой код:
(*Организуем счетчик, что бы передавать эти данные по сети*)
t:=t+1;
IF (t MOD 1000)=0 THEN
A := A + 1;
IF A > 9999 THEN
A := 0;
END_IF
END_IF
Я никак не могу понять что это за счетчик и для чего он нужен? Может кто знает?
А что комментарий к коду не ясен? Каждый цикл, прибавляется единица к переменной и полученное число может отправиться на другой конец проводов, если того пожелает мастер сети
desperadoes
11.02.2014, 23:36
То есть это необязательный счетчик, и его можно применять при желании, понятно спасибо.Просто меня напугало то, когда я первый раз запустил этот пример в симуляторе, CDS через некоторое время выдал сообщение что сработал таймер сторож из за большого времени цикла и контролер перешел в стоп. Я подумал что это какой то обязательный счетчик, а как он работает непонял.
Где Ваша логика, как код не имея цикла может докатиться до злой собаки?
desperadoes
11.02.2014, 23:50
Вот и меня это насторожило!
У меня как-то сторожевой таймер сработал в симуляторе. В коде были использованы ФБ библиотеки modbus.lib, забыл их отключить. Циклов в коде не было. При работе не в симуляторе все было нормально.
desperadoes
12.02.2014, 00:03
Понятно Спасибо. Это тоже пример использования библиотеки Modbus.lib. Будем считать что это случайное явление
Не случайное. В modbus.lib чистится порт.
Грубо говоря тонкая уязвимость. Слейв, в принципе, может заставить мастера отрезетится.
desperadoes
12.02.2014, 12:20
А это можно как то предупредить?
Можно. При работе с сетью не работать в симуляторе.
Powered by vBulletin® Version 4.2.3 Copyright © 2024 vBulletin Solutions, Inc. All rights reserved. Перевод: zCarot