使用C#做通过串口对MODEM编程实现数据传输,急,请高手赐教,就这些分了。跪谢!!!

waynewjp 2007-11-28 11:17:25
小弟要做一个上位机和下位机通过MODEM,联入公用电话网,使下位机的数据传输到上位机的项目。以前没有做过底层的东西,对这些东西都不熟,并且使用C#开发。想找一套做好的类或模块。具体的需求附在后面了,请会的大哥们帮帮忙。
在网上查了一下,可以用VB6下的MSCOMM做串口,但在.NET下具体的使用用一些变化。请会的朋友给讲一讲,最好是有现成的东西用,或者是相关的程序或文章也行。我的邮箱是:wanjingping@126.com , 非常感谢!!!

通信模块的要求说明: 自己写的,可能有些不对

1、 初始化MODEN函数(参数空)
对MODEN设定其初始化命令字,若正常返回int型“1”,否则为“0”;
2、 拨号函数(参数为下位机的电话号码,类型为字符型数组)
通过MODEN拨打下位机的电话号码,下位机MODEN监测到上位机的呼叫后,摘机应答;之后双方进行差错控制等通信协商,然后函数返回Int型值“1”,表示成功。此时MODEN进入自动在线状态,双发可开始通信。若拨号出现超时或未能建立连接则返回“0”。
3、 发送命令函数(参数为读取数据的命令字,类型为字符型数组)
建立连接后,上位机程序发送给下位机读取数据的命令。
4、 接受命令函数(参数为空)—————下位机运行
在连接建立后,下位机将调用此函数,以等待上位机的命令。当接收到了上位机送来的命令就将此命令作为返回值(类型为字符数组),以交给外面的程序分析命令内容准备数据。
5、 发送数据函数(参数为要传送的数据,类型为Byte字节数组和数据长度,类型为Int型)————下位机运行
外面的下位机主程序在判断了上位机发送过来的命令后,将要发送的数据放入一个字节数组以及其长度做为参数传给本函数,本函数负责发送给上位机。
6、 接收数据函数(参数为空)
下位机上传的数据——>MODEN——>串口接受缓冲区——>动态数组——>数据库
本函数将接受来的数据存入到一个字节数组中作为返回值交给上位机处理。或者存入到一个文本文件皆可。
7、 挂机子程序
通信结束后,停止链接,关闭MODEN。
...全文
468 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
21yanghw 2007-12-08
  • 打赏
  • 举报
回复
使用sio函数或者别的方式操作串口,在串口里面具体操作电话的AT命令。
好久之前vc做过。
你的说法好像你要上下位都想自己写??建议你的思路是电话操作做为一部分,先写好这个通道,使之透明,然后再操作联系上下位机。
barrytam 2007-12-04
  • 打赏
  • 举报
回复
呵呵,没做过。
btw:何谓“上位机”和“下位机”??小弟不才,请指教。
龙宜坡 2007-12-04
  • 打赏
  • 举报
回复
LZ,DEMO已经发给你了!

MSComm控件的各种属性和方法在百度搜下“MSComm控件使用详解”,多。。。

若机器上没有装VB6.0的话,需要注册下此控件。
wetcom 2007-12-02
  • 打赏
  • 举报
回复
就用用C# 引用VB  的 MSCOMM 控件就可以了呀,我用C#应用过 VB的 MSCOMM控件,进行串口通讯,不过只是进行接收数据,不发送数据~
waynewjp 2007-12-02
  • 打赏
  • 举报
回复
补充一下:
我客户端要传输的数据格式大致如下:
341 2007-9-12 15:25:30 2.038731 0.02818557
342 2007-9-12 15:25:31 2.16385 0.0283359
20005 1899-12-30 0:00:00 0 0
20006 1899-12-30 0:00:00 0 0
20003 2007-9-20 11:16:21 11.62354 10.5365
想用字符串形式传输,不定长,数据需要到服务器解析
还有
4. 在传输过程中如何对传输的状态进行检查,即对MODEM和通信链路的状态判断。那些CTS,RTS,CD线是具体怎么用,用来判断什么不是很清楚。
谢谢
waynewjp 2007-12-02
  • 打赏
  • 举报
回复
多谢IBM兄,但是System.IO.Ports.SerialPort类我没有找到相关的书籍和文档,最后就像用MSCOMM做,其实应该是差不多的。但是现在还有些问题没有弄清楚。
1. 对MODEM发送了AT指令后,其会有返回码。但这个返回码是反倒哪里去了?按说发送时这样写的MSCOMM1.OUTPUT="AT...",
那返回码肯定不是作为函数返回值了,是否反倒了输入缓冲区去了?那样不是影响我的正常数据发送的判断吗?
2. 这些串口的通信类对状态判断如何进行啊?如我的服务器端和客户机端如何做到有序的数据收发,即客户机发过来一条数据(字符串),服务器就知道然后处理其数据(不定长)。然后客户机在发送下一条数据,如此有条不翁的进行。不会出现服务器的输入缓冲区内堆积多条数据,使程序不知如何处理。 (怎么有点像是生产者消费者问题了。晕)
3. 听说用公用电话网传输数据会有很大的不确定性,那高手们都是如何来做到无差错传输的,如何知道发错了,一般用什么方法检验啊?
龙宜坡 2007-12-02
  • 打赏
  • 举报
回复
再说System.IO.Ports.SerialPort的通信不稳定,不知道是什么缘故,
以至于我白浪费了两天时间研究,后来不得不回到MSCOMM控件.
接收的字符串有时乱码,用MSCOMM就没有问题了!

To:IBM___

在项目中用到了System.IO.Ports.SerialPort,且稳定的话,
麻烦发一份代码到goga21cn#126.com(#用@代替) ,谢谢了!
龙宜坡 2007-12-02
  • 打赏
  • 举报
回复
我刚刚做了个C#项目用到了VB中的MSCOMM控件,不过我的下位机是无MODEM通信方式,
要的话发邮件到goga21cn#126.com(#用@代替)
主题:求代码,要MSCOMM使用
IBM___ 2007-12-01
  • 打赏
  • 举报
回复
其实很简单,串口类嘛就用framework 2.0自带的System.IO.Ports.SerialPort类,波特率选正确了后,像Modem发送 AT\r 后应该有OK返回。说明和Modem连接正确了,然后拨号是: ATDT02133332222 其中02133332222是对端Modem的电话号码。等待... .. 拨通后会返回connect等。这样就建立了一条CSD链路。然后就可以双向收发数据了(往串口写什么,对端Modem串口就输出什么.)。
waynewjp 2007-11-29
  • 打赏
  • 举报
回复
请大侠们看看啊,多谢了!
  • 打赏
  • 举报
回复
好复杂。我也没怎么做过底层的东西,帮你顶

110,545

社区成员

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

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

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