package types import ( "bytes" "encoding/binary" "unsafe" "git.espin.casa/albert/cml04-gdm-int/pkg/api" ) type L2Uf struct { TelegramHeader *TelegramHeader UfRollSetId [20]byte /* roll set identification */ UfRollSetType int32 /* roll set type, 1=DUO,2=UNI */ UfTonnageAccum [10]float32 /* tonnage accumulated per groove */ UfChangeSleeveLength float32 /* length of the roll changing ca */ UfChangeSleeveDepth float32 /* depth of the roll changing car */ UfHrChangedFlag int32 /* changed flag horizontal roll, */ UfVrChangedFlag int32 /* changed flag vertical roll, 0= */ UfRollMaterialH [20]byte /* roll material horizontal rolls */ UfRollMaterialV [20]byte /* roll material vertical rolls */ UfHNomGap float32 /* nominal gap (from roll drawing */ UfRollDiamActHbo float32 /* actual nominal diameter bottom */ UfRollDiamActHtp float32 /* actual nominal diameter top ro */ UfRollBarrelWidthHbo float32 /* barrel width bottom roll */ UfRollBarrelWidthHtp float32 /* barrel width top roll */ UfRollChamWidthHbo float32 /* chamber width bottom roll */ UfRollChamWidthHtp float32 /* chamber width top roll */ UfRollAngleHbo float32 /* angle roll flange face bottom */ UfRollAngleHtb float32 /* angle roll flange face top rol */ UfRollDiamActVds float32 /* actual nominal vertical roll d */ UfRollDiamActVos float32 /* actual nominal vertical roll d */ UfRollAngleVds float32 /* roll angle flange face (vertic */ UfRollAngleVos float32 /* roll angle flange face (vertic */ UfActualShimpsHbo float32 /* thickness shimplate hor. botto */ UfActualShimpsHtp float32 /* thickness shimplate hor. top r */ UfActualShimpsVDS1 float32 /* thickness shimplate 1 drive si */ UfActualShimpsVDS2 float32 /* thickness shimplate 2 drive si */ UfActualShimpsVOS1 float32 /* thickness shimplate 1 oper. Si */ UfActualShimpsVOS2 float32 /* thickness shimplate 2 oper. Si */ UfPasslineOffset float32 /* passline offset */ UfPinVChock float32 /* pin between horizontal and ver */ UfDummyVal1 float32 /* Placeholder for Extensions */ UfDummyVal2 float32 /* Placeholder for Extensions */ UfDummyVal3 float32 /* Placeholder for Extensions */ UfDummyVal4 float32 /* Placeholder for Extensions */ UfDRollMaterial [20]byte /* roll material type (H = Hard, */ UfDRollDiamNomActTop float32 /* actual nominal diameter of top */ UfDRollDiamNomActBot float32 /* actual nominal diameter of bot */ UfDRollNominalGap float32 /* nominal roll gap */ UfDRollGrooves int32 /* number of grooves (equal for t */ UfDRollGrooveWidth [10]float32 /* groove width of each groove (e */ UfDRollGrooveStiffnessTop [10]float32 /* stiffness of each groove (top */ UfDRollGrooveStiffnessBot [10]float32 /* stiffness of each groove (bott */ UfDRollGroovePos [10]float32 /* groove position, the position */ UfDRollGrooveSharp [10]int32 /* groove sharpened, 1= no, 2=yes */ UfDRollActualShimpsTop float32 /* thickness chock shim top roll */ UfDRollActualShimpsBot float32 /* thickness chock shim bottom ro */ UfDRollThrustPlate float32 /* thickness of thrust plate betw */ } func (uf *L2Uf) FillTelegram(rolldata *api.UfRollData) { size := unsafe.Sizeof(uf) uf.TelegramHeader = &TelegramHeader{ MessageLength: int16(size), TelegramID: 9001, SequenceCounter: 0, Flags: 0, TimeStamp: [8]int16{}, } copy(uf.UfRollSetId[:], []byte(rolldata.GetUfRollSetId())) uf.UfRollSetType = int32(rolldata.GetUfRollSetType()) uf.UfTonnageAccum[0] = float32(rolldata.GetUfTonnageAccum0()) uf.UfTonnageAccum[1] = float32(rolldata.GetUfTonnageAccum1()) uf.UfTonnageAccum[2] = float32(rolldata.GetUfTonnageAccum2()) uf.UfTonnageAccum[3] = float32(rolldata.GetUfTonnageAccum3()) uf.UfTonnageAccum[4] = float32(rolldata.GetUfTonnageAccum4()) uf.UfTonnageAccum[5] = float32(rolldata.GetUfTonnageAccum5()) uf.UfTonnageAccum[6] = float32(rolldata.GetUfTonnageAccum6()) uf.UfTonnageAccum[7] = float32(rolldata.GetUfTonnageAccum7()) uf.UfTonnageAccum[8] = float32(rolldata.GetUfTonnageAccum8()) uf.UfTonnageAccum[9] = float32(rolldata.GetUfTonnageAccum9()) uf.UfChangeSleeveLength = float32(rolldata.GetUfChangeSleeveLength()) uf.UfChangeSleeveDepth = float32(rolldata.GetUfChangeSleeveLength()) uf.UfHrChangedFlag = 0 // ???????????????????????????????????????????? uf.UfVrChangedFlag = 0 // ???????????????????????????????????????????? copy(uf.UfRollMaterialH[:], []byte(rolldata.GetUfRollMaterialH())) copy(uf.UfRollMaterialV[:], []byte(rolldata.GetUfRollMaterialV())) uf.UfHNomGap = float32(rolldata.GetUfHNomgap()) uf.UfRollDiamActHbo = float32(rolldata.GetUfRollDiamActHbo()) uf.UfRollDiamActHtp = float32(rolldata.GetUfRollDiamActHtp()) uf.UfRollBarrelWidthHbo = float32(rolldata.GetUfRollBarrelWidthHbo()) uf.UfRollBarrelWidthHtp = float32(rolldata.GetUfRollBarrelWidthHtp()) uf.UfRollChamWidthHbo = float32(rolldata.GetUfRollChamWidthHbo()) uf.UfRollChamWidthHtp = float32(rolldata.GetUfRollChamWidthHtp()) uf.UfRollAngleHbo = float32(rolldata.GetUfRollAngleHbo()) uf.UfRollAngleHtb = float32(rolldata.GetUfRollAngleHtb()) uf.UfRollDiamActVds = float32(rolldata.GetUfRollDiamActVds()) uf.UfRollDiamActVos = float32(rolldata.GetUfRollDiamActVos()) uf.UfRollAngleVds = float32(rolldata.GetUfRollAngleVds()) uf.UfRollAngleVos = float32(rolldata.GetUfRollAngleVos()) uf.UfActualShimpsHbo = float32(rolldata.GetUfActualShimpsHbo()) uf.UfActualShimpsHtp = float32(rolldata.GetUfActualShimpsHtp()) uf.UfActualShimpsVDS1 = float32(rolldata.GetUfActualShimpsVds_1()) uf.UfActualShimpsVDS2 = float32(rolldata.GetUfActualShimpsVds_2()) uf.UfActualShimpsVOS1 = float32(rolldata.GetUfActualShimpsVos_1()) uf.UfActualShimpsVOS2 = float32(rolldata.GetUfActualShimpsVos_2()) uf.UfPasslineOffset = float32(rolldata.GetUfPasslineOffset()) uf.UfPinVChock = float32(rolldata.GetUfPinVChock()) uf.UfDummyVal1 = 0 uf.UfDummyVal2 = 0 uf.UfDummyVal3 = 0 uf.UfDummyVal4 = 0 copy(uf.UfDRollMaterial[:], []byte(rolldata.GetUfRollMaterialH())) // ???????????????????? uf.UfDRollDiamNomActTop = float32(rolldata.GetUfRollDiamActHtp()) uf.UfDRollDiamNomActBot = float32(rolldata.GetUfRollDiamActHbo()) uf.UfDRollNominalGap = float32(rolldata.GetUfHNomgap()) uf.UfDRollGrooves = int32(rolldata.GetUfRollGrooves()) uf.UfDRollGrooveWidth[0] = float32(rolldata.GetUfRollGrooveWidth0()) uf.UfDRollGrooveWidth[1] = float32(rolldata.GetUfRollGrooveWidth1()) uf.UfDRollGrooveWidth[2] = float32(rolldata.GetUfRollGrooveWidth2()) uf.UfDRollGrooveWidth[3] = float32(rolldata.GetUfRollGrooveWidth3()) uf.UfDRollGrooveWidth[4] = float32(rolldata.GetUfRollGrooveWidth4()) uf.UfDRollGrooveWidth[5] = float32(rolldata.GetUfRollGrooveWidth5()) uf.UfDRollGrooveWidth[6] = float32(rolldata.GetUfRollGrooveWidth6()) uf.UfDRollGrooveWidth[7] = float32(rolldata.GetUfRollGrooveWidth7()) uf.UfDRollGrooveWidth[8] = float32(rolldata.GetUfRollGrooveWidth8()) uf.UfDRollGrooveWidth[9] = float32(rolldata.GetUfRollGrooveWidth9()) uf.UfDRollGrooveStiffnessTop[0] = float32(rolldata.GetUfRollGrooveStiffnessTop0()) uf.UfDRollGrooveStiffnessTop[1] = float32(rolldata.GetUfRollGrooveStiffnessTop1()) uf.UfDRollGrooveStiffnessTop[2] = float32(rolldata.GetUfRollGrooveStiffnessTop2()) uf.UfDRollGrooveStiffnessTop[3] = float32(rolldata.GetUfRollGrooveStiffnessTop3()) uf.UfDRollGrooveStiffnessTop[4] = float32(rolldata.GetUfRollGrooveStiffnessTop4()) uf.UfDRollGrooveStiffnessTop[5] = float32(rolldata.GetUfRollGrooveStiffnessTop5()) uf.UfDRollGrooveStiffnessTop[6] = float32(rolldata.GetUfRollGrooveStiffnessTop6()) uf.UfDRollGrooveStiffnessTop[7] = float32(rolldata.GetUfRollGrooveStiffnessTop7()) uf.UfDRollGrooveStiffnessTop[8] = float32(rolldata.GetUfRollGrooveStiffnessTop8()) uf.UfDRollGrooveStiffnessTop[9] = float32(rolldata.GetUfRollGrooveStiffnessTop9()) uf.UfDRollGrooveStiffnessBot[0] = float32(rolldata.GetUfRollGrooveStiffnessBot0()) uf.UfDRollGrooveStiffnessBot[1] = float32(rolldata.GetUfRollGrooveStiffnessBot1()) uf.UfDRollGrooveStiffnessBot[2] = float32(rolldata.GetUfRollGrooveStiffnessBot2()) uf.UfDRollGrooveStiffnessBot[3] = float32(rolldata.GetUfRollGrooveStiffnessBot3()) uf.UfDRollGrooveStiffnessBot[4] = float32(rolldata.GetUfRollGrooveStiffnessBot4()) uf.UfDRollGrooveStiffnessBot[5] = float32(rolldata.GetUfRollGrooveStiffnessBot5()) uf.UfDRollGrooveStiffnessBot[6] = float32(rolldata.GetUfRollGrooveStiffnessBot6()) uf.UfDRollGrooveStiffnessBot[7] = float32(rolldata.GetUfRollGrooveStiffnessBot7()) uf.UfDRollGrooveStiffnessBot[8] = float32(rolldata.GetUfRollGrooveStiffnessBot8()) uf.UfDRollGrooveStiffnessBot[9] = float32(rolldata.GetUfRollGrooveStiffnessBot9()) uf.UfDRollGroovePos[0] = float32(rolldata.GetUfRollGroovePos0()) uf.UfDRollGroovePos[1] = float32(rolldata.GetUfRollGroovePos1()) uf.UfDRollGroovePos[2] = float32(rolldata.GetUfRollGroovePos2()) uf.UfDRollGroovePos[3] = float32(rolldata.GetUfRollGroovePos3()) uf.UfDRollGroovePos[4] = float32(rolldata.GetUfRollGroovePos4()) uf.UfDRollGroovePos[5] = float32(rolldata.GetUfRollGroovePos5()) uf.UfDRollGroovePos[6] = float32(rolldata.GetUfRollGroovePos6()) uf.UfDRollGroovePos[7] = float32(rolldata.GetUfRollGroovePos7()) uf.UfDRollGroovePos[8] = float32(rolldata.GetUfRollGroovePos8()) uf.UfDRollGroovePos[9] = float32(rolldata.GetUfRollGroovePos9()) uf.UfDRollGrooveSharp[0] = int32(rolldata.GetUfRollGrooveSharp0()) uf.UfDRollGrooveSharp[1] = int32(rolldata.GetUfRollGrooveSharp1()) uf.UfDRollGrooveSharp[2] = int32(rolldata.GetUfRollGrooveSharp2()) uf.UfDRollGrooveSharp[3] = int32(rolldata.GetUfRollGrooveSharp3()) uf.UfDRollGrooveSharp[4] = int32(rolldata.GetUfRollGrooveSharp4()) uf.UfDRollGrooveSharp[5] = int32(rolldata.GetUfRollGrooveSharp5()) uf.UfDRollGrooveSharp[6] = int32(rolldata.GetUfRollGrooveSharp6()) uf.UfDRollGrooveSharp[7] = int32(rolldata.GetUfRollGrooveSharp7()) uf.UfDRollGrooveSharp[8] = int32(rolldata.GetUfRollGrooveSharp8()) uf.UfDRollGrooveSharp[9] = int32(rolldata.GetUfRollGrooveSharp9()) uf.UfDRollActualShimpsTop = float32(rolldata.GetUfActualShimpsHtp()) uf.UfDRollActualShimpsBot = float32(rolldata.GetUfActualShimpsHbo()) uf.UfDRollThrustPlate = float32(rolldata.GetUfRollThrustPlate()) } func (uf *L2Uf) ToBytes() ([]byte, error) { bs := make([]byte, unsafe.Sizeof(uf)) buffer := bytes.NewBuffer(bs) if err := binary.Write(buffer, binary.LittleEndian, uf); err != nil { return nil, err } return buffer.Bytes(), nil }