HIPCL – Huvud IPCL

Denna modul hanteras programmering mm av HIPCL för bl.a. rundskickning av värden mellan ducarna.

Alla kommunikationskanaler som specats under meny Channel kan användas i HIPCL. Dock är modulen främst framtagen för att hantera befintlig HIPCL kod från ett TA System7. Hur HIPCL programmeras finns att läsa i TA:s manualer. För skillnader mot denna impementation se rubrik nedan.

Normal användning

Här kan man aktivera HIPCL genom att markera kryssrutan uppe till vänster. Man kan även ange en katalog där HIPCl filerna finns . Dessutom kan en notifikationstag anges som sätts vid konvertering och återställs om konverteringen lyckas.

Vid "HIPCL fil" väljer man den HIPCL fil man vill jobba med. Filerna följer TA System7. HipcBld specar vilka ducars HIPCL filer som skall ingå i systemet. HipcMai är huvudfilen där gemensamma beräkningar görs samt anrop av de olika filerna för respektive duc. HipcXXX är respektive ducs HIPCL fil. HipcSub innehåller subrutiner. Slutligen finns även Logfil, den är endast för läsning och där sparas en logg över utförda konverteringar.

Om man ändrar i en fil och trycker på OK får man en fråga om man vill konvertera HIPCL. Vid konvertering stoppas HIPCL och alla källkodsfiler konverteras. Om konverteringen var lyckad laddas det nya HIPCL programmet i binätrformat och sedan börjar det omedelbart att köra. Om konverteringen misslyckades laddas den gamla binärfilen för exekvering. En felrapport finner du i Logfilen som hittas i slutet i "HIPCL fil" listan.

HIPCL bild

Avancerad användning

För avancerad användning finns även kommando knapp "Comman" med tillhörande inmatningsfält. Om inmatningsfältet lämnas blankt får du en kortfattad beskrivning över tillgängliga kommandon. Följande finns

KONV

Startar en HIPCL konvertering.

START

Startar en stoppad HIPCL (kan behöva köras två gånger).

STOPP

Stoppar körningen av HIPCL

MNEM

Ger en mnemoniclista över hela HIPCL programmet. Hipcl använder "omvänd polsk notation", så att t.ex. "LV(1) OR LV(2)" blir "LV(1) LV(2) OR" i mnemonicskoden. En mnemonicslista är bra att ha om man skall tolka debug utskrifter. Mnemoniclistan hamnar i fil HIPCL.mne

DEBUG [HUCx, MAI, <subnamn>, <a1> <a2>] [n]

Startar en debuggutskrift till fil HIPCL.dbg, detta kan vara em mycket krävande uppgift för programmet och bör användas sparsamt. Man kan välja att köra debuggern för en HIPCL-duc fil, hela HIPCL, en subrutin eller för ett utvalt adress omfåmng. n anger antal HIPCL-varv som debuggern skall vara aktiv. Om HIPCL hinner igen på en sekund så är det alltså antal sekunder.

[TCL, LV, NUM, PV](x[-y])[=z]

Med dessa kommandon kan de interna variablerna läsas och skrivas. Man kan läsa och skriva fler åt gången.

INIVAR <typ> [<nLV> <nNUM> <nPV>]

Sparar utvalda variabler till fil VAR.par samt sätter temporärt typ enligt rubrik Variabler nedan.

SHOWINIVAR

Ger en utskrift av VAR.par filen till debugfil HIPCL.dbg

Användning från annan dator eller annat program

Alla kommandon som anges under rubrik "Avancerad användning" kan ges till programmet via TA7Drv:s huvud UDP Server port. Kommandon skall vara en textsträng som börjar med "<FF>HIPCL <kommando><00>". Textsträngen skall alltså börja med det hexadecimala tecknet FF, följt av ”HIPCL ” samt avslutas med ett NULL tecken. <kommando> är en textsträng enligt ovan.

Man behöver även komma åt textfilerna för HIPCL och tillhörande debug och logg filer. Då kan hela HIPCL hanteringen skötas från annan dator och annat program. Speciellt lämpligt är det att ha en textredigerare som kan visa radnummer. Då blir det lättare att tolka felrapporter i HIPCL.log hitta felen i HIPCL filerna.

Variabler

Det har i TA System7 funnits ett problem vid uppstart av datorn med avseende på hur de interna variablerna LV, NUM och PV är initierade. Detta har jag försökt råda bot på genom två nya funktioner.

Som standard är alla variablerna i ett oinitierat tillstånd. Och HIPCL vägrar att beräkna uttryck och sedan skriva ett oinitierat värde till någon variabel eller I/O-punkt. Variabler som inte läses in från I/O-punkter kan ges ett initialt värde genom att deklarera dem med "CD-rader" i HIPCL källkodsfiler. De får då dessa initiala värden vid start av HIPCL och vid konvertering. Har ev variabel som används i uttryck fortfarande ett oinitierat tillstånd efter 300 HIPCL-varv, ges en varningsutskrift i loggfil TA7Hipcl.log

Nu är inte alla HIPCL program väl skrivna och ofta saknas CD-rader för specielt LV variabler. Därför har ovanstående kompletterats med en möjlighet att vid programstart (men inte vid konvertering) ladda utvalda variabler till ett förutbestämt värde. Variablerna ligger i fil VAR.par. Till denna fil kan även de utvalda variablerna sparas vid programstopp och/eller automatiskt varje måndag till fredag någon gång mellan kl 10 och 12.

Vill man ha den sistnämnda funktionen lägger man till en rad i TA7Drv.ini filen enligt:
IniVar= <typ> <nLV> <nNUM> <nPV>
Där <typ> består av summan av följande tre funktioner; 1 = Ladda VAR.par vid start, 2 = Spara till VAR.par vid stängning, 4 = Automat spar till VAR.par. Dvs värdet med 7 får man alla funktioner.
Där <nLV>, <nNUM> och <nPV> är heltalsindex för respektive variabeltyp, om t.ex. nLV är 1000 så lagras LV(1) till LV(1000) i filen VAR.par

Skillnader mot TA:s HIPCL

Förutom ovanstående så finns följande skillnader mot TA:s HIPCL version 5.0 för MicroVax.

TA7Drv versionen är något strängare på syntaxen, detta gäller bl.a. parenteser vid funktioner mm.

TA7Drv versionen STÖDJER följande: PROGRAM, END, RUN, SUBROUTINE, ARG, RETURN, CALL, RPS, PLBS, SLBS, RPU, PLB adresser, SLB adresser, DEFRPU, TIME, AND, NAND, OR, NOR, XOR, EQ, NE, NOT, SET, NET, S0, S1, C0, C1, F0, F1, AU, IN, LL, HL, OUT, FI, ILV, TC, TG, CNT, RT, TH, MV, SV, IFV, RV, TL, AOUT, +, -, *, /, =, NJ, J, IF, THEN, ELSE, IFEND, TCL, LC, LV, NUM, PV, IC, RC, CONST, >=, <=, >, <, ==, >>, <<, MAX, MIN, FILT, RAMP, SQRT, MASK, SHIFT, ABS, IFIX, FLOAT, CLOCK, DATE, CALDAY, ATX, AXT, AXTR, ARTX, AITX, ATIX, AXIT, MOR, DOFFON.

TA7Drv versionen stödjer INTE: Identifierare, ID-begrepp, Tidkanalkoppling till TCL, DO-loopar, WDAY, FCVG, MSET, MZERO, MONE, MAND, RMOVE, RINIT, SMIN, SMAX, RESTART, WRITE.

Det är lite oklart hur PLB adresser, SLB adresser fungerar i TA System7. I TA7Drv fungerar de på samma sätt som RPU framför en "duc-variabel", t.ex. "SLB(1) REG(240) MV(1) = PLB(100) GRP(25) SV(2)".

Uttryck med parenteser realiseras via "omvänd polsk notation" som i originalet.

Forceringar av logiska variabler stöds. Intern används heltalen med 32 bitars precision och flyttal är PC:s double, dvs 8 byte. Automatisk omskalning sker vid kommunikation med I/O-punkter.

Man kan även nå I/O-punkter utanför TA:s värd genom att ange dem inom situationstecken, t.ex 'Fixnod:Tagnamn'. Alla I/O-punkter som har en kanal definierad under menyn "Channel" går att använda.

De HIPCL funktioner som inte stöds i denna version är dock förberedda i programmet och kan implementeras vid behov. Dessutom är nya funktioner för läsning och skrivning av upp till 10 st SV värden förberedda. Dessa funktioner kommer att heta RIOT och WIOT med syntaxen t.ex. RIOT(10, PV(1), 'DUC1SV1').