Skip to content

Commit

Permalink
* handling of 16i controller
Browse files Browse the repository at this point in the history
* display main and running programs
  • Loading branch information
MRIIOT committed Aug 3, 2022
1 parent 6173be3 commit 886a5a3
Show file tree
Hide file tree
Showing 8 changed files with 113 additions and 46 deletions.
2 changes: 1 addition & 1 deletion base-driver
Submodule base-driver updated 1 files
+9 −1 base/Veneer.cs
37 changes: 27 additions & 10 deletions examples/fanuc-driver/config-example.yml
Original file line number Diff line number Diff line change
Expand Up @@ -62,9 +62,9 @@ system:
{{observation.name}},
{{-}}machine={{observation.machine}},
{{-}}path={{observation.marker[0].number}}
program_name="{{data.program.name}}",
{{-}}program_comment="{{data.program.comment}}",
{{-}}program_modified={{data.program.modified}},
program_name="{{data.program.main.name}}",
{{-}}program_comment="{{data.program.main.comment}}",
{{-}}program_modified={{data.program.main.modified}},
{{-}}pieces_produced={{data.pieces.produced}},
{{-}}pieces_produced_life={{data.pieces.produced_life}},
{{-}}pieces_remaining={{data.pieces.remaining}},
Expand Down Expand Up @@ -320,10 +320,10 @@ system:
ShdrEvent p+`_part_count_life` data.pieces.produced_life;
ShdrEvent p+`_part_count_complete` data.pieces.produced;
ShdrEvent p+`_part_count_remain` data.pieces.remaining;
ShdrEvent p+`_prg_name` data.program.name;
ShdrEvent p+`_prg_cmt` data.program.comment;
ShdrEvent p+`_prg_size` data.program.size_b;
ShdrEvent p+`_prg_mod` data.program.modified;
ShdrEvent p+`_prg_name` data.program.main.name;
ShdrEvent p+`_prg_cmt` data.program.main.comment;
ShdrEvent p+`_prg_size` data.program.main.size_b;
ShdrEvent p+`_prg_mod` data.program.main.modified;
l99.driver.fanuc.veneers.GCodeBlocks, fanuc: >-
p = device+`_p`+observation.marker[0].number;
if (array.size data.blocks) == 0
Expand Down Expand Up @@ -443,6 +443,14 @@ user:
ip: 172.16.13.50
port: !!int 8193
timeout_s: !!int 3
source-4: &source-4
# example fanuc source
l99.driver.fanuc.FanucMachine, fanuc:
sweep_ms: !!int 1000
net:
ip: 192.168.1.50
port: !!int 8193
timeout_s: !!int 3
# collectors
collector-0: &collector-0
# example collector
Expand Down Expand Up @@ -476,7 +484,7 @@ user:
enabled: !!bool true
net:
type: tcp
ip: 10.1.10.170
ip: localhost
port: !!int 1883
anonymous: !!bool true
user:
Expand Down Expand Up @@ -597,7 +605,7 @@ machines:
<<: *change-filter
- id: f_sim
<<: *machine-base
#<<: *machine-disabled
<<: *machine-disabled
<<: *source-1
<<: *collector-1
<<: *target-spb-1
Expand All @@ -606,7 +614,7 @@ machines:
#<<: *no-filter
- id: f13_50 # StarCNC SR38-A
<<: *machine-base
#<<: *machine-disabled
<<: *machine-disabled
<<: *source-2
<<: *collector-1
<<: *target-spb-1
Expand All @@ -621,4 +629,13 @@ machines:
<<: *target-spb-1
<<: *change-filter
#<<: *target-shdr-3
#<<: *no-filter
- id: f1_50 # Takisawa TMM-250
<<: *machine-base
#<<: *machine-disabled
<<: *source-4
<<: *collector-1
<<: *target-mqtt-1
#<<: *target-null
<<: *change-filter
#<<: *no-filter
18 changes: 15 additions & 3 deletions fanuc/collectors/ProductionData.cs
Original file line number Diff line number Diff line change
Expand Up @@ -22,14 +22,26 @@ await strategy.SetNativeKeyed($"program_number",

await strategy.SetNativeKeyed($"program_name",
await strategy.Platform.ExePrgNameAsync());
var o_num = strategy.GetKeyed($"program_name")
.response.cnc_exeprgname.exeprg.o_num;

// not supported on 16i
//var o_num = strategy.GetKeyed($"program_name")
// .response.cnc_exeprgname.exeprg.o_num;

var running_num = strategy.GetKeyed($"program_number")
.response.cnc_rdprgnum.prgnum.data;

var main_num = strategy.GetKeyed($"program_number")
.response.cnc_rdprgnum.prgnum.mdata;

//System.Console.WriteLine($"{this.strategy.Machine.Id} {current_path} {b.response.cnc_rdprgnum.prgnum.data} {b.response.cnc_rdprgnum.prgnum.mdata}");

await strategy.Peel("production",
strategy.GetKeyed($"program_name"),
strategy.GetKeyed("program_number"),
await strategy.SetNativeKeyed($"prog_dir",
await strategy.Platform.RdProgDir3Async(running_num)),
await strategy.SetNativeKeyed($"prog_dir",
await strategy.Platform.RdProgDir3Async(o_num)),
await strategy.Platform.RdProgDir3Async(main_num)),
await strategy.SetNativeKeyed($"pieces_produced",
await strategy.Platform.RdParamDoubleWordNoAxisAsync(6711)),
await strategy.SetNativeKeyed($"pieces_produced_life",
Expand Down
2 changes: 2 additions & 0 deletions fanuc/strategies/FanucExtendedStrategy.cs
Original file line number Diff line number Diff line change
Expand Up @@ -577,6 +577,7 @@ await SetNativeAndPeel("spindle_names",
{
_currentCollectSegment = SegmentEnum.AXIS;
dynamic axis_name = axis_names[current_axis-1];
//Debug.Print($"PATH:{current_path} AXIS:{axis_name}");
dynamic axis_marker = axisMarker(current_axis, axis_name);
dynamic axis_marker_full = new[] {path_marker, axis_marker};
await Set("axis_split", new[] {current_path.ToString(), axis_name});
Expand All @@ -590,6 +591,7 @@ await SetNativeAndPeel("spindle_names",
{
_currentCollectSegment = SegmentEnum.SPINDLE;
dynamic spindle_name = spindle_names[current_spindle-1];
//Debug.Print($"PATH:{current_path} SPINDLE:{spindle_name}");
dynamic spindle_marker = spindleMarker(current_spindle, spindle_name);
dynamic spindle_marker_full = new[] {path_marker, spindle_marker};
await Set("spindle_split", new[] {current_path.ToString(), spindle_name});
Expand Down
3 changes: 2 additions & 1 deletion fanuc/veneers/AxisData.cs
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,8 @@ public AxisData(string name = "", bool isCompound = false, bool isInternal = fal

protected override async Task<dynamic> AnyAsync(dynamic input, params dynamic?[] additionalInputs)
{
if (additionalInputs.Slice(0,7).All(o => o.success == true))
// skip index 7 - power consumption
if (additionalInputs.Slice(0,6).All(o => o.success == true))
{
var current_axis = input;
var axes_names = additionalInputs[0];
Expand Down
87 changes: 60 additions & 27 deletions fanuc/veneers/ProductionData.cs
Original file line number Diff line number Diff line change
Expand Up @@ -10,11 +10,20 @@ public ProductionData(string name = "", bool isCompound = false, bool isInternal
{
program = new
{
name = string.Empty,
number = -1,
size_b = -1,
comment = string.Empty,
modified = -1
running = new {
name = string.Empty,
number = -1,
size_b = -1,
comment = string.Empty,
modified = -1
},
main = new {
name = string.Empty,
number = -1,
size_b = -1,
comment = string.Empty,
modified = -1
}
},
pieces = new
{
Expand All @@ -31,22 +40,37 @@ public ProductionData(string name = "", bool isCompound = false, bool isInternal

protected override async Task<dynamic> AnyAsync(dynamic input, params dynamic?[] additionalInputs)
{
if (input.success && additionalInputs.All(o => o.success == true))
// remove input.success check for 16i
if (additionalInputs.All(o => o.success == true))
{
bool has_prog = input.response.cnc_exeprgname.exeprg.o_num > 0;
long modified = 0;
bool has_prog_name_running = input.response.cnc_exeprgname.exeprg.o_num > 0;
long modified_running = 0;
long modified_main = 0;

try
{
modified = has_prog
? new DateTimeOffset(new DateTime(
additionalInputs[0].response.cnc_rdprogdir3.buf.dir1.mdate.year,
additionalInputs[0].response.cnc_rdprogdir3.buf.dir1.mdate.month,
additionalInputs[0].response.cnc_rdprogdir3.buf.dir1.mdate.day,
additionalInputs[0].response.cnc_rdprogdir3.buf.dir1.mdate.hour,
additionalInputs[0].response.cnc_rdprogdir3.buf.dir1.mdate.minute, 0))
.ToUnixTimeMilliseconds()
: 0;
modified_running = new DateTimeOffset(new DateTime(
additionalInputs[1].response.cnc_rdprogdir3.buf.dir1.mdate.year,
additionalInputs[1].response.cnc_rdprogdir3.buf.dir1.mdate.month,
additionalInputs[1].response.cnc_rdprogdir3.buf.dir1.mdate.day,
additionalInputs[1].response.cnc_rdprogdir3.buf.dir1.mdate.hour,
additionalInputs[1].response.cnc_rdprogdir3.buf.dir1.mdate.minute, 0))
.ToUnixTimeMilliseconds();
}
catch
{

}

try
{
modified_main = new DateTimeOffset(new DateTime(
additionalInputs[2].response.cnc_rdprogdir3.buf.dir1.mdate.year,
additionalInputs[2].response.cnc_rdprogdir3.buf.dir1.mdate.month,
additionalInputs[2].response.cnc_rdprogdir3.buf.dir1.mdate.day,
additionalInputs[2].response.cnc_rdprogdir3.buf.dir1.mdate.hour,
additionalInputs[2].response.cnc_rdprogdir3.buf.dir1.mdate.minute, 0))
.ToUnixTimeMilliseconds();
}
catch
{
Expand All @@ -56,20 +80,29 @@ protected override async Task<dynamic> AnyAsync(dynamic input, params dynamic?[]
var current_value = new
{
program = new {
name = has_prog ? new string(input.response.cnc_exeprgname.exeprg.name).AsAscii() : "",
number = input.response.cnc_exeprgname.exeprg.o_num,
size_b = additionalInputs[0].response.cnc_rdprogdir3.buf.dir1.length,
comment = additionalInputs[0].response.cnc_rdprogdir3.buf.dir1.comment,
modified
running = new {
name = has_prog_name_running ? new string(input.response.cnc_exeprgname.exeprg.name).AsAscii() : "",
number = additionalInputs[0].response.cnc_rdprgnum.prgnum.data,
size_b = additionalInputs[1].response.cnc_rdprogdir3.buf.dir1.length,
comment = additionalInputs[1].response.cnc_rdprogdir3.buf.dir1.comment,
modified = modified_running
},
main = new {
name = "",
number = additionalInputs[0].response.cnc_rdprgnum.prgnum.mdata,
size_b = additionalInputs[2].response.cnc_rdprogdir3.buf.dir1.length,
comment = additionalInputs[2].response.cnc_rdprogdir3.buf.dir1.comment,
modified = modified_main
}
},
pieces = new {
produced = additionalInputs[1].response.cnc_rdparam.param.data.ldata,
produced_life = additionalInputs[2].response.cnc_rdparam.param.data.ldata,
remaining = additionalInputs[3].response.cnc_rdparam.param.data.ldata
produced = additionalInputs[3].response.cnc_rdparam.param.data.ldata,
produced_life = additionalInputs[4].response.cnc_rdparam.param.data.ldata,
remaining = additionalInputs[5].response.cnc_rdparam.param.data.ldata
},
timers = new {
cycle_time_ms = (additionalInputs[4].response.cnc_rdparam.param.data.ldata * 60000) +
additionalInputs[5].response.cnc_rdparam.param.data.ldata
cycle_time_ms = (additionalInputs[6].response.cnc_rdparam.param.data.ldata * 60000) +
additionalInputs[7].response.cnc_rdparam.param.data.ldata
}
};

Expand Down
8 changes: 5 additions & 3 deletions fanuc/veneers/SpindleData.cs
Original file line number Diff line number Diff line change
Expand Up @@ -46,7 +46,9 @@ private string load_EU(short unit)

protected override async Task<dynamic> AnyAsync(dynamic input, params dynamic?[] additionalInputs)
{
if (additionalInputs.All(o => o.success == true))
// let the data output even if incorrect
// TODO
//if (additionalInputs.All(o => o.success == true))
{
var current_spindle = input;
var spindle_names = additionalInputs[0];
Expand Down Expand Up @@ -122,9 +124,9 @@ protected override async Task<dynamic> AnyAsync(dynamic input, params dynamic?[]
await onDataChangedAsync(input, current_value);
}
}
else
//else
{
await onErrorAsync(input);
// await onErrorAsync(input);
}

return new { veneer = this };
Expand Down
2 changes: 1 addition & 1 deletion fanuc/veneers/SysInfo.cs
Original file line number Diff line number Diff line change
Expand Up @@ -183,7 +183,7 @@ protected override async Task<dynamic> AnyAsync(dynamic input, params dynamic?[]

await onDataArrivedAsync(input, current_value);

if (!current_value.Equals(this.lastChangedValue))
if (current_value.IsDifferentString((object)lastChangedValue))
{
await onDataChangedAsync(input, current_value);
}
Expand Down

0 comments on commit 886a5a3

Please sign in to comment.