import snap7
import snap7.common
import snap7.error
import snap7.util
from ctypes import byref


client = snap7.client.Client()
client.set_param(snap7.type.Parameter.PDURequest,960)
client.connect('192.168.1.100', 0, 0)


def write_area_bit(client:snap7.client.Client,area:snap7.type.Area,db_number:int,start:int,bit_index:int,value:bool):
    _start_address=start*8+bit_index
    _type=snap7.type.WordLen.Byte.ctype
    data=bytearray([0])
    if value:
        data=bytearray([1])
    cdata=(_type*1).from_buffer_copy(data)
    #MK M
    #MB DB
    #PE I
    #PA Q
    #res=client.as_write_area(area,db_number,_start_address,1,snap7.type.WordLen.Bit,cdata)
    res=client._lib.Cli_WriteArea(client._s7_client,area,db_number,_start_address,1,snap7.type.WordLen.Bit,byref(cdata))    
    snap7.error.check_error(res,context="client")
    return res

def write_db_bit(db_number:int,start:int,bit_index:int,value:bool):
    return write_area_bit(client,snap7.type.Area.DB,db_number,start,bit_index,value)

def write_m_bit(start:int,bit_index:int,value:bool):
    return write_area_bit(client,snap7.type.Area.MK,0,start,bit_index,value)

def write_i_bit(start:int,bit_index:int,value:bool):
    return write_area_bit(client,snap7.type.Area.PE,0,start,bit_index,value)

def write_q_bit(start:int,bit_index:int,value:bool):
    return write_area_bit(client,snap7.type.Area.PA,0,start,bit_index,value)

标签: none

添加新评论