这个项目其实是半年多前,刚进公司接手的,因为是公司项目,只谈架构,只谈想法,和一些细节方面的东西。
项目目的
树莓派常见的操作,自动化操控,具体可以归类为以下几个目的
1.对违规操作,采取断路惩罚
2.做定点扫码,降低对扫码的要求,同时保证必然能扫上码
3.自动化过站
项目建立的基础
公司贴片机已经是自动化的了,只不过贴片机PLC系统只关心贴片机状态。在工程的协助下,发现贴片机对于轨道的控制是依据不同状况下的电信号做出断路操作来控制轨道停止还是运作,所以外部介入轨道控制最简单的方式就是在断路操作的线路中串上另一个开关,从而解决轨道控制问题。大致图解如下
然后再次确认此方法能够把开关信号转化为轨道停止和轨道运作,且此方法不会影响到贴片机对轨道停止正常的控制。
结果:测试成功,项目基础已建立
树莓派&RELAY
1.首先要开启树莓派的I2C内核
2.检查检测到的i2c设备地址
附:【i2c-tools官网】
aa@xxx:~ $ i2cdetect -l
i2c-1 i2c bcm2835 I2C adapter I2C adapter
检查总线设备
aa@xxx:~ $ i2cdetect -y 1
0 1 2 3 4 5 6 7 8 9 a b c d e f
00: -- -- -- -- -- -- -- -- -- -- -- -- --
10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
20: 20 -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
70: -- -- -- -- -- -- -- --
检查总线i2c-1上挂载的设备
现在我们知道了目标地址0x20
阅读产品说明
。。。。。。(好多好多的说明)。。。。。。。
重点:将寄存器0x06低四位的高低电平物化为relay的控制信号!
试验阶段
> i2cget -f -y 1 0x20 0x06
0xff
对应下二进制表
bin hex
1111 f
0111 7
1011 11
1101 13
1110 14
i2cset -f -y 1 0x20 0x06 0xf7
第一个relay开路,说明是可行的
下面依次测试。
转化python代码
#!/usr/bin/python3
import smbus
class Relay():
global bus
def __init__(self):
self.DEVICE_ADDRESS = 0x20 # 7 bit address (will be left shifted to add the read write bit)
self.DEVICE_REG_MODE1 = 0x06
self.DEVICE_REG_DATA = 0xff
bus.write_byte_data(self.DEVICE_ADDRESS, self.DEVICE_REG_MODE1, self.DEVICE_REG_DATA)
def ON_1(self):
#print('ON_1...')
self.DEVICE_REG_DATA &= ~(0x1 << 0)
bus.write_byte_data(self.DEVICE_ADDRESS, self.DEVICE_REG_MODE1, self.DEVICE_REG_DATA)
#......
测试,成功
以上硬件部分已完成,软件介入
整体步骤已经从把PLC控制转化为开关信号,再转化为方法了,该软件介入了。
1.设计状态的总控表。目的是为了让轨道停止和轨道恢复只受一个状态控制,很明显对于此项目来说,扫码是最好的控制后台。但是其他状态也会影响轨道状态,但是有了一个总控表我们可以十分方便的遍历总控表,从而得知此状态应该对轨道进行何种操作。所以采用了数据库作为总控表。
2.设计Relay状态的总控。目的是为了让Relay处于等待阶段,且每种状态来变更Relay状态时,方式相同且有序,很容易就想到队列,放到linux里面就是管道,再进一步fifo。所以采用管道文件来管理
os.mkfifo(pipe_path)
pipe_fd = os.open(pipe_path,os.O_RDONLY | os.O_NONBLOCK)#只读,非堵塞
with os.fdopen(pipe_fd) as pipe:
结语
以上,大方向全部定下来了,效果也很好,当然实践过程也遇到了很多问题需要处理,此处就不谈了。