BrainTree Scientific,Inc。注射泵(型号bs-8000)rs232的串行命令

时间:2015-10-13 21:16:42

标签: python serial-port psychopy

UPDATE:确保我的命令,序列配置和终结符(' \ r')正确后,我在5台计算机中的一台上运行了这项工作。这让我相信这是一个适配器问题。我打算打电话给公司,看看订购USB / RJ11适配器(我在Mac上使用的是Keyspan USB-> DB9-> RJ11适配器)

我已阅读this,但我仍然无法与此泵通信。这是我修改过的python脚本(source),

import time
import serial

# configure the serial connections (the parameters differs on the device you are connecting to)
ser = serial.Serial(
  port='/dev/tty.USA19H142P1.1', # /dev/tty.KeySerial1 ?
  baudrate=19200,
  parity=serial.PARITY_NONE,
  stopbits=serial.STOPBITS_ONE,
  bytesize=serial.EIGHTBITS
)


if not ser.isOpen():
  ser.open()

print ser
commands = ['dia26.59', 'phn01', 'funrat', 'rat15mm', 'vol0.7', 'dirinf',
            'phn02', 'funrat', 'rat7.5mm', 'vol.5', 'dirinf', 'phn03',
            'funrat', 'rat15mm', 'vol0.7', 'dirwdr', 'phn04', 'funstp',
            'dia26.59', 'phn01', 'funrat', 'rat15mm', 'vol1.0', 'dirinf',
            'phn02', 'funrat', 'rat7.5mm', 'vol.5', 'dirinf', 'phn03',
            'funrat', 'rat15mm', 'vol1.0', 'dirwdr', 'phn04', 'funstp']

for cmd in commands:
  print cmd
  ser.write(cmd + '\r')
  time.sleep(1)
  out = ''
  while ser.inWaiting() > 0:
    out += ser.read(1)
  if out != '':
    print '>>' + out

tty ports:

$ ls -lt /dev/tty* | head
crw--w----  1 nathann  tty     16,   0 Oct 13 14:13 /dev/ttys000
crw-rw-rw-  1 root     wheel   31,   6 Oct 13 14:12 /dev/tty.KeySerial1
crw-rw-rw-  1 root     wheel   31,   8 Oct 13 13:52 /dev/tty.USA19H142P1.1
crw-rw-rw-  1 root     wheel    2,   0 Oct 13 10:00 /dev/tty
crw-rw-rw-  1 root     wheel   31,   4 Oct 12 11:34 /dev/tty.Bluetooth-Incoming-Port
crw-rw-rw-  1 root     wheel    4,   0 Oct 12 11:34 /dev/ttyp0
crw-rw-rw-  1 root     wheel    4,   1 Oct 12 11:34 /dev/ttyp1
crw-rw-rw-  1 root     wheel    4,   2 Oct 12 11:34 /dev/ttyp2
crw-rw-rw-  1 root     wheel    4,   3 Oct 12 11:34 /dev/ttyp3
crw-rw-rw-  1 root     wheel    4,   4 Oct 12 11:34 /dev/ttyp4

我甚至不确定它是否正在发送命令。没有任何错误或反馈。泵上没有任何事情发生,也没有返回任何内容(out字符串始终为空)

这是我的输出:

(sweetcrave)nathann@glitch sweetcrave (master) $ python pumptest.py
Serial<id=0x1093af290, open=True>(port='/dev/tty.USA19H142P1.1', baudrate=19200, bytesize=7, parity='O', stopbits=2, timeout=None, xonxoff=False, rtscts=False, dsrdtr=False)
dia26.59
>>
phn01
funrat
rat15mm
vol0.7
^CTraceback (most recent call last):
  File "pumptest.py", line 28, in <module>
    time.sleep(1)
KeyboardInterrupt

我的最终目标:

  • 设置泵参数
  • 指定了三个阶段:
  • 阶段1:将液体推到管末端
  • 阶段2:以特定的速率和体积分配液体
  • 第3阶段:拉回液体
  • 将液体拉回(第3阶段),使其不会从歧管中滴落,因此受试者无法吸出液体。因此,需要阶段1推动
  • 液体回到流出点。
  • 可以改变体积和分配率。使用以下公式:
  • rate = volume / sec * 60
  • 例如:.5 / 4×60(在4秒的时间内输送0.5毫升)= 7.5

1 个答案:

答案 0 :(得分:3)

泵非常容易交谈 - 但如果遇到很多麻烦 - 那么一定有问题等待修复。

在您担心从编程代码向泵发送命令之前,最好测试泵是否已准备好与计算机连接。

根据这些泵的多年经验,我可以告诉您,当您遇到与泵通信的难度时,断线是最常见的问题,2号将它们插入泵背面的正确孔中。

我建议从第三方抓取一个已知的工作应用程序 - 比如我的http://www.SyringePumpPro.com,安装它并使用它确认您的泵将与已知功能的软件进行通信。如果泵和电缆一切顺利,SyringePumpPro将在几秒钟内检测并显示您的泵的活动。它不会花费你任何东西,它会让你知道泵,串行适配器和电缆都正常工作。

你的节目......

我将不考虑您的tty端口是否正在打开等问题,但是如果你发送任何他们将回答的泵 - 通常是像

这样的序列

00S?对于一个未知的命令。

查看你的python代码 - 我担心你重复两次命令。泵只需要上传一次这些命令,并通过电源循环记住它们。

假设你的命令进入泵,它们都不会导致泵泵送 - 他们正在装载泵的内存,但实际上并没有这样做。您需要使用命令RUN让泵运行您上传的内容。

泵命令可以全部上传到一个上传然后运行。然后它就是在你的python代码中同步泵浦和刺激。

上面的泵送序列可以在PPL或泵程序语言文件中完成并上传一次。

泵手册背面有PPL文件示例,您可能感兴趣的示例是示例2。

它被称为反复摒弃回来。

碰巧我在youtube上做了一个关于这个的looooong培训视频。它可能真的有助于解释泵的工作原理,泵的编程语言如何工作以及如何上传泵程序。

祝你好运