-
VB 串口发送,将文本中的字符串转化成16进制数据发送
2017-01-11 14:03:55VB写一个串口发送16进制数,如何将文本中的字符串转化成16进制数据发送。VB写一个串口发送代码,遇到一个问题,如何将文本中的字符串转化成16进制数据发送。
Dim bindate(200) As String
Dim senddata As String ‘定义输入字符串变
senddata = Replace(TxtSend.Text, ” “, “”) ‘已经将字符中间的空格都已经去掉了
Dim hexdate() As Byte
Dim I As IntegerReDim hexdate(0 To (Len(senddata) / 2 - 1)) For I = 1 To (Len(senddata)) Step 2 hexdate((I - 1) / 2) = Val("&H" + Mid(senddata, I, 2)) Next I
转化后,hexdate数据如下图所示
转化成功。
-
VB串口通信源码210个
2013-10-15 11:32:27013、VB编写的RS232串口通信测试程序,以txt格式接受,可定义发送字符 014、VB编写的SouthStar串口测试与51串口烧写器V1.0版 015、VB编写的串口调试助手1.0的源码 016、VB编写的串口短信发送程序,需要数据线支持 017、... -
vb.net 如何将一串字符串以16进制的形式发送给串口
2012-12-25 15:47:06比如说我的字符串现在是 str1= FD000A01048BED97F354086210 但是我想以16进制的形式将FD000A01048BED97F354086210 通过串口发送出去。。 大家注意了,,FD000A01048BED97F354086210不需要转换的,就把FD000A01048... -
VB写串口程序时如何发送大于128的字符
2006-07-19 09:23:00最近在使用VB写一个自动化控制的程序时,碰到了下面的问题,在程序中我要将一串字符串命令通过串口发送到下位机,为了对发送/接收的数据进行更准确的判断,还使用了CRC16校验方法来对要发送的命令来进行校验, 即在命令...最近在使用VB写一个自动化控制的程序时,碰到了下面的问题,在程序中我要将一串字符串命令通过串口发送到下位机,为了对发送/接收的数据进行更准确的判断,还使用了CRC16校验方法来对要发送的命令来进行校验, 即在命令的后面再加上2个字节的校验码,但在实际调试时却发现,下位机收到的2个字节的校验码均为0,心中对这个现象一直不解,出错的代码如下:
Dim CRC16 As New CRCCom 'CRC16校验的COM组件
Dim nCrcValue As LongcmdMsg = "1234567890"
CRC16.GetCrc16Value cmdMsg, nCrcValue
cmdMsg = cmdMsg & Chr(nCrcValue / 256) & Chr(nCrcValue Mod 256)
MSC1.Settings = strBaud
MSC1.CommPort = nPort
MSC1.InputMode = comInputModeText
MSC1.OutBufferCount = 0
MSC1.PortOpen = True
MSC1.Output = cmdMsg上面这段代码执行后,下位机收到的"1234567890"后面2个字节均为0,经过查阅资料,我发现Chr这个函数在转换大于128的数时,转换后就是变为0,难怪下位机老是报错,解决的办法有2种,一是使用VC来封装一个串口通讯的COM来完成串口通讯的工作,同时将数据校验也放在里面进行,VB程序只负责具体的命令和数据的处理,可是这个工作量不小,另一个办法是试一下MSComm控件能不能支持在已经打开串口之后随时变换发送的模式(即是采用文本模式还是二进制模式),如果可以的话我就可以先使用文本模式于是我想到了先使用文本模式将"1234567890"发送出去,然后再使用二进制模式将校验得到的2个字节以字节数组的方式发送出去,经过测试,果然可以这样进行,这就给了我很大的方便了,修改测试过后的代码如下:
Dim CRC16 As New CRCCom 'CRC16校验的COM组件
Dim nCrcValue As Long
Dim byCrcValue(1) As Byte
CRC16.GetCrc16Value cmdMsg, nCrcValue
byCrcValue(0) = Chr(nCrcValue / 256)
byCrcValue(1) = Chr(nCrcValue Mod 256)cmdMsg = "1234567890"
CRC16.GetCrc16Value cmdMsg, nCrcValue
cmdMsg = cmdMsg & Chr(nCrcValue / 256) & Chr(nCrcValue Mod 256)
MSC1.Settings = strBaud
MSC1.CommPort = nPort
MSC1.OutBufferCount = 0
MSC1.PortOpen = TrueMSC1.InputMode = comInputModeText
MSC1.Output = cmdMsg
MSC1.InputMode = comInputModeBinary
MSC1.Output = byCrcValue -
VB串口通信程序设计典型实例[教程]
2012-08-08 18:37:10利用VB开发串口通信程序既可以使用MSComm控件也可以调用Windows API函数实现。不过,只要MSComm控件可以被选用,我们推荐选择此控件实现,因为MSComm控件的功能和API调用一样强,甚至比它还好且使用起来更加简单。 ... -
总结一下学习vb串口通信的初期果实
2017-01-18 04:39:591. 串口通信需要Mscomm控件,通过vb部件进行加载。 2. 设置一下串口号码和波特率和停止位等传输协议。这个只要与下位机保持一直即可。 3. 然后用MSComm1.Output 和MSComm1.input 来进行输出和接收字符串 4. 无论...1. 串口通信需要Mscomm控件,通过vb部件进行加载。
2. 设置一下串口号码和波特率和停止位等传输协议。这个只要与下位机保持一直即可。
3. 然后用MSComm1.Output 和MSComm1.input 来进行输出和接收字符串
4. 无论是接收还是发送都有个缓存的问题。
如果希望自动接收下位机传上来的字符串。
需要加个timer控件 通过判断缓存的大小来输出结果。
-
vb串口 任意波特率_C#与单片机串口通讯,实现简单的计数功能
2020-12-06 02:14:20串行接口是一种可以将接收来自CPU的并行数据字符转换为连续的串行数据流发送出去,同时可将接收的串行数据流转换为并行的数据字符供给CPU的器件。一般完成这种功能的电路,我们称为串行接口电路。串口通信(Serial ...串行接口是一种可以将接收来自CPU的并行数据字符转换为连续的串行数据流发送出去,同时可将接收的串行数据流转换为并行的数据字符供给CPU的器件。一般完成这种功能的电路,我们称为串行接口电路。
串口通信(Serial Communications)的概念非常简单,串口按位(bit)发送和接收字节。尽管比按字节(byte)的并行通信慢,但是串口可以在使用一根线发送数据的同时用另一根线接收数据。它很简单并且能够实现远距离通信。比如IEEE488定义并行通行状态时,规定设备线总长不得超过20米,并且任意两个设备间的长度不得超过2米;而对于串口而言,长度可达1200米。典型地,串口用于ASCII码字符的传输。通信使用3根线完成,分别是地线、发送、接收。由于串口通信是异步的,端口能够在一根线上发送数据同时在另一根线上接收数据。其他线用于握手,但不是必须的。串口通信最重要的参数是波特率、数据位、停止位和奇偶校验。对于两个进行通信的端口,这些参数必须匹配。
今天以C#与单片机串口通信实现上位机控制单片机的灯亮与灯灭,上位机接收来自单片机的数据,处理后实现计数功能并用柱状图显示出来。
1、部分代码如下:
上位机部分:
chart1.Series.Clear(); chart1.ChartAreas.Clear(); ChartArea chartareas1 = new ChartArea(); Series series1 = new Series("1"); Series series2 = new Series("2"); Series series3 = new Series("3"); series1.BorderColor = Color.Red; series1.Color = Color.Red; series1.ChartType = SeriesChartType.Column; series1.BorderWidth = 2; series1.ShadowOffset = 2; series2.BorderColor = Color.Yellow; series2.Color = Color.Yellow; series2.ChartType = SeriesChartType.Column; series2.BorderWidth = 2; series2.ShadowOffset = 2; series3.BorderColor = Color.Green; series3.Color = Color.Green; series3.ChartType = SeriesChartType.Column; series3.BorderWidth = 2; series3.ShadowOffset = 2; series1.Points.AddY(count_A); series2.Points.AddY(count_B); series3.Points.AddY(count_C); chart1.Series.Add(series1); chart1.Series.Add(series2); chart1.Series.Add(series3); chart1.ChartAreas.Add(chartareas1);
单片机程序:
#include #include #include #define uchar unsigned char//宏定义无符号字符型#define uint unsigned int //宏定义无符号整型uint i=0;//取值变量uint j=0;uchar dat;uchar select;uchar wei[10]={0xfd,0xfc,0xfb,0xf5,0xee,0xde,0xbe,0x7e,0x80,0x90}; //位的控制端sbit P00=P0^0;sbit P01=P0^1;sbit P02=P0^2;sbit P03=P0^3;static bit key_bit = 0;/******************************************************************** 延时函数*********************************************************************/void delayms(uchar n){uchar m,s;for(m=n;m>0;m--)for(n=20;n>0;n--)for(s=248;s>0;s--);}/******************************************************************** 功能:串口初始化,波特率9600,方式1*********************************************************************/void Init_Com(void){TMOD = 0x20;PCON = 0x00;SCON = 0x50;TH1 = 0xFd;TL1 = 0xFd;TR1 = 1;}/******************************************************************** 键盘取值函数*********************************************************************/void Keyin(uchar c){switch(c) { case '1':P00=0;break; case '2':P01=0;break; case '3':P02=0;break; case '4':P00=0;P01=0;break; case '5':P00=0;P02=0;break;case '6':P01=0;P02=0;break;case '7':P00=0;P01=0;P02=0;break;case '8':P0=0xff;break; default:break; }}/******************************************************************** 取键值函数 *********************************************************************/void read_key() { uchar temp;if((P2!=0xff)&&(!key_bit)){delayms(10);temp=P2;key_bit =1;}if((P2==0xff)&&(key_bit)){select=temp;key_bit =0;} } /******************************************************************** 数据发送函数*********************************************************************/void RS232(uchar addrs) { SBUF=addrs; // while(!TI); // TI=0; // } /******************************************************************** 发送键值函数*********************************************************************/void TXD_date() { switch(select) //发送数据 {case 0xfe:RS232('A');select=0;break;case 0xfd:RS232('B');select=0;break;case 0xfb:RS232('C');select=0;break;case 0xf7:RS232('D');select=0;break;case 0xef:RS232('E');select=0;break;case 0xdf:RS232('F');select=0;break;case 0xfc:RS232('a');select=0;break;case 0xfa:RS232('b');select=0;break;case 0xf9:RS232('c');select=0;break;default:break; } } void main(){ Init_Com(); //初始化 while(1){delayms(10); //延时等待 if(RI) //扫描判断是否接收到数据, { dat = SBUF; //接收数据SBUF赋与datRI=0;Keyin(dat);}else{read_key();TXD_date();}}}
2、效果动画演示
3、完整代码较长,已上传网盘,需要源代码的请关注评论后私信发送“单片机”即可自动获取。感谢您的阅读和关注。
-
VB6串口接收二进制数据
2020-12-17 08:06:20摘要:1)VB6如何通过串口发送和接收二进制数据 2)如何一次获取一组串口数据 正文如下: 1)二进制收发 MSComm1.InBufferCount = 0 '清空接收缓冲区 MSComm1.RThreshold = 1 '收到RThreshold个字符数时触发... -
VB.NET2008的串口工程
2009-03-05 09:22:08使用SerialPort组件实现2进制和ASCII字符接收及16进制转Byte字节流发送 -
VB字符串转16进制ActiveX控件
2013-12-11 17:20:30此ActiveX用于HTML中使用mscomm32连接串口时的数据发送转换,因js实现转换未果,故使用vb封装控件实现,使用方法见本人博客文章http://blog.csdn.net/china_zyl/article/details/17266647 -
怎样将整型变量转换为字符变量 然后串口 或者LCD发送出来(STM32) 以及sprintf的用法
2015-07-27 18:05:06样将整型变量转换为字符变量 然后串口 或者LCD发送出来(STM32) 以及sprintf的用法 http://blog.sina.com.cn/s/blog_60e5783601017vb8.html u8 b; unsigned char c[3]; b=123; c[0]= ... -
VB串口编程--测量程序
2017-03-27 02:06:19If Len(Str_Send) Mod 2 = 0 And Len(Str_Send) <> 0 Then '检验16进制字符串长 ReDim sj(Len(Str_Send) / 2 - 1) For i = 0 To Len(Str_Send) - 1 Step 2 sj(i / 2) = Val("&H" & Mid(Str_Send, i + 1, 2)) ... -
STM32学习笔记3——怎样将整型变量转换为字符变量 然后串口 或者LCD发送出来(STM32) 以及sprintf的用法
2017-04-22 13:27:53原文地址:...怎样将整型变量转换为字符变量 然后串口 或者LCD发送出来(STM32) 以及sprintf的用法 u8 b; unsigned char c[3]; b=123; c[0]= (unsigned char)((b/100)); c[1]= -
用VB调试串口通讯
2008-01-22 16:34:00现有电子秤一台,使用串口与计算机进行通讯。...所有字符均发送11位ASCII码,一个起始位。在VB中与串口通讯需要引入控件MSComm串口通讯控件(在Microsoft Comm Control 6.0中)。具体程序如下:控件简称:MSC -
Vb将文本框里输入的十进制数据按chr(13)分割,然后转换成&h+16进制字符串形式
2015-05-04 03:27:09例如文本框里输入253chr(13)255chr(13),要求输出结果书“&HFD” "&HFF",看了好多算法,但是还是没有...如输入255,显示的字符串&HFF,但是发送过去后不对,是把那个转换成了& H F F四个字符的ascii吗。。这是什么鬼。。 -
VB.net写自己的串口助手
2018-11-09 15:33:23VB.NET写串口助手,亲测可用,简单实用。 网上大大部分都实用AXcom控件而非serial port,各种函数都不一样。 这是一个最新的用serial port 来写的,包括委托的线程的关系。 这是我3年前的一个例子,最近翻出来回忆... -
基于VB的串口通讯及其软件实现
2012-02-02 11:17:031 串口通信的通信机理 PC串行通信是指直接对串行端口的UART(PC机的通用异步收发器,也叫异步通信适配器,是PC机用于异步通信的接口)进行编程实现的通信 ...当字符数据从CPU发送给外设时,这些字符数据将被转换 -
通信返回的字符串对应的ASC码为21的内容
2014-10-29 07:43:45基于VB的三菱PLC FX3u-48M跟PC的串口通信,批量读取PLC的X000——X007的位状态时,PLC的X0为高电平,发送代码:sendata = Chr(5) + "00FFBR0X00000820" 第一次返回的是Asc码为6的字符,是应答信息,之后返回的为Asc... -
VB6.0开发的计算机串口通讯程序1
2020-11-12 12:47:54下面介绍几个使用VB6.0开发的计算机串口通讯程序,这些程序可以自动发送16进制字符,并接收这些字符。这些程序可以在链接: https://pan.baidu.com/s/1-SMLa3UwbxArwY3QRNtswg 提取码:hdze 下载微云文件分享:ⅤB串... -
专用modbus串口调试软件
2018-12-11 10:06:37如果你是一个从设备开发者,你可以通过"test center" 菜单,组织并发送你自己的测试字符串,并以16进制形式检查从设备返回的结果。 为VB,EXCEL等提供了OLE自动化接口。可以用OLE接口解析和显示Modbus数据,然后送达... -
Visual Basic 数据采集与串口通信测控应用实战(part1)
2014-04-14 10:35:41第6章 vb串口通信程序设计典型实例 172 6.1 pc与pc串口通信程序设计 172 6.1.1 pc与pc串口通信程序设计目的 172 6.1.2 pc与pc串口通信程序设计用软、硬件 172 6.1.3 pc与pc串口通信程序硬件线路图 172... -
RS232串口调试工具,带MDI动画效果的VB窗体.rar
2019-07-10 03:41:18一个基于RS232串口的调试工具,模仿超级终端风格,具备MDI启动画面的动画窗体,程序可非常容易的读取和写入端口,发送支持ASCII字符模式,可以打开二进制文件以16进制格式显示发送。支持工作内容保存,下次加载。 ... -
PC机与GSM短信模块串口通信
2012-10-01 23:55:37' 那么,在这种情况下需要查找符合条件的字符串,从中截取出响应字符串 ' 在这里,如果命令一时没有全部返回,因为串口数据不一定会得到全部数据 ' 所以,设置一个静态的Bool变量blIsWaiting,来指示是否结束了... -
灯光控制沙盘模型控制器串口控制40路继电器输出JMDM-COM40MR.rar
2019-09-22 05:33:26可以2种模式工作:实时模式:通过电脑串口发送控制命令(可以是ASCII码或字符串)给控制器,在电脑上位机界面上实时控制继电器的输出;程序模式:通过电脑串口下载控制程序到控制器,控制器保存程序,并根据程序和时间... -
vb/vb.net开发精粹(13)
2011-11-02 13:48:24VB是不是所有语言中最拉圾的一门语言? 请问关于vb.net socket的连接问题 VB-PowerWrap4.1打包程序后运行缓慢 杀毒软件误报 MDI窗体如何添加控件?求助 对浏览器控件发送CTRL+n...在线跪求:VB串口如何发送转义字符 -
Visual Basic串口通讯调试方法
2020-11-24 08:10:29所有字符均发送11位ASCII码,一个起始位。在VB中与串口通讯需要引入控件MSComm串口通讯控件(在Microsoft Comm Control 6.0中)。具体程序如下:控件简称:MSC Dim Out(12) As Byte '接收var中的值Dim var As ...