JS调用MSComm控件的问题 4C

近期做的一个项目需要在页面调用串口通信,于是选择了使用mscomm32这个控件。
控件的安装注册都没问题,按照教程调试时发现了2个问题,希望有大神帮忙解答一下:
1.JS没有所谓的字节数组,不知道如何将16进制的字节数组发给串口;
2.控件的oncomm事件只有1,也就是发送数据事件能触发。当我试图接收数据时oncomm事件2始终无法触发。
其他的状态为0,可是关于这个控件没有找到oncomm事件为0的描述。


多方查找求助,看到一个比较有用的猜测方向:因为com口无法识别我发出去的读取数据指令,所以无法触发oncomm事件了。
小弟不才,串口通信也是因为项目要用到所以才开始了解的。对于很多都不大懂,希望有大神来帮帮忙,新人没有多的东西能悬赏了,全部家当在这里了。。。

2个回答

用vb编写一个activex,用vb去调用。

q1325545052
q1325545052 哎,我不会VB诶。只能用现成的微软mscomm32控件
接近 2 年之前 回复

哎,我不会VB诶。只能用现成的微软mscomm32控件

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
vfp调用mscomm控件的问题
能不能通过调用mscomm控件去实现用串口进行条形码扫描?rnrn如果可以的话,调用mscomm控件去调用串口的代码应该放在哪个地方?rnrn我现在是在form中加入了mscomm控件的olecontrol,后面我该怎么实现??
MSComm控件调用动态库函数
环境VS2010 MFC,使用MScomm控件实现串口通信;用MScomm控件能调通和下位机(电表)Hex码通信,现在的任务是上位机和台体以及挂接在台体上的电表进行通信,问题来了,我不用MScomm控件,只写上位机的按钮响应事件函数调用台体厂家的动态库就可以实现控制台体;如果我想用MScomm控件来和台体通信,如何实现呢,现在只知道台体厂家的动态库函数及参数列表。求大神指点一二!
串口通讯,vb调用MSComm控件
vb语言,通过调用MSComm控件,显示串口传输的数据
vb.net 调用mscomm控件报错
我用vb.net新建了两个窗体 ,其中一个窗体A拖放了一个MSCOMM控件rn另一个窗体B调用窗体A中的 MSCOMM 相关方法就出现错误,请问应如何解决?rnrn未处理的“System.Runtime.InteropServices.COMException”类型的异常出现在 axinterop.mscommlib.dll 中。rnrn其他信息: HRESULT 中的异常:0x800A1F45。rn
VC2005调用MSComm控件出现的问题
rn调试出現Debug Assertion Failed畫面,如下:rnrnDebug Assertion Failed!rnProgram:...rnFile: f:\rtm\vctools\vc7libs\ship\atlmfc\src\mfc\winocc.cpprnLine: 373rn rnFor information on how your program can cause an assertion failure, see the Visual C++ documentation on asserts.rn rn(Press Retry to debug the application)rnrn 我選擇中止後,便出現在winocc.cpp的第373行出現:rnrnASSERT(m_pCtrlSite != NULL); // not an OLE control (not yet, at least)rnrn 請問這是為什麼?我都没有f盘啊!rnrn我发现只要调用mscomm的函数就会出现这个错误,请高手指点呀!!!
PB8程序调用mscomm控件通讯问题
请教高手!rn我现在想用一条码扫描器读取条码,然后在PB中接收读取到的条码信息进行操作。rn请问怎么用mscomm控件实现与电脑的通讯,我在PB程序已写了端口信息,也已打开该端口,接收和发送的程序也可以实现,但不知道数据是怎么和条码扫描器通讯的,请高手指点下!!rn有实例最好,非常感谢!!
遇到问题了……线程中调用MSComm控件的问题
我有一个线程UINT ReceiveWait(LPVOID param)要循环不断的处理数据然后用MSComm的SetOutPut把数据给发送出去,但为什么一运行到调用MSComm控件的地方程序就会崩溃呢?难道说MSComm控件不能在线程中使用,还是还需要另外的一些处理,请高手指点,先谢了~~!
VB MSCOMM控件问题?
请教下,我有个小软件需要用到串口,MSCOMM1.Setting = "9600,N,8,1",设置通讯参数,FORM1 LOAD后初始化串口参数,但是我有个串口参数设置窗体,比如可以设置波特率,串口号等,如何传递给他?
mscomm控件的问题
在程序中用mscomm控件登录cisco2600单步执行时正常,rn直接运行时不能正确输入密码处,如何处理
MSComm控件接收数据问题
MSComm控件每次接收不定长的数据,初始化设置m_Com.SetRThreshold(1),当发一次数据,怎样使数据接收完成后pc向发数据的设备发一个信号,表示传输已完成,同时pc机界面上也显示接收完成。希望各位大侠指导一下。
MsComm控件问题
我用这个方法来发送十六进制数据rndim arr(255) as byternarr(0)=&H45rnarr(1)=&H46rnarr(2)=&H47rnarr(3)=&H48rnMSComm1.Output = arrrnrn可我发的数据不是定长的,用这个方法发时总是把后面的空的数组也用00发了出去rn用什么方法可以不发后面的空数据?
mscomm控件串口通讯问题
新人请教,rn需要两个串口rn用串口1发送“!”成功返回EE,失败返回BBrn失败重发一次rn成功后再发送“A”成功返回EE,失败返回BBrn失败重发一次rn成功后启动串口2接收32K的十六进制数据,并显示出来rn由于本人对C++Builder不懂,希望大侠能提供个代码,谢谢!
MScomm控件问题
想问一下,用MScomm控件如何接收16进制数?我用了下面的程序,怎么接收不到数据?rnVARIANT variant_inp; rnCOleSafeArray safearray_inp ;rnLONG len,k ;rnBYTE rxdata [2048] ; //设置BYTE 数组An 8 - bit integerthat is not signed.rnCString strtemp ;rnif (m_ctrlComm. GetCommEvent()==2)// 事件值为2 表示接收缓冲区内有字符rn rn variant_inp = m_ctrlComm. GetInput () ; // 读缓冲区rn safearray_inp = variant_inp ; // VARIANT型变量转换为ColeSafeArray 型变量rn len = safearray_inp. GetOneDimSize () ; // 得到有效数据长度rn for(k=0;k
MSComm控件的奇怪问题????
使用超级终端可以很好的访问COM口,但是在VB6中用MSComm控件,输入命令后发现inputBufferCount的值不为0,但是用input读取时总是出错!!请问是什么原因呀?rnrn谢谢各位,在线等待,解决问题马上揭帖!!!!rnrn
MSComm控件的一个问题?
如何在BCB中使用MSComm控件,需要完整代码.
关于mscomm控件的问题
我使用MSCOMM控件做串口通讯,但却做出一个回测程序,这不是我希望的。rn看书时发现INS8250中有一个MCR,第4位“loop”如果被设为1,就会形成循环回送状态,因此要设为0,那我是不是应该在程序中进行设置呢?如果是应该怎么写,函数是什么?rn原来我以为MSCOMM控件本身会进行设置的,实际情况是这样吗
MSCOMM控件和线程问题
一个基于对话框的串口通信程序,使用MSCOMM控件。rn在主对话框类里定义:CMScomm m_com;rn使用向导添加处理函数:OnCommMscomm();rnrn我现在的问题是:rn正常情况:如果在主线程中打开、设置串口,则OnCommMscomm()能够响应串口数据。rn异常情况:如果我在一个新起的子线程中打开、设置串口,如果线程没有结束,则OnCommMscomm()能够响应串口数据。如果此子线程结束,则OnCommMscomm()不响应串口数据。rnrn如果调用m_com.GetPortOpen()查看串口状态,却又是打开的!rnm_com作为主对话框类成员,对该类来说应该是共享的,即使是在新启动的线程中打开,应该对整个类有效。只要我没在线程中关闭串口,即使线程结束,在该类的其它成员眼中,串口应该是处在打开并有效地状态吧?rnrn不解,是否是对线程理解有误?望各位见解一下,谢谢
mscomm 控件有关问题.
MSCOMM:rn 1. 程序在运行的时候如何去判断是否有数据?rn
MSCOMM控件问题?
MSComm32控件是否为已签名的控件,为什么下载安装时不能完全安装,以下内容不能写入注册表:rn[HKEY_CLASSES_ROOT\Licenses\4250E830-6AC2-11cf-8ADB-00AA00C00905]rn@ = "kjljvjjjoquqmjjjvpqqkqmqykypoqjquoun"
mscomm控件,事件触发问题???
使用mscomm控件,如何触发OnComm事件来接收发送端发送的数据
MSComm控件问题
我使用MSComm控件,接收一个,长度为67个字节的串,rn要两次才能收全,有时一次。rn不知道为什么两次才能收全,经常是,收了8个字节就近中断。rn请问如何解决。rnrn
有关MSComm控件的问题
我重装win2000,Delphi6之后发现C:\winnt\system32目录下没有文件MSComm32.ocx,我在其他电脑中拷贝了此文件后,delphi6中安装ActiveX控件 MSComm32.ocx后,不能使用此控件。rn请问该如何处理?
Mscomm控件问题
这些天遇见了一个Mscomm的问题,串口没有返回数据,却触发了oncomm事件(在oncomm处理函数中得到缓冲区中字节数为0),这是怎么回事,Threshold设置的是25
有关Mscomm控件的问题?
vb中MSCOMM控件的Settings属性,当设置为:rnMscomm1.Settings="9600,M(或S),8,1"时能不能使发送数据的rn第9位恒为"1"或"0"??? 以此来分辨是地址还是数据.
MSComm控件问题!~~~
我用MSComm控件做了个上下位机通信的小软件。rn当把它按装到有端口的机子上时可以正常运行,但安装到没有端口只有USB口的机子上时就会出错。rn请问怎样才能使我的软件可以正常运行,可以在USB口上运行(USB转485)?rn。。。。。。。。。。。。。。谢!~~~
mscomm控件接收数据的问题
Function getReceiveData(Mscom As MSComm, WaitTime As Integer) As Integerrn '接收Modem的返回信息rn Dim endtime As Longrn rn Dim ErrorCode As Integerrn endtime = Timer + WaitTimern ReceiveString = ""rn ErrorCode = 0rn Sleep (1)rn Dorn DoEventsrn If Mscom.InBufferCount > 0 Thenrn If ReceiveString = "" Thenrn ReceiveString = "--------------------" & Chr(13) & Chr(10)rn 'endtime = Timer + 1rn End Ifrn ReceiveString = ReceiveString + Mscom.Inputrn If InStr(1, ReceiveString, "ERROR") Thenrn ErrorCode = 2rn If ReceiveString <> "" Then ReceiveString = ReceiveString & Chr(13) & Chr(10) & "--------------------"rn Exit Dorn ElseIf InStr(1, ReceiveString, "OK") Thenrn If ReceiveString <> "" Then ReceiveString = ReceiveString & Chr(13) & Chr(10) & "--------------------"rn ErrorCode = 0rn Exit Dorn End Ifrn End Ifrn If Timer >= endtime Or ErrorCode Thenrn ErrorCode = 1rn Exit Dorn End Ifrn Looprn If ReceiveString = "" Then ReceiveString = "没有获取到信息"rn getReceiveData = ErrorCodernEnd Functionrnrn接收数据,始终接收不到数据rn然而用超级终端连接时,能收到缓冲区中刚才遗留的数据rnrn请教各位高手,是什么原因?rn
MSComm控件的问题
我在VC中使用了MSComm串口通讯控件, 工程使用静态连接生成.exe文件, 在其他没有安装VC的机器上运行后发现rn提示: Failed to create OLE Communication Control!rn要手工copy并注册MSComm控件, 请问为什么用静态连接方式也要手工拷贝这个控件啊.
MSComm 控件的应用问题 ?
大家好啊,我最近在做一个COM 口调试小软件, 基于对话框的,用MSComm控件做!rnrn 但是在我做的过程中遇到一个问题, 就是我更具别人资料上说的,调出MSComm控件添加到项目中,rnrn 然后在控件工具箱中 把 MSComm控件拖到对话框上, 添加了初始化代码后.在我简单测试时,发现rn rn 在对话框 CommonDlg.h 文件中添加了 #include "mscomm.h" rn CMSComm MSC;//定义了实例对象,但我发现这个类没有构造函数,但编译正确?rn BOOL temp[10]rn 在对话框 CommonDlg.cpp 文件中添加了 #include "commonDlg.h"rnrn DWORD style=WS_VISIBLE;rn MSC.Create(NULL,style,rect,this,IDC_MSCOMM1);rn MSC.SetCommPort(m_PortNo);rn MSC.SetSettings("9600,n,8,1"); rn temp[0]=MSC.GetPortOpen();rn // 就在我跟踪调试到这里时发现 MSC.GetPortOpen();这个函数调用rn 没有返回,原理上应该返回串口打开状态? rn rn 不知为什么 定义的MSC这个对象的成员函数没有正确返回?rn rn 那位高人,帮我解答一下,谢谢!rnrnrn我在CommonDlg.cpp 中添加了如下代码:rnrn DWORD style=WS_VISIBLE;rn temp[1]=MSC.Create(NULL,style,rect,this,IDC_MSCOMM1);rn MSC.SetCommPort(m_PortNo); // 当程序单步执行到这里temp[1]是1,证明创建成功?是这样吧!rn MSC.SetSettings("9600,n,8,1");rn temp[0]=MSC.GetPortOpen();rn if(temp[0]) // 当程序单步执行到这一行时temp[0]为0,这是为什么啊? 不知错在那里?rn rn if(IDOK==MessageBox("The Com Prot alread Open! are you continue?","Open Error",MB_ICONSTOP | MB_YESNO))rn MSC.SetPortOpen(FALSE);rn rn MSC.SetInBufferSize(1024);rn MSC.SetOutBufferSize(512);rn MSC.SetInputLen(0);rn MSC.SetInputMode(1);rn MSC.SetRThreshold(1);rn if(!MSC.GetPortOpen())rn rn MSC.SetPortOpen(TRUE);rn m_bOpenF=TRUE;rn SetDlgItemText(IDC_OPENCOM,"关闭串口");rn rnrn 待高手解答啊..........?rn
mscomm控件问题
我用mscomm控件向串口发送一条命令rn串口返回的是CRC错误信息rn程序如下rnPrivate Sub Command1_Click() '[进行通讯]按钮处理程序rnrn Dim sendarr(30) As Byte '发送数据缓冲区rn rn Text1.Text = "" '清数据显示区rn rn If MSComm1.PortOpen Then '关闭串行口rn rn MSComm1.PortOpen = Falsern rn End Ifrn rn MSComm1.Settings = "19200,n,8,1"rn rn MSComm1.CommPort = 1 '设置串行口号rn rn MSComm1.InputMode = comInputModeBinaryrn rn MSComm1.RThreshold = 1 '设置至少要接收的字符数rn rn MSComm1.SThreshold = 1rn rn MSComm1.PortOpen = True '打开串行口rn rn sendarr(0) = &H2 '填发送收据rn rn sendarr(1) = &H4rn rn sendarr(2) = &HFFrn rn sendarr(3) = &H20rn rn sendarr(4) = &H0rn rn sendarr(5) = &H0rn rn sendarr(6) = &H3rn rn sendarr(7) = &H11rn rn rn MSComm1.Output = sendarr '发送给通讯控件rnrnEnd Subrnrn'在通讯控件的OnComm事件中加入如下代码:rnrnPrivate Sub MSComm1_OnComm()rnrn Dim Buffer As Variant '从通讯端口读取二进制数据,必须把它赋给一个字节数组rnrn Dim Arr() As Bytern rn Dim recievebuf() As Byternrn Static intcount As Integer '存储获得接收数据长度时已读入的字节数rnrn Static templen As Integer '存储接收数据长度rnrn Dim I As Integerrnrn Dim bufcount As Integerrnrn Static checksum As Long '存储计算的校验和rnrn Dim recievesum As Long '存储接收的校验和rnrn Select Case MSComm1.CommEvent '根据 CommEvent 属性值分支处理rn rn Case comEvSendrn rn Debug.Print MSComm1.OutBufferCountrnrn Case comEvReceive '接收到规定个数字符rnrn bufcount = MSComm1.InBufferCount '获得已接收字符数rnrn Buffer = MSComm1.Input '读接收的二进制数据rnrn Arr = Buffer '赋值于字节数组以便处理rnrn' intcount = bufcountrn For I = 0 To bufcount - 1rn rn' recievebuf(I) = Arr(I) '存储数据到接收数据缓冲区rnrn strtemp = strtemp + Str(Arr(I)) '转换成字符串以便显示rn rn Next Irn rn Text1.Text = strtemp '显示接收数据rn rn rn checksum = 0 '准备下次接收,设置初始数据rn rn recievesum = 0rn rn strtemp = ""rn rn MSComm1.RThreshold = 1rn rn intcount = 0rn rn MSComm1.PortOpen = False '关闭串行口rnrnrn End SelectrnrnEnd Subrn
关于MSCOMM控件的问题
各位大哥,我是刚开始学做串口的,下面这段代码为什么不能把 'abcdefghijklmnopqrstuvwxyz' 输出到MEMO1中去啊。rn是哪里漏了什么么?谢谢了。rnrnprocedure TForm1.FormCreate(Sender: TObject);rnbeginrn if MSComm1.PortOpen then MSComm1.PortOpen := false;//关闭端口rn MSComm1.CommPort := 1;//设置端口1rn MSComm1.InBufferSize := 512;//设置接收缓冲区为512个字节rn MSComm1.OutBufferSize := 512;//设置发送缓冲区为512个字节rn MSComm1.Settings := '9600,n,8,1';//9600波特率,无校验,8位数据位,1位停止位rn MSComm1.InputLen := 0;//读取缓冲区全部内容(26个字节)rn MSComm1.InBufferCount := 0;// 清除接收缓冲区rn MSComm1.OutBufferCount:=0;// 清除发送缓冲区rn MSComm1.RThreshold := 26;//设置接收26个字节产生OnComm 事件rn MSComm1.InputMode := comInputModeText;//文本方式rn// MSComm1.InputMode := comInputModeBinary;//二进制方式rn MSComm1.PortOpen := true;//打开端口rn mscomm1.RTSEnable:=true;rn mscomm1.DTREnable:=true;rnend;rnrnprocedure TForm1.Button1Click(Sender: TObject);rnbeginrn mscomm1.Output:='abcdefghijklmnopqrstuvwxyz';rnend;rnrnprocedure TForm1.MSComm1Comm(Sender: TObject);rnbeginrn case mscomm1.CommEvent ofrn 2:memo1.Text:=memo1.Text+mscomm1.Input;rn end;rnend;rn
关于 MSComm 控件的问题?
为什么我用MSComm做的串口接收程序收不到下位机发来的空格(0x20)???rnrn我发的是rn“Hello You rn 1000 ”rnrn结果收到的是:rn“HelloYourn1000”rnrn这是为什么啊 !!!!!!!!!!!rnrnrn
mscomm控件注册问题
我已经在我的机子上运行了regsvr32 mscomm32.ocx 命令,提示已经注册成功,但是在其他机子上rn还是不能用,提示rnComponent ‘mscomm32.ocx’ or one of its dependcise not correctly registered:a file is missing or invaildrnrn怎么做才对呢?
MSComm控件的问题!!!(急!)
我在程序里通过串口接收到数据,保存在rbuffer里,是CString型。数据例如(000FFF00011010023),怎样才能判断从出现FFF后,才开始将其后的数据保存下来。在VB里是用InStr这个函数,VC里怎么办???
VC6.0 的MSCOmm控件问题
我的一个程序在xp虚拟机中添加了一个MSCOmm控件,并对其编写了相应的串口通讯程序,这个程序是可以编译运行的,我就拿去另外一台xp电脑上运行以下,但是这个机子提示未能正常启动,于是我在这台电脑上新装了一个VC6.0绿色完整版,打开原来在虚拟机中的程序,结果提示ActiveX控件不能例示 然后就是ActiveX控件“MicroSoftCommunication Control Version6.0 不能示例,因为需要个设计时间许可,我在网上就一直找,试了几种网友提供的方法,但是还是没有任何改变。rnrn有没有VC6.0 的ActiveX控件可以安装的?(就像一个软件直接装上就能用的)rn这个控件跟电脑的系统有关系吗,(win732位,xp)rn有没有一款很好的VC6.0软件,带有很多控件的,不会遇到各种各样的问题的?rn能不能用VS2013编译在VC6.0 上编写的程序,VS2013 编写的程序可以在XP上运行吗?(个人感觉特别坑,现在都有VS2015了,但是现在还得用vc6.0,工业上都还是xp系统的)rnrn 还有一个问题就是我在win7 32位系统上编写的一个程序,在没有加MSCOMM控件以前一点问题都没有,就是在加上这个控件之后可以编译但是不能运行了,我在网上也找了一些方法,都不行,(最多的方法就是注册一下MScomm控件,然后把License给添加一个项,并赋予默认值。)这我都试过了不行rnrn 最近一段时间已经被这个问题给折磨的要死了,希望网友们来帮我解决问题,问题有点多啊,谢谢大家!
有关mscomm控件的问题
用mscomm控件从计算机串口接受数据,inputmode=comInputModeBinary,rn部分程序如下rn Dim p As Variantrn Dim a(4) As Bytern Select Case MSComm1.CommEventrn Case comEvReceivern p = MSComm1.Input rn a(1) = p(0),程序运行到这里总说p(0)下标越界,用单步执行却没有问题,rn 何解?
MSComm控件的缓冲区问题
我用MSComm控件做通信问题。现在我循环往输出缓冲区发命令,应该发一条命令就会有相应的处理事件从输入缓冲区中返回,但是由于我是用For循环发命令,第一条刚发完,即MSComm1.Output = putbyte,没等这个命令触发OnComm事件呢,就进入了循环的下一条命令,即next i 。以至于输入缓冲区里的返回事件都乱了套,我怎么样处理呢?
关于MSCOMM控件问题
问题:本人编写了一个很简单串口初始化程序,在另外一台电脑上运行是成功。但在本人电脑上运行出现下列错误提示:rnDebug Assertion Failed!rnProgram:c:\project\Debug\MCU.exernFile:f:\dd\vctools\vc7libs\ship\atlmfc\src\winocc.cpprnLine:381rnrnFor information on how your program can cause an assertion failure,see the Visual C++ documentation on assertsrn
MSCOMM控件接收数据的问题
由于以前有个项目使用了SPCOMM,而且那个兄弟修改了SPCOMM里面的代码。我新做一个就暂时用MSCOMM了。但是在使用中出现了这样一个问题:rnrn我给单片机发送的数据是正确的,它也给了我正确的返回值(我用串口调试助手可以看到发送和返回的数据),但是我在Delphi中接收的时候却总是差几个字节。rnrn我在接收的事件中的代码如下:rnprocedure TfrmAdvanceRecord.MSCommComm(Sender: TObject);rnvarrn i : integer;rn s : OLEVariant;rnbegin //rn if nCommClose then exit;rn if MSComm.CommEvent <> comEvReceive then exit;rnrn s := VarArrayCreate([0,1023],varByte);rn s := MSComm.Input;rnrn Memo1.Lines.Add('总长:=' +IntToStr(Length(s)));rn for i := 0 to Length(s) dorn beginrn Memo1.Lines.Add(IntToHex(s[i],2));rn end;rnend;rnrn我用Memo1显示收到的数据,比串口调试助手中的总是少几个字节的数据。rnrnMSComm.RTthreshold := 1rn请教大家!!!!!
相关热词 c# 标准差 计算 c#siki第五季 c#入门推荐书 c# 解码海康数据流 c# xml的遍历循环 c# 取 查看源码没有的 c#解决高并发 委托 c#日期转化为字符串 c# 显示问号 c# 字典对象池