python连接S7-1500并读取输出数据测试

    技术2022-07-12  81

     先搭建1500 PLCSIM 仿真器

    注意连接机制要允许来自远程对象的PUT/GET通信访问。

    Snap7是一个开源的,支持32位和64位跨平台的通讯包组件,可以实现与西门子系列PLC进行数据读写操作,目前支持的PLC包括1200/1500,S7200,LOGO等。

    def connect(self, address, rack, slot, tcpport=102)

     其中address是PLC的IP地址,如果使用NetToPLCsim连接PLCsim,则IP地址应该是计算机的IP地址,rack机架号和slot插槽和NetToPLCsim设置的一样,针对S7-1500此处应该是0和1,端口默认是102,不需要进行更改

    def read_area(self, area, dbnumber, start, size)

    area是PLC内各寄存区的代码,具体参考下表 

    import snap7 from snap7.snap7exceptions import Snap7Exception from time import sleep def connect(device, ip, rack, slot): while True: # check connection if device.get_connected(): # 如果 break try: # attempt connection device.connect(ip, rack, slot) except: pass sleep(5) def ReadOutput(dev): data = dev.read_area(0x82, 0, 0, 1) # IO输出区域地址。。。DB0开始的Q0.0的一个units长度 binary_list = [int(x) for x in bin(data[0])[2:]] # uint长度为4,取第三位,高位在前即---(Q0。0-Q0.7) print(binary_list) def main(): s71500 = snap7.client.Client() connect(s71500, '192.168.0.122', 0, 1) while True: try: ReadOutput(s71500) sleep(5) except Snap7Exception as e: connect(s71500, '192.168.0.122', 0, 1) if __name__ == '__main__': main()

    查看输出指示灯

    Processed: 0.019, SQL: 9