Moxa UC-8416-T-LX Инструкция по эксплуатации онлайн [70/90] 170872

Moxa UC-8410-LX Инструкция по эксплуатации онлайн [70/90] 170868
UC-8410/8416/8418/8430 Programmer's Guide
5-18
unsigned char byte3;
unsigned char byte4;
unsigned char byte5;
unsigned char byte6;
unsigned char byte7;
unsigned char byte8;
} byte;
} can_data_u;
typedef struct user_frame_struct {
int id;
int info; // RTR & extend ID flag
#define USER_RTR BIT(0)
#define USER_EXTEND_ID BIT(1)
int data_length;
can_data_u data;
} user_frame_t;
// ioctl command code
#define MOXACAN_IOCTL_SET_BAUD_RATE 0x100
#define MOXACAN_IOCTL_GET_BAUD_RATE 0x101
#endif // _MOXACAN_IOCTL_H
Then we can include this header for CAN programming
We can open /dev/can[n] to use the CAN device. Then read(), write() or ioctl() the device files. If you complete
the using, you should close() this file to release this device.
#include <stdio.h>
#include <stdlib.h>
#include <fcntl.h>
#include <string.h>
#include “moxacan_ioctl.h”
#define PORT1_NAME “/dev/can0
#define PORT2_NAME “/dev/can1
int main(int argc, char *argv[])
{ int fd1, fd2, i, baudrate;
user_frame_t txframe, rxframe;
fd1 = open(PORT1_NAME, O_RDWR);
if ( fd1 < 0 ) {
printf(“Open %s fail !\n”, PORT1_NAME);
return -1;
}
fd2 = open(PORT2_NAME, O_RDWR);
if ( fd2 < 0 ) {
printf(“Open %s fail !\n”, PORT2_NAME);
return -1;
}
baudrate = 100000;
ioctl(fd1, MOXACAN_IOCTL_SET_BAUD_RATE, &baudrate);
ioctl(fd2, MOXACAN_IOCTL_SET_BAUD_RATE, &baudrate);
memset(&txframe, 0, sizeof(txframe));
memset(&txframe, 0, sizeof(rxframe));
txframe.id = 12;
txframe.data_length = MAX_CAN_DATA_LENGTH;
txframe.info |= USER_EXTEND_ID;
for ( i=0; i<MAX_CAN_DATA_LENGTH; i++ )
txframe.data.array[i] = 0x30+i;

Содержание

Скачать