Помогите, пожалуйста, разобраться в коде! Не могу понять где происходит вывод не нулевых значений.   <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <script type="text/javascript"> var host="10.1.0.99"; var Module_Port=502; var NetID=1; var DO=new Array; var AAO=new Array; DO[631]=1; var MAXCDEL='500ms'; AAO[427]=new Array(12,12,12); AAO[296]=new Array(32767,32767,32767); AAO[328]=new Array(-32768,-32768,-32768); var AICh=3; </script> <html lang="en"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>HMI</title> <script src="AC_OETags.js" language="javascript"></script> <style type="text/css">   body {font: 12px Arial; background-color: #D0D0D0; margin: 0px; overflow: auto}   table {font: 14px Arial; background-color: #EEEEEE; width: 96%; border-collapse: collapse}   caption {font: bold 14px Arial; text-align: left}   input {font: normal 12px arial}   .Clr_Button {font: normal 11px arial; width: 30%} </style> <script type="text/javascript" src="AnalogIO.js"></script> <script type="text/javascript">   var requiredMajorVersion=9;   var requiredMinorVersion=0;   var requiredRevision=28;   var Timer, Timeout;   var Scanrate=300;   var IsSent;   var iProcess;   function thisMovie(movieName){     if (navigator.appName.indexOf("Microsoft")!=-1) { 	  return window[movieName];     } else { 	  return document[movieName];     }   }    function ModbusSocketClose(event_string){     //alert(event_string);     IsSent=-1;   }   function sendToActionScript(FunCode, ReferNum, Counnt, Value){     thisMovie("msocket").sendToActionScript(FunCode, ReferNum, Counnt, Value);   }    function setData(msg){     var patt1=/[0-9a-f]{1,2}/g;     var result=msg.match(patt1);     var ivalue;     var temp; if(result!=null){   try{ 	  if(iProcess==0 && result[1]=="04" && parseInt(result[2], 16)==(AICh*2)){ 	    for(var i=0; i<AICh; i++){ 		  if(DO[631]){ 		    ivalue=parseInt(result[(i<<1)+3]+result[(i<<1)+4], 16); 		    if(ivalue>32767) ivalue-=65536; 		    document.getElementById("AI"+i).innerHTML=ivalue; 		  } 		  else 		    document.getElementById("AI"+i).innerHTML=(result[(i<<1)+3]+result[(i<<1)+4]).toUpperCase(); 		  document.getElementById("AI_Floating"+i).innerHTML=Hex2Float_AI(result[(i<<1)+3]+result[(i<<1)+4], i); 	    } 	  }  	  if(iProcess==1 && result[1]=="04" && parseInt(result[2], 16)==((32+AICh)*2)){ 	    var iIdx=0; 	    var i=0;  	    do{ 		  if(i<AICh){ 		    if(DO[631]){ 			  ivalue=parseInt(result[(i<<1)+3]+result[(i<<1)+4], 16); 			  if(ivalue>32767) ivalue-=65536; 			  document.getElementById("Lahch_High_"+iIdx).innerHTML=ivalue; 		    } 		    else 			  document.getElementById("Lahch_High_"+iIdx).innerHTML=(result[(i<<1)+3]+result[(i<<1)+4]).toUpperCase(); 		    document.getElementById("Lahch_High_Float_"+iIdx).innerHTML=Hex2Float_AI(result[(i<<1)+3]+result[(i<<1)+4], iIdx++); 		  } 		  else if(i>31){ 		    if(DO[631]){ 			  ivalue=parseInt(result[(i<<1)+3]+result[(i<<1)+4], 16); 			  if(ivalue>32767) ivalue-=65536; 			  document.getElementById("Lahch_Low_"+iIdx).innerHTML=ivalue; 		    } 		    else 			  document.getElementById("Lahch_Low_"+iIdx).innerHTML=(result[(i<<1)+3]+result[(i<<1)+4]).toUpperCase(); 		    document.getElementById("Lahch_Low_Float_"+iIdx).innerHTML=Hex2Float_AI(result[(i<<1)+3]+result[(i<<1)+4], iIdx++); 		  } 		  i++; 		  if(i==31) iIdx=0; 	    }while(i<(32+AICh)) 	  }  	  if(iProcess==2 && result[1]=="02" && parseInt(result[2], 16)==byteCount(32+AICh)){ 	    var decvalue_high=(parseInt(result[5], 16)<<16)+(parseInt(result[4], 16)<<8)+parseInt(result[3], 16); 	    var decvalue_low=(parseInt(result[8], 16)<<8)+parseInt(result[7], 16);  	    for(var i=0; i<AICh; i++){ 		  temp=document.getElementById("Alarm_High_"+i); 		  if(temp!=null) 		    temp.innerHTML=(decvalue_high&(0x01<<i))?"<font color='red'>ON</font>":"OFF";  		  temp=document.getElementById("Alarm_Low_"+i); 		  if(temp!=null) 		    temp.innerHTML=(decvalue_low&(0x01<<i))?"<font color='red'>ON</font>":"OFF"; 	    } 	  }   }   catch(err){     var txt="There was an error on this page.\n\n";     txt+="Error description: " + err.description + "\n\n";     txt+="Click OK to continue.\n\n";     //alert(txt);   } }     iProcess++;     if(iProcess>2) 	  iProcess=0;   }    function byteCount(bits){     return parseInt((parseInt(bits)+7)/8);   }    var flashReady=false;   function IsReady(){     flashReady=true;   }    var myTimeticks=0;   function myTimer(){     if(flashReady==true){ 	  Timer=window.clearInterval(Timer); 	  thisMovie("msocket").ModbusSocketConnect(NetID, host, Module_Port); 	  Timer=setInterval("timerupdate()", Scanrate);     }     else if(myTimeticks>10){ 	  Timer=window.clearInterval(Timer);     }     myTimeticks+=1;   }    function Init(){     iProcess=0;     IsSent=0;     Timeout=0;      host=location.hostname;      if(flashReady==false){ 	  Timer=setInterval("myTimer()", 100); 	  return;     }      thisMovie("msocket").ModbusSocketConnect(NetID, host, Module_Port);     Timer=setInterval("timerupdate()", Scanrate);   }    var Recon_Timeticks;   function timerupdate(){     var tmp_comm=document.getElementById("communication");     var tmp_timeout=document.getElementById("timeout");     var tmp_comm_status=document.getElementById("tab_comm_status");     if(thisMovie("msocket").ModbusSocketStatus()==1){ 	  tmp_comm_status.style.backgroundColor="#EEEEEE"; 	  tmp_comm.innerHTML="Good";     }     else{ 	  tmp_comm_status.style.backgroundColor="#FF1A1A"; 	  tmp_comm.innerHTML="Failed"; 	  tmp_timeout.innerHTML="";  	  Recon_Timeticks+=1; 	  if((Scanrate*Recon_Timeticks)>20000){ 	    if(thisMovie("msocket").ModbusSocketStatus()==1) 		  thisMovie("msocket").ModbusSocketClose(); 	    thisMovie("msocket").ModbusSocketConnect(NetID, host, Module_Port); 	    Recon_Timeticks=0; 	  } 	  IsSent=0;     }     if(IsSent==1){ 	  if(thisMovie("msocket").IsRead()==1){ 	    tmp_timeout.innerHTML=""; 	    setData(thisMovie("msocket").receiveFromActionScript()); 	  } 	  else{ 	    Timeout++; 	    if(Timeout>1){ 		  tmp_timeout.innerHTML="- Timeout -"; 		  Recon_Timeticks=0; 	    } 	    else return; 	  } 	  IsSent=0; 	  Timeout=0;     }     if(IsSent==0){ 	  switch(iProcess){ 	    case 0: 		  sendToActionScript(4, 0, AICh, 0); 		  break; 	    case 1: 		  sendToActionScript(4, 236, (32+AICh), 0); 		  break; 	    case 2: 		  sendToActionScript(2, 224, (32+AICh), 0); 		  break; 	  }   	  IsSent=1;     }   }    function ShowStrainGauge(){     var str=(DO[631]>0?"Engineering":"Hex");     document.write("<tr bgcolor='#C0C0C0'>");     document.write("<td width='25%'>"+str+" Format</td>");     document.write("<td width='25%'>Floating Format</td></tr>");     for(var i=0; i<AICh; i++){ 	  document.write("<tr><td width='25%'>AI"+i+"</td>"); 	  document.write("<td width='25%'>"+(30000+i)+"</td>"); 	  document.write("<td width='25%'><b><div id='AI"+i+"'>0000</div></b></td>"); 	  document.write("<td width='25%'><b><div id='AI_Floating"+i+"'>0000</div></b></td></tr>");     }   }    function ShowAILatchedTable(){     var str=(DO[631]>0?"Engineering":"Hex");     document.write("<tr bgcolor='#C0C0C0'>");     document.write("<td width='16%'>"+str+" Format</td>");     document.write("<td width='16%'>Floating Format</td>");     document.write("<td width='16%'>"+str+" Format</td>");     document.write("<td width='16%'>Floating Format</td></tr>");     for(var i=0; i<AICh; i++){ 	  document.write("<tr><td width='10%'>AI"+i+"</td>"); 	  document.write("<td width='13%'>"+(30236+i)+"</td>"); 	  document.write("<td width='16%'><b><div id='Lahch_High_"+i+"'>0000</div></b></td>"); 	  document.write("<td width='16%'><b><div id='Lahch_High_Float_"+i+"'>0000</div></b></td>"); 	  document.write("<td width='13%'>"+(30268+i)+"</td>"); 	  document.write("<td width='16%'><b><div id='Lahch_Low_"+i+"'>0000</div></b></td>"); 	  document.write("<td width='16%'><b><div id='Lahch_Low_Float_"+i+"'>0000</div></b></td></tr>");     }   }   function ShowAIAlarmTable(){     for(var i=0; i<AICh; i++){ 	  document.write("<tr><td width='10%'>AI"+i+"</td>"); 	  document.write("<td width='15%'>"+PrintModAddr(10224+i)+"</td>"); 	  document.write("<td width='15%'><b><div id='Alarm_High_Value_"+i+"'>0</div></b></td>"); 	  document.getElementById("Alarm_High_Value_"+i).innerHTML=Dec2Float_AI(AAO[296][i], i); 	  document.write("<td width='15%'><b><span id='Alarm_High_"+i+"'>-</span></b> <input id='BtnClearH"+i+"' type='button' value='Clear' onclick='Clear_onclick("+(764+i)+")' /></td>"); 	  document.write("<td width='15%'>"+PrintModAddr(10256+i)+"</td>"); 	  document.write("<td width='15%'><b><div id='Alarm_Low_Value_"+i+"'>0</div></b></td>"); 	  document.getElementById("Alarm_Low_Value_"+i).innerHTML=Dec2Float_AI(AAO[328][i], i); 	  document.write("<td width='15%'><b><span id='Alarm_Low_"+i+"'>-</span></b> <input id='BtnClearL"+i+"' type='button' value='Clear' onclick='Clear_onclick("+(796+i)+")' /></td></tr>");     }   }   function Clear_onclick(BtnName){     sendToActionScript(5, BtnName, 1, 1);     IsSent=1;   }   function ClearLatch_onclick(Latched_Type){     var DO_Address=(Latched_Type==0?634:635);     sendToActionScript(5, DO_Address, 1, 1);     IsSent=1;   } </script> </head> <body onload="Init()"> <script type="text/javascript"> var hasProductInstall=DetectFlashVer(6, 0, 65); var hasRequestedVersion=DetectFlashVer(requiredMajorVersion, requiredMinorVersion, requiredRevision); if ( hasProductInstall && !hasRequestedVersion ) { var MMPlayerType = (isIE == true) ? "ActiveX" : "PlugIn"; var MMredirectURL = window.location;     document.title = document.title.slice(0, 47) + " - Flash Player Installation";     var MMdoctitle = document.title; AC_FL_RunContent(   "src", "Install",   "FlashVars", "MMredirectURL="+MMredirectURL+'&MMplayerType='+MMPlayerType+'&MMdoctitle='+MMdoctitle+"",   "width", "100%",   "height", "100%",   "align", "middle",   "id", "msocket",   "quality", "high",   "bgcolor", "#869ca7",   "name", "msocket",   "allowScriptAccess","always",   "type", "application/x-shockwave-flash",   "pluginspage", "http://www.adobe.com/go/getflashplayer" ); } else if (hasRequestedVersion) { AC_FL_RunContent(    "src", "msocket",    "width", "1",    "height", "1",    "align", "middle",    "id", "msocket",    "quality", "high",    "bgcolor", "#869ca7",    "name", "msocket",    "allowScriptAccess","always",    "type", "application/x-shockwave-flash",    "pluginspage", "http://www.adobe.com/go/getflashplayer" );   } else {  // flash is too old or we can't detect the plugin     var alternateContent = 'Alternate HTML content should be placed here. '    + 'This content requires the Adobe Flash Player. '     + '<a href=http://www.adobe.com/go/getflash/>Get Flash</a>';     document.write(alternateContent);  // insert non-flash content   }  </script> <noscript>     <object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"    id="msocket" width="1" height="1"    codebase="http://fpdownload.macromedia.com/get/flashplayer/current/swflash.cab">    <param name="movie" value="msocket.swf" />    <param name="quality" value="high" />    <param name="bgcolor" value="#869ca7" />    <param name="allowScriptAccess" value="always" />    <embed src="msocket.swf" quality="high" bgcolor="#869ca7"     width="1px" height="1px" name="msocket" align="middle"     play="true"     loop="false"     quality="high"     allowScriptAccess="always"     type="application/x-shockwave-flash"     pluginspage="http://www.adobe.com/go/getflashplayer">    </embed> </object> </noscript>   <div align="center">   <br />   <table border="1" bordercolor="#808080">     <caption>Analog Input</caption>     <tr bgcolor="#C0C0C0"> 	  <td width="25%" rowspan="2">No</td> 	  <td width="25%" rowspan="2">Register</td> 	  <td width="50%" colspan="2">Value</td>     </tr>   <script type="text/javascript">     ShowStrainGauge();   </script>   </table>    <br />   <table border="1" bordercolor="#808080">     <caption>High/Low Latched Value for Analog Inputs</caption>     <tr bgcolor="#C0C0C0"> 	  <td width="10%" rowspan="3">No</td> 	  <td width="45%" colspan="3">Latched High</td> 	  <td width="45%" colspan="3">Latched Low</td>     </tr>     <tr bgcolor="#C0C0C0"> 	  <td width="13%" rowspan="2">Register</td> 	  <td width="32%" colspan="2">Value</td> 	  <td width="13%" rowspan="2">Register</td> 	  <td width="32%" colspan="2">Value</td>     </tr>   <script type="text/javascript">     ShowAILatchedTable();   </script>   </table>   <table>     <tr height="20" bgcolor="#D0D0D0"> 	  <td width="10%"></td> 	  <td width="45%" valign="middle" align="right"><input id="BtnClearLatchH" type="button" value="Clear AI Latched" onclick="ClearLatch_onclick(0)" class="Clr_Button" />  </td> 	  <td width="45%" valign="middle" align="right"><input id="BtnClearLatchL" type="button" value="Clear AI Latched" onclick="ClearLatch_onclick(1)" class="Clr_Button" />  </td>     </tr>   </table>   <br />   <table border="1" bordercolor="#808080">     <caption>High/Low Alarm Status for Analog Inputs</caption>     <tr bgcolor="#C0C0C0"> 	  <td width="10%" rowspan="2">No</td> 	  <td width="45%" colspan="3">High Alarm</td> 	  <td width="45%" colspan="3">Low Alarm</td>     </tr>     <tr bgcolor="#C0C0C0"> 	  <td width="15%">Register</td> 	  <td width="15%">Value</td> 	  <td width="15%">Status</td> 	  <td width="15%">Register</td> 	  <td width="15%">Value</td> 	  <td width="15%">Status</td>     </tr>   <script type="text/javascript">     ShowAIAlarmTable();   </script>   </table>   <br />   <table border="0">     <tr id="tab_comm_status"> 	  <td width="33%" align="right">Communication Status: </td> 	  <td width="33%"><div id="communication"></div></td> 	  <td width="34%"><font color="#666666"><div id="timeout"></div></font></td>     </tr>   </table>   </div> </body> </html>