I want to connect to PLC S7-1500 with snap7 v1.3. I have notes from someone who has previously used the existing PLC with Matlab.
For motor start bool 'DB50 DBX 0.5'
status = connection.WriteValues({PlcBoolean('DB50.DBX 0.5',true) });
For reading the speed of motor real int 'DB50.DBD 2'
motor_speed = connection.ReadReal('DB50.DBD 2',20);
To move motor at given value
changingValue = event.Value;
value3 = PlcBoolean('DB50.DBX 0.5',true); %motor movement command
app.connection.WriteValues({value3 });
After the motor start command is given to the PLC S7-1500, the Python code I gave below works, but I could not find how to give the start command.
import snap7
import struct
import threading
def update_speed_value():
while True:
changing_value = float(input("Value: "))
value_bytes = bytearray(struct.pack('>f', changing_value))
client.db_write(50, 2, value_bytes)
client = snap7.client.Client()
client.connect('192.168.0.1', 0, 1)
moving_value = True
client.db_write(50, 5, bytearray([1 if moving_value else 0]))
update_thread = threading.Thread(target=update_speed_value)
update_thread.daemon = True
update_thread.start()
try:
while True:
pass
except KeyboardInterrupt:
pass
client.disconnect()
Could you help me about this?
according to your python code, you are writing the boolean into DB50 and into the fifth byte inside that DB. You are writing the data
bytearray([1])
which is respresented asbytearray(b'\x01')
This means you write True value into the first bit inside the fifth byte of DB50. Are you sure this is the correct bit address?'DB50.DBD 2' means the speed float value starts after the second byte in DB50.
'DB50.DBX 0.5' means the first (zero index) byte and the fifth bit inside it.
Snap7 has a very useful util module for delaing with conversions. I would do it like this: