Bug Reports
Manual channels with dEX-2

To collect data from a serial device we use manual channels.
There are some problems to realize it with dEX-2:

  1. The available space to enter commands is limited. (We could solve it by splitting it to several channels)
  2. After saving the configuration to a file and reloading it, there are suddenly many blank lines inserted that we did not originally enter. After each save, this seems to double, so that the programme becomes difficult to read and the space available for editing is reduced more and more.
  3. I have tried to delete the many blank lines in dEX-2. What happened was that after saving, the actual programme lines also disappeared.

I would have liked to attach an example configuration, but unfortunately this function does not seem to exist.

Regards
Jürgen

To collect data from a serial device we use manual channels. There are some problems to realize it with dEX-2: 1. The available space to enter commands is limited. (We could solve it by splitting it to several channels) 2. After saving the configuration to a file and reloading it, there are suddenly many blank lines inserted that we did not originally enter. After each save, this seems to double, so that the programme becomes difficult to read and the space available for editing is reduced more and more. 3. I have tried to delete the many blank lines in dEX-2. What happened was that after saving, the actual programme lines also disappeared. I would have liked to attach an example configuration, but unfortunately this function does not seem to exist. Regards Jürgen

Hi Juergen,

The insertion of empty line in manual channel is a known issue in dEX version 2.1.6. Have you try to upgrade your dEX version to 2.1.18? Multiple saving to the logger will increase the empty space many times which may cause the line limit of manual channel becoming apparent.

You can try to post the screenshot.

Best regards,
Rudy Gunawan

Hi Juergen, The insertion of empty line in manual channel is a known issue in dEX version 2.1.6. Have you try to upgrade your dEX version to 2.1.18? Multiple saving to the logger will increase the empty space many times which may cause the line limit of manual channel becoming apparent. You can try to post the screenshot. Best regards, Rudy Gunawan

Hi Rudy

The described problems refer to dEX-2 version v2.1.18.
With a screenshot the problem cannot be shown properly, because the window is too small to display the program code.
But below you'll find an example of my configuration as it is saved to a file:

BEGIN"config"
 'Generated by new dEX-2
  password="immi-mnz"

  S1=-40,60,0,1000""
  S2=0,100,0,1000""
  S3=900,1050,0,5000""



'Manual "Init 1"{
    10$(W)="Station4"



'Redefine default settings



PROFILE FUNCTION F1_LABEL="Halt"

PROFILE FUNCTION F1_COMMAND="H"

PROFILE FUNCTION F2_LABEL="Resume"

PROFILE FUNCTION F2_COMMAND="G"

PROFILE FUNCTION F3_LABEL="Copy Data to USB"

PROFILE FUNCTION F3_COMMAND="COPYD dest=A:\?(serial)\ format=dbd archive=y src=B; REMOVEMEDIA"

PROFILE FUNCTION F4_LABEL="Create file"

PROFILE FUNCTION F4_COMMAND="XC"
'Manual} 

'Manual "Init 2"{
    'Port settings

PROFILE HOST_PORT FUNCTION=SERIAL

PROFILE SERSEN_PORT FUNCTION=SERIAL



ph=9600,N,8,1,NOFC  'host port settings (Sonic)



ps=RS485,9600,N,8,1,NOFC  'serial sensor port settings (DA-Modul)







p15=2                      'Do not allow sleep



p22=59                     'Data delimiter character: Semikolon



p31=3                      'Date format: ISO(YYYY/MM/DD)



p38=46                     'Decimal point character: ASCII 46 (.)



p41=0                      'Time sub-second digits = 0



/D/T/h/C/n/U               'Format settings: free format (/h) with date (/D), time(/T), channel names (/C) and units (/U), verbose mode (/n)



Y10=0,0.1                   'Polynom for rain gauge







1HSC(W,R)                  'reset rain counter







2SERIAL("{^M}",W)          'send <CR> to clear Sonic receive buffer



2SERIAL("{AT=3600^M}",W)   'set Sonic internal average interval to maximum value



2SERIAL("{OI=0^M}",W)      'do not report instantaneous values



2SERIAL("{OD=1^M}",W)      'define output data



2SERIAL("{DC=2^M}",W)      'report DiffC as numbers
'Manual} 
  RS5S

  RA"Instant Values"("b:",ALARMS:OV:100KB:W60,DATA:OV:1MB)5S
    LOGOFFA
    1+V("TT~degC",=1001CV,LM,S1,NA)


    1*V("RH~%",=1002CV,LM,S2,NA)


    2V("PP~hPa",=1003CV,LM,S3,A,GL50V)


  RB"Averaging"("b:",ALARMS:OV:100KB:W60,DATA:OV:90D)1M
    LOGONB


'Manual "Sonic Data 1"{
        'request Sonic data







20..60CV(W)=0        'clear variables







2SERIAL("\e",W)      'clear receive buffer







2SERIAL("{aa^M}",W)  'send data request















'parsing serial data string







2SERIAL("\m[    x =]%8f[20CV]\m[    y =]%8f[21CV]\m[    z =]%8f[22CV]\m[    T =]%8f[23CV]",=60CV,2,W)







if(60CV==0){2SERIAL("\m[ xsig =]%8f[24CV]\m[ ysig =]%8f[25CV]\m[ zsig =]%8f[26CV]\m[ Tsig =]%8f[27CV]",0.25,W)}







if(60CV==0){2SERIAL("\m[xycov =]%8f[28CV]\m[xzcov =]%8f[29CV]\m[xTcov =]%8f[30CV]",0.25,W)}







if(60CV==0){2SERIAL("\m[yzcov =]%8f[31CV]\m[yTcov =]%8f[32CV]\m[zTcov =]%8f[33CV]",0.25,W)}







if(60CV==0){2SERIAL("\m[ psig =]%8f[34CV]\m[ qsig =]%8f[35CV]\m[ rsig =]%8f[36CV]",0.25,W)}







if(60CV==0){2SERIAL("\m[   tp =]%8f[37CV]\m[   tq =]%8f[38CV]\m[   tr =]%8f[39CV]",0.25,W)}







if(60CV==0){2SERIAL("\m[mgust =]%8f[40CV]\m[thsig =]%8f[41CV]\m[phsig =]%8f[42CV]\m[DiffC =]%8f[43CV]",0.25,W)}







if(60CV==0){2SERIAL("\m[ustar =]%8f[44CV]\m[Tstar =]%8f[45CV]\m[   Cd =]%8f[46CV]",0.25,W)}
'Manual} 


'Manual "Sonic Data 2"{
        if(60CV==0){2SERIAL("\m[  MOs =]%8f[48CV]\m[   mf =]%8f[49CV]\m[   hf =]%8f[50CV]\m[  nrb =]%8f[51CV]",0.25,W)}







if(60CV==0){2SERIAL("\m[    u =]%8f[52CV]\m[    v =]%8f[53CV]\m[    w =]%8f[54CV]",0.25,W)}







if(60CV==0){2SERIAL("\m[  vel =]%8f[55CV]\m[  dir =]%8f[56CV]\m[ svel =]%8f[57CV]\m[ sdir =]%8f[58CV]",0.25,W)}















20CV("x~m/s",FF2)







21CV("y~m/s",FF2)







22CV("z~m/s",FF2)







23CV("T~degC",FF2)







24CV("xsig~m/s",FF4)







25CV("ysig~m/s",FF4)







26CV("zsig~m/s",FF4)







27CV("Tsig~degC",FF4)







28CV("xycov~m^2/s^2",FF4)







29CV("xzcov~m^2/s^2",FF4)







30CV("xTcov~mK/s",FF4)







31CV("yzcov~m^2/s^2",FF4)







32CV("yTcov~mK/s",FF4)







33CV("zTcov~mK/s",FF4)







34CV("psig~m/s",FF4)







35CV("qsig~m/s",FF4)







36CV("rsig~m/s",FF4)







37CV("tp",FF4)







38CV("tq",FF4)







39CV("tr",FF4)







40CV("mgust~m/2",FF2)







41CV("thsig~deg",FF1)







42CV("phsig~deg",FF1)







43CV("DiffC",FF0)







44CV("ustar~m/s",FF4)







45CV("Tstar~K",FF4)







46CV("Cd",FF5)







48CV("MOs~m^-1",FF4)







49CV("mf~kg/ms^2",FF3)
'Manual} 


'Manual "Sonic Data 3"{
        50CV("hf~W/m^2",FF3)







51CV("nrb~W/m^2",FF3)







52CV("u~m/s",FF2)







53CV("v~m/s",FF2)







54CV("w~m/s",FF2)







55CV("vel~m/s",FF2)







56CV("dir~deg",FF1)







57CV("svel~m/s",FF2)







58CV("sdir~deg",FF1)
'Manual} 


'Manual "Sonic Time Sync"{
        'setting Sonic RTC







20SV(=1CV,W)







21SV(=2CV,W)







22SV(=3CV,W)







3CV(W)=3CV%100







3ST(=4CV,W)







2ST(=5CV,W)







1ST(=6CV,W)







2SERIAL("{TI=%2.2d[1CV].%2.2d[2CV].%2.2d[3CV] %2.2d[4CV]:%2.2d[5CV]:%2.2d[6CV]^M}",W)
'Manual} 


'Manual "TT_AV"{
        1001CV("TT~degC",AV,FF2,ND)
'Manual} 


'Manual "RH_AV"{
        1002CV("RH~%",AV,FF1,ND)
'Manual} 


'Manual "PP_AV"{
        1003CV("PP~hPa",AV,FF1,ND)
'Manual} 
  RC"Tagesdatei"("b:",ALARMS:OV:100KB:W60,DATA:OV:1MB)[0:59:23:*:*:*]
    LOGONC


'Manual "CSV erzeugen"{
        LOGOFFC















DO{COPYD dest=B:\JOBS\CONFIG\CSV\?(timestamp).csv sched=B data=Y alarms=N start=new}
'Manual} 
  RD"AnalogOut"("b:",ALARMS:OV:100KB:W60,DATA:OV:1MB)1M
    LOGOFFD


'Manual "WriteAOut"{
        'Messwerte auf 0...100% normieren







2001CV(W)=55CV*2.5



2001CV(W)=(2001CV<0)?0:((2001CV>100)?100:2001CV)



2002CV(W)=56CV*10/36



2002CV(W)=(2002CV<0)?0:((2002CV>100)?100:2002CV)



2003CV(W)=1001CV+40



2003CV(W)=(2003CV<0)?0:((2003CV>100)?100:2003CV)



2004CV(W)=1002CV



2004CV(W)=(2004CV<0)?0:((2004CV>100)?100:2004CV)



2005CV(W)=(1003CV-900)*10/15



2005CV(W)=(2005CV<0)?0:((2005CV>100)?100:2005CV)







'DA-Modul M-7028 ansteuern:



'Empfangsbuffer löschen, Daten schreiben, 250ms warten







1serial("\e{#010+%06.2f[2001CV]^M}\w[250]",W)



1serial("\e{#011+%06.2f[2002CV]^M}\w[250]",W)



1serial("\e{#012+%06.2f[2003CV]^M}\w[250]",W)



1serial("\e{#013+%06.2f[2004CV]^M}\w[250]",W)



1serial("\e{#014+%06.2f[2005CV]^M}\w[250]",W)
'Manual} 
END

Regards
Jürgen

Hi Rudy The described problems refer to dEX-2 version v2.1.18. With a screenshot the problem cannot be shown properly, because the window is too small to display the program code. But below you&#039;ll find an example of my configuration as it is saved to a file: ```` BEGIN&quot;config&quot; &#039;Generated by new dEX-2 password=&quot;immi-mnz&quot; S1=-40,60,0,1000&quot;&quot; S2=0,100,0,1000&quot;&quot; S3=900,1050,0,5000&quot;&quot; &#039;Manual &quot;Init 1&quot;{ 10$(W)=&quot;Station4&quot; &#039;Redefine default settings PROFILE FUNCTION F1_LABEL=&quot;Halt&quot; PROFILE FUNCTION F1_COMMAND=&quot;H&quot; PROFILE FUNCTION F2_LABEL=&quot;Resume&quot; PROFILE FUNCTION F2_COMMAND=&quot;G&quot; PROFILE FUNCTION F3_LABEL=&quot;Copy Data to USB&quot; PROFILE FUNCTION F3_COMMAND=&quot;COPYD dest=A:\?(serial)\ format=dbd archive=y src=B; REMOVEMEDIA&quot; PROFILE FUNCTION F4_LABEL=&quot;Create file&quot; PROFILE FUNCTION F4_COMMAND=&quot;XC&quot; &#039;Manual} &#039;Manual &quot;Init 2&quot;{ &#039;Port settings PROFILE HOST_PORT FUNCTION=SERIAL PROFILE SERSEN_PORT FUNCTION=SERIAL ph=9600,N,8,1,NOFC &#039;host port settings (Sonic) ps=RS485,9600,N,8,1,NOFC &#039;serial sensor port settings (DA-Modul) p15=2 &#039;Do not allow sleep p22=59 &#039;Data delimiter character: Semikolon p31=3 &#039;Date format: ISO(YYYY/MM/DD) p38=46 &#039;Decimal point character: ASCII 46 (.) p41=0 &#039;Time sub-second digits = 0 /D/T/h/C/n/U &#039;Format settings: free format (/h) with date (/D), time(/T), channel names (/C) and units (/U), verbose mode (/n) Y10=0,0.1 &#039;Polynom for rain gauge 1HSC(W,R) &#039;reset rain counter 2SERIAL(&quot;{^M}&quot;,W) &#039;send &lt;CR&gt; to clear Sonic receive buffer 2SERIAL(&quot;{AT=3600^M}&quot;,W) &#039;set Sonic internal average interval to maximum value 2SERIAL(&quot;{OI=0^M}&quot;,W) &#039;do not report instantaneous values 2SERIAL(&quot;{OD=1^M}&quot;,W) &#039;define output data 2SERIAL(&quot;{DC=2^M}&quot;,W) &#039;report DiffC as numbers &#039;Manual} RS5S RA&quot;Instant Values&quot;(&quot;b:&quot;,ALARMS:OV:100KB:W60,DATA:OV:1MB)5S LOGOFFA 1+V(&quot;TT~degC&quot;,=1001CV,LM,S1,NA) 1*V(&quot;RH~%&quot;,=1002CV,LM,S2,NA) 2V(&quot;PP~hPa&quot;,=1003CV,LM,S3,A,GL50V) RB&quot;Averaging&quot;(&quot;b:&quot;,ALARMS:OV:100KB:W60,DATA:OV:90D)1M LOGONB &#039;Manual &quot;Sonic Data 1&quot;{ &#039;request Sonic data 20..60CV(W)=0 &#039;clear variables 2SERIAL(&quot;\e&quot;,W) &#039;clear receive buffer 2SERIAL(&quot;{aa^M}&quot;,W) &#039;send data request &#039;parsing serial data string 2SERIAL(&quot;\m[ x =]%8f[20CV]\m[ y =]%8f[21CV]\m[ z =]%8f[22CV]\m[ T =]%8f[23CV]&quot;,=60CV,2,W) if(60CV==0){2SERIAL(&quot;\m[ xsig =]%8f[24CV]\m[ ysig =]%8f[25CV]\m[ zsig =]%8f[26CV]\m[ Tsig =]%8f[27CV]&quot;,0.25,W)} if(60CV==0){2SERIAL(&quot;\m[xycov =]%8f[28CV]\m[xzcov =]%8f[29CV]\m[xTcov =]%8f[30CV]&quot;,0.25,W)} if(60CV==0){2SERIAL(&quot;\m[yzcov =]%8f[31CV]\m[yTcov =]%8f[32CV]\m[zTcov =]%8f[33CV]&quot;,0.25,W)} if(60CV==0){2SERIAL(&quot;\m[ psig =]%8f[34CV]\m[ qsig =]%8f[35CV]\m[ rsig =]%8f[36CV]&quot;,0.25,W)} if(60CV==0){2SERIAL(&quot;\m[ tp =]%8f[37CV]\m[ tq =]%8f[38CV]\m[ tr =]%8f[39CV]&quot;,0.25,W)} if(60CV==0){2SERIAL(&quot;\m[mgust =]%8f[40CV]\m[thsig =]%8f[41CV]\m[phsig =]%8f[42CV]\m[DiffC =]%8f[43CV]&quot;,0.25,W)} if(60CV==0){2SERIAL(&quot;\m[ustar =]%8f[44CV]\m[Tstar =]%8f[45CV]\m[ Cd =]%8f[46CV]&quot;,0.25,W)} &#039;Manual} &#039;Manual &quot;Sonic Data 2&quot;{ if(60CV==0){2SERIAL(&quot;\m[ MOs =]%8f[48CV]\m[ mf =]%8f[49CV]\m[ hf =]%8f[50CV]\m[ nrb =]%8f[51CV]&quot;,0.25,W)} if(60CV==0){2SERIAL(&quot;\m[ u =]%8f[52CV]\m[ v =]%8f[53CV]\m[ w =]%8f[54CV]&quot;,0.25,W)} if(60CV==0){2SERIAL(&quot;\m[ vel =]%8f[55CV]\m[ dir =]%8f[56CV]\m[ svel =]%8f[57CV]\m[ sdir =]%8f[58CV]&quot;,0.25,W)} 20CV(&quot;x~m/s&quot;,FF2) 21CV(&quot;y~m/s&quot;,FF2) 22CV(&quot;z~m/s&quot;,FF2) 23CV(&quot;T~degC&quot;,FF2) 24CV(&quot;xsig~m/s&quot;,FF4) 25CV(&quot;ysig~m/s&quot;,FF4) 26CV(&quot;zsig~m/s&quot;,FF4) 27CV(&quot;Tsig~degC&quot;,FF4) 28CV(&quot;xycov~m^2/s^2&quot;,FF4) 29CV(&quot;xzcov~m^2/s^2&quot;,FF4) 30CV(&quot;xTcov~mK/s&quot;,FF4) 31CV(&quot;yzcov~m^2/s^2&quot;,FF4) 32CV(&quot;yTcov~mK/s&quot;,FF4) 33CV(&quot;zTcov~mK/s&quot;,FF4) 34CV(&quot;psig~m/s&quot;,FF4) 35CV(&quot;qsig~m/s&quot;,FF4) 36CV(&quot;rsig~m/s&quot;,FF4) 37CV(&quot;tp&quot;,FF4) 38CV(&quot;tq&quot;,FF4) 39CV(&quot;tr&quot;,FF4) 40CV(&quot;mgust~m/2&quot;,FF2) 41CV(&quot;thsig~deg&quot;,FF1) 42CV(&quot;phsig~deg&quot;,FF1) 43CV(&quot;DiffC&quot;,FF0) 44CV(&quot;ustar~m/s&quot;,FF4) 45CV(&quot;Tstar~K&quot;,FF4) 46CV(&quot;Cd&quot;,FF5) 48CV(&quot;MOs~m^-1&quot;,FF4) 49CV(&quot;mf~kg/ms^2&quot;,FF3) &#039;Manual} &#039;Manual &quot;Sonic Data 3&quot;{ 50CV(&quot;hf~W/m^2&quot;,FF3) 51CV(&quot;nrb~W/m^2&quot;,FF3) 52CV(&quot;u~m/s&quot;,FF2) 53CV(&quot;v~m/s&quot;,FF2) 54CV(&quot;w~m/s&quot;,FF2) 55CV(&quot;vel~m/s&quot;,FF2) 56CV(&quot;dir~deg&quot;,FF1) 57CV(&quot;svel~m/s&quot;,FF2) 58CV(&quot;sdir~deg&quot;,FF1) &#039;Manual} &#039;Manual &quot;Sonic Time Sync&quot;{ &#039;setting Sonic RTC 20SV(=1CV,W) 21SV(=2CV,W) 22SV(=3CV,W) 3CV(W)=3CV%100 3ST(=4CV,W) 2ST(=5CV,W) 1ST(=6CV,W) 2SERIAL(&quot;{TI=%2.2d[1CV].%2.2d[2CV].%2.2d[3CV] %2.2d[4CV]:%2.2d[5CV]:%2.2d[6CV]^M}&quot;,W) &#039;Manual} &#039;Manual &quot;TT_AV&quot;{ 1001CV(&quot;TT~degC&quot;,AV,FF2,ND) &#039;Manual} &#039;Manual &quot;RH_AV&quot;{ 1002CV(&quot;RH~%&quot;,AV,FF1,ND) &#039;Manual} &#039;Manual &quot;PP_AV&quot;{ 1003CV(&quot;PP~hPa&quot;,AV,FF1,ND) &#039;Manual} RC&quot;Tagesdatei&quot;(&quot;b:&quot;,ALARMS:OV:100KB:W60,DATA:OV:1MB)[0:59:23:*:*:*] LOGONC &#039;Manual &quot;CSV erzeugen&quot;{ LOGOFFC DO{COPYD dest=B:\JOBS\CONFIG\CSV\?(timestamp).csv sched=B data=Y alarms=N start=new} &#039;Manual} RD&quot;AnalogOut&quot;(&quot;b:&quot;,ALARMS:OV:100KB:W60,DATA:OV:1MB)1M LOGOFFD &#039;Manual &quot;WriteAOut&quot;{ &#039;Messwerte auf 0...100% normieren 2001CV(W)=55CV*2.5 2001CV(W)=(2001CV&lt;0)?0:((2001CV&gt;100)?100:2001CV) 2002CV(W)=56CV*10/36 2002CV(W)=(2002CV&lt;0)?0:((2002CV&gt;100)?100:2002CV) 2003CV(W)=1001CV+40 2003CV(W)=(2003CV&lt;0)?0:((2003CV&gt;100)?100:2003CV) 2004CV(W)=1002CV 2004CV(W)=(2004CV&lt;0)?0:((2004CV&gt;100)?100:2004CV) 2005CV(W)=(1003CV-900)*10/15 2005CV(W)=(2005CV&lt;0)?0:((2005CV&gt;100)?100:2005CV) &#039;DA-Modul M-7028 ansteuern: &#039;Empfangsbuffer l&ouml;schen, Daten schreiben, 250ms warten 1serial(&quot;\e{#010+%06.2f[2001CV]^M}\w[250]&quot;,W) 1serial(&quot;\e{#011+%06.2f[2002CV]^M}\w[250]&quot;,W) 1serial(&quot;\e{#012+%06.2f[2003CV]^M}\w[250]&quot;,W) 1serial(&quot;\e{#013+%06.2f[2004CV]^M}\w[250]&quot;,W) 1serial(&quot;\e{#014+%06.2f[2005CV]^M}\w[250]&quot;,W) &#039;Manual} END ```` Regards J&uuml;rgen

Hi Juergen,

The limit of a manual channel stays even in version 2.1.18 is at 4 lines, so if you use more lines, the remaining will cause failure to save the channel.

Best regards,
Rudy Gunawan

Hi Juergen, The limit of a manual channel stays even in version 2.1.18 is at 4 lines, so if you use more lines, the remaining will cause failure to save the channel. Best regards, Rudy Gunawan
173
3
2
live preview
enter atleast 10 characters
WARNING: You mentioned %MENTIONS%, but they cannot see this message and will not be notified
Saving...
Saved
With selected deselect posts show selected posts
All posts under this topic will be deleted ?
Pending draft ... Click to resume editing
Discard draft