使用 PI 设备和处理 GCS 数据的库集合。
项目描述
PIPython
PIPython 是 Python 模块的集合,用于访问 PI 设备和处理 GCS 数据。它可以在 Windows、Linux 和 OS X 上与 Python 3.6+ 一起使用,并且在任何其他平台上也可以在没有 GCS DLL 的情况下使用。
安装
使用 PIPython 即表示您同意许可协议,请参阅提供的文件:
eula.md
从本地文件夹
解压缩文件 PIPython.zip,打开命令条目(Linux 控制台或 Windows CMD 窗口)并运行:
python setup.py install
如需进一步阅读,请在浏览器中 打开index.html文件并查看示例文件夹中的示例。
来自 GitHub
git clone git@github.com:PI-PhysikInstrumente/PIPython.git
python setup.py install
来自 pypi.org
pip install PIPython
反馈
我们感谢您的反馈:
service@pi.de
快速开始
GCSDevice与封装 GCS DLL 函数并提供连接到设备的方法的 PI 设备通信。GCSDevice使用控制器名称作为参数调用。
from pipython import GCSDevice
pidevice = GCSDevice('C-884')
pidevice.InterfaceSetupDlg()
print pidevice.qIDN()
pidevice.CloseConnection()
GCSDevicewith是一个上下文管理器,如果在语句中引发异常,它会关闭连接。
from pipython import GCSDevice
with GCSDevice('C-884') as pidevice:
pidevice.InterfaceSetupDlg()
print(pidevice.qIDN())
samples另请参阅子目录中提供的示例。开始quickstart.py。
要求
使用 pip install 下载这些 python 包:
- PyUSB
- PySocket
- PySerial
使用 pipython.interfaces.piusb,您可以在不使用 GCS DLL 的情况下连接 USB 设备。这仅适用于 Linux,并且需要通常由操作系统提供的 LibUSB。
论据
从现在开始pidevice是指一个连接的GCSDevice实例。
设置器函数
通常你可以调用一个setter函数
- 轴/通道和值的字典
- 轴/通道列表和值列表
- 轴/通道的单个项目和单个值
gcs.MOV({'X': 1.23, 'Y': 2.34})
gcs.MOV(['X', 'Y'], [1.23, 2.34])
gcs.MOV('X', 1.23)
对于通道和数字轴名称,您可以省略引号。
gcs.MOV({1: 1.23, 2: 2.34})
gcs.MOV([1, 2], [1.23, 2.34])
gcs.MOV(1, 1.23)
吸气剂函数
地面站 2.0
通常可以使用 getter 命令调用
- 轴/通道列表。
- 轴/通道的单个项目,如果是数字则不带引号
- 没有任何参数将返回所有可用轴/通道的答案
gcs.qPOS(['X', 'Y'])
gcs.qPOS('X')
gcs.qPOS(1)
gcs.qPOS()
地面站 3.0
通常可以使用 getter 命令调用
- 单轴
- 没有任何参数将返回所有可用轴的答案
gcs.qPOS('AXIS_1')
gcs.qPOS()
返回值
轴或通道相关的答案作为(有序)字典返回。
pidevice.qPOS()
>>>{'X': 1.23, 'Y': 2.34}
如果您不提供参数,则始终必须使用字符串作为键。
pos = pidevice.qPOS()
print(pos['1'])
以下示例将全部axes移至targets并等待动作完成。它显示了如何仅使用返回字典中的值。
from time import sleep
...
pidevice.MOV(axes, targets)
while not all(list(pidevice.qONT(axes).values())):
sleep(0.1)
地面站 2.0
如果您提供参数,它们的类型将被保留,您可以将它们用作键。
pos = pidevice.qPOS([1, 2, 3])
print(pos[1])
地面站 3.0
如果您提供参数,它们的类型将被保留,您可以将它们用作键。
pos = pidevice.qPOS('AXIS_1') # only one axis is possible
print(pos['AXIS_1'])
一些提示...
帮手
为了pipython.pitools您的方便,您会在其中找到一些辅助功能。请参阅提供的示例以了解如何使用它们。上面的示例可以写成:
from pipython import pitools
...
pidevice.MOV(axes, targets)
pitools.waitontarget(pidevice, axes)
启用调试日志记录
要在控制台上记录调试消息,只需在调用之前输入这些行GCSDevice。
from pipython import PILogger, DEBUG, INFO, WARNING, ERROR, CRITICAL
PILogger.setLevel(DEBUG)
GCSError 和错误检查
默认情况下,“ERR?” 命令在每个命令之后发送以查询设备上是否发生错误,然后将其作为GCSError异常引发。如果通信速度是一个问题,您可以禁用错误检查。
pidevice.errcheck = False
要处理捕获的GCSError异常,您可以使用由提供的定义
gcserror而不是纯数值。GCSError请记住哪个是异常类和gcserror哪个是相应的模块之间的区别。
from pipython import GCSDevice, GCSError, gcserror
with GCSDevice('C-884') as pidevice:
try:
pidevice.MOV('X', 1.23)
except GCSError as exc:
if exc == gcserror.E_1024_PI_MOTION_ERROR:
print('There was a motion error, please check the mechanics.')
else:
raise
异常类GCSError会将错误代码转换为可读消息。
from pipython import GCSError, gcserror
raise GCSError(gcserror.E_1024_PI_MOTION_ERROR)
>>>GCSError: Motion error: position error too large, servo is switched off automatically (-1024)
地面站 3.0
- 重置 1 个或多个轴的错误状态
for axis in device.axes:
if axis_has_error(device):
while check_axis_status_bit(device, axis, AXIS_STATUS_FAULT_REACTION_ACTIVE):
pass
print('reset axis error: ', axis)
device.RES(axis)
大数据
qDRR()对于 GCS 2.0 语法或qREC_DAT()读取大量 GCS 数据的 GCS 3.0 语法等命令会立即返回包含有关数据信息的标题字典。然后他们将启动一个后台任务,将设备中的数据读取到内部缓冲区中。该
bufstate属性以 0 到 1 范围内的浮点数形式返回读取进度,并True在读取完成时返回。因此,当在循环中使用它时,检查
is not True. (请记住,这与.)不同!= True。)
地面站 2.0
header = pidevice.qDRR(1, 1, 8192)
while pidevice.bufstate is not True:
print('read data {:.1f}%...'.format(pidevice.bufstate * 100))
sleep(0.1)
data = pidevice.bufdata
地面站 3.0
header = pidevice.qREC_DAT('REC_1', 'ASCII', 1, 1, 8192)
while pidevice.bufstate is not True:
print('read data {:.1f}%...'.format(pidevice.bufstate * 100))
sleep(0.1)
data = pidevice.bufdata
文字界面
除了 GCSCommands 中实现的功能之外,您还可以将 GCS 命令作为字符串发送到控制器。用于read()返回答案read_gcsdata()的命令、返回 GCS 数据的命令和send()无应答命令。
print(pidevice.read('POS?'))
print(pidevice.read_gcsdata('DRR? 1 100 1'))
pidevice.send('MOV X 1.23')
它们从控制器返回原始字符串或 GCS 数据。如果errorcheck启用,则会自动从设备查询错误状态。我们建议使用提供的函数而不是发送原始字符串。
与 C++ GCS DLL 一致,这些功能ReadGCSCommand()也GcsCommandset()可用。他们永远不会从设备中查询错误。
print(pidevice.ReadGCSCommand('POS?'))
pidevice.GcsCommandset('MOV X 1.23')
项目详情
下载文件
下载适用于您平台的文件。如果您不确定要选择哪个,请了解有关安装包的更多信息。