package types import ( "bytes" "encoding/binary" "unsafe" "git.espin.casa/albert/cml04-gdm-int/pkg/api" ) type L2Ur struct { TelegramHeader *TelegramHeader UrRollSetId [20]byte /* roll set identification */ UrRollSetType int32 /* roll set type, 1=DUO,2=UNI */ UrTonnageAccum [10]float32 /* tonnage accumulated per groove */ UrChangeSleeveLength float32 /* length of the roll changing ca */ UrChangeSleeveDepth float32 /* depth of the roll changing car */ UrHrChangedFlag int32 /* changed flag horizontal roll, */ UrVrChangedFlag int32 /* changed flag vertical roll, 0= */ UrRollMaterialH [20]byte /* roll material horizontal rolls */ UrRollMaterialV [20]byte /* roll material vertical rolls */ UrHNomGap float32 /* nominal gap (from roll drawing */ UrRollDiamActHbo float32 /* actual nominal diameter bottom */ UrRollDiamActHtp float32 /* actual nominal diameter top ro */ UrRollBarrelWidthHbo float32 /* barrel width bottom roll */ UrRollBarrelWidthHtp float32 /* barrel width top roll */ UrRollChamWidthHbo float32 /* chamber width bottom roll */ UrRollChamWidthHtp float32 /* chamber width top roll */ UrRollAngleHbo float32 /* angle roll flange face bottom */ UrRollAngleHtb float32 /* angle roll flange face top rol */ UrRollDiamActVds float32 /* actual nominal vertical roll d */ UrRollDiamActVos float32 /* actual nominal vertical roll d */ UrRollAngleVds float32 /* roll angle flange face (vertic */ UrRollAngleVos float32 /* roll angle flange face (vertic */ UrActualShimpsHbo float32 /* thickness shimplate hor. botto */ UrActualShimpsHtp float32 /* thickness shimplate hor. top r */ UrActualShimpsVDS1 float32 /* thickness shimplate 1 drive si */ UrActualShimpsVDS2 float32 /* thickness shimplate 2 drive si */ UrActualShimpsVOS1 float32 /* thickness shimplate 1 oper. Si */ UrActualShimpsVOS2 float32 /* thickness shimplate 2 oper. Si */ UrPasslineOffset float32 /* passline offset */ UrPinVChock float32 /* pin between horizontal and ver */ UrDummyVal1 float32 /* Placeholder for Extensions */ UrDummyVal2 float32 /* Placeholder for Extensions */ UrDummyVal3 float32 /* Placeholder for Extensions */ UrDummyVal4 float32 /* Placeholder for Extensions */ UrDRollMaterial [20]byte /* roll material type (H = Hard, */ UrDRollDiamNomActTop float32 /* actual nominal diameter of top */ UrDRollDiamNomActBot float32 /* actual nominal diameter of bot */ UrDRollNominalGap float32 /* nominal roll gap */ UrDRollGrooves int32 /* number of grooves (equal for t */ UrDRollGrooveWidth [10]float32 /* groove width of each groove (e */ UrDRollGrooveStiffnessTop [10]float32 /* stiffness of each groove (top */ UrDRollGrooveStiffnessBot [10]float32 /* stiffness of each groove (bott */ UrDRollGroovePos [10]float32 /* groove position, the position */ UrDRollGrooveSharp [10]int32 /* groove sharpened, 1= no, 2=yes */ UrDRollActualShimpsTop float32 /* thickness chock shim top roll */ UrDRollActualShimpsBot float32 /* thickness chock shim bottom ro */ UrDRollThrustPlate float32 /* thickness of thrust plate betw */ } func (ur *L2Ur) FillTelegram(rolldata *api.UrRollData) { size := unsafe.Sizeof(ur) ur.TelegramHeader = &TelegramHeader{ MessageLength: int16(size), TelegramID: 9001, SequenceCounter: 0, Flags: 0, TimeStamp: [8]int16{}, } copy(ur.UrRollSetId[:], []byte(rolldata.GetUrRollSetId())) ur.UrRollSetType = int32(rolldata.GetUrRollSetType()) ur.UrTonnageAccum[0] = float32(rolldata.GetUrTonnageAccum0()) ur.UrTonnageAccum[1] = float32(rolldata.GetUrTonnageAccum1()) ur.UrTonnageAccum[2] = float32(rolldata.GetUrTonnageAccum2()) ur.UrTonnageAccum[3] = float32(rolldata.GetUrTonnageAccum3()) ur.UrTonnageAccum[4] = float32(rolldata.GetUrTonnageAccum4()) ur.UrTonnageAccum[5] = float32(rolldata.GetUrTonnageAccum5()) ur.UrTonnageAccum[6] = float32(rolldata.GetUrTonnageAccum6()) ur.UrTonnageAccum[7] = float32(rolldata.GetUrTonnageAccum7()) ur.UrTonnageAccum[8] = float32(rolldata.GetUrTonnageAccum8()) ur.UrTonnageAccum[9] = float32(rolldata.GetUrTonnageAccum9()) ur.UrChangeSleeveLength = float32(rolldata.GetUrChangeSleeveLength()) ur.UrChangeSleeveDepth = float32(rolldata.GetUrChangeSleeveLength()) ur.UrHrChangedFlag = 0 // ???????????????????????????????????????????? ur.UrVrChangedFlag = 0 // ???????????????????????????????????????????? copy(ur.UrRollMaterialH[:], []byte(rolldata.GetUrRollMaterialH())) copy(ur.UrRollMaterialV[:], []byte(rolldata.GetUrRollMaterialV())) ur.UrHNomGap = float32(rolldata.GetUrHNomgap()) ur.UrRollDiamActHbo = float32(rolldata.GetUrRollDiamActHbo()) ur.UrRollDiamActHtp = float32(rolldata.GetUrRollDiamActHtp()) ur.UrRollBarrelWidthHbo = float32(rolldata.GetUrRollBarrelWidthHbo()) ur.UrRollBarrelWidthHtp = float32(rolldata.GetUrRollBarrelWidthHtp()) ur.UrRollChamWidthHbo = float32(rolldata.GetUrRollChamWidthHbo()) ur.UrRollChamWidthHtp = float32(rolldata.GetUrRollChamWidthHtp()) ur.UrRollAngleHbo = float32(rolldata.GetUrRollAngleHbo()) ur.UrRollAngleHtb = float32(rolldata.GetUrRollAngleHtb()) ur.UrRollDiamActVds = float32(rolldata.GetUrRollDiamActVds()) ur.UrRollDiamActVos = float32(rolldata.GetUrRollDiamActVos()) ur.UrRollAngleVds = float32(rolldata.GetUrRollAngleVds()) ur.UrRollAngleVos = float32(rolldata.GetUrRollAngleVos()) ur.UrActualShimpsHbo = float32(rolldata.GetUrActualShimpsHbo()) ur.UrActualShimpsHtp = float32(rolldata.GetUrActualShimpsHtp()) ur.UrActualShimpsVDS1 = float32(rolldata.GetUrActualShimpsVds_1()) ur.UrActualShimpsVDS2 = float32(rolldata.GetUrActualShimpsVds_2()) ur.UrActualShimpsVOS1 = float32(rolldata.GetUrActualShimpsVos_1()) ur.UrActualShimpsVOS2 = float32(rolldata.GetUrActualShimpsVos_2()) ur.UrPasslineOffset = float32(rolldata.GetUrPasslineOffset()) ur.UrPinVChock = float32(rolldata.GetUrPinVChock()) ur.UrDummyVal1 = 0 ur.UrDummyVal2 = 0 ur.UrDummyVal3 = 0 ur.UrDummyVal4 = 0 copy(ur.UrDRollMaterial[:], []byte(rolldata.GetUrRollMaterialH())) // ???????????????????? ur.UrDRollDiamNomActTop = float32(rolldata.GetUrRollDiamActHtp()) ur.UrDRollDiamNomActBot = float32(rolldata.GetUrRollDiamActHbo()) ur.UrDRollNominalGap = float32(rolldata.GetUrHNomgap()) ur.UrDRollGrooves = int32(rolldata.GetUrRollGrooves()) ur.UrDRollGrooveWidth[0] = float32(rolldata.GetUrRollGrooveWidth0()) ur.UrDRollGrooveWidth[1] = float32(rolldata.GetUrRollGrooveWidth1()) ur.UrDRollGrooveWidth[2] = float32(rolldata.GetUrRollGrooveWidth2()) ur.UrDRollGrooveWidth[3] = float32(rolldata.GetUrRollGrooveWidth3()) ur.UrDRollGrooveWidth[4] = float32(rolldata.GetUrRollGrooveWidth4()) ur.UrDRollGrooveWidth[5] = float32(rolldata.GetUrRollGrooveWidth5()) ur.UrDRollGrooveWidth[6] = float32(rolldata.GetUrRollGrooveWidth6()) ur.UrDRollGrooveWidth[7] = float32(rolldata.GetUrRollGrooveWidth7()) ur.UrDRollGrooveWidth[8] = float32(rolldata.GetUrRollGrooveWidth8()) ur.UrDRollGrooveWidth[9] = float32(rolldata.GetUrRollGrooveWidth9()) ur.UrDRollGrooveStiffnessTop[0] = float32(rolldata.GetUrRollGrooveStiffnessTop0()) ur.UrDRollGrooveStiffnessTop[1] = float32(rolldata.GetUrRollGrooveStiffnessTop1()) ur.UrDRollGrooveStiffnessTop[2] = float32(rolldata.GetUrRollGrooveStiffnessTop2()) ur.UrDRollGrooveStiffnessTop[3] = float32(rolldata.GetUrRollGrooveStiffnessTop3()) ur.UrDRollGrooveStiffnessTop[4] = float32(rolldata.GetUrRollGrooveStiffnessTop4()) ur.UrDRollGrooveStiffnessTop[5] = float32(rolldata.GetUrRollGrooveStiffnessTop5()) ur.UrDRollGrooveStiffnessTop[6] = float32(rolldata.GetUrRollGrooveStiffnessTop6()) ur.UrDRollGrooveStiffnessTop[7] = float32(rolldata.GetUrRollGrooveStiffnessTop7()) ur.UrDRollGrooveStiffnessTop[8] = float32(rolldata.GetUrRollGrooveStiffnessTop8()) ur.UrDRollGrooveStiffnessTop[9] = float32(rolldata.GetUrRollGrooveStiffnessTop9()) ur.UrDRollGrooveStiffnessBot[0] = float32(rolldata.GetUrRollGrooveStiffnessBot0()) ur.UrDRollGrooveStiffnessBot[1] = float32(rolldata.GetUrRollGrooveStiffnessBot1()) ur.UrDRollGrooveStiffnessBot[2] = float32(rolldata.GetUrRollGrooveStiffnessBot2()) ur.UrDRollGrooveStiffnessBot[3] = float32(rolldata.GetUrRollGrooveStiffnessBot3()) ur.UrDRollGrooveStiffnessBot[4] = float32(rolldata.GetUrRollGrooveStiffnessBot4()) ur.UrDRollGrooveStiffnessBot[5] = float32(rolldata.GetUrRollGrooveStiffnessBot5()) ur.UrDRollGrooveStiffnessBot[6] = float32(rolldata.GetUrRollGrooveStiffnessBot6()) ur.UrDRollGrooveStiffnessBot[7] = float32(rolldata.GetUrRollGrooveStiffnessBot7()) ur.UrDRollGrooveStiffnessBot[8] = float32(rolldata.GetUrRollGrooveStiffnessBot8()) ur.UrDRollGrooveStiffnessBot[9] = float32(rolldata.GetUrRollGrooveStiffnessBot9()) ur.UrDRollGroovePos[0] = float32(rolldata.GetUrRollGroovePos0()) ur.UrDRollGroovePos[1] = float32(rolldata.GetUrRollGroovePos1()) ur.UrDRollGroovePos[2] = float32(rolldata.GetUrRollGroovePos2()) ur.UrDRollGroovePos[3] = float32(rolldata.GetUrRollGroovePos3()) ur.UrDRollGroovePos[4] = float32(rolldata.GetUrRollGroovePos4()) ur.UrDRollGroovePos[5] = float32(rolldata.GetUrRollGroovePos5()) ur.UrDRollGroovePos[6] = float32(rolldata.GetUrRollGroovePos6()) ur.UrDRollGroovePos[7] = float32(rolldata.GetUrRollGroovePos7()) ur.UrDRollGroovePos[8] = float32(rolldata.GetUrRollGroovePos8()) ur.UrDRollGroovePos[9] = float32(rolldata.GetUrRollGroovePos9()) ur.UrDRollGrooveSharp[0] = int32(rolldata.GetUrRollGrooveSharp0()) ur.UrDRollGrooveSharp[1] = int32(rolldata.GetUrRollGrooveSharp1()) ur.UrDRollGrooveSharp[2] = int32(rolldata.GetUrRollGrooveSharp2()) ur.UrDRollGrooveSharp[3] = int32(rolldata.GetUrRollGrooveSharp3()) ur.UrDRollGrooveSharp[4] = int32(rolldata.GetUrRollGrooveSharp4()) ur.UrDRollGrooveSharp[5] = int32(rolldata.GetUrRollGrooveSharp5()) ur.UrDRollGrooveSharp[6] = int32(rolldata.GetUrRollGrooveSharp6()) ur.UrDRollGrooveSharp[7] = int32(rolldata.GetUrRollGrooveSharp7()) ur.UrDRollGrooveSharp[8] = int32(rolldata.GetUrRollGrooveSharp8()) ur.UrDRollGrooveSharp[9] = int32(rolldata.GetUrRollGrooveSharp9()) ur.UrDRollActualShimpsTop = float32(rolldata.GetUrActualShimpsHtp()) ur.UrDRollActualShimpsBot = float32(rolldata.GetUrActualShimpsHbo()) ur.UrDRollThrustPlate = float32(rolldata.GetUrRollThrustPlate()) } func (ur *L2Ur) ToBytes() ([]byte, error) { bs := make([]byte, unsafe.Sizeof(ur)) buffer := bytes.NewBuffer(bs) if err := binary.Write(buffer, binary.LittleEndian, ur); err != nil { return nil, err } return buffer.Bytes(), nil }