winform窗体 串口 传值的相关问题

karaysn 2018-01-24 12:12:58
各位朋友好,我的问题描述是:想把一个探头接收到数据传递到上位机,上位机再将数据处理后发送给灯,从而灯进行亮度调节。在上位机界面,我的想法是在主窗体中添加2个按钮,一个panel,点击两个按钮,可以在panel中得到一个灯的调节窗口或者是探头的调节窗口。用的都是串口传输,我在主界面中加了2个serialPort,我通过构造的方式,分别传递给灯的窗口和探头的窗口。那么这两个serialPort的接收事件,发送事件的函数该写在哪个窗体里面?更重要的问题是,我这种想法可以吗?一般碰到这种情况,你们是怎么处理?感谢你们的留言。
...全文
798 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
Jason_Mao1 2018-01-30
  • 打赏
  • 举报
回复
首先你能传到上位机上吗 ?这个如果你能做到剩下的都不是问题啊 ,你用一个事件,或者是委托之类的 到收到消息时给Form2 一个通知就好了,事件和委托都可以的。如果用笨一点的办法可以加个全局变量,然后Form2 中可以放一个timer 类似的东西去监控这个中间变量,当然也可以用数据库来交互等等 。
karaysn 2018-01-30
  • 打赏
  • 举报
回复
引用 11 楼 gg584520yx 的回复:
据我理解 你应该在主界面建两个全局变量,在serialPort接收事件里实时刷新两个串口实时数据,然后点击按钮,将此变量传递给新窗体。 而在发送时,你应该是在新窗体点击"保存参数"时发送新的数据给传感器,一样的可以用主界面的serialPort里面发送啊,你可以先在主界面定义静态变量,可以直接调用里面的serialPort class Form2: Form { public static Form2 frm2; public Form2() { InitializeComponent(); frm2 = this; } }
谢谢您的留言了,谢谢了。我理解您的意思:是不是就是可以在 子窗体中 直接调用 frm2.serialPort 或者frm2.receive()或者frm2.send()这些在主窗体 frm2中的这些方法或者变量了。
xity 2018-01-30
  • 打赏
  • 举报
回复
不好意思, 这几天没上网, 如果不用事件的话可以用全局变量, 不过这样你的上位处理事务的实时性就会变差了. 用全局变量,然后在需要调用参数的子窗口开一个线程不断云扫描变量的改变, 不过还是建议用事件.
xity 2018-01-30
  • 打赏
  • 举报
回复
引用 14 楼 u010848611 的回复:
不好意思, 这几天没上网, 如果不用事件的话可以用全局变量, 不过这样你的上位处理事务的实时性就会变差了. 用全局变量,然后在需要调用参数的子窗口开一个线程不断云扫描变量的改变, 不过还是建议用事件.
是" 去扫描" 打错字了
karaysn 2018-01-29
  • 打赏
  • 举报
回复
引用 7 楼 majun298 的回复:
一般是自己写个串口类,new 2个实例出来,开启一个线程去读数据,放到内存中,随时从内存中取数据然后通过另外一个串口实例去发数据,这样你就不用考虑事件函数写在哪个窗口了,直接调用2个串口实例来控制数据接受和发送
您好,谢谢您 的留言了。抱歉,刚才按错了,点了丢板砖,我不知道怎么撤销抱歉抱歉。谢谢您的方法,对我来说是一个全新的思路,我要去网上找个简单demo看看,谢谢你了。也万分抱歉
karaysn 2018-01-29
  • 打赏
  • 举报
回复
引用 8 楼 Snowwolf_119 的回复:
根据你的描述,就是探头来调节灯,PC只是个中间处理环节。 你的接收,发送都可以放在主窗体上。 大致过程是,在主窗体实例化的时候,打开两个串口,两个串口正常打开,等待接收探头数据,当收到数据后,处理,发送数据给灯。
您好,谢谢您的回复了。我后来自己想想,您提的这个方法对我可能不太适合,可能是我描述不太好,因为我有很多接收到的参数要显示在子窗体中,如果串口的接收函数都写在主窗体中,那就要把这些数据再传递给子窗体,我感觉会比较麻烦。怪我没有描述明白,很感谢您的留言。
经验宝宝 2018-01-29
  • 打赏
  • 举报
回复
据我理解 你应该在主界面建两个全局变量,在serialPort接收事件里实时刷新两个串口实时数据,然后点击按钮,将此变量传递给新窗体。 而在发送时,你应该是在新窗体点击"保存参数"时发送新的数据给传感器,一样的可以用主界面的serialPort里面发送啊,你可以先在主界面定义静态变量,可以直接调用里面的serialPort class Form2: Form { public static Form2 frm2; public Form2() { InitializeComponent(); frm2 = this; } }
雪狼孤竹 2018-01-26
  • 打赏
  • 举报
回复
根据你的描述,就是探头来调节灯,PC只是个中间处理环节。 你的接收,发送都可以放在主窗体上。 大致过程是,在主窗体实例化的时候,打开两个串口,两个串口正常打开,等待接收探头数据,当收到数据后,处理,发送数据给灯。
majun298 2018-01-26
  • 打赏
  • 举报
回复
一般是自己写个串口类,new 2个实例出来,开启一个线程去读数据,放到内存中,随时从内存中取数据然后通过另外一个串口实例去发数据,这样你就不用考虑事件函数写在哪个窗口了,直接调用2个串口实例来控制数据接受和发送
karaysn 2018-01-25
  • 打赏
  • 举报
回复
引用 3 楼 u010848611 的回复:
如果我没理解错, 应该是可以实现的. 你在子窗口建立事件(event) 然后在主窗口引用子窗口的事件,子窗口事件带参数就可以把参数传到主窗口. 不明再问.
谢谢您的回复了。要用事件啊,不太懂这个,能不用事件处理吗?我现在可以把两个serialPort通过构造方法分别传递给两个子窗口,这两个子窗口是在主窗口的panel面板中的,我就是不知道这2个serialPort的接收和发送写在哪个窗体的函数中?谢谢您的回复啊。
karaysn 2018-01-25
  • 打赏
  • 举报
回复
引用 2 楼 qq_38588710 的回复:
[quote=引用 楼主 karaysn 的回复:] 各位朋友好,我的问题描述是:想把一个探头接收到数据传递到上位机,上位机再将数据处理后发送给灯,从而灯进行亮度调节。在上位机界面,我的想法是在主窗体中添加2个按钮,一个panel,点击两个按钮,可以在panel中得到一个灯的调节窗口或者是探头的调节窗口。用的都是串口传输,我在主界面中加了2个serialPort,我通过构造的方式,分别传递给灯的窗口和探头的窗口。那么这两个serialPort的接收事件,发送事件的函数该写在哪个窗体里面?更重要的问题是,我这种想法可以吗?一般碰到这种情况,你们是怎么处理?感谢你们的留言。
你所谓的调节窗口是指新窗体还是什么,接收和发送写在主窗体就行,如果你的调节窗口是指新的form窗体,那可以采用多种方法窗体传值,这里不赘述,可以问度娘[/quote] 谢谢您的回复。我的调节窗体是新窗体,新窗体显示在主窗体的panel面板中,左边两个按钮点击,panel中的窗体可以切换,这样也可以把2个serialPort的接收和发送函数写在主窗体的代码中吗?谢谢你了
karaysn 2018-01-25
  • 打赏
  • 举报
回复
引用 1 楼 xian_wwq 的回复:
先找硬件设备的说明书 搞清楚通信规约
谢谢您的回答了,这个硬件是同学负责的,通信协议也都是已经彼此了解了的。因为我缺少经验,身边也没有人可以请教,所以来问一下是上位机是否这么考虑。
xity 2018-01-24
  • 打赏
  • 举报
回复
如果我没理解错, 应该是可以实现的. 你在子窗口建立事件(event) 然后在主窗口引用子窗口的事件,子窗口事件带参数就可以把参数传到主窗口. 不明再问.
易2017 2018-01-24
  • 打赏
  • 举报
回复
引用 楼主 karaysn 的回复:
各位朋友好,我的问题描述是:想把一个探头接收到数据传递到上位机,上位机再将数据处理后发送给灯,从而灯进行亮度调节。在上位机界面,我的想法是在主窗体中添加2个按钮,一个panel,点击两个按钮,可以在panel中得到一个灯的调节窗口或者是探头的调节窗口。用的都是串口传输,我在主界面中加了2个serialPort,我通过构造的方式,分别传递给灯的窗口和探头的窗口。那么这两个serialPort的接收事件,发送事件的函数该写在哪个窗体里面?更重要的问题是,我这种想法可以吗?一般碰到这种情况,你们是怎么处理?感谢你们的留言。
你所谓的调节窗口是指新窗体还是什么,接收和发送写在主窗体就行,如果你的调节窗口是指新的form窗体,那可以采用多种方法窗体传值,这里不赘述,可以问度娘
xian_wwq 2018-01-24
  • 打赏
  • 举报
回复
先找硬件设备的说明书 搞清楚通信规约

110,561

社区成员

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

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

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