【问题标题】:HTBasic for receiving data from a RS232 deviceHTBasic 用于从 RS232 设备接收数据
【发布时间】:2019-02-27 10:31:08
【问题描述】:

我不是编码也不太了解,虽然必须在实验室进行实验,并且必须使用HTBasic从2个GPIB设备(IEE 488)和一个RS232(这是一个高精度实验室)接收数据规模)。

我正在更改/添加到其他人编写的旧脚本。它只是从 2 个 GPIB 设备接收数据。

我必须每 15-30 分钟获取一次数据(实验将运行一个月),即使我成功从实验室规模接收数据(设备接口选择代码 = 12),它们也只能“同步”到达一个循环每个例如10 毫秒(毫秒)。如果我每 1 秒完成一次,则数据是“旧的”,例如我从秤上删除了该项目,而不是显示零“0”它仍然显示重量。想象一下,如果我要求每 15 分钟循环一次会怎样。

似乎接收到的数据是按顺序一一到达并以该顺序显示的。可能有一个内部缓冲区或存储它们的东西。有谁知道如何按需打开和关闭与串行设备的通信?例如对于 GPIB 设备,每次循环发生时,我都会发送诸如 TALK(谈话)和 UNT(取消谈话)之类的命令,但我不知道如何使用串行设备执行此操作。 我尝试了 CONTROL 12,100;0 和 CONTROL 12,100;1 (XOFF/XON),但没有成功。

这是我尝试过的脚本之一,它为我提供了正确的权重值,但每 0.01 秒循环一次。

LOOP

ENTER 12 USING "10D";W
PRINT TABXY(70,20),"wEIGHT IS:";W

WAIT 0.01
END LOOP
END

【问题讨论】:

    标签: serial-port basic


    【解决方案1】:

    我建议尝试使用握手控制。
    您可以使用HTBASIC CONTROL 语句控制串行接口。
    例如,您可以转:

    CONTROL 9,5;0     ! use DTR and RTS
    CONTROL 9,12;0    ! read DSR, CD, and CTS
    

    你也应该像这样使用接口句柄:

    ASSIGN @Serial TO 9    ! Opens the Serial Port, and clears buffer
    ASSIGN @Serial TO *    ! Closes the Serial Port 
    

    【讨论】:

      【解决方案2】:

      这应该适用于 15 分钟 周期(900 秒):

      ON CYCLE 900 GOSUB Get_Serial
      LOOP
      END LOOP
      STOP
      Get_serial:! 
        ASSIGN @Serial TO 12
        ENTER @Serial USING "10D";W
      RETURN
      
      END
      

      【讨论】:

        【解决方案3】:

        大家好,感谢您的回答(不过他们来的有点晚)。

        很可能你的两个建议都可行(还没有尝试过……也许在不久的将来)

        那些天我为解决我的问题所做的基本上是这样的:连续循环并在屏幕的特定区域 (CRT) 上打印串行设备值(以克为单位的重量),特定时间的 ONDELAY(例如每 15 分钟)转到 NEW LOOP(在代码中称为 LOOOP),它告诉程序从屏幕(不是直接从设备)获取 RS232 labscale 的值,当然还有 2 个 GPIB 设备,然后重复连续循环以显示在 CRT 屏幕上真实/连续实验室规模值,以防止缓冲区已满......所以一切顺利...... 我知道这不是一个好的编码方式,但正如我所说,我是这个领域的新手......但它有效

        所以我写的代码是这样的:

        [....]    
        33 ASSIGN @Scale TO 12
        
        52 ENTER @Scale USING "10D";Weight
        
        54 PRINT TABXY(70,20),"Captured LabScaLE Weight=";Weight;" g"
        55 A=Weight
        
        90 ON DELAY T GOTO Loooop
        
        92 LOOP
        93 ENTER @Scale USING "10D";A
        94 A=A
        95 PRINT TABXY(65,35);A;TABXY(65,35);
        96 !
        97 END LOOP
        98 !
        99  Loooop: GOTO 100  !GRAPSE THN GRAMMH PU AKOLOYTHEI PX 171
        100  !
        101 !
        102 ENTER CRT;A
        
        116 !==============================================START LISTENING FROM RS232 labscale (DISPAY ON CRT CONTINUUS DATA)======
        117 !ENTER CRT;Weight
        118 Weight=A
        119 PRINT TABXY(70,20),"Captured LabScaLE Weight=";Weight;" g"
        120 !
        121 !==============================================START LISTENING FROM GDS CTRL=======
        122 SEND 9;UNL UNT MLA TALK 14 DATA CHR$(255)
        123 ENTER 9 USING "#,B,4D,6D";S,Pressurea,Volumea
        124 SEND 9;UNT DATA CHR$(255)
        
        128 !=============================================START LISTENING FROM GDS CTRL=======
        129 !
        130 SEND 8;UNL UNT MLA TALK 13 DATA CHR$(255)
        131 ENTER 8 USING "#,B,4D,6D";S,Pressureb,Volumeb
        132 SEND 8;UNT DATA CHR$(255)
        
        [.....]
        
        
        150 GOTO 92 !
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2012-10-28
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-08-09
          • 1970-01-01
          • 2011-02-28
          相关资源
          最近更新 更多