Как я могу прочитать строку от opennetcf.io.ports.serialport?C#

Место общения программистов C#
Ответить Пред. темаСлед. тема
Anonymous
 Как я могу прочитать строку от opennetcf.io.ports.serialport?

Сообщение Anonymous »

Я пишу команды на ремне принтера с использованием opennetcf.io.ports.serialport Таким образом: < /p>

public static bool SendCommandToPrinter(string cmd)
{
bool success; // init'd to false by default
try
{
SerialPort serialPort = new SerialPort();
serialPort.BaudRate = 19200;
serialPort.Handshake = Handshake.XOnXOff;
serialPort.Open();
serialPort.Write(cmd);
serialPort.Close();
success = true;
}
catch // may not need a try/catch block, as success defaults to false
{
success = false;
}
return success;
}
< /code>

... теперь мне нужно прочитать значение, возвращаемое из звонка «получить Val», но я не знаю, как, и я не смог найти, как, сделать это. У меня есть следующее начало, но я не знаю, как «заполнить бланк»: < /p>

string getDeviceLang = string.Format("! U1 getvar {0}device.languages{0}", quote);

public static string GetSettingFromPrinter(string cmd)
{
string settingVal = string.Empty;

SerialPort serialPort = new SerialPort();
serialPort.BaudRate = 19200;
serialPort.Handshake = Handshake.XOnXOff;
serialPort.Open();
serialPort.Write(cmd); // do I even need this call to write?
settingVal = serialPort.Read() // ???
serialPort.Close();
return settingVal;
}
< /code>

opennetcf.io.ports.serialport's read () метод принимает массив байтов («буфер»), за которым следует int («смещение») и еще один int («count») и возвращает int. Я не знаю, что использовать в качестве ARG или что делать с результатом Int.public static string GetSettingFromPrinter(string cmd)
{
string settingVal = string.Empty;
try
{
SerialPort serialPort = new SerialPort();
serialPort.BaudRate = 19200;
serialPort.Handshake = Handshake.XOnXOff;
serialPort.Open();
serialPort.Write(cmd);
// testing...
settingVal = serialPort.ReadLine();
serialPort.Close();
return settingVal;
}
catch (Exception x)
{
MessageBox.Show(x.ToString());
return settingVal;
}
}
< /code>

..., но это вознаграждает меня меньшим количеством, чем поставлен, "System.notsupportedException: еще не opennetcf.ip.ports.serialport.readto (string value) AT ..." < /p>

update. />
serialPort.ReadTimeout = 500;// made no difference
< /code>

обновление 3 < /h2>

На основе этого я попытался заставить его работать таким образом: < /p>

public class PrintUtils
{
static SerialPort _serialPort;
static bool keepReading = true;
static string settingVal = string.Empty;
. . .

public static string GetSettingFromPrinter(string cmd)
{
Thread readThread = new Thread(ReadSetting());
try
{
_serialPort = new SerialPort();
_serialPort.BaudRate = 19200;
_serialPort.Handshake = Handshake.XOnXOff;
_serialPort.Open();
while (keepReading)
{
_serialPort.WriteLine(cmd);
}
_serialPort.Close();
return settingVal;
}
catch (Exception x)
{
MessageBox.Show(x.ToString());
return settingVal;
}
}

public static void ReadSetting()
{
while (keepReading)
{
try
{
settingVal = _serialPort.ReadLine();
keepReading = settingVal.Equals(string.Empty);
}
catch (Exception ex) { MessageBox.Show(ex.ToString());}
}
}
< /code>

...but i get, " method 'pdaclient.printutils.read ()' ссылки на ссылки без скобок < /em>" На этой строке: < /p>

Thread readThread = new Thread(Read);
< /code>

Если я do < /em> дайте это при парену: < /p>

Thread readThread = new Thread(ReadSetting());
< /code>

...it сообщает мне: « аргумент '1': не может преобразовать из 'void' в system.threading.threadstart '< /em>" < /p>

и: < /p>

System.Threading.Thread.Thread (System.Threading.ThreadStart) 'имеет некоторые неверные аргументы < /em> "< /p>

Обновление 4 < /h2>

и с этим кодом: < /p>

public static string GetSettingFromPrinter(string cmd)
{
string setting = string.Empty;
byte[] buffer = null;
try
{
SerialPort serialPort = new SerialPort();
serialPort = new SerialPort();
serialPort.BaudRate = 19200;
serialPort.Handshake = Handshake.XOnXOff;
serialPort.ReadTimeout = 500;
serialPort.Open();
serialPort.Write(cmd);
setting = Convert.ToString(serialPort.Read(buffer, 0, buffer.Length));
serialPort.Close();
return setting;
}
catch (Exception x)
{
MessageBox.Show(x.ToString());
return setting;
}
}
< /code>

Я получаю nre. < /p>

Обновление 5 < /h2>

Эта попытка: < /p>

serialPort.WriteLine(cmd);
setting = serialPort.ReadExisting();
< /code>

.....ders очень сходство с первым обновлением ("System.notsupportedException: еще не opennetcf.ip.ports.serialport.readexisting () At ...") < /p>

обновление 6 < /h2>
ok ok, i incorport in in in in in in in in in in in in in inpust 6 < /h2>
Комментарий Ctacke, и теперь я получил это: < /p>

const string quote = "\"";
. . .
string getDeviceLang = string.Format("! U1 getvar {0}device.languages{0}", quote);
. . .
String deviceLanguage = PrintUtils.GetSettingFromPrinter(getDeviceLang);

public static string GetSettingFromPrinter(string cmd)
{
string setting = string.Empty;
try
{
SerialPort serialPort = new SerialPort();
serialPort = new SerialPort();
serialPort.BaudRate = 19200;
serialPort.Handshake = Handshake.XOnXOff;
serialPort.ReadTimeout = 500;
serialPort.Open();
serialPort.WriteLine(cmd); // or Write()

// get a synchronous, newline-delimited response
StringBuilder response = new StringBuilder();
char c;
do
{
c = (char)serialPort.ReadByte();
response.Append(c);
} while(c != '\n');

serialPort.Close();
return setting;
}
catch (Exception x)
{
MessageBox.Show(x.ToString());
return setting;
}
< /code>

... но это «висит» - кажется, в Do ... while while. < /p>

Обновление 7 < /h2>

Я добавил это после «readbyte»: < /p>

.MessageBox.Show(c.ToString());
< /code>

... и все, что он мне показывает, - это ничто (ящик для сообщений без "внутреннего текста"); Я позволил этому всплыть 32 раза, прежде чем я согревал устройство. Поэтому я пытаюсь и иметь это, основываясь на предоставленном псевдокоде Ctacke. Я сейчас пытаюсь использовать: < /p>

Port serialPort = new Port();
serialPort.Settings = whateverPortSettingsYouNeed;
serialPort.Open();
serialPort.Send(cmd);
< /code>

... но я не знаю, каким должен быть «какой -либо портсеттингсин», нет метода «отправить», и я не знаю, что использовать вместо reartbyte () < /p>

обновление 9 < /h2>

i aff This Settings: < /p>

I. I Shat That Strets: < /p>

I.BasicPortSettings bps = new BasicPortSettings();
bps.BaudRate = 19200;
//bps.ByteSize = ?;
//bps.Parity = None;
//bps.StopBits = 1;
Port serialPort = new Port();
serialPort.Settings = bps;
< /code>

...but, как вы можете видеть, я не знаю, какими должны быть большинство значений.public static string GetSettingFromPrinter(string cmd)
{
string setting = string.Empty;
try
{
BasicPortSettings bps = new BasicPortSettings();
bps.BaudRate = BaudRates.CBR_19200;
bps.Parity = OpenNETCF.IO.Serial.Parity.none;
bps.StopBits = OpenNETCF.IO.Serial.StopBits.one; //bps.StopBits.one;
Port serialPort = new Port("COM1:", bps);
byte[] outputBytes = System.Text.Encoding.ASCII.GetBytes(cmd);
serialPort.Output = outputBytes;
serialPort.Open();
byte[] bites = serialPort.Input;
setting = bites.ToString();
serialPort.Close();
return setting;
}
catch (Exception x)
{
MessageBox.Show(x.ToString());
return setting;
}
}
< /code>

...now я посмотрю, действительно ли это работает ... < /p>

Обновление 11 < /h2>

Я обнаружил (жесткий путь), что мне пришлось открыть порт перед установкой выходной вал; СЕЙЧАС: < /p>

serialPort.Open();
byte[] outputBytes = Encoding.ASCII.GetBytes(cmd);
serialPort.Output = outputBytes;
byte[] inputBytes = serialPort.Input;
setting = inputBytes.ToString();
< /code>

.... но что считывается в настройке "system.byte []" < /p>

Что мне нужно, чтобы на самом деле получить значение при вводах, а не просто увидеть представление его типа? < /p>

Подробнее здесь: https://stackoverflow.com/questions/241 ... serialport
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Работает ли кроссплатформенная библиотека System.IO.Ports.SerialPort на Android с чипами FTDI UART? (например, FT232R)?
    Anonymous » » в форуме Android
    0 Ответы
    37 Просмотры
    Последнее сообщение Anonymous
  • Годо 4.4 C#: Невозможно использовать Serialport of System.io.ports
    Anonymous » » в форуме C#
    0 Ответы
    7 Просмотры
    Последнее сообщение Anonymous
  • Ошибка System.IO.Ports и .NET7: «System.IO.Ports в настоящее время поддерживается в Windows»
    Anonymous » » в форуме C#
    0 Ответы
    22 Просмотры
    Последнее сообщение Anonymous
  • Ошибка System.IO.Ports и .NET7: «System.IO.Ports в настоящее время поддерживается в Windows»
    Anonymous » » в форуме C#
    0 Ответы
    18 Просмотры
    Последнее сообщение Anonymous
  • Как получить правильное значение из SerialPort.BytesToRead?
    Anonymous » » в форуме C#
    0 Ответы
    15 Просмотры
    Последнее сообщение Anonymous

Вернуться в «C#»