| | |
| | | plc4go "github.com/apache/plc4x/plc4go/pkg/api" |
| | | ) |
| | | |
| | | var mapTask sync.Map |
| | | var tasksStore sync.Map |
| | | |
| | | type collectorProc struct { |
| | | device *msg.PLCDevice |
| | |
| | | } |
| | | |
| | | func InitTask() { |
| | | //device := msg.PLCDevice{ |
| | | // DeviceID: "0", |
| | | // DeviceName: "test", |
| | | // DeviceIP: "192.168.1.188", |
| | | // Brand: "sim", |
| | | // Method: "modbus", |
| | | // PortName: "", |
| | | // Frequency: 1, |
| | | // Details: []*msg.PLCAddress{&msg.PLCAddress{ |
| | | // StartAddress: 17021, |
| | | // Length: 1, |
| | | // Type: "int", |
| | | // FieldName: "count", |
| | | // }}, |
| | | //} |
| | | |
| | | logger.Debug("init task") |
| | | devices, err := getDeviceList() |
| | | if err != nil { |
| | | return |
| | |
| | | continue |
| | | } |
| | | |
| | | logger.Debug("add collector task,device %s", dev.DeviceName) |
| | | addTask(&devices[idx]) |
| | | } |
| | | } |
| | | |
| | | func stopTask(device *msg.PLCDevice) { |
| | | if task, ok := tasksStore.Load(device.DeviceID); ok { |
| | | // 存在的任务, 先停止掉, 然后重新开启一个 |
| | | task.(collectorProc).cancel() |
| | | tasksStore.Delete(device.DeviceID) |
| | | } |
| | | } |
| | | |
| | |
| | | cancel: cancel, |
| | | } |
| | | |
| | | mapTask.Store(device.DeviceID, &proc) |
| | | tasksStore.Store(device.DeviceID, &proc) |
| | | |
| | | go connectingDevice(ctx, device) |
| | | } |
| | |
| | | Length: addr.Length, |
| | | Type: addr.Type, |
| | | FieldName: addr.FieldName, |
| | | Data: result, |
| | | RawData: result, |
| | | }) |
| | | } |
| | | } |