js串口通信 调用MSCOMM32控件 链接电子秤(完整版实现方案)

硬件环境RS232转USB串口线*1

     电子秤*1(本人采用G&G E600Y-C型号称重仪)

     电子秤原装RS232数据线*1

     计算机*1

软件环境RS232转USB串口线驱动(这个可以在串口线生产厂商官网网站下载,我用的是UNITEK生产的)

     windows7 (32位)

     MSCOMM32控件(这个在网上可以找到)

实现步骤1,安装MSCOMM32控件

       2,安装RS232转USB串口线驱动

       3,链接硬件(这里注意:需要电子秤先链接原装串口线,再用RS232转USB串口线链接原装串口线和电脑)

       4,开始编码

编码细节:

1,使用js初始化MSCOMM32控件

$(function(){
  initActiveX(); // 初始化控件方法
})
function initActiveX(){
  try {
    msComm1 = new ActiveXObject("MSCOMMLib.MSComm.1"); // 初始化MSCOMM控件
  }catch (err) {
     console.log(err); // 初始化失败,打印错误
  }
  if ((typeof (msComm1) == "undefined") || (msComm1 == null)) { // 未初始化成功
    alert("msComm1 is null");
    return false;
  }else{ // 初始化成功
    configPort(); // 配置端口信息
    searchAndOpenPort(); // 自动搜索端口并打开端口
    return false;
  }
}
2,配置串口信息
function configPort(){ // 配置端口方法
  msComm1.settings = '9600,n,8,1'; // 9600:波特率 n:奇偶位 8:数据位 1:校验位
  msComm1.OutBufferCount =0; //清空发送缓冲区
  msComm1.InBufferCount = 0; //滑空接收缓冲区
  msComm1.RThreshold=14; //这个参数很重要,这个参数配置要符合硬件设备 该参数表示接收硬件设备多少位数据的时候触发onComm事件
}
3,自动搜索计算机串口并打开串口(如果计算机连接两个硬件,参考思路即可)
自动索搜计算机串口的思路:一般电脑最多只有16个串口,依次遍历所有串口,并向串口发送消息(我所用的设备:要求称重仪发送一次数据,
发送十进制"27112"即可),如果接收到数据,那么说明该串口是我们需要寻找的串口。
var com = 0; // 端口变量
var res = ''; // 接收硬件
function searchAndOpenPort(){
  if(msComm1.PortOpen == true){
    toggglePort(); // 关闭或者打开端口
  }
  if(com > 16){ // 一般电脑只有16个端口
    com = 0;
    alert("未连接称重仪!")
    return;
  }
  if(res != ''){ // res为接收到称重仪的数据 后面会讲到如何接收
    msComm1.CommPort = com - 1; // 设置串口为搜索到的串口
    toggglePort();
    return;
  }
  msComm1.CommPort = com; // 设置串口
  var b = toggglePort(); // 打开串口 并返回打开结果
  if(b){
    send('27,112'); // 向串口发送信息
  }
  com += 1;
  setTimeout('searchAndOpenPort()', 500); // 间隔500ms等待接收数据 并实现循环,如果不间隔时间,受代码执行顺序影响,将接受不到数据
}
4,打开/关闭串口
说明:
msComm1.PortOpen = true; 表示打开串口 如果等于false表示关闭串口
var statu = msComm1.PortOpen 表示获取串口当前开关的状态; statu == true表示当前开启; statu == false表示当前关闭
function toggglePort(){
  if(msComm1.PortOpen == false){
    try {
      msComm1.PortOpen = true; // 开启串口
      bindEvent(); //开启串口后绑定串口收发事件
      return true;
    }catch(ex){
      console.log(ex);
      return false;
    }
  }else{
    try {
      msComm1.PortOpen = false; // 关闭串口
      return true;
    }catch(ex){
      alert(ex.message);
      return false;
    }
  }
}
5,接收/发送串口消息事件绑定
var bindEvent = function () {
  function msComm1::OnComm(){
    msComm1_event(); // 触发收发事件后的处理方法
  }
}
6, 串口收发事件
function msComm1_event(){
  //console.log(msComm1.CommEvent); // 这个是在触发收发事件后返回的标志 1:表示发送;
                       // 2:表示接受
                       // 其他的标识线变等信息(线变具体信息需要参照MSCOMM的API)
  if(msComm1.CommEvent == 1){
    alert("Send OK!");
  }else if(msComm1.CommEvent == 2){
    Receive(); // 接收串口信息方法
  }
}
7,接收串口信息方法
function Receive() {
  var inputvalue = msComm1.Input; // 接收串口信息
  // console.log("input:::" + inputvalue);
  if(inputvalue.indexOf("g")>0){ // 如果返回数据包含g
    res = $.trim(inputvalue.split("g")[0]); // 取得重量并赋值给res
  }
}
8,向串口发送消息
说明:串口不能接受十进制数据,而js中又没有char类型的数据,这里我们用String.fromCharCode()方法将十进制数据转为char类型
function send(str){
  var cmd_send = '';
  try{
    var results = str.split(',');
    for(var i=0;i<results.length;i++) {
      cmd_send += String.fromCharCode(results[i]); // 十进制转char
    }
    msComm1.Output=cmd_send; // 向串口发送消息
  }catch(ex){
    console.log(ex.message);
  }
}
9,点击获取称重仪数据的方法
function getWeight(){
  if(com == '0'){
    alert("未连接称重仪!")
  }else{
    send('27,112'); // 向串口发送一次请求
    setTimeout("auto_weight_once()", 200); // 200ms后接收数据,这里设置200ms后再获取很有必要,这个是执行顺序问题
  }
}
function auto_weight_once(){
  $("#weight").val(res); // 填充获取的数据到页面
}
10,称重仪持续输出数据的方法
function auto_weight(){
  // if(!continue_auto_weight){ // 这里是结束持续输出的标志,至于什么时候结束, 可根据项目而定
  // return;
  // }
  $("#weight").val(res);
  send('27,112');
  setTimeout("auto_weight()", 200);
}
小结:关于goole如何连接称重仪,有时间再写帖子。
最后:如果还不能解决问题,那么就可能是ie浏览器的安全设置问题,这个网上很多参考,这里就不赘述了。

转载于:https://www.cnblogs.com/x-j-p/p/7819724.html

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 在使用C++ Builder 2010中使用MSComm32控件时,需要按照以下步骤操作: 1. 在工具箱中找到MSComm32控件并将其拖放到窗体上。这将在代码中生成相应的组件对象。 2. 可以通过双击MSComm32控件以打开其属性页面,并进行一些基本设置,如波特率、数据位数、停止位、奇偶校验等。 3. 在代码中,可以对MSComm32控件进行进一步的操作。首先,需要引入MSComm32的头文件,通常是#include <MSComm.h>。 4. 接下来,可以使用MSComm32控件的相关方法和事件来实现串口通信。例如,可以通过调用Open()方法打开串口连接,在发送数据时使用Output()方法,接收数据时使用Input()方法。 5. 此外,还可以使用MSComm32控件的事件来处理接收到的数据。例如,可以使用OnComm事件来响应串口接收到数据时的操作。通过判断事件参数的属性值,可以判断数据是何种类型(比如接收到的是何种信号),从而进行相应的处理。 总之,在C++ Builder 2010中使用MSComm32控件,通过配置控件属性和使用相关的方法和事件,可以实现串口通信的功能。这对于需要与外部设备进行数据交互的应用程序来说非常重要。 ### 回答2: 在C Builder 2010中使用mscomm32控件可以实现串口通信功能。 首先,在C Builder的工程中引入mscomm32.ocx控件。在IComponent库中,将"Microsoft Comm Control 6.0 (SP6)"添加到工具栏中。 然后,在窗体设计器中,将mscomm32控件拖放到窗体上。在属性编辑器中,可以设置串口的通信属性,如波特率、数据位、校验位、停止位等。 在代码中,可以使用mscomm32控件提供的方法和事件来实现串口通信操作。例如,使用Open方法打开串口连接,使用Write方法发送数据,使用Read方法接收数据等。另外,可以通过设置OnComm事件来处理收到的数据。 下面是一个简单的例子,演示了如何使用mscomm32控件进行简单的串口通信: ```cpp #include <vcl.h> #pragma hdrstop #include "Unit1.h" //--------------------------------------------------------------------------- #pragma package(smart_init) #pragma resource "*.dfm" TForm1 *Form1; //--------------------------------------------------------------------------- __fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner) { } //--------------------------------------------------------------------------- void __fastcall TForm1::Button1Click(TObject *Sender) { // 打开串口连接 Mscomm1->PortOpen = true; } void __fastcall TForm1::Button2Click(TObject *Sender) { // 发送数据 Mscomm1->Output = "Hello, mscomm32!"; Mscomm1->OutputLen = Mscomm1->Output.length(); Mscomm1->Output = ""; } void __fastcall TForm1::Mscomm1Comm(TObject *Sender) { // 接收数据 String data = Mscomm1->Input; Memo1->Lines->Add(data); } void __fastcall TForm1::FormClose(TObject *Sender, TCloseAction &Action) { // 关闭串口连接 Mscomm1->PortOpen = false; } ``` 在这个例子中,Button1的OnClick事件处理程序中打开串口连接,Button2的OnClick事件处理程序中发送数据。在Mscomm1的OnComm事件处理程序中,接收到数据后将其添加到Memo1中显示。在窗体的OnClose事件中关闭串口连接。 以上是在C Builder 2010中使用mscomm32控件的基本操作。根据具体需求,可以进一步扩展串口通信功能。 ### 回答3: 在使用C Builder 2010中的MSComm32控件时,可以通过以下步骤来使用该控件: 首先,将MSComm32控件添加到C Builder 2010的工具箱中。在工具箱中右键单击空白区域,选择"Components",然后在弹出的对话框中找到并勾选"Microsoft Comm Control 6.0",点击"OK"按钮,将该控件添加到工具箱中。 接下来,在设计视图中将MSComm32控件添加到窗体上。在工具箱中找到MSComm32控件,并将其拖放到窗体上。 然后,可以通过设置MSComm32控件的属性来配置串口通信。在属性窗口中,可以设置串口号、波特率、数据位、校验位等参数,以满足具体的通信需求。 在代码中,可以使用MSComm32控件的方法和事件来实现串口通信的逻辑。比如,可以使用Open方法打开串口,使用Output方法发送数据,使用Input方法接收数据,使用事件如OnComm接收串口数据等。 在使用过程中,需要注意保证MSComm32控件的状态和串口设备的状态一致。比如,在打开串口之前,需要确保串口设备是打开的;在发送和接收数据时,需要注意处理可能出现的异常情况,比如超时、数据校验错误等。 总的来说,通过在C Builder 2010中使用MSComm32控件,我们可以方便地实现串口通信的功能,从而实现与外部设备的数据交互。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值