2017-06-01 9 views
0

im verweigert eine sehr einfache Logik mit IIS 7 und C# Rasiermesser im mit System.IO.Ports.SerialPort und USB-Seriell-Adapter usb seriellen Controller d und nach einigen „läuft“, in denen in den „läuft das Schreiben "alles funktioniert gut, das Programm aus irgendeinem Grund immer Zugang zu comX- verweigertZugriff auf serielle com ist

i überprüft auch, dass die Parameter im, Senden korrekt sind (Baudrate, Parität, usw.)

string[] ports = getAvilablePorts(fs); 
int[] baudRate = new int[] { 2400, 9600, 19200, 38400, 115200 }; 
System.IO.Ports.SerialPort serialPort = new System.IO.Ports.SerialPort(); 

if (OpenSerailport(fs, serialPort, ports, baudRate[1], 
     System.Text.Encoding.ASCII, System.IO.Ports.StopBits.One, dataBits, System.IO.Ports.Parity.None,         System.IO.Ports.Handshake.None, readTimeOut, writeTimeout)) 
    {  
     string grossWeight = readData(serialPort, fs); 

     } 

und die Funktionen

string[] getAvilablePorts(FileStream fs) 
    { 

     string[] ports = System.IO.Ports.SerialPort.GetPortNames(); 
    // log(fs, false, "portsAvilable:"); 
     for (int i = 0; i < ports.Length; i++) 
     { 
     // log(fs, false, ports[i]); 
     } 
     // log(fs, true); 
     return ports; 


    } 




string readData(System.IO.Ports.SerialPort serialPort, FileStream fs) 
    { 

     string grossWeight = "", data = ""; 



     if (!serialPort.IsOpen) 
      ReOpenPort(serialPort, fs); 

     serialPort.DiscardInBuffer(); 
     try 
     { 

      while (true) 
      {   


       if(serialPort.BytesToRead > 0) 
       { 
        data = serialPort.ReadExisting(); 
        data = data.Substring(1, 23); 
        break; 
       } 
       else 
      { 
       //log(fs, true, "no data was sent from:", serialPort.PortName); 
       break; 
      } 

      }    


     } 
     catch (Exception ex) 
     { 
      // log(fs, true, "could not read from", serialPort.PortName, "reason:", ex.Message);    
      return ""; 
     } 
     finally 
     { 
      fs.Close(); 
     } 



     if (data.ToLower().Contains("e")); 
     // log(fs, true, "ERROR:", "Error reading data from scale", "time:", Convert.ToString(DateTime.Now)); 
     else if (data.ToLower().Contains("o")); 
      // log(fs, true, "ERROR:", "Overload", "time:", Convert.ToString(DateTime.Now)); 
     else if (data.ToLower().Contains("m")); 
      // log(fs, true, "ERROR:", "Motion", "time:", Convert.ToString(DateTime.Now)); 
     else 
     { 

      grossWeight = data.Substring(7, 6); 

      // log(fs, true, "READ DATA FROM SCALE:", "netWeight:", netWeight, "grossWeight", grossWeight, "peekValue:", peakValues); 
     } 

     if (!String.IsNullOrWhiteSpace(grossWeight)) 
      return grossWeight; 
     else 
      return ""; 


    } 


bool OpenSerailport(FileStream fs, System.IO.Ports.SerialPort serialPort, string[] ports, int baudRate, System.Text.Encoding encoding, System.IO.Ports.StopBits stopBits, 
     int dataBits, System.IO.Ports.Parity parity, /*System.Environment newLine,*/ System.IO.Ports.Handshake handShake, int readTimeOut, int writeTimeout) 
    { 
     try 
     { 
      if (serialPort.IsOpen)//close previous connections if there are any 
       serialPort.Close(); 

      //init serial port 
      serialPort.Encoding = encoding; 
      serialPort.StopBits = stopBits; 
      serialPort.DataBits = dataBits; 
      serialPort.Parity = parity; 
      serialPort.NewLine = System.Environment.NewLine; 
      serialPort.Handshake = handShake; 
      serialPort.ReadTimeout = readTimeOut; 
      serialPort.WriteTimeout = writeTimeout; 
      serialPort.PortName = ports[ports.Length - 1]; 
      serialPort.BaudRate = baudRate; 
      if (!serialPort.IsOpen) 
      { 
       serialPort.Open(); 
       return true; 
      } 
      return false; 

     } 
     catch (UnauthorizedAccessException ex) 
     { 
      // log(fs, true, "CANNOT OPEN PORT", "portName:", Convert.ToString(serialPort.PortName), "reason", ex.Message); 
      fs.Close(); 
      return false; 

     } 
     finally 
     { 
     // log(fs, true, "GIVEN DATA:", "Encoidng:", Convert.ToString(serialPort.Encoding), "StopBits:", Convert.ToString(serialPort.StopBits), "dataBits:", Convert.ToString(serialPort.DataBits), 
     //  "Parity:", Convert.ToString(serialPort.Parity), "newLine:", "\\n \\r", "handshake:", Convert.ToString(serialPort.Handshake), 
     //  "readTimeout:", Convert.ToString(serialPort.ReadTimeout), "writeTimeOut:", Convert.ToString(serialPort.WriteTimeout), "portname:", Convert.ToString(serialPort.PortName), 
     //  "baudRate:", Convert.ToString(serialPort.BaudRate)); 

     } 
+0

unter welchen Benutzer IIS ausgeführt wird? Überprüfen Sie den Anwendungspool. –

Antwort

0

ich es geschafft, das Problem zu lösen durch Zugabe SerialPort.Close();

allen meinen Ausnahmen Handler

Verwandte Themen