老 姚
/
modbusServer
modbus slaver
main.cpp
- Committer:
- yao6116601
- Date:
- 2019-09-17
- Revision:
- 0:998a68b8defc
File content as of revision 0:998a68b8defc:
#include "mbed.h" #include "modbus.h" DigitalOut led1(PC_6); DigitalIn DI0(PF_5); DigitalIn DI1(PF_3); DigitalIn DI2(PF_7); DigitalIn DI3(PF_6); DigitalIn DI4(PA_5); DigitalIn DI5(PB_8); DigitalIn DI6(PF_10); DigitalIn DI7(PF_4); DigitalIn DI8(PF_8); DigitalIn DI9(PF_9); DigitalOut DO0(PE_11); DigitalOut DO1(PE_7); DigitalOut DO2(PB_0); DigitalOut DO3(PA_4); DigitalOut DO4(PC_2); DigitalOut DO5(PF_2); DigitalOut DO6(PF_0); DigitalOut DO7(PF_1); DigitalOut DO8(PC_0); DigitalOut DO9(PC_3); // DigitalOut HF(PD_14); Modbus slave(PB_6,PB_7,PD_12,9600); uint8_t myAddress=0x01; uint16_t data[32]; uint16_t readDI(uint16_t address) { uint16_t terminal=address-100; switch(terminal) { case 0:{ if (DI0) return 0xffff; else return 0; } case 1:{ if (DI1) return 0xffff; else return 0; } case 2:{ if (DI2) return 0xffff; else return 0; } case 3:{ if (DI3) return 0xffff; else return 0; } case 4:{ if (DI4) return 0xffff; else return 0; } case 5:{ if (DI5) return 0xffff; else return 0; } case 6:{ if (DI6) return 0xffff; else return 0; } case 7:{ if (DI7) return 0xffff; else return 0; } case 8:{ if (DI8) return 0xffff; else return 0; } case 9:{ if (DI9) return 0xffff; else return 0; } } return 0; } uint16_t writeDO(uint16_t address,uint16_t value) { uint16_t terminal=address-100; switch(terminal) { case 0:{ DO0=value&0x0001; if (DO0) return 0xffff; else return 0; } case 1:{ DO1=value&0x0001; if (DO1) return 0xffff; else return 0; } case 2:{ DO2=value&0x0001; if (DO2) return 0xffff; else return 0; } case 3:{ DO3=value&0x0001; if (DO3) return 0xffff; else return 0; } case 4:{ DO4=value&0x0001; if (DO4) return 0xffff; else return 0; } case 5:{ DO5=value&0x0001; if (DO5) return 0xffff; else return 0; } case 6:{ DO6=value&0x0001; if (DO6) return 0xffff; else return 0; } case 7:{ DO7=value&0x0001; if (DO7) return 0xffff; else return 0; } case 8:{ DO8=value&0x0001; if (DO8) return 0xffff; else return 0; } case 9:{ DO9=value&0x0001; if (DO9) return 0xffff; else return 0; } } return 0; } void waitQuery() { uint8_t address; uint8_t function; uint16_t startAddress; uint16_t points; int i; if(slave.waitQuery(address,function,startAddress,points)) { if ((address==myAddress)&&(function==0x03)) { //read reigster uint16_t p=startAddress; for (i=0;i<points;i++) { data[i]= readDI(p++); } slave.sendResponse((uint8_t *)data,(uint8_t)(points*2)); } else if ((address==myAddress)&&(function==0x06)) { //write register data[0]= writeDO(startAddress,points); slave.sendResponse((uint8_t *)data,2); } } } int main() { int i; printf("modbus controller\n"); HF=1; while (true) { waitQuery(); led1 = !led1; } }