Skip to content

Commit 22ae6b4

Browse files
committed
Add method to change the PLC operating state
1 parent 37b44c1 commit 22ae6b4

File tree

1 file changed

+39
-0
lines changed

1 file changed

+39
-0
lines changed

src/S7CommPlusDriver/S7CommPlusConnection.cs

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -642,6 +642,45 @@ public int WriteValues(List<ItemAddress> addresslist, List<PValue> values, out L
642642
return m_LastError;
643643
}
644644

645+
public int SetPlcOperatingState(Int32 state)
646+
{
647+
int res;
648+
649+
SetVariableRequest setVariableRequest = new SetVariableRequest(ProtocolVersion.V2);
650+
setVariableRequest.SessionId = m_SessionId;
651+
setVariableRequest.SequenceNumber = GetNextSequenceNumber();
652+
setVariableRequest.IntegrityId = GetNextIntegrityId();
653+
654+
setVariableRequest.InObjectId = 52; // NativeObjects.theCPUexecUnit_Rid
655+
setVariableRequest.Address = 2167; // CPUexecUnit.operatingStateREQ
656+
setVariableRequest.Value = new ValueDInt(state);
657+
658+
res = SendS7plusFunctionObject(setVariableRequest);
659+
if (res != 0)
660+
{
661+
m_client.Disconnect();
662+
return res;
663+
}
664+
m_LastError = 0;
665+
WaitForNewS7plusReceived(m_ReadTimeout);
666+
if (m_LastError != 0)
667+
{
668+
m_client.Disconnect();
669+
return m_LastError;
670+
}
671+
672+
SetVariableResponse setVariableResponse;
673+
setVariableResponse = SetVariableResponse.DeserializeFromPdu(m_ReceivedStream);
674+
if (setVariableResponse == null)
675+
{
676+
Console.WriteLine("S7CommPlusConnection - Connect: SetVariableResponse fehlerhaft");
677+
m_client.Disconnect();
678+
return S7Consts.errIsoInvalidPDU;
679+
}
680+
m_LastIntegrityId = setVariableResponse.IntegrityId;
681+
return 0;
682+
}
683+
645684
public int Browse(out List<VarInfo> varInfoList)
646685
{
647686
//Console.WriteLine("S7CommPlusConnection - Browse: Start");

0 commit comments

Comments
 (0)