I asked about the slave device as some need a 8 bit and others  16 bit data word. I posted below all nicely formatted however the server rejected it so it's slightly less now formatted below.
I managed to get the new win10 desktop power apps also using the I2C tools cmds and it works well
i2cset -y 0 0x68 0x0D 0x0 w (reg 13d,15) 
i2cset -y 0 0x68 0x14 0x0 w (reg 20d,4) 
Bear in mind the following: 
We are interacting with a device with 16 bit data words so 
adjust accordingly for 8 bit data words 
In our case we created a function method to read and a method 
to write the devices and this is not shown supporting small/big endian 
and also 8/16 bit data words so it can get very complex 
We struggled so spent some time to master I2Cget and I2Cset 
(I2Ctools) on the linux terminal to cross check the device 
interaction..do this first and master it to save your sanity ie. 
1) i2cset -y 0 0x68 0x15 0x8000 w //will set the data reg 21d as 
0x8000 
2) i2cget -y 0 0x68 0x15 w //this will get the data in 16 bit 
format just written above...omit the 'w' for 8 bit words. The '0' is our 
specific I2C port...maybe yours is 1 or 2 or 3 
This cycles fast enough for us now at 10ms tasks to do repeated 
reads or writes however in future we will streamline this with a I2C 
bus analyzer to have repeats much faster. Read generally can be fast 
although some device have a buffer write time of several ms so 
consult the datasheet of the device you are using. 
As the I2C protocol is open drain the I2Ctools and Codesys 
debug can be used concurrently at the same time to cross check each 
other. 
//ReadFromDevice method-Read from I2C device one 16bit 
word at a time 
VAR 
datatoget: ARRAY [0..2] OF WORD := [2(0)]; 
VAR_END 
I2C_master.write(16#68, 16#15, 1); 
I2C_master.read(16#68, ADR(datatoget), 2); //2 the is for 2 
nibbles 
If you are writing into device 16 bit data words then here is 
something as a guide from our code as the array needs to be in a 16 
bit word 
VAR 
datatostore: ARRAY [0..3] OF WORD := [2(0)]; 
VAR_END 
datatostore[0] := 16#15; 
datatostore[1] := 
OSCAT_BASIC.BYTE_OF_DWORD (regdata_to_write, 0); 
//Buffer low nibble of the 16 bit data word 
datatostore[2] := 
OSCAT_BASIC.BYTE_OF_DWORD (regdata_to_write, 1); 
//Buffer high nibble of the 16 bit data word 
//WriteToDevice method-Write to I2C device one 16bit word at 
a time 
I2C_master.write(16#68, 16#15, 1); 
I2C_master.write(16#68, ADR(datatostore), 3); 
From: talk@forge.forge.codesys.com <talk@forge.forge.codesys.com> on behalf of krishemanth <forge@codesys.com>
Sent: Tuesday, March 23, 2021 8:06:55 PM
To: [forge:talk] <Runtime@talk.forge.forge.codesys.com>
Subject: [forge:talk] Re: How to read I2C without specified device from FB