CA1315413C - Process and device for communications real time data between a programmable logic controller and a program operating in a central controller - Google Patents

Process and device for communications real time data between a programmable logic controller and a program operating in a central controller

Info

Publication number
CA1315413C
CA1315413C CA000586076A CA586076A CA1315413C CA 1315413 C CA1315413 C CA 1315413C CA 000586076 A CA000586076 A CA 000586076A CA 586076 A CA586076 A CA 586076A CA 1315413 C CA1315413 C CA 1315413C
Authority
CA
Canada
Prior art keywords
messages
spreadsheet
mov
programmable logic
cells
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Expired - Fee Related
Application number
CA000586076A
Other languages
French (fr)
Inventor
Brooks Todd Roseman
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Schneider Electric USA Inc
Original Assignee
Square D Co
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Family has litigation
First worldwide family litigation filed litigation Critical https://patents.darts-ip.com/?family=22462976&utm_source=google_patent&utm_medium=platform_link&utm_campaign=public_patent_search&patent=CA1315413(C) "Global patent litigation dataset” by Darts-ip is licensed under a Creative Commons Attribution 4.0 International License.
Application filed by Square D Co filed Critical Square D Co
Application granted granted Critical
Publication of CA1315413C publication Critical patent/CA1315413C/en
Anticipated expiration legal-status Critical
Expired - Fee Related legal-status Critical Current

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F15/00Digital computers in general; Data processing equipment in general
    • GPHYSICS
    • G05CONTROLLING; REGULATING
    • G05BCONTROL OR REGULATING SYSTEMS IN GENERAL; FUNCTIONAL ELEMENTS OF SUCH SYSTEMS; MONITORING OR TESTING ARRANGEMENTS FOR SUCH SYSTEMS OR ELEMENTS
    • G05B19/00Programme-control systems
    • G05B19/02Programme-control systems electric
    • G05B19/04Programme control other than numerical control, i.e. in sequence controllers or logic controllers
    • G05B19/05Programmable logic controllers, e.g. simulating logic interconnections of signals according to ladder diagrams or function charts
    • G05B19/052Linking several PLC's
    • GPHYSICS
    • G05CONTROLLING; REGULATING
    • G05BCONTROL OR REGULATING SYSTEMS IN GENERAL; FUNCTIONAL ELEMENTS OF SUCH SYSTEMS; MONITORING OR TESTING ARRANGEMENTS FOR SUCH SYSTEMS OR ELEMENTS
    • G05B19/00Programme-control systems
    • G05B19/02Programme-control systems electric
    • G05B19/04Programme control other than numerical control, i.e. in sequence controllers or logic controllers
    • G05B19/05Programmable logic controllers, e.g. simulating logic interconnections of signals according to ladder diagrams or function charts
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F40/00Handling natural language data
    • G06F40/10Text processing
    • G06F40/166Editing, e.g. inserting or deleting
    • G06F40/177Editing, e.g. inserting or deleting of tables; using ruled lines
    • G06F40/18Editing, e.g. inserting or deleting of tables; using ruled lines of spreadsheets

Abstract

ABSTRACT OF THE DISCLOSURE

Add-in program instruction means operate through a general purpose spreadsheet program in a personal computer to move real-time status and control messages directly between cells in the displayed spreadsheet and addressed registers of programmable logic controllers (PLCs). The PLCs operate such as machine tools or processing stations and connect together and to an interface card in the personal computer over a network. The invention facilitates a user's real-time monitoring and control of the manufacturing performed at the machine tools or processing stations through the mathematical and logical features of the spreadsheet instruction means, which are well known and easy for the user to implement. The add-in program instruction means furnish message moving @ functions insertable into the cells, message moving menu commands selectable by the user, interrupt instructions to save, in memory mailboxes, messages initiated by the PLCs and a menu selectable dump command to move the saved messages from the mailboxes to the displayed spreadsheet cells.

Description

PhTENT

PROC~SS AND DEVI OE FOR co~MnNIcATING REAL ~I~E
DATA BET~EEN A PROGRA~ABLE LOGIC CONTROL~ER ~ND
A ~ROGRA~ OPERATING IN A CENTRAL CON~ROIIER

DESCRIPTION

Background of the Invention This invention generally relates to : programmable logic controllers that direct the automatic operation of such as machine tools, and process equipm~nt to manufacture goods and chemicals, and particularly relates to :: ~urnishing ~rue real-time control of such programmable logic controllers (PLCs) through a general purpose spreadsheet program operating in a personal computer.
Machine tools such as screw machines : have come to b~ operated automatically. This eliminates th2 cost of manual labor in operating the machine and can achieve more '~

~ 3 ~ 3 uni~orm products. The automation originally occurred by arranging relay~ to perform th~
logical functions of proceediny through a manufacturing process~ Switches sensed the mov~ment of tools relative to the work piece and caused the opening and closin~ o the relays, the relays in turn caused the ~equential selection and operation of dif~erent tool~ on the work pi~ce.
Much s~ill is reguired howev~r to design the system, to set-up the limit ~witches at the proper locations, to connect the switches to the proper relay solenoids and to connect the relay contacts to the proper motors, timers and solenoid controlled valves in achieving the automated operation.
Changing even one dimension of a part being made or one proce~s variable in a chemical reaction moreover required ~killed labor to re~wire the control switches or relays. Such systems worked well in producing large numbers of parts from a æingle set-up, but the development of manufacturing ~ewer numbers of ~: more customized par~s on one machine made the frequent change~ of the relay controlled machines too expensive.
Responsive to this ri~e in cost, PLCs replaced the relay controls. PLCs ~urnished a fixed wiring ~rom the switches, motors, and solenoid valves to a general purpose logic de~ice. This eliminated re~
wiring the controls for each different part or variation of a part to be made. The set-up for each dif~erent part or varia~ion o~ a part 3 ~ 3 ~ 3 then only required changing the lo~ical commands in the logic device. With th~ advent of the microcomputer as the logic device, changing the logical commands in the lo~ic de~ice becam~ a ~atter of re-programming the microcomputer. Skilled labor then only had to write one program to make each different part or variation of a part, and an unskilled operator then could load the different programs into the PLC as desired to make a desired par~. This substantially eliminated costly set-up for each different part; the manufacture of that part or the running of that process was fixed, however, by the ~ixed nature of the program.
The fixed nature oP the program does not always allow for varying automatic operation of thP sarew machine, for example as the material of the work piece varies, or for example as the characterist;cs of a process feedstock vary. Moreover, the ~ixed program does not allow an operator ~o vary the manufacturing or processing parameters as changes occur in the manufacturing or processing operation to achieve desired efficiencies and levels of quality.
The PLCs have been linked together in networks over co-axial cable to co-ordinate the operation of an entire manufacturing or processing plant. The:network re~uires ~eparate interface ~odules terminating each drop of the co-axial cable to perform the necessa~y handshaking for positive me~sage transfer between the addressable registers of the PLCs. These messages usually comprise status in~or~ation indicating the cvndition o~
the ~ensors and dr~ves of each machin~ tool or pro~es~ing station and control in~ormation commanding the operation of th,e drives or valves of the tool~ or stations~ The messages also can contain numerical in~Drmation indicating the number o~ part~ ~ade or the temperature or pressure of a point in a process.
A centrally lscated programming device can al~o be connected to the network to change the program or sequence of logical steps to be impleme~ted by any ~el~cted PLC on the network. Such a programming device can be a personal computer, for example an IBM or IBM-compatible personal computer, opsrating a program that displays relay ladder diagram : charts that a ~killed user develops to create desired logical steps for a PLC. The ~er~onal computer also contains a network inter~ace circuit card, connected to the co-axial cable, that handles the network handshaking~and : positive message transfer in response to commands by the personal computer written to and from accessible registexs on the circuit : card. The regist~rs of the i~ter~ace card are available ~o program~ running in the personal : computer able to access them to enable cu~tomized programs ~o send and rec~ive messages across the~ PLC network.
Programmi~g ~he PLC's over the network with tha relay ladder diagram chart program in a personal com~uter enables a programmer to change the ~et operation of a ~achine or process as desired. The operation at the personal ¢omputer, however, is still one ~tep, the programming step, removed ~rom perso~ally controlling operation of the machine to~l or process sta~ion. Any ~anufacturing chang~s desired ]by the operator must be implemented through re-programming the individual PhC.
Developing customized programs that directly enable an op~rator at a personal computer to supervise and actually control t:he automatic operation of the PLCs quickly becomes expensive due to the large amount of highly skilled la~or required. Such custom programs obtain stated in~ormation from the PLCs as it occurs and send control in~ormation in response to changes in the status in~ormation. Such in~ormation ~xchange is described as nreal tim~ to emphasiæe that there exists little or no delay in receiving the information after the information becomes ~real~ or available. The cost of updating or varying the customized programs to provide flexibility in the automated operation o~ an entire plant becomes prohibitive~ Further, varying custom programs oft~n reach~s a point where th~ cost of making the variation within the restraints of the original progra~ exceeds th~ cost of writing a new custom program. The exahangQ of ~r~al time~ information stands as ~h~ key to true operator control of the manu~acturing plant.

1 3 ~

Programs have beco~e availa~l~ that striv~ to provide thi~ real time exchange of information in controlling, ~onitoring and analyæing processes and instru.mentation. The user provides a circuit card interface betwee~
his process or instruments and the personal computer. ~he user also writes a devi~e driver pro~ram Xor the personal computer that facilitates the operating sy~tem program to communicate with the circuit card interface.
The user then install~ a commercially available information acquisition program to tran fer the desired information between the operating syste~ program and popular and commercially available spreadsheet, data base and analysis programs. The user then exercises control o~ the manu~acturing processes from th~ spreadsheet, data base or data analysis program ~hrough the information acquisition program. This, however, has some undesirable asp~cts.
From the user~s perspective, every transfer of information to and from the spreadsheet, data base or analysis program : 25 must occur through m~nu æelected keystroke commands. Sending in~ormation ~o a PLC occurs by transfers to the acquisition program, the operating system program, the device driver program, the interface card, and the network to the addressed PLC register~ Reading from addres~ed PLC registeræ requires sending a transmit com~and to the addressed PLC in the described ~ending sequence and then ~ending a read c~mmand to the acgui~ition program to yet 7 ~3~13 the transmittad infor~ation ~rom rep1y regi~ters in the interface card through the device driver program, the operating ~y~tem program and the acquisition progra~ ~ile the speed of persona1 computers reduces a.ll of the~e transfer~ to short, a1me~st unnotic~ab1e periods, there are sti11 ~ome things that cannot be done. For examp1e, the ca1cu1ation of the arguments contained in the ce11s of a spreadsheet program ca~not directly move information between addressable registers of PLC and the cells of a disp1ayed spreadsheet.
Also, writing a device driver for the interface card remains a time consumin~ and highly skilled ta~k.

Summary of the Invention The invention furnishes a program or instruction means that operates through a genera1 purpose spreadsheet program to effect in~ormation tran~fers to and from the addres~able registPrs of a PLC and assigned cells of a displayed spread~heet direct1y from the spreadshe~t program and without transfers through the op~rating system program or a specially written device driver program. This faci1itates a ~anufacturer configuring a PLC
network with a central cGntro1 of the manufacturing opsration ~rom a ~preadsheet program operating in a per~ona1 computer~
operator contro1 v~ the PLCs connected to the network occurs through the flexible and easily understood features commercia11y avai1ab1e in genera1 purpose spreadsheet programs and ~ 3 ~ 3 facilitates tru0 ~real time~ control and monitoring ojf the manufacturirlg plant directly from the displayed spreadsheet o~ the spreadsheet program.
The invention provicles single @
function WRITE commands in cells in khe displayed spreadsheet to trans;fer information contained in th~t c~ll or info~mation contained in relatively addressed cells to be written into desired and addr~ed PLC
registers. A s~ngle ~ function READ command in cells of the displayed spreadsheet causes the addressed PLC to transmit the in~o~mation contained in certain addressed register;
directly into that cell or xelatively addressed cells in the displayed spreadsheet.
These @READ and ~WRITE functions become executed simply upon recalculating the displayed spreadsheet t~ e~fect the information transfer~.
The invention also provide~ ~enu selecte~ co~mands for reading or writing blocks of information between addressed PLC
registers and ranges of cells in the di~played spreadsheet. These menu selected commands operate through the spreadsheet program free of any ac~uisition program or device driver program.
The invention also pr~ides for automatic ~torage of in*ormation transmitted to the central controller ~rom the PLCs at regular intervals or as conditions change in the PLC~. These transmissiQns from the PLCs to the central controller usually are 9 ~ 3 initiated by the PLCs. The invention ~urn.ishes an interrupt program that moves the messages received in the inter~ace circuit card to respective memory locations forming a ~ailbox for each PLC. This prevents sequential messages from one PLC from overwriting the previous message and losing the information content. Thus the ~eg~ential messages initiated from one P~C are stored by the present invention in one ~ailbox ar~a o:E
sequential memo~y locations. Under an operator selected menu command, the invention moves all of the sequential messages from each PLC into assigned ranges o~ cells in the displayed spreadsheet.
In particular, the invention involves a system for operating equipment in which a PLC proximate a machin~ tool or processinq station controls the speci~ic operation of that machine tool or proc~ssing station. The PLC also is connected to a network o~ PLCs and i~ able to receive messages that control operation of the machine tool or processing station and is capable o~
transmitting messages indicating the condition o~ the machine tool or proFessing station.
These messages are in the fvrm o~ electrical signa~s usually carried on co-axial or twin-axial cable.
~ personal co~puter or processor includes an in~er~ace circuit card electrically connected to the data, address ~nd control leads of the personal computer.
Usually this interface circuit card r~sts in lo ~ 3 ~

an expansion ~lot of the personal computQr.
The interface card connects to the network of PLCs and includes addressable registers to which the PLCs can transmit me!ssage~. The inter~ace card also inGludes command and reply registers that can respectively transmit and receive mQssages to and from the PLCs. The regis~ers of the inter~ac~ card are accessible by instructions executed in th~ personal computer.
The p~rsonal computer typically includes a visual display, a keyboard, instruction storage memory and a central processor. This central processor executes instructions, in the form of electrical signals, contained in the instruction storage memory in cooperation with characters provided to the displayed and readable by a user and in cooperation with characters received from the ~0 user through the keyboard.
This sy~tem al~o includes a general purpose spreadsheet pro~ram contained in the instruction storage memory for e~fecti~g a general purpose spread~heat program in the personal computer. This spreadsheet program causes a spreadsheet to be displayed on the visual display. The displayed spreadsheet presents cells into which the user can insert in~ormation and @ functions to execute desired arguments. m e displayed ~preadsheet also provides menu commands sele~table by the user to e~ect desired action~ in the displayed spreadsheek, but the spreadsheet pro~ram normally i~ only able to effect movement oE

11 ~3~ 3 information between defined fil~s o~ data contained in the memory and the cells.
This system further includes add in instructions ~or presenting add-in ~ ~unctions and add-in menu commandæ operating through the sprea~sheet program and displayed spreadsheet for cell contained ~ ~unetions and menu commands to move messages dire¢tly between the cells and tha i~terface card with the interface card then moving the messages across the network of P~Cs. Thi~ obtains a system in which the user can transmit ~essages controlling the operation of the machine tool or process station directly from the cells of the displayed spreadsheet to the addressed registers of a PLC and can request messages indicating the condition of the machine tool or processing station directly from the cells and receive the status information messages indicating the condition of the equipment direc~ly in the cells.
In another aspect, this system includes add in instruction means contained in the memory for presenting add-in menu commands and interrupt selected inst~uctions. These add-in menu commands and interrupt sele¢ted instructions operate throuyh the spreadsheet program for the interrupt instructions to move sequentially received massages initiated by the PLCs and received in the interface card to respective assigned address locations in memory upon occurrence of an interrupt signal generated by the interface card indi~ating receipt of such ~essages. User selection of the add-in menu command~ move the message ~rom the locations in ~mory to respectiv~ a~signed range~ of cells in the displayed pr2adshset.
~ ssa~es initiated from the PLC indicating the condition of the machine tool~, or proce~s stations thus can be saved and ~oved directly to the cells o~ the displayed ~preadsheet.
The general purpose spreadsheet program in the personal computer becomes initializ~d for operation with the message transfer from the cells of the displayed spreadsheet through a displayed initialization spreadsheet operating through the spread~heet program. Add-in in~tructions contained in the memory provide this initialization spreadsheet and care for the loading of address assignments into certain memory locations accessible by the different parts of the spreadsheet program for ef~ecting and achieving the desirQd resultO
: The invention also encompasses a s~bstrate such as a ~loppy disk ordinarily used in personal computer/ carrying the add in instructions ~or e~fecting the tran~fer of message information to ~nd ~rom the cells of the displayed spreadsheet through the spreadsheet program.
With this invention, an operator can monitor and control the operation o~ ~any PLCs on a ~real ~ime~ basis as conditions change in the ~anufacturing ~nvironment. ~he spreadshee~ program provides many ma~h~matical arguments th~t can be arran~ed to per~orm complex calculations rapidly in determ~ning ~ 3 ~

desired efficienaies and qualities of manufacturing. The ability -to obtain "real time" data and give "real time"
manufacturing commands in conjunction with these calculations for controlling large manufacturing plants achieves manufacturing control not previously available in an economical and easily understood system.
The present invention provides a system for operating equipment with at least one programmable logic controller arranged proxima-te the equipment, said programmable logic controller being capable of receiving messages to control operation of said equipment and being capable of transmitting messages indicating the condition of said equipment, said messages being in the form of electrical signals, said system comprising: processor means having a visual display, a keyboard, instruction storage memory and a central processor, sequentially for executing instructions, in the form of electrical signals, contained in said memory in cooperation at least with characters provided to said display and readable by a user and in cooperation at least with characters received from said user through said keyboard;
interface means electrically connec-ted between said processor means and said at least one programmable logic controller for transmitting messages to and receiving messages from said at least one programmable logic controller in response to messages received rom said central processor; spreadsheet `: ~

13(a) ~ 3 ~ 3 instruction means contained in said memory for effecting a general purpose spreadsheet program in said processor means, said spreadsheet means presenting cells into which said usex can insert information, @ functions that can be inserted into said cells by said user and menu commands selectable by said user to effect desired actions in said spreadsheet program, said spreadsheet means normally only being able to effect movement of information between files of data contained in said memory and said cells; and add-in instruction means contained in said memory for presenting add-in @ functions and add-in menu commands operating through said spreadsheet means for cell contained @ functions and menu commands to move messages directly between said cells and said interface means, so that said user can transmit messages controlling the operation of said equipment directly ~rom said cells to said programmable logic controller and can request messages indicating the condition of said equipment directly from said cells and receive said messages indicating the condition of said equipmen-t directly in said cells.
The present invention also provides a process of operating e~uipment with at least one programmable logic controller arranged proximate the equipment, said programmable logic controller being capabl~ of receiving messages to control operation of said equipment and being capable of transmitting messages indicating the condition of said '~`

13(b) equipment, said messages being in the form of elec-trical signals~ said process comprising: providing a processor having a visual dlsplay, a keyboard, instruction storage memory and a central processor, said providing including causing said central processor sequentially to e~ecuta instructions, in the form of electrical signals, contained in said memory in cooperation at least with characters provided to said display and readable by a user and in cooperation a^t least with characters received from said user through said keyboard;
furnishing an interface electrically connected between said processor and said at least one programmable logic controller capable of transmitting messages to and receiving messages from said at least one programmable logic controller in response to messages received from said central processor;
effecting a general purpose spreadsheet program in said processor said spreadsheet program presenting cells into which said user can insert information, @ functions that can be inserted into said cells by said user and menu commands selectable by said user to effect desired actions in said spreadsheet program, said spreadsheet program normally only being able to effect movement of information between files of data contained in said memory and said cells; and effecting add-in @ functions and add-in menu commands in s~id processor operating through said spreadsheet program for cell contained @ functions and menu commands to move messages ,i~,,~

13(c) ~ 3~ 3 directly be-tween said cells and said interface means through said central processor, so that said user can transmit messages controlling the operation of said equipmen-t directly from said cells to said programmable logic controller and can request messages indicating the condition of said equipment directly from said cells and receive said messages indicating the condition of said equipment directly in said cells.
The invention also provides a system for operating equipment with multiple programmable logic controllers arranged proximate the equipment, said programmable logi.c controllers each transmi-tting messages indicating the condition of said equipment, said messages being in the form of electrical signals, said system comprising: processor means having a visual display, a keyboard, instructivn storage memory and a central processor, sequentially for executing instructions, in the form of electrical signals, contained in said memory in cooperation at least with characters provided to said display and readable by a user and in cooperation at least with characters received from said user through said keyboard; in~erface means el~ctrically connected between said processor means and said multiple programmable logic controllers for receiving messages from said multiple programmable logic controllers, said interface means including at least one message xegister for each programmable controller and the sequential messages from each programmable controller 13(d) ~ 3 ~

being overwritten on -the preceding message in sai.d register, said interface means including interrupt means for producing an interrupt signal that interrupts the opera-tion of said central processor in response to receiving a message in any one of said receiving registers; spreadsheet instruction means con-tained in said memory for effecting a general purpose spreadsheet program in said processor means, said spreadsheet means presenting cells into which said user can insert information, and menu commands selectable by said user to effect desired actions in said spreadsheet program, said spreadsheet means normally only being able to effect movement of information between files of data contained in said memory and said cells; add-in instruction means contained in said memory for presenting add-in menu commands and interrupt selected instructions operating through said spreadsheet means for said interrupt instructions to move sequentially received messages from said receiving registers to respective assigned address locations in memory upon occurrence of each interrupt signal, and for said menu commands to move said messages from said locations in memory to respective assigned ranges of cells in said spreadsheet so that messages from said programmable logic controllers indicating the condition of said equipment can be saved and moved directly to said cells.
In another aspect the invention provides a process of operating equipment with multiple programmable logic ,~3 13(e) controllers arranged pro~imatP the ~quipment, said programmable logic controllers each transmit-ting messages indicating the condition of said equipment, said messages being in the form of electrical signals, sai.d process comprising: providing a processor having a visual display, a keyboard, instruction storage memory and a central processor, ~aid providing including causing said central processor sequentially to execute instructions, in the form of electrical signals, contained in said memory in cooperation at least with characters provided to said display and readable by a user and in cooperation at least with characters received from said user through said keyboard; furnishing an interface electrically connected between said processor and said multiple programmable logic controllers for receiving messages from said multiple programmable logia controllers, said interface including at least one message register for each programmable controller and the sequential messagss from each programmable controller being overwritten on -the preceding message in said register, said interface means including interrupt means for producing an interrupt signal that interrupts the operation of said central processor in response to receiving a message in any one of said receiving registers;
effecting a general purpose spreadsheet program in said processor, said spreadsheet program in said processor, said spreadsheet program presenting cells into which said user can 13(f) insert information, and menu commands selectable by said user to effect desired actions in said spreadsheet program, said spreadsheet program normally only being able to effect movement of information betwean files of data contained in said memory and said cells; effecting add-in menu commands and interrupt selected instructions operating through said spreadsheet program, said effecting add-in interrupt selected instructions including causing said interrupt instructions to move sequentially received messages from said receiving registers to respective assigned address locations in memory upon occurrence of each interrupt signal, and said effecting add-in menu commands including causing said menu commands to move said messages from said locations in memory to respective assigned ranges of cells in said spreadsheet so that messages from said programmable logic controllers indicating the condition of said e~uipment can be saved and moved directly to said cells.
In another aspect the invention provides a process of transmitting and receiving electrical signals forming messages to and from respective addressable registers in respective addressable programmable logic controllers that are connected together over a communica-tions network, said process comprising: connecting a general purpose processor to said communications network so that said electrical signals forming messages can be moved to and from respective reyisters in said ~, 13(~ 3 processor that are addressable from sa.id communications network and accessible from said processor; loading a spreadsheet program in-to said general purpose processor, said spreadsheet program presenting cells into which information can be inserted to facilitate executing actions through said spreadsheet program, said spreadsheet program being capable of accessing said registers in said processor through said actions; inserting in at least one cell information including the address of a particular register in a particular programmable logic controller to whiah a message is to be sen-t and indica-ting the content of said message; and executing an action in said spreadsheet program to cause said spreadsheet program to transmit said message from said cell through said registers in said processor to said particular register in said particular programmable logic controller.
In another aspec~, the invention provides a device for transmitting and receiving electrical signals forming messages to and from respective addressable regis-ters in respective addressable programmable logic controllers that are connected together over a communications network, said device comprising: processor means connected to said communications network for moving said electrical signals orming messages to and ~rom respective registers in said processor means, said respective registers being addressable from said communications network and accessible from said processor 13(h) ~ 3 ~

means; spreadsheet means contained in processor means, said spreadsheet means presenting a spreadshee-t of cells into which information can be inserted to facilitate eKecuting actions through said spreadsheet means, said spreadsheet means being capable of accessing said registers in said processor means through said actions; means for inserting in at least one cell information including the address of a particular register in a particular programmable logic controller to which a messa~e is to be sent and indicating the content of said message; and means for executing an action in said spreadsheet means to cause said spreadsheet means to transmit said message from said cell through said registers in said processor means to said particular register in said particular programmable logic controller through said registers in said processor means.
In a further aspect~ the invention provides a system for operating equipment with at least one programmable logic controller arranged pro~imate the equipment, said programmable logic controller including addressable registers, said programmable logic controller being capable of receiving messa~es addressed to said addressable registers to control operation of said e~uipment, upon request being capable o~
transmitting addressed messages from said addressable registers indicating the condition of said e~uipment, and independently initiate transmission of addressed messages from said addressable registers indicating the condition of said 13(i) ~ 3 ~

equipment, said messages being in the form of electrical signals, said system comprising: processor means having a visual display, a keyboard, instruction storage memory and a central processor, s~quentially for executin~ instructions, in tha form of electrical signals, contained in said memory in cooperation at least with characters provided to said display and readable by a user and in cooperation at least with characters received from said user through said keyboard;
interface means contained in said processor means, said interface means including addressable message registers capable of transmitting and receiving addressed messages to and from said addressable registers in said pro~rammable logic controller and being accessibl~ by said processor means, said interface means for transmitting addressed messages to said addressable registers in said at least one programmable logic controller in response to message information received from said processor means, and or presenting to said processor means the information contained in receiving addressed messages from said addressable registers in said at least one programmable logic controller, said interface means including interrupt means for producing an interrupt signal to said processor means that interrupts the operation of said processor means in response to receiving an addressed message in any one of said message registers; spreadsheet instruction means contained in said memory for effecting a general purpose 13(j) ~ 3~

spreadsheet program in said processor means, said spreadsheet means presenting a spreadsheet having cells into which said user can insert information, @ functions that can be inserted into said cells by said user to effect desired actions in said spreadsheet program, and menu commands selectable by said user to effect desired actions in said spreadsheet program, said spreadsheet means normally only being able to effect movement of information between files of data contained in said memory and said cells; and supplemental instruction means contained in said memory for operating through said spreadsheet means to move messages directly between said cells and said addressable registers in said at least one programmable logic controller through said interface means, so that sald user can transmit addressed messages controlling the operation of said equipmen-t directly from said cells to said addrPssable registers in said programmable logic controller, can request messages from said cells indicating the condition of said equipment, and can receive in said cells said messages initiated by said programmable logic aontroller indicating the condition of said equipment.
In another aspect of the invention, ~here is provided a system for operating equipment with at least one programmable logic controller arranged proximate the equipment, said programmabl~ logic controller including addressable registers, said programmable logic controller 13(k3 being capable of receiving messages addressed to said addressable registers to control operation of said equipment, upon request being capable of transmi-tting addressed messages from said addressable registers indicating the condition of said equipment, and independently initiate transmission of addressed messages from said addressable registers indicating the condition of said equipment, said messages being in the form of electrical signals, said system comprising: processor means having a visual display, a keyboard, instruction s-torage memory and a central processor, sequentially for executing instructions, in the form of electrical signals, contained in said memory in cooperation at least with characters provided to said display and readable by a user and in cooperation a-t least with characters received from said user through said keyboard; interface means contained in said processor means, said interface means including addressable message registers capable of transmitting and receiving addressed messages to and from said addressable registers in said programmable logic controller and being accessible by said processor means, said interface means for transmitting addressed messages -to said addressable registers in said at leas~t one programmable logic controller in response to message informa-tion received from said processor means, and for presenting to said processor means the information contained in receiving addressed messages from said addressable registers in said at leas-t one ' '' , 13~1) ~ 3 ~ 3 programmable logic controller, said interface means including interrupt means for producing an interrupt signal to said processor means that interrupts the operation of said processor means ln response to receiving an addressed message in any one of said message registers; spreadsheet instruction means contained in said memory for effecting a general purpose spreadsheet program in said processor means, said spreadsheet means presenting a spreadsheet having cells into which said user can insert information, @ functions that can be inse:rted into said cells by said user to effect desired actions in said spreadsheet program, and menu commands selectable by said user to effect desired actions in said spreadsheet program, said spreadsheet means normally only being able to effect movement of information between files of data contained in said memory and said cells; add-in @ function instruction means contained in said memory, said @ function means providing add-in @
functions that can be inserted in the cells of said spreadsheet to address messages to and from said addressable registers in said at least one programmable controller~ said @
function means for operating through said spreadsheet means to move messages directly between said cells and said addressable registers in said at least one programmable logic controller through said interface means; add-in menu command instruction means contained in said memory, said menu means providing menu commands that use 0~",,,,~
,~

13(m) information inserted in the cells of said spreadsheet to address messages to and from said addressable registers in said at least one programmable controller, said menu means for operating through said spreadsheet means to move messages directly between said cells and said addressable registers in said at least one programmable logic controller through said interface means; interrupt instruction means contained in said memory for moving sequential controller initiated messages to respective assigned address locations in said memory upon presentation of said interrupt signal to said proaessor means to save said initiated messages; dump instruction means contained in said memory for operating through said spreadsheet means to move said stored controller initiated messages from said locations in memory to respective assigned cells in said spreadsheet, so that m~ssages initiated from said programmable logic controller indicating the condition of said equipment can be saved and moved directly to said cells;
and initialization instructions means contained in said memory, said initialization means providing a spreadsheet initialization screen in which initialization information can be inserted to indicate the address location of said interface means in said processor means and to indicate the addresses of said message registers by whlch said addressable registers in said programmable logic controller send messages to said message registers, said initialization means for operating 1~J

13(n) ~ 3~5~

through said spreadsheet means to make available said initialization information to said spreadsheet means, said @
function means, said menu means, said interrup-t means and said dump means.
In another aspect of the inventior there is provided a structure for use in controlling a system that operates equipment with at least one programmable logic controller arranged proximate the equipment, said programmable logic controller including addressable registers, said programmable logic controller being capable of receiving messages addr~essed to said addressable registers to control operation of said equi~ment, upon request being capable of transmitting addressed messages from said addressable registers indicating the condition of said equipment, and independently initiate transmission of addressed messages from said addressable registers indicating the condition of said equipment, said messages being in the form of electrical signals, said system including: processor means having a visual display, a keyboard, instruction storage memory and a central processor, se~uentially for executing ins-tructions, in the form of electrical signals, contained in said memory in cooperation at least with characters provided to said display and readable by a user and in cooperation at least with characters received from said user through said keyboard; interface means contained in said processor means, said interface means ~ 3 ~ 3 including addressable message registers capable of -transmitting and receiving addressed messages to and from said addressable registers in said programmable logic controller and being accessible by said processor means, said interace means for transmitting addressed messages to said addressable regist4rs in said at least one programmable logic controller in response to message inormation received from said processor means, and for presenting to said processor means the information contained in receiving addressed messages from said addressable registers in said at least one programmable logic controller, said interface means including interrup-t means for producing an interrup-t signal to said processor means that interrupts the operation of said processor means in response to receiving an addressed message in any one of said message registers; spreadsheet instruction means contained in said memory for effecting a general purpose spreadsheet program in said processor means, said spreadsheet means presenting a spreadsheet having cells into which said user can insert information, @ functions tha-t can be inserted into said cells by said user to effect desired actions in said spreadsheet program, and menu commands selectable by said user to effect desired actions in said spreadsheet program, said spreadsheet means normally only being able to effect movement of information between files of data contained in said memory and said cells; and said structure comprising: substrate means ~' 13(p) ~ 3 ~

for carrying instruction means, said substrate means being adapted to transfer said instruction me.ans to said memory of ; said processor means for operating said instruction means in said processor means; and supplemental instruc~ion means carried on said substrate means and adapted to opera-te in said processor means through said spreadsheet means -to move messages directly between said cells and said addressable registers in said at least one progxammable logic controller through said interface means, so that said user can transmit addressed messages controlling the operation of said equ:ipment directly from said cells to said addressable registers in said programmable logic controller, can request messages from said cells indicating the condition of said equipment, and can receive in said cells said messages initiated by said programmable logic controller indicating the condition of said equipment.
In another aspect of the invention, thera is provided a structure for use in a system that operates equipment with at least one programmable logic controller arranged proximate the equipment, said programmable logic controller including addressable registers, said programmable logic controller being capable of rQceiving messages addressed to said addressable registers to control operation of said equipment, upon request being capable of transmitting i addressed messages from said addressable registers indicating ' , 13(q) the condition of said e~uipment, and independently initiate txansmission of addressed messages from said addressable registers indicating the condition of said equipment, said messages being in the form of electrical signals, said sy~tem including: processor means having a visual display, a keyboard, instruction storage memory and a central processor, sequentially for executing instruations, in the form of electrical signals, contained in said memory in coopsration at least with aharacters provided to said dlsplay and readable by a user and in cooperation at least with characters received from said user through said keyboard; interface means contained in said processor means, said interPace means including addressable message registers capable of transmitting and receiving addressed messages to and from said addressable registers in said programmable logic controller and being accessible by said processor means, said interface means for transmitting addressed messages to said addressable registers in said at least one programmable logic controller in response to message information received from said processor means, and for presenting to said processor means the information contained in receiving addressed messages from said addressable registers in said at least one programmable logic controller, said interface means including interrupt means for producing an interrupt signal to said processor means that interrupts the operation of said processor means in ~ 31~ ~13 response to receiving an addressed message in any one of said message registers; spreadsheet instruction means con~ained in sai~ memory or effecting a general purpose spreadsheet program iII said processor means, said spreadsheet means presenting a spreadsheet having cells into which said user can insert information, @ functions that can be inserted into said cells by said user to effect desired actions in said spreadsheet program, and menu commands selectable by said user to effect desired actions in said spreadsheat program, said spreadsheet means normally only being able to effect movement of information between files of data contained in said memory and said cells; and said structure comprising: substrate means for carrying instruction means, said substrate means being adapted to transfer said instruction means to said memory of said processor means for operating said instruction means in said processor means, add-in @ function instruction means carried on said memory, said @ function means being adapted to provide add-in @ functions that can be inserted in the cells of said spreadsheet to address messages to and from said addressable registers in said at least one program~able controller, said @ function means being adapted for operating through said spreadsheet means to move messages directly between said cells and said addressable registers in said at leas-t one programmable logic controller through sald intarface means; add-in menu command instruction means carried ~"~

13(5) on said substrate means, said menu means be:ing adapted to provide menu commands that use information :inserted in the cells of said spreadsheet to address messages to and from said addressable registers in said at least one programmable controller, said menu means being adapted for operating through said spreadsheet means to move messages directly between said cells and said addressable registers in saicl at least one programmable logic controller through said interface means; interrupt instruçtion means carried on said suhstrate means and adap-ted for moving sequential controller initiated messages to respective assigned address locations in said memory upon presentation of said interrupt signal to said processor means to save said initiated messages, dump instruction means carried on said substrate and adapted for operating through said spreadsheet means to move said stored controller initiated messages from said locations in memory to respective assigned cells in said spreadsheet, so that messages initiated from said programmable logic controller indicating the condition of said equipment can be saved and moved directly to said cells; and initialization instructions means carried on said substrate means, said initialization means being adapted to provide a spreadsheet initialization screen in which initialization information can be inserted to indicate the address location of said in-terface means in said processor means and to indicate the addresses of said message 13(t) ~ 3 registers by which said addressable registers in said programmable logic controller send messages to said mesæage regis~ers, said initialization means being adapted for operating through said spreadsheet means to make available said initialization information to said spreadsheet means, said ~ function means, said menu means, said .interrupt means and said dump means.
In another aspect of the invention, there is provided a structure for use in a system that operates equipment with at least one programmable logic controller arranged proximate the equipment, said programmable logic controller being capable of receiving messages to control operation of said equipment and being capable of transmitting messages indicating the condition of said equipment, said messages being in the form of electrical signals, said system including: processor means having a visual display, a keyboard, instruction s-torage memory and a central processor, sequentially for executing instructions, in the form of electrical signals, contained in said memory in cooperation at least with characters provided to said display and readable by a user and in cooperation at least with characters received from said user through said keyboard; interface means electrically connected between said processor means and said at least one programmable logic controller for transmitting messages to and receiving messages from said at least one ~3 13(u) ~ 3~ 3 programmable logic controller in response to messages received from said cen-tral processor; spreadsheet instruction means contained in said memory for effecting a ye:neral purpose spreadsheet program in said processor means, said spreadsheet means present~ng cells into which said user can insert information, @ functions that can be inserted into said cells by said user and menu commands selectable by said user to efect desired actions in said spreadsheet program, said spreadsheet means normally only being able to effect movement of inEormation between files of data contained in said memory and said cells; and said structure comprising: substrate means for carrying instruction means, said substrate means being adapted to transfer said instruction means to said memory of said processor means for operating said instruction means in said processor means; and supplemental instruction means carried on said substrate and adapted for opera-ting through said spreadsheet means to move messages directly between said cells and said at least one programmable logic controller through said interface means, so that said user can transmit addressed messages controlling the operation of said equipment directly from said cells to said programmable logic controller, and can receive in said cells said messages transmitted by said programmable logic controller indicating the condition of said equipment.

13(v) ~ 3 ~ 3 Brief Description of the Drawinqs Figure 1 is a schamatic block diac;ram of a PLC
system connected -to a personal computer with add-in program of the invention operating with a general purpose spreadsheet program to furnish real time message transfers between the network and the spreadsheet program;
Figure 2 is a schematic block diagram of the system of the invention in more detail than depicted in Figure 1, Figure 3 is a schematic block diagram of three aspects of the add-in program of the invention;
Figure 4 is a diagram of the menu commands provided through the add-in program of the invention;
Figure 5 is a schematic block diagram of the interaction between the hardware of a personal computer and the program instructions of a spreadshaet program including the invention to move received messages to assigned memory locations in a mailbox area and to dump messages stored in .

~ 3 ~ 3 the mailbox m~mory locatio~s 1;nto assigned ranges o~ c~ in the spread~h~et pro~ram, Figure 6 is a ~chematie block diagram depicting the interac1;ion ~tween the hardware of a personal computer and a preadsheet program including the in~fention executing an @READ ~unction to read information from an addressable regi~ter in a PLC to a desired cell in the di~playad spreadsheet, Figure ~ is a schematic block diagram o~ the interaction between the hardware of a personal computer and a spreadsheet program including the invention executing an Q~RITE function to write information from a cell in the displayed ~preadsheet to an addressed reg.ister in a PLC;
Figure 8 is a ~chematic block diagram depicting the interaction between the : 20 hardware o~ a programmable comput~r and the menu commands o~ a spreadsheet program : including the inv~ntion to per~orm a menu selecte~ ~EAD command of reading blocks o~
information from addressed registers in a PLC
to assigned cells in the displayed spreadsheet;
Figure 9 is a schematic block diagram of the interaction b~tween the hardware of a personal computer and a spreadsheet program including the invention to per~orm a menu ~elected WRITE command of writing in~ormation from assigned cells in a diQplayed spread~heet to ~ddre~sed registers in a PLC;

Fi~ure 10 is a ~¢hematic block diagram depicting the interackion between the hardware of a personal computer and a spread~heet program including th~ invention to initialize the operatisn of the spreadsheet program in the personal computer through a display~d spre~dshe~t, Figure 11 i~ a schematic block diagram of the interaction between the hardware of a personal computer and the program instructions of the invention ~imilar to that sh~wn in Figure 5 and further emphasizi~g the date and time stamping of received messages initiated ~rom the PLCs;
Figure 12 is a schematic block diagram showing the interaction between hardware o~ a personal computer and program instructions of a spreadsheet program including the invention in initializin~
pointers to and the contents of memory locations for local variables;
Figure 13 is a schematic block diagram depicting the organization for the add-in in~tructions o~ the inventivn for forming the add-in file SYL.ADN; and Figure 14 is a ~chematic block diagram depicting the organization ~or the add in instructions o~ the invention for forminq the add-in ~ile SYL~F.ADN.

Description o~ the Preferred Embodiment In Figure 1, a plant network 20 o~
progra~m~ble logic controllers ~PLCs) t3 operate equipment stands connected to a 16 ~3~

personal computer 22 through a circuit card interface 24. The personal computer 2Z
operates a general purpose spreadsheet program 26 that has no a~îlity to get or gi~e real time messages over the plant network of PLCs~
This spreadsheet program can be such as LOTUS
1-2~3*available ~rom ~otu Development Corporation, Cambridge, ~assaLchusetts. The in~ention furnishes an add in program 28 that operat~s through th~ general purpose spreadsheet program 26 to e~geck real time message transfers between the plant network of PLCs 20 and cells o~ the spreadsheet program 26. The transfer o messages through the ~preadsheet program to the circuit card int~x*ace is depicted by double arrowheaded conductors 30 diagra~natically indicating the ~essage trans~er path, a~d the connection between the plant network 20 and the circuit card 24 is depic~ed by conductors 32.
In constructing this system 18, the user interconnects all o~ th~ PLCs with desired co-axi~l or twin~axial wires ~nd constructs and arran~es all the PLCs to effect positive messaye trans~er between addrsssed registers of the P1Cs. The user then obtains an interface circuit card 24, and installs it in an expansion slot of a personal computer 22. The interface card 24 then becomes co~nected to the network 20 and is assi~ned ~uitable network addresse~ The user then load~ the general purpose spreadsheet program into the perso~al comput~r using disk drive~
as desired and ~inally loads the add in * Trade-mark " ~

17 ~ 3 ~

program 28 o~ the inv~ntion :into the program ~ile~ of the spr~adsh2et program.
The owner o~ the spread~heet proyram known as LOTUS 1-2~*has provided suitable instructions in the spreadsheet program for accepting the add-in program disclo ed herein.
The develop~r of the LOTUS 1~-2-3*program also commerc,ially sell~ progra~ instructions under the trademaxk LOTUS Developer Tools*used by the inventor of ~he pre~ent invention to e~fect ~he op~ration he desired. The LOTUS
Developer Tools*instruction program ~nablas a progra~m~r to develop instructions that extend or enhance the capability o~ the spreadsheet program and to create new ~ functions to be implem~nted in a LOTUS 1-2-3*spreadsheet. The pxogram instructions of the LOTUS DevelopPr ~ools*program~ form no part o~ the invention herein but were u~ed to develop the program instruction~ used in the in~ention. After all o~ this preliminary construction and arrangement of the hardware and program instructions, the user stands ready to program the P~Cs and control the operation of ~he machine tools and process stations that they op~rate.
In Figure 2, ~he plant network 20 interfacP assembly 34 connects to conductors 32 and is assigned address 45. PLC 36 conn~cts to inter~ac~ assembly 34 to operate machina 38 and i~ assigne~ addre~s 045. PLC
40 also connects to inter~ace assembly 34 to operate machine 42 and is assigned address 145. Int~rface assembly 34 likewise connects Trade-~ark to conductors 32 and is assigned address 22.
PLC 46 connects to intexface a~se~bly 44 to operate machine 48 and i8 assigned address 022. PLC 50 connects to interface a~se~bly 44 to operate machin~ 52 and is as~igned addre~s 122. Interface aæsemblies 34 and ~4 thus provide hardware connection~ t:o the co-axial or twin-axial conductors 32 and provide the two least signi~icant number in the addresses for the PLCs 36, 40, 46 and 50. Conductors 32 connect to interfac~ circuit card 24 at connector 54. In this ~ystem, interface card 24 has been assigned addr 5S 009 ~or purposes of explanation. Interface card 24 also can connect to an auxiliary or local PLC 56 through conductors 58 and connector 60. PLC
56 has been a~signed 107 and is similar in construction and designed to PLCs 36, 40, 46 and 50. PLC 56 contains ~ensor and control regi~ters 62 that connect to ssnsors 64, controls 66 and machine under control 68. The connections b~tween PLCs 36, 40, 46 and 50 to their respective machines parallel khe connection between P~C 56 and machine 58. PLC
S5, it~ machine under control 68 and the connection to interface card 24 de~ine what can be called a local system 70.
Interface card 24 includes command, replay and receiving register~ 72 and can produce a~ interrupt signal on leads 74 unde.r condi$ions to be described~
Personal computer 22 includes RAM
memory 76 that contain~ the spreadsheet program 26, the add-in 28, ~ailbox memory location~ 78 and pointer to local variables memory location 80.
Spreadsheet program 26 pre~ents cells, menu driven commands and ~ ~unctions that can be inserted in the cells. Add-in program 28 present three features: ~enu co~mand~ to initialize the features for moving messages bet~een the cells and the PLC
re~isters, block moves of information between the cells and the PLC registers, fixed and ~loati~g point inf~rmation formats and dumping the contents of the mailbox memory locations to assigned cells in the spreadsheet;
~unctions to move messages betwe~n the spreadsheet cells and the PI.~ regi~ters, and to perform logical operations; and interrupt driven information tran~ers from the interface card register~ to corresponding m~mory locations in the mailbox area of the RAM memory 76. The add-in program 28 al80 i~cludeæ memory locations 82 for local variables used in effec~ing the message transfers through the spreadsheet program 26.
Personal computer 22 also includes an operator u~abl k~yboard 84, a visual display 86, a disk drive 88 that can receive a disk 90 carrying the spreadsheet program 26 or t~e add-in program 28. Disk 90 comprises a substrake capable of carrying program instructions in the form o~ such as magnetic bit~ ~ut could be any other kind o~ substrate desired to carry the proqram instructions for loading into the memory 9~ the personal cQmputer.

~o ~.3~

It will be under~tood that in the arrangement depict~d in Figure 2, the add-in program 28 operates throuqh the spreadsheet program 26 to per~orm the ind.icated message transfers. After the add-in program becomes installed, the u~er operates only through sprea~sheet @ functions and ~enu co~mands to effect the message tran~fer6 1:o the address registers of the PLCs. Altertlatively, the plant network 20 of PLCs and the local system~
70 can be arranged as de~ired to operate de~ired machine tools and process stations.
Referring to Figure 3, add-in program 28 provides menu commands 92 that the user enters through a keystroke of ALT-F7 on the keyboard o~ the personal computer. The interrupt instructions 94 perform a mailbox interrupt routine identified in the source code listing herein as MAI~_INT. The interrupt instructions 94 also perform a timer interrupt routine identified in the urcs code TIMER_INT. The user selectable Q
~unctions insertable in the ~ells of the : display~d spreadsheet include ~READ, @WRITE, ~BREAD, ~B~RITE, @SYLERR7 ~MAIL, @FPREAD, @FPWRITE, ~AND, QOR, ~NOT and @TIMEOUT.
These ~ ~unctions operate with a particular format of information enclo~ed in parentheses following the ~ function command.
3G The format of information can include an addr~ss route speci~ied to be a string o nu~bers separated by commas identifying ~irst the address of ~he interface card in the personal computer and secondly ~he address o~
2~ 3 the P~ Followiny the address can be a register addre~es ~imply ~t~ted with a decimal numberO Following the register number is a count nu~ber stated as a positive decimal number to indicate the nu~ber o~ registers in addition to the identi~ied register from which in~ormation is to be read or written. Lastly, a bit number, ranging fro~ 1 t:o 16 identiies the particular bit in a partic:ular register in a particular PLC to be read to or from the cells.
With this formal of message information, the QREAD ~unction requires the addres~ and register information to read one register from the PLC device. The ~WRITE
function requires the address, register and value to be written to the i~entified register in the PLC. The values can range from 3276 to +32767. The @B~EAD function requires an address, register and bit number format to read the register and return the contents of the identified bit position to the cell. The @BWRITE function require~ the addr~ss, register, bit number and valu to write a particular bit to an addressed register. A
value of zero turns the bit off while a value not e~ual to zero turn~ the bit on. The @SYh~RR function gives the last error message produce by ~he in~erface card.
The @MAI~ unction requires no following message information a~d obtains the address of the receiving register that received the last network me~sage initiat~d by a PLC. This will be described presently.

The QFPREAD function require~ an addr~ss and register identi~ication to read one floating point register from a PL~. The regist~r must be identified with an odd number. This returns a ~loating point number to a cell. The ~FPWRITE func~ion requires an address, register and value to write on~
floating point number to two regi~ters starting at the identified register value.
The register ~ust be odd, and the value must be a floating point number in the range o~ -304E38 to 3.4E38.
The @TI~EOUT function specifies the maximum time to wait before a response is received ~rom a PhC on the network and re~uires the specification of time in seconds.
The logical functions occur in accordance with their names.
In Figure 4, the menu 98 appearing upon the user entering the keystrokes AL~-~7 comprise five commands. Initializing the local inter~acP card oper~tes through the INIT
routine in the source code. Reading a block of 12g registers from a PLC operate through the routine BLOCK .READ. Writing information to a block of 128 PLC registers operates under the routine BL~CK_WRITE. The ~loating point command operates through a sub-menu to read or write a bloc~ of 32 re~istersO Reading the block of 32 r~gisters operates through the floating polnt numbers routine F~ READ.
Writing to a blocX o~ 32 registers operates under the ~loatinq point numbers routine FP WRITE.

23 ~ 3 The mailbox command under the A~T-F7 menu operates through two nested sub~-m nus.
The ~ir~t sub-menu 102 presenks three commands. The SET com~and ~ets or assigns the mailbox memory locations 78 in th~ R~M memory 76 that receive information or data from a group oP registers in the inter~ace card 24.
The SET command æets or assigns the cell locations in the display~d spreadsheet program that are to rec~iv~ tha mailbox data or messa~es. This comm~nd operates through the routine ~AIL_SET.
~he second command under the first ~ub-menu 10~ is the DUMP command to execute the mov~ment of the contents of the mailbox memory locations from the R~M memory to the a~signed cells in the displayed spreadsheet program. The DUMP command operates under the routine MAIL_DUMP.
The third command under the first sub-menu 102 is reset and calls up a sub-sub-menu 104 with two commands in it. The ~irst command ~f the sub-sub-m~nu 104 is OUTPUT and chang~s th~ displayed spreadsheet cell - 25 locationc receiving data or in~ormation ~rom the DUMP command. The O~TPUT command operates under the routine MBR_OUTPUT. The second com~and under the sub-s~b-menu is a mailbox command. It operates to clear a speciied or as~igned ~ailbox from the memory locations in the RAM memor~7. It operates under the routine o~ MBR_MB.
The last command under the ALT-F7 menu is to quit the menu.

24 ~3~ 3 In Figure 5, network ~essages addressed to particular receiving registers 106a through 106n in interface circuit card 24 pass over conductors ~2. Sub~;tantively, the PLC5 have been progra~med to in.itiate message tran~ers to the interface circuit card at address Oo9 p~riodically or upon changes in the ~tatus of the controlled machin~ tool or process station. The initiation o~ sending the messages becomes programmed into the PLCs under operator control. Each PLC addresses a particular one o~ the receiving registers 106a through 106n for receiving the sent message.
Alternatively, the inter~ace circuit card 24 can have one receiving register to xeceive all messages initiated by the PLCs upon suitable arrangement o~ the system to insure positive receipt and protec:tion of the messages. In : thi~ ~yst m, interrupt-call program 94 ~oves the me~sag~s from the receiving registers to the respective assigned ~ailbox memory locations 78a through 78n while adding a time/date identi~ying infonmation with each me~sage. This later identifies to the spreadsheet program and the user the relative time of the status ~essage from the PLCs. In moving the me~sages ~rom the registers to the mailbox memory location, the interrupt-call program 94 will move the ~equential messages received in receiving register 106a into se~uen~ial memory loca~ions following memory locations 78a. The us~r assigned the mailbox memory locàtions 78a under control of the set mailbox loca~ion command in ~ub-menu 102 25 1 31~ 4~3 depicted in Figure 4~ Each mailbox can be as large as de~ired by the User to retain the se~uential me~sages and time/date stamp of the messages until they are ~oved into the displayed spreadsheet.
Menu selecked DUMP command 10~ can be executed when desired by the user to mo~e the con~ents of each mailbox in memory locations 78a through 78n to :re~pective ancl assigned ranges o~ cells l~Oa through llOn in displayed spreadsheet 1120 Thus the sequential mes~ages and time/date stamps in memory locations 78a comprising one mailbox are moved by the DU~P command routine 108 moving them to sequential cells llOa in ~he.
displayed spreadshee~ 112. In this manner, sequential messaqe from the PLCs received in receiving regiæter 106a ar~ transferred to the m~llbox memory los::ations 78a and then are dumped into the range ~f cells llOa.
Likewise, PLC initiated messag~s to receiving register 106n are moved under interr~pt program control to the mailbox at memory location 78n. The DUMP coIlanand routine moves the me~sages in mailbox memory location 78n into the range of cell llOn. Thi~ neatly provides organized and assigned transfer of PLC initiated messages to the displayed spreadsheet to in~ure positive message transfer to the cells and to insur~ against loss o~ PLC initiated messages.
In Figure 6, sprPadsheet program with add-in ~eatures 26, 28 identified in one block because they operate together as one 2~ ~3~

unit and ~hall be identiPied with the double rQference characters 26~ 2~. Spreadsheet program 26~ 28 present~ ano~her ~pr~adsheet screen 14 including an ~R~AD function in cell C4. In cell C4, the ~ function @READ (~route 009/ 145~, 28~ indicates to the command registers 116 that a message is to be sent acros~ the network conductors 32. The me~sage commands PLC address I45 to send the contents of its register 28 back to the inter~ace circuit card address 009, and therea~ter the message received from the PLC address 145, register 28 is to be placed in cell C4 o~ the spreadsheet screen 114. Upon calculation of the spreadsheet screen 114, or the portion of the spreadsheet screen including cell C4, this @READ command becomes executed. The spreadsheet program 26, 28 operates to tell the interface circuit card 24 to send and receive the appropriate messages through respective command r~gisters 1~6 and reply registers 118. Upon receipt of the message containing the contents of PLC address 145, register 28, the spr0adsheet program 26, 28 obtains the cont~nts o~ the reply register 118 and moves it into the cell C4 from which the user can observe the number 100.
In Figure 7, spreadsheet program 26, 28 presents another spreadsheet screen 120 having a ce~l ~4 containing an @~RITE
function. That function is @WRIT~ (~route 009, 022~, 56, 300). It indicates that inter~ace circuit card 24, address 009 is to write ~ message to PLC addres6 02~, register ~7 ~ 3 1~

56 with the message containing the ~sntents of cell E4 which is 300. Upon execut.ing the preadsheet screen 120 or that: por~lon containing cell 34, spreadshee~ program 2~, 28 conveys the necessary in~ormation to co~mand register 116 and interface circui't card ~4 to e~ect the desired messa~e. That mes~age then travels across the conductors 32 to PLC 46 having address 02~ and register 56 to insert the number 300 therein.
The ~ functions depicted in Figures 6 and 7 thus can be used upon nor~al recalculation of the spreadsheet screens 114 and 120 to transfer ~nformation between the cells of the spreadsheet screen and registers of desired PLCs. The user does not have to prompt individual message transfers and the uæer can write the mathematical and logical @
functions available in the general purpose spreadsheet progr~m 26 to establi~h procedures for automatisally controlling operations o~
such as machines 42 and 48. 5pecifically, the ~EAD function depicted in Figur~ 6 can indicate the number of ~crews manufactured on an automatic screw machin~ 42. When that nu~ber equals lO0, the mathe~atical and logical @ ~mctions inserted into such as spreadsheet screen 120 by the user can write the value 300 into PLC address 022~ register 56 to advanc~ a conv~yor ~achine 48 to the next work station.
In Figure 8, spreadsheet program 26, 28 presents another spreadsheet screen 122 used in coniunction with the menu selected 28 ~3~ 3 READ co~mand 124 to read a block o~ PLC
registers into a range o~ cells in ~preadsheet 122. The READ command 124 ~ir~t pro~pt~ the u~ar to enter the route, register and count range of PLC registers to be read, re~pectively in cells A2, B2 a.nd C2. Thus the me~sage route is 009, 145. The register to read starts at register 2d, and the ran~e of PLC registers thereafter is three. The ~EAD
command 124 also pro~pts the user to enter the DUtpUt range of cells to receive the contents of the PLC registers. In spreadsheet screen 122, the user has en~ered the cells to be A5, B5 and C5. Upon executing the menu RE~D
command 124, æpreadshe~t program 26, 28 move~
appropriate message information to command registers 116 which ~ends appropriate messages over conductors 32. PLC 40 having addres~ 145 receives the READ command and transmits message~ containing the contents of regis~ers 28, 29 and 30 back to the interface circuit card 24 having addre~s OOg. Sub tantively, registers 28, 29 and 30 in PLC 40 can represent the status of screw machine 42.
When reply regist~rs 118 receive the messages containin~ the contents of register~ 28, 29 and 30, spreadsheet program 26, 28 moves the : info~mation content ther~of respectiv21y into cells A5, B5 and C5.
~ In Figure 9, preadsheet program 26, 28 presen~s a new spr~adsheet screen 126 used to ~rite a block of data to the regi~ter~ of a PLC. The menu selected write command 128 ~irst prompt~ the user to enter the route, ~ 3 ~ 3 registsr and count range o~ the PLC registers to be written to. Thi~ info~ation contained in spr~adsheet screen 126, cells ~2, B2 and C2 r~spectively. ~he ~RITE command 128 also pro~pts the user to enter the range o~ cells, the contents of which are to be writtQn to the PLC registers. This informat:ion is contained respectively in cells A5, B5 and C5O Upon exec~ting the WRITE command 12~, epreadsheet lo program 2~/ 28 moves th~ appropriate in~ormation to command registers 116 of interface circuit card 24~ Interface card 24 then sends khe appropriate messages across the conductors 32 to PLC 40, havin~ address 145, lS and particularly to registers 5, ~ and 7.
This information can be such as control information to control the operation of such as automatic screw machine 42.
In this manner, the menu selected ~EAD and WRITE commands can monitor the status of a machine and control its operation through menu selected commands and spreadsheet screen contained messages address and 50ntent information.
In Figure 10, spreadsheet pro~ram 26, 28 presents an initializa~ion spreadsheet screen 130 used to initialize ~ocal vaxiables and information in the int2rface circuit card 24 be~ore messages transfers can occur.
Interf~ce circuit card 24 contains dip ewitches that are user setable to assign an addr~ss of the personal computer to the r~gisters of the interface circu~t card 24.
In the ~xample depicted in Figure lO, this ~ 3 ~
3~

address is ~ele~ted to ~e CA000 expr~ssed in hexadecimalq Circuit card 24 al~o contains control information registers ~or receiving and containiny a network address 132, the number of PLCs on the network 134, the speed at which the network operates 136 and the interrupt signal 138 produced by the circuit card 24 on lead 74, previously explained.
Spreadsheet screen 130 contains respectively in cells C2 through C6 the inormation inserted by the user to initialize the spreadsheet program 26, 28 and the circuit card 24. Upon execution of a menu command, spreadsheet program 26, 28 moves this in~ormation of spreadsheet screen 130 to the circuit 24 and to two local variables memory locations 140 and 142. As depicted in Figure 10, the me~ry locations for the two indicated local variable occur within the spre~dsheet program 2~ 28 for easy access thereto. In particular, cell C9 indicates that the networX
address for card ~4 shall be 009. Cell C3 indicate~ that the number of PLCs in the networ~ is 100. Cell C4 indicates that the speed of the messages on the network i5 indicated by the code 62. Cell C6 indicates that the mailbox interrupt signal shall be number 2. These four pieces of information respecti~ely are ~oved to registers 132 through 138 and circuit card 24 upon execution of a menu s~lected ~omm~nd, such as INITIAhIæE
invoked by ALT-F7. Additionally~ cell C5 indicates that the addre~s of the circuit card 24 in the expansion ~lot of the personal 3~ 3 computer has b en set to be C.~000 and h~xadecimal, and khis in~ormation is moYed by the 6preadsheet progra~ 26, 2~ to the NIM_5EG
local variable me~ory location 140. The mailbox interrupt nu~ber 2 also is moved by the spreadsheet pro~ra~ 26, 28 to the interrupt local variable memory location 142.
The contents of cells D8 and D9 indicate to the pread~heet program 26, 28 that subseguent selections o~ the spreadsheet program in thP
personal computer auto~atically can init-ialize the spreadsheet program 26, 28 to the values indicated in cells C2 through C6 and that it can automatically attach the ~ ~unctions into the spreadsheet program 26, 28.
In Figure 11, the interrupt call program 94 operates to move messages from the interface circuit card 24 into th~ assigned mailbox ~emory locations in mailbox memory locations 78 together with the time and date information. Interrupt call 94 directly operates to move the operating system time 144 into memory location A, expressed in hexadecimal. A periodic hardware interrupt 146 occurs in the perso~al computer at regular intervals. The timer interrupt routine, TIMER_INT 148 increments a date variable and places same in a memory location 150 o~ a ~date~ variable among the local variables o~
the spread heet program 26y 28.
~reviously, a menu selected mailbox SET command 152 is us~d to effect a routine 154 that assigns memory locations for th~
mailbox and that effects a routine 156 to initialize a star*-date variable from the operatlng ~ystem date. ~outille ~56 places the ~start-date~ variable in memory loca~ion 158 of the local variables.
The operating syste~n displays the date by using an o*fset from a ~ixed date such as January 1, 1900. During the initialization of the spreadsheet program 26V 28, through the menu selected mailbox command 152, the add-in commands 28 ascertain the offset from that initial data to the present date and insert and indication of same in the ~skart-date"
variable memory location 158. Th~ operating system normally d~es not provide the date or date offset in a manner accessible ~rom the spreadsheet program with add-in features 26, 28 so instead, the invention provides the timer interrupt routine 148. This counts the periodic hardware inkerrupts occurring in the p~rsonal computer at 18 times a second to increment a ~date~ variable and place it in the memory location 150. Thus the date column o~ the memory location of the mailbox carries an off~et ~rom the initial date of the operating system to the presen~ dateO Lat~r, the menu selected dump command 108 can u~e th~
ofPset with the start-date variable properly to format the date in such as cell A3 of the displayed ~preadsheet 112. The operating system time, which is available directly from the operating system time to the ~preadsheet program with add-in f~atures 26~ 28 rests in the time column of the m~mory location o~ the mailbox and can be trans~ormed upon the effecting the menu sele~t~d D~MP command 108 to present the proper ti~e at ~uch as c~ll B3 in the displayed spreadshe~t 1.12. The date ~ormat and time for~at functia~ns b~come ~ffected through blocks 160 and 162 respectively.
As previously ~xplained, the m~nu selected DUMP command 108 moves the messages ~xom the reæp~ctive mailboxes in the memory location 7~ into the assigned output cells o~
the dispIayed spreadsheet 11~. In the d~picted example of Figure 11~ the output ranges ~ cells are A3 through E3.
In Figure 12, the add-in program 12 has been assigned to memory locations 164 and 168. These can be sequential or non-sequential as desired by the add~in features of the spreadsheet program 26. In any ev2nt, memory locations 164 contain the program named SYLAF.ADN ~or the @ function~ while me~ory locations 168 contain the program called ~YL~ADN for the menu and interrupt commands.
Memory Iocations 168 also include the memory locations 82 of the local variables such as IPC.NIM SEG, IPC.ACTIVE and IPC.TIMEOIJT_SECS.
When the spread~heet program 2 6 loads the add-in files into the memory locations, it first loads the SYL.ADN file into memory location 168. After loading, the 3 0 spreadsheet program 2 6 ex2cutes th~ start-up init rc)utine 168. That routine 168 executes block 170 to clear the pointers to the locations of the local variables con~ained in memory locations 80. Memo~y location~ 80 34 :~ 3 ~

comprises an inter-program co~munications areas containing pointers to the memory locations of loca~ variables. The me~ory location of the pointer is defined to be addresses 04F8 hexadecim~l ancl 04F~
hexadecimal, The first address carries the o~fset of the pointer while the second address carries se~ment of the pointer.
When the spreadsheet program 26 next loads the memory locations 164 with the program SYLAF.ADN, the ~tart up routine 172 contained therein sets an error if the pointers are not cleared. That occurs at block 174.
The next thing that occurs is for menu selected initialized roukine 176 under memory locations 166 to ~et the pointers to the locations o~ the local variables ~t block 178. ~he menu selected initialized routine 176 also sets the contents o~ ~he local variabl~s in block 180 as has b~en described.
. ~hereafter, menu selected function routines 182 ~et and use the contents of local variables through block 184 with the variables being contained within the file or program of SYL.ADN which also contains the ~enu selected function routine. Thus the menu selected function routines do not ~eed the o~fset pointer to the local variables but can access them directly.
The ~ function routines, however, can be located other than sequentially with the local variables and get the pointer to the local varlables through block 186. Once the ~

35 ~31~13 ~unction routines 188 have the pointers to the local variables, they can obtain the in~ormation contained therein to execute the desired message tran~ers previously described.
In Figure 13, ~aster ~ile 190 ~or the menu ~unctions SYL.ASM includes ~iles SYLI.ASM, SY~HELP.ASM t SYLINT~ASM, SYLHB.ASM, SYLMDATE.ASM, SYI~RR.ASM, SYL~DDR.ASM, and SYLFP.ASM. Thase include files perform ~unctions identi~ied in block 190. These menu function files of master file ~90 become assembled in block 192 to obtain ~he add-in file SYL.ADN in block 194.
In Figure 14, master file 196 for the @ functions includes the SYLAF.ASM file and include files SYLFPAT.ASM and SYLNORM.ASM.
The include files in master file 196 perform the identified functions. These files are : 20 assembled in block 198 to obtain the add-in file SYL~F.ADN in block 200.
me source code listing ~or the add-in program 28 of the invention comprises program pages 1-118 and is sek forth herein.
The invention ~hus achieves a user ~riendly procedure for moving in~ormation ~e~sages to and from cells in a spreadsheet program and addres~ed registers in PLCs. This provides a user with easy access to the real-time information needed to per~orm real~time control of machinery and proces~ing stations.
In the pre~erred embodiment, the PLC
network 20 is that made and sold by the Square ~ Company of Palatine, Illinois, under the SY/NET trademark of programmable logic ¢ontrollers t n~twork interface modules and SY/LINR inter~ace cards for personal computers. ~he P1Cs in this network ar~
identified with the mark SY~MAX. N~twork ~pecifications for all of this hardware and relay ladder programming inst~ctions are commercially available.
~odi~ications and variations o~ the present inventions are possible in light o~
the above teachings. It will be understood that different commercial ~ersions of spreadsheet programs may use variations of the names used herein for functions used or inserted in the cells. For example, the Q
functions can also be called ~unctions without the @ prefix. It is there~ore to be understood that within the scope of the ~ppended claims, the invention may be practiced otherwise than as specifically described~ I claim:

:

~ ~ 3. ~ 3 SYLADD~R.ASM Program Page 1 ;
;SYL~DR.ASM
;Inclllde Eile of ~ylink addresses and IPC structure.
;

. __ ter-Program Comm~cado~s structure. Po~nter to this ;structure is passed at 0000:04f8h.
S~UC
seg dw ? ;sylinksegment ac~ive dw ? ;sylinkactiv~
timeout ~cs dw ? ;timeoutvalueintimertics timeout secs dw ? ;~eout Yalue in seconds ipc struc ENDS
-- _ _ ADR PCFLAGS EQU 03FFlH

ADR RS422 EQU û3F~E3H
ADR I~ENABLEEQU 03F~H

~DR AL~TE ~au ~280~ ;
ADR ALMDAT~ EQU OQ60H
AD12. REPLY EQU 01401H
ADR WRTD~T~ EQU 004OH
ADR DATA EC;~U 003EH
ADR RO~ EQU 002CH!
ADR ~SK EQU 0027H

AI)R OPC:ODE~ EQU ~24H
-~

AD~a ERROR ~EQU 0021H
ADR SEND E35:2U 0020H

3~

~5~
SYLADDR.ASM '~ ` ~ Program Page 2 ADR WAR~(:HG EQU OaO4H
ADR ALMCHG EQlLJ QOQ3H
ADR FI,TCHG EQU 0002H
ADR UPI:~IATE EQU OOOOlEI
_~ .~

3~

1 3 1 ~ ~ 1 3 SY~ASM Program Page 3 ;SYLASM Lotus ADD-IN - SY/LINK inter~ace ;

..
INCLUr)E 123 head.asm ;bring in add-in development EQU's IN(:LUDE 123 mac.asm ;bring in 123 macros INCL~E SYLADDR.ASM ;sylinlc addresses and IPC structure startcs ..
SYL~SM local data datastart db 'START OF SYL DATA',0 old time dd 0 ;oldtimerinterrupt8vector date db 0 ;~umber of days since st~ date start date dw 119 ;Lotusformatdate time loc dd 0000046ch ;locationoftimewords drop num db 255 ;dropnumberofsylinkcard help mode db 0 ;mode of help, which screen to show interrupt db 0 ;interrupt ~umber int on db 0 ;i~terruptenabled~ag int mask db 255 ;hardwareintenablemask int test dw 0 ;testofinterrupt nim_parms db 8 ;network parameters 8 = default net size dw 100 ;size of network from spreadsheet net speed dw 62 ;speed of net from sprdsht initialized dw 0 ;flag for NIM card initialization L~it err msg db 'ErrorinitializingusingSYLlNIr,0 identifier equ 777 ;veri~r mlmber for SYLINIT.WK1 installed dw 0 ;~ag for SYL installation gen err msg db 'General bardware error',0 bread ms~g db 'Enterroute,register,countRange:',0 bread2 msg db 'EnteroutputRange:',0 bwrite msg db 'Enter Range for write data: ',0 fpwrite msg db 'Enter Range for Floating Point write data: ',0 mb e~er db 'E~ter range ~or Mailbox Reg,Couslt,Size: ',0 mb output db 'Enter Output range for first letter: ',0 regis~er dw 0 ;start register for block operations col(nt dw 1 ;h~w many to read/write ~ 31~3 SYL.ASM Program Page 4 route db 100 dup (O) ;buffer for route string cellptr col dw O ;currentcellpointerlocation cellptr row dw O
adr offset dw O ;temp ^ used for of~set in read col add dw r~w add dw O
rtag st row dw O ;range for tag for block read rtag st col dw O
rtag en row dw O
rtag e~ col dw O
ranchor dw redit dw O ;flag for edit mode wtag st row dw O ;ran~e for tag for block wri~c w~ag st col dw wta~ eu row dw O
wtag en col dw wanchor dw wedit dw O ;flag for edit mode old int dd 076543210h ;oldinterruptroutine fpdata DQ OH ;~oating point data buffer start time dw O
send flag db OfOh bu~ ptr dd O ;temp ptr to buffer notifier db 'START OF MB BUFFERS',a mb ptrs dd 513 dup (O) ;buffer pointers for each MB reg dir flag dw O
mbd start dw O ;mailboxdumppoin~er mbd end dw O ;n mbd stop dw O ;current end for this dump mbd count dw O ;#rows/letter~orcurrentdump mbd dump2 dw O ;flagfor2stage dump mbd row dw O ~next row to dump into mbd col dw O ;next col to dump into mbs reg dw O
mbs count dw O
mbs size dw O
m~s mbsize dw O
dump stadr dw O ;dump - start address for row dump count dw O ;dump t~mp. - #data pts in lettet dump row dw O ;dumptemp.-currentrow SYL.ASM Program Page 5 dump col dw 0 ;dump temp. - current column dump dir dw 0 ;dump temp. - direction ~o dump ;
Data conversion tables ;
;Number of days since Jan.1, 1900 for each year.
year table dw 31778 ;1987 dw 32143 ;1988 ~r 32509 ;1989 dw 32874 ;1990 dw 33239 ;1991 dw 33604 ;1992 dw 33~70 ;1993 dw 34335 ;1994 ~w 34700 ;1995 dw 35065 ;1996 dw 3543t ;1997 dw 35796 ;1998 dw 36161 ;1999 dw 36526 ;2000 ;

;Number of days since start of year. No leap year.
month table dw 0 ,Jan dw 31 ;Feb dw 59 ;March dw 9~ ;April dw 12û ;May dw 151 ;June dw 181 ;July dw 212 ;August dw 243 ;September dw 273 ;October dw 304 ;November dw 334 ;December . . ~.. ..
ipc ipc struc ~Q0,73,4>
ipc --~ nim seg,active,timeout tics, ipc --> timeout secs ;

~ime size equ 4 ;number of bytes in time in data pt.
4:1 ~ 3 ~ 3 SYL.ASM Program Page 6 ;
;MBSTRUC Mailbox header structure mbstruc ST RUC:
mb_ptr dw ? ;address ptr to next free row mb ma~addr dw ? ;address ptr ~o last row in buf mb start dw 7 ;start address for next dump mb CouQt dw ? ;num of data wordis in a row mb dir dw ? ;directionofoutplltflag mb size dw ? ;sizeofbufferallocated mb strow dw ? ;starting row of output mb stcol dw ? ;starting columnofoutput mb currow dw ? ;current row of output mb curcol dw ? ;current column of output mb data dw ? ;startofdata mbstruc ENDS
;
;

. .
INCLUDE SYLERR.ASM ;error messages INCLIJDE SYLHELP.ASM ;help screens INCLUDE SYLI.ASM ;attachment, etc INCLU~E SYLFP~SM ;floating point routines INCLUDE SYLINT.ASM ;interrupthandler INCLUDE SYLME3.ASM ;mailbox routines .
;Block 3Read ;Inputs: NONE
,C)utputs: NC)NE
block read proc near push ds ;saYe 1-2-3'sDS
ourds ;establish add-in's DS
;Make sure initialized first cmp initialized,O
je brnoinit err ;Get range of Route,Register,Count llumbers bread getl: mov ah,O ;newrange mov ~,0 ;not anchored mov ipc.active,O ;reset flag ~ 3 ~ 3 SYL.ASM Program Page 7 lea si,bread_msg ;prompt message ~or range Gall do_range ;getthe range jc bread done ;CarrysetifE~SCAPE
call get data ;set~sACI~VEflag jc bread err ;Get output range mov ~h,0 ;new range moY al,-l ;anchored, cursor at ~utput range 1ea si,bread2 rnsg ;prompt message for range call do_r~ge ;getthe range jc b~ead_get1 ;C~y set if St:APE, las~ prompt eall read ;perform the read jc ~rhard err call read-put ;put data into spreadsheet mov ipc.active,û ;rese~ flag jnc bread ok mov dl,211 ;err putting into sprsht!
jmp brhard err brnoinit err: mov dl,199 ;notinitializederror jmp brh~rd e~
bread err: mov ipc.ac~e,0 ;resetflag mov dl,200 ;sof~Nare error msg!
brhard err: call error bread_ok: ;
~lc bread done: pop ds ;restore 123 DS
ret block read endp . ._ . . . _ .

... ..
;B,lock Write ;Inputs: NONE
;~ltpU~7: ~ONE
;

block write proc near push ds ;save 1-2-3~sDS
L~

SYI,.ASh~ Program Page 8 ourds ;establish add~ 's DS
;Malce sure initialized first cmp ~n~tialized,O
je bwnoin~t err ,Get range of Route,Register,Count numbers bwrite getl: mov ah,O ;newrange mov al,O ;not anchored mov ipc.active,O ;rese~ ~
lea si,bread msg ;prompt message ~or range call do range ;getthe range jc bwr~te done ;Carly set if ESCAPE
call get data ;~e~route,reg~s~er,count jc bwnte err ;Get range o data to ~e written mov ah,O ;new range mov al,-1 ;anchored, cursor at da~a rarlge lea sibwrite msg ;prompt message for range ~all do range ;get therange jc bwrite getl ;Carry set if ESCAPE,last prompt ;Write the data to the SY/MAX
call write ;per~orm the write mov ipc.active,O ;reset flag jnc bwrite ok ;ifok,end jmp bwhard rr ;error code already set bwnoinit err: mo~ dl,l99 ;not initialized error jmp bwhard err bwrite err:
mov dl,~Ol ;software err msg bwhard err: mov ipc.active,O ;resetflag call error bwrite ok: ;
clc bwrite done: pop ds ;restore 123 DS
, ret block write çndp ... . ..

~.

~ 3 ~ 3 SYL.ASM Program Page 9 ;
;ERROR handles errors in block read andl write error proc near push ds ourds cmp dl,0 ;i~ it a softw~re e~or code7 jne err soft mov 3x,ipc.nim seg ;no, get SYLINK error code mov es,ax mov bx,ADR ERROR ;get error code from NIM card n;ov cx,word ptr es:[bx~
cmp ~255 ;if error cod~ >255, generic msg r 2 mov dl,cl ;errorcode ~ hardwarecode ;DL=error code err_so~: ; ;scan through strings cld ;clear direction flag mov a~
mov es,ax ;string operation uses ES, ES=CS=I:)S
mov ~,0 ;sear~ for 0 (erld of string) lea di,err msg ;err msgtable err table:
mov cx,100 ;no more than 100 chars per string repne scasb ;get 0 terminator, di -> next char cmp dl,byte ptr [di] ;error eode number?
je err have cmp by~e ptr [di],-1 ;esd of table yet?
jne err tab!e err 2: ; ;yes,abortsearch lea sigen err ~g ;general error message jmp e~r 3 err have:
inc di ;poin~ to let~ers after msg ~
mov si~di ;offset of string for error message err_3: ;
call do nonfatal ;no~ iEa~alerror3 pOp ds ret error endp 1~5 SYLASM 13 ~ ~ ~13 Program Page 10 ;
;GET DATA
;Input: start row,start col - cell address of CO~ g. data as route string, s~art register #, count to read.
;Output:
Carry (: LEAR if conversion OK, Sarry SE~T if E~l:)R.
get data proc ~ear push ds ourds mo~ ax,ipc.r~im seg mov es,ax ;ES = Syl~l;card ;

mov ax,end row cmp ax,start row jg get vertic ;get the correct direction mov col add,1 mov row add,O ;incrementhorizontally jmp get set get vert;c:
mov col add,O
mo~ row add,1 ;incrementvertically ;

get set: ;
mov cx,start col ;Get route stnng from worksheet mov dx,start row mov ax,O1OOh ;get contents as text call o~t cell ;get celL a~ects DS
cmp CK9l jle get dat err ;must have some chars in it push ds ourds mov ipc.ac~ive,1 ;set SYLINK active flag mov ax,ipc.~im seg pop ds ;restore DS of string mov es,ax ;ES = Sylink card mov di,ADR ROUT~
call do route ;conYert string to route 4~

SYL.ASM ~ 3 ~ 3 ProgramPage 11 ourds ;

;Get register number from worksheet mov cx,start col add cx,col add mov start col,~
mov dx,start row add dx,row add mov start row,dx call getnum ;get register number ~o AX
cmp ch,O
jne get dat elT
mov di,ADR DATA ;setregisternuml)er mov word p~r es:ldil,ax mov regls~er,a~ ;save it ;

;Get count number from worksheet mov cx,star~ col add cx,col add mov start col,cx mov dx,s~art row add dx,row add mov start row,dx call getnum ;get register number to AX
cmp ch,~
jne get dat err mov count,aY ;save the coun~
mov di,ADR COUNT ;read~ incs~unt mov word ptr es:[di],ax clc jmp get dat end get dat err:
~tc ge~ dat end:;
pop ~s ret get data endp SYLASM ~ ~ L ~ ~ .13 Program Page 12 ;
;RE,4D l?ead a register from ~he SY/NET.
;~utput:
Carry CLEAR if conversion O K;, Carry SET if ERROR
;

read proc near push ds ourds mov ax,ipc.nim seg mov es,ax mov di,ADR OPCODE ;set opcode for non-priori~ blk read mov byte ptr es:ldi],0 mov di,ADR SEND ;set the send flag for the read mov byte ptr es:ldi]?l ;wait for the send flag to be re-set to 0 naov ax,ipc.timeout secs push es call set timer pop ~s read time: cmp ~e ptr e~:[di],0 ;wait for change to 0 je read accept push es call check timer pOp es jnc rcad time ;loop and check for timeout jmp read timeot ;hardwareproblem read accept:
cwlrds mov a7~,ipc.nim se~
mov es,ax mov di,ADR ERROR ;check for error on read cmp word ptr es:[di~,0 clc ;reset error flag SYL.ASM ~ 31~; 413 Progran~Page 13 je read end mov dl,0 ;hardware error jmp read err ;

read timeot: mov dl,212 ;timeout!
read err: stc ;seterrorflag read end: pop ds ret ;return to 123.
read endp ;

;WRITE Writes a block of registers to the SY/NET.
;Output:
Carry CLEAR if conversion OK, Carry SET if ERROR.
;

wnte proc near ;

mov ax,ipc.nim seg mov es,ax mov adr offset,~R WRTDAT~ ;startofwrite data ;Ci et the data from the spreadsheet - dump to SY/LINK card mov ax,end row cmp ax,start row jg wget vertic ;get the correct direction mov col add,1 mov row add,0 9incrementhorizontally jmp w~ite num wget vertic:
mov col add,0 mov ~ow add,1 ;incrementvertically write num:;
mov cx,start eol mov dx,start row call getnum ;get number cmp ch,0 jnz wnte err ~t~

SYL.ASM Progr~m Pa~e 14 mov di,adr of~set mov word ptr es:[di~,ax ;put in SY/LINK
;

add adr offset,2 ;2 bytes per word for nex~ register ~ov ~x,start col add cx,co1 add mov star~ col,Q~
mov dx,st~ row add ~,row add mov start row,dx dec count ;all regs done?
)nz write num ;

;Wnte the data to the network.
mov di,ADR_OPCODE ;set opcode for no~-priority bllc wlite mov byte ptr es:Ldil,2 ;

mov di,ADR SEND ;set the send ~ag for the wr~te mov byte ptr es:[di],1 ,wait for the send ~ag to be re-set to 0 mov ax,ipc.t~meout secs push es .a11 set timer pop es write ~ime: cmp byte ptr es:ldi],O ;wait for change to 0 je write accept push es call check timer pop es jnc write time ;loop arld check for timeout jmp write timeot ;hardwareproblem write accept:
ourds mov di,ADR ERROR ;check for error on read cmp word ptT es:[di],0 jne wnte hard ;hardwareerror cl~
jmp write end 5~

~ 3 ~ 3 SYL.ASM Program Page 15 write timeot: mov dl9212 ;timeout jmp wnte erend write err: mov dl,202 ;write data errmsg jmp wri~e erend write_hard: mov dl,O ;hardware error write erend: stc ;5eterrorflag ;

write end: ourds ret ;ret~ o 123.
write endp ..

;READ PUT
;Input: count - ~registers to put ;Output:
CAR:E~Y SET on ERRor, else clear.
read_put proc ne~r push ds ourds mov ax,ipc.Dim seg mov es,ax ;Put the data into the spreadsheet mov ax,end row cmp ax,star~ row jg read vertic ;get the correct direction mov col add,1 mov row add,O ;incrementhorizontally jmp read set read vertic:
mov col add,O
mov row_add,1 ;increment vertically read set: ;
mov adr off~et,AI)R REPLY
rput again: , mov di,adr offset ;get tbe data from the reply buffer mov ax,word ptr es:ldi3 SYL.ASM 1 3 ~ i 413 Program Page 16 push ds push es call int2flt ;put on number stack pop es pop ds mov ah,fm~ default ~ 088h ;protection is default mov al,t nstack mov cx,s~art col mov dx,start row push ds push es call in cell ;put data in the cell pop es pop ds ~c read exit add adr offset,2 ;2 bytes per word for next register mov cx,start col add cx,col add mov start_col,cx mov dx,start row add dx,row add mov start row,dx dec count ;all regs done?
inz rput agaln clc read exit: .
pop ds ret read put endp ;

;DC) ROUTE
;CoIIvert str~ng of decimal numbers to a route of binary numbers.
;Input: DS:SI - address of string ~æ
J

lL 3 ~
SYL.ASM Program Page 17 ;Outpul: binary numbers stored a~ ES:DI
;AII registers altered.
do route proc near mov dl,10 ;check for valid char char new: mov ax,0 ;initiali~e nu3nber char ~other: mov dh,byte ptr [si]
mov cl,dh sub cl~'0' ;~ 0 jl char check cmp cl,9 ;> 9 ?
jg char check mul ~ 10 (dl= 10) add al,cl char inc: inc si jmp char nother ;get next char char check: ;check for end of string cmp dh,',' je next char ;cornma delimiter between numbers cmp dh,"
je char inc ;slcip leading blanks cmp dh,0 je char end ;zero term~natedstring jmp char inc ;skipnon-numericchars ~ext char:
inc si ;next char mov byte ptr es:~di~,al ;store converted number inc di ;next free space in buffer jmp char new char end:
mov byte ptr es:[di~,al ;save last number mov by~e ptr es:~di~ 1],255 ;add terminator elc ,reset error ~ag - OK
ret do route endp PUBLIC xdv main ;requireddeveloper'sent~ypoints PUBLIC ~dv abort S~

SYL.ASM Program Page 18 PUBLIC xdv adjust PUBLIC xdv_attach PUBLIC xdv clear PUBLIC xdv eerm~nate PUE~Ll[C xdv display PIJBLIC ;~dv help PUBLIC xdv._poll PUBLIC xdv retrieve RUBLIC xdv save PUBLIC xdv undo save PUBLIC xdv undo okay PUBLIC xdv undo swap PUBLIC xdv sysin~o PUBLIC f;le exl ;fileex~ensioilvariable EXTRN do logo:NEAR
EXIRN se~ ~imer:NEAR
EXTRN check timer:NE~AR
E~RN do erase lines:NEAR
EXTRN do hidemark:NEAR
EXl~N do setcur:NEAR
EXTRN do charout:NEAR
EXTRN ge~ char:NEAR
E~N redisplay:NEAR
lEXI`RN do menu:NE~
EXI~N do range:N~EAR
EXI~N int2fl~:NEAR
EX~N dint2flt:NlEAlR
EXI~N in cell:NEAR
EXTRN out cell:NEAR
EX~N ~t2int:NEAR
EXI~N do nonfatal:NEAR
EXIRN start col:WORD
E~N star~ row:WORD
EXI~RN end eol:WORD
EXI~RN end row:WORD
EXTRN anchored:BYIE
EXllRN do setcur:NEA13 EXIRN do write:NEAR
~XI~N dflt2islt:NEAR

5~

~ 3 ~

SYLASM Program Page 19 EXTRN push_~lt:NE~AR
EXI`RN pop flt:NEAR
EX'I~N do_palloc:NEAR
l@X I~N do_pfre~:NE~AR
E~XI~N div nt:NEAR
EXll~P~ add flt:NEAR
...
endcs ;macro ~o define end of t:sde segmellt ~ND
~_ . .

^~ 3 1 ~
SYI~RR.ASM Program Page 20 ;SYLE~RR~SM
,Error codes fo~ SyJ~lk ~d.
;

;Lookup table of error messages. 0 defines the end af string and beginning ;of esror number ~or lookup.
interr msg: db 01,'01- Checksum error in Bufler I.',0 db 02,'02 - Checksum error in Buffer II.',0 db 03,'03 - Checksum error in Buffer m.~,o db ~4,'04 - NIM executive PROM checksum error',0 db 05,'05 - Twoport }~ diagnostic tes error.',0 db 06,'06 - Scratch RAM dia~nos~ic tes~ error.',0 db ~7,'07 - Out of memory.',0 db 08,'08 - Twoport RAM diagnostic test esror.',0 db ~ Handshaldng error.',0 d~ 10,'10 - I}MA Error.',0 db 32,'32 - Invalid intermpt number error.',0 db 33,'33 - Invalid drop number error3,0 db 34,'34 - Illegal ne~work pararneter ch~ge.',0 db 35,135 ~JIM receive buffer fu11.'~0 db 36,'36 - Illegal bit combo .',0 db 37,'37 - Illsgal bit sombination ~or RS422',0 db 38,'38 - Illegal port change.',0 db 39,'39 - Illegal mode change.',0 db 40,'40 ~ Illegal drop change.',0 db -1 ;end of table identifier err msg: db 001,'001- Illegal Protocol Opcode',0 db 002,'0~2 - Illegal Lnterrnediate Code',0 db 003,'003 - Illegal Address Attempted',0 db 004,'0Q4 - Illegal Rack Address Attempted',0 db 005,'005 - Instmction Not Allowed',0 db 006,'006 - Item Searched For Not Found~,0 db 007,'007 - Cannot Alter Protected Reg.',0 db 008,'008 - Cannot Alter Protected Memo~ 0 db 009,'009 ~ mot Alter Read-Vnly lRegister',0 db 010,'010 - Memory Limitati~ xceeded',0 ~ 3 ~ 3 SYLERR.ASM Program Page 21 db 01 l,'ûl 1 - Communications Overflow~,0 db 012,'û12 - Illegal CPU Rack Addressing',0 db 013,'013 - CoTmlhun cations Error',0 db 014,'014 - Not Allowed ln Run',0 db 01S,'015 - Co~un~cation Overflow',0 db 016,'016 - Register Count Too Large',0 db 017,'017 - lRemote Device Inac~i~rg',0 db 018,'018 - Rung Number IJsed Is Not Allowed',0 db 019,'019 - Illegal Read Parameter',0 db 0Q0,'020 - Illegal Chamlel Number',0 db 0Ql,'021 - T~ ll'o Change A Forced Bit',0 db 022,'022 - Forcing Functio~ Is Inhibited',0 db 023,'023 - Can~ot Alter Fenced Register',0 db 024,'024 - ~annot Force A Non-For~ble Reg',û
db 02S,'025 - CPU Frror, Check Register 8175'30 db 026,'0~6 - Rack ~ddr And User Mem Overlap',0 db 0~7,'027 - Memoly Error',0 db 028,'028 - Illegal Baud Rate Seleeted',0 db 029,'02~ ~ Illegal Route',0 db 030,'030 - Cannot Alter Protected Memory',0 db 031,'031- End Of File Encountered',0 db 032,'032 - Protected Memory',0 db 033,'033 - Data Error',û
db 034,'û34 - UVPROM Memory Err~r',û
db 035,'035 - Write Pro~ected',0 db 036,'036 - lReplace P~t Allowed',0 db 037,'037 - Cannot Read Past Last ~ile',û
db 038,'038 - Data View Protected',0 db 039,'039 - Alarm Already Set',0 db 040,'040 - Hardware Memory Security',0 db 041,'~1- Illegal Register Write',0 db Q42,'042 - Illegal File Number',0 db 043,'M3 - Illegal Operation Attempted',0 d~ 044,'044 - File Not Fou:nd',0 db 045,'045 - DLOG Tape Operation In Progress',0 db 046,'046 - Prote~ed File',0 db 047,'M7 ~ Keyswitcb Position',0 db 048,W~ - Programn~ing MCR Not Allowed',0 db 049,'049 - I/O, E~eg Or Channel Safeguarded',0 db 050,'050 - Forcing Active9,0 c ~ 3 ~
SYLERR.ASM Program Page 22 db 051,'0S1- Missing Module',0 db 053,'053 - Illegal Media Format',0 db 054,'054 - Ille~LI Mark Number',0 db 055,'055 - File C3peration Aborted',û
db 060,'060 - Illegal Mark Number',0 db 061,'061- Mark St. Sub Cannot Be Inse:rted',0 db 062,'062 - Returrl R~mgs Not Allowçd',Q
db 063,'063 - Marlc Number Prev~ously Used',0 db 064,'064 - Cannot Delete Return',0 db 065,'065 - Cannot Delete Mark St. Sub',0 db 066,'066 Cannot Delete Mark Hav~ng .Return',0 db 067,'0~7 - Re~urn Must Have Mark',0 db 068,'~8 - Only One Return Per Mark',0 db 069,'069 - Gosub With No Return',0 db 070,'070 - Goto To Mark With ~ eturn',0 db 071,'071- Cannot Delete Mark',0 db 072,'072 - Unused Mark Number',0 db 079,'079 - E'rogrammable Interrupt',0 db 080,'080 - In~ufficient Data',0 db 081,'0~1- Unreco~ed Command',0 db 082,'082 - l~legal Parameter',0 db 083,'083 - Illegal Souree Parameter',0 db 084,'084 - Illegal Destination Par~neter',0 db 0~5,'085 ~ alid Filespec',0 db 0~6,'08~ - Invalid Input Channel',0 db 0X7,'087 - I~alid Output Channel',0 db OB~,3088 - Device Not Available',0 db 089,'089 - Serial ~nlc Not Established',0 db 090,'090 - Hardware Read Fault',0 db 091,'091- Hardware Write Fault',0 db 092,'092 - Read Error',0 db 093,'0g3 - Write Error',0 db 094,'094 - Directory Read Error',0 db 09S,'095 - Directo~y Write Error',0 db 0~6,'096 ~ irect~ Space Full',0 db 097,'097 - De~ice Space l~ull',0 db 098,'098 - File Not Found',0 db 099,'099 - File Assess Denied',0 db 100,'100 - File Already Exists',0 db 101,'1û1- File Already Ope~',0 SYLERR.ASM Program Page 23 db 102,'102 - File Format E~rror',0 db 103,'103 - File Wrong Type',0 db 104,'104 - Open Canno~ Open File',0 db 105,'105 - I/O Carmot Unopen File',0 db 106,'106 - Write Cannot Read Only File',0 db 107,'107 - E~ecord Ou~ Of Range',0 db 1û8,'108 - Too Many Open FilesJ,O
dh 109,'109 - Operation Aborted By User',0 db 110,'110 - Source Filespec Re~quired',0 d~ 111,'111- Destination Filespec Required',0 db 112,'112 - Mal~imum Open Count For File',0 db 113,'113 - Incompatible Source Type',0 db 114,'114 - Illcompatible Destination Type',0 db 11S,'115 - Device Timeout',0 db 116,'116 - Protected File',0 db 117,'117 ~ Illegal File Type',0 db 118,'118 - Illegal Device',0 db 119,'119 - File Type Required',0 db 1~0,'120 - Device Required',0 db 121,'121- Channel Required',0 db 122,'122 - ~oute Required',0 db 123,'123 - Filename Required',0 db 124,'124 - Illegal Offset',0 db 125,'125 - Illegal Count',0 db 126,'126 - Source/I:lestination Same',0 db 127,'127 - Duplicate Label',0 db 128,'128 - File Mismatch',0 db 129,'129 - Invalid Register Address',û
db 130,'130- InvaUd ~ile Name',0 db 131,'131- Wri~e Data Error',0 db 133,'133 - Insufficient Da~a For Write',0 db 135,'135 - Invalid Read Parameter',0 db 199,'Initialize SY/LINK using SYLINlr,0 db 200,'Error in Block Read parameters',0 db 201,'Error in Block Write parameters',0 db 202,'Illegal Register Write Data',û
db 203,'Illegal FP Read Parameters',0 db 204,'Illegal FP Write Parameters',û
db 205,'Illegal FP Count (32 mal~)',0 db 206,'0nly Use ODD Registers for FP',0 ~1 ~3 l~3 SYLERR.ASM Program Page 24 db 207,'Error in Mailbox setup data7,0 db 208,'Mailbox has not been set',0 db 209,'Ir~itialize SYLINK with an intermp~',0 db 210,'Maill)ox has already been set',0 db 211,'Error putting da~a into spreadsheet',0 db 21~,'Tlmeout on SYLINK operztion',0 db ~13,'Illegal FP write data',0 db ~1 ;end of table identifier 3 ~ ~ 3 SYLHELP.ASM Program Page 25 .~
SYLHELP.ASM Include file for SYL.ASM

;Help screens and functions.

help main db 2?0 ;produces a single horizolltal line db 'SY/LINK E~elp',O
db O
db 'INIIIALIZE',O
db ' Configures the SY/LI~ card using parameters f~om SYLINlT.~1VK1. ',0 db 'READ',O
db ' Performs a Block RlEAD ~om the SY/MAX speci~led.
Enter a range',O
db ' containing Route String, start Kegister number, C: ount of registers.',O
db ' Enter the output range ~or the data to be put. I~.is range can be',O
db ' either vertical or horizontal. Default is horizontaL
Highlight',O
db ' at least one cell down ~or vertical output to spreadsheet.',û
db 'WRlTE',O
db ' Performs a Block WRITE to a SY/MAX device. Range for Route,Register,',O
db ' Count same as READ. Data range can be a row, a column, or a cell.'50 db O
db O
db 'Note: Attach SYLAF wi2h Add-In Manager before retrieving spreadshee~s',O
db ' using Add-In @functions5 such as @read~) or (~?write().',O
db 2,0 ;single hori~ontal line help ~p db 290 ;produces a single horizontal liIle db 'FLO~TING POINT OPERATIONS',0 db db 'READ',0 ~1 ~ 3 ~
SYLHELP.ASM Program Page 26 db ' Performs a Blo&lc Read of Floating Point registers. Enter a range',0 db ' contail~ing the ~oute String, Start Regisser number, and Count to read.',0 db ' Enter ~he output range for the data ~o be put. This range can be ',0 db ' either vertical or horizontal. Default is honzontal.
Highlight a~ ',0 db ' least one cell down for vertical outpu~ to spreadsheet.The Start ',0 db ' Register must be ODD numbered. Each floating point register is made up',0 db ' of 2 SY/MAX deviee registers. The maximum Count is 32 floating point',0 db ' reglsters.'90 db 'WRI~E',0 db ' Performs a Block Write of Floating Point registers.
Range for Route,',0 db ' Start Register, and Caunt same as READ. Data to be written can range',0 db ' f rom + /- 1.2 E-38 to + /- 3.4 E38. Lotus stores floating point numbers',0 db ' in an 8-byte format. There will be a loss of resolution when moving to',0 db ' theSY/MAX4-byteformat. ',0 db 2,0 ;single horizontal line help mailbox db 2,0 ,produces a single horizontal line db 'MAILBOX OPERATIONS',û
db 0 db 'SET',0 db ' Sets up a mailbox for receiving SY/MAX device messages. Messages come',0 db ' illtO the mailbox in the background. I'he 512 registers in the SY/LINK',0 db ' are used to receive these messages. Enter a range containing the ',0 db ' mailbox register, eount o~ registers in each message, and the n~nber of ',0 ~ 3 ~ 11 3 SYLHELP.ASM Program Page 27 db ' rows/eolumns of data to buffer. Choose mailbox registers and counts so',û
db ' they do not overlap. Choose Size to allow for the most messages',û
db ' be~veen dumps. Output data can be either horizontal or vertical.',0 db 'DIJMP',0 db ' Dumps mailbox data into tlhe spreadshee~. New data goes on the end of',0 db ' the last data to be dumped. Use RE~SET to change the place DUMP puts ',0 db ' the data.',0 db 'RESEr,O
db ~ Reset either the Output of the mailbox or the whole mailbox. Seiect',0 db ' RESE~T in menu and press [HELP] for more infomation.',0 db 2,0 ;single horizontalline he}p mbreset db 2,0 ;produces a single horizon~al line db 'MAILBOX RESET OPER~TIONS',0 db 0 db 'OU IPUT',0 db ' Resets the output ran~e for a mailbox. This range is the location ',0 db ' for the first data item. Highlight the range where the ~lrst letter',0 db ' of z mailbox will go, not the entire data area. If the registers in ',0 db ' each lettes go horizontally, the dumped data will make a vertical ',0 db ' table in the spreadsheet.',0 db 'MAILBOX',0 db ' Resets a mailbox entirely. All data in the mailbox is 105t.
If data',0 db ' in the mailbox is valid, use DUMP before resetting the mailbox. The',0 db ' memoly that the mailbox used is returned to the spreadsheet.',0 db ~3 SYLHELP.ASM Program Page 28 db 0 db 'Note: ~fultiple mailboxes may be enabled concurrently. A
separate spre~dsheet',0 db ' can be used for each mailbox dump. After saving the dumped data, you',0 db ' can work on a different spreadshePt as data comes into the mailboxes.',0 db 2,0 ;single horizontalline help_press db 'Press any key to conti~ue.',0 ..
;Address of screen to use in each help invocation.
help table dw help_main dw help fp dw help mailbox dw help mbreset .. ...

; Help processing - This procedure is called during add-in execution when the user presses ~HELP].
xdv help PROCNEAR ;displayhelpscreen push ds ;save 1-2-3'sDS
ourds ;establish add-in's DS
mov ax,3 ;start on line 3 mov ~,21 ;clear 21 lines call do erase lines ;clearselectedscreencontents call do hidemark ;turn off the hardware cursor ;

mov bl,help mode ;which help screen7 ~cor bh,bh ;cle~r high by2e shl bx,1 ;times 2 for word offsets in table mov si,help table~] ;point SI at help text mov C1t,0 ;set CX to the starting column mov dx,3 ;set DX to ~he starting row ~'l I

SYLHELP.ASM Program Page 29 h loop: ~11 do setcur ;positionimaginary ursor mov al,[si] ;get character inc si ;address next chara~er cmp al,O ;is character a null je h next line ;go to next line cmp al,31 ;is character less than 32 Ja h next char ;repeat character for whole line cmp cx,79 ;is sharacter at last scree~ column je h next char ;yes so don't decrement SI, get ;next dec si ;decrement SI so that we use same char h next char: call do charout ;ou~put ch~racter inc c7c ;increment cursor column jmp h loop ;repeat h next line: mov CK,O ;reset CX to the ~irst coluIrm inc dx ;increment cursor row cmp cb~,22 ;how many lines have we processed jne h loop ;not enough so repea~
;

mov cx,O
mov dx,22 ;last row be~ore date call do set~ur ;rnovecursor mov ah,at bright ;illtense push cs pop es ;ES:SI points to string mov si,offset help_press call do wnte ;

_c test: call get char ;wait for character and throw it away mov ax,3 ;start on line 3 mov c%~21 ;clear 21 lines call do erase lines ;clear selected screen contents call redisplay ;redisplay thç screen pop ds ;res~ore 1-2-3'sds ret xdv belp ENDP
..

~5 ~ 3 ~
SYLDAl~.ASM Program Page 30 .
;SYLOATE.ASM Include ~lle for SYLASM - lDate to ~days conversion ;

;Convert DOS date to Lotus ~ormat number of days since Jan.1,1900.
;

;SET DATE Sets the start date with the Lo~us format date.
;Input:NONE, Output: sets start date.
set dateproc near ourds ,call DOS to get current da~e mov ah,2ah ;Get system date int 21h mov di,0 ;initialize ~days counter test cx,3 ;last 2 bits off = leap year jnz sd noleap inc di ;one extra day for a leap year sd noleap: ;
sub cx,1987 ;subtract table start year jge sd_yrok ;year > = 1987, ok mov cx,0 ;setto 1987Otherwise sd_yrok: cmp a,13 ;1987+13=200Q last year in table jle sd_yrok2 ;year ~ - 2000, ok mov cx,13 ;set to 2ûû0 if greater sd_yrok2: ;
mov bx,~ ;use bx for index reg.
shl bx,1 ;times 2 ~or int lookup add di,year table[bx] ;di = rum~ing total mov bl,dh ;dh = monthnumberfromDOS
mov bh,û
dec bl ;use ~11 months for lookup shl bl,1 ;times 2 for ints add di,month tablelbx]
;

dec dl ;dl=day, 1-31 ~> ~30 add di,dl ;add full days in mo~th mov s~ date,di ;save Lotus format date (~

s~
SYLDA1~E.ASM Program Page 31 ;

ret set date endp ,- . .

; Data con~ersion tables ;
year tahle ;Number of days since Jaa.1,1900 for each year.
dw 31778 ;1987 dw 32143 ;1988 dw 32509 ;1989 dw 32874 ;199a dw 33239 ;1991 dw 33604 ;1992 dw 33970 ;1993 dw 34335 ;1994 dw 34700 ;1995 dw 35065 ;1996 dw 35431 ;1997 dw 35796 ;1998 dw 36161 ;1999 dw 36~26 ;200G
;

month table ;Number of days since start of year. No leap year.
dw 0 ~an dw 31 ;Feb dw 59 ;March ~w 90 ;~pril dw 120 ;May dw 151 ~une dw 181 ~uly dw 212 ;August dw 243 ;September dw 273 ~October dw 304 ;November dw 334 ;Deoember .._ ~}

~3.~13 SYLI.ASM lF'rogram Page 32 ;
SYLI.ASI~I Include file for SYLASM
;Initialization fimctions.
;

file ext db 4 dup ~O~ ;null ~le extensioll for acld-in ;Define the menu short and long prompts spromptl db 'Initialize',O
lpromptl db 'Initialize SY/L~ card using SYI~NIT spreadsheet',O
sprompt2 db 'Read',O
Iprompt2 db 'Read a Block ~ Registers',O
sprompt3 db 'Write',O
Iprompt3 db 'Wri~e a Block of Registers',O
sprompt4 db 'FP',O
lprompt4 db 'Flvating Point Operations',û
spromptS db 'Mailbox',O
IpromptS db 'Set,Dump,Reset Mailbox bu~ers',O
spromp~6 db 'Quit',O
Iprompt6 db 'Retum to kE~DY mode',O
;

sprompt7 db 'Read',O
Ip.rompt7 db 'Read FloatLng Point Registers',O
sprompt8 db 'Write',O
Iprompt8 dh 'Write Floating Point Registers',O
;

sprompt9 db 'Set',O
Iprompt9 db 'Set up a mailbox buffer',O
spromptlO db '}~np',O
IpromptlO db 'Dump mailbox buffer to spreadsheet',O
spromptll db 'Reset',O
Ipromptll db 'Reset a mailbox buff~r',O
;

spromptl2 db 'C)utput',O
Ipromptl2 db 'Reset a Mailbox Output range',O
spromptl3 db 'Mailbox',O
Ipromptl3 db 'Reset a Mailbox',O
;

~ ~ 3 ~ 1 3 SYLI.ASM Program Page 33 ;Defime the menu data structure using the appmenu macro main menu equ thisword dmendef sprornptl,lpromptl dmendef sprompt2,lprompt2 dmendef sprompt3,lprompt3 dmendef sprompt4,1prompt4 dmendef spromptS,lpromptS
dmendef sprompt6,1prompt6 dmendef end ;

p menu equ thisword dmendef sprompt7~1prompt7 dmendef sprompt8,1prompt8 dmendef end ail menu equ thisword dmendef sprompt9,1prompt9 dmendef spromptlO,lpromptlO
dme:ndef spromptl l,}promptl l dmendef end breset menu equ thisword dmendef spromptl2,1promptl2 dmendef spromptl3,1promptl3 dm~ndef end ;

ump table equ thisword dw init dw block read dw block write dw do fpmenu dw do mailmenu dw quit ;

~pjump equ this word dw fp read dw fp write ;

mailjump equ this word dw mail set ~q SYLI.ASM Program Page 34 dw mail dump dw do mbrmenu mbresetjump e~u this word dw mbr output dw mbr mb ;Defime the logo data structure logo cols dw 25 ;number of colulrms for logo logo rows dw 13 ;number of rows for logo logo dim rows db 11 ;rows ~om bottom in dim video ;box sizes for animated e~panding logo iogo box ~able db 13,27 db -1 log~ time e~u 4 ;delaytime~oshowbox efine the ~ext for the logo display logo text db ' SY/LINK',0 db ' Interface',0 db 0 db ' Software~,0 db ' For',0 db ' Automation',0 db 0 db 'E~ngineering Prototype',0 db 0 db ' Version 0.5',0 db ' SQUARE I) COMPAN'Y',0 db ' Copyright ~C~ 1987',0 db ' All Rights Reserved',0 --------.. ...
- ; Main processiMg - This procedure is called when the user invokes this add-in.
xdv main PROCNEAR ;let user choose function of ;example push ds ;save 1-2-3'sDS
ourds ;establish add-in's DS
;

~0 SYLI.ASM Progr~m Page 35 mov help mode,0 lea si,main menu;point SI a~ menu data structure lea di,jump table ;point to procedure jump table call do menu ;call menu processing routine ;

pop ds ;restore 1-2-3'sD5 ret ;re~rn to 1-2-3 xdv main ENI:IP
;

;
; Floating point menu processing.
do fpmenu PROCNEAR
push ds ;save 1-2-3'sDS
ourds ;establish add-in's DS
;

mov help mode,1 lea si,~p menu ;point SI at menu data structure lea di,fpjump ;point to procedure jump table caU do menu ;call menu processing routine mov cs:help mode,0 ;

pop ds ;restore 1-2-3'sDS
re~ ;return to 1-2-3 do fpmenu ENDP
;

....
; Mailbox menu processirlg.
;

do mailmenuPRO~NEAR
push ds ;sa~re 1-2-3'sDS
ourds ;establish add-in's DS
;

mov help mode,2 le~ si,mafl menu ;point Sl a~ menu data structure lea di,mailjump ;point to procedure jump ~able -1 1 .

SYLLASM Program Page 36 call do menu ;call menu processingroutine mov cs:help mode,0 pop ds ;restore 1-2 3's DS
ret ;return to 1-2-3 do m~lmenuENDP
..

._ ; Mailbox Reset menu processing.
;

o mbrmenu PROC NEAR
push ds ;save 1-2-3'sDS
ourds ;establish add-in's DS
mov help mode,3 lea si,mbreset menu ;point SI at menu data structure lea di,mbresetjump ;point to procedure jump table call do menu ;call menu process;ng routine mov cs:help mode,2 ;

pop ds ;restore 1-2-3'sDS
ret ;return to 1-2-3 do mbrrnenu ENDP
;

~_ .
;Initialize the NIM card using the data from spreadsheet.
;C:heck for SYLINlT.WK1 and get values from it. Put these ,values into NIM locations.
init proc near push ds ;save 123DS~ommenu ourds call setup ;get setup data cmp ch,0 je initl ok jmp init errl ;exit if error in setup data ~ 3~13 SYLI.ASM Program Page 37 initl olc: call ~etparms ;setup parameters in bytes cmp eh,O
je init2 ok J~np il~t srr1 i~it~ olc: ;
ourds mov ipc.active,1 ;set active flag cmp int on,O ;ifha~reirlterrup~, je i~it3 ok ;then call int_reset ;reset interrupts call ~imer resgt ;resettimerint.
init3 ok: ;
mov ~x,ipc.nim seg mov es,a~ ;point to s3 link card mov di,ADR PCFLAGS
mov byte ptr es:[di],4 ;set init-to-default flag mov ax,ipc.timeout secs push es call set timer pop es default ~ime: cmp byte ptr ss:[di],O ;wait for change to O
je default accept push es call cheek timer pop ~s jnc default time ;loopandcheckfortimeout jmp ~nit ~rr ;hardware problem if no reset default accept: ourds ;make sure DS preserved mov di,ADR NIMPARMS
mov al,nim_parms ;set up network parameters mov byte ptr es:~di],al mov di,ADR ~lROP ,~etupthedropnumber mov al,drop num moY ~te ptr es:ldi],al cmp in~errupt,O ;need to set interrupt?
je ini~ contin mov di,ADR INlSEL
mov al~OlOh ;interrupt on MB wntes -~3 SYLI.ASM Program Page 38 mov ~e ptr es:[di],al mov di~ADR INTlENABL:lE ;intemlpt number mov al,interrupt mov byte ptr es:[di],al il~it contin: mov di,ADR PCFL~GS
mov byte ptr es:[diJ,1 ;set initialize flag mov di,ADR NI~FLA~S ;set up ~or testing accept bit mov ax,ipc.timeout secs push es call set timer pop es init time: cmp byte ptr es:~di],1 ;wait for rhallge to 1 je init accept push es call check timer pop es Jnc init_time ;loop and check for timeout mov di,ADR PCFI.AGS
mov byte ptr es:[di],O ;turn off init flag bit O
jmp init err init accep~: ourds ;make sure DS preseIved mov di,ADR PCFLAGS
mov byte ptr es:~di],O ;tu~n of ~ init flag bit O
mov di,ADR SETERR
mov al,byte p~r es:[di] ;get error code cmp al,O
~ne Lnit err ;error if ~ot O
cmp i~terrupt,O ;need to set i~terrupt?
je init contin2 call set date ;set the Lotus format date call int enable ;turn on 8259 in~emlpts call timer enable ;turn on timer interrupt init contin2: call init_sylaf ;inter-programcomlTIunications mov cs:i~tialized,1 ;set initialized flag xor ax,a~ ;elear error since accepted SYLI.ASM Program Page 39 jmp init done imt_err: mov cs:interrupt70 ;reset int ~, not enabled init errl: call init error init done:
mov cs:ipc.a~ive,0 ,reset active ~ag pop ds ;res~ore 123 DS
ret ;exit init endp ----. _ . .

Int-erlable Enables the in~errupt selected.
Preserves the existing inte~Tupt vector.
;Input:
;Output: NONE, modi~ïes lES
int enable proc near ;
ourds mov ah,35h ;get old interrupt vector mov al,interrupt add aL8 ;8tint=ve~or#
int 21h moY word ptr old int7bx mov word ptr old int + 2,es ;save old vector ;

ourds ;make sure DS=CS

lea dx,mail int ;putinmailboxvector mov al,interrupt add al,8 ;8+int=vector~

mov ah,25h int 21h ;

ourds ;~m~e~t int# to bit mask mov cl,interupt ,2-7 mov ax,l ;start at 1 shl ax~cl ;shift to get right bit position mov int mask7al ~S

~ 3 ~

SYII.ASM Program Page 40 not a~ ;reverse bi~s mov bl,al ;save it in al,21h ;get surrent intellupt mask and al,bl ;turn off bit in mask jmp inte wait ;wait for 829 on ~st mas:hines Lnte wait: out 21h7al ;e~ble theinterrup~
;

mov al,intelTupt ;copy int ,~ to int on ~ag mov Lnt_on,al ;turn on int 91ag ret int enable endp ;

;INT RESETResets the interrupt Yectors and disables ints.
;

int reset proc near ourds cli ;turn of E interrupts in al,21h ;get mask mov bl,int mask ;bit set in interrupt position or al,bl ;~rn bit on = disable int out 21h,al sti ;ok for intelTupts now ;

mov al,int on ;resetintvector add al,~ ;8~int=vector#
mov ah,25h Ids dx,old int ;get old int address int 21h ;

ourds mov ax,ipc.nim seg mov es,ax mov di,ADR INTSEL
mov al,O ;no interrupts mov byte ptr es:[dil,al '~f~

SYLI.ASM Program Page 41 ;

mov di,ADR INTENABLE ;intelTuptnumber-O
m~ al,O
mov by~e ptr es:[di],al ~,r int on,O ;turn off int flag ret in~ rese~ çndp .. . ..
;TIME~R_ENABLE Tums on timer interrupt for date flagging.
Use to catch change of date at midnight.
I~put:NONE, Output:NONE, preserves ES, sets DS=CS
timer enable proc near ;

push ds push es mov ax,cs :mov ds,ax cli ;no timer ints now!
mov ax,0 mov es,al~
mov bx,es: (8~4) mov wnrd ptr old time,bx mov b~,es: (8~4 ~2) mov wordptrold time+2,bx ;saveoldvector ;

mov ax,offset timer int ;point to our timer int.rtn.
mov es:(8~4),ax mov ax,cs mov es:(8~4 +2),ax sti ;

pop es pop ds ret timer ena~le endp SYLI.ASM Program Page 42 ;
;TIME~R RESET Resets the timer interrup~ to original int~
;
timer_reset proc near push ds push es ourds lds bx,cs:old time ;DS:BX - old timer int.
~ov ax,O
mov es,ax ;ES-> int.vectors cli ;no timer ints now!
mov es:(8~4),bx ;low word mov ax,ds mov es:(8~4 +2),ax ;highword sti ;

pop es pop ds ret timer reset endp ..

;SETUP Get setup data ~om the spreadsheet~ Checks for the SY/LINK
configuration spreadsheet. Locations are defined using EQU so ~hey can be easily changed.
;Inputs: NONlE
;Outputs: Global variables for setup.
CH =O if setup ok CH < > 0 if error in setup.

;

drop row equ 5 ;dropnumberofNIM card drop col equ 7 ne~size row equ 6 ;sizeofne~work lletsize ol equ 7 netspeed rowequ 7 ;speedofn twork ~etspeed col cqu 7 '1~

:~ 3 ~
SYLI.ASM Program Page 43 address row equ S ;addressofNIMcard address_col equ 2 squared row equ 20 ;iden~ erforverification squared col equ ~ -int row equ 7 ;in~errupt number int col equ 2 ;

setup proc near push ds ;m ake sule DS ~ preserved ;check forcon~guration spreadsheet mov d~squared row mov s:x,squared col call gctnurn ;getidentifier number cDnp ch,O
jne setup end ;error flag already set cDnp au~identi~ler ;checkifcorrect for SYIlNrr.~VqKl jne setup err ; ;spreadsheetpresent-continue ; ;8~tdrop nu mber mov dx,drop row m ov cx~drop col call getnum smp ch,O
jne setup end ;exit if error, ~ag set nnov drop num,al ;save drop number ;

; ;get ne~vorks~e mov dx,netsize row mov cx,netsize col call ge~num cmp ch,0 jne setup end mov net size,ax ;

; ;get Lnterrupt number m ov dx,int row ;defaul~ to O
moY c~i~t col call get~um crnp ch,O
jne setup end SYLI.ASM Progr~m Page 44 cmp ax,O ;int - O?
je do setint ~mp ax,~
jb setup err cmp ~7 ja setup err do setint: mov interrupt,al ;savetheinterruptnumber o netspd: ; ;get nehvorkspeed mov dx,ne~peed row mov cx,netspeed col call getnum cmp ch,O
jne setup end mov net speed,ax mov dx,address row mov :x,address col mov ax,O10~h ;get contents as text call out cell ;get cell, affects DS
cmp cx,1 jle se~p err ;mus~ haYe at least 2 chars in it call hex2bin ;convert hex chars ~o byte in AL
push cs pop ds jc setup_err ;Put in IPC area, nim seg moY ah,al ;put in high part OI segment address mov al,O ~lower part - O
mo~r ipc.nim seg,ax ;

mov ch,O
jmp setup end setup err:
mov ch,Offh ;error flag setup e~d:
pop ~s ret setup endp .

SYI~.ASM Program Page 45 ;SFTPARA~S Sets the particular bits in the parameter ~es according to spreadsheet data.
;Input: No registers~ net size,net speed, assume DS=CS
;Output: CH=O if OK, CH ~ > O if error in setup data.
setparms proc near mov nim_parms,O0001000B
;de-code network si~e by~e mov ax,net si7e cmp ax,10 jne seei~1 jmp donet speed ;defaultOKfor 100 seeif31: cmp ax,31 jne setparm err or nim_parms,O0000100B ;turn orl bit ~or 31 drops onet speed:;
mov ax,net speed cmp ax,62 jne seeif125 jmp setparm ok ;O = 62.5K baud, default, no action seeifl25: cmp ax,125 jne seeif:250 or nim_parms,l ;1 = 125K baud jmp setparm olc seeif~SO: cmp ax,250 jne seeif500 or ~ parms,2 ;2=25OKbau~
jmp setparm ok seeif~OO: cmp ax,500 jne se~parm err ;mustbe62,125,250~or500 o~ nim_panDs,3 ;3=SOOKbaud jmp setparm ok etparm err: mov ch,Oi~ ;seterrorcode jmp setparm end setparm ok:

~1 :L3~13 SYLI.ASM Program Page 46 mov ch,0 ;reset flag - set up is OK.
setparm end:;
ret setparms endp 9 ______~____________________~_____________o__________~ ____ ;Commlmicate new NIM address with SY:t~F program.
;Put segment,offse~ of IPl: structure at 0~0:04f8-0~0:04fbH
;Preserves ES,DS - CS
init sylaf proc near push es ourds lea ax,ipc ;put in address of IPC struc mov bx,0 mov es,bx ;store in inter-program area mov bx,04f8h ;at 0000:04f8 for use mov word ptr es:~bx],ax ;by SYI~.
mov ax,cs ;put segment of IPC
add bx,2 ;at 04fa,04fb mov word ptr es:[bx],ax pop es re~
init sylaf endp ~ .

;
;GETNUM Gets a number from the spreadshee~.
;Input: CX=column # from 0 DX=row # ~om 0 ;OUtpllt: AX = number f~om spreadsheet, -3276~ to 32767 CH = 0, if OK
ClH < ~ O, if error somewhere.
getnum proc near push ds ;iE~r safe~, s~ve our DS
mov ah,Z ;push number on number s~ack SYL~.ASM Program Page 47 call out cell ;getidentifier pop ds ;restore this I)S
cmp cx,-1 jne getnum err ;err if not number push ds ;prese~ve I:)ataSegmentregister push es ;preselve ESregister call d~t2int ;convert to inte~er pop es pop ds jc getnum err ;number too large - exit c~p dx,~
jg getnum err ;number too big mov ch,0 ;OK code jmp getnum done getnum err: mov ch,0H~ ;errorcode getnum done:
-ret getnum endp ., ..
Attach processing - l'his procedure is called immediately afeer the user attaches this add-in.
xdv attach PROCNEAR ;display add-in logo upon a~taching cmp installed,1 ;already installed?
je a~tach skip ;if so, skip this stuff ;

push ds ;save 1-2-3'sDS
ourds ;establish add-in's DS
;

rnov ax,logo cols ;set up registers ~or call to do logo mov b~,logo raws mov cl,logo dim rows mo~ di,of~iet logo box table ;use logo box data ;struc2ure push ds Q

SYLI.ASM Program Page 48 pop es mov si,offse~ logo text ;use logotext call do logo ;displaylogo ;

mov a~,logo time ;setupdelayforviewing call set timer ;

test: call check timer ;loop until set time elapses jnc t test ;not set 50 repeat ourds mo~r installed,1 ;set flag to show installed ;~ero out the inter-program communications area 0û00:04f8 mov bx,0 mov es,bx mov bx,04f8h mov word ptr es:[bx],0 mov word ptr es:[bx+2],0 rnov word ptr es:lbx~4],0 ;

call redisplay ;f;x up the screen after show~ng logo attached: clc ;attach processing ok so clear carrS
jmp xdva dvne ;
;Problem with re-enabling interrupts.
;Maybe buffer not moved back to correct place~
xdva done: pop ds ;restore 1-2-3'sds attach skip:;
ret ;return to 1-2-3 xdv at~ach ENDP
.. . ...

;
;SET DATE Sets the start date with the Lotus format date.
;Input:NON , Output: sets start date.
set date proc near push ds ourds 8~

~ ~31~13 SYLI.. ASM Program Page 49 ;call DOS to get current date mov ah,2ah ;Get system date in~ 21h ourcls mov ax,O ;initialize#dayscounteF
test cx,3 ;last 2 bits off - leap year jIlZ sd noleap cmp dh,2 ;only add leap day after Feb.
jle sd lloleap inc a~ ;one extra day ~or a leap year sd noleap: ;
sub cx,1987 ;subtrac~ table start year jge sd_yrok ;year ~ = 1987, ok mo v a,O ;setto 19870therwise sd_yrok: cmp cx,13 ;1987 + 13 =2000, last year in table jle sd yrok2 ;year ~ = 2000, ok mov cx,13 ;set to 2000 if ~eater sd_yrok2:
mov bx,cx ;use bx for index reg.
shl bx,1 ;times 2 for int lookup add ax,year table[bx] ;ax = runnin~ total mov bl,dh ,dh = month number from DOS
mov bh,O
dec bl ;use 0-11 months for lookup shl bl~1 ;times 2 for ints add ax,month table[bx]
;

mov dh,O ;zero out high part dec dl ;dl = day, 1-31 -- > ~30 add ax,dx ;add full days in month mov cx,bx ;for no apparent reason, MUST HAVE!!!
mov start date,ax ;save Lotus format date ;

sd done: pop ds ret set date endp ;

o~

~ 3 ~
SYLI.ASM Program Page 50 ;INIT ERROR handles errors in i~tialization init error proc near push ds ~urds mov a%ipc.rl2m seg mov es,ax mov bx,ADR SETERR ;get error code ~ODI NIM card mov dl,byte p~r es:[bx]
cmp dl,30h ;if elTor code > 3ûh, ge~elic msg ja interr 2 ;scan through strings cld ;clear direction flag mov ax,cs mov es,ax ;string operation uses ES, ES =CS=DS
mov ax,O ;search for O (end of stnng) lea di,interr rnsg ;init err msg table interr table:;
mov ~,100 ;no more than 100 chars per string repne scasb ;get O terminator, di - > ~ext char cmp dl,byte ptr ldi] ;error code number7 je interr have enip byte ptr [di],-1 ;end of table yet?
jne interr table interr 2: ; ;yes, abort seareh lea si,init err n~g jmp interr 3 interr have:
inc di ;point to letters after msg #
mov si,di ;o~set of string for error message interr 3: ;
call do nonfatal ;non fatalerrorl pOp ds ret init error endp ,, , ~.

SYLI.ASM Program Page 51 ;
;HEX2BIN (: onverts ~ hex characters to a byte.
;Input: DS:SI points to string ;Output: AL=biDary value Carry SET ;f ERROR, else clear.
hex2bin proc near ;Skip leading spaces and leading O's hex nother: mov al,[si]
cmp al,O
je hex err ;if end of stling - error cmp al,' ' ;skip spaces je hex skip cmp al,"" ~ignore right align mark je hex skip cmp al,027h ;ignore single tic mark je he~ skip cmp al,OSeh ;ignore center mark je hex_skip cmp al,'O' ;skip leading O's jne hex gotstart hex skip: inc si jmp hex nother -hex_gotstar~: mov ah,O ;clearhighpart call hex convert jc hex err mov c1,4 shl al,cl ;move nibble left 4 bits mov ah,al inc si mov al,[si] ;get next char call hex convert jc hex err or ~l,ah ;combine into one byte in AL
jmp hex ok hex err: stc jmp hex end ~ 3 ~ 3 SYLI.ASM Program Page 52 hex ok: clc hex end:
ret he~bin endp ._ ..

;Collverts rhal to nibble in ;Input: AL=cha~
;Output: AL= nibble of char CarIy SET if EI~OR, else alear.
hex conver~ proc near ~p al,'O' jb hex con err cmp ~,~
ja hex not digit sub al,'O' jmp hex con ok ex not digit: cmp al,'F
ja hex lower cmp al,'A' jb hex con err sub al,'A'-10 ;subtract 'A' and add back 10 jmp hex con ok ex lower: cmp al,'f ja hex con err ~np al,'a' jb hex con err sub al,'a'-10 ;subtract 'a' and add back 10 jmp hex con ok ex con err: stc jmp hex co~ end hex con ok: clc hex co~ end:ret hex conYert endp 1 3 1 ~ 4 ~ 3 SYLI.ASM Prs)gram Page 53 ; (2uit menu processir~g - This procedure is called when the user selects Quit quit PROCNEAR ;quit menu processi~g clc ;clear carry to exit &om mem ret ;reblrn to menu handler quit ENDP
-- _ =.

._ ;XDV l~RI~ATE Exit to DQS, /QlJrr or /SYSTEM
Reset interrupts.
xdv ~enninate proc near push ds ourds cmp int on,0 je xdv termend ;is intelTupt set?
call int reset ;yes, reset interrup~
call timer reset ;resettimerinterrupt mov interrupt,0 ;reset xdY termend:
pOp ds ret xdv terminate endp . Unused everlt handling procedures - 1-2-3 calls these procedures but t~is add-in does not use them. Refer to your manual ~or more information.
xdv abort PROCNEAR ;eve~thandlingprocedures xdv adjust LABE~ NEAR
xdv clear LABEL NEAR

~ 3 ~
SYLI.ASM Program Page 54 xdv display LABEL NEAR
xdv_poll LA~EL NE~R
xdv retrieve LABEL N~Ala xdv save LABlF.L NEAR
xdv undo sa~e LABEI, N~EAR
xdv undo okay L~BEL NEAR
~dv undo swap LABlEL NEAR
xdv_sysinfo I~BEL NEAR
ret xdv abort ENDP
_...... . . . . ........ .

1 3 ~ 3 SYLINT.ASM Program Page 55 -- . ~
;SYIINT~SM Lntemlpt handler or mailbox, timer.

;MAIL ~ Receives interrupts from mailbox writes.
;

mail int proc far push all sti ;restore interrupts mov ax,cs ;set our DS
mov ds!ax rnov ~x,ipc.nim seg mov es,al~
mov di,ADR NIMFI~GS ;read NIM 1ags to mov al,byte ptr es:[di] ;reset the interrupt mov di,ADR UPDATE
mov bx,word ptr es:[di] ;read the register num mov cx,bx ;s~ve register number cmp ipc.ac~ive,O ;sylink already active?
ine mail intdone call int chkptr ;is this a valid mailbox?
jc mail intdone ;no, exit ;yes, get i~
mov ipc.active,1 ;set ACIIVE flag mov dx,word ptr es:[bx].mb count mov si,es ;save ES
call mbread ;do a mailbox read mov es,si ;restore ES, lBX ok cld ;ciear direction flag mov di,word ptr es:lbx].mb_ptr Ids si,cs:time loc ;DS:SI - 0~0:046ch movsw ,ge~ l~w word movsb ;get high byte mov al,cs:date ;get date offset byte q.l, ~ ~31~L3 SYLlNT.ASM Program Page 56 mvv byte ptr es:[di],al irlc di ;point to next byte m~v ax,cs:ipc.l~irn seg mov ds,ax mov si,ADR RlEPLY ;DS:5I = MB data in card mov cx,word ptr es:~bx].mb coun~
cld rep movsw ;copy all MlB data ~words ;

mov ax,es mov ds,ax ;DS=bu~er ;DI = new ptr since it's auto-incremented by P~[OVSW
mov word ptr [bx].mb ptr,di ~np di9word ptr rbxj.mb maxaddr J~ mbi rowok ,wraparound?
;

- mov ax,bx ;reset ptr to start add ax,mb data ;s~artbu~er+dataoffset mov word ptr [bx].mb_ptr,ax mbi rowok:;
;

mov cs:ipc.active,O ;reset ACIlVE flag : ~ mail irltdone:;
cli pop all : push a~f mo~ al,020h OLlt 02Oh~al ;send EOI
.: pop aY
iret mail int endp ....

. .
;MBREAD Read mail box registers during an interrupt, ;Input: DX-count, DS=CS, CX=register to read at.
Preserve SI,13X,DS.

.

~ ~ 3 ~
SYLl[NT.ASM Program Page 57 mbread proc near mov ax,ipc.nim seg ;set up 3ES:di for NIM card mov es,ax mov di,ADR P'~OUTE
mov byte ptr es:[di],255 ;mailbox read mov di,ADR DATA ;set register number moY word ptr es:ldi],cx raov di,ADR OPCODE ;set opcode for no3~-priori~hf read mov byte ptr es:~di~,O
mov di,ADR COUNT
mov word ptr es:[di],dx moY di,ADR SEND ;set the send flag for the read ;MUST alternate the serld flag with SY~INK !i!
,AIl VERSIONS!
mov al,send ~ag not al mov send flag,al mov byte ptr es:[dil,al ;

;wait for tbe send flag to be re-set to O
mov al,O
mbtime wait:;
cmp al,byte ptr es:[di] ;to right value yet?
jne mbtLme wait mbread accpt: ;
ret ;return to 123.
mbread endp .
;INT CE!I~PIR Checks for buffer and sets ES:BX if found.
;Input: BX = buffer register nurnber from spreadshee~
;Output: if Carry clear, ES:BX = points to buffer Carry see if Mailbox s~ot set.
Alters: AX,DX,ES,BX
ine_chkptlr proc near shl bx,1 ;x 2 shi bx,1 ;x 2 1 3 ~ 3 SYLINT.ASM Program Page 58 mov ax,word ptr mb_ptrs~bx] + 2 ;segment mov es,ax mov dx,word ptr mb_ptrs[bx] ;offset mov bx,d~
cmp ax,0 ;both - O = = error jne intc ok cmp bx,0 jne intc ok intc err: stc ;set error ~ag jmp intc done intc ok: clc ;clearerrorflag intc done: ret int chkptr endp .., ; TIMER INTHandles i~terrupts from timer tic.
Updates 'date' at midnight timer tic because you can't do DOS call to get date inside an interrupt.
timer int proe far pushf ;timer int eats one set of flags call cs:old ~ime ;dooldtimerinterrupt ;

cli ;no MB int now push ds push bx mov b~,0 mov ds,bx mov bx,046rh cmp word ptr[bx+2],018h ;check high word first jne date ok ~np word ptr[bx],Oafh ;check low word jne date ok illG cs:date ;

date ok: pop bx pop ds ~ret timer int endp --------------~---.. ......

q ~

SYLMB.ASM Program Page 59 ....
;SYLMB.ASM Mailbox menu rout;nes.
;

;

..
;Mailb~x Set Set:s up a buffer for ma~lbox data.
;Inputs: NONE
;Outputs: NONE
;

mail set proc near push ds ourds ;

cmp interrupt,0 je mbs donoint ;Get range of ~egister,Count,Si~e mbs getl: mov ah,0 ;newrange mov al,0 ;not anchored lea si,mb enter ;prompt message for range call do_range ;get the range jc mbs done ;CarrysetifF,SCAPE~ exit ourds mov dir flag,1 ;inerementhorizontally-default mov a~end row cmp ax,start row je mbs datdok mov dir flag,0 ;incrementvertically mbs datdok:
call get mbdata ;get dat~ from spreadsheet jc mbs err call mb ehkptr ;see if MB already assigned ~nc mbs isset ,yes,exit ;Get Range for Output of Mailbox Data mov ah,0 ;new range rnov al,-l ;anchored lea si,mb output ;prompt message for range SYLMB.ASM Program Page 60 call do_range ;get ~he range je rnbs getl ;Carry set if ESCAPE, last promp~
ourds call mbs setup ;set up ~he MB header info.
JC mbs err rnov cx,0 ;0-vertical letters mov ax,end row anp ax,start r~w jne mbs_set ;get the correct direction mov ~,1 ;1-horizontal letters mbs set: call mb geeptr ;setES:BXtopointer mov word ptr es:[bx].mb_dir,cx mov ax,start row mov word ptr es:~bx].mb strow,ax mov word ptr es:Lbx].mb currow,ax mov ax,s~art col ;savestartingrow,col mov word ptr es:[bx].mb stcol,ax mov word p~r es:[bx].mb curcol,aY
sti ;ints ok now jmp mbs ok mbs donoint:mov dl,209 ;nointerruptset!
jmp m~s_doerr mbs set: mov dl,210 ;mailbox already set!
jmp mbs doerr mbs err: mov dl,207 ;errorinsetupdaea!
mbs doerr: call error stc ~mp mbs dorle mbs_ok: clc mbs_done: pop ds ;res~ore 123DS
ret mail set endp --- . ....

9~

SYLMB.ASM Program Page 61 ;MBS SETUP Setup the header for a mailbox.
;Outputo Carry set if error, else slear.
;

mbs setup proc near mov ax,mbs size ;~by~estoallocate ;

call do_palloc ;allocate the memoly ourds jc mbs seterr ;

cli ;no ints ~ow!
mov di,mbs reg shl di,1 shl di,1 ;x4 = addressoffset mov word ptr mb_ptrs[di],bx ;ofliiet mov ax,es mov word ptr mb_ptrsEdi3~2,ax ;segment ;

mov ax,mbs size ;store size for de-alloc mov word ptr es:[bx].mb size,ax ;-mov ax,mbs count mov dx,ax ;save count mov word ptr es:~bx].mb count,ax mov ax,bx add ax,mb data ;addoffsettodata mov word ptr es:lbx].m~tr,ax mov word ptr es:~bx].mb start,ax ;set s~art addr.
;calculate mb maxaddr mov ax,mbs count shl ax,1 ;2 bytes/word add ax~tirne_size mov dx,mbs mbsize ;size of mailbox in letters mul dx add ax,mb data ;offsetinstructure add ax,bx ;of$et to buffer mov word ptr es:lbxl.mb maxaddr,aY
jmp mbs setok 9~ .

SYLMB.ASM Program Page ~2 bs seterr: s~c jmp mbs setdone mbs setok: clc mbs setdone:ourds ret mbs setup endp _ _. _ ...
;Mailbox Dump Dumps data from bu~ers to spreadsheet.
;Inputs: NONE
;Out~ts: NONE
;

ail dump proc near push ds ourds ;

cmp interrupt,0 jne mbd getrange jmp mbd donoint ;Get range of Register,Count,C)utput mbd getrange:
mov ah,O ;new range mov al,O ;not anchored lea si,mb enter ;prompt message for range call do range ;gett~erangs jnc mbd gotl jmp mbd done ;Ca~y set if ES(:APE, exit mbd gotl: call get mbdata ;getMBregisternumber,etc ourds jllC mbd datput jmp mbd elT
mbd datput:;
call mb chkptr ;i5 ~his MB se~?
jnc mbd continl ; setsES:BXtobuffer jrnp mbd donotset ;Put the data into the spreadsheet mbd continl:;

9~

~ 3 1 ~ ~

SYLMB.ASM Program Page 63 cli ;no ints while ptrs changing mov ax,word ptr eso~x3.mb start mov mbd start,ax ;save this start mov ax~word ptr es:[bx3.mb ptr m~Y mbd en~d,ax ;~ew start ~ this elld mov word ptr es:~bx].mb st~,ax sti ;pointers done, illts ok ;

mov ax~word ptr es:[bx].mb currow mo~ mbd row,ax ;get current row,column mov ~,word ptr es:~bx].mb curcol m~v mbd col,ax mov ax,word ptr es:~lbx].mb dir mov dump dir,ax ;anddirection ;

mov mbd dump2,0 ;reset~lag mov ax,mbd end mov mbd stop,ax ;set stop to end mov ax,word ptr es:[bx].mb count mov mbd count,ax ;save #datap~s/letter mov ax9mbd start mov dump stadr,a~
cmp mbd end,ax ;end~start = = no da~a jne mbd ~otdat jmp mbd ok mbd gotdat: ja mbd again ;end>start, 1 dump ;

mo~r mbd dump2,1 ;set 2 stage dump ilag mov ax,word ptr es:[bx3.mb_max2ddr mov mbd stop,ax ;lst end = end of buffer mbd agairl:;
mov ax,mbd count mov dump count,ax ;get#datapts/letter call dump ourds jc mbd err ;

cmp dir flag,1 ;flag~oreachletter jne mbd honz ;opposite of letter dir~

~ 3 ~ 3 SYLMB.ASM Program Page 64 inc mbd row jmp mbd dirdone mbd horiz: in~ mbd col mbd dirdone: ;
mov ax,dump_stadr cmp mbd~stop,ax ja mbd again cmp mbd dump2,0 ;2dumps?
je mbd ok ;no,end ;

call mbsetptr ;set ES:~X to buf~er add bx,mb data ;~dd of ~;et to start data mov dump stadr,b~
;

bd again2: mov ax,dump stadr cmp mbd end,~
jbe mbd ok ;

mov ax,mbd count mov dump count,a~ ;get~datapts/letter call dump uurds jc mbd err ;

cmp dir flag,1 ;flag for each letter jne mbd_horiz2 ;opposite of letter dir.
inc mbd row Jmp mbd dirdone2 mbd horiz2: inc mbd col mbd dirdone~: jmp mbd again2 mbd donotset: mov dl,208 ;MBnotsetmessage!
jmp mbd doerr mbd donoint:mov dl,209 ;nointerrup~messa~!
jmp mbd doerr mbd err: mov dl,207 ;errorinsetupdata!
mbd doerr: call error st~ ;st~y in menu if error jmp mbd done ,~a SYI,MB.ASM Program Page 65 mbd_ok: ; ;save new output location call mb getptr ;set JES:BX ~o buffer mov ax,mbd row ;ge~ current row,column mov word ptr es:~bx~.mb_currow,a~
m~v ax,rnbd col znov word ptr cs:[bx3.mb curcollax ;

clc ;reset error flag mbd done: ;
pop ds ;restore 123 DS
ret mail dump endp j . . .. .. .. ~ ..... .. ..
;DIJMP Dumps one row of data to tbe spreadsheet.
;Input: dump stadr =start address for this row, dump count = #rows across to dump, ~S = segment of buffer.
;

;Output: Carry: SET=3~REaOR, else clear, dump stadr = next row down in buffer, Destroys: ES, all regs, dump count.
dum~ proc near ourds mov ax,mbd row mov dump row,ax ;saverow mov ax,mbd col mov dump col,a~ ;savecol mo~ bx,dump stadr ;

wnp time into spreadsheet mov ~x,word ptr ex:~bx~ ;lowword of time mov dx,word ptr es:[bx~2 ;high word of time mov ~,û ;zero ou~ l~gh byte xchg dh,cl ;swap, dho0 push es ;push since exact E~S unknowr ~ 1 .

s ~ 3 ~
SYLMB.ASM Program Page 66 pushcx add bx,~ime size ;bump addrpointer mov dump stadr,bx call dint2flt ;put on number stack mov ax,ObOh mov dx,û18h ;divide by OO1~00bOh call dint2flt ;to get deamal dalys call div nt ourds pop ~
mov ax,start date ;starting lotus date add ax,cx ;add of~see to cunen~ date mov dx,û ;highword =O
call dint2flt ;push it~ up to ~5S35 call add flt ;add ~o time pop es mov ah,f~nt time intl ~ 080h ;long international~protect mov al,t nstack mov cx,dump col mov dx,dump row push es call in cell ;put da~a in the cell pop es ourds jc durnp err dump again:;
cmp dir flag,l ;flagforeachletter je dump horiz inc dump row ;dumpdown jmp dump dirdone dump horiz: inc dump col ;dumpacross dump_dirdone: ;
mov bx,dump s~adr mov ax,word ptr es:~bx]
push es call int2flt ;put on mlmber stack pop es ourds mov ah,fmt default + 080h ;protection is de~aul~

~~J

SYLMB.AShf Program Page 67 mov al,l nstack mov cx,dump col mo-r dx,dump row push es call in cell ;pu~ data in the cell pop es ourds J dump err mov bx,dump stadr ~dd bx,2 ;2 bytes/word mov dump stadrtbx dec dump count cmp dump count,0 jg dump again cl~
jmp dump done dump err: stc ;errorflag dunnp done:;
ret dump endp ;

;
;Mailbox Reset Output Resets a mailbox output range. No dump.
;Inputs: NONE
;Outputs: NONE
;

br output proc near push ds ourds ;

cmp interrupt,0 jne mbro~et1 jmp mbro donoint ;Get range of 3Register,Count ~ ~ 3 ~
SYLMB.ASM Program Page 68 mbro getl: mov ah,O ;newran~e mov al,O ;not anchored lea si,mb enter ;prompt message for range call do range ;getthe range ourds jnc m~ro get2 jmp mbro done ;Carry set if ESCAPE, e~it mbro get2: ca11 get_mbdata ;getMBregisternumbel, etc ourds jc mbro elT
call mb chkptr ;is ~his MB set?
~c mbro err ; setsES:BXtobuffer ,Get range of Ou~put mov ax,word ptr es:~bx].mb strow mov start row,ax mov end row,ax mov ax,word ptr es:[bx].mb stcol mov start col,ax mov end col,ax mov ax,word ptr es:[bx].mb dir cmp aXS~
jne mbro horiz inc end row ;verticalletters jmp mbro dirok mbro hor~: inc end col ;honzontallet~ers mbro dirok:;
mov ah,-l ;edit range mov al,-l ;anchored le~ simb output ;prornpt message for range call do_range ;gee the range ourds jc mbro getl ;Carry set if l@SC~PE~, last prompt ;now set in the mailbo~
mov c~,O ;O=ver~ical letters mov ax,end row cmp ax,star~ row jne mbro dir2 ;gee the correct dir~ction mov cx,l ;l =horizontal letters mbro dir2: call mb getptr ;get ES:BX of buffer 10~

SYLMlE~.ASM Program Page 69 mov word ptr es:~bx].mb dir,cx mov a~start_row mov word ptr es:[bx].mb strow,ax mov word ptr es:[bx~.mb currow,ax mov a~,star~ col ;savestartingrow,col mov word ptr es:~bx].mb stcol,ax mov word p~r es:[bx~.mb curcol,a~
;

jmp mbro ok mbro donomt: mov dl,209 5noi~terruptmessage!
jmp mbro doerr mbro err: mov dl,207 ;e~orinsetupdata!
mbro doerr: call er;ror stc jmp mbro done ;s~ay in menus if error mbro ok: clc mbro done: pop ds ;restore 123 DS
ret mbr output endp ,.

_ ..
;Mailbox Reset Resets a mailbox buffer.
;Inputs: NON33 ;Outputs: ~ONE
;

mbr_mb proc ne~
push ds ourds ;

emp intermpt,O
je mbs~n donoint ;Get ~a~ge of Reg~ster,Count,Output mcv ab,O ;new range mov al,O ;notanchored lea si,mb enter ;prompt message ~or range call do range ;getlherange 1 3 ~ 5 ~ 1 3 SYLMB.ASM Program Page 70 ourds JC mbrm done ;Car~y set if ESCAPE, exit call get mbda~a ;ge~ MB register rlumber - JC mbrm err call mb chkptr ;is this MB set?
jc mbrm err ; if yes,getES:BX
moY ax,word ptr es:[bx].mb size call do_p~ee ;de~ ocate the mlemory ourds jc mbrm err ;

mov dimbs reg ;registernumber shl di,l shl di,l ;zero out the pointer mov word ptr mb ptrs~di],0 mov word ptr mb_ptrs[di]~2,0 jmp mbrm ok mbrm donoint: mov dl,209 ;nointernaptmessage jmp mbrm doerr mbrm err: mov dl,207 ;errorinsetupdata!
:: mbrm doerr: call error st~ :
jmp mbrm done : ; , mbrm ok: clc mbrm done: pop ds ;restore 123 DS
ret mbr mb e~dp ;GET MBDATA Gets Mailbox set up data from spreadsheet.
;Input: startcol~stanrow = range to look aa.
;C)utput: mbs reg, mbs cou~t, mbs size are set.
Carry se~ if werror, else clear.

L~)~

SYLMB.ASM Program Page 71 get mbdata proc near ourds mov cx,start col mov dx,start row call get~um ;get MB register number ~np ~
je mbs gotl jmp mbs geterr mbs gotl: cmp ax,O ;re8# ~Oand ~aS12 jne mbs got2 jmp mbs geterr mbs got2: cmp ax,512 jle mbs got3 - jmp mbs geterr mbs got3: mov mbs reg,aY
cmp dir flag,l ;flagforeachletter je mbs ghoriz inc start row ;mbs down jmp mbs gdirdone mbs ghonz: inc start col ;mbsacross mbs gdirdone:
mov cx,start col mov dx9start row c~ll getnum ;get COUNT
cmp ch,~
jne mbs geterr cmp ax,O
jle mbs geterr cmp ax,512 jg mbs geterr mov mbs cou~t,ax cmp dir flag,l ;flagforeachletter je mbs g2horiz inc s~art row ;mbsdown jmp mbs g2~irdone mbs g2horiz: inc start col ;mbs aeross mbs ~2dirdone: ;
n~ov ~,start col 1~

SYLMB.ASM Program Page 72 mov dx,stare row call gçtnum ;get Buf~er Size cmp ch,0 jne mbs geterr c~p ax,O
jle nbs geterr mov mbs sizc,ax mov mbs mbsi~e,a~ ;saveit ;see if sLze is ok mov ax,mbs_count shl ax,l ;2 bytes/word add ax,time size mov dx,mbs size mul dx add ax,mb data jc mbs geterr cmp d~,~
jne mbs geterr cmp ax,6~000 ja mbs geterr add ax,80 ;safe~
m~v mbs size,aY
jmp mbs getok bs geterr: ste jmp mbs getdone mbs getok: clc ;clearerrorcode mbs getdone:ourds ret get mbdata endp .. . ~
;MB GETPI~ Sets ES:BX to point to the bu~r spet~ ed.
;Inpu~: mbs reg Y buf~er register number ~rom spreadsheet ;Output: ES:13~f = points to buffer Alters: AX,ll:)X

SYLMB.ASM Program Page 73 mb getptr proc near mov bx,mbs reg ;4 bytes per entry in table shl bx,1 ,x2 shl bx, 1 ;x 2 mov a~,wordptrmb ptrs[bx]+2 ;segrnent mov es7a~
mov dx,word ptr mb_ptrs[bxl ;offset mov bx,dx re~
mb getp~r endp ,.

...
;MB CHKPI'R Checks whe~her a buf~er has been set up.
;Input: mbs reg = register id for buffer ;Output: Carly clear and ES:BX=buf~r if buffer ex~sts, Carry set and ES:BX destroyed if no buffer.
;

mb chkptr proc near call mb getptr;getthe pointer mov ax,es cmp ax,O
Jne mbck ok ;checkES
cmp bx,O
jne mbck ok;andBX
mbck err: s~c jmp mbck done mbck ok: clc ;reseterrorilag mbck done: ret mb chkptr endp ..

1~

SYLFP.ASM Program Page 74 ;
;SYFP.ASM Lotus ADD-IN - SY/LINK interface ;

.... ...~ . ..
FLOATING POINT REAI3/WRlTE ROIJT:INES
;

- . .. . ...
;Floati~g Point Read ;Inputs: NONE
;Outputs: NONE
;

fp read proc near push ds ;save 1-2-3'sDS
ourds ;establish add-in's DS
;Make sure initialized ~irst cmp initialized,O
je fprinit err ;Get range of Route,Register,Count numbers fpr getl: mov ah,O ;newrange mov al,O ;notanchored mov ipc.active,O ;reset flag lea si,bread msg ;prompt message for range call do range ;get ~he range jc fpread ok ;Cany set if ESCAPE
call get data ;extractroute,reg,count jc fpread elT
mov ax,register shr al,l ;must be ODD numbered registers jnc fpread err3 ;

;Get output range mov ah,O ;new range mov al,^l ;anchored5 cursor at output range }ea si,bread2_rnsg ;prompt message for range call do range ;get the range jc fpr getl ;Carry set if ESCAPE
mov ax,count ,adjust for 4 bytes/FP read ~np ax,32 ;ma~ of 32 FP registers ja fpread err2 shl ax,l ;muttiply by 2 4 ~ 1 3 SYLFP.ASM Program PagP 75 shl ax,1 ;multiply by 2 mov bx,ipc.nim seg mov es,bx mov di,ADR COUNI
mov word ptr es:[di~,ax call read ;perform the read jc fpread cerr ;error co ;le already set call fpRut ;put data into spreadsheef.
mvv ipc.active,0 ;reset flag jnc fpread ok mov dl,21:1 ;error putt;ng into sprsht jmp fpread cerr fprlIUt err- mov dl,199 ;notinitializederroT
jmp ~pread cerr ~pread err: mov dl,203 ;illegalreadpalms!
jmp fpread cerr fpread err3: mov dl,206 ;Oddregistersonly!
jmp fpread cerr fpread err2: mov dl,205 ;illegalFPcount!
jmp fpread cerr fpread cerr:;
mov cs:ipc.active,0 call error ;display err msg fpread ok:
pop ds ;res~ore 123DS
ret fp read endp ;Floating Point Wr;te ;Inputs: NONE
;Outputs: ~ONE
;

fp write proc rlear push ds ;save 1-2-3'sDS
ourds ;establish add-in's DS

llL

~3~ 3 SYLFP.ASM Program Page 76 ;Make sure initialized first cmp ini$ialized,0 je fpwini~ err ;Get range of Route,Register,Count numbers fpw getl: mov ah,0 ;newrange mov al,0 ;not anchored mov ipc.ac~ive,0 ;reset flag lea si,bread msg ;prompl message for range call do range ;get~he range jc fpwr~e ok ;CarrysetifESC~PE
call get data ;ge~route,register,couQt jc fpwlite err mov ax,register shr al,1 ;must be ODD numbered regis~ers jne fpwrite err3 ;

;(:;et range of data to be written mov ah,O ;new range mov al,-1 ;anchored, cursor at data range lea si,fpwrite msg ;prompt message for range call do range ;gettherange jc ~pw_ge~1 ;Carry set if E~SCAPE
~Write the data to the SY/MAX
mov ax,count ;adjust for 4 by~es/FP read cmp ax~32 ;max of 32 FP registers ja fpumte err2 shl ax,1 ;multiply by 2 shl ax,1 ;multiply by 2 mov bx,ipc.nim seg mov es,bx mov di~ADR COlJNlr mov word ptr es:[di],ax call fpwrite ;perfonn the write mov ipc.aetive,O ;reset ~ag jne fp~te ok ;if ok, erld jmp fpwnte_cerr ;error code already set ;

fpwinit err: mov dl,199 ;notinitializederror jmp fpwrite cerr fpwrite err: mov dl,204 ;softwareerrrnsg 1 3 1 ~ ~13 SYLFP.ASM Program Page 77 jmp fpwrite_celT
fp~te err3: mov dl,206 ;onlyODDregisters jmp fpwrite cerr fpwr~te err2: mov dl,205 ;illegal FP count msg jmp fpwrite cerr pwrite cerr: mov cs:ipc.active,0 ,reset ~aag call error ;

~pwnte ok:;
pop ds ;restore 123 DS
ret fp write erldp __,0_____.______..,__ .....
;FPVVRITE Writes a block of floating point reg;sters to the SY/NET.
;Output:
Carry CLEAR if conversion OK, Carry SET if ERROR.
fpwrite proc near mov ax,ipc.nim seg mov es,ax mov adr offset,ADR WRTI:~ATA ;startoffRwrite data ;Get the data from the spreadsheet - dump to SY/LINK card mov ax,end row cmp ax,start row jg ~pw vertic ;get the correct direction mov col add,1 mov row add,0 ;inerementhori~ontally jmp ~pwrite num fpw vertic:
mov col add,0 mov row_add,1 ;incrementvertically fpwrite num:;
moY a~,start col mov dx,start row ;Get number ~rom spreadsheet ~ ~ 3 ~
SYL~P.ASM Program Page 78 mov ah,2 call out c~ll cmp cx,-l jne fpw err ;err if not on TOS
mov ax,cs mov es,ax ;ES:DI buffer ~or FP#
ourds lea difpdata ;put hex bytes in buf~er call pop ~lt mov ax,ipc.nim seg mov es,al~
mov di,adr ofl~et ourds lea sLfpda~a call d2f ;convert double to flo~t for PLC
add adr s~iet,4 ;4 bytes per FP#
mov cx,start col add cx,col add mov start col,a mov d?~,start row add dx,row_add mov start row,dx dec /~ount ;all regs done?
jnz fpwlite num ;

;Write the data to ~he network.
mov di,ADR OP(:~ODE ;set opcode for non-pri blk write mov byte ptr es:[di],2 ;

mov di,A~R SEND ;se~ the send flag for the write m~v byte ptr e~:[dil,1 ~vait for the send flag to be re-set to Q
mov ax,ipc.tirneout secs push es call set_timer pop es pwrite time: cmp byte ptr es:[di],0 ,wait for change to 0 je fpwntc_accept 11~

~ ~ 3 ~ 3 SYLFP.ASM Program Page 79 push es call sheck ~imer pOp es jnc fpwrite time ,loop and check for timeout jmp fpw timeot ;nardware problem is no reset ~pwnte accept:
ourds mov di,ADR ERROR ,check for error on read cmp word ptr es:[di~,0 jne fpw hard clc jmp fpwrite end fpw err: mov dl,213 ;illegalwritedata!
jmp fpw doerr fpw timeot: mov dl,212 ;timeout!
jmp fpw doerr fpw hard: mov dl,0 ;hardwareerrorcode fpw doerr: stc ;seterrorflag ;

fpwrite end: ourds ret ;return to 123.
fpwrite endp ;FP PUT Puts lloating point registers into spreadsheet.
;~npu~: coun~ = ~registers to pu~
utput:
CARRY SET o~ E~Ror, else clear.
fp_put proc ~ear push ds mov aY,ipc.n~m seg m~v ~s,ax ;Put the data into the spreadsheet mov ax,end row cmp ax,start row , SYLF'P.ASM Program Page 80 jg fpp vertic ;get the correctdirection mov col add,l mov row add,0 ;incrementhorizontally jmp fpp set fpp vertic:
mov col add,0 mov row add,l ;incrementver~ically fpp set:
mov adr of~iet,ADlR REPLY
fpp again: ;
mov di,adr o~set ;get the data from the reply buff~r lea si,fpdata ;bu~Eer i~or FP mLmber call f2d ;float to double conversion push es push ds mov ax,cs m~v es,ax ;lES:SI points at fp bufEer call push flt ;putfloatonTOS
pop ds pop es mov ah,~n~ default + 080h ;protection is default mov al,t nstack mov cx,start col mov dx,start row push ds push es call in cell ;put data in the cell pop es pop ~s ~c fpp err add adr offset,4 ;4 bytes per FP#
mov a,star~ col add ~,col add mov start ol,cx mov dx,star~ row add dx,row add mov start row,d~
dec count ;all regs done?
jnz fpp again 11~

SYLFP.ASM Program Page 81 dc ,clear error flag Jmp fpp exit fpp err: sts ;seterrorflag fpp exit:
pop ds ret fp put elldp .. .
;F2D Float to Double conversion ;Input: ES:DI bu~er for 4-~e short real floating point ~.
;Output: DS:SI bufEer ~or 8-byte long real floating point ~.
;

f2d proc near mov ax,word ptr es:~di+2]
mov ch,ah ;preserve ~ov ~
shr ax,cl ;shift right 3 bits mov ah,ch ;useoriginal shl ah,1 shl ah,1 ;get exponerlt 2nd bit sar ah,cl ;copy 3 times shr ah,1 shr ah,1 ;0 ou~ high 2 bits and ch,OcOh ;keep exp,sign or ah,ch mov [si+6],ax ;store high 2 by~es (DE) mov ax,word ptr es:[di~ 1~
shr ax,d ;cl already set to 3 mov ~si+S3,al ;store C
mov ax,word ptr es:[di]
mov ch,al shr ax,cl mov lsi~4],al ;s~ore B

~ 3 ~ 3 SYLFP.ASM Program Page 82 mov al,ch mov cl,5 shl al,cl mov [si-t3]9al ;store A
:ms)v ax90 mov [si ~ 2],al ;zero ou~ si + 2, mov [si],ax ; si,si~1.
ret E2d endp ;

;D2F Convert double to float.
;Input: DS:SI double, long real ;Vutput: ES~ loat9 sJort real #
d2f proc near mov ax,word ptr [si + 33 mov c1,3 shl ax,cl mov byte ptr es:[di],ah ;LSB
;

mov ax,word ptr [si+4]
shl a~9cl moY byte ptr es:[di+ 1]9ah ;LSB+ 1 ;

mov ax,word ptr [si + S]
shl ax9cl mov byte ptr es:[di~2],ah ;LSB*2 ;

mov ax9wordptr[si+6]
mov ch,ah ;save high byte shl ax,cl alld ah,O3fll ;keep exponent ~d ch,OcOh ;keep sign,exp sign or ah,ch mov byte ptr es:[di~3],ah ;MSB
ret d2f endp ........ ..

11~

~31~
SYI~F.ASM Program Page 83 ;SYLAF.a~m Il)tus ADD-IN @functions for SY/LINK interface ;

INCLUDE~ 123 head.asm ;bring in add-in equates INCLIJDE~ 123 mac.asm ;bri~g in add in macros PUBLIC ~uncnum ;number of fun~ions in add-in PUBLIC fu~ctab ;fim~ion definition table PIJBLIC in~t ;i~i~ializatio~ procedure PUBLTC term ;termi~atio}l proeedure INCLUDE SYLADDR.~M
startcs ;see 123 mac.asm ~or macro code assume es:nothing furlc~um equ 15 functab equ this byte FUNC_DEF @read, read,2 ;readaregister FIJNC_DEF @write, wr~te,3 ;write a re~ster FUNC DEF @bwnte, bwrite,4 ;wnte a register with mask FUNC DEF ~?bread, bread,3 ;read a bit of a register FUNC DEF ~mail, mail,1 ;checkformail FUNC DEF ~?sylelT, sylerr,1 ;checkerrorflagsinSY/LIN~C
FUNC_!DEF @or, or,2 ;bit wise OR
FUNC I)EF @and, and,2 ;bitwise AND
FIJNC DEF @not, not,1 ;bit wise NOT= in~ert FUNC DEF @bit2dec, bit2dec,1 ,bitpositiontodecimal FUNC DEF @dec2bit, dee2bi~,1 ;decimal to bit position FUNC DEF @normal, normal,2 ;area under normal culve FUNC DEF @fpread, fpread,2 ;floating point read FUNC DEF @fpwrite, fpwrite,3 ;lloating pointwri~e FtJNC DEF @timeaut, timeoutj1 ;t~meoutvalue FUNC DEF e~ld r~ad db '@READ(',O
write db'~?WRITE(',O
bwrite db '@BWRITE(',O
bread db '@BREADt'~O

I ., CI .

~ ~3~13 SYLAF.ASM Program Page 84 mail db '@MAIL(',O
sylerr db'@SYLERR(',O
or db'@OR(',O
and db'~AND(',O
not db'@NOT(',O
bit2dec ~b'@BIT2DEC(',O
der2bit db '~?DEC2BIT(',O
ormal db'@NORMAL(',O
fpread db'~FPRE~AD~',O
fpwrite db '@FPWRITE~',O
timeout db '@TIMEOUT(',O
;
star~ time dw O ;time of startofloop register dw O ;register to use in read/write value dw O ;value tn write to a register bmask dw O ;whichbit tochange fpdata DQ Oh ;bu~er for long real ipc_seg dw û ;segment of ipc ipc o~f dw O ;offsetofipc ;
INCLUDE SYLNORM.ASM

..
;Macro to set the active flag iDdica~ing it's accessing the ;SYLINK card. Lock out all others.
;Registers: Changes AX, sets ES:BX = IPC
set aetive MACRO
mov ax,ipc seg mov es,ax ;set ACI7VE flag in IPC
mov bx,ipc off mov ax,l mov w ord ptr es:[bx].active,aY
ENDM
.. ....
;Macro to reset the active ~lag indicating it's done ;accessing the SYLINK card~
;Registers: Changes A~ sets ES:BX = IPC
reset active MACRO
mov ax,ipc seg mov es,a~ ;set ACI~VE flag in IPC

I~f) ~ ~L 3 ;~
SYL~.ASM Program Page 8$
mov bxip ofE
rnov ax90 mov word ptr es:[bx].active,aY
ENDM
;

;RE~AD Read a regis~er from the SY/NET.
;I~put: Top of number stack - register number TOS-1 ~ string of decimal route nums "90,198"
;Output: Pushes register value on Top of stack ERR = illegal register ~, invalid route, e~c.
~read proc far mv~ ax,2 call stackadj jnc read ok jmp abortr2 read olc: start fune ;TheSTART FUNCmacro ;

push ds call ~2int ;get register number pop ds jc abortr3 moY reg~s~er,a~ ;store regis~er ~um cmp ax,0 je abortr3 ;if 0- exit push ds call scheck flt ;getstring pop ds jnc abortr3 ;error if not strirlg, dean up stack ;

call route ;convert string to route ;sets ES to sylink seg jc abortr ,exit if error ;

mov di,ADR D~T~ ;set regis~er number mov ax,register m~v word ptr es:ldi],a 1~1 ~ 3 ~ 3 YI~F.ASM Program Page 86 mov di,AD:R OPCODE ;set opcode for non-priori~y read mov byte ptr es:[di3,0 mov di,ADR COIJNT ;read 1 register mov word ptr es:[di~
mov di,ADR SENI:I ;set the send flag îor 2he read mov byte ptr es:~di],1 ;

;wait for ~he send flag to be re-set to 0 lmov cl,O
call ~imeout cmp ch,0 ; - = û ?
jnz abortr ;timed out wi~h no change! exit read accept:
mov di9ADR ERROR ,check for error on read cmp word ptr es:Edi],0 jne abortr ;

mov di,ADR REPLY ;get the data ~om the reply buf~er mov ax,word ptr es:[di~
call int2flt ;and put it on the stack jmp read end abortr3: ;mov ax~0 ;elear number stack ;call stackadj ;NOTE: THIS RESULTS IN NUMBE~ STACK
;FULL ERROlR IN 1-2-3 abortr: ;if error, call err flt ;put ERR on top of m~ ber stack read end: ;
rese~ ac~ive ;sylinkactive=false end ~unc abortr2:
ret ;return to 123.
@read endp .

__ ;WRITE Write a value to a register i rom the SY/NET.
;Input: TOS = value to w~ite TOS-1 D reg~ster nurnber ~ 3 ~ 3 SYL4~.ASM Program Page 87 TOS-2 = stnng of decimal route nums ;Output: Pushes register value on Top of s~ack ERR = illegal register #, invalid route, ets.
~?write proc ~
mov ax,3 ;3 parameters passed call stackad3 jnc write olc jmp zbortw2 wri~e ok: start func ;TheSTART FtJNCmacro push ds call d~t2int ;get value to write pop ds ;use double to get -32768 i~ abortw3 cmp dx,0 ;make sure < 65535 jg ~ortw3 mov value,ax push ds call ~It2int ;get register number pop ds jc abortw3 mov register,al~ ;store registernum cmp ax,O
je abortw3 ;if 0 - exit push ~s call scheck flt ;getstring pop ds ~nc abortw3 ;error if not string call route ;convert str~ng to route ;sets ES to sylink seg jc aborhv ;e~it if error ;

mov di,ADR DATA ;set register llumber mov ax,register mov word ptr es:[di],ax mov di,ADR OPCODE~ ;set opcode for llon-priori~ write mov byte ptr es:[di],2 mov di,AD~ C(3UNT ;write 1 register 12~

~ 3 ~
SYI~F.ASM Program Page 88 mov word ptr es:~di],1 mov ~l~,value mov di,~R WRl'DATA ;set the value to write mov ~vord ptr es:ldi~
mov di,Al~R SEND ;set the send ~ag for the write mov ~e ptr es:Ldi],1 ;

;wait for the send flag to be re-set ~o O
mov cl,O
call timeout cmp eh,O ; - = O ?
jnz abortw ;dmed out witb no change! e~it write acsept:
mov di,ADR ERROR ;ehe~ for error on w~ite cmp word ptr es:ldi],O
jne abortw ;

mov di,ADR WRTDATA ;get the data from the reply buffer mov ax,word ptr es:ldil call int2flt ;and pu~ it on the stack jmp wnte end abortw3: ;mo~r ax,O ;clear number stack ;call seaekad;
aborh~: ; ;if error, call err ~t ;put ERR on top ~ n~lmber stack write_end: ;
reset ac~ive ;reset ACIIVE ~ag for sylinlc aceess end func abortw2: ;
ret ;return to 123.
@write endp .

;BWRl l E Write a value to a register from the SY/NE~T using a bmask.
;Lnput: TC)S - value to ~te, O=off, ~ >O me~s on TC~S-1 - bmaslc, bit position to change 1~ ~

` ~ 3 ~ 3 SYLAlF.ASM Program Page 89 TOS-2 ~ register number TQS-3 = stnng of decimal route nums ;Qutput: Pushes regis~er value on Top of stack ERR - illegal regis~er #, illvalid route, etc.
;

~bwr~te proc far mov ax,4 ;4 parameters passed call stackadj jnc bwri~e_ok jmp abortbw2 bwrite ok: start func ;llle ST~T FUNC macro push ds call flt2int ;ge~ value to bwrite pop ds jc bw elT ;exi~ if number too big mov value,ax push ds call flt2int ;get bmask pop ds ~c bw err mov bmask,ax cmp bmaskO ;bmask must be between 1 and 16 je bw_err cmp bmask,16 ja bw err .
push ds call flt2int ;ge~ register number pop ds JC bw err mov register,ax ;store register num ~mp ax,~
je bw err ;ifO-exit push ds call scheck flt ;getstring pop ~s jnc bw err ;error if not stnng ;

12~

'~ ~ 3 ~ 3 S~YI~F.ASM Program Page 90 call route ;convert s~ring ~o rou~e ;sets E~S to syiink seg jnc bw eontinu bw err: jmp abottbw3 ;e%ieiferror ~w conti~: ;Make up corTect bmask and value to write moY cx,bmaslc dec sx ;~15 range mov ax,l shl ax,cl ;shift to get right bit position mov blmask,aY
;

cmp value,0 ;if OFF, write a () je bwrite vok mov ax,lbmask mov value,ax ;if ON, bmask is the value to wri~e ~write vok:;
mov di,ADR DATA ;set register number mov ax,register mov word ptr es:[di],ax mov ditADR OPCODE ;set opcode for no~-priority bwrite mov byte ptr es:[di],3 mov di,ADR COUNT ;bwrite 1 reg~ster mov word ptr es:[di],1 mov ax,value mov diADR WRll)~TA ;set the value to bwrite mov word p~ es:[di~,ax mov di,ADR ~K
mov a71,bmask mov word ptr es:ldi],ax mov di,ADR_SE~D ;set the send flag ~or the bwrite mov byte ptr es:~di~,1 ;

;wait for the send Ilag to be re~set to 0 mov c1,0 call timeou~
cmp chl0 ;- =0 ?
jn~ abortbw ;timed out with no changel exit bw~ite accept:
mov di,ADR ERROR ;check for error on bwrite ~U ~ 3 ~

SYLAF.ASM Program Page 91 cmp word ptr es:[di],0 ine abortbw mov di,AD R WRll D~TA ;ge~ the data ~om the reply buffer mov ax,word plr es:~di]
call int2~1t ;and put it on the stack jmp bwrite end abortbw3: ;mov ax~0 ;clear mlmber stack ;eall staek~dj abortbw: ; ;if error, call err f~t ;put ERR on top of number stack bwrite end:;
reset active ;reset ACI~ lag, sylink access end fun~
abortbw2:
ret ;return to 123.
@bwrite endp _ .. ..

;BREAD Read a bit ~om a regis~er ~om the SY/NET.
;Input: TOS = bi~ number to read TOS-1 = regi~ter numbcr l'OS-2 - stIing of decimal rou~e nums "90,198"
;Output: Pushes register value on l[op of s~ack ERR = illegal register ~ valid routet etc.
;

@bread proc far mov ax,3 call stackad;
jnc bread ok jmp abortbr2 bread ok: start func ;TheSTART FlJNCmacro push ds ~11 i~t2int ;get bit ~u~nber pop ds 5 ~ ~ ~
SYLAF.ASM Program Page 92 jnc br30k jmp abortbr3 ;ifcarryset, abort br30k: mo~ bmask,ax cmp bmask,O ;bmask must be betweell 1 and 16 je abortbr3 cmp bmask,16 ja abortbr3 ;

push ds call ~t~int ;get regis~er number pop ds jc abortbr3 mov register,ax ;s~ore register ~p a~c,O
je abor~br3 ;if O - exit push ds call scheck flt ;getstring pop ds jnc abortbr3 ;error if not string, cle~n up stack ;

call route ;convert string to route ;sets ES to sylink seg jc abortbr ,exit if error ;

mov di,ADR DATA ;setregistermlmber mov ax,register mov word ptr es:[di],ax mo~ di,ADR OlPCODE~ ;set opcode for non-priority bread mov byte ptr es:ldi~,O
mov di,ADR COUNT ;bread 1 register mov word ptr es:[di],1 mov di,ADR SEND ;set the send flag for the bread mov by~e ptr es:~di],1 ?
,wait for the send flag to be re-set to O
moY cl,O
call tLmeout cmp ch,O ;==O?
jnz abortbr ;timed out with no change! exit bread accept:

12~

SYLAF.ASM Program Page 93 mov di,ADlR ERROR ;cheek for error on bread cmp word ptr es:[di~,0 jne abortbr mo~ diADR RlEPLY ;get the data ~OITI the reply buffer mov dx,word ptr es:[di]
mov cx,bmask dec cx ;~1~ range mov ax,1 shl ax,~ ;shift to get righ~ bit position and ax,dx ;AND o~f all other bits call int2flt ;and pUt it on the stack jmp bread end -abortbr3: ;mov ax,0 ;clear number stack ;call stackadj ;NOTE: THIS RESULTS IN NUMBER Sl'ACK
;l~ULL ERROR ~ 2-3 abortbr: ;if error, call err flt ;put ERR on top of number stack bread end:
reset active end func abortbr2:
ret ;return to 123.
@bread endp . . .

__ _ ;MAIL Chccks for writes to the mailbox ~?mail proc far moY ax,l ;check for the passed number call stackadj jc mail err start func call drop ~t ;throwpassednumberaway set active mov ax~word ptr es:[~x].nim_seg m~v e~

SYLAF.ASM Program Page 94 mvv bx,ADR UPDATE
mov ax,word ptr es:~bxJ
push es push bx call i~t~flt pop bx pop es ;rese~ mailbox register mov word p~r es:~bx],0 rese~ active end func mail err:
ret @mail endp -- .. ~
;SYLERR Checlcs SYLINK error flags.
@sylerr proc far mov ax~1 ;check for the passed number call stackadj jc sylerr err start fimc rall drop flt ;throw passed number away mov ax,ipc seg ;get address of sylink card mov es,a~ ;from IPC
mov bx,ipc_off mov ax,word ptr es:~bx].l~im seg mov es,ax mov bx,ADR ERROR
mov ax,word ptr es:~bx]
~11 int2~t end func sylerr err:
ret @sylerr endp .. .....

1~

SYLAF.ASM Program Page 95 ;AND Bit wise and of h~o 16 bit numbers.
;Input: TOS = b, TOS-1 = a ;Output: TOS = a ~d b ~?and proc far mov ax,2 call stackadj jc abortand start fi~c ;The S~ART F lJNC ma~ro pu5h ds call dflt2int pop ds jc and err ;number too large cmp dx,O
jg and err push a~c ;sa~e2ndvalue push ds call dflt2int pop ds pop bx ;restore ~-nd value jc and err ;numbertoolarge cmp dx,0 jg and err an~ ax,bx ;AND with ~lrst value call int2~t ;put result on stack jmp and end and err:
call err flt ;put ERR on top of number stack and erld:
end func abortand:
ret ~?and endp .

-- _ _ ;~R Bit wise or of two 16 bit numbers.
;Input: ~ros = b, TOS-1 = a ;C)utput: TOS=a or b ~?or proc far mov ax,2 SYLAF.ASM Program Page 96 call stackadj jc abortor start func ;The START FUNC macro push ds call dht2int pop ds jc or err ;number too large ~mp d?c,0 .i~ or err push ax ;save 2nd value push ds call dflt2int pop ds pop bx ;restore 2nd value je or err ;number too large cmp dx,0 jg or err or ax,bx ;AND w~th f;rst value call int211t ;put result on stack jmp or end or err:
call err flt ;put ERR on top of number stack or end:
end func abortor: ;
ret @or endp ;N~T Bit wise invcrt of two 16 bit numbers.
;~nput: TOS - a, 0-65535 ;Output: TOS-no~ 65535 ~not proc ~ar mov ax,1 call stackadj jc abortnot start func ;The ST~RT FUNC macro push ds 13~

SYI~F.ASP~ Program Page 97 call dfl~int pop ds jc not err ;numbertoolarge cmp dx,0 jg not err not ax ;NOT ax call int2flt ,put re~lt on s~ack jmp not end not err:
call err flt ;put E~RR OIl top of number stack not end:
end func abo~tnot:
ret (3?not endp . ...

;BIT2DEC Converts a bit position to a decimal mLmber ;Input: TOS a, 1 to 16 ;OUtpllt: TOS= -3Z768 to 32767 ~bit2dec proc far mov ax,l call stackadj jc abortb2d start func ;The START FIJNC macro call flt2int ;bi~ number jc b2d err ;~umbertoolarge cmp ax,O ;bmask must be between 1 and 16 je b2d err cmp a~c,16 ja b2d err ;

mov ~,~
dec c~c ;0-15 range mov ax,l shl ax,cl ;shift to ~t tight bit position calI int2flt ;and put it OII ~hc s~ack jmp b2d end L~

~ 3 ~
SYLAF.ASM Program Page 98 b~d err:
call err flt ;put ERR on top of number stack b2d_end:
end furlc abortb2d: ;
ret @bi~dec endp ;DEl~BIT Converts a decimal number to a bit position ;Input: TC~S = -32768 to 32767, or ~65535 ;Ou~put: TOS= 1 to 16, or 0=no bits on Returns first (Aght-most) bit on.
@dec2bit proc far mov ax,1 call stackadj jc abortd2b start func ;The START FUNC macro call d~t2int jc d~b err ;numbertoolarge cmp dx,O
jg d2b err ;no pos. #'s in DX
clc ~ov s:x,l shift it: shr ax,1 ;shiftintocarry jc got bit inc cx cmp c1~,16 jle shift it mov cx,0 ;no bits on got bit: mov ax,cx call illt2fl~
jmp d2b end ;exit d2b err:
call err flt ;put ERlR on top of number stack d2b end:
end furlc l3~
-1 ~ .1 5 ~ 1 ~
SYI AF.ASM Progr~m Page 99 bortd2b: ;
ret ~dec2bit endp . . .

@TIMEOUT Sets the timeout ~alues in the IPC.
~3?timeout pro~ ~
mov ax,l call stackadj jc aborttime start func ;The STA~T FIJNC macro call ~t2in~
jc @time err ;numbertoolarge?
crnp ax,3600 ;max number of seconds ja @time err cmp ax,O ;no negative timeouts jl ~a?time err mov cx,ax ;save number of seconds mov ax,ipc seg mov es,ax ;put numbers in IPC area mov bx,ipc o~
cmp cx,O ;if 0, return current setting je @time getit ;

mov wordptres:[bx].timeout secs,cx ~ov ax,~
mov d7~,18 mul dx ;number tic=number secs*18 mov word ptr es:[bx].timeout tics,ax mov ax,cx ;restore #seconds jmp t~ime shove ~time_getit: mov ax,word ptr es:[bx~.timeout secs time shove: call int2ilt ;putonnumberstack jmp @time end SYLAF.ASM Program Page 100 @time err: call err flt ;put ERR on top of number stack ~time end: end fune aborttime: re~
@timeout el~dp . .

;ROU~E
;Convert s~ring of decimal numbers to a route of binary ~urnbers.
;Input: ES:BX = address of string ;OUtpllt: binaly numbers stored at n~m card route Carly clear if conversion OK7 Ca~y set if error.
ES = sylink segment ;NO~: SETS ACIIVE lFLAG FOR ACCESS TO SYLINK
;AII registers altered.
route proc near push ds ;save old DS
mov cx,es ;s~ve string ES
mov dx,bx ;save string of Eset set active ;set ES:BX and active flag mov ax,word p~r es:~bx]nim seg mov ds,a~
mov bx,dx ;restore string BX
mov es,cx ;restore string E~S
mov si,ADR ROU~
rnov dl,10 ;check for valid char char new: mov ax~0 ;initializenumber char nother: mov dh,byte ptr es:lbxJ
mov cl,dh sub c1,'0' ;< 0 jl char check cmp cl,9 ;~ 9 ?
jg char check mul dl ;ax- ax 10 (dl = 10) add ~I,cl char inc: inc bx lZ~

~ ~3~ 3 SYLAF.ASM Program Page 101 jmp char nother ;get nextchar ;check for end of string char check:
cmp dh,'~' je ~ext char ;comma delimiter between numbers ~mp d~,'' je char inc ;skipleadingbl~ks cmp dh,0 je char end ;zero ~erminated s~ring jmp char in ;skip non-numeric chars ne~ char:
inc bx ;next char mo~r byte ptr [si},al ;store conve~ed number inc si ;next f~ee space Ln buffer jmp char new char err: stc ;set carry - error flag jmp char exit char end: ;
mov byte ptr ~si],al ;save last rlumber mov byte ptr [si+ 1],255 ;add ~rminator clc ;reset error flag - OK
char exit:
mov ax5ds mov es,ax ;makeES=sylinksegment pop ds ;restore DS
ret route endp ini~ proc ~r push ds pushf ;m~t save flags for error push c~
pop ds ;CS= =DS for @functions 1~

SYL~F.ASM Program Page 102 mov dx,al~
;Check Inter-Program Communciations address mov bx,O
mov es,~
mov bx,04F~H
mov ax,word ptr es:[bx] ;IPC segment cmp ax,O ;if seg=O, error je init err mov ipc seg,ax sub bx,2 mov ax,word ptr es:[bx]
mov ipc o~ ;IPCo~set mov ax,ipc seg mov es,~x ;makesure SYLINKcard mov bx,ipc off ;segment ~ - C~OO
mov ax,word ptr es:[bx].r~im seg cmp ah,Ocah jb init err cmp ah,Od2h ;se~pnent ~ = d200 ja init err jmp init ok init err: mov ax,dx ;errorcodefromax popf ;restore ~lags iî error jmp init end init ok: popf xor ax,ax ;ciear error flag c~c ;

init end: pop ds ret ;exit init endp -- .... ..

13~

4 ~ 3 ~

SYI.AF.ASM Program Page 103 ;
term proc far ;dumrnyroutirle for~ermination ;processing when eieher ;/System or /Quit is called xor ax,ax ret term endp ... -- .. . ..

-- . .
;TIMEOUT Tes~s a byte for changLng w~thin a time limit.
Uses the timer tic that updates 0000:046ch.
Input: ES:DI - b~te to test for changing tD value in ~L
CL = byte value to check for Output: CH = O if timed out, CH< >0 if OK
Registers: Destoys SI,AX,BX,DX,Flags timeout proc near mov ch,0 ;flag for OK
mov ax,cs:ipc seg mov ds,ax ;ge~timeou~ ticsvalue assume ds:nothing ;firom IPC area.
mov si,cs:ipc off mov b%,word ptr ~si].timeout tics xor ax,ax ;get time from 0~0:046ch mov ds,a~c mov si,046ch mov ax,word ptr ~si]
mnv cs:start time,ax time wait:
~np c~,byte ptr es~ ;to right ValU5 yet7 jz time done ;yes,;ump ;

mov d~,word ptr lsi]
sub dx,cs:sta~ t~me anp dx,bx ;bx=#tics max.
jle time wait moY c11,0f~ ;flag for timed out -error .3 SYLAF.ASM Program Page 1 ~ime done: ourds assume ds:cgroup ret timeout endp IN(:LUDE sylfpat.asm lEXIRN push Elt:NEAR
EXI~N pop flt:NEA~
lEX~N sqrt flt:NF,~
EXIRN add_flt:NEAR
EXI~N over flt:NEAR
~N halve flt:NE~
E~XllRN exp flt:NEAR
EX'I~N div flt:NEAR
EXI~N cmpO flt:NEAR
EXIRN sub flt:NEAR
EXIlRN drop flt:NEAR
EXI'RN swap flt:NEAR
EXI~RN abs fl~:NEAR
E~I~N cmp flt:NP~AR
EXI~N ds 123:WORD ;initialized in INIT procedure EXI~N flt2int:NEAR ;pops TOS ~o signed integer EX~lRN int2flt:NEAR ;s~ores irlteger as a float at TO~
EXI~N l[nul flt:NEAR ;~ultiplies T~:3S by TOS-1 iE~XTRN stackadj:NEAR ;checks specifiled arguments on stack EXTRN err ~t:N~R ;puts err o~ number stack EXIRN scheck flt:NEAR ;check for string at TOS
EXIlRN drop fl~:NEAR
EXli`KN dflt2int:NEAR
E~XIlRN dint2flt:11EAR
EXI~N dup flt:NE~
;
endcs ;macro to end the segment END
_ _ ~ 5 ;SYLFPAT.ASM ADD-IN Floating Point @functions .

;
;FP~AD Read a floating point register from the ~Y/NET.
,Input: Top of llumber stack - register number TOS-1 - string of decimal route nums "9Q198"
;Outpu~: Pushes floatillg point vallle on Top of stack ERR = illegal register #, invalid rou~e, etc.
;
@~pread proc far mov ax,2 call stackadj jnc fpread ok 3mp abortfpr2 fpread ok: start func ;The START FUNC macro push ds call flt2int ;get register number pop ds jc abortfpr3 mov register,ax ~store registernum cmp ax,0 je abor~fpr3 ;if 0 - exlt shr ax,l jnc abortfpr3 ;register num must be ODD
push ds call scheck flt ;getstring pop ds jnc abortf~r3 ;error if not string, cleall up stack ;

call route ;convert string to route jc abortfpr ;e1ut if error o mov ax,ipc_seg ;get address of sylink card mov es,ax ;f~om IPC
mov bxipc off mov ax,w~rd ptr es:~bxl.r~im seg moY es,ax ~ ~311 ~3 SYLFPAT.ASM Program Page 106 mov di9ADR DATA ;set registernumber mov ax,regis~er mov word ptr es:fdi3,ax moY di,ADR OPCODE ;se~ opcode for block read mov ~e ptr es:[sii3,0 mov di,A~R COUNT ;read 2 registers for one FI,O~T
mov word ptr es:[di],2 mov di,ADR SEND ;set the send flag for the read mov byte ptr es:[di],1 ;

;wait ~or the send flag to be re-set to 0 mov c1,0 call timeout ~np ch,0 ; = = O ?
jnz abortfpr ;t{med ~ut with ~o change! exit fpread accept:
mov di,ADR ERROR ;check for error on ~pread cmp word ptr es:~di],0 jne abortfpr ;

mov di,ADR REPLY ;get ~e data from the reply buffer mov ax,cs mov ds,ax ;uses DS:SI for output lea si,fpdata call f2d ;convert ~oat to double mov ax,cs mov es,a~ ;ES:SI to push on TOS
call push flt jmp fpreaci end abortfpr3: ;mov a~,0 ;clear number stack ;call stackadj ;NOTE: THIS RESULTS IN NUMBER STACK
;F~ ERROR IN 1-2-3 abortfpr: ;if error, call err flt ;put EiE~R on top of number stack fpread end:;
end func abortfpr2:
ret ;rehlrn ~o 123.

SYLlFPAT.ASM Program Page 107 ~fpread endp ;

;W~ITE Write a value to a register from the SY/NET.
;Input: TOS = fp value to write TOS-1 = register number T~:)S-X = string of decimal route nurns ;Output: Pushes register value on Top of stack ERR = illega~ register #, invalid route, etc.
;

@fpwrite proc far mov ~x,3 ;3 parameters passed call staGkad;
jnc fpwrite ok jmp abortfpw2 fpwrite ok: start func ;The5TART FlUNCrnacro ;

push cs mov ax~cs mov es,a~
lea di,fpda~a ;ES:I)I gets floating pt. number call pop flt pop ds push es call flt2int ;get register number P~p ds mov register,ax ;store register num cmp ax,0 je abortfpw3 ;if 0 - exit shr ax,1 jnc abortfpw3 ;must be ODD register number push ds call scheck ~t ;getstring pop ds jnc abortfpw3 ;errQr if not string call route ;convert string to route jc abortfpw ;exit if error 1,L~ 3 ' ~ 3 ~
SYLFPAT.ASM Program Page 108 mov a~,ipc seg ;get address Q~ sylink card mav es,ax ;from IPC
mov bx,ipc off mov ax,word ptr es:~bx].nim_seg mov es,ax ;

lea si,fpdata ;input I)S:ST = double mov di,Al:iR WRTDATA ;outpue ES:DI for floa~
call d2f ;conver~ double to ~loat ;

mov di9ADR DAT~ ;set register number mov ax,register mov word ptr es:[di3,ax mov di,ADR OPCODE ;setopcodeforno~-prion~ e mov byte ptr es:[di],2 mov di,ADR COUNT ;write4registers mov word ptr es:[di~,4 mov di,ADR SEND ;set the send flag for the fpwrite mov byte ptr es:[di],1 ;
;wait for the send flag to be re-set to 0 ~ov ~1,0 call timeout cmp ch,0 ; = = O ?
jnz abortfpw ;timed out with no change! exit ~pwrite accept:
mov di,ADR ERROR ;check for error on fpwrite cmp word ptr es:ldi],0 jne abortfpw ;

lea si,fpdata mov ax~cs mov es,ax call push_flt ;res~ore origirlal number to TOS
jmp fpwrite end abort~pw3: ;mov ax,0 ;clear number stack ;call stackadj abortfpw: ; ;if error, 1~

~5~ 3 SYLFPAT.ASM Program Page 109 call err flt ;pu~ ERR OD top of number stack ;

fpwrite çnd:;
end func aborefpw2:;
ret ;return ~o 123.
@fpwrite endp ..
;F2D Float to Double conversion ;Input: ES:DI buffer ~or 4-byte short real floating pOillt #.
;Output: DS:SI buf~er for 8-byte lor~g real floating point ~.
;

!d proc near mov ax,word ptr es:[di+2~
mov ch,ah ;preserve mov cl,3 shr ax,cl ;shift right 3 bits mov ah,ch ;useoriginal shl ah,1 shl ah,1 ;get exponent 2nd bit sar ah,GI ;copy 3 times shr ah,1 shr ah, 1 ;0 out high 2 bits and ch,OcOh ;lceep çxp,sign or ah,ch mov [si~6],ax ;store high 2 bytes (DE) ;

mov ax,word ptr es:[di + 1~
shr ax,cl ;cl already set to 3 mov lsi~5],al ;store C
;

mov ax,word ptr es:~di]
mo~r ch,al shr ax,cl mov tsi+43,al ;store B
;

mov al,ch 1L~5 ~ 3 ~ 5 4 ~ 3 SYLFPAT.ASM Program Page 110 mov cl,S
shl al,cl mov lsi~3~,al ;store A
n~ov ax,O
mov lsi ~ 2],al ;zero out si ~ 2, mov ~si~,ax ; si,si+l.
ret f2d endp . ._ . .

;D2F Conver~ double to ~oat.
;Input: DS:5I double ;C)utput: ES:DI float d2f proc near mov ax,word ptr ~si~3]
mov c1,3 shl ax,cl mov byee ptr es:[di],ah ;I,SB
mov ax,word ptr lsi~4]
shl ax,cl rnov byte ptr es:[di+ 1],ah ;LSB+ 1 mov ax,word ptr [si~S]
shl ax,cl mov byte ptr es:~di~2~,ah ;LSB~2 mov ax,word ptr [si~6]
mov ch,ah ;save high by~e shl as~,cl alld ah,O3fh ;keep expollent and ch,OcOh ;keep sign,exp sign or ah,ch mov byte ptr es:ldi+31,ah ;MSB
ret d2f enslp I~;b SYLNORM.ASM Program Page l 11 .. .. . . .
;SYI~ORM.ASM Integrates area under normal ~Irve.
t ......
step DC2 ~3~47ael47ael47bH ;l.Ol!Ol~OODOOE-02 ten DQ 040240(~H ;10.0000000000~
hundred DQ 04059~00H ;1~.0000000000~0 four DQ 04010~0DOOOOOOOOH ;4.00~00000000000 fpval DQ O ;X fps~al passed to ~3?nonnai x DQ O ;current X-A~S fpval last DQ O ;lastf(x) n DQ O ;normal curvearea divcon DQ W004Od931~62705H ;sqrt(2~pi) from 'C' extra DQ O ;extra bit beyond l~t slice zl DQ 1) ;lïrst number z2 DQ O ;second number count db O ;number of steps to integrate index db O ;index into table zlsign dw 9 z2sign dw O
. ..
set es MACRO
mov ax,cs mov es,ax mov ds,ax ;also set DS for safety ENDM
.

@norrnal proc far mov ax,2 call stackadj c norm err ;carry set if too few args start func ;TheSTART_FUNCmacro call cmp n~
cmp ax,O

~31~3 SYLNORM.AS~f Program Page 112 31 no swap call swap flt ;order so TOS-1:smaller, TOS:larger no swap: ;
call ~mp~ ~lt mov z~sign,ax call abs flt ;makesurepositive call area ;compute area from 0 to :z1 +
cmp ~ign,~
~ge no minlls call minus ~It ;negative ~ea no minus:
call swap flt ;getzltoTOS
eall ~np0 flt mov z1sign,ax call abs nt call area cmp zlsign,O
jge no n~irlus2 call minus llt ;negativearea no n~inus2:
call sub ~t ;subtract two are~s -;to get area be~ween norm end:
end func norm e~r: ;
ret ;retllrn to 123.
~?normal endp .,~ ..._ . ._ ;Gets the area under the ~ormal culve for the number at TOS
;Input: TOS= X~
;Out~ut: TOS=area from 0 to X under normal curve area proc near ;Inde7c into table, divide by 0.1 (resolution of table~
;TOS ~ X
call dup_flt ;keep onginal 1 3 ~ ~ ~ 1 3 SYlNORM.ASM Program Page 113 call dup flt ;anothercopy set es lea di,~pval ;storepassed fpval c~ll pop flt -set es lea si,hundred call push flt ;1~onTOS
call ~ul flt ;ori~inal~ aloo call at2int ~c norm over ;toolarge cmp a~,500 ~ nQrm inrange ;~ c 5.00 norm over: call drop fle ;remove extracopyoforiginal mov ax,1 sall int2flt ;one on staclc call halve_flt ;1/2 = all area right of 0 Jmp area end norm inrange: mov dx,ax ;savehu~ldreds~
mov bl,10 div ~l -mov index,al ;index into table mul bl ;back to hundreds without last digit mov cx,dx ;original hundreds sub cl,al ;get last digit mov count,cl ;this is number of slices needed mov ax,dx call int2flt ;hundreds on stack set es lea si~hundred call push flt ;100 call div_flt call minus flt ;make negative for sub call add llt ~subtractfromoriginal set es lea di,e~tra call pop ~t ;seoreextra mov al,index ;make X value of table index cbw 1 ~q 1 3 ~ ~ ~ 1 3 SYLNORM.ASM ProgramPage 114 eall int2flt set es lea si,ten call push_flt call div flt ;index/10=Xvalueofindex set es lea ditx ;storeX
~all pop flt ;

;multiply by 8 sillce qu~d words in table do table mov al,index ebw mov c1,3 ;times 8 = 3 shift le~s shl ax,cl mov b%,ax set es lea si,[table + bx]
call push flt ;put table fpval on stack` for sum set_es lea di,n call pop flt ;putinsumvallle ;

se~ es ;step to TOS
lea si,step call push flt set es lea si,x ;x value of table value eall push fl~
call dup flt sall eval ;f(x) set es lea di,last call pop flt ;store as last f(x) ;

c~ap count,O ;a~y slices to do?
je do extra ;no, just do extra bi~
do slice: call norn~int ;inte~trate aslice se~ es lea s~tn call push_flt ;sum so far ~,~

~ J~
SYLNORM.ASM Program Page 115 call add flt ;add newarea set es lea di,n call pop nt ;storenewsum dec count 1nz do slice ;loop till all slices done do extra: ;replace step with extra call swap fl~
call drop flt ;dropstep set es lea si,extra call push flt ;new step is extra call swap flt ;re-order call normint ;integrate extra bit of area set es lea si,n call push flt ;areasofar call add flt ;addnewarea set_es lea di,n call pop nt ;storearea call drop flt ;drop X2fromnormint call drop at ;drop extrastep set es lea si,n call push flt ;returntotalarea ;

area end: ;
rct area endp ---- --- -- ---.. ..
;NORMINT Integrate area under normal curve for one slice.
;Input: TOS - X fpval to start &om TOS-1 ~ step LAST = f(TOS) ~31~13 SYLNORM.ASM Program Page 116 ;Output: TOS - N area TOS-1 = X2 TOS-2 = step LAST = ~X ~ step) a f(X2) ormint proc near ;normalcurveintegration ;TOS = X
push ds call over flt ;step toTC)S
eall add fl~ ;lrOS-xl~step=x2,TC)S-1=step call o~er flt ;makecopies call over flt ;for next call ~o norrnin~
set es lea si,last ;get last ~(x) call push flt call s~vap flt ;TOS=X2,TOS-1=lastf(x1 call eval ;evaluate ~he new ~X2) call dup flt set es lea di,last ;save the new value for next loop call pop flt ;calculate new area under curve call add_flt ;add new f(x2) and last f(xl) call mul at ;multiply by step call halve ~t ;divideby2 ;

pop ds ret normint endp ..

;
;EV~ Evaluates e~quation for ~orrnal culve.
;Inpu~: TOS=number to evaluate ;Output: TOS = E(x~
Only DS is preserved eval proc near lsæ

~ 3 ~

SYLNORM.ASM Program Page 117 push ds call ~up flt ;square X by mult;pl. by itself cal1 mul flt call halve flt ;xs~quared /2 call minus flt call exp flt ;e to the (-(x squa~ed)/2) ;

set es lea sildivcon ;get dividend constant call push flt ;TOS=sqrt~2pi) TOS-1 =e^(-x~x/2 call diY flt ;di~vide the two results P3p ds ret eval endp .. ... _ ..
;Normal curve area look-up table.
table DQ o~oooooooaE~ ; .~oooooooooo DQ û3fa4644S5bsc2600H; 3.982750650000000E-02 Da 03fb44a5254bbb80aH; 7.925905770000000E~-02 DQ 03fbe2~166ec2bO9H; .1179104687000000 DQ 03fc3e4d1c460fS18H; .1554205140000000 DQ 03~881cb3a7d33cSH; .:19146~943ûOOOOO
DQ 03fcceS38203060c1H; .225745216tO00000 DQ 03fdO83a33eeca16aH; .2ssa34s263000000 DQ 03fd270edf42aS7efH; .28~14267010~0000 D Q 03fd438538277d8d H ; .315937879 ~ 00 D Q 03~d5d882dl6fffOH ; .3413427~96~0000 D Q 03fd75136ecOd4a64H ; 3 M 3319421000000 D Q 03fd8a2aaad5547b7H ; 3&492838790CXXNPO
D Q 03fd9cdfd8db32721H ; .403197GSg9000000 DQ 03fdad4dablbbl933H ; .41924159390CKUPOO
D Q 03fdbb9677f3aO6a6H ; .4331911798CKKKHNO
D Q 03fdc7e24e89e8dcOH ; .44519922940~XK~OO
D5~ 03idd25dl5023bSbbH ; .4554332049oC~KNOO
D Q 03fd~b34cSaO~Oe89H ; .46406849$60KKXNOD
I3Q 03fde2g7da930e2e2E~ ; .47128240130~KXN~D

~3 ~ 3 ~ L 3 S'YLNORM.ASM Program Page 118 DQ 03fde8b3f419df~e7H; .~i7724896B2000000 DQ 03fded~4bf~fl~2eO4H; .4821348097~0000 DQ 03fdflc31fc8f4db4H; .~86095~021000000 DQ 03fdf5M98b86a8c9H; .48927534700000~D
DQ 03fdf 79a29ebeS2bH ; .491802016200~01D
DQ 03fd~9a413e861aO2H; .493789~695~000 DQ 03fdfb3aO537ele97H; .4953385177000000 DQ 03f~fc731796f8eaOH; .4965327917(00000 DQ 03fdfd6223b6937a7H; .497444685~00 DQ 03fdfel6d9bb66abbH; .49813404280~0000 DQ û3fdfe9ela716b3341H; A986499912000000 DQ 03fdffO253959efb4H; .4~903231240~
DQ 03~4bdabO207~eH; .49931279850~00 DQ 03~dff8142c6eO34fH; .49951652850000~
DQ 03fd~a7aab71fd2bH; A99663035800~0 DQ 03fdf~c302d21ffb8H; .49976734550~000 DQ û3fd~d6492cacalcH; .4998408731~000 DQ ~3f~ffe3bcce331b9H; .4998921872000000 DQ 03fdffedO~2~0d2eaH; .4999276427000000 DQ 03fdff363eO30492H; .4999518972000000 DQ 03fdfff7b2479e20dH; .49996832430ûOOOO
DQ ~f~fffa957d9840bH; .4999793394000000 DQ 03fdfffc803e8ac77H; .4999866522000000 DQ 03fdfff~c2cd9555bH; .4999914587000000 DQ 03fdfffe94b4c736$H; .4999945865000000 C)Q 03fd~1~8bdefdH; .4999964382ûOOOOO
I:)Q ~fdf~b3flala8H; .49999778340000~
DQ 03fdflefa44f250d4H; .49999863370000ûO
DQ 03fdlfffc8064567bH; .4999991659000000 DQ 03fdffffde2831250H; .4999994957000000 DQ 03fdfflfebbbadf421H; .4999996980000ûOO

; ..0 . _. . , _. . _ _ . _ 1~

Claims (13)

1. A system for operating equipment with at least one programmable logic controller arranged proximate the equipment, said programmable logic controller being capable of receiving messages to control operation of said equipment and being capable of transmitting messages indicating the condition of said equipment, said messages being in the form of electrical signals, said system comprising:
A. processor means having a visual display, a keyboard, instruction storage memory and a central processor, sequentially for executing instructions,in the form of electrical signals, contained in said memory in cooperation at least with characters provided to said display and readable by a user and in cooperation at least with characters received from said user through said keyboard:
B. interface means electrically connected between said processor means and said at least one programmable logic controller for transmitting messages to and receiving messages from said at least one programmable logic controller in response to messages received from said central processor;
C. spreadsheet instruction means contained in said memory for effecting a general purpose spreadsheet program in said processor means, said spreadsheet means presenting cells into which said user can insert information, @ functions that can be inserted into said cells by said user and menu commands selectable by said user to effect desired actions in said spreadsheet program, said spreadsheet means normally only being able to effect movement of information between files of data contained in said memory and said cells; and D. add-in instruction means contained in said memory for presenting add-in @ functions and add-in menu commands operating through said spreadsheet means for cell contained @ functions and menu commands to move messages directly between said cells and said interface means, so that said user can transmit messages controlling the operation of said equipment directly from said cells to said programmable logic controller and can request messages indicating the condition of said equipment directly from said cells and receive said messages indicating the condition of said equipment directly in said cells.
2. A process of operating equipment with at least one programmable logic controller arranged proximate the equipment, said programmable logic controller being capable of receiving messages to control operation of said equipment and being capable of transmitting messages indicating the condition of said equipment, said messages being in the form of electrical signals, said process comprising:
A. providing a processor having a visual display, a keyboard, instruction storage memory and a central processor, said providing including causing said central processor sequentially to execute instructions,in the form of electrical signals, contained in said memory in cooperation at least with characters provided to said display and readable by a user and in cooperation at least with characters received from said user through said keyboard;
B. furnishing an interface electrically connected between said processor and said at least one programmable logic controller capable of transmitting messages to and receiving messages from said at least one programmable logic controller in response to messages received from said central processor;
C. effecting a general purpose spreadsheet program in said processor said spreadsheet program presenting cells into which said user can insert information, @
functions that can be inserted into said cells by said user and menu commands selectable by said user to effect desired actions in said spreadsheet program, said spreadsheet program normally only being able to effect movement of information between files of data contained in said memory and said cells: and D. effecting add-in @ functions and add-in menu commands in said processor operating through said spreadsheet program for cell contained @ functions and menu commands to move messages directly between said cells and said interface means through said central processor, so that said user can transmit messages controlling the operation of said equipment directly from said cells to said programmable logic controller and can request messages indicating the condition of said equipment directly from said cells and receive said messages indicating the condition of said equipment directly in said cells.
3. A system for operating equipment with multiple programmable logic controllers arranged proximate the equipment, said programmable logic controllers each transmitting messages indicating the condition of said equipment, said messages being in the form of electrical signals, said system comprising:
A. processor means having a visual display, a keyboard, instruction storage memory and a central processor, sequentially for executing instructions, in the form of electrical signals, contained in said memory in cooperation at least with characters provided to said display and readable by a user and in cooperation at least with characters received from said user through said keyboard:
B. interface means electrically connected between said processor means and said multiple programmable logic controllers for receiving messages from said multiple programmable logic controllers, said interface means including at least one message register for each programmable controller and the sequential messages from each programmable controller being overwritten on the preceding message in said register, said interface means including interrupt means for producing an interrupt signal that interrupts the operation of said central processor in response to receiving a message in any one of said receiving registers;

C. spreadsheet instruction means contained in said memory for effecting a general purpose spreadsheet program in said processor means, said spreadsheet means presenting cells into which said user can insert information, and menu commands selectable by said user to effect desired actions in said spreadsheet program, said spreadsheet means normally only being able to effect movement of information between files of data contained in said memory and said cells;
D. add-in instruction means contained in said memory for presenting add-in menu commands and interrupt selected instructions operating through said spreadsheet means for said interrupt instructions to move sequentially received messages from said receiving registers to respective assigned address locations in memory upon occurrence of each interrupt signal, and for said menu commands to move said messages from said locations in memory to respective assigned ranges of cells in said spreadsheet so that messages from said programmable logic controllers indicating the condition of said equipment can be saved and moved directly to said cells.
4. A process of operating equipment with multiple programmable logic controllers arranged proximate the equipment, said programmable logic controller each transmitting messages indicating the condition of said equipment, said messages being in the form of electrical signals, said process comprising:
A. providing a processor having a visual display, a keyboard, instruction storage memory and a central processor, said providing including causing said central processor sequentially to execute instructions, in the form of electrical signals, contained in said memory in cooperation at least with characters provided to said display and readable by a user and in cooperation at least with characters received from said user through said keyboard;
B. furnishing an interface electrically connected between said processor and said multiple programmable logic controllers for receiving messages from said multiple programmable logic controllers, said interface including at least one message register for each programmable controller and the sequential messages from each programmable controller being overwritten on the preceding message in said register, said interface means including interrupt means for producing an interrupt signal that interrupts the operation of said central processor in response to receiving a message in any one of said receiving registers;

C. effecting a general purpose spreadsheet program in said processor, said spreadsheet program presenting cells into which said user can insert information, and menu commands selectable by said user to effect desired actions in said spreadsheet program, said spreadsheet program normally only being able to effect movement of information between files of data contained in said memory and said cells:
D. effecting add in menu commands and interrupt selected instructions operating through said spreadsheet program, said effecting add-in interrupt selected instructions including causing said interrupt instructions to move sequentially received messages from said receiving registers to respective assigned address locations in memory upon occurrence of each interrupt signal, and said effecting add-in menu commands including causing said menu commands to move said messages from said locations in memory to respective assigned ranges of cells in said spreadsheet so that messages from said programmable logic controllers indicating the condition of said equipment can be saved and moved directly to said cells.
5. A process of transmitting and receiving electrical signals forming messages to and from respective addressable registers in respective addressable programmable logic controllers that are connected together over a communications network, said process comprising:
A. connecting a general purpose processor to said communications network so that said electrical signals forming messages can be moved to and from respective registers in said processor that are addressable from said communications network and accessible from said processor;
B. loading a spreadsheet program into said general purpose processor, said spreadsheet program presenting cells into which information can be inserted to facilitate executing actions through said spreadsheet program, said spreadsheet program being capable of accessing said registers in said processor through said actions;
C. inserting in at least one cell information including the address of a particular register in a particular programmable logic controller to which a message is to be sent and indicating the content of said message; and D. executing an action in said spreadsheet program to cause said spreadsheet program to transmit said message from said cell through said registers in said processor to said particular register in said particular programmable logic controller.
6. The process of claim 5 in which executing an action includes executing an @WRITE function.
7. A device for transmitting and receiving electrical signals forming messages to and from respective addressable registers in respective addressable programmable logic controllers that are connected together over a communications network, said device comprising:
A. processor means connected to said communications network for moving said electrical signals forming messages to and from respective registers in said processor means, said respective registers being addressable from said communications network and accessible from said processor means;
B. spreadsheet means contained in processor means, said spreadsheet means presenting a spreadsheet of cells into which information can be inserted to facilitate executing actions through said spreadsheet means, said spreadsheet means being capable of accessing said registers in said processor means through said actions;
C. means for inserting in at least one cell information including the address of a particular register in a particular programmable logic controller to which a message is to be sent and indicating the content of said message; and D. means for executing an action in said spreadsheet means to cause said spreadsheet means to transmit said message from said cell through said registers in said processor means to said particular register in said particular programmable logic controller through said registers in said processor means.
8. The device of claim 7 in which said means for executing executes an @WRITE
function.
9. A system for operating equipment with at least one programmable logic controller arranged proximate the equipment, said programmable logic controller including addressable registers, said programmable logic controller being capable of receiving messages addressed to said addressable registers to control operation of said equipment, upon request being capable of transmitting addressed messages from said addressable registers indicating the condition of said equipment, and independently initiate transmission of addressed messages from said addressable registers indicating the condition of said equipment, said messages being in the form of electrical signals, said system comprising:
A. processor means having a visual display, a keyboard, instruction storage memory and a central processor, sequentially for executing instructions,in the form of electrical signals, contained in said memory in cooperation at least with characters provided to said display and readable by a user and in cooperation at least with characters received from said user through said keyboard;
B. interface means contained in said processor means, said interface means including addressable message registers capable of transmitting and receiving addressed messages to and from said addressable registers in said programmable logic controller and being accessible by said processor means, said interface means for transmitting addressed messages to said addressable registers in said at least one programmable logic controller in response to message information received from said processor means, and for presenting to said processor means the information contained in receiving addressed messages from said addressable registers in said at least one programmable logic controller, said interface means including interrupt means for producing an interrupt signal to said processor means that interrupts the operation of said processor means in response to receiving an addressed message in any one of said message registers;
C. spreadsheet instruction means contained in said memory for effecting a general purpose spreadsheet program in said processor means, said spreadsheet means presenting a spreadsheet having cells into which said user can insert information, @
functions that can be inserted into said cells by said user to effect desired actions in said spreadsheet program, and menu commands selectable by said user to effect desired actions in said spreadsheet program, said spreadsheet means normally only being able to effect movement of information between files of data contained in said memory and said cells; and D. supplemental instruction means contained in said memory for operating through said spreadsheet means to move messages directly between said cells and said addressable registers in said at least one programmable logic controller through said interface means, so that said user can transmit addressed messages controlling the operation of said equipment directly from said cells to said addressable resistors in said programmable logic controller, can request messages from said cells indicating the condition of said equipment, and can receive in said cells said messages initiated by said programmable logic controller indicating the condition of said equipment.
10. A system for operating equipment with at least one programmable logic controller arranged proximate the equipment, said programmable logic controller including addressable registers, said programmable logic controller being capable of receiving messages addressed to said addressable registers to control operation of said equipment, upon request being capable of transmitting addressed messages from said addressable registers indicating the condition of said equipment, and independently initiate transmission of addressed messages from said addressable registers indicating the condition of said equipment, said messages being in the form of electrical signals, said system comprising:
A. processor means having a visual display, a keyboard, instruction storage memory and a central processor, sequentially for executing instructions,in the form of electrical signals, contained in said memory in cooperation at least with characters provided to said display and readable by a user and in cooperation at least with characters received from said user through said keyboard;
B. interface means contained in said processor means, said interface means including addressable message registers capable of transmitting and receiving addressed messages to and from said addressable registers in said programmable logic controller and being accessible by said processor means, said interface means for transmitting addressed messages to said addressable registers in said at least one programmable logic controller in response to message information received from said processor means, and for presenting to said processor means the information contained in receiving addressed messages Prom said addressable registers in said at least one programmable logic controller, said interface means including interrupt means for producing an interrupt signal to said processor means that interrupts the operation of said processor means in response to receiving an addressed message in any one of said message registers;
C. spreadsheet instruction means contained in said memory for effecting a general purpose spreadsheet program in said processor means, said spreadsheet means presenting a spreadsheet having cells into which said user can insert information, @
functions that can be inserted into said cells by said user to effect desired actions in said spreadsheet program, and menu commands selectable by said user to effect desired actions in said spreadsheet program, said spreadsheet means normally only being able to effect movement of information between files of data contained in said memory and said cells;
D. add in @ function instruction means contained in said memory, said @
function means providing add-in @ functions that can be inserted in the cells of said spreadsheet to address messages to and from said addressable registers in aid at least one programmable controller, said @ function means for operating through said spreadsheet means to move messages directly between said cells and said addressable registers in said at least one programmable logic controller through said interface means;
E. add-in menu command instruction means contained in said memory, said menu means providing menu commands that use information inserted in the cells of said spreadsheet to address messages to and from said addressable registers in said at least one programmable controller, said menu means for operating through said spreadsheet means to move messages directly between said cells and said addressable registers in said at least one programmable logic controller through said interface means;
F. interrupt instruction means contained in said memory for moving sequential controller initiated messages to respective assigned address locations in said memory upon presentation of said interrupt signal to said processor means to save said initiated messages;
G. dump instruction means contained in said memory for operating through said spreadsheet means to move said stored controller initiated messages from said locations in memory to respective assigned cells in said spreadsheet, so that messages initiated from said programmable logic controller indicating the condition of said equipment can be saved and moved directly to said cells; and H. initialization instructions means contained in said memory, said initialization means providing a spreadsheet initialization screen in which initialization information can be inserted to indicate the address location of said interface means in said processor means and to indicate the addresses of said message registers by which said addressable registers in said programmable logic controller send messages to said message registers, said initialization means for operating through said spreadsheet means to make available said initialization information to said spreadsheet means, said @ function means, said menu means, said interrupt means and said dump means.
11. A structure for use in controlling a system that operates equipment with at least one programmable logic controller arranged proximate the equipment, said programmable logic controller including addressable registers, said programmable logic controller being capable of receiving messages addressed to said addressable registers to control operation of said equipment, upon request being capable of transmitting addressed messages from said addressable registers indicating the condition of said equipment, and independently initiate transmission of addressed messages from said addressable registers indicating the condition of said equipment, said messages being in the form of electrical signals, said system including:
A. processor means having a visual display, a keyboard, instruction storage memory and a central processor, sequentially for executing instructions,in the form of electrical signals, contained in said memory in cooperation at least with characters provided to said display and readable by a user and in cooperation at least with characters received from said user through said keyboard;
B. interface means contained in said processor means, said interface means including addressable message registers capable of transmitting and receiving addressed messages to and from said addressable registers in said programmable logic controller and being accessible by said processor means, said interface means for transmitting addressed messages to said addressable registers in said at least one programmable logic controller in response to message information received from said processor means, and for presenting to said processor means the information contained in receiving addressed messages from said addressable registers in said at least one programmable logic controller, said interface means including interrupt means for producing an interrupt signal to said processor means that interrupts the operation of said processor means in response to receiving an addressed message in any one of said message registers;
C. spreadsheet instruction means contained in said memory for effecting a general purpose spreadsheet program in said processor means, said spreadsheet means presenting a spreadsheet having cells into which said user can insert information, @
functions that can be inserted into said cells by said user to effect desired actions in said spreadsheet program, and menu commands selectable by said user to effect desired actions in said spreadsheet program, said spreadsheet means normally only being able to effect movement of information between files of data contained in said memory and said cells: and said structure comprising:
D. substrate means for carrying instruction means, said substrate means being adapted to transfer said instruction means to said memory of said processor means for operating said instruction means in said processor means; and E. supplemental instruction means carried on said substrate means and adapted to operate in said processor means through said spreadsheet means to move messages directly between said cells and said addressable registers in said at least one programmable logic controller through said interface means, so that said user can transmit addressed messages controlling the operation of said equipment directly from said cells to said addressable registers in said programmable logic controller, can request messages from said cells indicating the condition of said equipment, and can receive in said cells said messages initiated by said programmable logic controller indicating the condition of said equipment.
12. A structure for use in a system that operates equipment with at least one programmable logic controller arranged proximate the equipment, said programmable logic controller including addressable registers, said programmable logic controller being capable of receiving messages addressed to said addressable registers to control operation of said equipment, upon request being capable of transmitting addressed messages from said addressable registers indicating the condition of said equipment, and independently initiate transmission of addressed messages from said addressable registers indicating the condition of said equipment, said messages being in the form of electrical signals, said system including:
A. processor means having a visual display, a keyboard; instruction storage memory and a central processor, sequentially for executing instructions,in the form of electrical signals, contained in said memory in cooperation at least with characters provided to said display and readable by a user and in cooperation at least with characters received from said user through said keyboard;
B. interface means contained in said processor means, said interface means including addressable message registers capable of transmitting and receiving addressed messages to and from said addressable registers in said programmable logic controller and being accessible by said processor means, said interface means for transmitting addressed messages to said addressable registers in said at least one programmable logic controller in response to message information received from said processor means, and for presenting to said processor means the information contained in receiving addressed messages from said addressable registers in said at least one programmable logic controller, said interface means including interrupt means for producing an interrupt signal to said processor means that interrupts the operation of said processor means in response to receiving an addressed message in any one of said message registers;
C. spreadsheet instruction means contained in said memory for effecting a general purpose spreadsheet program in said processor means, said spreadsheet means presenting a spreadsheet having cells into which said user can insert information, @
*unctions that can be inserted into said cells by said user to effect desired actions in said spreadsheet program, and menu commands selectable by said user to effect desired actions in said spreadsheet program, aid spreadsheet means normally only being able to effect movement of information between files of data contained in said memory and said cells; and said structure comprising:
D. substrate means for carrying instruction means, said substrate means being adapted to transfer said instruction means to said memory of said processor means for operating said instruction means in said processor means;
E. add in @ function instruction means carried on said memory, said @ function means being adapted to provide add-in @
functions that can be inserted in the cells of said spreadsheet to address messages to and from said addressable registers in said at least one programmable controller, said @
function means being adapted for operating through said spreadsheet means to move messages directly between said cells and said addressable registers in said at least one programmable logic controller through said interface means;
F. add-in menu command instruction means carried on said substrate means, said menu means being adapted to provide menu commands that use information inserted in the cells of said spreadsheet to address messages to and from said addressable registers in said at least one programmable controller, said menu means being adapted for operating through said spreadsheet means to move messages directly between said cells and said addressable registers in said at least one programmable logic controller through said interface means;
G. interrupt instruction means carried on said substrate means and adapted for moving sequential controller initiated messages to respective assigned address locations in said memory upon presentation of said interrupt signal to said processor means to save said initiated messages;
H. dump instruction means carried on said substrate and adapted for operating through said spreadsheet means to move said stored controller initiated messages from said locations in memory to respective assigned cells in said spreadsheet, so that messages initiated from said programmable logic controller indicating the condition of said equipment can be saved and moved directly to said cells: and I. initialization instructions means carried on said substrate means, said initialization means being adapted to provide a spreadsheet initialization screen in which initialization information can be inserted to indicate the address location of said interface means in said processor means and to indicate the addresses of said message registers by which said addressable registers in said programmable logic controller send messages to said message registers, said initialization means being adapted for operating through said spreadsheet means to make available said initialization information to said spreadsheet means, said @ function means, said menu means, said interrupt means and said dump means.
13. A structure for use in a system that operates equipment with at least one programmable logic controller arranged proximate the equipment, said programmable logic controller being capable of receiving messages to control operation of said equipment and being capable of transmitting messages indicating the condition of said equipment, said messages being in the form of electrical signals, said system including:
A. processor means having a visual display, a keyboard, instruction storage memory and a central processor, sequentially for executing instructions,in the form of electrical signals, contained in said memory in cooperation at least with characters provided to said display and readable by a user and in cooperation at least with characters received from said user through said keyboard;
B. interface means electrically connected between said processor means and said at least one programmable logic controller for transmitting messages to and receiving messages from said at least one programmable logic controller in response to messages received from said central processor;
C. spreadsheet instruction means contained in said memory for effecting a general purpose spreadsheet program in said processor means, said spreadsheet means presenting cells into which said user can insert information, @ functions that can be inserted into said cells by said user and menu commands selectable by said user to effect desired actions in said spreadsheet program, said spreadsheet means normally only being able to effect movement of information between files of data contained in said memory and said cells; and said structure comprising:
D. substrate means for carrying instruction means, said substrate means being adapted to transfer said instruction means to said memory of said processor means for operating said instruction means in said processor means; and E. supplemental instruction means carried on said substrate and adapted for operating through said spreadsheet means to move messages directly between said cells and said at least one programmable logic controller through said interface means, so that said user can transmit addressed messages controlling the operation of said equipment directly from said cells to said programmable logic controller, and can receive in said cells said messages transmitted by said programmable logic controller indicating the condition of said equipment.
CA000586076A 1987-12-17 1988-12-15 Process and device for communications real time data between a programmable logic controller and a program operating in a central controller Expired - Fee Related CA1315413C (en)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US07/134,353 1987-12-17
US07/134,353 US5038318A (en) 1987-12-17 1987-12-17 Device for communicating real time data between a programmable logic controller and a program operating in a central controller

Publications (1)

Publication Number Publication Date
CA1315413C true CA1315413C (en) 1993-03-30

Family

ID=22462976

Family Applications (1)

Application Number Title Priority Date Filing Date
CA000586076A Expired - Fee Related CA1315413C (en) 1987-12-17 1988-12-15 Process and device for communications real time data between a programmable logic controller and a program operating in a central controller

Country Status (9)

Country Link
US (1) US5038318A (en)
EP (1) EP0346441B1 (en)
JP (1) JPH02503127A (en)
KR (1) KR970004086B1 (en)
AU (2) AU2920589A (en)
CA (1) CA1315413C (en)
DE (1) DE3855219T2 (en)
DK (1) DK403589A (en)
WO (1) WO1989006010A1 (en)

Families Citing this family (54)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5251302A (en) * 1988-04-11 1993-10-05 Square D Company Network interface board having memory mapped mailbox registers including alarm registers for storing prioritized alarm messages from programmable logic controllers
CA2015788C (en) * 1989-05-01 1996-04-09 Hiroaki Wada Method of and apparatus for generating control program
US5513095A (en) * 1989-08-16 1996-04-30 Siemens Aktiengesellschaft Flexible automation system for variable industrial processes
US5099438A (en) * 1989-08-28 1992-03-24 Ucar Carbon Technology Corporation Method for on-line monitoring and control of the performance of an electric arc furnace
US5131092A (en) * 1989-09-01 1992-07-14 Square D Company Communication system enabling programmable logic controllers access to host computer tasks and host computer access to programmable logic controllers without polling
US5349675A (en) * 1990-09-04 1994-09-20 International Business Machines Corporation System for directly displaying remote screen information and providing simulated keyboard input by exchanging high level commands
US5559955A (en) * 1990-09-17 1996-09-24 Cabletron Systems, Inc. Method and apparatus for monitoring the status of non-pollable device in a computer network
US5295244A (en) * 1990-09-17 1994-03-15 Cabletron Systems, Inc. Network management system using interconnected hierarchies to represent different network dimensions in multiple display views
US5727157A (en) * 1990-09-17 1998-03-10 Cabletron Systems, Inc. Apparatus and method for determining a computer network topology
DE69126666T2 (en) * 1990-09-17 1998-02-12 Cabletron Systems Inc NETWORK MANAGEMENT SYSTEM WITH MODEL-BASED INTELLIGENCE
US5751933A (en) * 1990-09-17 1998-05-12 Dev; Roger H. System for determining the status of an entity in a computer network
US5261044A (en) * 1990-09-17 1993-11-09 Cabletron Systems, Inc. Network management system using multifunction icons for information display
US5237652A (en) * 1990-11-30 1993-08-17 Mcmanus Kirby L Programming system for programmable logic controller
WO1992018917A1 (en) * 1991-04-19 1992-10-29 The Commonwealth Of Australia Modular frequency management system
CN1110066A (en) * 1993-06-03 1995-10-11 塔里根特公司 Place object system
US5392226A (en) * 1993-06-17 1995-02-21 Icom, Inc. Computer-implemented method and apparatus for monitoring statistical process control data
CN1042989C (en) * 1993-08-24 1999-04-14 金属制造有限公司 Load control module
US5597312A (en) * 1994-05-04 1997-01-28 U S West Technologies, Inc. Intelligent tutoring method and system
US6157934A (en) * 1995-10-24 2000-12-05 Ultimus, L.L.C. Method and apparatus for using distributed spreadsheets in a client/server architecture for workflow automation
US6199172B1 (en) 1996-02-06 2001-03-06 Cabletron Systems, Inc. Method and apparatus for testing the responsiveness of a network device
US5926822A (en) * 1996-09-06 1999-07-20 Financial Engineering Associates, Inc. Transformation of real time data into times series and filtered real time data within a spreadsheet application
US6173446B1 (en) 1999-02-02 2001-01-09 Ultimus, Inc. Apparatus for licensing software applications
FR2789781B1 (en) * 1999-02-12 2001-04-27 Alstom SYSTEM FOR DEVELOPING AND EXECUTING A DRIVING ASSISTANCE APPLICATION FOR INDUSTRIAL INSTALLATION CONTROL ASSEMBLY
FR2792436B1 (en) * 1999-04-16 2001-08-10 Crouzet Automatismes UNIVERSAL TOOL FOR AUTOMOTIVE SUPERVISION AND DRIVING
US6535786B1 (en) 2000-03-10 2003-03-18 David W. Duemler Modular automated assembly system
US6912443B2 (en) 2000-03-10 2005-06-28 David W. Duemler Modular automated assembly system
JP3957948B2 (en) * 2000-04-12 2007-08-15 富士通株式会社 Arithmetic processing unit
US7003733B2 (en) * 2001-01-30 2006-02-21 Duemler David W Programmable logic controller programming system
SE519905C2 (en) 2001-10-05 2003-04-22 Abb Ab Data access method for a control system
US20030163219A1 (en) * 2001-12-21 2003-08-28 Flesher Robert W. Method and system for interactive manufacturing, assembly and testing
US7734716B2 (en) * 2002-01-24 2010-06-08 Ge Fanuc Automation North America, Inc. Methods and systems for management and control of an automation control module
US20040044753A1 (en) * 2002-02-27 2004-03-04 Lucida, Inc. Method and system for dynamic business management of a network
US7319921B2 (en) * 2002-05-22 2008-01-15 Underwood Fred R Water treatment control system
US7805725B2 (en) * 2002-09-26 2010-09-28 Siemens Industry, Inc. System and method for synchronizing system modules
US7565660B2 (en) * 2002-09-26 2009-07-21 Siemens Energy & Automation, Inc. System and method for universal extensibility that supports a plurality of programmable logic controllers
US7149604B2 (en) * 2002-11-25 2006-12-12 Honda Giken Kogyo Kabushiki Kaisha Method and system for backing up programmable logic controllers over network
US7904583B2 (en) * 2003-07-11 2011-03-08 Ge Fanuc Automation North America, Inc. Methods and systems for managing and controlling an automation control module system
US7930626B2 (en) 2003-10-31 2011-04-19 Hewlett-Packard Development Company L.P. Determining a location for placing data in a spreadsheet based on a location of the data source
US20050149363A1 (en) * 2004-01-07 2005-07-07 Jonathan Loiterman Data collection and process control system
US20050165720A1 (en) * 2004-01-27 2005-07-28 Mckeown Thomas Modular assembly of software and method of configuring same
US7768908B2 (en) * 2004-04-15 2010-08-03 Cameron International Corporation Systems and methods of providing redundant communication to an electronic device
US7904181B2 (en) * 2004-06-01 2011-03-08 Ils Technology Llc Model for communication between manufacturing and enterprise levels
US7272453B2 (en) * 2004-11-30 2007-09-18 Air Products And Chemicals, Inc. Method and apparatus for utilizing a sequence interpreter approach to control logic of a programmable logic controller
US7640490B2 (en) * 2004-12-20 2009-12-29 Microsoft Corporation Method, system, and computer-readable medium for controlling the calculation of volatile functions in a spreadsheet
US8448065B2 (en) * 2006-06-07 2013-05-21 Siemens Industry, Inc. System and method for the editing and accessing real-time OPC data with text-based tags
WO2011143151A1 (en) 2010-05-10 2011-11-17 Nucor Corporation Centralized detection of radiation in multiple facilities
JP2015525921A (en) * 2012-07-05 2015-09-07 エルイーダブリュエイ・プロセス・テクノロジーズ・インコーポレイテッドLewa Process Technologies, Inc. System and associated method for facilitating process control
CN104133395A (en) * 2014-08-08 2014-11-05 佳木斯大学 Cereal color sorting control system
US10372671B2 (en) 2014-10-03 2019-08-06 Rockwell Automation Technologies, Inc. Configuration management of industrial data
US10198422B2 (en) 2015-11-06 2019-02-05 Mitsubishi Electric Corporation Information-processing equipment based on a spreadsheet
DE102016217443A1 (en) * 2016-03-03 2017-09-07 Deckel Maho Pfronten Gmbh Data storage device for use on a numerically controlled machine tool
US10967303B2 (en) 2018-03-08 2021-04-06 Mark W. Romers Filter backwash control system for a water or wastewater treatment system to conserve water during the filter backwash process
JP7041041B2 (en) * 2018-10-11 2022-03-23 ファナック株式会社 Numerical control device
CN109522009A (en) * 2018-11-14 2019-03-26 无锡信捷电气股份有限公司 The write method of truss loading and unloading robot control program

Family Cites Families (14)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US4038533A (en) * 1976-09-29 1977-07-26 Allen-Bradley Company Industrial control processor system
US4149235A (en) * 1976-12-27 1979-04-10 Mcdonnell Douglas Corporation Computer numerical control system for machine tool
US4180860A (en) * 1977-06-21 1979-12-25 The Foxboro Company Display station having universal module for interface with different single loop controllers
US4215398A (en) * 1978-08-24 1980-07-29 Texas Instruments Incorporated Dual microprocessor intelligent programmable process control system with communication link
US4228495A (en) * 1978-12-19 1980-10-14 Allen-Bradley Company Multiprocessor numerical control system
US4363090A (en) * 1980-08-01 1982-12-07 Pellerin Milnor Corporation Process control method and apparatus
US4517637A (en) * 1983-04-21 1985-05-14 Inconix Corporation Distributed measurement and control system for industrial processes
JPS6063612A (en) * 1983-09-19 1985-04-12 Hitachi Ltd Control execution process monitor system
JPS60136810A (en) * 1983-12-26 1985-07-20 Fuji Electric Co Ltd Programmable controller
EP0174231B1 (en) * 1984-08-02 1990-11-14 Telemecanique Programmable controller ("pc") with co-processing architecture
US4791556A (en) * 1984-08-29 1988-12-13 Vilkaitis John V Method for operating a computer which searches for operational symbols and executes functions corresponding to the operational symbols in response to user inputted signal
US4648062A (en) * 1985-02-01 1987-03-03 International Business Machines Corporation Method for providing an on line help facility for interactive information handling systems
US4680753A (en) * 1985-04-03 1987-07-14 Texas Instruments Incorporated System and method for controlling network bus communications for input-output interlocking information among distributed programmable controllers
US4751635A (en) * 1986-04-16 1988-06-14 Bell Communications Research, Inc. Distributed management support system for software managers

Also Published As

Publication number Publication date
EP0346441A4 (en) 1992-07-22
EP0346441B1 (en) 1996-04-17
US5038318A (en) 1991-08-06
DK403589A (en) 1989-10-16
KR970004086B1 (en) 1997-03-25
AU618066B2 (en) 1991-12-12
AU2920589A (en) 1989-07-19
EP0346441A1 (en) 1989-12-20
DK403589D0 (en) 1989-08-16
WO1989006010A1 (en) 1989-06-29
DE3855219T2 (en) 1997-01-09
KR900700964A (en) 1990-08-17
DE3855219D1 (en) 1996-05-23
JPH02503127A (en) 1990-09-27

Similar Documents

Publication Publication Date Title
CA1315413C (en) Process and device for communications real time data between a programmable logic controller and a program operating in a central controller
US4663704A (en) Universal process control device and method for developing a process control loop program
EP0331060B2 (en) Programmable controller with stored tokenized source code
CA1310387C (en) Programmable controller with multiple task processors
CA2006024A1 (en) Dual mode communication
US4648028A (en) Color enhanced display for a numerical control system
US4353117A (en) Method of diagnosing errors off-line in pipe specification files of a computer-aided graphics system
US4992950A (en) Multiple processing station message communication
CN101414301B (en) Device and method for processing object in reservoir in content management system
EP0184423B1 (en) Universal process control device and method
EP0619538A1 (en) Control apparatus for an automated production system workcell
CA2006018C (en) Asynchronous rejection in an inserter
CA2006019A1 (en) Multiple material processing system start-up
EP0618016B1 (en) System and method for two level realtime control for an inserting machine
CA1183609A (en) Man machine interface
US5542085A (en) Method for producing program modules
JP2932439B2 (en) Programming method
US4806927A (en) Communication control method
Handel et al. Ft. Belvoir Text Placement System.
CN116089339A (en) Digital development verification system for airborne application software
Chan et al. Interactive Graphics for Computer-Aided Design Package
WO1984004187A1 (en) Embossing system having multiple embossing stations
Escrivá et al. Virtainer: graphical simulation of a container storage yard with dynamic portal rendering
CN114189534A (en) Design method of device interaction software simulation program in Internet of things system
GB2310937A (en) Monitoring the execution of modular programs

Legal Events

Date Code Title Description
MKLA Lapsed