虽然我必须在实验室中进行实验,并且必须使用HTBasic从2个GPIB设备(IEE 488)和1个RS232(这是一个高精度实验室)接收数据,但我对此并没有太了解。规模)。
我正在更改/添加其他人编写的旧脚本。只是从2个GPIB设备接收数据。
我必须仅每15-30分钟获取一次数据(该实验将运行一个月),即使我已成功从实验室规模接收数据(设备接口选择代码= 12),它们也只能“同步”到达一个循环每一个10ms(毫秒)。如果我每隔1秒钟做一次,则数据是“旧的”,例如我从秤上删除了该项目,但没有显示零“ 0”,而是显示了重量。想象一下,如果我每15分钟请求一次循环。
似乎接收到的数据按一个顺序到达并按该顺序显示。可能有一个内部缓冲区或存储它们的东西。是否有人知道如何在DEMAND上打开和关闭与串行设备的通信?例如对于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
答案 0 :(得分:0)
我建议尝试使用握手控制。
您可以使用HTBASIC CONTROL
语句控制串行接口。
例如,您可以打开:
CONTROL 9,5;0 ! use DTR and RTS
CONTROL 9,12;0 ! read DSR, CD, and CTS
您还应该这样使用Interface句柄:
ASSIGN @Serial TO 9 ! Opens the Serial Port, and clears buffer
ASSIGN @Serial TO * ! Closes the Serial Port
答案 1 :(得分:0)
这应该在 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
答案 2 :(得分:0)
大家好,感谢您的回答(虽然来得有点晚)。
您的两个建议都可能有效(需要在不久的将来尝试它们)
那几天我为解决问题所做的工作基本上是:连续循环并在屏幕的特定区域(CRT)上打印串行设备值(以克为单位的重量),特定时间的ONDELAY(例如每15分钟)转到NEW LOOP(在代码中称为LOOOP),告诉程序从屏幕(不是直接从设备)中获取RS232 Labscale的值,当然还有2个GPIB设备,然后重复连续的LOOP以在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 !