Ubuntu Server'da 9.04 üzerinde çalışan bir şey küçücük C # konsol uygulaması geçirme

5 Cevap

Ben C # kod parçası göç etmek isteyen bir linux noob ben:

using System;
using System.IO;
using System.IO.Ports;

public class LoadCell
{
    private static string configFile = Directory.GetCurrentDirectory() + "\\LoadCell.config";
    private static string errorLog = Directory.GetCurrentDirectory() + "\\LoadCell.log";
    private static string puerto = "COM1";

    public static void Main (string[] args)
    {
        if(File.Exists(configFile))
        {
            TextReader tr = new StreamReader(configFile);
            puerto = tr.ReadToEnd();
            tr.Close();
        }

        if(args.Length > 0)
        {
            switch(args[0])
            {
                case "-ayuda":
                    Console.WriteLine("\r\nEste programa esta diseñado para capturar el peso medido actualmente por la báscula a través de un puerto (por defecto es el COM1). Recuerde que el indicador debe estar configurado para:");
                    Console.WriteLine("\r\npuerto: " + puerto);
                    Console.WriteLine("baud rate: 4800");
                    Console.WriteLine("parity: none");
                    Console.WriteLine("data bits: 8");
                    Console.WriteLine("stop bit: one");
                    Console.WriteLine("\r\nEn caso de ocurrir un error recuerde revisar el log de errores (" + errorLog + ").");
                    Console.WriteLine("\r\nLos posibles argumentos son:");
                    Console.WriteLine("\r\n-ayuda: este ya lo sabes usar...");
                    Console.WriteLine("\r\n-puerto <nombre>: cambia el puerto al nuevo valor creando un archivo de configuración (" + configFile + ")");
                    Console.WriteLine("\r\n-default: elimina el archivo de configuración para retomar la configuración inicial");
                    break;

                case "-default":
                    File.Delete(configFile);
                    Console.WriteLine("\r\narchivo de configuración eliminado");
                    break;

                case "-puerto":
                    if(args.Length > 1)
                    {
                        puerto = args[1];
                        TextWriter tw = new StreamWriter(configFile);
                        tw.Write(puerto);
                        tw.Close();
                        Console.WriteLine("\r\npuerto cambiado a " + puerto);
                    }
                    else
                    {
                        Console.WriteLine("\r\nse esperaba un nombre de puerto");
                    }
                    break;
            }
        }
        else
        {
            new LoadCell();
        }
    }

    private static void log(string text)
    {
        Console.Write("ha ocurrido un error...");
        TextWriter sw = File.AppendText(errorLog);
        sw.WriteLine("[" + System.DateTime.Now.ToString() + "] " + text);
        sw.Close();
    }

    public LoadCell()
    {
        try
        {
            SerialPort port = new SerialPort(puerto, 4800, Parity.None, 8,  StopBits.One);
            port.NewLine = "\r";
            port.ReadTimeout = 10000;
            port.Open();
            port.WriteLine("RA:");
            port.DiscardInBuffer();
            Console.Write(port.ReadLine());
        }
        catch(Exception e)
        {
            log("Error: " + e.ToString());
        }
    }
}

başka bir şey için herhangi bir öneri takdir edilecektir!

btw, doğrudan PHP içinde yapıyor konuda ne düşünüyorsunuz, sonuç gibi bir PHP dosyası kullanılır, çünkü:

function peso() {

    $resultado = utf8_encode(exec('loadcell'));

    if(preg_match('/^RA:\s*([0-9]{1,8})$/i', $resultado, $m) > 0) {

    	json_exit(array('peso' => $m[1]));

    } else {

    	json_exit(array('error' => $resultado));

    }

}

teşekkürler!

5 Cevap

Patika için Linux öne eğik ve Windows backslash'lar kullanır, böylece gibi bir şey yapmak gerekir unutmayın:

private static string configFile = Path.Combine(Directory.GetCurrentDirectory(), "LoadCell.config");
// Or...
private static string configFile = Directory.GetCurrentDirectory() + Path.DirectorySeparatorChar + "LoadCell.config";

Eğer mono derlemek zaman kenara, ne çalışmıyor?

Ayrıca, MoMA aracılığıyla uygulaması çalıştırmak.

Ben bu soruya cevap vermez farkında, ama bu php script web çağrıldığında ise, iki farklı http istekleri aynı anda seri port açmaya yok sağlamak için kilitleme çeşit ihtiyacımız olacak.

Önbelleğe çeşit (uygunsa) uygulamak böylece seri port aksi işgal edilirse script, yerine bir hata mesajı yerine, eski bir değer sağlayabilir eğer bakın.

If you want to use the serial port with Mono on linux, check your version is up to date. If your version is too old, you might encounter this bug
I think it was fixed in version > 1.9, but I know it was still in 1.9.1

Uygulama seri bağlantı noktasına yazma bir şey yapmaz ise, ince olmalıdır, aksi halde, workaround bu deneyebilirsiniz

Ben burada sorunun ne olduğunu pek emin değilim, ama yine PHP kullanarak eğer, emin olun, liman Code PHP. PHP PHP destekli bir sunucu çalıştırmak herhangi bir makinede çalışan olarak, bu yaklaşım platformlarda oldukça bağımsız konum.

Sadece C # kullanarak denediniz mi? Mono project. NET framework bir açık kaynak, çapraz platform. NET bağlantı noktası sağlar. Eğer (muhtemelen zaten işlevsel ve test olan) yeniden yazmak kod zorunda önleyebilirsiniz bu şekilde.