4.6 등록정보
개요
Registers 클래스는 컨트롤러의 호스트 측 레지스터 액세스를 위한 통합 항목을 제공하여 여러 레지스터 유형에 대한 작업을 지원합니다.
핵심 기능
- /write 숫자 레지스터 읽기(R)
- /write 모션 레지스터 읽기(MR)
- /write 문자열 레지스터 읽기(SR)
- /write 포즈 레지스터 읽기(PR)
- /write Modbus 레지스터 읽기(MH 보유, MI 입력)
사용 사례
- 런타임 매개변수 전달
- 로봇 상태 동기화
- 외부 시스템과 구성 공유
- 호스트-장치 상호작용 제어
4.6.1 R 숫자 레지스터 작업
4.6.1.1 R 레지스터 값 읽기
| 메서드 이름 | Registers.Read_R(int index ) |
|---|---|
| 설명 | R 숫자 레지스터의 값을 읽습니다. |
| 요청 매개변수 | index : 읽을 int R 레지스터 번호 |
| 반환 값 | double: 레지스터 값 StatusCode: 연산 실행 결과 |
| 호환 로봇 소프트웨어 버전 | 협동로봇: 7.6.0.1 산업용 로봇: 7.6.0.0 |
4.6.1.2 R 레지스터 값 읽기(메타데이터 포함)
| 메서드 이름 | Registers.Read_R(int index , bool withMeta ) |
|---|---|
| 설명 | 선택적 메타데이터(name/comment)를 사용하여 R 숫자 레지스터의 값을 읽습니다. |
| 요청 매개변수 | index : int 읽을 레지스터 번호 withMeta : bool 메타데이터 반환 여부(true인 경우 레지스터 개체 반환) |
| 반환 값 | 레지스터: 레지스터 객체(id/name/comment/value) StatusCode: 연산 실행 결과 |
| 호환 로봇 소프트웨어 버전 | 협동로봇: 7.7.0.0+ 산업용 로봇: 7.7.0.0+ |
4.6.1.3 R 레지스터의 값 쓰기
| 메서드 이름 | Registers.Write_R(int index , double value ) |
|---|---|
| 설명 | R 숫자 레지스터의 값을 씁니다. |
| 요청 매개변수 | index : int 쓸 레지스터 번호 value : double 쓸 레지스터 숫자값 |
| 반환 값 | StatusCode: 작업 실행 결과 |
| 호환 로봇 소프트웨어 버전 | 협동로봇: 7.6.0.1 산업용 로봇: 7.6.0.0 |
4.6.1.4 메타데이터로 R 레지스터 작성
| 메서드 이름 | Registers.Write_R(Register register ) |
|---|---|
| 설명 | 이름과 설명을 포함하여 Register 개체를 사용하여 R 레지스터를 작성합니다. |
| 요청 매개변수 | register : 등록 객체(id/name/comment/value) |
| 반환 값 | StatusCode: 작업 실행 결과 |
| 호환 로봇 소프트웨어 버전 | 협동로봇: 7.7.0.0+ 산업용 로봇: 7.7.0.0+ |
4.6.1.5 R 레지스터 삭제
| 메서드 이름 | Registers.Delete_R(int index ) |
|---|---|
| 설명 | 지정된 R 숫자 레지스터를 삭제합니다. |
| 요청 매개변수 | index : 삭제할 int R 레지스터 번호 |
| 반환 값 | StatusCode: 작업 실행 결과 |
| 호환 로봇 소프트웨어 버전 | 협업(Copper): v7.5.0.0+ 산업용(Bronze): v7.5.0.0+ |
예제 코드
cs
using Agilebot.IR;
using Agilebot.IR.Types;
public class RRegisterOperations
{
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] 设置寄存器索引和值
// [EN] Set register index and value
int index = 1;
double value = 9.9;
// [ZH] 写入R寄存器
// [EN] Write R register
code = controller.Registers.Write_R(index, value);
if (code == StatusCode.OK)
{
Console.WriteLine("写入R寄存器成功/Write R Register Success");
}
else
{
Console.WriteLine($"写入R寄存器失败/Write R Register Failed: {code.GetDescription()}");
}
// [ZH] 读取R寄存器
// [EN] Read R register
double readValue;
(readValue, code) = controller.Registers.Read_R(index);
if (code == StatusCode.OK)
{
Console.WriteLine($"读取R寄存器成功/Read R Register Success: 值/Value = {readValue}");
}
else
{
Console.WriteLine($"读取R寄存器失败/Read R Register Failed: {code.GetDescription()}");
}
// [ZH] 删除R寄存器
// [EN] Delete R register
code = controller.Registers.Delete_R(index);
if (code == StatusCode.OK)
{
Console.WriteLine("删除R寄存器成功/Delete R Register Success");
}
else
{
Console.WriteLine($"删除R寄存器失败/Delete R Register 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.6.2 MR 모션 레지스터 작업
4.6.2.1 MR 레지스터 값 읽기
| 메서드 이름 | Registers.Read_MR(int index ) |
|---|---|
| 설명 | MR 모션 레지스터의 값을 읽습니다. |
| 요청 매개변수 | index : int MR 읽을 레지스터 번호 |
| 반환 값 | int: 레지스터 값 StatusCode: 연산 실행 결과 |
| 호환 로봇 소프트웨어 버전 | 협동로봇: 7.6.0.1 산업용 로봇: 7.6.0.0 |
4.6.2.2 MR 레지스터 값 읽기(메타데이터 포함)
| 메서드 이름 | Registers.Read_MR(int index , bool withMeta ) |
|---|---|
| 설명 | 선택적 메타데이터(name/comment)와 함께 MR 모션 레지스터의 값을 읽습니다. |
| 요청 매개변수 | index : int 읽을 레지스터 번호 withMeta : bool 메타데이터 반환 여부(true인 경우 레지스터 개체 반환) |
| 반환 값 | MotionRegister: 레지스터 객체(id/name/comment/value) StatusCode: 연산 실행 결과 |
| 호환 로봇 소프트웨어 버전 | 협동로봇: 7.7.0.0+ 산업용 로봇: 7.7.0.0+ |
4.6.2.3 MR 레지스터의 값 쓰기
| 메서드 이름 | Registers.Write_MR(int index , int value ) |
|---|---|
| 설명 | MR 모션 레지스터의 값을 씁니다. |
| 요청 매개변수 | index : int 쓸 레지스터 번호 value : int 쓸 레지스터 숫자값 |
| 반환 값 | StatusCode: 작업 실행 결과 |
| 호환 로봇 소프트웨어 버전 | 협동로봇: 7.6.0.1 산업용 로봇: 7.6.0.0 |
4.6.2.4 메타데이터로 MR 레지스터 작성
| 메서드 이름 | Registers.Write_MR(MotionRegister register ) |
|---|---|
| 설명 | 이름과 설명을 포함하여 MotionRegister 개체를 사용하여 MR 레지스터를 작성합니다. |
| 요청 매개변수 | register : MotionRegister 객체(id/name/comment/value) |
| 반환 값 | StatusCode: 작업 실행 결과 |
| 호환 로봇 소프트웨어 버전 | 협동로봇: 7.7.0.0+ 산업용 로봇: 7.7.0.0+ |
4.6.2.5 MR 레지스터 삭제
| 메서드 이름 | Registers.Delete_MR(int index ) |
|---|---|
| 설명 | 지정된 MR 모션 레지스터를 삭제합니다. |
| 요청 매개변수 | index : int MR 삭제할 레지스터 번호 |
| 반환 값 | StatusCode: 작업 실행 결과 |
| 호환 로봇 소프트웨어 버전 | 협업(Copper): v7.5.0.0+ 산업용(Bronze): v7.5.0.0+ |
예제 코드
cs
using Agilebot.IR;
using Agilebot.IR.Types;
public class MRRegisterOperations
{
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] 设置寄存器索引和值
// [EN] Set register index and value
int index = 1;
int value = 9;
// [ZH] 写入MR寄存器
// [EN] Write MR register
code = controller.Registers.Write_MR(index, value);
if (code == StatusCode.OK)
{
Console.WriteLine("写入MR寄存器成功/Write MR Register Success");
}
else
{
Console.WriteLine($"写入MR寄存器失败/Write MR Register Failed: {code.GetDescription()}");
}
// [ZH] 读取MR寄存器
// [EN] Read MR register
int readValue;
(readValue, code) = controller.Registers.Read_MR(index);
if (code == StatusCode.OK)
{
Console.WriteLine($"读取MR寄存器成功/Read MR Register Success: 值/Value = {readValue}");
}
else
{
Console.WriteLine($"读取MR寄存器失败/Read MR Register Failed: {code.GetDescription()}");
}
// [ZH] 删除MR寄存器
// [EN] Delete MR register
code = controller.Registers.Delete_MR(index);
if (code == StatusCode.OK)
{
Console.WriteLine("删除MR寄存器成功/Delete MR Register Success");
}
else
{
Console.WriteLine($"删除MR寄存器失败/Delete MR Register 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.6.3 SR 문자열 레지스터 작업
4.6.3.1 SR 레지스터 값 읽기
| 메서드 이름 | Registers.Read_SR(int index ) |
|---|---|
| 설명 | SR 문자열 레지스터의 값을 읽습니다. |
| 요청 매개변수 | index : int SR 읽을 레지스터 번호 |
| 반환 값 | string: 레지스터 문자열 값 StatusCode: 연산 실행 결과 |
| 호환 로봇 소프트웨어 버전 | 협동로봇: 7.6.0.1 산업용 로봇: 7.6.0.0 |
4.6.3.2 SR 레지스터 값 읽기(메타데이터 포함)
| 메서드 이름 | Registers.Read_SR(int index , bool withMeta ) |
|---|---|
| 설명 | 선택적 메타데이터(name/comment)와 함께 SR 문자열 레지스터의 값을 읽습니다. |
| 요청 매개변수 | index : int 읽을 레지스터 번호 withMeta : bool 메타데이터 반환 여부(true인 경우 레지스터 개체 반환) |
| 반환 값 | StringRegister: 레지스터 객체(id/name/comment/value) StatusCode: 연산 실행 결과 |
| 호환 로봇 소프트웨어 버전 | 협동로봇: 7.7.0.0+ 산업용 로봇: 7.7.0.0+ |
4.6.3.3 SR 레지스터의 값 쓰기
| 메서드 이름 | Registers.Write_SR(int index , string value ) |
|---|---|
| 설명 | SR 문자열 레지스터의 값을 씁니다. |
| 요청 매개변수 | index : int 쓸 레지스터 번호 value : string 쓸 레지스터 스트링 값 |
| 반환 값 | StatusCode: 작업 실행 결과 |
| 호환 로봇 소프트웨어 버전 | 협동로봇: 7.6.0.1 산업용 로봇: 7.6.0.0 |
4.6.3.4 메타데이터로 SR 레지스터 작성
| 메서드 이름 | Registers.Write_SR(StringRegister register ) |
|---|---|
| 설명 | 이름과 설명을 포함하여 StringRegister 개체를 사용하여 SR 레지스터를 작성합니다. |
| 요청 매개변수 | register : StringRegister 객체(id/name/comment/value) |
| 반환 값 | StatusCode: 작업 실행 결과 |
| 호환 로봇 소프트웨어 버전 | 협동로봇: 7.7.0.0+ 산업용 로봇: 7.7.0.0+ |
4.6.3.5 SR 레지스터 삭제
| 메서드 이름 | Registers.Delete_SR(int index ) |
|---|---|
| 설명 | 지정된 SR 문자열 레지스터를 삭제합니다. |
| 요청 매개변수 | index : int SR 삭제할 레지스터 번호 |
| 반환 값 | StatusCode: 작업 실행 결과 |
| 호환 로봇 소프트웨어 버전 | 협업(Copper): v7.5.0.0+ 산업용(Bronze): v7.5.0.0+ |
예제 코드
cs
using Agilebot.IR;
using Agilebot.IR.Types;
public class SRRegisterOperations
{
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] 设置寄存器索引和值
// [EN] Set register index and value
int index = 1;
string value = "test";
// [ZH] 写入SR寄存器
// [EN] Write SR register
code = controller.Registers.Write_SR(index, value);
if (code == StatusCode.OK)
{
Console.WriteLine("写入SR寄存器成功/Write SR Register Success");
}
else
{
Console.WriteLine($"写入SR寄存器失败/Write SR Register Failed: {code.GetDescription()}");
}
// [ZH] 读取SR寄存器
// [EN] Read SR register
string readValue;
(readValue, code) = controller.Registers.Read_SR(index);
if (code == StatusCode.OK)
{
Console.WriteLine($"读取SR寄存器成功/Read SR Register Success: 值/Value = {readValue}");
}
else
{
Console.WriteLine($"读取SR寄存器失败/Read SR Register Failed: {code.GetDescription()}");
}
// [ZH] 删除SR寄存器
// [EN] Delete SR register
code = controller.Registers.Delete_SR(index);
if (code == StatusCode.OK)
{
Console.WriteLine("删除SR寄存器成功/Delete SR Register Success");
}
else
{
Console.WriteLine($"删除SR寄存器失败/Delete SR Register 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.6.4 PR 포즈 레지스터 작업
4.6.4.1 PR 레지스터 값 읽기
| 메서드 이름 | Registers.Read_PR(int index ) |
|---|---|
| 설명 | PR 포즈 레지스터의 값을 읽습니다. |
| 요청 매개변수 | index : int PR 읽을 레지스터 번호 |
| 반환 값 | PoseRegister: 포즈 데이터 StatusCode: 연산 실행 결과 |
| 호환 로봇 소프트웨어 버전 | 협동로봇: 7.6.0.1 산업용 로봇: 7.6.0.0 |
4.6.4.2 PR 레지스터 값 읽기(메타데이터 포함)
| 메서드 이름 | Registers.Read_PR(int index , bool withMeta ) |
|---|---|
| 설명 | 선택적 메타데이터(name/comment)와 함께 PR 포즈 레지스터의 값을 읽습니다. |
| 요청 매개변수 | index : int 읽을 레지스터 번호 withMeta : bool 메타데이터 반환 여부(true인 경우 name/comment 포함) |
| 반환 값 | PoseRegister: 포즈 데이터(withMeta=true인 경우 name/comment 포함) StatusCode: 작업 실행 결과 |
| 호환 로봇 소프트웨어 버전 | 협동로봇: 7.7.0.0+ 산업용 로봇: 7.7.0.0+ |
4.6.4.3 PR 레지스터 값 쓰기
| 메서드 이름 | Registers.Write_PR(PoseRegister pose ) |
|---|---|
| 설명 | PR 포즈 레지스터의 값을 씁니다. |
| 요청 매개변수 | pose : PoseRegister 쓸 포즈 데이터 |
| 반환 값 | StatusCode: 작업 실행 결과 |
| 호환 로봇 소프트웨어 버전 | 협동로봇: 7.6.0.1 산업용 로봇: 7.6.0.0 |
4.6.4.4 메타데이터로 PR 레지스터 작성
| 메서드 이름 | Registers.Write_PR(PoseRegister pose , bool withMeta ) |
|---|---|
| 설명 | 메타데이터(name/comment) 쓰기 여부를 제어하여 PR 포즈 레지스터의 값을 씁니다. |
| 요청 매개변수 | pose : PoseRegister 포즈 데이터를 작성 withMeta : bool 메타데이터 작성 여부(true인 경우 name/comment 작성) |
| 반환 값 | StatusCode: 작업 실행 결과 |
| 호환 로봇 소프트웨어 버전 | 협동로봇: 7.7.0.0+ 산업용 로봇: 7.7.0.0+ |
4.6.4.5 PR 레지스터 삭제
| 메서드 이름 | Registers.Delete_PR(int index ) |
|---|---|
| 설명 | 지정된 PR 포즈 레지스터를 삭제합니다. |
| 요청 매개변수 | index : int PR 삭제할 레지스터 번호 |
| 반환 값 | StatusCode: 작업 실행 결과 |
| 호환 로봇 소프트웨어 버전 | 협업(Copper): v7.5.0.0+ 산업용(Bronze): v7.5.0.0+ |
예제 코드
cs
using Agilebot.IR;
using Agilebot.IR.Registers;
using Agilebot.IR.Types;
public class PRRegisterOperations
{
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] 设置寄存器索引
// [EN] Set register index
int index = 1;
// [ZH] 生成位姿寄存器
// [EN] Generate pose register
var pose = new PoseRegister
{
Id = 1,
Name = "Test",
Comment = "Test",
PoseRegisterData = new PoseRegisterData
{
Pt = PoseType.Joint,
Joint = new Joint
{
J1 = 6.6,
J2 = 6.6,
J3 = 6.6,
J4 = 6.6,
J5 = 6.6,
J6 = 6.6,
},
CartData = null,
},
};
// [ZH] 写入PR寄存器
// [EN] Write PR register
code = controller.Registers.Write_PR(pose);
if (code == StatusCode.OK)
{
Console.WriteLine("写入PR寄存器成功/Write PR Register Success");
}
else
{
Console.WriteLine($"写入PR寄存器失败/Write PR Register Failed: {code.GetDescription()}");
}
// [ZH] 读取PR寄存器
// [EN] Read PR register
PoseRegister readValue;
(readValue, code) = controller.Registers.Read_PR(index);
if (code == StatusCode.OK)
{
Console.WriteLine($"读取PR寄存器成功/Read PR Register Success: ID = {readValue.Id}");
}
else
{
Console.WriteLine($"读取PR寄存器失败/Read PR Register Failed: {code.GetDescription()}");
}
// [ZH] 删除PR寄存器
// [EN] Delete PR register
code = controller.Registers.Delete_PR(index);
if (code == StatusCode.OK)
{
Console.WriteLine("删除PR寄存器成功/Delete PR Register Success");
}
else
{
Console.WriteLine($"删除PR寄存器失败/Delete PR Register 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.6.5 Modbus 레지스터(MH 홀딩 레지스터, MI 입력 레지스터)
4.6.5.1 MH 레지스터 값 읽기
| 메서드 이름 | Registers.Read_MH(int index ) |
|---|---|
| 설명 | MH 보유 레지스터의 값을 읽습니다. |
| 요청 매개변수 | index : int 읽을 레지스터 번호 |
| 반환 값 | int: 레지스터 값 StatusCode: 연산 실행 결과 |
| 호환 로봇 소프트웨어 버전 | 협동로봇: 7.6.0.0 산업용 로봇: 7.6.0.0 |
4.6.5.2 MI 레지스터 값 읽기
| 메서드 이름 | Registers.Read_MI(int index ) |
|---|---|
| 설명 | MI 입력 레지스터의 값을 읽습니다. |
| 요청 매개변수 | index : int 읽을 레지스터 번호 |
| 반환 값 | int: 레지스터 값 StatusCode: 연산 실행 결과 |
| 호환 로봇 소프트웨어 버전 | 협동로봇: 7.6.0.0 산업용 로봇: 7.6.0.0 |
4.6.5.3 MH 레지스터의 값 쓰기
| 메서드 이름 | Registers.Write_MH(int index , int value ) |
|---|---|
| 설명 | MH 보유 레지스터의 값을 씁니다. |
| 요청 매개변수 | index : int 쓸 레지스터 번호 value : int 쓸 레지스터 숫자값 |
| 반환 값 | StatusCode: 작업 실행 결과 |
| 호환 로봇 소프트웨어 버전 | 협동로봇: 7.6.0.0 산업용 로봇: 7.6.0.0 |
4.6.5.4 MI 레지스터의 값 쓰기
| 메서드 이름 | Registers.Write_MI(int index , int value ) |
|---|---|
| 설명 | MI 입력 레지스터의 값을 씁니다. |
| 요청 매개변수 | index : int 쓸 레지스터 번호 value : int 쓸 레지스터 숫자값 |
| 반환 값 | StatusCode: 작업 실행 결과 |
| 호환 로봇 소프트웨어 버전 | 협동로봇: 7.6.0.0 산업용 로봇: 7.6.0.0 |
예제 코드
cs
using Agilebot.IR;
using Agilebot.IR.Types;
public class ModbusRegisterOperations
{
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] 设置寄存器索引和值
// [EN] Set register index and value
int index = 1;
int writeValue = 8;
// [ZH] 写入MH保持寄存器
// [EN] Write MH holding register
code = controller.Registers.Write_MH(index, writeValue);
if (code == StatusCode.OK)
{
Console.WriteLine("写入MH保持寄存器成功/Write MH Holding Register Success");
}
else
{
Console.WriteLine($"写入MH保持寄存器失败/Write MH Holding Register Failed: {code.GetDescription()}");
}
// [ZH] 写入MI输入寄存器
// [EN] Write MI input register
code = controller.Registers.Write_MI(index, writeValue + 1);
if (code == StatusCode.OK)
{
Console.WriteLine("写入MI输入寄存器成功/Write MI Input Register Success");
}
else
{
Console.WriteLine($"写入MI输入寄存器失败/Write MI Input Register Failed: {code.GetDescription()}");
}
// [ZH] 读取MH保持寄存器
// [EN] Read MH holding register
int mhValue;
(mhValue, code) = controller.Registers.Read_MH(index);
if (code == StatusCode.OK)
{
Console.WriteLine($"读取MH保持寄存器成功/Read MH Holding Register Success: 值/Value = {mhValue}");
}
else
{
Console.WriteLine($"读取MH保持寄存器失败/Read MH Holding Register Failed: {code.GetDescription()}");
}
// [ZH] 读取MI输入寄存器
// [EN] Read MI input register
int miValue;
(miValue, code) = controller.Registers.Read_MI(index);
if (code == StatusCode.OK)
{
Console.WriteLine($"读取MI输入寄存器成功/Read MI Input Register Success: 值/Value = {miValue}");
}
else
{
Console.WriteLine($"读取MI输入寄存器失败/Read MI Input Register 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;
}
}