You are on page 1of 20

PC1 PC3

Máy phát q(t) = (x,y,z, Vx, Vy,Vz, B,E,D) Giám sát & Hiển
Tham số mục tiêu thị
q!(t) = (x!,y!,z!,Vx!,Vy!,Vz!, B~,E~,D~)

q(t) = (B,E,D)
q!(t)
status(t)

PC4 q~(t)=(B~,E~,D~) PC2 C(t)


Khối Mô Khối tính toán
phỏng nhiễu
status(t) tham số mục tiêu

PC5
Khối tính toán
tọa độ bắn đón
Motion
UKB
MÁY CHỈ HUY Control

C(t)
M

Motor

Ay

Tham số Bm Vxp By
By Điều khiển
mục tiêu ~ Em Vyp Ey Pháo
φ
B~,E~,D~ Dp Vzp Ty

Module sử
lý nhiễu
Wb, We, Vdp δ

Kiểm tra các tham số trung gian


PC1 PC3
Máy phát tham số M={x,y,z,Vx,Vy,Vz,B,E,D} Giám sát & Hiển
mục tiêu chuẩn thị

PC4
S={B,E,D} Nguồn phát
nhiễu

PC1 PC3
Máy phát tham số M={x,y,z,Vx,Vy,Vz,B,E,D} Giám sát & Hiển
mục tiêu chuẩn thị

q!(t) = (x!,y!,z!,Vx!,Vy!,Vz!, B~,E~,D~)

q!(t)
status(t)
C(t)
PC2
MCH Core
Sơ đồ kết nối PC2-PC5-PC3
PC1
Máy phát tham số M={x,y,z,Vx,Vy,Vz,B,E,D}
mục tiêu chuẩn

q!(t) = M(x!,y!,z!,Vx!,Vy!,Vz!, B~,E~,D~)

PC2 PC3
q!(t) + status(t) Giám sát & Hiển
MCH Core
thị

PC2-UKB

PC5
q!*(t) Tính toán tọa q*(t)
độ bắn đón
q*(t) = H packet
PC5-UKB
= (xy,yy,zy,x*,y*,z*, By,φ,τy, status{})

PC6
q#(t) Pháo
Motion Control

q!*(t) = K packet
= (x!,y!,z!,Vx!,Vy!,Vz!,
Bm,Em,Dm,Kh,Ho,status{})
Rada
Gói tin "K"
GIAO DIỆN PC5-HMI

Lượng sửa đường đáy


Thiết lập Góc bắn Tham số chiến đấu
MCH - Trận địa
Kh Ho
DП βП εП βtrái βtrái βphải βphải
Пx Пy ПH εtrái εtrái εphải εphải Lượng sửa Kφ: Kφ KBφ

Lượng sửa đường đáy


Rada - Trận địa

DП βП εП
Пx Пy ПH

Lượng sửa gió W: W βw βw


Bảng tra cứu Đèn báo Đèn báo
Lượng sửa mật độ P %P
không khí (theo H)

Lượng sửa Vo: Vo %Vo

Lượng sửa To: To %To

Lượng sửa Mo: Mo %Mo

Cập nhật lượng sửa theo Công tắc bắn tránh Công tắc dừng khẩn cấp
độ cao (pháo quay lệch 180o) (tất cả dừng tại chỗ)

PC5-UKB
PC4
Máy chỉ huy

status(t)
q!(t) + q~(t)
status(t)

B B(t)
E E(t) +
D D(t)

Bắt mục tiêu Bám mục tiêu


E,B=1-20/vòng (E,B buông ZIP)

C/tắc động cơ điện C/tắc ZIPb C/tắc ZIPe


chuyển động (TT3) (TT3) (TT2)

B Bắt mục tiêu Mục tiêu ổn định Bám mục tiêu B~


PC1
Máy phát E Bắt mục tiêu Mục tiêu ổn định Bám mục tiêu E~
PC2
tham số mục MCH Core
tiêu chuẩn D Bám mục tiêu D~
Bắt mục tiêu Mục tiêu tốt

PC4
Khoá chuyển
C/tắc ZIPd
động cự ly
(TT2)
(TT2)
Mục tiêu tốt
(D buông ZIP)

D=800m/vòng D=300m/vòng
PC3
Giám sát & Hiển
thị

q!(t) + q~(t) + status(t)


B B~(t)
E E~(t) +
D D~(t)

C(t)

UKB Motion Control

B~ Bm Vxp By
By
E~ q~(t) Em Vyp Ey
φ
D~ Dp Vzp Ty

Wb, We, Vdp δ


TT1
Vào vị trí

Khống chế các đèn báo phần


Tay quay tử, đèn báo hiệu sang ra đa
cự ly

Khống chế việc tính toán các


Khóa chuyển phân lượng tốc độ mục tiêu.
động cự ly
Khống chế việc tính toán độ
cao và lượng hiệu chỉnh độ
cao máy chỉ huy K6-60H. - Khống việc
Khống chế tốc độ chuyển tính toán các phân lượng
động cự ly: tốc độ mục tiêu.
“bắt mục tiêu" = 800m/vòng. - Khống chế việc
“làm việc” = 300m/vòng. tính toán độ cao và lượng
hiệu chỉnh độ cao máy chỉ
huy K6-60H.
Khống chế tốc độ chuyển
động cự ly: khi khoá chuyển
động cự ly đặt về vị trí “bắt
mục tiêu"- tốc độ vòng quay
cự ly là 800m/vòng. Khi đặt
về vị trí “làm việc” tốc độ là
300m/vòng.
{x,y,z}, {Vx,Vy,Vz} =>
{h0,d0,Ty0=0}

Ty2 = Ft(h1,d1)
=> {x+Vx*Ty2, y+Vy*Ty2, z+Vz*Ty2}
=> {h2,d2,Ty2}
A0
Ty3 = Ft(h2,d2)
=> {x+Vx*Ty3, y+Vy*Ty3, z+Vz*Ty3}
=> {h3,d3,Ty3}
? (ABS(d3-d2) < Epsilon)

Ty1 = Ft(h0,d0) A2
=> {x+Vx*Ty1, y+Vy*Ty1, z+Vz*Ty1}
=> {h1,d1,Ty1} A3

A1

β0

β2 y
x P

β1

O
Ty3 = Ft(h2,d2)
=> {x+Vx*Ty3, y+Vy*Ty3, z+Vz*Ty3}
=> {h3,d3,Ty3}
? (ABS(d3-d2) < Epsilon)

Ty2 = Ft(h1,d1)
=> {x+Vx*Ty2, y+Vy*Ty2, z+Vz*Ty2}
=> {h2,d2,Ty2}
A3
Ty1 = Ft(h0,d0)
=> {x+Vx*Ty1, y+Vy*Ty1, z+Vz*Ty1} A2
=> {h1,d1,Ty1}
A1
{x,y,z}, {Vx,Vy,Vz} =>
{h0,d0,Ty0=0}

A0
y
x P

β3

β2
β1

β0

O
delta_h hy1

h,hy

A
Ay1

Ay

h
β
βy
βy1 d

delta_By
d
y B
dy1 dy

delta_d
h

D1 = {delta_h1, delta_d1} Z1

D2 = {delta_h2, delta_d2}
Z2

Ay Aq1
delta_d A0
Ty = Ft(h,d)
{xy,yy,zy,By,Ey,Dy} Q2
{x0,y0,z0,Vx,Vy,Vz} =>
Aq1 = {) {h0,d0,Ty0=0}

Q1
Qy1 = {By-delta_d1, Ey-delta_h1, Dy}
Tq1 = Ft(h1,d1)
Start

Rs232_init(COM1)
Rs232_init(COM2)

table_init(....)
TEST Dialog

fork()
new thread
- Thời gian đạn bay
- Lượng sửa
execp() - ...

Wait Events (key,


Wait event
mouse, ..)

? exitcode ? exitcode

? COM Ready

TEST_Diagbox_read(=> ntype_packet *npack) True

Rs232_read(COM1 => string *txt)

find_gussed_coor(ntype_packet *npack
=> gussed_coor *local)
Update_packet(string *txt =>
union {ntype_packet *npack, stype_packet *spack})

TEST_Diagbox_Update(gussed_coor *gcoor)

find_gussed_coor(ntype_packet *npack
=> gussed_coor *pool)

build_packet(
(ntype_packet *npack, gussed_coor *gcoor)
=> string *buf)
Send_child(exitcode)

Rs232_write(COM2, string *buf)

Update Fired Coords struct

Exit Ay(x,y,z); By, Ty, ...


wait_child()

Exit
BMAX = 8
Buffer ofs = (npkts % BMAX) = 3
int npkts => 11

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 ...
... 5 6 7 0 1 2 ...

Real Buffer

startofs = (npkts < BMAX) ? 0 : (npks + 1 - BMAX) % BMAX)) => 4


PC5: Tính tham số bắn đón:
Cấu trúc các gói tin và tham số bắn đón

struct packet_M { struct packet_K { struct packet_H { struct packet_D {


unsigned char bstart; unsigned char bstart; unsigned char bstart; unsigned char bstart;
unsigned char bblank1; unsigned char bblank1; unsigned char bblank1; unsigned char bblank1;
unsigned type; unsigned type; unsigned type; unsigned type;
unsigned char bblank2; unsigned char bblank2; unsigned char bblank2; unsigned char bblank2;
unsigned stt; unsigned stt; unsigned stt; unsigned stt;
unsigned char bblank3; unsigned char bblank3; unsigned char bblank3; unsigned char bblank3;
short int x; short int x; short int xy;
short int y; short int y; short int yy; unsigned char Sphao;
short int z; short int z; short int zy; short int Bphao10;
short int Phiphao10;
short int Vx100; short int Vx100; short int By10;
short int Vy100; short int Vy100; short int Fhi10; unsigned char Srada;
short int Vz100; short int Vz100; short int Ty1000; short int Brada10;
short int Phirada10;
short int B10; short int B10; unsigned char FireReady;
short int E10; short int E10; unsigned char Sn; unsigned char bend;
unsigned short int D; unsigned short int D; unsigned char Sd; }
unsigned char St;
unsigned char bend; short int Kh;
} short int Ho; unsigned char bend;
}
unsigned char Snnn;
unsigned char Snpp;
unsigned char Sculy;
unsigned char Sth;

unsigned char bend;


}
K # X! Y! Z! Vx! Vy! Vz! Bm Em Dm Kh Ho ППП ПPP TD

PC2

"K" Packet
Tọa độ tương ứng với MCH

DataValid = FALSE
FireReady = FALSE
PC5: Lược đồ xử lý gói tin K,H,D
(2016-03-31)

D=sqrt(X^2+Y^2+Z^2)
d=sqrt(X^2+Y^2)
V=sqrt(Vx^2+Vy^2+Vz^2)
E=ATAN(Z/d)

D < 10000m
To
False && V < 260m/s
&& ( E > -1-00 && E < +14-50) W, Bw
? Mo
Vo
Πo
Πxyz
DataValid = TRUE
Các bảng tra lượng sửa
theo (h,d,DELTA,Ki)
(Tương ứng với PHÁO)
{x,y,z,h,d} = coor-transf() // => PHÁO

KHỐI TÍNH TỌA ĐỘ BẮN ĐÓN


delta{}=Fdelta(h,d,DELTA)
Ty = Fty(h,d,delta)
Vty = Fvty(Ty)
By=Fby(h,d,delta)
Hy=Fhy(h,d,delta)
dy=Fdy(h,d,delta)
... Catching-params
???

DataValid = TRUE
&& Ty < 15s
&& (Vty > -0.9 && Vty<3.1)
CHUYỂN ĐỔI HÊ THAM CHIẾU
{Xy,Yy,Zy}=Fxyz(Hy,dy,By)
φ=Fp1(h,d)
α=Fp2(h,d)
FireReady = TRUE
???

Filling "H" Packet


Dẻ quạt bắn
B,φ end
B,φ begin
? Dẻ quạt Tọa độ tương ứng với MCH
(By> B-begin && By < B-end) MCH{x,y,z} = coor-transf()
&& (φ> φ-begin && φ < φ-end)

No-Valid
Valid
H # Xy Yy Zy X* Y* Z* By φ Ty Sf

Sp=PAUSE Sp=MOVE

Tọa độ tương ứng với Pháo


PC3
Filling "D" Packet coor-transf() Tọa độ tương ứng với Rada

D # Sp B φ Sr B φr
Return FALSE ReturnTRUE
PC6
PC5: Lược đồ tính tham số bắn đón

// Tham số mục tiêu


struct targetinfo {
double x; double y, double z;
double B; double E; double D; double d;
double Vx; double Vy; double Vz;
struct environtinfo{} struct bulletinfo{} struct *catchinginfo
};

KHỐI TÍNH TỌA ĐỘ BẮN ĐÓN


delta{}=Fdelta(h,d,DELTA)
Ty = Fty(h,d,delta)
Vty = Fvty(Ty)
By=Fby(h,d,delta)
Hy=Fhy(h,d,delta)
dy=Fdy(h,d,delta)
...
Các bảng tra tham số bắn
Các bảng tra lượng sửa
catchinginfo{}

struct catchinginfo {
int status; // -1: not-catched;
// 0: deviation > 1m; (LOOP limit)
// >0: deviation < 1m
double deviation;

// Meeting Point
double Ty;
double Ayx; double Ayy; double Ayz;
double hy; double dy; double By;

// Shoting point
double hs; double ds; double Bs;
double Es; double Alpha;

// Correction info
double Zbtotal; double Zhtotal; double Zdtotal;
double Zbself; double Zbwpass;
double Zhvo; double Zhmass; double Zhatm; double Zhwup; double Zhtemp;
double Zdvo; double Zdmass; double Zdatm; double Zdwup; double Zdtemp;
};
PC5: Tính tham số lượng sửa
Nguồn & Cấu trúc dữ liệu

Technique Camp Preparation Technique


+ Online input

THAM SỐ LƯỢNG SỬA: ĐẦU ĐẠN THAM SỐ LƯỢNG SỬA: MÔI TRƯỜNG BẢNG TRA H,H, THAM SỐ => LƯỢNG SỬA
struct bulletinfo { struct envinfo { struct bullet_tables {
// Bullet mass and % difference with standard // Batteries Base // Bullet's Attribute Tables => value =
double mass; double baseBn; double baseEn; double baseDn; F(h,d,table)
double mass_percent; double baseXn; double baseYn; double baseZn; void *Time_table; // Time Tu
void *Elevation_table; //
// Muzzle Velocity and % difference with standard // Rada void *Zbself_table; // driff =>Zbself
double vo; // double radaBn; double radaEn; double radaDn; void *Zbwpass_table; // wind pass => Zbw
double vo_percent; // % Vo change; double radaXn; double radaYn; double radaZn;
void *Zhwup_table; // wind up => Zhwup
// Unit for change values // Atmosphere in Bar and % difference with Ph=0 void *Zhatm_table; // Atmosphere =>Zhatm
double Uw; // Unit for Wind speed (=10m/s), double atm_bar; void *Zhvo_table; // Velocity => Zhvo
double Uatm; // Unit for Atmosphre change = 1%; double atm_percent; void *Zhmass_table; // Mass => Zhmass
double Umass; // Unit for Mass change = 2/3% void *Zhtempo_table; // Temperature =>
double Uvo; // Unit for Vo change = 1% // Wind speed (m/s) & direction in Radian Zhtemp
double Utemp; // Unit for Tempo change = 1% double wind_vw;
} double wind_bw; void *Zdwup_table; // Zdwup
void *Zdatm_table; // Zdatm
// Temperature and % difference with 20oC (Kelvin) void *Zdvo_table; // Zdvo
double temp_degrees; void *Zdmass_table; // Zdmass
double temp_percent; void *Zdtempo_table; // Zdtemp
} }

H,d,By

double wpass; // W*sin(By-Bw)


double wup; // W*cos(By-Bw) Các bảng tra lượng sửa theo
Tham số mục tiêu (h,d,DELTA,Ki)
(Typing || Online) double C_atm; // Fcatm(Hy) (Tương ứng với PHÁO)
double C_wind; // Fcwind(Hy)

HÀM TÍNH LƯỢNG SỬA


TrajectoryCorrect()

LƯỢNG SỬA
// Trajectory correct infomation by (B,H,d)
struct trajcorrect {
double wpass;
double wup;

// Total Amount correction


double Zb, Zh, Zd;

// Correction by ...
double Zb_self; TỔNG SAI LỆCH (do lượng sửa)
double Zb_wpass; Zb = SUM(Zb-i);
Zd = SUM(Zd-i);
double Zh_atm; Zh = SUM(Zh-i);
double Zh_vo;
double Zh_to;
double Zh_mass;
double Zh_wup;

double Zd_atm;
double Zd_vo;
double Zd_to;
double Zd_mass;
double Zd_wup;
}
PC5: Lược đồ tính tham số bắn đón
Input: {x,y,z,Vx,Vy,Vz}; các hàm tra đặc thù (môi trường, loại đạn, ...)
Output: Ty,By,Ey, Zb,Zh,Zd, ngóc ngẩng, ...

BEGIN
x,y,z,Vx,Vy,Vz
*tables[]

Tìm điểm ngắm bắn hs,ds


Dy = sqrt(x*x + y*y + z*z) sai lệch hy,dy dưới 1.0 m
Vs = sqrt(Vx*Vx + Vy*Vy) Step2
Ey = ((dy == 0) ? (pi/2) : ATAN (hy/dy))

Zbs = Fzb (hs, ds, Bs, table[])


(Dy < 20000) && Zhs = Fzh (hs, ds, Bs, table[])
(Vs < 260) && Zds = Fzd (hs, ds, Bs, table[])
(Ey > EY_MIN) && FALSE
(Ey < EY_MAX)
?
END abs(hs + Zhs - hy) < 1
return (-1) && abs(ds +Zds - dy) < 1 False
TRUE
try = 0
ty = 0 hs = hs - (hs +Zhs - hy)
Ax = x; Ay = y; Az = z; True ds = ds - (ds + Zds - dy)

Step1 Step4 Tinh chỉnh hs,ds

ts = ty
hy = Az Ty = Fty (hs, ds, By, table[])
dy = sqrt(Ax*Ax + Ay*Ay)
By = safeATAN(Ax,Ay)
Ax = x + ty * Vx
ty = Fty (hy, dy, By, table[]) Ay = y + ty * Vy
Az = z + ty * Vz
hy = Az
dy = sqrt(Ax*Ax + Ay*By)
Ax = x + ty * Vx By = safeATAN(Ax,Ay)
Ay = y + ty * Vy Ey = safeATAN(hy,dy)
Az = z + ty * Vz Tìm điểm gần đúng
(dưới 0.5 sec)

abs(hs - hy) < 1.0


abs(ty - ts) < 0.5 && abs(ds - dy) < 1.0

TRUE
False
hy = Az
dy = sqrt(Ax*Ax + Ay*Ay) try = try - 1
By = safeATAN(Ax,Ay)

try = 0
False
?

hs = hy; ds = dy; Bs = By hs = hy; ds = dy; Bs = By Fill data


Ty = Ts
By = ATAN(Ax/Ay)
Ey=ATAN(hy/dy)
Step2 Step2 Zby = Fzb(hs, ds, By,table[])
Zey = Fe(hs, ds, By, table[])
...

Tìm điểm ngắm bắn hs,ds


END
sai lệch hy,dy dưới 1.0 m
return (try)
Lược đồ tính splines

Bảng Tọa độ & Giá trị

struct spline {
//
int pnum; // Number of points
double x[];
double y[];
double z[];

// Coeficents of lines (=pnum -1)


double A[];
double B[];
double C[];
double D[];
};
K5903pcv: cmdline & config

k5903pcv general options:


-d | --debug LEVEL Set debug level [0 - 9]; default = 3 (ERROR message only)
-v | --verbose Verbose mode (debug = 6; WARNING, ERROR)
-vvv Display/logs every things (debug = 9; INFO, WARNING, ERROR)
-q | --quite Quite mode (debug = 0)
-f | --file config File config
-h | --help Display HELP screen

File config/command interpreter syntax:


? [command] Display HELP about command
log filename Set logfile = name (default: k5903pcv.log)
include filename Load instruction from filename
set Set without argument: display ALL variables=value
set variable value Set variable with value
load TABLE filename Load table data from filename

SET command detail:


Syntax:
set variable value [values]
Where:
set angleunit {degress | lygiac} Set angle unit. Default = lygiac
set wspeed <speed> Set wind speed (m/s)
set wangle <angle> Set wind direction (degrees || Lygiac; see set angleunit)
set vo <speed> Set Muzzle Velocity (default = 960m/s)
set bmass Set bullet mass (default = 10kg)
set bmasschange Set bullet mass change in % (default = 0%)
set atmosphere <Pa> Set atmosphere (default = 101325 Pa, equivalent to 760 mmHg or 1013.25 mBar)
set temperature <T> Set temperatur to T (default = 20oC, equivelent 293.15oK)
set abase <B E D> Set base line between MCH and Artilery base
set rbase <B E D> Set base line between MCH and Rada unit

LOAD command detail:


Syntax:
load tabele filename
Where:
Bullet's flight time, angle elevated, ...
load t-table filename Bullet flight time table
load e-table filename Muzzle raised (elevated) angle table
load eplus-table filename Muzzle additional elevated angle table

Tables for self correct & wind pass


load Zbself-table filename Self correct table
load Zbwpass filename Correct by wind pass

Tables for H-correct


load Zhwup filename Correct H by wind up
load Zhvo filename Correct H by muzzle velocity change
load Zhmass filename Correct H by muzzle mass change
load Zhatm filename Correct H by air density change
load Zhtemp filename Correct H by air temperature difference with 20oC

Tables for d-correct


load Zdtemp filename Correct d by air temperature difference with 293.15oK
load Zdwup filename Correct d by wind up
load Zdvo filename Correct d by muzzle velocity change
load Zdmass filename Correct d by muzzle mass change
load Zdatm filename Correct d by air density change

You might also like