ioBroker Forum


Nutzungsbedingungen |Datenschutzrichtlinie
Cloud |Dokumentation
Aktuelle Zeit: 20.02.2018, 16:13

Alle Zeiten sind UTC+01:00




Ein neues Thema erstellen  Auf das Thema antworten  [ 5 Beiträge ] 
Autor Nachricht
BeitragVerfasst: 23.10.2017, 11:41 
Offline
starter

Registriert: 06.10.2017, 04:20
Beiträge: 10
Hat sich bedankt: 5 Mal
Danksagung erhalten: 1 Mal
Добрый день.
К сожалению Beckhoff дает считать с себя данные только словами, а это 16 бит.
Читаю из Remanent области и для получения 50 бит данных разбазаривать 100 байт совсем не комильфо, когда можно считать одним словом булевы данные по целому разделу.

в JS не силен, курил булевы операции но так и не понял как правильно перевести число в двоичный вид и раскидать данные по отдельным переменным... точнее так: как правильно сделать побитовый сдвиг и "&" с маской...

_________________
iobroker+Beckhoff_BC9000+...


Nach oben
   
BeitragVerfasst: 23.10.2017, 18:13 
Offline
guru
Benutzeravatar

Registriert: 09.11.2014, 16:50
Beiträge: 1238
Wohnort: Барнаул
Hat sich bedankt: 15 Mal
Danksagung erhalten: 41 Mal
Palko hat geschrieben:
Добрый день.
К сожалению Beckhoff дает считать с себя данные только словами, а это 16 бит.
Читаю из Remanent области и для получения 50 бит данных разбазаривать 100 байт совсем не комильфо, когда можно считать одним словом булевы данные по целому разделу.

в JS не силен, курил булевы операции но так и не понял как правильно перевести число в двоичный вид и раскидать данные по отдельным переменным... точнее так: как правильно сделать побитовый сдвиг и "&" с маской...

Как ты читаешь данные?
не твой случай? viewtopic.php?f=26&t=8629

_________________
Высокий уровень Децибел вреден для здоровья!
Мой блог


Nach oben
   
BeitragVerfasst: 24.10.2017, 03:59 
Offline
starter

Registriert: 06.10.2017, 04:20
Beiträge: 10
Hat sich bedankt: 5 Mal
Danksagung erhalten: 1 Mal
Читаю просто, двухбайтное слово через modbus TCP с контроллера.

Благодарю, щас раскурю ссылку.

_________________
iobroker+Beckhoff_BC9000+...


Nach oben
   
BeitragVerfasst: 24.10.2017, 08:25 
Offline
guru
Benutzeravatar

Registriert: 09.11.2014, 16:50
Beiträge: 1238
Wohnort: Барнаул
Hat sich bedankt: 15 Mal
Danksagung erhalten: 41 Mal
Palko hat geschrieben:
Читаю просто, двухбайтное слово через modbus TCP с контроллера.

Благодарю, щас раскурю ссылку.

т.е. обычная строка? разбей её посимвольно

_________________
Высокий уровень Децибел вреден для здоровья!
Мой блог


Nach oben
   
BeitragVerfasst: 24.10.2017, 12:15 
Offline
starter

Registriert: 06.10.2017, 04:20
Beiträge: 10
Hat sich bedankt: 5 Mal
Danksagung erhalten: 1 Mal
вроде все получилось.
разбил по-символьно, засунул в массив.
получилось как то так:
Spoiler: Show hidden text
Code:
var bin16;
var length1;
var data = [];
createState('MOV.FLT',0);
createState('MOV.KUH',0);
createState('MOV.KOR',0);
createState('MOV.BDR',0);
createState('MOV.DET',0);
createState('MOV.VAN',0);
createState('MOV.TLT',0);
createState('MOV.PRH',0);

schedule("*/15 * * * * *", function () {

bin16 = getState("modbus.0.holdingRegisters.56411_MOV_FLT").val.toString(2); // получаем из ячейки modbus 2-х байтное слово и переводим в двоичное представление, слово типа "1010011101"

length1 = 6;
 while (length1>=0) { // обнуляем весь массив для того чтоб не было undefined при массиве размером меньше 6
    data[length1]=0;
    length1--;
           }

switch (parseInt (bin16)) {

    case 0:         //если ключевой бит снят то все обнуляем
        setState("javascript.0.MOV.FLT", 0);
        setState("javascript.0.MOV.KUH"/*MOV.KUH*/, 0);
        setState("javascript.0.MOV.KOR"/*MOV.KOR*/, 0);
        setState("javascript.0.MOV.BDR"/*MOV.BDR*/, 0);
        setState("javascript.0.MOV.DET"/*MOV.DET*/, 0);
        setState("javascript.0.MOV.VAN"/*MOV.VAN*/, 0);
        setState("javascript.0.MOV.TLT"/*MOV.TLT*/, 0);
        setState("javascript.0.MOV.PRH"/*MOV.PRH*/, 0);
    break;

    case 1:         // если установлен только ключевой бит то отмечаем только его
        setState("javascript.0.MOV.FLT", 1);
        setState("javascript.0.MOV.KUH"/*MOV.KUH*/, 0);
        setState("javascript.0.MOV.KOR"/*MOV.KOR*/, 0);
        setState("javascript.0.MOV.BDR"/*MOV.BDR*/, 0);
        setState("javascript.0.MOV.DET"/*MOV.DET*/, 0);
        setState("javascript.0.MOV.VAN"/*MOV.VAN*/, 0);
        setState("javascript.0.MOV.TLT"/*MOV.TLT*/, 0);
        setState("javascript.0.MOV.PRH"/*MOV.PRH*/, 0);
    break;
   
    default:        // во всех других случаях разбираем бинарное старшее слово
    length1 = (bin16.length)-9;
         while (length1>=0) { //5 и меньше
            data[length1] = parseInt (bin16.charAt(length1),2); // пишем в массив побитно (с 9-го бита слова вверх)
            length1--;
           }
      setState("javascript.0.MOV.FLT", 1);
      setState("javascript.0.MOV.KUH"/*MOV.KUH*/, data[0]);
      setState("javascript.0.MOV.KOR"/*MOV.KOR*/, data[1]);
      setState("javascript.0.MOV.BDR"/*MOV.BDR*/, data[2]);
      setState("javascript.0.MOV.DET"/*MOV.DET*/, data[3]);
      setState("javascript.0.MOV.VAN"/*MOV.VAN*/, data[4]);
      setState("javascript.0.MOV.TLT"/*MOV.TLT*/, data[5]);
      setState("javascript.0.MOV.PRH"/*MOV.PRH*/, data[6]);       
}

});


не сильно оптимально, но работает)

_________________
iobroker+Beckhoff_BC9000+...


Nach oben
   
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen  Auf das Thema antworten  [ 5 Beiträge ] 

Alle Zeiten sind UTC+01:00


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast


Du darfst keine neuen Themen in diesem Forum erstellen.
Du darfst keine Antworten zu Themen in diesem Forum erstellen.
Du darfst deine Beiträge in diesem Forum nicht ändern.
Du darfst deine Beiträge in diesem Forum nicht löschen.
Du darfst keine Dateianhänge in diesem Forum erstellen.

Suche nach:
Gehe zu Forum:  
Powered by phpBB® Forum Software © phpBB Limited
Deutsche Übersetzung durch phpBB.de