基本语句
import snap7
import struct
plc = snap7.client.Client()
plc.connect('192.168.0.1', 0, 1)
if plc.get_connected():
print('success')
else:
print('fail')
通过返回值,得到是否连接成功。connect函数里的ip和你Plc的ip一致,0,1位一般为默认参数,是指代plc的网口插槽位置的。
下面介绍两个最最重要的函数:也就基本上只使用到这些:
read_area(area,dbnumber,start,size)
write(area,dbnumber,start,data)
第一个参数area位置可以填写下面三种,代表的类型分别是plc的输入输出和中间变量
| area | 0x81 | 0x82 | 0x83 | 0x84 |
|---|---|---|---|---|
| 类型 | 输入I | 输出 Q | 中间变量M | 数据块db |
一般我们是通过控制M变量来控制Q的,而不直接对Q进行写入操作。
第二个参数是dbnumber,输入、输出、中间区域默认为0,db块就是块的序号,如果数据块_1,其实就是1号,所以写1。
第三和第四个参数是决定了读写的位置。
plc.write_area(0x83,0,3,struct.pack('B',4))
这里表示对中间M区中的M3.2位置写入1.
plc.write_area(0x83,0,3,`struct.pack('B',3)`)
如果把4改成3,那么就变成对中间M区中的M3.1,M3.0位置写入1.
struct.pack('B',3)
这个的意思是吧十进制的数转成二进制。这样就能实现只用一个数就能控制多个位置。譬如我输入十进制的15,那么二进制就是1111,这样就可以将4个位置全部置为1.
关于读取数据的转换
直接读取的结果往往是不能够直接用的,就像下面那一堆符号
>>> plc.read_area(0x83,0,8,4)
bytearray(b'@\x07/@')
snap7提供了util函数,可以很方便的实现转换
snap7.util.get_bool(_bytearray, byte_index, bool_index)# Get the boolean value from location in bytearray
snap7.util.get_int(_bytearray, byte_index)#Get int value from bytearray. int are represented in two bytes
snap7.util.get_real(_bytearray, byte_index) # Get real value. create float from 4 bytes
举个例子
MD8的寄存器位置存储了一个Real类型的数
>>> plc.read_area(0x83,0,8,4)#直接读出来的结果
bytearray(b'@\x07/@')
>>> snap7.util.get_real(data,0)#转换后的结果
2.1122589111328125
这样就实现了对模拟量的读取了
最后通过
plc.disconnect()
断开链接
版权声明:本文为qq_37501211原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。