关于使用Labview进行PC与TCU之间串口通信的问题。

关于使用Labview进行PC与TCU之间串口通信的问题。,第1张

//创建一个串口通讯

SerialPort CurrentPort = null;

CurrentPort = new SerialPort();

CurrentPortReadBufferSize = 128;

CurrentPortPortName = comName; //端口号

CurrentPortBaudRate = bandRate; //比特率

CurrentPortParity =parity;//奇偶校验

CurrentPortStopBits = stop;//停止位

CurrentPortDataBits = databit;//数据

CurrentPortReadTimeout = 1000; //读超时,即在1000内未读到数据就引起超时异常

//绑定数据接收事件,因为发送是被动的,所以你无法主动去获取别人发送的代码,只能通过这个事件来处理

CurrentPortDataReceived += Sp_DataReceived;

CurrentPortOpen();

定义一个变量 byte[] receiveStr;

//绑定的事件处理函数

private static void Sp_DataReceived(object sender, SystemIOPortsSerialDataReceivedEventArgs e)

{

SerialPort sp = sender as SerialPort;

if (sp == null)

return;

byte[] readBuffer = new byte[spReadBufferSize];

spRead(readBuffer, 0, readBufferLength);

//赋值

receiveStr=readBuffer;//当然你可以通过转换将byte[]转换为字符串。

}

//你要求的按钮事件可以这么写

private void button1_Click(object sender, EventArgs e)

{

if(receiveStr!=null)

{

变量 xxx=receiveStr;

}

}

串口通讯有自己的通讯协议。可以根据通讯协议进行编程。需要做的工作由以下几步:

1、搞清楚串口协议标准,232,485协议编程会有所区别;

2、编制对话规则。也就是上位机发出什么指令,下位机如何响应,这个需要做个对码表;

3、串口一次发送的数据是16进制,可以让下位机解码为2进制的,每一位代表不同功能启用。这样就可以实现一次发送多个指令。比如发送16进制数FF,那么对应的2进制就是1111 1111,全高电平,这个代码可以让单片机就绪。如果发送F1,对应二进制就是11110001,那么可以执行第一项动作。以此类推。

你这不是同时进行接收和发送,而是先接收数据,进行完数据处理后才进行发送。

既然你也没给源码,我也懒得去给你画。给你提几点:

Bytes at Port属性放在事件结构里面,read VI前面。

可以考虑把事件结构放在while循环里,一般来讲,这才应该是正确的套路。

你要同时进行读写 *** 作,可以考虑用两个并行的while循环来实现

框图连线很乱!看第一眼我就不想仔细去看第二眼

//创建一个串口通讯

SerialPort CurrentPort = null;

CurrentPort = new SerialPort();

CurrentPortReadBufferSize = 128;

CurrentPortPortName = comName; //端口号

CurrentPortBaudRate = bandRate; //比特率

CurrentPortParity =parity;//奇偶校验

CurrentPortStopBits = stop;//停止位

CurrentPortDataBits = databit;//数据位

CurrentPortReadTimeout = 1000; //读超时,即在1000内未读到数据就引起超时异常

//绑定数据接收事件,因为发送是被动的,所以你无法主动去获取别人发送的代码,只能通过这个事件来处理

CurrentPortDataReceived += Sp_DataReceived;

CurrentPortOpen();

定义一个变量 byte[] receiveStr;

//绑定的事件处理函数

private static void Sp_DataReceived(object sender, SystemIOPortsSerialDataReceivedEventArgs e)

{

SerialPort sp = sender as SerialPort;

if (sp == null)

return;

byte[] readBuffer = new byte[spReadBufferSize];

spRead(readBuffer, 0, readBufferLength);

//赋值

receiveStr=readBuffer;//当然你可以通过转换将byte[]转换为字符串。

}

//你要求的按钮事件可以这么写

private void button1_Click(object sender, EventArgs e)

{

if(receiveStr!=null)

{

变量 xxx=receiveStr;

}

}

可以的。

1、串口写入

该节点主要用于写入串口数据,如图所示。

写入缓冲区:串口发送的内容。

2、串口读取

该节点主要用于读取串口中的数据,如图所示。

字节总数:要读取的字节数量。

读取缓冲区:PC串口收到的数据。

返回数:实际读取的字节数,字节总数应大于或等于返回数,否则会丢数。

3、串口关闭

该节点主要用于关闭已打开的串口,释放串口资源,以便串口被其他程序所调用,如图所示。

以上就是关于关于使用Labview进行PC与TCU之间串口通信的问题。全部的内容,包括:关于使用Labview进行PC与TCU之间串口通信的问题。、labview与单片机用visa进行串口通信、LABVIEW串口通信同时进行接收和发送时程序会卡等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/zz/9518556.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-29
下一篇2023-04-29

发表评论

登录后才能评论

评论列表(0条)

    保存