基于Unity串口通信的解决方案

    两年来陆陆续续有朋友加我QQ或发邮件,讨论串口相关的问题,最终解决Unity串口通讯的问题也从中解决掉了。思路有三种,等下我会详细介绍。 后面的博客详细介绍是我收录两年前写的博客,现在我已经没有往串口方向进行开发了,所以只能将一些思路分享给大家。

    解决方式一:将Unity串口通信数据模块(接收与发送),用C++来实现,这是最佳最好的解决方式。(最佳)

    解决方式二:用一个中间介程序去实现,Unity串口通信模块通过Socket发送给中介程序,中介程序在通过串口将信息发送到其他地方去。(其次)

    解决方式三:Unity接收串口数据,进行临时存储,然后解析,从而分析出正确的串口数据。(不稳定,局限性很高,需要实时接收串口数据,并且还要进行解析,防止数据接收错误)


注:以下文章是我收录两年前记录的CSDN博客。

一、简介

    1、我发布过一篇关于Unity的串口通信问题,只是阐述了问题,但是没有什么好的解决方案。经过我几个对串口相关的Unity项目开发,也发现了几种解决方案。开发中遇到的一些问题都详细的描述出来。

    2、在上一篇文章我曾提过Unity因为采用的是Mono .NET 2.0。这个版本对COM支持不是很好,所以导致Unity在串口通信方面有些问题。不过最近发布了Mono .NET4.6版本的Unity 5.5测试版,该问题可能会解决掉,不过可能需要等到2017年了。

    3、言归正传,我们首先要知道C#接收串口的主要几种方式:接收字节byte,接收字节数据byte[],接收字符串string。在Unity中往串口中发送数据是为没有问题的,主要是接收数据会存在问题,下面图片我总结了一下,这结果是我经过不下于100次测试而来的,可能每个人的测试结果都不一样或我的测试还有一些局限。

    还有其他的串口读取方法,但是我就没有测试了,因为我实际项目中就需要这几种,所以其他的我就不好意思说。

二、Unity与Winform(WPF)串口通信的几种解决方案

我开发过三个项目采用收发字符串(Unity接收字符串,发送字符串)、收发单个字节(Unity接收单字节,发送字节数组)、收发字节数组。三个项目都是Unity通过串口与Winform程序(或WPF程序)进行串口通信。

项目一

    1、该项目有两种串口接收方式,一种是收发字符串(Unity接收字符串,发送字符串),另一个是收单个字节,然后对每个字节进行组装解析,在发送字节数组。

    2、经过项目的开发和测试,我发现收发字符串是没有问题的,但是在我自己写的测试程序中却出现异常,出现数据错误,数据丢失以及接收不到数据等随机性错误(第一篇关于串口文章)。不过经过我发现实际项目中的串口收发格式是有标记位和校验位,但是当我自己写程序去测试时,却发现了异常。针对这个问题我到时候后期会在进行仔细研究下,因为我现在也没找到合适的理由去说服自己以及读者,所以我不会去做详细的介绍只是提醒读者,后期如果解决了我会在博客上写出来。

项目二

    1、该项目是接收字符串数组和发送字符串数组,在实际开发项目中却出现了Unity接收数据错误的问题,针对该问题加上项目时间紧急,不可在此问题耗费我太大心力,所以无意中想到用中间件程序来做Unity与winform程序通信的一个桥梁。

    2、我写一个中间件程序,让Winform程序与我的中间件程序进行串口通信,中间件程序与Unity程序Socket通信。

    3、首先启动我的中间件程序,然后中间件程序启动我的Unity程序。中间件程序隐藏起来并与Unity程序互相监听,当Unity程序关闭时,中间件程序也关闭。这样从表面上看起来就只是Unity一个程序在工作,实际上中间还有一个中间件程序在做幕后工作。从而巧妙的完成了所谓的Unity与Winform程序之间的串口通信。但是这终究不是一个很好的解决方案。

项目三

    1、这个项目三就是我们的重头戏了,这也是我最新研究的一种解决方案,而且经过测试和实际项目开发,也是没什么很大问题的,不过有个项目会有一些小问题,但是被我很简单的解决掉了。后面我都会详细的讲解这个解决方案,如果有朋友与我阐述的不符,那么可以参考项目二的解决方案给您一点小思路。

    2、该项目采用的是什么呢,首先Winform程序往Unity中发送字节数组,从Unity中读取字节数组数据。按照正常的逻辑上我们的Unity也应该从串口中读取字节数组和发送字节数组。但是在这一块出现了问题,上面图片我阐述过,Unity从串口接收字节数组时会出现需要两次才能接收完,第一次接收一个字节第二次接收剩下的。数据倒不会出现异常,但是这对我们的数据处理显然是不好的。针对此问题,我下面一大章节来结合实际项目来解释。

三、Unity解析串口数据,得到完整数据

1、定义存储串口数据变量

2、打开串口

3、打印串口数据

这个打印串口数据是一个方法,就是在Unity中打印接收到的串口数据,怕读者看代码是有点不懂这方法是干嘛的,所以我贴出来。

4、读取串口数据

从winform程序中发送数据过去

Unity接收到的数据情况,发送数据经过我们组合后是没有问题的。

但是当我Unity中发送给上位机数据时,突然unity串口中接收到一个00数据,该测试不是从我写的测试程序测试的,而是从实际项目中测试的,但是我在自己写的测试程序中又没有这个问题。针对此结果加上一些数据规律,我后期自己进行了改动(后面会详细介绍)。

经过解析数据,然后返回给Winform数据,返回后突然又接到异常数据。

Winform接收到的数据

5、解析串口数据

六、总结

1、上述可能会让一些读者觉得有比较多的漏洞,我后续如果发现更好的解决方案和问题,也会陆续更新。一方面是记录下曾经问题方便以后,另一方面也是让Unity开发串口这边的开发者一个思路和想法吧。因为我深感此处的坑。

2、如果有读者看到了,有一些好的解决方案、帮助等都可以联系我,我们共同探讨。关注我的公众号(Hua灬清),每周推送原创技术博客。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,258评论 6 498
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,335评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,225评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,126评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,140评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,098评论 1 295
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,018评论 3 417
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,857评论 0 273
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,298评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,518评论 2 332
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,678评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,400评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,993评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,638评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,801评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,661评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,558评论 2 352

推荐阅读更多精彩内容