출력 모듈(CFDI)의 제어 파일은 아래에 설명된 digital-intput»{module_address}의 0~7, channel » 0~15 디렉터리의 state 파일(state.bin, state.txt)을 통해 제어됩니다.
☞ “CFNET-FS 개발 환경 구성이 완료되지 않았다면, 아래 링크를 참고하여 먼저 설정을 진행해 주세요.”
module_address의 모듈 주소(0~7)별 디렉터리에는, 16개 채널(포트)을 모두 제어할 수 있는 state.bin 와 state.txt 파일이 포함되어 있습니다.
{mount-point}/digital-intput/{module_address}/$ tree -L 2 /tmp/cfnet-fs/digital-input/ /tmp/cfnet-fs/digital-input/ ├── 0 │ ├── channel │ ├── state.bin │ └── state.txt ├── 1 │ ├── channel │ ├── state.bin │ └── state.txt ... 7
다음과 같은 2개의 상태 파일이 존재합니다
디지털 입력 모듈의 입력 상태가 변화 시 state.txt, state.bin 상태 파일이 동시에 반영됩니다.
텍스트 파일(.txt)은 사용자 입력·표시에 적합하며, 바이너리 파일(.bin)은 연산 및 논리 처리가 필요한 경우에 적합합니다.
CFNET-FS 파일 시스템을 이용하여 Shell Script, C#, Python, C 언어에서 디지털 입력모듈(CFDI)의 모든 채널(포트)상태를 읽는 방법을 보여줍니다.
/tmp/cfnet-fs/digital-intput/0/state.txt/tmp/cfnet-fs/digital-intput/0/state.bin$ cat /tmp/cfnet-fs/digital-input/0/state.txt
const string DIGITAL_INPUT_0 = "/tmp/cfnet-fs/digital-input/0/state.txt"; string state = File.ReadAllText(DIGITAL_INPUT_0).Trim(); Console.WriteLine(state);
const string DIGITAL_INPUT_0 = "/tmp/cfnet-fs/digital-input/0/state.bin"; var bytes = File.ReadAllBytes(DIGITAL_INPUT_0); var state = BitConverter.ToUInt16(bytes, 0); Console.WriteLine(state);
DIGITAL_INPUT_0 = "/tmp/cfnet-fs/digital-input/0/state.txt" state = open(DIGITAL_OUTPUT_0).read().strip() print(state)
DIGITAL_OUTPUT_0 = "/tmp/cfnet-fs/digital-input/0/state.bin" with open(DIGITAL_INPUT_0, "rb") as f: data = f.read(2) state = (data[1] << 8) | data[0] # little-endian print(state)
#include <stdio.h> #define DIGITAL_INPUT_0 "/tmp/cfnet-fs/digital-input/0/state.txt" int main(void) { FILE *f = fopen(DIGITAL_INPUT_0, "r"); // 16 plus the null-terminating character char buffer[17] = {0}; fgets(buffer, sizeof(buffer) - 1, f); printf("%s\n", buffer); fclose(f); return 0; }
#include <stdio.h> #define DIGITAL_INPUT_0"/tmp/cfnet-fs/digital-input/0/state.bin" int main(void) { FILE *f = fopen(DIGITAL_INPUT_0, "rb"); uint16_t state; fread(&state, sizeof(uint16_t), 1, f); printf("%u\n", state); fclose(f); return 0; }
channel 하위 디렉터리 0~15에는 각각의 개별 채널(포트 0~15)에 대응되는 state.bin과 state.txt 파일이 있으며, 이 파일들을 통해 각 채널의 입력 상태를 읽을 수 있습니다.
{mount-point}/digital-intput/{module_address}/channel/{channel_address}/$ tree /tmp/cfnet-fs/digital-output/0/ /tmp/cfnet-fs/digital-intput/0/ ├── channel │ ├── 0 │ │ ├── state.bin │ │ └── state.txt │ ├── 1 │ │ ├── state.bin │ │ └── state.txt │ ... 15
각 디지털 입력 채널에는 두 가지 상태 파일이 제공됩니다.
각 채널(입력 포트)의 상태 변화 시 state.txt, state.bin 상태 파일에 동시에 반영됩니다.
텍스트 파일(.txt)은 사용자 입력·표시에 적합하며, 바이너리 파일(.bin)은 연산 및 논리 처리가 필요한 경우에 적합합니다.
CFNET-FS 파일 시스템을 이용하여 Shell Script, C#, Python, C 언어에서 디지털 입력모듈(CFDO)의 특정 채널(포트)의 상태를 읽어오는 방법을 보여줍니다.
tmp/cfnet-fs/digital-intput/0/channel/3/state.txttmp/cfnet-fs/digital-intput/0/channel/3/state.bin$ cat /tmp/cfnet-fs/digital-output/0/channel/3/state.txt
const string DIGITAL_INPUT_0_CHANNEL_3 = "/tmp/cfnet-fs/digital-input/0/channel/3/state.txt"; string state = File.ReadAllText(DIGITAL_INPUT_0_CHANNEL_3).Trim(); Console.WriteLine(state);
const string DIGITAL_INPUT_0_CHANNEL_3 = "/tmp/cfnet-fs/digital-input/0/channel/3/state.bin"; var bytes = File.ReadAllBytes(DIGITAL_INPUT_0_CHANNEL_3); var state = BitConverter.ToBoolean(bytes, 0); Console.WriteLine(state);
DIGITAL_INPUT_0_CHANNEL_3 = "/tmp/cfnet-fs/digital-input/0/channel/3/state.txt" with open(DIGITAL_INPUT_0_CHANNEL_3) as f: state = f.read().strip() print(state)
DIGITAL_INPUT_0_CHANNEL_3 = "/tmp/cfnet-fs/digital-input/0/channel/3/state.bin" with open(DIGITAL_INPUT_0_CHANNEL_3, "rb") as f: bytes_data = f.read(1) state = bool(bytes_data[0]) print(state)
#include <stdio.h> #define DIGITAL_INPUT_0_CHANNEL_3 "/tmp/cfnet-fs/digital-input/0/channel/3/state.txt" int main(void) { FILE *f = fopen(DIGITAL_INPUT_0_CHANNEL_3, "r"); char buffer[3] = {0}; fgets(buffer, sizeof(buffer), f); printf("%s", buffer); fclose(f); return 0; }
#include <stdio.h> #define DIGITAL_INPUT_0_CHANNEL_3 "/tmp/cfnet-fs/digital-input/0/channel/3/state.bin" int main(void) { FILE *f = fopen(DIGITAL_INPUT_0_CHANNEL_3, "rb"); unsigned char state; fread(&state, sizeof(unsigned char), 1, f); printf("%u\n", state); fclose(f); return 0; }