4.5 IO 신호
개요
Signals 클래스는 다음을 포함하여 컨트롤러 I/O,에 대한 통합 read/write 인터페이스를 제공합니다.
- Digital/analog 입력 및 출력 작업
- 일괄 I/O 작업
Signals 를 사용하면 다음을 수행할 수 있습니다.
- 현재 신호 상태 읽기
- 일괄 쓰기 DO/RO/GO 포트
- 그리퍼, 센서 및 생산 라인 장치 통합
4.5.1 지정된 유형 및 포트 IO의 값 읽기
| 메서드 이름 | Signals.Read(SignalType type , int index ) |
|---|---|
| 설명 | 지정된 유형과 포트의 IO 값을 읽습니다. (DI/DO/UI/UO/RI/RO/GI/GO/TAI/TDI/TDO/AI/AO 지원) |
| 요청 매개변수 | type : 읽을 SignalType IO 유형 index : int IO 포트 인덱스, 1부터 시작 |
| 반환 값 | int: IO 값, 1은 상위 레벨, 0은 하위 레벨 StatusCode: 연산 실행 결과 |
| 호환 로봇 소프트웨어 버전 | 협업(Copper): v7.5.0.0+ 산업용(Bronze): v7.5.0.0+ |
| 메모 | UI/UO는 읽기만 가능하고 쓰기는 불가능합니다. |
예제 코드
cs
using Agilebot.IR;
using Agilebot.IR.Types;
public class ReadSignal
{
public static StatusCode Run(string controllerIP, bool useLocalProxy = true)
{
// [ZH] 初始化捷勃特机器人
// [EN] Initialize the Agilebot robot
Arm controller = new Arm(controllerIP, useLocalProxy);
// [ZH] 连接捷勃特机器人
// [EN] Connect to the Agilebot robot
StatusCode code = controller.ConnectSync();
Console.WriteLine(code != StatusCode.OK ? code.GetDescription() : "连接成功/Successfully connected.");
if (code != StatusCode.OK)
{
return code;
}
try
{
// [ZH] 设置IO信号类型和索引
// [EN] Set IO signal type and index
SignalType type = SignalType.DI;
int index = 1;
// [ZH] 读取指定类型指定端口IO的值
// [EN] Read specified type and port IO value
int res;
(res, code) = controller.Signals.Read(type, index);
if (code == StatusCode.OK)
{
Console.WriteLine("读取IO信号成功/Read Signal Success");
Console.WriteLine($"{type}:{index} 的值为/has value {res}");
Console.WriteLine($"信号状态/Signal Status: {(res == 1 ? "高电平/High Level" : "低电平/Low Level")}");
}
else
{
Console.WriteLine($"读取IO信号失败/Read Signal Failed: {code.GetDescription()}");
}
}
catch (Exception ex)
{
Console.WriteLine($"执行过程中发生异常/Exception occurred during execution: {ex.Message}");
code = StatusCode.OtherReason;
}
finally
{
// [ZH] 关闭连接
// [EN] Close the connection
StatusCode disconnectCode = controller.Disconnect();
if (disconnectCode != StatusCode.OK)
{
Console.WriteLine(disconnectCode.GetDescription());
if (code == StatusCode.OK)
code = disconnectCode;
}
}
return code;
}
}4.5.2 지정된 유형 및 포트 IO의 값 쓰기
| 메서드 이름 | Signals.Write(SignalType type , int index , double value ) |
|---|---|
| 설명 | 지정된 유형 및 포트의 IO 값을 씁니다. 현재 DO/RO/GO/TDO/AO.만 지원합니다. |
| 요청 매개변수 | type : 쓸 SignalType IO 유형 index : 1부터 시작하는 int IO 포트 인덱스 value : 이중 IO 값(DO/RO/TDO는 0 또는 1만 허용, GO는 정수, AO는 부동 소수점 아날로그) |
| 반환 값 | StatusCode: 작업 실행 결과 |
| 호환 로봇 소프트웨어 버전 | 협업(Copper): v7.5.0.0+ 산업용(Bronze): v7.5.0.0+ |
| 메모 | UI/UO는 읽기만 가능하고 쓰기는 불가능합니다. |
예제 코드
cs
using Agilebot.IR;
using Agilebot.IR.Types;
public class WriteSignal
{
public static StatusCode Run(string controllerIP, bool useLocalProxy = true)
{
// [ZH] 初始化捷勃特机器人
// [EN] Initialize the Agilebot robot
Arm controller = new Arm(controllerIP, useLocalProxy);
// [ZH] 连接捷勃特机器人
// [EN] Connect to the Agilebot robot
StatusCode code = controller.ConnectSync();
Console.WriteLine(code != StatusCode.OK ? code.GetDescription() : "连接成功/Successfully connected.");
if (code != StatusCode.OK)
{
return code;
}
try
{
// [ZH] 设置IO信号类型、索引和值
// [EN] Set IO signal type, index and value
SignalType type = SignalType.DO;
int index = 1;
int value = 1;
// [ZH] 写指定类型指定端口IO的值
// [EN] Write specified type and port IO value
code = controller.Signals.Write(type, index, value);
if (code == StatusCode.OK)
{
Console.WriteLine("写入IO信号成功/Write Signal Success");
Console.WriteLine($"{type}:{index} 设置为/set to value {value}");
Console.WriteLine($"信号状态/Signal Status: {(value == 1 ? "高电平/High Level" : "低电平/Low Level")}");
}
else
{
Console.WriteLine($"写入IO信号失败/Write Signal Failed: {code.GetDescription()}");
}
}
catch (Exception ex)
{
Console.WriteLine($"执行过程中发生异常/Exception occurred during execution: {ex.Message}");
code = StatusCode.OtherReason;
}
finally
{
// [ZH] 关闭连接
// [EN] Close the connection
StatusCode disconnectCode = controller.Disconnect();
if (disconnectCode != StatusCode.OK)
{
Console.WriteLine(disconnectCode.GetDescription());
if (code == StatusCode.OK)
code = disconnectCode;
}
}
return code;
}
}4.5.3 일괄 쓰기 DO(디지털 출력) 신호
| 메서드 이름 | Signals.MultiWrite(SignalType type , List<int> ioData ) |
|---|---|
| 설명 | DO(디지털 출력) 신호를 일괄 쓰기합니다. |
| 요청 매개변수 | type : 쓸 SignalType IO 유형(DO 전용) ioData : List<int> 포트 번호 및 포트 값 목록(예: [port1, state1, port2, state2], 길이는 짝수이고 0보다 커야 함) |
| 반환 값 | StatusCode: 작업 실행 결과 |
| 호환 로봇 소프트웨어 버전 | 협업(Copper): v7.5.0.0+ 산업용(Bronze): v7.5.0.0+ |
| 메모 | DO만 일괄 쓰기를 지원합니다. UI/UO는 쓰기를 지원하지 않으며, DI/RI는 단일 포인트 읽기만 지원합니다. |
예제 코드
cs
using Agilebot.IR;
using Agilebot.IR.Types;
public class Test
{
public static async Task Main()
{
string controllerIP = "10.27.1.254";
Arm controller = new Arm(controllerIP);
StatusCode code = await controller.Connect();
Console.WriteLine(code != StatusCode.OK ? code.GetDescription() : "Successfully connected.");
// Batch write DO1=1, DO2=0
code = controller.Signals.MultiWrite(SignalType.DO, new List<int> { 1, 1, 2, 0 });
Console.WriteLine(code != StatusCode.OK ? code.GetDescription() : "MultiWrite Success");
code = controller.Disconnect();
Console.WriteLine(code != StatusCode.OK ? code.GetDescription() : "Successfully disconnected.");
}
}4.5.4 일괄 읽기 DO(디지털 출력) 포트 값
| 메서드 이름 | Signals.MultiRead(SignalType type , List<int> indexes ) |
|---|---|
| 설명 | DO(디지털 출력) 포트 값을 일괄적으로 읽습니다. |
| 요청 매개변수 | type : 읽을 SignalType IO 유형(DO 전용) indexes : List<int> 포트 번호 목록(비워둘 수 없음) |
| 반환 값 | List<int>: 포트 값 목록(입력과 일치하는 순서) StatusCode: 작업 실행 결과 |
| 호환 로봇 소프트웨어 버전 | 협업(Copper): v7.5.0.0+ 산업용(Bronze): v7.5.0.0+ |
| 메모 | DO만 일괄 읽기를 지원합니다. UI/UO는 쓰기를 지원하지 않으며, DI/RI는 단일 포인트 읽기만 지원합니다. |
예제 코드
cs
using Agilebot.IR;
using Agilebot.IR.Types;
public class Test
{
public static async Task Main()
{
string controllerIP = "10.27.1.254";
Arm controller = new Arm(controllerIP);
StatusCode code = await controller.Connect();
Console.WriteLine(code != StatusCode.OK ? code.GetDescription() : "Successfully connected.");
// Batch read DO1, DO2
(List<int> values, StatusCode readCode) = controller.Signals.MultiRead(SignalType.DO, new List<int> { 1, 2 });
if (readCode == StatusCode.OK)
{
Console.WriteLine($"MultiRead Success: DO1={values[0]}, DO2={values[1]}");
}
code = controller.Disconnect();
Console.WriteLine(code != StatusCode.OK ? code.GetDescription() : "Successfully disconnected.");
}
}