
//创建一个串口通讯
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串口通信同时进行接收和发送时程序会卡等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)