S.C.I.L.E.R.客户端库。
scclib的Python项目详细描述
用scclib开发
S.C.I.L.E.R.系统的客户端计算机库
这是一个库,用于创建与SCILER系统协同工作的设备
安装
- 使用
pip install scclib
安装pip
使用此库
- 使用
from scclib.device import Device
导入lib
创建一个扩展Device
- 为此:
- 实现
getStatus()
,它应该返回当前状态的字典 - 实现
performInstruction(action)
,它应该返回一个布尔值来判断指令是否可以执行,其中action有:instruction
:带有指令名称的字符串value
:具有特定于此指令的值的任何类型component_id
:带有指令所指组件名称的字符串(可以是未定义的)
- 实现
test()
它什么也不返回,这个方法应该做一些可见的事情,这样操作员就可以测试这个设备是否正常工作 - 实现
reset()
它不返回任何内容,此方法应使设备返回到其启动状态,以便可以再次启动逃生室 - 创建一个构造函数,该构造函数使用
super(config, logger)
调用Device
的构造函数,其中:- config是一个字典,它有以下键:
id
:这是设备的标识。写在camelCase中,例如“controlBoard”。在host
:代理主机的IP地址,格式为字符串。在port
代理主机的端口,格式为数字。在labels
:这些是这个设备也应该订阅的标签,labels是一个字符串数组
- logger是一个函数(日期、级别、消息),其中实现了自己的记录器,其中
date
是一个日期对象level
是以下字符串之一:“debug”、“info”、“warn”、“error”、“fatal”message
是一个包含更多信息的自定义字符串
- 它还应该为所有输入组件向GPIO添加事件侦听器。在
- config是一个字典,它有以下键:
- 实现
main()
,它应该使用可选的事件循环和结束函数调用start(loop, stop)
。在
- 实现
现在在实现Device
的类中
- 您可以拨打:
log(level, message)
使用Device
中提供的记录器进行日志记录,其中级别为以下字符串之一:“debug”、“info”、“warn”、“error”、“fatal”和包含详细信息的消息自定义字符串statusChanged()
它可以被调用来向Device
发出状态改变的信号,这将向SCILER发送一个新的状态
现在启动系统
- 在主程序中初始化设备并调用
device.main()
示例
importosfromscclib.deviceimportDeviceclassDisplay(Device):def__init__(self):two_up=os.path.abspath(os.path.join(__file__,".."))rel_path="display_config.json"abs_file_path=os.path.join(two_up,rel_path)abs_file_path=os.path.abspath(os.path.realpath(abs_file_path))config=open(file=abs_file_path)super().__init__(config)self.hint=""defget_status(self):return{"hint":self.hint}defperform_instruction(self,action):instruction=action.get("instruction")ifinstruction=="hint":self.show_hint(action)else:returnFalse,actionreturnTrue,Nonedeftest(self):self.hint="test"print(self.hint)self.status_changed()defshow_hint(self,data):self.hint=data.get("value")print(self.hint)self.status_changed()defreset(self):self.hint=""self.status_changed()defmain(self):self.start()if__name__=="__main__":device=Display()device.main()
其中display_config.json
是
具有循环和停止的main()
示例:
defloop(self):previous=self.get_sliders_analog_reading()whileTrue:positions=self.get_sliders_analog_reading()ifprevious!=positions:self.status_changed()previous=positionsdefmain(self):self.setup_events()self.start(loop=self.loop,stop=GPIO.cleanup)
许可证
这个库是用GNU GPLv3授权的,请参阅LICENSE.md
。在
- 项目
标签: