***还是Mscomm控件***
Mscomm控件:打开Com1,当端口已经打开时,程序再打开它就会出错,但不用Mscomm控件来打开它就不能往Com读写数据?不知是不是?
不知道我意思说明白了没有,假如在我的电脑里有两个程序,就只能有一个程序能打开Com1(Modem),另一个程序就会提示:"端口已打开";如果在另一个程序里我不打开它,试着也往Com1口写数据,就会提示"只用于打开时"? 难道就不能用两个程序同时控制同一个端口?
还有当Modem在拨号的时候,程序就不能打开它?,不能打开它,也就不能读取Modem拨号的信息?在线等待
问题点数:100、回复次数:28Top
1 楼Jneu(沧海桑田)回复于 2002-06-07 10:56:09 得分 2
是的。Top
2 楼sunshinecom21(用VB)回复于 2002-06-07 11:03:54 得分 0
那我该怎么办?Top
3 楼Jneu(沧海桑田)回复于 2002-06-07 11:10:22 得分 2
自己编写程序控制Modem拨号。Top
4 楼sunshinecom21(用VB)回复于 2002-06-07 11:20:19 得分 0
To: Jneu(沧海桑田)
我主要不是想控控制Modem.
我是在想,假如用Mscomm控件读取Com口数据(只是读取不用写),当然Com口已经打开,并且里面有数据。而我又不能用Mscomm来打开读取,那该怎样读取呢?这个问题已经困恼了我很久了?希望高手指点指点!Top
5 楼sunshinecom21(用VB)回复于 2002-06-07 11:39:35 得分 0
应该有办法吧?不然在打卡的时候,怎么读取磁卡的数据!Top
6 楼metin(风浪)回复于 2002-06-07 11:46:39 得分 0
不太了解你们的情况,但我想一段功能完成就可以关闭Mscomm它了,用在开可以保证没冲突的.读通讯信号有先后的问题.我做一些通讯程序都是这么完成的,没出现共占的问题.你们想想程序上是不是有欠妥的地方.Top
7 楼mazhayang(蚂蚱先生)回复于 2002-06-07 11:54:59 得分 2
那是不是要直接读取地址理的数据,Top
8 楼sunshinecom21(用VB)回复于 2002-06-07 12:08:17 得分 0
To: mazhayang()
我是想直接读取地址里的数据呀
To: metin()
关闭Mscomm后,缓冲区里的数据还会在吗?
Top
9 楼sunshinecom21(用VB)回复于 2002-06-07 12:19:15 得分 0
To: metin()
还有,那些刷卡机是不是刷一次卡时先打开Com口,刷完后再关闭它。
那数据就留在缓冲区里,我们就可以用Msomm打开Com口,读取其中的数据,是这样子吗?Top
10 楼load(不是东西)回复于 2002-06-07 12:30:43 得分 2
直接读取地址里的数据用普通程序是不可能的,那要写驱动。
串口关闭后一般缓冲区就没有数据了,即使有你也不可能读到。
要两个程序用一个串口只能分时用,同时是用不了的,除非是一个程序里。
Top
11 楼metin(风浪)回复于 2002-06-07 12:50:58 得分 20
看你们好象不了解Msomm
to sunshinecom21(用VB):当然不在了,有网卡进行暂时存储就没问题了吧.还有别的方法 .
还有,刷卡机当然不关闭COM了,那样不累死它呀!我是这样做的定义一个通讯协议(不知道你们了解吗?通讯协议就是定义硬件和软件的接口动作的)
说明白点儿吧,如我定义AH开头的BH结尾的串,我认为是卡号.
Top
12 楼metin(风浪)回复于 2002-06-07 13:02:55 得分 0
接上楼,其实这个和硬件有一定的关系,你们想知道的更详细的话,给我MAIL(要对硬件有一定的了解哦)Top
13 楼sunshinecom21(用VB)回复于 2002-06-07 13:43:44 得分 0
To: metin(风浪)
谢谢你的热情参与!
我想知道更详细的知识,因为我真的很想知道如何用Mscomm读取刷卡数据,那个"通讯协议"该如何写。
我想"定义AH开头的BH结尾的串,认为是卡号" 的前提,还是要先读取它的数据吧?
E_mail : sunshinecom21@21cn.com
你的E_mail呢?,在线等待...Top
14 楼sunshinecom21(用VB)回复于 2002-06-07 14:08:35 得分 0
To: metin()
你还在吗?Top
15 楼metin(风浪)回复于 2002-06-07 14:25:15 得分 40
给你说说如何终止Mscomm(是程序终止而非关闭).它时时刻刻是开着的(不管你刷几张卡),除非退出程序.
Private Sub MSComm1_OnComm()
Dim strIn
Dim a, i, j As Integer
Dim TempNumber(10) As String
Dim CardLen As Integer
'如果不是返回 值事件退出
If MSComm1.CommEvent <> 2 Then
Exit Sub
End If
strIn = MSComm1.Input
i = UBound(strIn)
Select Case MSComm1.CommEvent
Case comEvReceive
For j = 1 To i
If strIn(a) = "HD" Then
CardLen = 0
Exit For
End If
TempNumber(CardLen) = Hex(strIn(a))
SBar.Panels(2).Text = SBar.Panels(2).Text & Hex(strIn(a)) & " "
CardLen = CardLen + 1
Next j
'处理划卡
Case comEvSend
...
Case comEvRing
...
End Select
End Sub
我的是statement@263.netTop
16 楼metin(风浪)回复于 2002-06-07 14:32:46 得分 0
接楼上,看到了吧HD是我认为卡号已经传输完毕.好了现在你可以进行任何操作了.够详细了吧,给我加分哦.嘻嘻...大家都明白了,以后可别抢我的饭碗哦.5555:)Top
17 楼dyx(天火)回复于 2002-06-07 14:34:54 得分 2
是的!当一个串口被一个程序占用时,其他程序就不能对此串口进行操作Top
18 楼metin(风浪)回复于 2002-06-07 14:54:03 得分 0
对了263.net收费了,我很穷不用了,改用statement@263.sina.comTop
19 楼dreameasy(自由哥哥)回复于 2002-06-07 16:00:15 得分 8
你要读卡协议,我刚好有一份!呵呵Top
20 楼sunshinecom21(用VB)回复于 2002-06-07 16:33:14 得分 0
谢谢各位的帮忙,特别是metin(风浪),我刚有点事走开了,分是一定会给的。
To: dreameasy(自由哥哥) 你那份可以给我参考吗?
Top
21 楼sunshinecom21(用VB)回复于 2002-06-07 16:39:36 得分 0
谢谢各位的帮忙,特别是Metin(风浪),我刚有点事走开了,分是一定会给的。
To: dreameasy(自由哥哥) 你那份可以给我学习吗?Top
22 楼banweihui(KBoy)回复于 2002-06-07 17:54:01 得分 10
呵呵,看到这份帖子,真高兴:
谢谢您们的帮助,我的一些基本问题都迎刃而解,比如把写卡命令传给磁卡机等,但是,对于毒卡命令发出并且刷卡后返回的数值是什么格式的,我还有很大的疑惑,现在用input收到的都是乱码之类的东西,那么应该如何把这些数据转换成10进制的呢?
21(vb);你是用的什么磁卡机,我们也来交流一下心得把,我用的暂时是上海润星的jl10x系列,我这几天正在忙着弄这东东,遇到数据返回应如何接收时,不知道如何处理了,哈哈,与我连系啊!!!!QQ:121683833
我想做成可以自动也可以手动的刷卡待机模式,你能提供一种简单的方法吗,提示也可以。我先说说我的想法:我想用timer控件对断口进行周期性操作,并用timer的enable属性来控制命领的发出,这是大体思路,不知道有没有更好的方法呢?请指点!
^_^我的QQ:65008066 or 121683833 email:jasinow◎sina.com再次感谢您!Top
23 楼metin(风浪)回复于 2002-06-08 10:02:04 得分 0
banweihui(KBoy)
当然有了,不过有些为难!其实通讯程序设计和你用什么卡机没有太大的关系.(磁卡,射频卡,光电卡,指纹卡,等等)它们都有自己通讯模式.你想做的"自动和手动的刷卡待机模式"不知道自动是什么意思对于读卡命令发出并且刷卡后返回的数值是什么格式的?应该是2进制机器码吧,不太清楚.用Hex(strIn(a))以后为16进制数据.你在转换10进制应该不是问题了.Top
24 楼sunshinecom21(用VB)回复于 2002-06-08 10:07:20 得分 0
To: metin(风浪)
再次感谢你!
我的问题还是没有解决!
我目前只有Modem,我想在一个程序里用Mscomm打开它并拨号。而我又想在另个一个程序里读取所拨的数据(当然在一个程序里是可以实现)?有办法吗?
上午在线...Top
25 楼metin(风浪)回复于 2002-06-08 10:19:05 得分 0
给你个最简单的方法.你在拨号端做一个过程(此过程完成读取所拨的数据用变量记录数据)然后在传给客户端程序(另一个程序)用WINSOCK就可以了.Top
26 楼metin(风浪)回复于 2002-06-08 10:33:00 得分 0
用WINSOCK通过TCP/IP传数据应该没问题吧.我上午在线帮你Top
27 楼wzsswz(岌岌荆棘)回复于 2002-06-08 10:52:26 得分 2
metin(风浪)在这方面很有见地,应该加分噢, 呵呵。。。Top
28 楼sunshinecom21(用VB)回复于 2002-06-08 11:43:04 得分 0
To: 风浪
你的方法应该可以,说白了我还是想用Mscomm
顺便问一下,要产生
Private Sub MSComm1_OnComm()
End Sub
事件的前提,是不是一定要在本程序里Mscomm1打指定端口,就是用Mscomm2打开都没用? 如果是这样子的话,在另一个程序里用Mscomm读取Modem的数据就难办了?Top
29 楼sunshinecom21(用VB)回复于 2002-06-08 11:44:25 得分 0
To:风浪
不好意思,前段时间网络连不上,所以到现在才.....Top
30 楼metin(风浪)回复于 2002-06-10 08:21:49 得分 10
哎~~~~,如果你真的认为2个程序可以同时对COM操作的话我也没办法帮你了(不要钻牛角尖)程序,程序,何谓程序.打到目的的方法.对Private Sub MSComm1_OnComm()操作的前提是对它初始化.打开指定的端口,程序完成可以关闭,在开新的端口.Top




