我用Python连接到PLC。该PLC以8位表示形式提供报警条件。例如:
0110 0010
每一位都说明不同的情况。
我想创建一个条件列表并将它们打印在一起,例如:门打开,闹钟关闭,灯灭,等等。
在上面的例子中,有三种不同的条件。我想一起展示它们,所有这些都可以是1
或0
。如何将故障/条件与位相关联?
答案 0 :(得分:3)
对于这些类型的任务,我喜欢设置一个字典,其中的位映射到漂亮的文本表示。因为Python支持二进制文字,所以它非常好地自我记录......
类似的东西:
status_lookup = { 0b00000001 : "Lights",
0b00000010 : "Fan",
0b00000100 : "Alarm",
0b00001000 : "Door"}
然后,如果您想要一个当前“开启”状态的列表:
bits = 0x0a # or whatever your input value was
currently_on = [status_lookup[i] for i in status_lookup if i & bits]
如果你想用字符串将它们连接在一起:
print("; ".join(currently_on))
作为替代方案,如果你使用Python 3.4+,你可以使用新的枚举模块做类似的事情:
from enum import IntEnum
class Status(IntEnum):
Lights = 0b00000001
Fan = 0b00000010
Alarm = 0b00000100
Door = 0b00001000
bits = 0x0a
currently_on = [x for x in Status if x & bits]
答案 1 :(得分:0)
有更优雅的方式,但这将让你前进:
s = ''
if value & 1:
s += "lights on"
else:
s += "lights off"
if value & 2:
s += ", fan on"
else:
s += ", fan off"
if value & 4:
s += ", alarm on"
else:
s += ", alarm off"
if value & 8:
s += ", door on" #? "door open"?
else:
s += ", door off"