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)