CAN_Address.cs
8.2 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace PUSICANLibrary
{
public class CAN_Address
{
private static Dictionary<uint, SDOAddrInfo> sdoMap = null;
public static Dictionary<uint, SDOAddrInfo> SDOAddrMap()
{
if (sdoMap == null)
{
sdoMap = new Dictionary<uint, SDOAddrInfo>();
sdoMap.Add(NodeID, new SDOAddrInfo(NodeID, DATA_TYPE.DT_UINT8, 0));
sdoMap.Add(BoteValue, new SDOAddrInfo(BoteValue, DATA_TYPE.DT_UINT8, 0));
sdoMap.Add(NodeName, new SDOAddrInfo(NodeName, DATA_TYPE.DT_VISIBLE_STRING, 0));
sdoMap.Add(DeviceVersion, new SDOAddrInfo(DeviceVersion, DATA_TYPE.DT_VISIBLE_STRING, 0));
sdoMap.Add(SoftVersion, new SDOAddrInfo(SoftVersion, DATA_TYPE.DT_VISIBLE_STRING, 0));
sdoMap.Add(DeviceStatus, new SDOAddrInfo(DeviceStatus, DATA_TYPE.DT_UINT8, 0));
sdoMap.Add(ControlStatus, new SDOAddrInfo(ControlStatus, DATA_TYPE.DT_UINT8, 0));
sdoMap.Add(MoveDirection, new SDOAddrInfo(MoveDirection, DATA_TYPE.DT_UINT8, 0));
sdoMap.Add(StopMove, new SDOAddrInfo(StopMove, DATA_TYPE.DT_UINT8, 0));
sdoMap.Add(MoveType, new SDOAddrInfo(MoveType, DATA_TYPE.DT_UINT8, 0));
sdoMap.Add(DelPhaseCurrent, new SDOAddrInfo(DelPhaseCurrent, DATA_TYPE.DT_UINT8, 0));
sdoMap.Add(MotorCanMake, new SDOAddrInfo(MotorCanMake, DATA_TYPE.DT_UINT8, 0));
sdoMap.Add(OutStop_ParamCount, new SDOAddrInfo(OutStop, DATA_TYPE.DT_UINT8, 0));
sdoMap.Add(OutStop_Set, new SDOAddrInfo(OutStop, DATA_TYPE.DT_UINT8, 1));
sdoMap.Add(OutStop_Type, new SDOAddrInfo(OutStop, DATA_TYPE.DT_UINT8, 2));
sdoMap.Add(AddSpeed, new SDOAddrInfo(AddSpeed, DATA_TYPE.DT_UINT16, 0));
sdoMap.Add(StopSpeed, new SDOAddrInfo(StopSpeed, DATA_TYPE.DT_UINT16, 0));
sdoMap.Add(StartSpeed, new SDOAddrInfo(StartSpeed, DATA_TYPE.DT_UINT16, 0));
sdoMap.Add(DelSpeed, new SDOAddrInfo(DelSpeed, DATA_TYPE.DT_UINT16, 0));
sdoMap.Add(MicroStepping, new SDOAddrInfo(MicroStepping, DATA_TYPE.DT_UINT16, 0));
sdoMap.Add(MaxPhaseCurrent, new SDOAddrInfo(MaxPhaseCurrent, DATA_TYPE.DT_UINT16, 0));
sdoMap.Add(MaxSpeed, new SDOAddrInfo(MaxSpeed, DATA_TYPE.DT_UINT32, 0));
sdoMap.Add(RelativeMove, new SDOAddrInfo(RelativeMove, DATA_TYPE.DT_UINT32, 0));
sdoMap.Add(AbsoluteMove, new SDOAddrInfo(AbsoluteMove, DATA_TYPE.DT_UINT32, 0));
// sdoMap.Add(MoveDirection, new SDOAddrInfo(MoveDirection, DATA_TYPE.DT_UINT32, 0));
sdoMap.Add(CurrPosition, new SDOAddrInfo(CurrPosition, DATA_TYPE.DT_UINT32, 0));
sdoMap.Add(OutStop, new SDOAddrInfo(OutStopSingle, DATA_TYPE.DT_UINT8, 0));
sdoMap.Add(GPIO_Value, new SDOAddrInfo(GPIO_Value, DATA_TYPE.DT_INT16, 0));
}
return sdoMap;
}
/// <summary>
/// 节点ID
/// </summary>
public static uint NodeID = 0x2002;
/// <summary>
/// 波特率
/// </summary>
public static uint BoteValue = 0x2003;
/// <summary>
/// 设备节点名称
/// </summary>
public static uint NodeName = 0x1008;
/// <summary>
/// 硬件版本
/// </summary>
public static uint DeviceVersion = 0x1000;
/// <summary>
/// 软件版本= 0x100A
/// </summary>
public static uint SoftVersion = 0x100A;
/// <summary>
/// 驱动错误状态= 0x6000
/// </summary>
public static uint DeviceStatus = 0x6000;
/// <summary>
/// 控制器状态= 0x6001
/// </summary>
public static uint ControlStatus = 0x6001;
/// <summary>
/// 转动反向= 0x6002,0=正方向,1=反方向
/// </summary>
public static uint MoveDirection = 0x6002;
/// <summary>
/// 最大速度= 0x6003
/// </summary>
public static uint MaxSpeed = 0x6003;
/// <summary>
/// 相对位移指令= 0x6004
/// </summary>
public static uint RelativeMove = 0x6004;
/// <summary>
/// 工作模式= 0x6005,0=位置模式,1=速度模式
/// </summary>
public static uint MoveType = 0x6005;
/// <summary>
/// 启动速度= 0x6006
/// </summary>
public static uint StartSpeed = 0x6006;
/// <summary>
/// 停止速度= 0x6007
/// </summary>
public static uint StopSpeed = 0x6007;
/// <summary>
/// 加速度系数= 0x6008
/// </summary>
public static uint AddSpeed = 0x6008;
/// <summary>
/// 减速度系数= 0x6009
/// </summary>
public static uint DelSpeed = 0x6009;
/// <summary>
/// 细分数= 0x600A
/// </summary>
public static uint MicroStepping = 0x600A;
/// <summary>
/// 最大相电流0x600B
/// </summary>
public static uint MaxPhaseCurrent = 0x600B;
/// <summary>
/// 电流衰减0x600D
/// </summary>
public static uint DelPhaseCurrent = 0x600D;
/// <summary>
/// 电机位置0x600C
/// </summary>
public static uint CurrPosition = 0x600C;
/// <summary>
/// 电机使能 0x600E,0=脱机,1=电机使能
/// </summary>
public static uint MotorCanMake = 0x600E;
/// <summary>
/// 对象名称 外部紧急停止 0x60
/// </summary>
public static uint OutStopSingle = 0x600F;
/// <summary>
/// 绝对控制指令0x601c
/// </summary>
public static uint AbsoluteMove = 0x601c;
/// <summary>
/// 终止步进指令0x6020
/// </summary>
public static uint StopMove = 0x6020;
/// <summary>
/// 外部停止,0x600f
/// </summary>
public static uint OutStop= 0x600F;
/// <summary>
/// 外部停止,0x600f ,0h 参数个数 UINT8 RO NO ROM
/// </summary>
public static uint OutStop_ParamCount = 0x600F0;
/// <summary>
/// 外部停止,1h 外部紧急停止使能 UINT8 RW NO
/// </summary>
public static uint OutStop_Set = 0x600F1;
/// <summary>
/// 外部停止,0x600f ,2h 外部紧急停止触发
/// </summary>
public static uint OutStop_Type= 0x600F2;
/// <summary>
/// 通用IO端口值,0x6012 ,U16 0高电平,1低电平
/// </summary>
public static uint GPIO_Value = 0x6012;
}
public class SDOAddrInfo
{
public SDOAddrInfo(uint addr, DATA_TYPE type, uint subindex)
{
this.sdoAddr = addr;
this.dataType = type;
switch (type)
{
case DATA_TYPE.DT_BOOL:
dataLength = 1;
break;
case DATA_TYPE.DT_INT8:
dataLength = 1;
break;
case DATA_TYPE.DT_INT16:
dataLength = 2;
break;
case DATA_TYPE.DT_INT32:
dataLength = 4;
break;
case DATA_TYPE.DT_UINT8:
dataLength = 1;
break;
case DATA_TYPE.DT_UINT16:
dataLength = 2;
break;
case DATA_TYPE.DT_UINT32:
dataLength = 4;
break;
case DATA_TYPE.DT_VISIBLE_STRING:
dataLength = 255;
break;
}
this.subIndex = subindex;
}
/// <summary>
/// 地址
/// </summary>
public uint sdoAddr { get; set; }
public DATA_TYPE dataType { get; set; }
public uint dataLength { get; set; }
public uint subIndex { get; set; }
public uint timeOut = 1000;
}
}