IN_OUT.c
5.79 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
#include "includes.h"
#include "hardware.h"
#include "all_value.h"
/***********************************input+output*****************************************/
/****************************IO_IN************************************/
/**手执器**/
u8 Handnum=0; //手执器键值
u8 IN_Forward=0; //前进
u8 IN_Backward=0; //后退
u8 IN_Left=0; //左移
u8 IN_Right=0; //右移
u8 IN_Cw=0; //顺转
u8 IN_CCw=0; //逆转
u8 IN_Up=0; //上升
u8 IN_Down=0; //下降
u8 IN_Stop=0; //急停复位
u8 IN_HelmLeft=0; //左移
u8 IN_HelmRight=0; //右移
/**面板外部**/
u8 IN_Mode=0; //模式按钮
u8 IN_Safe=0; //安全触边检测
u8 IN_EmergStop=0; //急停按钮
u8 IN_Reset=0; //复位键
/**驱动采集**/
//u8 IN_Motorerr1=0; //电机报错1
/**避障+测量雷达信息采集**/
u8 IN_LRadarB_Near; //TIM_F近区域触发
u8 IN_LRadarB_Middle; //TIM_F中区域触发
u8 IN_LRadarB_Far; //TIM_F远区域触发
u8 IN_LRadarB_Ok; //
u8 IN_LRadarF_Near; //Scan_F近区域触发
u8 IN_LRadarF_Middle; //Scan_F中区域触发
u8 IN_LRadarF_Far; //Scan_F远区域触发
u8 IN_LRadarF_Ok; //
/**普通光电检测**/
u8 IN_UpLimit; //上限位检测
u8 IN_DownLimit; //下限位检测
u8 IN_LimitL; //左限位检测
u8 IN_LimitR; //左限位检测
u8 IN_LimitL2; //左限位检测
u8 IN_LimitR2; //左限位检测
//u8 IN_InitPoint1; //
//u8 IN_InitPoint2; //
/**其他**/
u8 IN_SensorPower; //传感器供电检测
u8 IN_Cargo1; //平台上货物检测
u8 IN_Cargo2; //平台上货物检测
u8 IN_HydraOilOk;//液压油检测
u8 IN_CargoF; //车前货物检测
u8 IN_CargoB; //车后货物检测
u8 IN_CargoLF; //车左前货物检测
u8 IN_CargoLB; //车左后货物检测
u8 IN_CargoRF; //车右前货物检测
u8 IN_CargoRB; //车右后货物检测
u8 IN_LaSafe; //雷达安全检测信号
/******************************IO_OUT***********************************/
/**三色灯+蜂鸣器**/
u8 Out_LEDG; //绿灯
u8 Out_LEDY; //黄灯
u8 Out_LEDW; //白灯
//u8 Out_BEEP; //蜂鸣器
/**其他输出**/
u8 Out_Poweroff; //小车关机
u8 Out_Charge; //充电
u8 Out_SetEncoder; //充电
//u8 Out_ApReon; //moxa重启
//u8 Out_UpCCDLed;
u8 Out_Fan1Power; //风扇1电源中间
u8 Out_Fan2Power; //风扇2电源
u8 Out_DownValve; //下降阀
/**驱动器使能输出**/
//u8 Out_Enable1; //驱动器1使能
//u8 Out_Enable2; //驱动器2使能
//u8 Out_Enable3; //驱动器3使能
//u8 Out_Enable4; //驱动器4使能
/**TIM区域选择输出**/
u8 Out_LRadarBIn1; //TIM_IN1
u8 Out_LRadarBIn2; //TIM_IN2
u8 Out_LRadarBIn3; //TIM_IN3
u8 Out_LRadarBIn4; //TIM_IN4
u8 Out_SystemLed;//主板灯
#if ( (AgvStypeNo==1)|(AgvStypeNo==2) ) //1-大舵轮车;2-小舵轮车;3-台光样车;4-标准AGV;5-福田小车
void In_Pro(void) //获取DI具体对应信息/*将采集的信息整体->个体映射*/
{
In_D();
if( VaIndexDW_R(&F_AgvContr,9))IN_Cargo1=NOT(VaIndexW_R(&In_1_W,4)); //轴5输送 上层输送
else IN_Cargo1=VaIndexW_R(&In_1_W,4);
if( VaIndexDW_R(&F_AgvContr,8))IN_Cargo2=NOT(VaIndexW_R(&In_1_W,5)); //轴0输送 下层输送
else IN_Cargo2=VaIndexW_R(&In_1_W,5);
IN_HydraOilOk=NOT(VaIndexW_R(&In_1_W,6));
IN_Down=VaIndexW_R(&In_2_W,10);
IN_Up=VaIndexW_R(&In_2_W,11);
IN_Cw=VaIndexW_R(&In_2_W,0);
IN_CCw=VaIndexW_R(&In_2_W,1);
IN_Backward=VaIndexW_R(&In_2_W,4);
IN_Forward=VaIndexW_R(&In_2_W,5);
// IN_Forward=VaIndexW_R(&In_2_W,6);
// IN_Stop=VaIndexW_R(&In_2_W,8);
// IN_Left=VaIndexW_R(&In_2_W,3);
// IN_Right=VaIndexW_R(&In_2_W,2);
// IN_HelmLeft=VaIndexW_R(&In_2_W,9);
// IN_HelmRight=VaIndexW_R(&In_2_W,7);
IN_Stop=VaIndexW_R(&In_2_W,9);
IN_Left=VaIndexW_R(&In_2_W,3);
IN_Right=VaIndexW_R(&In_2_W,2);
IN_HelmLeft=VaIndexW_R(&In_2_W,7);
IN_HelmRight=VaIndexW_R(&In_2_W,8);
IN_LRadarB_Ok=VaIndexW_R(&In_2_W,12);
IN_LRadarB_Far=NOT(VaIndexW_R(&In_2_W,13) ); //有物体进入是1
IN_LRadarB_Middle=NOT(VaIndexW_R(&In_2_W,14) );
IN_LRadarB_Near=NOT(VaIndexW_R(&In_2_W,15) );
IN_Mode=VaIndexW_R(&In_3_W,0);
IN_EmergStop=VaIndexW_R(&In_3_W,1);
IN_SensorPower=VaIndexW_R(&In_3_W,2);
IN_Safe=VaIndexW_R(&In_3_W,3);
IN_Reset=VaIndexW_R(&In_3_W,4);
if(VaIndexDW_R(&F_AgvContr,1))//液压升降
{ IN_DownLimit=NOT(VaIndexW_R(&In_3_W,8));
IN_UpLimit=NOT(VaIndexW_R(&In_3_W,9));
}
else//电动缸升降
{ IN_DownLimit=VaIndexW_R(&In_3_W,8);
IN_UpLimit=VaIndexW_R(&In_3_W,9);
}
if(VaIndexDW_R(&F_AgvContr,9))//6号轴是输送滚筒
{ IN_LimitL=NOT(VaIndexW_R(&In_1_W,8));
IN_LimitR=NOT(VaIndexW_R(&In_1_W,9));
}
else
{ IN_LimitL=VaIndexW_R(&In_3_W,10);
IN_LimitR=VaIndexW_R(&In_3_W,11);
}
IN_LimitL2=NOT(VaIndexW_R(&In_1_W,10));
IN_LimitR2=NOT(VaIndexW_R(&In_1_W,11));
}
void Out_Pro(void) //将输出DO对应到输出口/*将输出信息个体->整体映射*/
{
IO_Force();
VaIndexW_W(&Out_1_W,0,Out_LEDW);
VaIndexW_W(&Out_1_W,1,Out_LEDY);
VaIndexW_W(&Out_1_W,2,Out_LEDG);
VaIndexW_W(&Out_1_W,3,Out_SetEncoder);
VaIndexW_W(&Out_1_W,4,0);
VaIndexW_W(&Out_1_W,5,0);
VaIndexW_W(&Out_1_W,8,Out_LRadarBIn4);
VaIndexW_W(&Out_1_W,9,Out_LRadarBIn3);
VaIndexW_W(&Out_1_W,10,Out_LRadarBIn2);
VaIndexW_W(&Out_1_W,11,Out_LRadarBIn1);
VaIndexW_W(&Out_2_W,0,Out_DownValve); //VaIndexW_W(&Out_2_W,5,Out_DownValve);
VaIndexW_W(&Out_2_W,1,Out_Charge);
VaIndexW_W(&Out_2_W,2,Out_Poweroff);
VaIndexW_W(&Out_2_W,3,Out_Fan1Power);
VaIndexW_W(&Out_2_W,4,Out_Fan2Power);
VaIndexW_W(&Out_2_W,8,Out_SystemLed);
Out_D();
}
#elif (AgvStypeNo==3)
#endif
void IO_Force(void) //
{
if(SysKey==88)
{
if(VaIndexDW_R(&Touch_Contr,4))Out_Charge=1;//用于人工充电桩处人工快速充电
if(VaIndexDW_R(&Touch_Contr,5)){Out_Fan1Power=Out_Fan2Power=1;}//强制风扇
if(VaIndexDW_R(&Touch_Contr,14))Out_Poweroff=1;//强制断电
else Out_Poweroff=0;
}
if(SysKey==89)
{ if(VaIndexDW_R(&Touch_Contr,12))Out_SetEncoder=1;//强制测距置零
else Out_SetEncoder=0;
if(VaIndexDW_R(&Touch_Contr,16)&&(Motor[5].PcToM.SetZero_Step==0))Motor[5].PcToM.SetZero_Step=1;
}
}