如何使用C#form app将十六进制字符发送到串行端口?
我想通过COM端口发送十六进制。我已经手动准备了代码,但它是用于字符串发送的 我需要从文本框读取数据,然后以十六进制格式发送到COM端口。如何使用C#form app将十六进制字符发送到串行端口?,c#,serial-port,format,hex,C#,Serial Port,Format,Hex,我想通过COM端口发送十六进制。我已经手动准备了代码,但它是用于字符串发送的 我需要从文本框读取数据,然后以十六进制格式发送到COM端口。 目前,我正在处理以下发送代码的按钮点击,但目前它正在发送硬编码的值,但我需要从文本字段中获取的值 private void btnSendData_Click(object sender, EventArgs e) { if (serialPort1.IsOpen) { dataOUT = tBoxDataOut.Text; if
目前,我正在处理以下发送代码的按钮点击,但目前它正在发送硬编码的值,但我需要从文本字段中获取的值
private void btnSendData_Click(object sender, EventArgs e) {
if (serialPort1.IsOpen) {
dataOUT = tBoxDataOut.Text;
if (sendWith == "WriteLine") {
serialPort1.WriteLine(dataOUT);
} else if (sendWith == "Write") {
serialPort1.Write(dataOUT);
}
}
}
您可以阅读有关标准数字格式字符串的内容。阅读“十六进制(“X”)格式说明符”一节 我想包括一个简单的工作示例。我没有COM端口,但com0com虚拟驱动程序在本演示中运行良好;你可以下载它。我还使用Putty显示端口接收到的数据;你可以下载它 以下是我的节目:
public class HexConvert
{
SerialPort mySerialPort;
public HexConvert()
{
InitPort();
}
void InitPort()
{
mySerialPort = new SerialPort("COM1");
mySerialPort.BaudRate = 9600;
mySerialPort.Parity = Parity.None;
mySerialPort.StopBits = StopBits.One;
mySerialPort.DataBits = 8;
mySerialPort.Handshake = Handshake.None;
}
public void SendMessage()
{
try
{
string s = "15"; // "F" In Hexadecimal
int x = Int32.Parse(s);
string s2 = x.ToString("X");
if(!mySerialPort.IsOpen)
mySerialPort.Open();
mySerialPort.WriteLine(s2);
mySerialPort.Close();
}
catch(Exception ex)
{
Console.WriteLine(ex.Message);
}
}
}
以下是我的com0com实用程序的配置(我添加了COM1和COM2对;在此模拟器中没有执行其他操作):
这是我的Putty配置(注意,我在程序中使用了COM1,在Putty中使用了COM2):
最后,这里是我的演示应用程序生成的输出:
在此处输入图像描述
i、 stack.imgur.com/LfKM5.pngprivate void btnSendData_Click(object sender,EventArgs e){if(serialPort1.IsOpen){dataOUT=tBoxDataOut.Text;if(sendWith==“WriteLine”){serialPort1.WriteLine(dataOUT);}else if(sendWith==“Write”){serialPort1.Write(dataOUT);}}}}是按钮send上的函数,但它是字符串格式的。需要十六进制。感谢您的支持。请回答您的问题,而不是在评论中提供额外的信息。您所说的“发送十六进制”是什么意思?你的意思是将数字转换成十六进制字符串,然后发送这些字符串吗?试图从作者最初写的内容中恢复问题,但是我不能100%确定这是否是你的意思@nedyakopeshevwhith Parse to int,我们还有输出的ASCII码。我发送0位,实际上发送30=0的ASCII码。@Nedyakopeshev,当您构建serialPort1时;您是否指定了正确的名称、波特率和奇偶校验(如中所示),它们是否与设备管理器下的windows设置相匹配?你可能必须改变其中一个,或者两者都改变。您使用哪个程序/设备评估输出?波特率默认为9600,Com未选择默认值。您需要选择COM,但程序参数和设备管理器设置的设置是完全相同的。我认为主要的问题是数据发送到COM端口,因为我们在文本框中键入,但需要将此信息转换为十六进制类型。我的电脑上没有串行端口,所以我使用了com0com仿真器。我还使用Putty来显示发送的字节;我将在答案中添加示例代码。看。举个例子。我需要输入十六进制值,还需要将它们发送到串行端口,但textbox无法为我提供发送实际十六进制值的方法:40 50 3e fa 55 bf 01 00 2C 04 01 05 1f 04 01。这就是我需要做的——用C#form app和textbox将十六进制序列发送到串行端口上的外部模块。如果你有其他想法。非常感谢你的支持。
public class HexConvert
{
SerialPort mySerialPort;
public HexConvert()
{
InitPort();
}
void InitPort()
{
mySerialPort = new SerialPort("COM1");
mySerialPort.BaudRate = 9600;
mySerialPort.Parity = Parity.None;
mySerialPort.StopBits = StopBits.One;
mySerialPort.DataBits = 8;
mySerialPort.Handshake = Handshake.None;
}
public void SendMessage()
{
try
{
string s = "15"; // "F" In Hexadecimal
int x = Int32.Parse(s);
string s2 = x.ToString("X");
if(!mySerialPort.IsOpen)
mySerialPort.Open();
mySerialPort.WriteLine(s2);
mySerialPort.Close();
}
catch(Exception ex)
{
Console.WriteLine(ex.Message);
}
}
}