【例子介绍】
【相关图片】
【源码结构】
unit constdef;
//系统用到的一些常量、变量,函数、过程的定义pas
interface
uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ComCtrls, ExtCtrls, DB, DBTables, StdCtrls, DBGrids, Grids, Buttons;
type
//实际上,crn的数组中,一部分发给吊车的指令,不一定在执行;
//另一部分是吊车当前的状态,有可能是上一次作业的状态,是根据返回值展开的。因此,必须从概念上区分开!!!!
Trec_CraneData=record
i_crn_sts : integer; //status
s_commandstr : String; //command
i_kind : integer; //command
i_Wrk_no : integer; //command
i_ctn_type: integer;
i_fstn:Integer; //吊车的出入库站编号
i_tstn:Integer; //吊车的出入库站编号
s_Flocno:String; //command
s_Tlocno:String; //command
s_F_stano:String; //工作档的起始站点编号
s_T_stano:String; //工作档的起始站点编号
r_x0:real;
r_y0:real;
r_x1:real;
r_y1:real;
r_x2:real;
r_y2:real;
r_x:real;
r_y:real;
i_s_time:integer ;
i_s_time1:integer ;
i_s_time2:integer ;
i_r_time:integer ;
i_Errcod:Integer; //status
i_onHP:Integer; //status
end;
Trec_plc_stn_Data=record
s_dev_no : String;
s_type_mk : String;
s_term_mk : String;
i_status : integer;
i_plc_no : integer;
i_Wrk_no : integer;
i_Wrk_no1 : integer;
i_ctn_type: integer;
i_pak_mk : integer;
i_buff_count : integer;
s_from_stn : String;
s_next_stn : String;
s_t_station : String;
i_s_time:Integer;
i_t_time:Integer;
i_tr_position:Integer;
s_tr_stn : String;
s_autoing : String;
s_loading : String;
s_canining : String;
s_canouting : String;
s_fronting : String;
s_hight : String;
s_middle : String;
s_low : String;
s_inreq1 : String;
s_inreq2 : String;
s_error : String;
s_rev_dev_no : String;
i_past_time:Integer;
s_begin_mk : String;
i_req_mk :integer;
end;
const
ci_moxport_count=14 ;
ci_crn_count=10 ;
//ci_crn_count=9 ;
ci_scale_count=1 ;
ci_bcscale_count=2 ;
ci_crn_title_count=10 ;
cs_ar_crntitle : Array[0..ci_crn_title_count-1] of String
=('吊车号','吊车状态','ID号','源站','目标站','源库位','目标库位','原点否','异常代号','吊车命令');
ci_trolly_count=1;
ci_out_io_pri=10;
ci_sta_count=371 ;
ci_plc_error_count=720 ;
ci_plc_error_count1=519;
ci_plc_error_count2=96;
ci_sta_title_count=8 ;
cs_ar_statitle : Array[0..ci_sta_title_count-1] of String
=('序号','站点','ID号','自动','有物',
'可入','可出','目标');
{CRN STATUS}
ch_crn1_online = $0001;
ch_crn1_idle = $0002;
ch_crn1_error = $0004;
ch_crn1_error_tohp = $0008;
ch_crn1_hp = $0010;
{CRN1 STATUS1}
ch_crn2_manual =$0001; //手动模式
ch_crn2_auto =$0002; //自动模式
ch_crn2_online =$0004; //电脑模式
ch_crn2_manual1 =$0008; //手动中
ch_crn2_auto1 =$0010; //自动中
ch_crn2_online1 =$0020; //电脑模式中
ch_crn2_stop =$0040; //急停
ch_crn2_err =$0080; //异常
ch_crn2_can =$0100; //下命令可
ch_crn2_receive =$0200; //电脑命令正确接收
ch_crn2_storing =$0400; //入库中
ch_crn2_retriving =$0800; //出库中
ch_crn2_loctoloc =$1000; //库对库中
ch_crn2_stntostn =$2000; //站对站中
ch_crn2_moving =$4000; //移行中
ch_crn2_picking =$8000; //吊车取货阶段
{CRN1 STATUS2}
ch_crn2_put =$0001; //吊车放货阶段
ch_crn2_idle =$0002; //吊车空闲
ch_crn2_movhp =$0004; //走行原点定位
ch_crn2_lifthp =$0008; //升降原点定位
ch_crn2_movpos =$0010; //走行在定位
ch_crn2_mid =$0020; //叉牙在中间
ch_crn2_left =$0040; //叉牙在左边
ch_crn2_right =$0080; //叉牙在右边
ch_crn2_liftupppos =$0100; //升降上定位
ch_crn2_liftdownppos=$0200; //升降下定位
ch_crn2_bettrery =$0400; //PLC电力不足
ch_crn2_load =$0800; //车上有物
ch_crn2_proper =$1000; //电脑待命状态
{PLC DEVICE/STATION STATUS CODE}
ch_AUTO = $0001; { AUTO STATUS }
ch_LOAD = $0002; { load IN STATUS }
ch_canIN = $0004; { can in STATUS }
ch_canOUT = $0008; { can out STATUS }
ch_requ1 = $0010; { front }
ch_requ2 = $0020; { rear}
// ch_excep = $0040; { excep}
//以下定义的是检测成品(晋亿成品)的尺寸(高,中,低)
ch_hinch = $0100;
ch_minch =$0080;
ch_linch =$0040;
///PLC ERROR CODE///2005/11/18
ch_d1 = $0001; { }
ch_d2 = $0002; { }
ch_d3 = $0004; {}
ch_d4 = $0008; {}
ch_d5 = $0010; {}
ch_d6 = $0020; {}
ch_d7 = $0040; {}
ch_d8 = $0080; {}
ch_d9 = $0100; {}
ch_d10 = $0200; {}
ch_d11 = $0400; {}
ch_d12 = $0800; {}
ch_d13 = $1000; {}
ch_d14 = $2000; {}
ch_d15 = $4000; {}
ch_d16 = $8000; {}
{CRANE I/O TYPE}
ci_CRN_LINK = 1;
ci_CRN_RESET = 2;
ci_CRN_CLEAR = 3;
ci_CRN_HOME = 4;
ci_CRN_START = 5;
//ci_CRN_SHELF = 6;
ci_CRN_INQUIRY = 6;
ci_CRN_STORE = 7;
ci_CRN_RETRIEVE = 8;
ci_CRN_MOVE = 9;
ci_CRN_ErrorInquire = 10;
ci_CRN_STNTOSTN = 11;
ci_CRN_LOCTOLOC = 12;
{Crane Status}
ci_CRN_STS_INIT =-1;
ci_CRN_SETTING = 0;
ci_CRN_STS_IDLE = 1;
ci_CRN_STS_STORE_MOVE = 2; { STORE COMMAND }
ci_CRN_STS_RETRIEVE_MOVE = 3; { RETRIEVE COMMAND }
ci_CRN_STS_MOVING = 4; { MOVE COMMAND }
ci_CRN_STS_STORE_OK = 5;
ci_CRN_STS_RETRIEVE_OK = 6;
ci_CRN_STS_MOVING_OK = 7;
ci_CRN_STS_ERROR = 8;
ci_CRN_STS_ERROR_IDLE = 9;
ci_CRN_STS_STOP = 11;
ci_CRN_STS_STNCHG_MOVE = 12;
ci_CRN_STS_STNCHG_OK = 13;
ci_CRN_STS_LOCATION_MOVE = 14;
//ci_plc_MAX = 1;
ci_plc_Max=5;
ci_plc_MAX_QUEUE = 6;
{WORK STATUS}
ci_WRK_STORE_SETDATA = 1;
ci_WRK_STORE_SETPLC = 2;
ci_WRK_STORE_SETCRN = 3;
ci_WRK_STORE_OK = 4;
ci_WRK_STORE_UPDDB = 5;
ci_WRK_STORE_exit = 6;
ci_WRK_RETRIEVE_SETDATA = 11;
ci_WRK_RETRIEVE_SETCRN = 12;
ci_WRK_RETRIEVE_OK = 14;
ci_WRK_RETRIEVE_UPDDB = 15;
{PLC WRITE TYPE}
ci_PLC_SETID =1;
ci_PLC_SETDEST =2;
ci_PLC_SETIDDEST =3;
ci_PLC_SETerr =4;
ci_PLC_SETFORWARD =5;
ci_PLC_SETTANK =6;
ci_PLC_SETPACK =7;
ci_PLC_SETCRNERR =8;
ci_PLC_clerrequ =9;
ci_PLC_SETg_ars_sta_bid_Addr =9;
ci_PLC_SETg_ars_sta_bctn_Addr =10;
ci_PLC_SET_exit_lamp =11;
ci_dest_stano=11;
//********************************
{ASCII Code}
ci_STX=2;
ci_ETX=3;
ci_EOT=4;
ci_ENQ=5;
ci_ACK=6;
ci_LF=10;
ci_CR=13;
ci_NAK=15;
{Scale Command Type}
ci_SCALE_IDLE = 0;
ci_SCALE_READ_COMMAND = 1;
ci_SCALE_ZERO_COMMAND = 2;
ci_SCALE_TARE_COMMAND = 3;
ci_SCALE_NTGS_COMMAND = 4;
{crane Store In Buffer qty}
ci_Max_HP_In = 2;
ci_Max_TP_In = 2;
// ID_INTER = 2;
{COMUCATION I/O BUFFER SIZE}
ci_crn_MAXBUFSIZE = 4096;
ci_scale_MAXBUFSIZE=4096;
ci_MAXINCOUNT = 35;
ci_MAXOUTCOUNT = 50;
{CRANE SLEEP TIME}
ci_CRNtimeInterval=1500;
ci_CRNtimeInterval1=300;
{PLC SLEEP TIME}
ci_PLCtimeInterval=400;
ci_scaletimeInterval=500;
{DATABASE ALIAS NAME}
cs_DBName = 'ASRSDB';
{ Commucation Initial Port }
ci_PLC_Port = 5;
ci_CRN_Port = 8;
{Database Update flag}
ch_UPD_INS = $10;
ch_UPD_DEL = $20;
ch_UPD_PICK = $30;
ch_UPD_MERGE = $40;
{ }
ch_CMD_START = $100;
ch_CMD_PAUSE = $200;
ch_CMD_CLOSE = $300;
var
scalewt :real;
gi_sto_seq:integer;
gi_pick826_count,gi_pick832_count:integer;
g_ars_weight : Array[1..6] of real;
gi_asr_work: Array[1..6] of integer;
gs_stn_err_status:string; //20070414 add
gi_wrk_no:Array[1..2] of integer;
gb_crn_status:array[1..10] of boolean;
gs_111:string;
gs_dev_error_code: Array[1..ci_plc_error_count] of string;
gs_dev_error_code1: Array[1..ci_plc_error_count1] of string;
gs_dev_error_code2: Array[1..ci_plc_error_count2] of string;
gi_dev_error_code: Array[1..6] of integer;
gs_pre_str,gs_now_str :string;
gi_wrk_tag:integer;
gi_wrk_num:array[1..1] of integer;
gi_inch_tag:array[1..4] of integer; //尺寸标志 站点从小到大依次排列
gi_zhanban_tag:array[1..6] of integer;
gi_req_tag:array[1..3] of integer;
gi_status_tag:array[1..2] of string;
gs_crn_err_Addr : Array[1..1] of String[5];
gs_crn_err,gs_crn_err_pre,gs_crn_err1,gs_crn_err_pre1:string;
f_ctn_wt:real;
gi_wrk_nu:array[1..2] of integer;
gs_dev_sts:array[1..17] of string;
gi_dev_sts:array[1..20] of integer;
gs_dev_sts1:array[1..19] of string;
gi_crn_wrkno:array[1..21] of integer;
gi_dev_err :array[1..20] of integer;
gs_dev_err_last: array[1..20] of string;
gi_plc_err,gi_plc_err_back:array[1..10] of integer;
// ,gs_dev_sts1
gi_plc_stn_buff1,gi_plc_stn_buff2,gi_plca_end,g_rec_plc_stn_data_his_count:integer;
g_arr_swt: Array[1..1] of real;
gs_plc_sta_scale:array[1..2] of string;
gr_arr_swt :array[1..1] of real;
g_ari_plc_buff1,g_ari_plc_buff2,g_ari_plc_buff_count1,g_ari_plc_buff_count2 :array[1..11] of integer;
gr_swt_limit,gr_swt_limit_min:real; //磅秤的重量限制
W_sta_mach,W_stamk:array[1..500] of integer ;
gi_crn_err1,gi_crn_err2,gi_crn_err4:integer;
gi_cart650_pos,gi_cart643_pos,gi_cart752_pos,gi_cart774_pos,gi_cart908_pos,gi_cart917_pos:integer;
gi_exit_type,gi_crn8_port,gi_crn9_port,gi_crn10_port,gi_crn11_port,gi_crn12_port,gi_crn13_port,gi_crn14_port,gi_crn15_port,gi_crn16_port,gi_plce_port,gi_plcf_port,gi_plcg_port,gi_bar_port1:Integer;
g_ari_staion_plc_no,g_ari_staion_Component_seq: Array[1..600] of integer;
g_ari_staion: Array[1..ci_sta_count] of integer;
g_ari_sta_status :array[1..600] of integer;
gs_crn17_port,gs_crn_ip_now,gs_crn_ip_pre :string;
g_ari_sta_status1:Array[1..17] of integer;
gi_crn_comm_time,gi_Online_flag,gi,gi_port_crn1,gi_port_crn2,gi_port_plc1,gi_port_plc2:integer;
gs_plcthr_mess_send,gs_last_dest_stano:string;
gs_crn_manu,gs_crn_auto,gs_crn_online,gs_crn_status,gs_crn_status1,gs_crn_rows,gs_crn_lev: String;
gs_crn_manuing,gs_crn_onlining,gs_crn_autuing,gs_crn_stop,gs_crn_error,gs_crn_can :String;
gs_crn_receive,gs_crn_storing,gs_crn_retriving,gs_crn_loctoloc,gs_crn_stntostn :string;
gs_crn_moving,gs_crn_pick,gs_crn_put,gs_crn_idle,gs_crn_movhp,gs_crn_lifthp,gs_crn_movpos,gs_crn_mid,gs_crn_left,gs_crn_right,gs_crn_liftup,gs_crn_liftdown,gs_crn_bettery,gs_crn_load,gs_crn_proper:string;
gs_loc_type:array[1..371] of string;
gs_empty_mk:array[1..371] of string;
g_rec_CRNData : Array[1..ci_crn_count] of trec_CraneData;
// g_rec_CRNData : Array[1..9] of trec_CraneData;
g_rec_plc_stn_data : Array[1..600] of Trec_plc_stn_Data; //20080221
g_barcode:array[1..2] of string;
g_crn_move,g_colo_noauto,g_colo_auto,g_colo_autoload,g_colo_autoloadid,g_colo_autoid,g_colo_id,g_colo_no_id : TColor;
g_ars_PLCA_QUEUE : Array[1..ci_plc_MAX,1..ci_plc_MAX_QUEUE] of String[14];
g_ars_sta_ID_Addr,g_ars_staion_name : Array[1..ci_sta_count] of String[5];
g_ars_dev_err_Addr : Array[1..20] of String[5];
g_ars_sta_detsta_Addr : Array[1..ci_sta_count] of String[5];
g_ars_sta_status_Addr : Array[1..ci_sta_count] of String[5];
g_ars_clr_id_Addr:array[1..300] of String[5];
g_ars_sta_pre_data : Array[1..ci_sta_count] of String[50];
g_ars_sta_bid_Addr : Array[1..ci_sta_count] of String[5];
g_ars_sta_bctn_Addr : Array[1..ci_sta_count] of String[5];
g_ari_crn_pre_error,g_ari_crn_pre_error1 : Array[1..ci_crn_count] of integer;
g_ari_crn_pre_wrk_no : Array[1..ci_sta_count] of integer;
var_ars_CrnerrAddr : Array[1..5] of String[1]; //吊车的错误编码,写入到plc中
ar_Colo_back1,ar_Colo_font1: Array[1..ci_crn_count] of TColor;
g_ars_crn_lastio: Array[1..ci_crn_count] of String[1];
// g_ars_crn_lastio: Array[1..10] of String[1]; //20080802新增
gs_plc_stn_buff_addr1,gs_plc_stn_buff_addr2: Array[1..10] of String[5];
gi_last_dest_stano : integer;
g_ars_dest_stano : Array[1..ci_dest_stano] of String[5];
gs_plc_error_desc: Array[1..ci_plc_error_count] of String;
gd_start_time:Tdatetime;
function g_funi_get_station_seq(station : integer) : integer;
function g_funs_Crnsts_name(i_sts : integer) : string;
//----- PLC I/O Buffer Queue -------------------
procedure g_proc_Init_PLC_Queue;
function g_funi_PLCA_Queue_Count(k:integer) : integer;
function g_funs_Get_PLCA_Queue(k:integer) : String;
procedure g_proc_PLCA_Queue_Adjust(k:integer);
procedure g_proc_Add_PLCA_Queue(k:integer;s_Data: String);
//procedure g_proc_SetPLCA(k,i_nKind,i_nID,i_SrcStn,i_DestStn: integer);
function g_funi_htoi(s_data:string;i_len:integer):integer;
procedure g_proc_init_g_ari_staion;
function g_funs_get_last_dest_stano(station:string):integer;
function g_funi_io_buffer_Count(s_stn_no:string) : integer;
//procedure g_proc_staion_disable_plca;
function funb_strtoint_ok(s_tempStr:string) : Boolean;
function funb_strtofloat_ok(s_tempStr:string) : Boolean;
function funb_hextodec(data:string):integer;
implementation
function g_funs_Crnsts_name(i_sts : integer) : string;
//该过程里面还包含一个函数Crnsts
begin
case i_sts of
ci_CRN_STS_INIT : Result := '初始化';
ci_CRN_SETTING : Result := '设定中';
ci_CRN_STS_IDLE : Result := '空闲';
ci_CRN_STS_STORE_MOVE : Result := '入库移动';
ci_CRN_STS_RETRIEVE_MOVE : Result := '出库移动';
ci_CRN_STS_MOVING : Result := '移动';
ci_CRN_STS_STORE_OK : Result := '入库完成';
ci_CRN_STS_RETRIEVE_OK : Result := '出库完成';
ci_CRN_STS_MOVING_OK : Result := '移动完成';
ci_CRN_STS_ERROR : Result := '错误';
ci_CRN_STS_STOP : Result := '停止';
ci_CRN_STS_STNCHG_MOVE : Result := '站到站移动';
ci_CRN_STS_STNCHG_OK : Result := '站到站完成';
ci_CRN_STS_LOCATION_MOVE : Result := '库位移栽';
end;
end;
function g_funi_get_station_seq(station : integer) : integer;
var i : integer;
begin
Result := -1;
for i := 1 to ci_sta_count do
begin
if g_ari_staion[i]=station then
begin
Result := i;
break
end
end;
end;
function funb_strtoint_ok(s_tempStr:string) : Boolean;
var
i,i_len : integer;
begin
result:=false;
i_len := Length(s_tempStr);
for i := 1 to i_len do
begin
if (s_tempStr[i] >='0') and (s_tempStr[i] <='9') then result:=true
else
begin
result:=false;
exit;
end;
end;
end;
function funb_hextodec(data:string):integer;
var ls_str,cptr,hexstr:string;
nctr,rptr,nsum,li_len :integer;
k:integer;
begin
hexstr:=data;
ls_str:=trim(hexstr);
li_len:=Length(ls_str) ;
nsum:=0;
for nctr := 1 to li_len do
begin
cptr:=copy(ls_str,li_len - nctr 1 ,1);
if cptr='A' then cptr:='10'
else if cptr='B' then cptr:='11'
else if cptr='C' then cptr:='12'
else if cptr='D' then cptr:='13'
else if cptr='E' then cptr:='14'
else if cptr='F' then cptr:='15' ;
if nctr=1 then k:=1
else if nctr=2 then k:=16
else if nctr=3 then k:=256
else if nctr=4 then k:=16 * 256;
nsum:=nsum strtoint(cptr) * k;
end;
result := nsum;
end;
function funb_strtofloat_ok(s_tempStr:string) : Boolean;
var
i,i_len : integer;
begin
result:=false;
i_len := Length(s_tempStr);
for i := 1 to i_len do
begin
if ((s_tempStr[i] >='0') and (s_tempStr[i] <='9')) or (s_tempStr[i]='.') then result:=true
else
begin
result:=false;
exit;
end;
end;
end;
function g_funs_get_last_dest_stano(station : string) : integer;
var i : integer;
begin
Result := -1;
for i := 1 to ci_dest_stano do
begin
if g_ars_dest_stano[i]=station then
begin
Result := i;
break
end
end;
end;
procedure g_proc_Init_PLC_Queue;
var i ,k: integer;
begin
for k := 1 to ci_plc_MAX do
for i := 1 to ci_plc_MAX_QUEUE do g_ars_PLCA_QUEUE[k,i] := '';
end;
procedure g_proc_Add_PLCA_Queue(k:integer;s_Data: String);
var i : integer;
begin
if s_Data='' then Exit;
for i := ci_plc_MAX_QUEUE downto 1 do
begin
if g_ars_PLCA_QUEUE[k,i]='' then
begin
g_ars_PLCA_QUEUE[k,i] := s_Data;
Break;
end;
end;
g_proc_PLCA_Queue_Adjust(k);
end;
function g_funs_Get_PLCA_Queue(k:integer) : String;
var i : integer;
s_temp : String;
begin
s_temp := '';
for i := 1 to ci_plc_MAX_QUEUE do
begin
if g_ars_PLCA_QUEUE[k,i]<>'' then
begin
s_temp := g_ars_PLCA_QUEUE[k,i];
g_ars_PLCA_QUEUE[k,i] := '';
Break;
end;
end;
g_proc_PLCA_Queue_Adjust(k);
Result := s_temp;
end;
function g_funi_PLCA_Queue_Count(k:integer) : integer;
var i,Count : integer;
begin
Count := 0;
for i := 1 to ci_plc_MAX_QUEUE do
begin
if g_ars_PLCA_QUEUE[k,i]<>'' then Inc(Count);
end;
Result := Count;
end;
procedure g_proc_PLCA_Queue_Adjust(k:integer);
var i,j : integer;
s_temp1,s_temp2 : string;
begin
for j:=1 to ci_plc_MAX_QUEUE do
begin
s_temp1 := ''; s_temp2 := '';
for i := ci_plc_MAX_QUEUE downto 1 do
begin
s_temp1 := g_ars_PLCA_QUEUE[k,i];
if i > 1 then
begin
s_temp2 := g_ars_PLCA_QUEUE[k,i-1];
if (s_temp1<>'') and (s_temp2='') then
begin
g_ars_PLCA_QUEUE[k,i-1] := s_temp1;
g_ars_PLCA_QUEUE[k,i] := '';
end;
end;
end;
end;
end;
function g_funi_htoi(s_data:string;i_len:integer):integer;
var i_sum,i_tmp,x:integer;
begin
result:=0;
if s_data='' then
begin
exit;
end;
i_sum :=0;
for x := 1 to i_len do
begin
i_tmp := ord(Upcase(s_data[x]));
if i_tmp >58 then i_tmp := i_tmp-7;
i_sum := i_sum*16 i_tmp-48;
end;
result := i_sum;
end;
procedure g_proc_init_g_ari_staion;
var i,j:integer;
begin
for i := 1 to ci_sta_count do
begin
if i in [1..54] then
begin
{ g_ari_staion[i] := i 500;
g_ars_staion_name[i]:=inttostr(i 500);
if i in[1..9] then g_ars_sta_id_Addr[i] :='D000' inttostr(i);
if i in[10..54] then g_ars_sta_id_Addr[i] :='D00' inttostr(i);
g_ars_sta_status_Addr[i] :='D0' inttostr(600 i);
g_ars_sta_detsta_Addr[i] :='D0' inttostr(300 i);
g_ari_crn_pre_wrk_no[i]:=0;
g_rec_plc_stn_data[i].s_dev_no:=inttostr(g_ari_staion[i]);
g_rec_plc_stn_data[i].s_autoing :='N';
g_rec_plc_stn_data[i].s_loading :='N';
g_rec_plc_stn_data[i].s_canining :='N';
g_rec_plc_stn_data[i].s_canouting :='N';
g_rec_plc_stn_data[i].s_inreq1 :='N';
g_rec_plc_stn_data[i].s_inreq2 :='N';
g_rec_plc_stn_data[i].s_error:='N';
g_rec_plc_stn_data[i].i_buff_count:=0;
g_ari_staion_plc_no[i]:=1;
g_rec_plc_stn_data[i].i_pak_mk:=0;
if (i=345) then //尺寸
begin
g_rec_plc_stn_data[i].s_hight:='N';
g_rec_plc_stn_data[i].s_middle:='N';
g_rec_plc_stn_data[i].s_low:='N';
end; }
end;
if i in [55..229] then
begin
g_ari_staion[i] := i 545;
g_ars_staion_name[i]:=inttostr(i 545);
if i in [55..64] then
begin
g_ars_sta_id_Addr[i] :='D000' inttostr(i-55);
g_ars_sta_status_Addr[i] :='D0' inttostr(545 i);
g_ars_sta_detsta_Addr[i] :='D0' inttostr(245 i);
end;
if i in [65..154] then
begin
g_ars_sta_id_Addr[i] :='D00' inttostr(i-55);
g_ars_sta_status_Addr[i] :='D0' inttostr(545 i);
g_ars_sta_detsta_Addr[i] :='D0' inttostr(245 i);
end;
if i in [155..229] then
begin
g_ars_sta_id_Addr[i] :='D0' inttostr(i-55);
g_ars_sta_status_Addr[i] :='D0' inttostr(545 i);
g_ars_sta_detsta_Addr[i] :='D0' inttostr(245 i);
end;
g_ari_crn_pre_wrk_no[i]:=0;
g_rec_plc_stn_data[i].s_dev_no:=inttostr(g_ari_staion[i]);
g_rec_plc_stn_data[i].s_autoing :='N';
g_rec_plc_stn_data[i].s_loading :='N';
g_rec_plc_stn_data[i].s_canining :='N';
g_rec_plc_stn_data[i].s_canouting :='N';
g_rec_plc_stn_data[i].s_inreq1 :='N';
g_rec_plc_stn_data[i].s_inreq2 :='N';
g_rec_plc_stn_data[i].s_error:='N';
g_rec_plc_stn_data[i].i_buff_count:=0;
g_ari_staion_plc_no[i]:=2;
g_rec_plc_stn_data[i].i_pak_mk:=0;
g_rec_plc_stn_data[i].s_hight:='N';
g_rec_plc_stn_data[i].s_middle:='N';
g_rec_plc_stn_data[i].s_low:='N';
end;
if ((i>=230)and(i<=342)) then
begin
g_ari_staion[i] := i 545;
g_ars_staion_name[i]:=inttostr(i 545);
g_ars_sta_id_Addr[i] :='D0' inttostr(i-55);
g_ars_sta_status_Addr[i] :='D0' inttostr(545 i);
g_ars_sta_detsta_Addr[i] :='D0' inttostr(245 i);
g_ari_crn_pre_wrk_no[i]:=0;
g_rec_plc_stn_data[i].s_dev_no:=inttostr(g_ari_staion[i]);
g_rec_plc_stn_data[i].s_autoing :='N';
g_rec_plc_stn_data[i].s_loading :='N';
g_rec_plc_stn_data[i].s_canining :='N';
g_rec_plc_stn_data[i].s_canouting :='N';
g_rec_plc_stn_data[i].s_inreq1 :='N';
g_rec_plc_stn_data[i].s_inreq2 :='N';
g_rec_plc_stn_data[i].s_error:='N';
g_rec_plc_stn_data[i].i_buff_count:=0;
g_ari_staion_plc_no[i]:=3;
g_rec_plc_stn_data[i].i_pak_mk:=0;
g_rec_plc_stn_data[i].s_hight:='N';
g_rec_plc_stn_data[i].s_middle:='N';
g_rec_plc_stn_data[i].s_low:='N';
{if (i=274)or(i=282) or(i=287) or(i=310) then //得到902站点的尺寸
begin
g_rec_plc_stn_data[i].s_hight:='N';
g_rec_plc_stn_data[i].s_middle:='N';
g_rec_plc_stn_data[i].s_low:='N';
end; }
end;
if ((i>=343)and(i<=363)) then
begin
g_ari_staion[i] := i 557;
g_ars_staion_name[i]:=inttostr(i 557);
if ((i>=343)and(i<=352)) then g_ars_sta_id_Addr[i] :='D000' inttostr(i-343);
if ((i>=353)and(i<=363)) then g_ars_sta_id_Addr[i] :='D00' inttostr(i-343);
g_ars_sta_status_Addr[i] :='D0' inttostr(i 257);
g_ars_sta_detsta_Addr[i] :='D0' inttostr(i-43);
g_ari_crn_pre_wrk_no[i]:=0;
g_rec_plc_stn_data[i].s_dev_no:=inttostr(g_ari_staion[i]);
g_rec_plc_stn_data[i].s_autoing :='N';
g_rec_plc_stn_data[i].s_loading :='N';
g_rec_plc_stn_data[i].s_canining :='N';
g_rec_plc_stn_data[i].s_canouting :='N';
g_rec_plc_stn_data[i].s_inreq1 :='N';
g_rec_plc_stn_data[i].s_inreq2 :='N';
g_rec_plc_stn_data[i].s_error:='N';
g_rec_plc_stn_data[i].i_buff_count:=0;
g_ari_staion_plc_no[i]:=4;
g_rec_plc_stn_data[i].i_pak_mk:=0;
g_rec_plc_stn_data[i].s_hight:='N';
g_rec_plc_stn_data[i].s_middle:='N';
g_rec_plc_stn_data[i].s_low:='N';
{if (i=345) then //得到902站点的尺寸
begin
g_rec_plc_stn_data[i].s_hight:='N';
g_rec_plc_stn_data[i].s_middle:='N';
g_rec_plc_stn_data[i].s_low:='N';
end; }
end;
if ((i>=364)and(i<=371)) then
begin
g_ari_staion[i] := i 524;
g_ars_staion_name[i]:=inttostr(i 524);
g_ars_sta_id_Addr[i] :='D0' inttostr(i-176);
g_ars_sta_status_Addr[i] :='D0' inttostr(i 424);
g_ars_sta_detsta_Addr[i] :='D0' inttostr(i 124);
g_ari_crn_pre_wrk_no[i]:=0;
g_rec_plc_stn_data[i].s_dev_no:=inttostr(g_ari_staion[i]);
g_rec_plc_stn_data[i].s_autoing :='N';
g_rec_plc_stn_data[i].s_loading :='N';
g_rec_plc_stn_data[i].s_canining :='N';
g_rec_plc_stn_data[i].s_canouting :='N';
g_rec_plc_stn_data[i].s_inreq1 :='N';
g_rec_plc_stn_data[i].s_inreq2 :='N';
g_rec_plc_stn_data[i].s_error:='N';
g_rec_plc_stn_data[i].i_buff_count:=0;
g_ari_staion_plc_no[i]:=2;
g_rec_plc_stn_data[i].i_pak_mk:=0;
end;
end;
for i:=1 to 20 do
g_ars_dev_err_Addr[i] :='D00' inttostr(i 50);
//gi_plca_end:=22;
//根据测试的a系列的plc,好像48个应该没有问题,50不知是否可以,如果可以就要分成两段来写了
//plca出库缓存,plca,480-483
{gi_plc_stn_buff1:=11;
g_ari_plc_buff_count1[1]:=2;
g_ari_plc_buff_count1[2]:=2;
g_ari_plc_buff_count1[3]:=2;
g_ari_plc_buff_count1[4]:=3;
g_ari_plc_buff_count1[5]:=3;
g_ari_plc_buff_count1[6]:=3;
g_ari_plc_buff_count1[7]:=3;
g_ari_plc_buff_count1[8]:=3;
g_ari_plc_buff_count1[9]:=3;
g_ari_plc_buff_count1[10]:=3;
g_ari_plc_buff_count1[11]:=3;
for i := 1 to gi_plc_stn_buff1 do
begin
gs_plc_stn_buff_addr1[i] :='D0' inttostr(554 i);
g_ari_plc_buff1[i]:=0;
end;
gs_last_dest_stano:='142';
g_ars_dest_stano[1]:='132';
g_ars_dest_stano[2]:='122';
g_ars_dest_stano[3]:='411';
g_ars_dest_stano[4]:='418';
g_ars_dest_stano[5]:='415';
g_ars_dest_stano[6]:='412';
g_ars_dest_stano[7]:='409';
g_ars_dest_stano[8]:='406';
g_ars_dest_stano[9]:='403';
g_ars_dest_stano[10]:='400';
g_ars_dest_stano[11]:='142';}
//入库重量的范围
for i:=1 to ci_crn_count do
begin
g_ars_crn_lastio[i]:='Y';
end;
{gr_swt_limit:=1200;
gr_swt_limit_min:=1;
//g_arr_swt[1]:=500;
for i:= 1 to ci_plc_error_count do
begin
gs_plc_error_desc[i]:=inttostr(i);
end; }
end;
{procedure g_proc_staion_disable_plca;
var i,j:integer;
begin
for i := 1 to 80 do
begin
//i:=j 400;
g_ari_staion[i] := i;
g_rec_plc_stn_data[i 199].s_dev_no:=inttostr(g_ari_staion[i]);
g_rec_plc_stn_data[i 199].s_autoing :='N';
g_rec_plc_stn_data[i 199].s_loading :='N';
g_rec_plc_stn_data[i 199].s_canining :='N';
g_rec_plc_stn_data[i 199].s_canouting :='N';
g_rec_plc_stn_data[i 199].s_inreq1 :='N';
g_rec_plc_stn_data[i 199].s_inreq2 :='N';
g_rec_plc_stn_data[i 199].s_error:='N';
g_rec_plc_stn_data[i 199].i_pak_mk:=0;
g_rec_plc_stn_data[i 199].i_Wrk_no:=0;
g_rec_plc_stn_data[i 199].i_Wrk_no1:=0;
end;
end; }
function g_funi_io_buffer_Count(s_stn_no:string) : integer;
var Count : integer;
begin
Count := 10;
case strtoint(s_stn_no) of
//hp in
533: begin Count := g_ari_plc_buff_count1[1]-g_rec_plc_stn_data[g_funi_get_station_seq(12)].i_buff_count; end;
//16: begin Count := g_ari_plc_buff_count1[2]-g_rec_plc_stn_data[g_funi_get_station_seq(16)].i_buff_count;end;
//hp out
//6: begin Count := g_ari_plc_buff_count1[3]-g_rec_plc_stn_data[g_funi_get_station_seq(6)].i_buff_count;end;
end;
Result := Count;
end;
initialization
g_colo_autoloadid:=clred ;
g_colo_autoload :=clFuchsia ;
g_colo_autoid :=clYellow ;
g_colo_auto :=clLime ;
g_colo_noauto :=clBtnFace ;
g_crn_move :=clred ;
g_colo_id :=clBlack ;
g_colo_no_id :=clred ;
g_proc_init_g_ari_staion;
end.



评论