Skip to content

Commit fe6e47a

Browse files
Update to new version : 4.9.0.0
1 parent a0bdc22 commit fe6e47a

21 files changed

+409
-196
lines changed

underautomation/fanuc/cgtp/__init__.py

Whitespace-only changes.
Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
import typing
2+
from underautomation.fanuc.cgtp.cgtp_client_base import CgtpClientBase
3+
from UnderAutomation.Fanuc.Cgtp import CgtpClient as cgtp_client
4+
5+
class CgtpClient(CgtpClientBase):
6+
'''Standalone CGTP Web Server client for direct use without FanucRobot. Provides access to the COMET RPC sub-protocol.'''
7+
def __init__(self, _internal = 0):
8+
'''Creates a new instance of the CGTP Web Server client.'''
9+
if(_internal == 0):
10+
self._instance = cgtp_client()
11+
else:
12+
self._instance = _internal
13+
14+
def connect(self, ip: str, port: int=3080, requestTimeoutMs: int=3000) -> None:
15+
'''Connect to the CGTP Web Server on the controller.
16+
17+
:param ip: Controller IP address or hostname.
18+
:param port: HTTP port number (default: 3080).
19+
:param requestTimeoutMs: Request timeout in milliseconds (default: 3000).
20+
'''
21+
self._instance.Connect(ip, port, requestTimeoutMs)
22+
23+
def __str__(self):
24+
return self._instance.ToString() if self._instance is not None else ""
25+
26+
def __repr__(self):
27+
return self.__str__()
28+
29+
def __eq__(self, other) -> bool:
30+
if not isinstance(other, CgtpClient):
31+
NotImplemented
32+
return self._instance.Equals(other._instance)
33+
34+
def __hash__(self) -> int:
35+
return self._instance.GetHashCode() if self._instance is not None else 0
Lines changed: 151 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,151 @@
1+
import typing
2+
from underautomation.fanuc.common.languages import Languages
3+
from underautomation.fanuc.cgtp.program_sub_type import ProgramSubType
4+
from UnderAutomation.Fanuc.Cgtp import CgtpClientBase as cgtp_client_base
5+
from UnderAutomation.Fanuc.Common import Languages as languages
6+
from UnderAutomation.Fanuc.Cgtp import ProgramSubType as program_sub_type
7+
8+
class CgtpClientBase:
9+
'''Base implementation for the CGTP Web Server client.'''
10+
def __init__(self, _internal = 0):
11+
if(_internal == 0):
12+
self._instance = cgtp_client_base()
13+
else:
14+
self._instance = _internal
15+
16+
def disconnect(self) -> None:
17+
'''Disconnect from the CGTP Web Server. After calling this method, the client must be reconnected before it can be used again.'''
18+
self._instance.Disconnect()
19+
20+
def abort_task(self, progName: str="None") -> None:
21+
'''Abort the task specified by progName. Set to null to abort all user tasks.'''
22+
self._instance.AbortTask(progName)
23+
24+
def select_program(self, progName: str, lineNum: int=1) -> None:
25+
'''Open the TP program progName and move cursor to lineNum.'''
26+
self._instance.SelectProgram(progName, lineNum)
27+
28+
def delete_program(self, progName: str) -> None:
29+
'''Delete the program progName from the controller.
30+
31+
:param progName: Program name
32+
'''
33+
self._instance.DeleteProgram(progName)
34+
35+
def get_program_comment(self, progName: str) -> str:
36+
'''Get the comment of program progName.'''
37+
return self._instance.GetProgramComment(progName)
38+
39+
def set_program_comment(self, progName: str, comment: str) -> None:
40+
'''Set the comment of program progName.'''
41+
self._instance.SetProgramComment(progName, comment)
42+
43+
def get_program_owner(self, progName: str) -> str:
44+
'''Get the owner of program progName.'''
45+
return self._instance.GetProgramOwner(progName)
46+
47+
def set_program_owner(self, progName: str, owner: str) -> None:
48+
'''Set the owner of program progName.'''
49+
self._instance.SetProgramOwner(progName, owner)
50+
51+
def get_program_stack_size(self, progName: str) -> int:
52+
'''Get the stack size of program progName.'''
53+
return self._instance.GetProgramStackSize(progName)
54+
55+
def set_program_stack_size(self, progName: str, stackSize: int) -> None:
56+
'''Set the stack size of program progName.'''
57+
self._instance.SetProgramStackSize(progName, stackSize)
58+
59+
def get_program_ignore_pause(self, progName: str) -> bool:
60+
'''Get whether program progName ignores pause requests.'''
61+
return self._instance.GetProgramIgnorePause(progName)
62+
63+
def set_program_ignore_pause(self, progName: str, ignorePause: bool) -> None:
64+
'''Set whether program progName ignores pause requests.'''
65+
self._instance.SetProgramIgnorePause(progName, ignorePause)
66+
67+
def get_program_write_protect(self, progName: str) -> bool:
68+
'''Get whether program progName is write-protected.'''
69+
return self._instance.GetProgramWriteProtect(progName)
70+
71+
def set_program_write_protect(self, progName: str, writeProtect: bool) -> None:
72+
'''Set whether program progName is write-protected.'''
73+
self._instance.SetProgramWriteProtect(progName, writeProtect)
74+
75+
def get_program_sub_type(self, progName: str) -> ProgramSubType:
76+
'''Get the sub-type of program progName.'''
77+
return ProgramSubType(int(self._instance.GetProgramSubType(progName)))
78+
79+
def set_program_sub_type(self, progName: str, subType: ProgramSubType) -> None:
80+
'''Set the sub-type of program progName.'''
81+
self._instance.SetProgramSubType(progName, program_sub_type(int(subType)))
82+
83+
def create_program(self, progName: str, owner: str="None", comment: str="None", defaultGroup: int=0, subType: ProgramSubType=ProgramSubType.None) -> None:
84+
'''Create a new TP program on the controller.
85+
86+
:param progName: New program name
87+
:param owner: Owner name (optional)
88+
:param comment: Comment (optional)
89+
:param defaultGroup: Default motion group (0 = omit)
90+
:param subType: Program sub-type (default: None)
91+
'''
92+
self._instance.CreateProgram(progName, owner, comment, defaultGroup, program_sub_type(int(subType)))
93+
94+
def rename_program(self, sourceName: str, newName: str) -> None:
95+
'''Rename program sourceName to newName.'''
96+
self._instance.RenameProgram(sourceName, newName)
97+
98+
def run_program(self, progName: str, lineNum: int=1) -> None:
99+
'''Run the specified program starting at lineNum.'''
100+
self._instance.RunProgram(progName, lineNum)
101+
102+
def change_active_program(self, progName: str) -> None:
103+
'''Change the active TP program to progName.'''
104+
self._instance.ChangeActiveProgram(progName)
105+
106+
def pause_all_programs(self) -> None:
107+
'''Pause program execution on the controller.'''
108+
self._instance.PauseAllPrograms()
109+
110+
def read_variable_as_string(self, varName: str, progName: str="None") -> str:
111+
'''Read the value of variable varName in program progName.'''
112+
return self._instance.ReadVariableAsString(varName, progName)
113+
114+
def write_variable(self, varName: str, value: str, progName: str="None") -> None:
115+
'''Write value to variable varName in program progName.'''
116+
self._instance.WriteVariable(varName, value, progName)
117+
118+
def list_files(self, pathName: str="MD:") -> typing.List[str]:
119+
'''List files at the specified path on the controller.'''
120+
return self._instance.ListFiles(pathName)
121+
122+
def get_file_as_string(self, pathName: str) -> str:
123+
return self._instance.GetFileAsString(pathName)
124+
125+
@property
126+
def language(self) -> Languages:
127+
'''Controller language (default is English)'''
128+
return Languages(int(self._instance.Language))
129+
130+
@language.setter
131+
def language(self, value: Languages):
132+
self._instance.Language = languages(int(value))
133+
134+
@property
135+
def enabled(self) -> bool:
136+
'''Indicates whether the client is currently connected to the CGTP Web Server.'''
137+
return self._instance.Enabled
138+
139+
def __str__(self):
140+
return self._instance.ToString() if self._instance is not None else ""
141+
142+
def __repr__(self):
143+
return self.__str__()
144+
145+
def __eq__(self, other) -> bool:
146+
if not isinstance(other, CgtpClientBase):
147+
NotImplemented
148+
return self._instance.Equals(other._instance)
149+
150+
def __hash__(self) -> int:
151+
return self._instance.GetHashCode() if self._instance is not None else 0
Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
import typing
2+
from UnderAutomation.Fanuc.Cgtp import CgtpException as cgtp_exception
3+
4+
class CgtpException:
5+
'''Represents an error returned by the FANUC COMET RPC interface.'''
6+
def __init__(self, message: str, inner: typing.Any, _internal = 0):
7+
'''Constructs a new CgtpException with a message and inner exception.'''
8+
if(_internal == 0):
9+
self._instance = cgtp_exception(message, inner)
10+
else:
11+
self._instance = _internal
12+
13+
@property
14+
def status(self) -> int:
15+
'''The RPC status code returned by the controller when available.'''
16+
return self._instance.Status
17+
18+
def __str__(self):
19+
return self._instance.ToString() if self._instance is not None else ""
20+
21+
def __repr__(self):
22+
return self.__str__()
23+
24+
def __eq__(self, other) -> bool:
25+
if not isinstance(other, CgtpException):
26+
NotImplemented
27+
return self._instance.Equals(other._instance)
28+
29+
def __hash__(self) -> int:
30+
return self._instance.GetHashCode() if self._instance is not None else 0

underautomation/fanuc/cgtp/internal/__init__.py

Whitespace-only changes.
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
import typing
2+
from underautomation.fanuc.cgtp.cgtp_client_base import CgtpClientBase
3+
from UnderAutomation.Fanuc.Cgtp.Internal import CgtpClientInternal as cgtp_client_internal
4+
5+
class CgtpClientInternal(CgtpClientBase):
6+
'''Internal CGTP Web Server client used by the library infrastructure.'''
7+
def __init__(self, _internal = 0):
8+
if(_internal == 0):
9+
self._instance = cgtp_client_internal()
10+
else:
11+
self._instance = _internal
12+
13+
def __str__(self):
14+
return self._instance.ToString() if self._instance is not None else ""
15+
16+
def __repr__(self):
17+
return self.__str__()
18+
19+
def __eq__(self, other) -> bool:
20+
if not isinstance(other, CgtpClientInternal):
21+
NotImplemented
22+
return self._instance.Equals(other._instance)
23+
24+
def __hash__(self) -> int:
25+
return self._instance.GetHashCode() if self._instance is not None else 0
Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
import typing
2+
from UnderAutomation.Fanuc.Cgtp.Internal import CgtpConnectParametersBase as cgtp_connect_parameters_base
3+
4+
class CgtpConnectParametersBase:
5+
'''Base class for CGTP Web Server connection parameters.'''
6+
def __init__(self, _internal = 0):
7+
if(_internal == 0):
8+
self._instance = cgtp_connect_parameters_base()
9+
else:
10+
self._instance = _internal
11+
12+
@property
13+
def port(self) -> int:
14+
'''HTTP port number of the CGTP Web Server.'''
15+
return self._instance.Port
16+
17+
@port.setter
18+
def port(self, value: int):
19+
self._instance.Port = value
20+
21+
@property
22+
def request_timeout_ms(self) -> int:
23+
'''HTTP request timeout in milliseconds.'''
24+
return self._instance.RequestTimeoutMs
25+
26+
@request_timeout_ms.setter
27+
def request_timeout_ms(self, value: int):
28+
self._instance.RequestTimeoutMs = value
29+
30+
def __str__(self):
31+
return self._instance.ToString() if self._instance is not None else ""
32+
33+
def __repr__(self):
34+
return self.__str__()
35+
36+
def __eq__(self, other) -> bool:
37+
if not isinstance(other, CgtpConnectParametersBase):
38+
NotImplemented
39+
return self._instance.Equals(other._instance)
40+
41+
def __hash__(self) -> int:
42+
return self._instance.GetHashCode() if self._instance is not None else 0
43+
44+
# Default HTTP port for CGTP Web Server.
45+
CgtpConnectParametersBase.DEFAULT_PORT = cgtp_connect_parameters_base.DEFAULT_PORT
46+
47+
# Default request timeout in milliseconds.
48+
CgtpConnectParametersBase.DEFAULT_REQUEST_TIMEOUT_MS = cgtp_connect_parameters_base.DEFAULT_REQUEST_TIMEOUT_MS
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
from enum import IntEnum
2+
3+
class IoPortType(IntEnum):
4+
'''Type of I/O port on the controller.'''
5+
DI = 1
6+
DO = 2
7+
AI = 3
8+
AO = 4
9+
RI = 8
10+
RO = 9
11+
GI = 18
12+
GO = 19
13+
Flag = 35
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
from enum import IntEnum
2+
3+
class ProgramSubType(IntEnum):
4+
'''Sub-type of a TP program on the controller.'''
5+
Job = 1 # Job program.
6+
Process = 2 # Process program.
7+
Macro = 3 # Macro program.
8+
Condition = 4 # Condition handler program.
Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
import typing
2+
from underautomation.fanuc.cgtp.internal.cgtp_connect_parameters_base import CgtpConnectParametersBase
3+
from UnderAutomation.Fanuc.Common import CgtpConnectParameters as cgtp_connect_parameters
4+
5+
class CgtpConnectParameters(CgtpConnectParametersBase):
6+
'''CGTP Web Server connection parameters'''
7+
def __init__(self, _internal = 0):
8+
if(_internal == 0):
9+
self._instance = cgtp_connect_parameters()
10+
else:
11+
self._instance = _internal
12+
13+
@property
14+
def enable(self) -> bool:
15+
'''Should enable CGTP Web Server for this connection (default: true)'''
16+
return self._instance.Enable
17+
18+
@enable.setter
19+
def enable(self, value: bool):
20+
self._instance.Enable = value
21+
22+
def __str__(self):
23+
return self._instance.ToString() if self._instance is not None else ""
24+
25+
def __repr__(self):
26+
return self.__str__()
27+
28+
def __eq__(self, other) -> bool:
29+
if not isinstance(other, CgtpConnectParameters):
30+
NotImplemented
31+
return self._instance.Equals(other._instance)
32+
33+
def __hash__(self) -> int:
34+
return self._instance.GetHashCode() if self._instance is not None else 0

0 commit comments

Comments
 (0)