Page 1 of 1

Using schedule function problem

Posted: Mon 14. Mar 2022, 10:35
by T.Lance
Hi there, I want to send message via LIN using schedule table. I would like to know the order of using the API.
Current sequence as following. (P.S. I use the same Frame Id in each function.)
LIN_SetFrameEntry() -> LIN_SetSchedule() -> LIN_UpdateByteArray() -> LIN_StartSchedule()
But the data I sent is not updated. Am I using the wrong order?

Re: Using schedule function problem

Posted: Mon 14. Mar 2022, 11:49
by M.Riedl
Hi,

Yes, after LIN_StartSchedule you should call LIN_UpdateByteArray, not before.
Because LIN_StartSchedule initializes the data of the LIN frame.
You can also define the initialization data of the frame with the InitialData of the TLINFrameEntry.

Regards
M.Riedl

Re: Using schedule function problem

Posted: Tue 15. Mar 2022, 03:50
by T.Lance
Thank for your answer. I am not setting the TLINFrameEntry.Flags. So when I set this parameter to FRAME_FLAG_RESPONSE_ENABLE. I can update the data.

But I have another question. I use the function LIN_SetSchedule and LIN_StartSchedule. LIN_SetSchedule as following.
I set iSlotCount = 3, but only two frame entry are scheduled. The frame ID are 00h and 12h.

Code: Select all

TLINScheduleSlot mySlot[8] ;
mySlot[0].Delay = 1000;
mySlot[0].Type = sltUnconditional ;
mySlot[0].CountResolve = 0x00;
mySlot[0].FrameId[0] = 0x12 ;
mySlot[0].FrameId[1] = 0x22 ;
mySlot[0].FrameId[2] = 0x33 ;
TLINError res = LIN_SetSchedule(client, hardware, 0, mySlot, 3);
Please help me.
Maybe you can give me the sample code to use schedule function or polling transmit data via LIN to device.

Re: Using schedule function problem

Posted: Tue 15. Mar 2022, 16:05
by M.Riedl
Hi,

I think you misunderstood something.
The slot entry's FrameId array property can only be fully used if the Type is set to sltSporadic.
If you decide to use normal unconditional slots (Type = sltUnconditional), you can only use the first element of the FrameId array.
Before that you need to configure the corresponding frame IDs (0x11, 0x22, 0x33) with the LIN_SetFrameEntry function.

Here a C# sample code:

Code: Select all

var entry = new Peak.Lin.TLINFrameEntry();

// Get and configure frame ID 0x12
entry.FrameId = 0x12;
if (Peak.Lin.PLinApi.GetFrameEntry(hHw, ref entry) == Peak.Lin.TLINError.errOK)
{
    entry.Direction = Peak.Lin.TLINDirection.dirPublisher;
    entry.ChecksumType = Peak.Lin.TLINChecksumType.cstEnhanced;
    entry.Length = 2;
    entry.Flags = Peak.Lin.PLinApi.FRAME_FLAG_RESPONSE_ENABLE;
    //Optionally set the initialization data
    //entry.InitialData[0] = 0x01;
    //entry.InitialData[1] = 0x02;
    Peak.Lin.PLinApi.SetFrameEntry(hClient, hHw, ref entry);
}
// Repeat it for ID 0x22
entry.FrameId = 0x22;
if (Peak.Lin.PLinApi.GetFrameEntry(hHw, ref entry) == Peak.Lin.TLINError.errOK)
{
    // Here configure ID 0x22
}
// Repeat it for ID 0x33
entry.FrameId = 0x33;
if (Peak.Lin.PLinApi.GetFrameEntry(hHw, ref entry) == Peak.Lin.TLINError.errOK)
{
    // Here configure ID 0x33
}

var slots = new Peak.Lin.TLINScheduleSlot[3];

// Configure first slot
slots[0] = new Peak.Lin.TLINScheduleSlot();
slots[0].Type = Peak.Lin.TLINSlotType.sltUnconditional;
slots[0].FrameId = new byte[8];
slots[0].FrameId[0] = 0x12;
slots[0].Delay = 1000;
slots[0].CountResolve = 0;

// Configure second slot
slots[1] = new Peak.Lin.TLINScheduleSlot();
slots[1].Type = Peak.Lin.TLINSlotType.sltUnconditional;
slots[1].FrameId = new byte[8];
slots[1].FrameId[0] = 0x22;
// Here configure the rest

// Configure third slot
slots[2] = new Peak.Lin.TLINScheduleSlot();
slots[2].Type = Peak.Lin.TLINSlotType.sltUnconditional;
slots[2].FrameId = new byte[8];
slots[2].FrameId[0] = 0x33;
// Here configure the rest

if (Peak.Lin.PLinApi.SetSchedule(hClient, hHw, 0, slots, 3) == Peak.Lin.TLINError.errOK)
    Peak.Lin.PLinApi.StartSchedule(hClient, hHw, 0);

For further information see also the PLIN API Documentation and the following topics:
  • Getting Started -> Configuring the Hardware -> Programming a LIN Advanced-Master
  • Getting Started -> The LIN Frame Entry
  • Getting Started -> The LIN Schedule Slot
Regards
M.Riedl

Re: Using schedule function problem

Posted: Wed 16. Mar 2022, 03:09
by T.Lance
Thank you M.Riedl. As you said, I misunderstood about slot entry. It is working now.
Thank you for your kind help.