From 4dfb25d364cd4463c69c751eb2c971dffc1200a0 Mon Sep 17 00:00:00 2001 From: Anand <30869958+anandmit93@users.noreply.github.com> Date: Thu, 1 Jun 2023 10:16:48 +0200 Subject: [PATCH] Remark_line test --- src/comet_rpc/__init__.py | 4 ++++ src/comet_rpc/comet.py | 39 +++++++++++++++++++++++++++++++++++++++ src/comet_rpc/messages.py | 6 ++++++ 3 files changed, 49 insertions(+) diff --git a/src/comet_rpc/__init__.py b/src/comet_rpc/__init__.py index 863e77d..015a721 100644 --- a/src/comet_rpc/__init__.py +++ b/src/comet_rpc/__init__.py @@ -41,6 +41,8 @@ posregvalrd, prog_abort, regvalrd, + remark_line, + RemarkLineOper, rprintf, scgetpos, txchgprg, @@ -135,6 +137,8 @@ "ProgramSubType", "ProgramType", "regvalrd", + "remark_line", + "RemarkLineOper", "rprintf", "scgetpos", "txchgprg", diff --git a/src/comet_rpc/comet.py b/src/comet_rpc/comet.py index 05743bb..c0a348e 100644 --- a/src/comet_rpc/comet.py +++ b/src/comet_rpc/comet.py @@ -74,6 +74,7 @@ PgAbortResponse, PosRegValRdResponse, RegValRdResponse, + RemarkLinResponse, RpcId, RpcResponse, RPrintfResponse, @@ -816,6 +817,44 @@ def paste_line( raise UnexpectedRpcStatusException(ret.status) return ret +class RemarkLineOper(IntEnum): + UNREMARK = 0 + REMARK = 1 + +def remark_line( + server: str, + prog_name: str, + select_start: int, + select_end: int, + oper: RemarkLineOper, +) -> RemarkLinResponse: + """(Un)Remark lines`[start, end]` in TP program `prog_name`. + + :param server: Hostname or IP address of COMET RPC server + :param prog_name: Name of the TP program to alter + :param select_start: Start of region for un/remark operation (1-based) + :param select_end: End of region for un/remark operation (1-based) + :param oper: The operation to perform: UNREMARK or REMARK + :returns: The parsed response document + :raise InvalidArgumentException: If `select_end < select_start` or if `oper` is + an invalid value + :raises UnexpectedRpcStatusException: on any other non-zero RPC status code + """ + response = _call( + server, + function=RpcId.REMARKLIN, + prog_name=prog_name.upper(), + start=select_start, + end=select_end, + remark=oper.value, + ) + ret = response.RPC[0] + if ret.status == ErrorDictionary.HRTL_022: + raise InvalidArgumentException() + if ret.status != 0: + raise UnexpectedRpcStatusException(ret.status) + return ret + def posregvalrd(server: str, index: int, grp_num: int = 1) -> PosRegValRdResponse: """Retrieve the contents of the position register at `index` for group `grp_num`. diff --git a/src/comet_rpc/messages.py b/src/comet_rpc/messages.py index 180f34d..980047f 100644 --- a/src/comet_rpc/messages.py +++ b/src/comet_rpc/messages.py @@ -66,6 +66,7 @@ class RpcId(str, Enum): POSREGVALRD = "248" RECPOS = "236" REGVALRD = "247" + REMARKLIN = "215" RPRINTF = "89" SCGETPOS = "14" TXCHGPRG = "43" @@ -301,6 +302,10 @@ class IoAsgLogResponse(BaseRpcResponse): def set_asg_stat(cls, v, values, **kwargs): return int(v, 16) if isinstance(v, str) else v +class RemarkLinResponse(BaseRpcResponse): + rpc: t.Literal[RpcId.REMARKLIN] + + class ProgramType(IntEnum): UNKNOWN = 0 @@ -350,6 +355,7 @@ class MmGetTypResponse(BaseRpcResponse): PgAbortResponse, PosRegValRdResponse, RegValRdResponse, + RemarkLinResponse, RPrintfResponse, ScGetPosResponse, TxChgPrgResponse,