61 lines
1.3 KiB
Go
61 lines
1.3 KiB
Go
package models
|
|
|
|
import (
|
|
"encoding/xml"
|
|
"fmt"
|
|
"schema"
|
|
)
|
|
|
|
type Task struct {
|
|
XMLName xml.Name `xml:"task"`
|
|
Name string `xml:"name,attr"`
|
|
Interval string `xml:"interval,attr"`
|
|
Priority int `xml:"priority,attr"`
|
|
PouInstance []*PouInstance `xml:"pouInstance"`
|
|
AddData *AddData `xml:"addData"`
|
|
}
|
|
|
|
func (t *Task) AddAddData(kindOfTask, intervalUnit string, interval int) error {
|
|
if t.AddData != nil {
|
|
return nil
|
|
}
|
|
|
|
t.AddData = NewAddData()
|
|
_, err := t.AddData.AddTasksettings(URL_PLCOPENXML, HANDLE_IMPLEMENTATION, kindOfTask, intervalUnit, interval)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
return nil
|
|
}
|
|
|
|
// convert interval to plcopenxml format in value in milliseconds
|
|
func (t *Task) SetInterval(interval int) {
|
|
//convert to secconts
|
|
i := interval / 1000
|
|
if i < 1 {
|
|
i = 0
|
|
}
|
|
t.Interval = fmt.Sprintf("PT%dS", i)
|
|
}
|
|
|
|
func (t *Task) AddPouInstances(task *schema.Task) {
|
|
for _, prg := range task.Programs {
|
|
t.AddPouInstance(prg.Name, prg.TypeName)
|
|
}
|
|
}
|
|
|
|
func (t *Task) AddPouInstance(name, typeName string) *PouInstance {
|
|
pI := &PouInstance{
|
|
Name: name,
|
|
TypeName: typeName,
|
|
Documentation: &Documentation{
|
|
Xhtml: Xhtml{
|
|
Xmlns: XMLNS,
|
|
},
|
|
},
|
|
}
|
|
t.PouInstance = append(t.PouInstance, pI)
|
|
return pI
|
|
}
|