RS36
main.cpp@0:5da6d25de6c5, 2022-03-17 (annotated)
- Committer:
- YYL5213
- Date:
- Thu Mar 17 12:06:42 2022 +0000
- Revision:
- 0:5da6d25de6c5
RS36
Who changed what in which revision?
| User | Revision | Line number | New 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 | } |