RS36

Dependencies:   mbed

Committer:
YYL5213
Date:
Thu Mar 17 12:06:42 2022 +0000
Revision:
0:5da6d25de6c5
RS36

Who changed what in which revision?

UserRevisionLine numberNew contents of line
YYL5213 0:5da6d25de6c5 1 #include "mbed.h"
YYL5213 0:5da6d25de6c5 2 Serial pc(SERIAL_TX, SERIAL_RX);
YYL5213 0:5da6d25de6c5 3 Serial modbus(PC_10, PC_11);
YYL5213 0:5da6d25de6c5 4 uint8_t get[13];
YYL5213 0:5da6d25de6c5 5 float tem[29];
YYL5213 0:5da6d25de6c5 6
YYL5213 0:5da6d25de6c5 7 uint16_t CRC16(uint8_t *bpMsgStartAddress, uint8_t bDataLen)
YYL5213 0:5da6d25de6c5 8 {
YYL5213 0:5da6d25de6c5 9 uint16_t crc = 0xffff;
YYL5213 0:5da6d25de6c5 10 uint8_t u8tmp;
YYL5213 0:5da6d25de6c5 11 for (int i=0; i<bDataLen; i++) {
YYL5213 0:5da6d25de6c5 12 crc ^= *bpMsgStartAddress++;
YYL5213 0:5da6d25de6c5 13 for (int n=0; n<8; n++) {
YYL5213 0:5da6d25de6c5 14 u8tmp = crc & 1;
YYL5213 0:5da6d25de6c5 15 crc >>= 1;
YYL5213 0:5da6d25de6c5 16 crc &= 0x7fff;
YYL5213 0:5da6d25de6c5 17 if (u8tmp == 1) {
YYL5213 0:5da6d25de6c5 18 crc ^= 0xa001;
YYL5213 0:5da6d25de6c5 19 }
YYL5213 0:5da6d25de6c5 20 }
YYL5213 0:5da6d25de6c5 21 }
YYL5213 0:5da6d25de6c5 22 return crc;
YYL5213 0:5da6d25de6c5 23 }
YYL5213 0:5da6d25de6c5 24
YYL5213 0:5da6d25de6c5 25 void get_data(int len)
YYL5213 0:5da6d25de6c5 26 {
YYL5213 0:5da6d25de6c5 27 int i=0;
YYL5213 0:5da6d25de6c5 28 while(i<len) {
YYL5213 0:5da6d25de6c5 29 if(modbus.readable() ) {
YYL5213 0:5da6d25de6c5 30 get[i]=modbus.getc();
YYL5213 0:5da6d25de6c5 31 i=i+1;
YYL5213 0:5da6d25de6c5 32 }
YYL5213 0:5da6d25de6c5 33 }
YYL5213 0:5da6d25de6c5 34 }
YYL5213 0:5da6d25de6c5 35
YYL5213 0:5da6d25de6c5 36 void put_data(int address,int len)
YYL5213 0:5da6d25de6c5 37 {
YYL5213 0:5da6d25de6c5 38 uint8_t put[8]; // 读取4路温度
YYL5213 0:5da6d25de6c5 39 put[0]=address;
YYL5213 0:5da6d25de6c5 40 put[1]=0x03;
YYL5213 0:5da6d25de6c5 41 put[2]=0x00;
YYL5213 0:5da6d25de6c5 42 put[3]=0x28;
YYL5213 0:5da6d25de6c5 43 put[4]=0x00;
YYL5213 0:5da6d25de6c5 44 put[5]=0x04;
YYL5213 0:5da6d25de6c5 45 uint16_t crc=CRC16(put,6);
YYL5213 0:5da6d25de6c5 46 //pc.printf("crc:%x,%x,%x",crc,crc&0xFF,(crc&0xFF00)>>8);
YYL5213 0:5da6d25de6c5 47 put[6]=crc&0xFF;
YYL5213 0:5da6d25de6c5 48 put[7]=(crc&0xFF00)>>8;
YYL5213 0:5da6d25de6c5 49 for(int i=0; i<len; i++)
YYL5213 0:5da6d25de6c5 50 modbus.putc(put[i]);
YYL5213 0:5da6d25de6c5 51 }
YYL5213 0:5da6d25de6c5 52
YYL5213 0:5da6d25de6c5 53 void read_tem()
YYL5213 0:5da6d25de6c5 54 {
YYL5213 0:5da6d25de6c5 55 for(int i=0; i<7; i++) {
YYL5213 0:5da6d25de6c5 56 put_data(i+1,8);
YYL5213 0:5da6d25de6c5 57 get_data(13);
YYL5213 0:5da6d25de6c5 58 tem[1+4*i]=(get[3]*256.0+get[4])/10.0f;//一通道
YYL5213 0:5da6d25de6c5 59 tem[2+4*i]=(get[5]*256.0+get[6])/10.0f;//二通道
YYL5213 0:5da6d25de6c5 60 tem[3+4*i]=(get[7]*256.0+get[8])/10.0f;//三通道
YYL5213 0:5da6d25de6c5 61 tem[4+4*i]=(get[9]*256.0+get[10])/10.0f;//四通道
YYL5213 0:5da6d25de6c5 62 wait_ms(5);
YYL5213 0:5da6d25de6c5 63 }
YYL5213 0:5da6d25de6c5 64 }
YYL5213 0:5da6d25de6c5 65
YYL5213 0:5da6d25de6c5 66 int main()
YYL5213 0:5da6d25de6c5 67 {
YYL5213 0:5da6d25de6c5 68 pc.baud(115200);
YYL5213 0:5da6d25de6c5 69 modbus.baud(9600);
YYL5213 0:5da6d25de6c5 70 pc.printf("PC connected!\n");
YYL5213 0:5da6d25de6c5 71 while(1) {
YYL5213 0:5da6d25de6c5 72 read_tem();
YYL5213 0:5da6d25de6c5 73 pc.printf("d0:");
YYL5213 0:5da6d25de6c5 74 for(int i=1; i<28; i++) {
YYL5213 0:5da6d25de6c5 75 pc.printf("%.1f,",tem[i]);
YYL5213 0:5da6d25de6c5 76 }
YYL5213 0:5da6d25de6c5 77 pc.printf("%.1f",tem[28]);
YYL5213 0:5da6d25de6c5 78 pc.printf("\n");
YYL5213 0:5da6d25de6c5 79 wait(0.1);
YYL5213 0:5da6d25de6c5 80 }
YYL5213 0:5da6d25de6c5 81 }