C#编程中上位机与下位机怎么实时通信

wulongdeai 2016-03-22 10:22:26
最近用C#做了一个上位机界面,想要在上位机界面上实时显示出Arduino单片机通过传感器采集的数据,求大神指点,我是一名非软件专业的学生,基本属于大白,求大神详解!!!
...全文
2990 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
飞天凤凰601 2016-03-24
  • 打赏
  • 举报
回复
我编的上位机软件是用TCP/IP通讯的,然后监听取数据,存到数据库……
兵工厂三剑客 2016-03-24
  • 打赏
  • 举报
回复
引用 4 楼 wulongdeai 的回复:
[quote=引用 2 楼 SCGH_Fx 的回复:] 单片机都有串口,把你单片机上的TX和RX俩个引脚通过USB转串口芯片,常用的有PL2303(10块钱左右),通过它将计算机的串口与单片机的串口连接起来,就可以通信了。 C#开发的上位机的话,当然就用SerialPort类了。
现在实现基本的通信了,但是我想把采集的数据在不同的textbox里面显示出来,该怎样做啊 [/quote] private delegate void invokeDelegate(string text); /// <summary> /// 接收串口信息 /// </summary> public void ReceiveDataThread() { while (SerialPortIsOpen) { try { receivetext = sp.ReadExisting(); if (receivetext != null && receivetext != "") { /* if (Flag) { SendReceiveDataQueue.Enqueue(receivetext.Replace("\0", " ")); } */ this.BeginInvoke(new invokeDelegate(UpdataReceiveTextBox), receivetext.Replace("\0", " ")); } Thread.Sleep(20); } catch { } } } /// <summary> /// 更新串口信息显示区 /// </summary> /// <param name="text1"></param> public void UpdataReceiveTextBox(string text1) { ReceiveTextBox.AppendText(text1); ReceiveTextBox.Select(ReceiveTextBox.TextLength, 0); ReceiveTextBox.ScrollToCaret(); } thread_receiveserialportdata = new Thread(new ThreadStart(ReceiveDataThread)); thread_receiveserialportdata.Start();
雪狼孤竹 2016-03-24
  • 打赏
  • 举报
回复
都取到数据了,就是对照协议,每个字节都代表什么,把具体的数据从字节数组中取出来,放到它该放的位置就可以了。
南天空 2016-03-24
  • 打赏
  • 举报
回复
解析this.txGet.text里的数据啊,你取到的数据肯定是有规律的,第几位到第几位是经度,第几位是维度,心跳,温度什么的一样的道理,你解析一下存到一个数据类里面,往外取不久可以了
wulongdeai 2016-03-24
  • 打赏
  • 举报
回复
求大神帮忙啊!!!
wulongdeai 2016-03-24
  • 打赏
  • 举报
回复
引用 7 楼 guonan198811 的回复:
采集的数据,一般是二进制或者是十六进制的字符串,如果通讯协议中没有解析的话,你要把收到的字符串处理一下,翻译成你要的数据。存储在一个数据类中,界面上直接从数据类中去取数据显示就可以了。
我现在已经可以将数据采集显示在一个textbox里,但不知道该怎么将不同数据显示在不同textbox里面 代码是这样的 上位机界面
wulongdeai 2016-03-24
  • 打赏
  • 举报
回复
引用 6 楼 diaodiaop 的回复:
arduino啊 直接c#读取就行了
我下位机用的就是Arduino,读取数据后不知道如何显示在不同textbox中啊
南天空 2016-03-24
  • 打赏
  • 举报
回复
采集的数据,一般是二进制或者是十六进制的字符串,如果通讯协议中没有解析的话,你要把收到的字符串处理一下,翻译成你要的数据。存储在一个数据类中,界面上直接从数据类中去取数据显示就可以了。
by_封爱 版主 2016-03-24
  • 打赏
  • 举报
回复
arduino啊 直接c#读取就行了
血战31天 2016-03-24
  • 打赏
  • 举报
回复
我以前做的是plc数据采集,把数据存到数据库,再使用c#显示
wulongdeai 2016-03-23
  • 打赏
  • 举报
回复
引用 2 楼 SCGH_Fx 的回复:
单片机都有串口,把你单片机上的TX和RX俩个引脚通过USB转串口芯片,常用的有PL2303(10块钱左右),通过它将计算机的串口与单片机的串口连接起来,就可以通信了。 C#开发的上位机的话,当然就用SerialPort类了。
现在实现基本的通信了,但是我想把采集的数据在不同的textbox里面显示出来,该怎样做啊
wulongdeai 2016-03-23
  • 打赏
  • 举报
回复
现在实现基本的通信了,但是我想把采集的数据在不同的textbox里面显示出来,该怎样做啊
兵工厂三剑客 2016-03-23
  • 打赏
  • 举报
回复
单片机都有串口,把你单片机上的TX和RX俩个引脚通过USB转串口芯片,常用的有PL2303(10块钱左右),通过它将计算机的串口与单片机的串口连接起来,就可以通信了。 C#开发的上位机的话,当然就用SerialPort类了。
threenewbee 2016-03-22
  • 打赏
  • 举报
回复
看下你的硬件接口,一般是com通讯,C#用serialport通讯。
是杰杰之前做的 一个参赛小作品 其实在做这个恒温控制系统项目的时候,师弟就问我,什么是上位。。。。。可能很多师弟师妹都没一个大概的概念。 现在,就来看下什么是上位: 上位是指可以直接发出操控命令的计算,一般是PC/host computer/master computer/upper computer,屏幕上显示各种信号变化(液压,水位,温度等)。下位是直接控制设备获取设备状况的计算,一般是PLC/单片single chip microcomputer/slave computer/lower computer之类的。上位发出的命令首先给下位,下位再根据此命令解释成相应时序信号直接控制相应设备。下位不时读取设备状态数据(一般为模拟量),转换成数字信号反馈给上位。简言之如此,实际情况千差万别,但万变不离其宗:上下位都需要编程,都有专门的开发系统。 在概念上,控制者和提供服务者是上位,被控制者和被服务者是下位,也可以理解为主和从的关系,但上位和下位是可以转换的。 工作原理 两如何通讯,一般取决于下位,TCP/IP一般是支持的,但是下位一般具有更可靠的独有通讯协议。通常上位和下位通讯可以采用不同通讯协议,可以有RS232的串口通讯或者采用RS485串行通讯。采用封装好的程序开发工具就可以实现下位和上位的通讯,当然可以自己编写驱动类的接口协议控制上位和下位的通讯。 通常工控,工作站,触摸屏作为上位通信控制PLC,单片等作为下位,从而控制相关设备元件和驱动装置。 既然差不多知道什么是上位与下位,那么,我们做到小喇叭的要求:就得写个上位,我自己也是学了下C#,用来开发上位还是可以的,开发环境用visual studio 2015,微软的软件真的是很简单,之前看到有人问为什么微软的软件是最多人用的,答:因为那是傻瓜式操作。。。。。我不得不认同。。。 回归正题:先看看我们的上位有什么功能: 1)能够实现与下位的正常通讯。这必须得有,不然算哪门子上位啊。 2)能够控制我们的恒温系统,通过电脑控制恒温系统的温度。这种应用场景很正常,我在房就能控制我某一个地方的温度,简单方便。 3)能够实时显示温度与波形。这种应用的场景也是非常常见,实时显示温度我们可以知道温度是否正常,而波形我们能快速看出恒温系统空间温度是否出现异常。 4)数据保存功能,自动将实时的温度保存下来,加入 日期与时间,方便以后排查问题的时候用于检测某段时间的温度是否正常,这也是很使用的功能。 说了那么多,看看我们的上位。由于我以前用的别人的上位都是色调比较单一的,而我,又是那种比较活泼开朗的人,觉得单一的灰色调比较死沉,我不喜欢,当然那是别人做的上位,即使再不喜欢,要用还是要用,没办法, 现在我自己做的就不一样了,得给他做个五颜六色出来。亮瞎眼。。。。。 1.png 2.jpg 3.jpg 当我们的温度达到目标温度的时候,下位就会控制自己的温度,以保持温度恒定,同时在上位显示看到温度为一条曲线,由于我设置的温度为整数,没有小数,但是我们通过下位可以看到实时的温度,精确在0.4范围左右。 4.jpg 当我们把上位与下位通讯协议切断,可以看到上位接受不到数据(在软件右下角粉红色的窗口,没有显示接收到的数据),上位的波形就会回到默认值(0°),就是上图的样子 5.jpg 6.jpg 当我们需要后期的检测与排除故障的时候,我们可以从我们保存的温度来做简单的排查,上位自动保存的温度数据,精确到某天某时某分某秒,简单方便。也是一个很实用的功能当没什么故障的时候,我们只需要隔一段时间吧数据清一下就OK了。 附上作品视频:http://v.youku.com/v_show/id_XMzE0Nzg0ODUzMg==.html?spm=a2h0k.8191407.0.0&from=s1.8-1-1.2 本次上位介绍到此结束 源码文件会可以关注关注获得。 或者CSDN下载连接: 本上位仅为杰杰个人娱乐,不做商业用途。 如需转载请说明出处。 欢迎关注“创客飞梦空间” 干货不间断 在未来的日子里 创客飞梦空间与你们同在,放飞我们的梦想

110,567

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧