You can use the COP instruction to move a block of data from one type of array tag to another, even when they are of different datatypes. The crucial thing is to understand the relative sizes and to specify the Length argument correctly.
The String datatype has a .LEN subelement (a 4-byte DINT) and a .DATA sub-array, which is a array of 82 1-byte SINT[x] elements.
Try just copying the data from one array to another:
MOV
Source: 8
Destination: MyString.LEN
COP
Source: Scanner_Ethernet1:I.Data[3]
Destination: MyString.Data[0]
Length: 8
The Length of a COP instruction is always the number of destination elements. Since we want to move eight characters and the destination has SINT (1-byte, or one-character in ASCII) sub-elements, the length is 8.
Two things might not work correctly:
I don't know if the data in your I/O image is in the correct order. You might need to use the SWPB instruction to swap the high and low bytes before copying the data into the String.
Also, is the length of the string 7 characters, as seen in Scanner_Ethernet1:I.Data[2], or 8 as seen in the number of readable characters ?