Gå til innhold
🎄🎅❄️God Jul og Godt Nyttår fra alle oss i Diskusjon.no ×

Hvordan lagre informasjonen fra en string som skriver mange linjer.


Anbefalte innlegg

Hei, først og fremst, jeg kan ikke java, men jeg forstår mye av det når jeg leser det. 
Håper noen kunne hjulpet meg med en utfordring.
 
Jeg har et nettverk med 7 PLS enheter, og et HMI panel, koblet sammen med modbus. HMI panelet må indikere, ikke bare om det er feil på bussen, men nøyaktig hvilken PLS som mangler kommunikasjon.
 
Måten jeg har valgt og løse dette på er og lese ut stringen ProtocolErrorMessage, som er en systemvariabel, og deretter søke etter "prot1,MRTU,1" for PLS nr 1, "prot1,MRTU,2" for PLS nr 2, og så videre. Dersom den finner det = feil.  
 

Problemet; er at denne stringen skriver ut en- og en linje. Dvs først kommer det 5 linjer(alle variablene den ikke klarer og lese) med prot1,MRTU,1, deretter kommer det 5 linjer med prot1,MRTU,2 og slik holder den på til den begynner på nytt, eller feilen forsvinner. Er det noen måte jeg kan huske prot1,MRTU,1 mens den skriver prot1,MRTU,2.

Dersom stringen hadde vært en liten tekst fil, og jeg kunne søke gjennom all teksten på en gang hadde problemet vært løst.

 

Slik koden fungerer nå bruker den tagen som angir om det finnes feil i systemet i det hele tatt(offline), og resetter først når alt er OK. Dette er selvsagt ikke funksjonen jeg ønsker.

 

Tar imot alle forslag med stor takk :)

function Schedule1_OnAction(me, eventInfo) {

    var ComTag_WTD01 = project.getTag("ComTag_WTD01");          //Tag som blir brukt til com error symbol på dør
    var ComTag_WTD02 = project.getTag("ComTag_WTD02");          //Tag som blir brukt til com error symbol på dør
    var ComTag_WTD03 = project.getTag("ComTag_WTD03");          //Tag som blir brukt til com error symbol på dør
    var ComTag_WTD04 = project.getTag("ComTag_WTD04");          //Tag som blir brukt til com error symbol på dør
    var ComTag_WTD05 = project.getTag("ComTag_WTD05");          //Tag som blir brukt til com error symbol på dør
    var ComTag_WTD06 = project.getTag("ComTag_WTD06");          //Tag som blir brukt til com error symbol på dør
    var ComTag_WTD07 = project.getTag("ComTag_WTD07");          //Tag som blir brukt til com error symbol på dør
    var value = project.getTag("ProtocolErrorMessage");         //Com error message string fra protocol 
    var offline = project.getTag("WTDXX_OFFLINE");              //Global com error,(offline=1 er ok)(=2 er error)
    var str = value;
         if (offline == 1) {                                    //Denne gjør at alt må være ok, før errorene forsvinner.
             ComTag_WTD01=0                                     //Er det kommunikasjonsfeil i systemet?
             ComTag_WTD02=0
             ComTag_WTD03=0
             ComTag_WTD04=0
             ComTag_WTD05=0
             ComTag_WTD06=0
             ComTag_WTD07=0
                project.setTag("ComTag_WTD01",ComTag_WTD01);    //Hvis nei setter man tagen til 0.
                project.setTag("ComTag_WTD02",ComTag_WTD02);
                project.setTag("ComTag_WTD03",ComTag_WTD03);
                project.setTag("ComTag_WTD04",ComTag_WTD04);
                project.setTag("ComTag_WTD05",ComTag_WTD05);
                project.setTag("ComTag_WTD06",ComTag_WTD06);
                project.setTag("ComTag_WTD07",ComTag_WTD07);
            }
            if (str.search("prot1,MRTU,1") != -1) {             //Sjekker om adresse 1 står i ProtocolErrorMessage
                                                              //Check if the ComTag<i> variable can be set to 0
                ComTag_WTD01=1                                  
                project.setTag("ComTag_WTD01",ComTag_WTD01);    //Hvis den finner adr 1, så setter den ComTag_WTD01 til 1, og symbolet vil skjule statusen på døren.
            }
            if (str.search("prot1,MRTU,2") != -1) {             // Multipliser nedover for resten av dørene.
                ComTag_WTD02=1                                  //  
                project.setTag("ComTag_WTD02",ComTag_WTD02);    //  
            } 
            if (str.search("prot1,MRTU,3") != -1) {             // Multipliser nedover for resten av dørene.
                ComTag_WTD03=1                                  //  
                project.setTag("ComTag_WTD03",ComTag_WTD03);    //  
            } 
            if (str.search("prot1,MRTU,4") != -1) {             // Multipliser nedover for resten av dørene.
                ComTag_WTD04=1                                  //  
                project.setTag("ComTag_WTD04",ComTag_WTD04);    //  
            } 
            if (str.search("prot1,MRTU,5") != -1) {             // Multipliser nedover for resten av dørene.
                ComTag_WTD05=1                                  //  
                project.setTag("ComTag_WTD05",ComTag_WTD05);    //  
            } 
            if (str.search("prot1,MRTU,6") != -1) {             // Multipliser nedover for resten av dørene.
                ComTag_WTD06=1                                  //  
                project.setTag("ComTag_WTD06",ComTag_WTD06);    //  
            } 
            if (str.search("prot1,MRTU,7") != -1) {             // Multipliser nedover for resten av dørene.
                ComTag_WTD07=1                                  //  
                project.setTag("ComTag_WTD07",ComTag_WTD07);    //  
            } 
    }
 
Lenke til kommentar
Videoannonse
Annonse

Litt usikker på hva som egentlig forsøkes her, men se om dette er logisk for deg:

function Schedule1_OnAction(me, eventInfo) {
    // såvidt jeg kan se så er setTag(string, int) hvor int lik 0 feil
    // og int lik 1 bra, derfor kan vi bare sjekke mot en feil i search
    // du bruker aldri vars for tags, de blir alltid satt til 0 eller 1 så:

    var value = project.getTag("ProtocolErrorMessage");         //Com error message string fra protocol 
    var offline = project.getTag("WTDXX_OFFLINE");              //Global com error,(offline=1 er ok)(=2 er error)
    project.setTag("ComTag_WTD01",value.search("prot1,MRTU,1") != -1); 
    project.setTag("ComTag_WTD02",value.search("prot1,MRTU,2") != -1);    //  
    project.setTag("ComTag_WTD03",value.search("prot1,MRTU,3") != -1);    //  
    project.setTag("ComTag_WTD04",value.search("prot1,MRTU,4") != -1);    //  
    project.setTag("ComTag_WTD05",value.search("prot1,MRTU,5") != -1);    // 
    project.setTag("ComTag_WTD06",value.search("prot1,MRTU,6") != -1);    //  
    project.setTag("ComTag_WTD07",value.search("prot1,MRTU,7") != -1);    //  

    if (offline == 2){
        // handle offline error 
        // you can now inspect tags to see which is the offender
    }
}

EDIT: dette ser ut som javascript? Er det java eller javascript du jobber med?

Endret av Enthroner
Lenke til kommentar

Det er javascript! Beklager for feil forum og den merklige kommenteringen, var egentlig kun ment for mine øyne..

Stemmer at det blir brukt i et GUI. Bruker tagen ComTag_WTD01 for og hide/unhide et grafisk symbol, som viser kommunikasjonsfeil til PLS nr1. i GUI.  

 

Jeg må se litt nærmere på posten din Enthroner, når jeg har koblet opp test riggen. 

 

Jeg er litt usikker på om dere forstår problemet, jeg er litt dårlig til og forklare, spessielt ting jeg ikke kan godt. Men jeg prøver på nytt.

Koden over fungerer, men ikke helt slik jeg ønsker. Dette er på grunn av offline tagen som først reseter ComTag_WTD0x når alle kommunikasjons feilene er vekk.

 

 

Tidligere så koden slik ut(utsnitt): 

if (str.search("prot1,MRTU,1") != -1) {
    ComTag_WTD01=0
    project.setTag("ComTag_WTD01",ComTag_WTD01);
}
else {
    ComTag_WTD01=1
    project.setTag("ComTag_WTD01",ComTag_WTD01);
    }

Si at jeg har feil på adr. 1 og 2.

 

Teksten som kommer fra ProtocolErrorMessage ser slik ut:

[prot1,MRTU,1] read tag [WTD01_Open] failed - Error: No response

 

etter et sekund kommer neste linje som er:

[prot1,MRTU,1] read tag [WTD01_LOP] failed - Error: No response

 

Og så videre:

[prot1,MRTU,1] read tag [WTD01_LOL] failed - Error: No response

[prot1,MRTU,1] read tag [WTD01_LOPR] failed - Error: No response

[prot1,MRTU,1] read tag [WTD01_Rc] failed - Error: No response

 

Deretter kommer feilene som hører til adr. 2.

[prot1,MRTU,2] read tag [WTD02_Open] failed - Error: No response

[prot1,MRTU,2] read tag [WTD02_LOP] failed - Error: No response

[prot1,MRTU,2] read tag [WTD02_LOL] failed - Error: No response

[prot1,MRTU,2] read tag [WTD02_LOPR] failed - Error: No response

[prot1,MRTU,2] read tag [WTD02_Rc] failed - Error: No response

 

Så begynner den på nytt fra toppen.

 

På grunn av at linjene ikke vises samtidig kan jeg ikke bruke koden ovenfor.

Da vil ComTag_WTD01 gå lav når det står "[prot1,MRTU,2] rea......." og ComTag_WTD02 vil gå høy selv om det fortsatt er feil på adr 1. Så de vil blinke annen hver gang avhengig av hva som står i ProtocolErrorMessage.

 

 

 

Lenke til kommentar

 

 

Det er åpenbart en feil, hvis du kan fortelle meg hvordan jeg flytter tråden, skal jeg gjøre det med glede. 

 

 

 

Det tror jeg bare mod kan gjøre, men siden alle innlegg her som ikke er skrevet av deg bare handler om at dette ikke er Java så er det vel ikke så farlig om ikke det blir med over i en ny tråd? Just a tought så du kanskje får svar på det du lurer på.

  • Liker 1
Lenke til kommentar

Dette

if (str.search("prot1,MRTU,1") != -1) {
    ComTag_WTD01=0
    project.setTag("ComTag_WTD01",ComTag_WTD01);
}
else {
    ComTag_WTD01=1
    project.setTag("ComTag_WTD01",ComTag_WTD01);
}

er det samme som

project.setTag("ComTag_WTD01",str.search("prot1,MRTU,1") != -1 ? 0 : 1);

så det var en logisk feil i mitt forrige forslag antakelig. Legg til ? 0 : 1 (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Conditional_Operator) så burde det fungere.

Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
×
×
  • Opprett ny...