lovenashte 发表于 2009-10-19 17:33:35

SIM300 在发送GPRS数据时为何会将一条数据分成两条发呢?

SIM300 在发送GPRS数据时为何会将一条数据分成两条发呢?

如:我用PC端发送内容为:"+++ Switch from data mode or PPP online mode to command mode"

后台收到数据:
2009-10-19 17:30:58::"+++ Switch from data mode or PPP online mode to command mode"

但后台有时接收到的为两条数据:
2009-10-19 17:31:01::"+++ Switch from da
2009-10-19 17:31:02:ta mode or PPP online mode to command mode"

出现这种情况的机率不是很大,约发十条有一条会这样,请问这是怎么回事呢?(另外我用UDP和TCP两种方式都试过了,但还是一样的结果.)

请知道的大侠,告诉一下,谢谢!

Appcat 发表于 2009-10-19 18:11:50

这个就说明模块的发送指令并不是直接发送到TCPIP栈进行封包的,而是内部放一个缓冲区,然后根据超时或者缓冲区即将满时再由系统进行封包。这种实现模式表面上提升了模块指令的效率,简化了发送的操作过程,使得更多的人能够比较容易的使用数据透传,但是这个模式也带来明显的缺陷,最大的缺陷就是用户无法自己决定IP封包的边界,其次是系统可能会占用一些控制字符作为缓冲区输入的结束,带来的问题就是用户数据中不能出现这样的字节,比如0X1A,这显然违背了透传的初衷。

laosuntou 发表于 2009-10-19 18:44:45

这么短的数据都分包传输,首先检查一下计算机发送时有没有字符间空闲超过那个发送门限,如果可能,用逻辑分析仪抓一下,或者也可以更改一下设置,那个超时门限改成最大值试试。SIM300倒没发现Appcat说的需要特殊字符标志数据帧结束的,05年时的Wavecom有个Q2406B(没记错的话是这个型号)就傻到了用特殊字符的地步,如果数据帧中有这个数据,需要进行转义处理,我只能放弃它不用。

lysoft 发表于 2009-10-19 20:24:22

+++是实现AT和Channel切换的

当然,如果是Wavecom的就很好处理

PS:Q2406B用OpenAT可以轻松屏蔽这个特殊字符
华为,SIMCOM,西门子,WAVECOM都用过,每种模块都有它的特点和局限性,用好就Ok

laosuntou 发表于 2009-10-19 20:56:01

大多数人还是不用OpenAT的,也不可能就为了屏蔽这个字符,就去学用OpenAT,换个模块更简单。
西门子、SIMCOM有什么样的局限性,说来听听,西门子一直用,比较有信心,SIMCOM心里不太有底,他的第一款模块我拿到样品试用过,问题多多,而且比较低级。直接导致这么多年没再评估他们的产品。最近听朋友介绍说,他那边用了一些(5K+),感觉在低端产品里还算好的,于是才决定再试试的

lysoft 发表于 2009-10-19 21:14:19

SIMCOM不如西门子,这个是肯定的,SIMCOM走的是低端路线嘛

西门子此类因为内核没有开放,你无法控制诸如MTU,TTL,数据打包,分包处理等细微的网络细节

OpenAT的优势就在于更多的细节可以控制,用的人少是因为门槛高,而且技术支持严重不足,一般人玩不转,很多问题找FAE也无法解决
这就是偶用OpenAT几年来的经验教训:出问题找官方论坛和自己试验,不要指望FAE,没用的,有时候文档也会遗漏,某些undocumented的API是找不到的(WINDOWS才喜欢玩这个-_#!)

laosuntou 发表于 2009-10-19 21:20:25

歪楼了,呵呵,去我的帖子里聊吧

lovenashte 发表于 2009-10-20 08:44:53

谢谢楼上这么多位大侠的回复!


to【1楼】 Appcat 苹果猫:你分析得很有道理,请问对于这种内部放一个缓冲区这种方式,有什么解决方法吗?


to【2楼】 laosuntou:我也是在找那个设置,但暂时找不到,请问您知道吗?谢谢!


to【3楼】 lysoft :每种模块都有它的特点和局限性,您说得对,但对于sim300的这种情况你有什么好建议吗?谢谢!

to【4楼】 laosuntou :您说SIMCOM心里不太有底,第一款模块拿到样品试用过,问题多多,而且比较低级。您能说说主要是什么问题吗?

ps:西门子的我也用过如TC35,TC39,MU55,虽然好用,但都有各自特点,TC35只能用于短信没有GPRS,TC39两者都有但没有内置协议,MU55有内置协议,但它的排针实在是太小了,不利于生产也不好买,所以现在选择了SIM300.

希望知道如何解决的大侠一起讨论,谢谢!

laosuntou 发表于 2009-10-20 13:47:36

看看at+cipccfg

lovenashte 发表于 2009-10-21 11:05:28

谢谢楼上的指点,我详细地试了,这个命令

+CIPCCFG: 5,2,1024,1
        <NmRetry> number of retries to be made for an IP packet.
        <WaitTm> number of 200ms intervals to wait for serial input before sending the packet.
        <esc> whether turn on the escape sequence, default is TRUE.
        <SendSz> size in bytes of data block to be received from serial port before sending.

WaiTm 改了2-10我都试了,但结果没有明显的改善,我在想没理由啊,间隔两个200ms即400ms,怎么可能还误判为两贞呢?

于是我又改了波特率,原来用9600,再改为115200这要一句话分成两句的机会就小了一些,但还是会出现,无法根除.不知这种情况会不会是SIM300的原因呢?

billleu 发表于 2009-10-21 11:41:23

所有的Serial都有Buffer,,Buffer是要自己處理,,
TCPIP因為定義有MTU所以每個PACKET都有最小與最大size

lovenashte 发表于 2009-10-21 12:32:05

是的,但现在的问题不在于这个Buffer,因为之前我已经改为1024了,已经是最大了.

lovenashte 发表于 2009-10-22 09:58:13

今天我又拿周立功的DTU板子试了一下,也是一样的结果,看来这是SIM300的通病,估计是没法解决的.失望....

Appcat 发表于 2009-10-22 10:11:36

老周的DTU用的SIMCOM300,我最佩服的是居然价格要的跟里边是一块金砖一样。

下午有时间我写一点我对GPRS TCPIP指令集设计的体会吧。

xbeethoven 发表于 2009-10-22 10:39:34

b不错

billleu 发表于 2009-10-22 10:52:22

我就是用Simcom 300/300C的都沒問題!!

==================================
GSM/GPRS    產品(GSM-01)
2.4G      無線產品(WSN-01)
PLC         可程式控制器(PLC-01)
http://www.proeasy.com.tw
=========================================

lovenashte 发表于 2009-10-23 17:50:54

To:【15楼】 billleu
    你试过了,真的不会出现这样的情况?将一句话分两二段,有些甚至三段,你不能只发几次就算哦,发二三句试试看,因为我做出来的与周立功的那个都是一样的结果,偶尔会分段,但并不是所有的都会分.

    billleu 您能说说您是怎么做的吗?期待您的回复!

QQ1013182577 发表于 2009-10-24 11:00:14

作为模块用户处理程序建议要做成可以适应TCP数据的分包,合包。TCP数据本来就是数据流,分包合包都是符合TCP数据协议规范的。

lovenashte 发表于 2009-10-24 12:37:50

To:【17楼】 QQ1013182577 yu
您认为象SIM300模块这样将一句话分成两句,是属于正常的?

Appcat 发表于 2009-10-24 17:39:19

事情一多,就没心思静下来仔细写了,简单的写一点,关于模块的TCPIP指令设计的问题。
目前遇到的模块,主要是分两种,一种是用户可以直接参与到TCPIP协议栈数据包打包过程的指令系统,主要是比较老的一些品牌型号,或者是比较高端的一些模块,第二种是用户不可以直接参与TCPIP协议栈数据打包过程的指令系统,在一些新出的模块和比较廉价的模块上多见。

第一种指令系统的特点:用户可以精确,实时的按照自己的要求打包数据,指令里边可以直接设定数据包长度或者指令里边直接给出数据包的内容,发送给模块后,模块就以此为准立即生成TCP包或者UDP包。此种指令需要用户对模块的命令接收缓冲区,TCPIP栈内缓冲区,网络的MTU,IP包的帧头结构的字头开销都要了解。用户如果不熟悉这些的话,很容易使得数据传输要么没有实时性,要么没有效率,带宽浪费极大,而GPRS网络数据传输的精要就是要兼顾数据的实时性和网络带宽的利用率。类似的指令系统有西门子MC55,它是直接在指令中指定数据包大小,华为GTM900B或C,直接在指令中放入数据,以实际数据长度作为一个数据包。

第二种指令系统的特点:使用简单,用户只管往里放数据,查看缓冲区空闲字节,模块内部根据两个参量来决定何时从缓冲区中取走数据打包发走,一个参量就是超时,输入间隔或者距上次打包累计时间达到某个值,将缓冲区取走打包;另外一个参量就是缓冲区即将满门限,比如1024字节缓冲区,当剩余空闲字节小于10时就取走数据进行发送。这样的处理办法,在绝大多数情况下,不需要用户理解缓冲区大小,MTU,数据包边界等概念,并且也能基本兼顾数据传输的实时性和网络效率。缺点就是,这样的指令系统用户没法实时精确的控制数据包的生成,或者换句话说,没法精确的确定数据包的边界。有时这个数据包边界对于类似MODBUS RTU之类的协议,或者是没有学习过TCPIP软件开发的单片机工程师来说,真的是很重要。具体举例来说,楼主的SIMCOM300的模块显然就属于这一种,华为EM310和GTM900C推出了“半自动透传指令”,其实也属于这种指令系统,当然华为原有的那套指令还是属于很强大的第一种指令。最近手里做的一个ULC2内核的DTU,也是这种指令系统,曾经一度比较苦闷,但是发现它还支持PUSH,FLUSH指令,将当前缓冲区内数据立即PUSH到栈内进行打包,不禁幸甚。

上面说了两种指令的运作模式,第一种指令模式复杂,灵活,功能强大,满足对于数据包边界有精确要求的应用。第二种模式简单,而且在默认配置下就能兼顾实时与效率,适用于连续数据流,对边界无要求的应用。

所以,如何选择一个GPRS模块,不是光看他的售价,口碑,外观体积,接口,而是要看他的指令系统是否符合自己的需要,然后再是其他的因素。这一点,论坛上很多人都忽略了。

zc3909 发表于 2009-10-24 18:19:08

对于数据通信我建议在每帧数据中增加帧头,帧长,效验,无线数据传输情况比较复杂尤其是分组交换的数据

alexmayer 发表于 2009-11-2 11:51:17

没考虑一下是否后台的串口处理问题?现在串口的速率远远比不上CPU,将一帧截成两部分完全可能,后台要自己处理粘包、分包。

Appcat 发表于 2009-11-2 12:01:50

21楼】 alexmayer
积分:106
派别:
等级:------
来自:
没考虑一下是否后台的串口处理问题?现在串口的速率远远比不上CPU,将一帧截成两部分完全可能,后台要自己处理粘包、分包。
 
-------------------------------------------------
这个对于学软件和网络出身的人来说,小菜一碟,但是对于天天和单片机打交道的电子工程师来说,确实是个麻烦事。而且一个简单的数据包都不能打到一个网络数据包中,说明这个模块设计者也是人云亦云,没有认真的去设计模块,所以给楼主的建议就是换模块。

lovenashte 发表于 2009-11-4 13:41:17

非常感谢"Appcat 苹果猫"的问答!谢谢!

lovenashte 发表于 2009-11-4 18:21:53

因为上周出差了一个多星期,所以没有继续试下去,今天我试了不使用透传是可以解决这个问题的,即用AT+CIPMODE=0这种方式,但发送时比较麻烦,要加AT+CIPSEND.目前测试还是一样会有这种现象.问题依然存在.看来这是模块的问题,我们是无法解决的.可惜....

forest3 发表于 2009-11-5 12:01:14

不一定是模块问题。你可以先去掉下 +++ 再试试

wjc1956 发表于 2010-2-20 18:13:05

mark

aaronpu 发表于 2010-2-21 11:53:34

M590采用英飞凌7880单芯片解决方案,全球第一款单芯片GSM/GPRS纯数据工业级通信模块,提供优质的短信和数据传输服务,该模块具有低功耗(待机功耗2.5毫安)、温宽大(-40至+80)、独特的AEsft软件加密协议功能,而且属于业界体积最小的模块28mm*24mm*11mm (长*宽*高),目前正大批量应用在电力系统、车载、无线数传、无线监控等工业级领域,附件是详细的M590产品规格书,请查看,欢迎与我联系 深圳市有方科技北京办事处 蒲先生 13488653038
全球第一款单芯片GPRS模块

功耗低:待机功耗2.5MA

温宽大:-40—80

支持串口的CMUX功能

开放1Kbytes数据区供客户使用

独特AES软件加密功能

PMB7880集成了基带、射频(收发)以及电源管理四颗芯片

编码方式:CS-2传输速率可达到13.4KBPS

支持串口的CMUX功能

支持串口复用(多路复用)功能

支持DNS域名解析

支持GPRS认证指令

支持TCP/IP功能

支持FTP传输功能

支持CSD业务

支持USSD业务

支持AMR语音编码

支持全速率半速率AT切换(通过AT指令来控制时间)

软件本地升级支持

nil0 发表于 2010-7-5 22:10:18

mark...

nil0 发表于 2010-9-20 00:20:42

mark!

bondxie3 发表于 2010-11-11 15:35:17

标记学习
页: [1]
查看完整版本: SIM300 在发送GPRS数据时为何会将一条数据分成两条发呢?